我对将使用Ink实现的智能合约有一些想法!基板上。
这些想法大多涉及呼叫者向智能合约中存款,智能合约将无限期持有,然后呼叫者可能会在未来的某个时候提取,这取决于其他因素。
我发现了一个允许呼叫者退出智能合约的例子:
https://github.com/paritytech/ink/blob/master/examples/contract-transfer/lib.rs
这暗示了调用者进行存款的一种方法——self.env().transferred_value()
方法表明调用者可以/已经发送/发送值。
我正在努力寻找一个将资金存入智能合约的例子。也许我错过了一些基本的东西?
理想情况下,我希望避免实现一个占用2个地址并从一个地址转移到另一个地址的函数(合约已经有了&知道自己的地址!(,而是倾向于调用者发送一个金额,并将其存入智能合约。
我认为这可能与智能合约方法有关,该方法不需要参数,但不确定,也不清楚合同将如何接收&持有资金。
正在寻找一个具体的代码示例来全面展示这是如何工作的,但也很感激任何评论来澄清或纠正我(很可能是不正确的(理解。
提前感谢!
您的合同的方法,即期望付款的方法,应该标记为#[ink(message, payable)]
,例如这里所示。在调用该方法期间,用户应指定以本国货币发送的金额(如果是polkadot-js
,则为应付方法的value
字段(。
在该方法中,您可以使用let amount = Self::env().transferred_value();
来获取已发送的金额。如果您的交易没有被拒绝,您的合同将在其余额中持有amount
代币。它的工作方式与Solidity相同。
获取合同Self::env().balance()
的当前余额。发送本地货币Self::env().transfer(to, amount)
。
也许检查一下这个例子会有用。