Ethereum-Wallet-Dapp

是否有可能將多個 ERC20 代幣組合到一個交易中?

  • June 29, 2017

具體來說,如果我想向智能合約發送多個不同的代幣,但所有代幣同時到達對合約功能很重要,我可以輸入嗎?20 代幣 A 45 代幣 B 7.5 代幣 C 在一次交易中,還是可以輕鬆地創建不同代幣的包裹一起發送並在來回發送時保持在一起?

您可以通過創建合約並讓合約與各種代幣合約互動來做到這一點。

一種方法是創建你的合約,然後將你在每個代幣上的餘額所有權轉移到合約中。未經測試的範例(僅用於說明目的,請勿按原樣使用):

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;
     }
  }

}

另一種方法是將代幣的所有權保留在您自己的帳戶下,並approve()針對每個代幣呼叫以授予您的代理合約移動它們的權限。然後,在代理合約中呼叫上述程式碼的地方transfer(_to, _value),您將改為呼叫transferFrom(msg.sender, _to, _value).

引用自:https://ethereum.stackexchange.com/questions/16215