如何将 EGLD 值发送到智能合约端点?

Bro*_*der 5 smartcontracts multiversx

我有一个智能合约方法,如下所示:

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

我将其称为交易中的 5 EGLD 值以及 tx 数据

myEndpoint@05@aa

但 tx 结果返回给我wrong number of arguments

我究竟做错了什么?

Bro*_*der 8

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

因此,在这种情况下,您的呼叫数据将为myEndpoint@aa,不带付款参数。

附带说明一下,如果这是接受 EGLD 之外的其他令牌的端点,则您必须在数据字段中指定令牌和金额,例如: ESDTNFTTransfer@TokenIdentifier_in_hex@TokenNonce_in_hex@TokenValue_in_hex@Contract_address_in_hex@myEndpoint_in_hex@aa

ESDTNFTTransfer函数发送任何类型的 ESDT 令牌,带或不带随机数。如果令牌没有随机数(可替换),您可以将 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 代币上的 MultiversX 文档以了解更多详细信息。