ERC20-Token können nicht von einem Vertrag übertragen werden

Ich habe Probleme, eine solide Vertragsmethode zu finden, um ERC20-Token von Adresse A nach B zu übertragen, vorausgesetzt, B hat approveaußerhalb des Vertrags angerufen und allowancefür A ausreichend eingerichtet. Der allowanceWert wird im Vertrag gut gedruckt, aber der transferFromFehler schlägt fehl. Mir fehlt etwas bei der Einrichtung des Eigentums und der Signaturen. Ich habe eine Problemumgehung, bei der dasselbe transferFromaußerhalb des Vertrags funktioniert, aber ich würde es gerne innerhalb tun.

Ich habe ein Beispiel-Repo mit Trüffeltests und einem Problem eingerichtet, um das Problem weiter zu beschreiben:

https://github.com/PulseBlockchain/oz-sample-app/issues/1

Dies ist ein Auszug aus einem größeren Projekt, wo ich ein ähnliches Problem habe.

Es sieht ähnlich aus wie diese Frage, ERC20 genehmigen und von einem Vertrag übertragen , außer dass ich approveaußerhalb tue und den Vertrag nur erledigen möchte transferFrom. Es sieht so aus, als ob es einen Weg gibt, transferaus einem Vertrag wie diesem Open Zeppelin- CrowdSaleVertrag herauszukommen , den ich in meinem Projekt habe. transferIch möchte in der Lage sein, entweder oder aus meinem eigenen Vertrag heraus zu tun transferFrom, und möchte die Eigentums- und Unterschriftsregeln darum besser verstehen.

Antworten (2)

Problem gelöst dank Debugging-Unterstützung von Gonçalo Sá . Hier ist das fixe Commit tl;dr: Du musst approvezuerst allowancean die Adresse des Vertrages anrufen tranferFromund dann den Wert an die endgültige Zieladresse überweisen.