Contract-Development

如何從合約發送 ERC20 代幣

  • January 29, 2018

我創建了一個託管合約,我希望“存款”在我自己的 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只有當真實使用者向乙太坊網路發送具有正確欄位(包含有關呼叫函式和參數的資訊)的簽名交易時,才能觸發所有功能。

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