Solidity

如何從另一個智能合約呼叫乙太坊中部署的智能合約的功能?

  • April 20, 2018

我在特定地址(例如 0xABC)部署了一個智能合約。該合約是 ERC20 代幣(比如 ABC 代幣)智能合約。該契約於 2017 年 11 月部署

現在我想要另一個可以充當託管的智能合約,它可以持有 ABC 代幣,直到滿足特定條件。該合約尚未部署。

那麼,Escrow 合約如何接受****ABC 代幣,並在滿足條件後將ABC 代幣****釋放給有效使用者呢?我想從 Escrow 合約中呼叫 ABC 代幣合約的 .transfer() 方法,從 Escrow 中獲取和釋放資金。

注意:這兩個智能合約部署在不同的地址,因為它們部署在不同的時間。

像這樣的東西應該​​工作

contract Escrow {

   ERC20 token = ERC20(0xABCDEF....);

   event Deposit(address sender, uint amount);
   event Withdraw(address sender, uint amount);

   mapping (address => uint) deposits;

   // The user should approve the contract to retrieve tokens
   function deposit(uint amount) public {
       // Accept tokens in deposit
       token.transferFrom(msg.sender, amount);
       deposits[msg.sender] += amount;

       emit Deposit(msg.sender, amount);
   }

   function withdraw(uint amount) public {
       // Cannot withdraw more tokens than deposited
       require(deposits[msg.sender] >= amount);

       // Verify condition enable withdraw
       if (condition) {
           // Transfer tokens to sender
           deposits[msg.sender] -= amount;
           token.transfer(msg.sender, amount);

           emit Withdraw(msg.sender, amount);
       } else {
           revert();
       }
   }
}

使用者必須批准您的契約,才能使用 transferFrom 轉移代幣。在javascript中是這樣ERC20Token.approve(Escrow.addrss, amount, { from: "0xTokenOwnerAddress" })的,然後呼叫Escrow進行存款EscrowContract.deposit(amount, { from: "0xTokenOwnerAddress"})

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