You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hedera Token Service(HTS)中Fungible Token元数据设置后memo为空问题

问题成因与解决方案

核心原因

Hedera Token Service的setMetadata方法仅接受Uint8Array类型的参数,你直接传入JavaScript对象会被SDK静默忽略,导致代币元数据未被正确设置。另外你提到的“memo字段为空”是因为混淆了metadata与memo两个独立字段——你的代码中并未调用setMemo()方法设置memo,自然该字段为空;而你实际要设置的metadata字段也因参数类型错误未生效。

修复步骤

  1. 将元数据对象序列化为JSON字符串,再编码为Uint8Array后传入setMetadata。
  2. 若确实需要设置memo字段,需额外调用setMemo()方法。

修改后的代码示例

// 定义元数据对象
const metadataObj = {
    "name": "My token name",
    "image": "http://path-to-my-image"
};

async function createFungibleToken() {
    let tokenCreateTx = await new TokenCreateTransaction()
        .setTokenName("Test")
        .setTokenSymbol("TEST")
        // 关键修复:将对象转为字节数组传入
        .setMetadata(new TextEncoder().encode(JSON.stringify(metadataObj)))
        // 若需要设置memo,添加此行
        .setMemo("自定义的memo内容")
        .setTokenType(TokenType.FungibleCommon)
        .setDecimals(2)
        .setInitialSupply(10000)
        .freezeWith(client);

    let tokenCreateSign = await tokenCreateTx.sign(privKey);
    let tokenCreateSubmit = await tokenCreateSign.execute(client);
    let tokenCreateRx = await tokenCreateSubmit.getReceipt(client);
    let tokenId = tokenCreateRx.tokenId;

    console.log(`Created token with ID: ${tokenId}`);
}

补充说明

  • 代币元数据本身没有强制结构要求,你可以用JSON、CBOR等任意格式序列化数据,只要最终转为Uint8Array即可。
  • SDK对setMetadata的参数类型不做校验,错误类型会直接静默丢弃,这是你看不到报错的原因。

内容的提问来源于stack exchange,提问作者bguiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:35:09