Exceptions

需要幫助理解文件中的共享者(異常)範例

  • August 20, 2016

好的,這是來自solidity docs的程式碼:

contract Sharer {
   function sendHalf(address addr) returns (uint balance) {
       if (!addr.send(msg.value / 2))
           throw; // also reverts the transfer to Sharer
       return this.balance;
   }
}

我對這個例子的問題是評論:

// 也將傳輸還原到共享器

這很令人困惑,因為throw在我的理解中將轉移恢復到msg.sender和 Sharer 契約不是這裡的msg.sender。我在這裡想念什麼?

如果將程式碼更改為以下內容,會不會更容易混淆:

contract Sharer {
       function sendHalf(address addr) returns (uint balance) {
           if (!addr.send(msg.value / 2)) // if false reverts the transfer to Sharer
               throw;                     // reverts the transfer to msg.sender
           return this.balance;
       }
   }

這裡的“reverts”是指“取消”而不是“返還資金”。

因此,發件人進行交易,將資金發送到合約,並指定一個地址來拆分它們。這是“轉移到共享者”交易(我稱之為 TTST)。合約嘗試將資金發送到指定地址。如果失敗,則恢復 TTST,將資金返還給發送者。

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