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

调用智能合约创建Hedera代币时遇INVALID_FULL_PREFIX_SIGNATURE_FOR_PRECOMPILE错误

解决Hedera Token创建时的INVALID_FULL_PREFIX_SIGNATURE_FOR_PRECOMPILE错误

错误原因

调用HederaTokenService预编译合约创建代币时,必须明确指定代币的核心密钥(如管理员密钥),否则预编译合约无法验证调用者的签名权限,触发该错误。你的代码中keys数组为空,未设置任何代币密钥,这是核心问题。

修复后的代码

uint8 public constant NUM_DECIMALS = 6;

function myCreateToken() public payable {
    // 创建管理员密钥,将调用者设为代币管理员
    IHederaTokenService.TokenKey[] memory keys = new IHederaTokenService.TokenKey[](1);
    keys[0] = IHederaTokenService.TokenKey({
        keyType: IHederaTokenService.KeyType.ADMIN,
        key: msg.sender
    });

    IHederaTokenService.Expiry memory expiry = IHederaTokenService.Expiry(
        0,
        msg.sender,
        8000000
    );

    IHederaTokenService.HederaToken memory token = IHederaTokenService
        .HederaToken(
            "MyToken",
            "MTT",
            msg.sender,
            "",
            true,
            10000000,
            false,
            keys,
            expiry
        );

    (int responseCode, ) = HederaTokenService.createFungibleToken(
        token,
        10000000,
        NUM_DECIMALS
    );

    require(responseCode == HederaResponseCodes.SUCCESS, "Token creation failed");
}

关键修改说明

  • 添加管理员TokenKey:明确将msg.sender设置为代币的管理员密钥,让预编译合约能验证调用者的签名权限,直接解决签名错误。
  • 完善错误提示:在require中增加错误信息,便于调试时快速定位问题。
  • 确保常量定义:显式定义NUM_DECIMALS,避免编译错误。

额外注意事项

  • 确保调用者账户拥有足够HBAR,用于支付代币创建手续费和自动续费的初始金额(8000000 tinybar = 0.008 HBAR)。
  • 测试环境下需确保账户已领取测试HBAR。
  • 自动续费账户(此处为msg.sender)需持续保持足够HBAR,否则代币会因续费失败过期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:33:12