Wie kann ich meinen Vertrag in verschiedene kleinere aufteilen?

Ich lerne die Solidity-Sprache und habe im Ropsten Testnet experimentiert, ich habe verschiedene Dinge mit einem von mir erstellten Vertrag ausprobiert, aber jedes Mal, wenn ich versuche, ihn zu erstellen, gibt mir Remix Solidity IDE den Fehler, dass die Transaktionskosten das Gaslimit überschreiten.

Ich habe viele Empfehlungen erhalten, die mir sagen, ich solle den Vertrag in kleinere aufteilen. Ich bin neu in der Ethereum-Token-Welt und weiß nicht, was die Leute damit meinen? Wenn ich meinen Vertrag in mehrere Teile aufteile und jeden gleich erstelle? Wie verbinde ich diese miteinander?

einen Entwickler beauftragen

Antworten (1)

Sie müssen so etwas tun:

  • Token.sol

    // This should be an abstract interface without implementation
    contract Token {
      function mint(address _to, uint _amount) public returns (bool);
    
      // Rest of the code
    }
    
  • CrowdsaleToken.sol

    import "Token.sol";
    
    // This contract contains the implementation of ERC20 methods
    contract CrowdsaleToken is Token {
    
      function mint(address _to, uint _amount) public returns (bool) {
          balances[_to] = balances[_to] + _amount;
          return true;
      }
    
      // Rest of the code
    }
    
  • Crowdsale.sol

    import "Token.sol";
    
    // The Crowdsale  interact with CrowdsaleToke through the
    // abstract interface Token
    contact Crowdsale {
        Token crowdsaleToken; // Address of the CrowdsaleToken
    
        function Crowdsale(address _crowdsaleToken) {
            // We receive the CrowdsaleToken addres as constructor param
            crowdsaleToken = Token(_crowdsaleToken);
    
            // We can use the CrowdsaleToken contract
            crowdsaleToken.mint(msg.sender, 0x31415926535);
        }
    
        // Other crowdsale methods
    }
    

Die Bereitstellung erfolgt in zwei Schritten

  1. Stellen Sie CrowdsaleToken bereit und warten Sie auf die Vertragsadresse
  2. Stellen Sie Crowdsale bereit und übergeben Sie die CrowdsaleToken-Adresse als Parameter

Das ist die Grundidee.

Einige Frameworks wie Truffle und Populus können verwendet werden, um einige dieser Aufgaben zu automatisieren.

Wie kann CrowdsaleToken.sol kompiliert werden, wenn balanceses nicht definiert ist? Wo definieren balances?
@Thykof Dies ist ein sehr altes Beispiel und es ist unvollständig. Ich würde vorschlagen, OpenZeppelins github.com/OpenZeppelin/openzeppelin-contracts zu verwenden, sie werden regelmäßig aktualisiert.