Übergeben einer Vertragsinstanz als Argument an den Konstruktor eines anderen Vertrags

Ich muss die Funktionen des ERC20-Vertrags in einem anderen Vertrag nutzen.

Der ERC20-Vertrag stammt aus der Vertragsbibliothek von openZeppelin. Ich habe auf einer Website folgenden Code gefunden:

import "../../node_modules/zeppelin-solidity/contracts/token/ERC20/ERC20.sol"; 

contract Escrow is Ownable { 
    ERC20 public currency; 
    address public collectionAddress;

    function Escrow(ERC20 _currency, address _collectionAddress) public { 
        currency = _currency; 
        collectionAddress = _collectionAddress; 
    } 
}

In diesem Code wird die ERC20-Instanz als Argument an den Konstruktor von Escrow übergeben. Das bedeutet, dass die ERC20-Instanz zum Zeitpunkt der Bereitstellung des Escrow-Vertrags in der Zustandsvariablen des Escrow-Vertrags gespeichert wird.

Ich möchte wissen, wie man den Bereitstellungscode schreibt, um eine Vertragsinstanz als Argument an den Konstruktor eines anderen Vertrags in Trüffel zu übergeben.

Sollte der ERC20-Vertrag vor dem Escrow-Vertrag in Truffle bereitgestellt werden oder können beide Verträge zusammen bereitgestellt werden?

Wenn ja, wie würde dann das Bereitstellungsskript in Truffle aussehen?

Ich denke, den Vertrag selbst zu übergeben, ist nicht möglich. Sie können jedoch die Vertragsadresse übergeben
sogar ich denke schon .... aber der Code (den ich auf der Website gefunden habe) ist anscheinend getestet ...

Antworten (1)

Noch nie probiert, scheint möglich zu sein.

Migrationsskript:

module.exports = function (deployer) {
    deployer.deploy(TestCoin).then(x => {
        deployer.deploy(Escrow, x.address, collectionAddress)
    });
};

TestCoin ist ein ERC20-Token:

pragma solidity ^0.4.24;

import "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol"; 
import "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol"; 

contract TestCoin is ERC20, ERC20Detailed {

    uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals()));

    constructor() public ERC20Detailed("TestCoin", "TC", 18) {
        _mint(msg.sender, INITIAL_SUPPLY);
    }
}