So senden Sie ERC20-Token aus dem Vertrag

Ich habe einen Treuhandvertrag erstellt und möchte, dass sich die „Einzahlung“ in meinem eigenen ERC20-Token befindet, also habe ich die ERC20-Token an die Vertragsadresse gesendet. Der Vertrag ist unten einsehbar:

 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;
 }

}

Rufe ich nach dem Senden der Token an die Adresse jetzt einfach payoutToParticipant() vom Herausforderer oder Arbiter auf, um die Token zu senden? Oder wird es nur die 0 ETH senden? Warum muss der Vertrag die Transaktion nicht unterzeichnen, wie es ein Benutzer tun würde?

Danke

Antworten (1)

.send()Funktion sendet Ethereum aus dem Vertragsguthaben, nicht Token. Sie müssen also die Token-Funktion aufrufen transfer.

Außerdem rate ich Ihnen, immer send()innerhalb zu funktionieren require(), da send()keine Ausnahme ausgelöst wird und Ihr Debug-Prozess schwieriger sein könnte.

Warum muss der Vertrag die Transaktion nicht unterzeichnen, wie es ein Benutzer tun würde?

Denn der Vertrag kann seine eigenen Funktionen nicht selbst ausführen. Alle Funktionen können nur ausgelöst werden, wenn ein echter Benutzer eine signierte Transaktion mit dem richtigen dataFeld (enthält Informationen über die aufrufende Funktion und die Argumente) an das Ethereum-Netzwerk sendet.

Ok, vielen Dank, also muss ich den Code von 'challenger.send(this.balance);' Übertragung auf den Vertrag zu nennen. Ok das macht Sinn! Danke :)