Solidity
如何創建一個接收資金的智能合約,顯示發送資金的地址?
function safeWithdrawal() public afterDeadline { if (!fundingGoalReached) { uint amount = balanceOf[msg.sender]; balanceOf[msg.sender] = 0; if (amount > 0) { if (msg.sender.send(amount)) { //is this a condition or a command? emit FundTransfer(msg.sender, amount, false); } else { balanceOf[msg.sender] = amount; } } }
我正在研究這段程式碼:https ://www.ethereum.org/crowdsale ,有一部分我不太明白(見上面的程式碼)。我的問題是合約如何遍歷向合約發送資金並將其發回的每個地址……我在上面的程式碼中看不到這一點。還有這個條件(見下面的程式碼)是什麼意思?據我了解,它看起來像一個命令而不是一個條件。
msg.sender.send(amount)
另外,您如何創建一個接收資金的智能合約,顯示將資金發送給客戶的地址?就像在眾籌 dapp 中,您想公開顯示地址以及他們發送了多少資金,甚至是他們發送資金的時間。
程式碼不會遍歷發件人。任何想要提款的人都必須呼叫該函式。如果眾籌失敗,則必須有人通知參與者(或者他們必須自己發現)他們應該從他們參與眾籌的同一地址呼叫此函式。然後發件人將他的 Eth 份額(儲存在 中
balanceOf
)發回。
msg.sender.send(amount)
嘗試將 Eth 發送回去的行。如果該函式呼叫成功(函式send
)它返回 booleantrue
。這只是以下的簡寫:boolean sendSucceeded = msg.sender.send(amount); if (sendSucceeded) { ...
至於您的最後一個問題:區塊鏈中的所有內容都是公開的,因此資訊已經公開。如果需要,您可以以某種方式使這些值更加可見,或者創建一個網站來顯示來自
balanceOf
變數的值。