Solidity
合約不向其他賬戶發送乙太幣
我創建了一個儲存使用者地址的合約,我想向儲存在數組中的所有使用者發送 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 開始,因此您需要添加 a
function() 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,因為這個函式是不收費的。