Wird es jemals möglich sein, mehrere ERC20-Token in einer einzigen Transaktion zu gruppieren?

Insbesondere wenn ich mehrere verschiedene Token an einen Smart Contract senden wollte, es aber für die Vertragsfunktion wichtig war, dass alle Token gleichzeitig ankommen, könnte ich sagen; 20 Token A 45 Token B 7.5 Token C in einer einzigen Transaktion oder einfach in der Lage sein, Pakete mit verschiedenen Token zu erstellen, die zusammen versendet werden und zusammen bleiben, wenn sie hin und her gesendet werden?

Antworten (1)

Sie können dies tun, indem Sie einen Vertrag erstellen und den Vertrag mit den verschiedenen Token-Verträgen interagieren lassen.

Eine Methode wäre, Ihren Vertrag zu erstellen und dann das Eigentum an Ihrem Guthaben auf jedem Token auf den Vertrag zu übertragen. Ungetestetes Beispiel (nur zur Veranschaulichung, nicht unverändert verwenden):

pragma solidity ^0.4.6;

contract ERC20API {
    function transfer(address _to, uint256 _value) returns (bool success);
}

contract ProxyContract {

   address owner;

   function ProxyContract() {
      owner = msg.sender;
   }

   // Simple transfer function, just wraps the normal transfer
   function transfer(address token, address _to, uint256 _value) {
      if (owner != msg.sender) throw;
      ERC20API(token).transfer(_to, _value);
   }

   // The same as the simple transfer function
   // But for multiple transfer instructions
   function transferBulk(address[] tokens, address[] _tos, uint256[] _values) {
      if (owner != msg.sender) throw;
      for(uint256 i=0; i<tokens.length; i++) {
         // If one fails, revert the tx, including previous transfers
         if (!ERC20API(tokens[i]).transfer(_tos[i], _values[i])) throw;
      }
   }

}

Eine andere Methode wäre, das Eigentum an den Token unter Ihrem eigenen Konto zu belassen und approve()gegen jeden Token anzurufen, um Ihrem Proxy-Vertrag die Erlaubnis zu erteilen, sie zu verschieben. Wenn dann der obige Code transfer(_to, _value)im Proxy-Vertrag aufruft, rufen Sie stattdessen auf transferFrom(msg.sender, _to, _value).

Wie würden Sie den TransferBulk nennen? Was müssten Sie in die Daten der Transaktion eingeben? Wie könnte ich dies auch mit einem bereits bereitgestellten Vertrag zum Laufen bringen? Könnte ich Sie dafür bezahlen, dass Sie mir einen Vertrag schreiben? Senden Sie mir eine E-Mail an info@ohni.io
Bei diesem Ansatz kann vieles schief gehen. Wenn beispielsweise ein ERC20 über eine benutzerdefinierte Logik verfügt, die Adressen senden kann/nicht senden kann, muss die JavaScript-Seite alle Adressen trocken laufen lassen und vorab validieren. Ich würde empfehlen, multisender.app auszuprobieren , da es Ihnen die ganze Arbeit abnimmt.