【问题标题】:invalid token index when issuing token发行令牌时令牌索引无效
【发布时间】:2022-10-14 19:39:17
【问题描述】:

在 Elrond 区块链上部署 NFT 智能合约后,我正在尝试使用 sn-ps 发行代币:

  erdpy --verbose contract call ${ADDRESS} --recall-nonce --pem=${ALICE} --gas-limit=${GAS_LIMIT} \
    --function="issueToken" \
    --value ${MINT_COST} \
    --arguments ${ISSUE_TOKEN_ARGUMENTS} \
    --proxy=${PROXY} --chain=${CHAINID} --send \
    --outfile="${MY_LOGS}/issueToken.json"
}

但我收到错误“无效的令牌索引”

【问题讨论】:

    标签: code-snippets elrond erdpy


    【解决方案1】:

    这是 issueToken 端点

    #[only_owner]
        #[payable("EGLD")]
        #[endpoint(issueToken)]
        fn issue_token(
            &self,
            #[payment] issue_cost: BigUint,
            token_name: ManagedBuffer,
            token_ticker: ManagedBuffer,
        ) -> SCResult<AsyncCall> {
            require!(self.nft_token_id().is_empty(), "Token already issued");
    
            Ok(self
                .send()
                .esdt_system_sc_proxy()
                .issue_non_fungible(
                    issue_cost,
                    &token_name,
                    &token_ticker,
                    NonFungibleTokenProperties {
                        can_freeze: true,
                        can_wipe: true,
                        can_pause: true,
                        can_change_owner: false,
                        can_upgrade: false,
                        can_add_special_roles: true,
                    },
                )
                .async_call()
                .with_callback(self.callbacks().issue_callback()))
        }
    

    【讨论】:

      【解决方案2】:

      由于令牌问题由您调用的智能合约管理(因为您正在调用该合约的issueToken 端点),最可能的原因是您没有将正确的参数传递给issueToken 端点。

      您必须首先知道您的合约对该端点的期望参数是什么,然后根据预期格式将它们传递给十六进制编码。

      对于您的特定情况,如果端点签名如下所示:

      #[only_owner]
      #[payable("EGLD")]
      #[endpoint(issueToken)]
      fn issue_token(
          &self,
          #[payment] issue_cost: BigUint,
          token_name: ManagedBuffer,
          token_ticker: ManagedBuffer,
      ) -> SCResult<AsyncCall>
      

      那么 $ISSUE_TOKEN_ARGUMENTS 应该包含如下内容:

      ISSUE_TOKEN_ARGUMENTS="str:MyTokenName str:MYTKNTICKER"
      

      【讨论】:

      • 你能分析一下我的答案吗?
      • 我更新了我的答案以反映您使用端点参数签名的最新响应。
      最近更新 更多