5

我有一个看起来像这样的智能合约方法:

#[payable("EGLD")]
#[endpoint(myEndpoint)]
fn my_endpoint(&self, #[payment_amount] payment: BigUint, some_value: u64) { ... }

我在交易中使用 5 EGLD 值以及 tx 数据来调用它

myEndpoint@05@aa

但 tx 结果返回我wrong number of arguments

我究竟做错了什么?

4

1 回答 1

7

EGLD 中的付款参数是根据您在交易中指定的调用值自动填充的,因此您不需要将它们作为参数传递。

因此,在这种情况下,您的通话数据将是myEndpoint@aa,没有付款 arg。

附带说明一下,如果这是一个接受除 EGLD 之外的另一个令牌的端点,您将不得不在数据字段中指定令牌和数量,例如: ESDTNFTTransfer@TokenIdentifier_in_hex@TokenNonce_in_hex@TokenValue_in_hex@Contract_address_in_hex@myEndpoint_in_hex@aa

ESDTNFTTransfer函数发送任何类型的 ESDT 令牌,有或没有 nonce。如果令牌没有随机数(可替代),您可以将 00 作为随机数传递或将随机数空间留空,例如@TokenName_in_hex@@TokenValue_in_hex. 请注意,为了使用此功能,您必须编写一个将目标设置为您自己的事务。目标的实际地址将包含在数据字段中,而不是Contract_address_in_hex,使其成为ESDTNFTTransfer函数的参数。

例如,如果端点接受了两个令牌,那么您可以使用MultiESDTNFTTransfer@Contract_address_in_hex@02@Token1Identifier_in_hex@Token1Nonce_in_hex@Token1Value_in_hex@Token2Identifier_in_hex@Token2Nonce_in_hex@Token2Value_in_hex@myEndpoint_in_hex.

是的,您可以随时查看有关 ESDT 代币/NFT 代币的 Elrond 文档以获取更多详细信息。

于 2022-01-19T14:59:09.907 回答