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

How to send EGLD value to smart contract endpoint?

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

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

我在交易中用 5 个 EGLD 值和 tx 数据来调用它

myEndpoint@05@aa

但是 tx 结果 returns 我 wrong number of arguments.

我做错了什么?

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 作为随机数传递或将随机数 space 留空,如 @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 文档以了解更多详细信息。