Как я могу разделить свой контракт на более мелкие?

Я изучаю язык Solidity и экспериментирую в Ropsten Testnet, я пробовал несколько вещей с созданным контрактом, но каждый раз, когда я пытаюсь его создать, IDE remix Solidity выдает мне сообщение об ошибке: стоимость транзакции превышает лимит газа.

Я получил много рекомендаций, которые говорят мне разделить контракт на более мелкие, я новичок в мире токенов Ethereum и не знаю, что люди подразумевают под этим? Если я разделю свой контракт на несколько частей и сделаю все равными? Как я свяжу их вместе?

нанять разработчика

Ответы (1)

Вы должны сделать что-то вроде этого:

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

Развертывание выполняется в два этапа

  1. Разверните CrowdsaleToken, дождитесь адреса контракта
  2. Разверните Crowdsale и передайте адрес CrowdsaleToken в качестве параметра.

Это основная идея.

Некоторые фреймворки, такие как Truffle и Populus , можно использовать для автоматизации некоторых из этих задач.

Как CrowdsaleToken.sol может скомпилироваться, если balancesон не определен? Где определить balances?
@Thykof Это очень старый пример, и он неполный. Я предлагаю начать использовать github.com/OpenZeppelin/openzeppelin-contracts OpenZeppelin, они часто обновляются.