Senden Sie alle Token und Eth automatisch an eine Adresse

Ich habe einige Kindergeldbörsen und eine Elterngeldbörse. Wann immer diese Kindergeldbörsen eingehende ERC20-Token oder ETH erhalten. Ich möchte sie automatisch an die übergeordnete Brieftasche senden.

Ich weiß, dass ich unten tun kann, um das gesamte Eth-Guthaben zu senden.

beneficiary.transfer(this.balance);

Wie kann ich es für erc20-Token tun?

Danke im Voraus.

Antworten (4)

Sie möchten Ihr Guthaben effektiv „weiterleiten“ . Eine Möglichkeit, dies zu tun, besteht darin, einen Vertrag zu verwenden, der dem hier hervorgehobenen ähnelt .

pragma solidity ^0.4.18;

/**
 * Contract that will forward any incoming Ether to its creator
 */
contract Forwarder {
  // Address to which any funds sent to this contract will be forwarded
  address public destinationAddress;

  /**
   * Create the contract, and set the destination address to that of the creator
   */
  function Forwarder() public {
    destinationAddress = msg.sender;
  }

  /**
   * Default function; Gets called when Ether is deposited, and forwards it to the destination address
   */
  function() payable public {
        destinationAddress.transfer(msg.value);
  }

  /**
   * It is possible that funds were sent to this address before the contract was deployed.
   * We can flush those funds to the destination address.
   */
  function flush() public {
    destinationAddress.transfer(this.balance);
  }

}
Lassen Sie mich wissen, wenn Sie Fragen haben oder wenn dies zu niedrig ist.
Ich mache mir mehr Sorgen um die erc20-Token als um die ETH selbst.
@VigneshKarthikeyan Wäre die Weiterleitung von ETH mit diesem Ansatz billiger als die manuelle Weiterleitung mit einer regulären Transaktion (im Vergleich zu Smart Contract)? Wenn ja, wie würde man die Einsparungen bei den Gaskosten berechnen? Wenn nicht, besteht der Hauptvorteil vermutlich darin, dass die Weiterleitung automatisch erfolgt?

Es ist nicht wirklich möglich, dies mit dem aktuellen Token-Standard ERC20 automatisch zu tun – und es wird als Versagen und Inkonsistenz dieses frühen Standards angesehen.

Aus diesem Grund werden neue „fortgeschrittene“ Token-Standards wie ERC223 , ERC777 und ERC827 entwickelt, um die Situation zu bewältigen, in der die Übertragung von Token auf einen Vertrag eine Aktion auslösen kann.

Sie sagen also, dass wir mit ERC20 keine Maßnahmen auslösen können, wenn die Token zum Vertrag gesendet werden. Also können wir stattdessen ein geplantes Ereignis haben, um zu überprüfen, ob wir Token-Guthaben in der Brieftasche haben, und sie alle an die übergeordnete Brieftasche senden. Und noch eine Sache, wenn wir kein ETH-Guthaben haben und nur ERC20-Token haben, wie können wir die Gasgebühren für die Überweisung bezahlen.

Stimme @SteveJackson zu. Dies ist eine Einschränkung von ERC20.

Wenn diese untergeordneten Verträge Verträge sindCanReclaimToken , können Sie die Lösung implementieren . https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/CanReclaimToken.sol

Dadurch werden die Verträge so eingerichtet, dass beliebige Token, die in den Besitz des Vertrags gelangen, wiederhergestellt werden können. Der OwnerPasst die Adresse des ERC20 ein, um den Saldo unerwarteter Token wiederherzustellen.

In der Praxis können Sie erwägen, einen Software-Client zu erstellen, der eine Liste bekannter ERC20-Verträge verwaltet, indem er eine Quelle beobachtet und dann diese Token-Verträge beobachtet, um zu sehen, ob Transaktionen für einen der untergeordneten Verträge eintreffen.

Es wäre dann eine Frage des Aufrufs von reclaimToken()as Owner.

Sicherlich müssen einige Implementierungsdetails ausgearbeitet werden, aber es wäre ein praktikabler Ansatz, wenn dies ein wichtiges Thema wäre.

Ich hoffe es hilft.

Sie müssen die folgenden Schritte ausführen. Betrachten Sie dies als abstrakte Schritte, Sie müssen es weiter implementieren.

  1. Definieren Sie die Schnittstelle des Tokens mit seiner transferdarin enthaltenen Methode.
  2. Erstellen Sie auf dem Vertrag eine Variable für diese Schnittstelle und weisen Sie ihr die Token-Vertragsadresse zu.
  3. Beim Aufruf der Übertragungsfunktiontoken.transfer(beneficiary,tokenBalance