Solidity

合約不向其他賬戶發送乙太幣

  • January 13, 2018

我創建了一個儲存使用者地址的合約,我想向儲存在數組中的所有使用者發送 1 個乙太幣。

這是我的程式碼

contract project{

   address public user;
   bytes32[10] name;
   address[10] customer;
   uint public i=0;
   function project(){
       user=msg.sender;
   }



   function add(bytes32 _name){
       name[i]=_name;
       customer[i]=msg.sender;
       i++;
   }

   function get_address() constant returns(address[10]){
       return customer;
   }

   function reward() {
       for(uint i=0;i<10;i++)
       {
           customer[i].send(1);
       }

   }

}

當我呼叫方法獎勵元遮罩執行交易但乙太沒有轉移。

請幫我。

你試圖讓合約發送它沒有的資金。它需要乙太來提取。餘額將從 0 開始,因此您需要添加 afunction() payable{}並發送一些乙太幣來使用。

我已經標記了程式碼的一部分*** unsafe ***以避免誤解。以這種方式處理資金存在更深層次的擔憂。一個好的下一步是檢查send()操作的成功/失敗,然後做出不同的響應。我讓它發出失敗消息或成功消息。

我添加了一些事件發射器,這樣你就可以看到發生了什麼。

希望能幫助到你。

contract project{

 address public user;
 bytes32[10] name;
 address[10] customer;
 uint public i=0;

 event LogDep (address sender,    uint amount, uint balance);
 event LogSent(address recipient, uint amount, uint balance);
 event LogErr (address recipient, uint amount, uint balance);

 function project(){
   user=msg.sender;
 }

 function depositFunds() public payable returns(bool success) {
   LogDep(msg.sender, msg.value, this.balance); 
   return true;
 }

 function add(bytes32 _name){
   name[i]=_name;
   customer[i]=msg.sender;
   i++;
 }

 function get_address() constant returns(address[10]){
   return customer;
 }

 function reward() {
   for(uint i=0;i<10;i++)
   {

       // *** unsafe pattern ***

       if(customer[i].send(1)) {
           LogSent(customer[i], 1, this.balance);
       } else {
           LogErr(customer[i], 1, this.balance);
       }
   }
 }
}

這是在 Remix 中展示它的工作。

如果您以前沒有看過 Remix,請轉到此處https://ethereum.github.io/browser-solidity並將程式碼粘貼到編譯器中。您可以與合約功能進行互動。

第 1 步:創建契約

在此處輸入圖像描述

第 2 步:向合約發送一些資金

10 wei 剛好夠向所有 10 個客戶發送 1 個。如果您發送較少,您將開始在第 3 步中看到發送失敗。

在此處輸入圖像描述

在此處輸入圖像描述

第 3 步:發送 txn 到 reward()

這次一定不要發送 wei/eth,因為這個函式是不收費的。

在此處輸入圖像描述

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