Contract-Development
如何從合約發送 ERC20 代幣
我創建了一個託管合約,我希望“存款”在我自己的 ERC20 代幣中,所以我已經將 ERC20 代幣發送到合約地址。契約見下圖:
pragma solidity ^0.4.4; contract Escrow { address public challenger; address public participant; address public arbiter; function Escrow(address _participant, address _arbiter) { challenger = msg.sender; participant = _participant; arbiter = _arbiter; } function payoutToParticipant() { if(msg.sender == challenger || msg.sender == arbiter) { participant.send(this.balance); } } function refundToChallenger() { if(msg.sender == challenger || msg.sender == arbiter) { challenger.send(this.balance); } } function getBalance() constant returns (uint) { return this.balance; } }
將代幣發送到地址後,我現在是否只需從挑戰者或仲裁者呼叫 payoutToParticipant() 來發送代幣?還是只會發送 0 ETH?此外,為什麼合約不必像使用者那樣簽署交易?
謝謝
.send()
函式從合約餘額發送乙太坊,而不是代幣。所以你需要呼叫令牌transfer
函式。此外,我建議您始終在其中
send()
發揮作用,require()
因為send()
不會引發異常並且您的調試過程可能會更難。此外,為什麼合約不必像使用者那樣簽署交易?
因為合約不能自己執行它自己的功能。
data
只有當真實使用者向乙太坊網路發送具有正確欄位(包含有關呼叫函式和參數的資訊)的簽名交易時,才能觸發所有功能。