如何存入墨水!智能合约

Sas*_*imm 1 smartcontracts substrate rust-ink

我对智能合约有一些想法,我将使用 Ink 来实现它们!在基板上。

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

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

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

这暗示了调用者进行存款的方法 - 该self.env().transferred_value()方法表明调用者可以/已经发送/发送价值。

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

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

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

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

提前致谢!

小智 6

您的合同中期望付款的方法应标记为,#[ink(message, payable)]例如,如下所示。在调用该方法期间,用户应指定以本机货币发送的金额(如果polkadot-jsvalue应付方法的字段)。

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

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

也许检查该示例会很有用。