Akzeptieren eines ERC20-Tokens als Zahlung

Angenommen, ich habe mein ERC20-Token bereitgestellt und die Lieferung wurde verteilt, gibt es eine Methode zum Erstellen eines separaten Vertrags, der dieses ERC20-Token als Zahlung akzeptiert und Benutzerfelder enthält, die bestimmte Informationen an den Vertrag senden?

Eine Art Vertrag, der den Token zusammen mit einigen Informationen enthält.

Antworten (3)

Wenn Sie ERC20-Token zusammen mit Daten für einen neuen Vertrag erhalten möchten, können Sie den neuen Vertrag mit dem ERC 223-Token-Standard erstellen. Lesen Sie hier (Lassen Sie sich nicht von der Nomenklatur verwirren, es ist ERC223 und nicht ERC23)

Wenn Sie die Token übertragen, können Sie in der Funktion auch Daten senden

transfer(address to, uint value, bytes data)

Und da ERC223 abwärtskompatibel mit ERC20 ist, gibt es keinen Vertragsbruch.

Eine Beispielfunktion kann wie folgt sein

function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) {
    if (balanceOf(msg.sender) < _value) throw;
    balances[msg.sender] = safeSub(balanceOf(msg.sender), _value);
    balances[_to] = safeAdd(balanceOf(_to), _value);
    ContractReceiver reciever = ContractReceiver(_to);
    reciever.tokenFallback(msg.sender, _value, _data);
    Transfer(msg.sender, _to, _value, _data);
    StateChanged(true,"Transfer to contract successful");
    return true;
}

Hier sind 3 Ansätze, die Sie verwenden könnten:

  1. In Ihrem ersten Vertrag (Vertrag A) könnten Sie Code hinzufügen, dass Sie bei einer Übertragung zu einem genehmigten Vertrag (B) einen Delegiertenaufruf an Vertrag (B) senden könnten, um etwas zu tun, und Sie könnten alle Informationen weitergeben, die Sie aus dem Vertrag haben A.

  2. Sie könnten eine dApp erstellen, die auf das Transfer-Ereignis von Vertrag A wartet und dann eine Transaktionsanforderung an Vertrag B sendet, um etwas zu tun.

  3. Sie könnten ähnlich wie bei Nr. 2 vorgehen, außer dass Sie auf A auf das Approved-Ereignis warten und dann die Übertragung auf A selbst aufrufen, um sicherzustellen, dass Sie das/die Token an eine beliebige Adresse übertragen, und auch B anrufen, um die gewünschte Funktionalität auszuführen dort auch.

Ich weiß nicht.

Ich habe versucht, eine ähnliche Frage auf der ähnlichen Website zu beantworten: https://delegatecall.com/questions/smart-contract-accepting-tokens-instead-of-ether-as-payment-4ca5abce-0037-4bd6-a1ae-26ef1658bd0e# ich-dachte-daran-zu-akzeptieren-dai-stablecoin-gekoppelt-an-1-aber-i--b8087a40-5a59-4f7a-a1a5-a7c7d1048b86

Was ich tun würde (vor sechs Monaten konnte ich mein eigenes ERC20 oder ICO nicht bereitstellen) , ist, eine ältere Webanwendung web3.jsauszuführen und zu einem TransferEreignis aufzulisten (Teil des ERC20-Standards) und eine Aktion im gewünschten intelligenten Vertrag auszulösen ...

Damit ist die Frage nicht beantwortet. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. - Aus Bewertung
Alternative vorgeschlagen. Es gibt eine Antwort auf die Frage. "Accepting an ERC20 Token as Payment" - oder eigentlich ... Ja, ich sollte den Text der Frage lesen.