Token-Transaktion zu einem Vertrag erkennen

Gibt es eine Möglichkeit zu erkennen, wann mein Vertrag Token erhält? Ich besitze den Token-Vertrag nicht, ich möchte nur die Adresse und die Menge der an meinen Vertrag gesendeten Token wissen.

Antworten (1)

Wenn Sie wissen, welches Token Ihr Vertrag erwartet, können Sie auf ein TransferEreignis warten, das vom Token-Vertrag ausgegeben wird. (Nicht Ihr Vertrag!)

Das Standard -ERC20 Transfer -Event sieht folgendermaßen aus:

event Transfer(address indexed _from, address indexed _to, uint _value);

... hören Sie sich also den Token-Vertrag für ein Ereignis an, in dem _todie Adresse Ihres Vertrags steht.

Wenn Sie keinen bestimmten Vertrag im Sinn haben und wissen möchten, wann das Eigentum an einem Token auf Ihren Vertrag übertragen wird, müssten Sie theoretisch jedes TransferEreignis aus jedem Vertrag in der Blockchain mit der Adresse Ihres Vertrags im _toFeld abhören. Leider gehen die verfügbaren Tools meistens davon aus, dass Sie die Ereignisse eines bestimmten Vertrags abhören möchten, daher kann dies in der Praxis schwierig sein.

Der obige Ansatz funktioniert nur für einen Prozess außerhalb der Blockchain, der auf Protokolle lauschen kann. Am häufigsten ist dies JavaScript-Code, der die Funktionen watchund listenin verwendetweb3.js. Wenn Sie möchten, dass Ihr Solidity-Vertragscode auf eine ERC 20-Übertragung reagiert, haben Sie wahrscheinlich kein Glück. Ein Standard-ERC20-Token ruft den Code Ihres Vertrags nicht so für Sie auf, wie es ein normaler ETH-Transfer tun würde. Theoretisch könnten Sie vielleicht jemanden dazu anregen, auf die Ereignisse zu hören und eine Transaktion zu senden, um diese Informationen an Ihren Vertrag weiterzuleiten, möglicherweise mit einem Merkle-Beweis, um zu zeigen, dass er wirklich gesehen hat, was er in den Protokollen vorschlägt, aber das würde nicht trivial zu tun sein. Alternativ können Sie möglicherweise einen Workflow so einrichten, dass der Benutzer Ihren Vertrag aufruft, um die Transaktion durchzuführen, und Ihr Vertrag wiederum den Token-Vertrag aufruft; Auf diese Weise weiß Ihr Vertrag von der Übertragung, weil er die Übertragung selbst veranlasst hat. Das approveundtransferFromMethoden im ERC20-Standard sind für solche Fälle konzipiert.

Vielen Dank für Ihre Antwort. Das dachte ich mir. Leider möchte ich, dass der Vertrag vollständig dezentralisiert wird, und der Token-Vertrag wurde nicht genehmigt.
Eine weitere Option könnte darin bestehen, den ursprünglichen Token-Vertrag mit einem erweiterten Proxy-Vertrag zu umhüllen, der die Genehmigung oder anderen von Ihnen benötigten Code implementiert. Sie müssen Ihre Benutzer jedoch dazu bringen, Ihren Proxy-Vertrag zu verwenden.