我有一个看起来像这样的智能合约方法:
#[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
。
我究竟做错了什么?
我有一个看起来像这样的智能合约方法:
#[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
。
我究竟做错了什么?
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 文档以获取更多详细信息。