Accounts
更新:如何在“address.transfer(amount)”中確定“付款人地址”?
考慮我們如下的函式:
address public recipient; function settlement(uint256 amount) public { recipient = msg.sender; recipient.transfer(amount); }
然後
recipient
通過如下呼叫此函式(使用web3.js
),嘗試接收amount
:contractInstance.methods.settlement(10).send({ from: '0xca35b7d915458ef540ade6068dfe2f44e8fa733c' }, function(error, result) { console.log(error); console.log(result) });
所以,地址
0xca35b7d915458ef540ade6068dfe2f44e8fa733c
必須收到10 wei
,但從哪裡來address
?誰是payer
?這10 wei
已經從which account address
? _同時,由於我們沒有使用**
payable
**函式settlement
,所以這個ether
傳輸會正確完成嗎?**更新:**如果我們
payable
在 中constructor
標記contract
,那麼我們需要標記settlement
函式嗎?並且將recipient
被發送amount
的?balance``contract
這一行:
recipient.transfer(amount);
將
amount
wei 從合約的餘額轉移到recipient
. 這一行:recipient = msg.sender;
表示收件人是呼叫該函式的帳戶。
因此,當您從地址呼叫函式時
0xca35b7d915458ef540ade6068dfe2f44e8fa733c
,使用參數10
,該地址將收到 10 wei,從合約中支付。(這是假設合約呼叫成功,只要合約至少有 10 wei 就應該成功。)同時,由於我們沒有使用支付結算功能,這個乙太幣轉賬會正確嗎?
payable
是的,只有在要接收乙太幣時才需要標記函式。你不需要標記發送乙太的函式。這篇博文可能有助於了解接收和發送乙太幣的基礎知識:https ://programtheblockchain.com/posts/2017/12/15/writing-a-contract-that-handles-ether/ 。