Solidity

如何創建一個接收資金的智能合約,顯示發送資金的地址?

  • August 20, 2018
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)它返回 boolean true。這只是以下的簡寫:

boolean sendSucceeded = msg.sender.send(amount);
if (sendSucceeded) { ...

至於您的最後一個問題:區塊鏈中的所有內容都是公開的,因此資訊已經公開。如果需要,您可以以某種方式使這些值更加可見,或者創建一個網站來顯示來自balanceOf變數的值。

引用自:https://ethereum.stackexchange.com/questions/56955