如何存入墨水!智能合约

How to deposit into an Ink! Smart Contract

我对将使用 Ink 实施的智能合约有一些想法!在基板上。

这些想法中的大多数都涉及调用者向智能合约中存入无限期持有的款项,然后调用者可能会在未来的某个时间取款,具体取决于其他因素。

我找到了一个允许调用者退出智能合约的例子:

https://github.com/paritytech/ink/blob/master/examples/contract-transfer/lib.rs

这暗示调用者进行存款的方法 - self.env().transferred_value() 方法建议调用者 can/has send/sent 值。

我正在努力寻找一个将资金存入智能合约的例子。也许我在这里遗漏了一些基本的东西?

理想情况下,我想避免实现一个函数,该函数需要 2 个地址并从一个地址转移到另一个地址(合约已经拥有并知道自己的地址!),而不是支持调用者发送金额,并将其存入智能合约。

我认为这可以通过智能合约方法实现,该方法不带参数但不确定且完全不清楚合约将如何接收和持有资金。

正在寻找一个具体的代码示例来展示它的完整工作原理,但也感谢任何评论来澄清或纠正我的(很可能是不正确的)理解。

提前致谢!

您的合同方法,预计付款应标记为 #[ink(message, payable)],例如 here。在调用该方法期间,用户应指定要以本机货币发送的金额(在 polkadot-js 的情况下,它是支付方法的 value 字段)。

在该方法中,您可以使用let amount = Self::env().transferred_value();来获取发送的金额。如果您的交易未被拒绝,您的合约将在其余额中保留 amount 个代币。它的工作方式与 Solidity.

中的相同

获取合约当前余额Self::env().balance()。发送本机货币 Self::env().transfer(to, amount).

也许检查一下 that example 会有用。