Problem mit autonomem Vertrag, der die Überweisung des erc20-Tokens für einen genehmigten Betrag aufruft

Es wird versucht, Geld mit dem ERC20-Token-Handle zu überweisen und „transferFrom“ aufzurufen. Angenommen, der spezifische Betrag wird vom Eigentümerkonto für die Vertragsadresse „MyContract“ vorab genehmigt.

contract StandardToken {
  function transferFrom(address from, address to, uint value);
}

contract MyContract{
  address _addrToken;
  function MyContract(address addrToken){
    _addrToken = addrToken;
  }

  event FundAcquired(address owner, uint256 amount);

  function acquireFund(address owner, uint256 amount){
    StandardToken token = StandardToken(tokenAddr);
    token.transferFrom(owner, this, amount);
    FundAcquired(owner, amount);
  }
}

Beim Aufruf über web3js ergibt die Funktion 'acquireFund' folgenden Fehler.

Ausnahme: Fehler: VM-Ausnahme beim Verarbeiten der Transaktion: Zurücksetzen

Kann mir jemand helfen, was das Problem ist?

Ich sehe keine Definition von tokenAddr. Sollte das _addrTokenstattdessen lauten? (Aber das kann nicht die Ursache für den Fehler sein, den Sie sehen, da es sich um ein Problem bei der Kompilierung handeln würde.) Ebenso sehe ich ownerüberhaupt keine Definition für.
Eigentümer ist ein Eingabeparameter für diese Funktion. Dieser Code schlägt während der Kompilierung fehl, daher wäre es großartig, wenn wir funktionierenden Code zur Analyse erhalten und auch Javascript-Code sehen könnten. Ich sehe nichts Falsches in diesem Codeproblem (außer tokenAddr). Vielleicht hat der Besitzer nicht genug Token?

Antworten (2)

Wechseln Sie tokenAddrzu _addrToken.

Es würde beim Kompilieren fehlschlagen. Der Code ist offensichtlich falsch, aber er lässt sich nicht kompilieren, also haben wir wohl den falschen Code zur Analyse bekommen.

Ich denke, Sie sollten zuerst Token.Approve(MyContract.address) ausführen, um die Zulage festzulegen, damit der Vertrag Token vom Eigentümer ausgeben kann.