Zugriff auf bereitgestellte Token-Methoden (mit Modifikatoren) aus einem separaten Crowdsale-Vertrag

Ist es möglich, den Token-Vertrag (T) und den CrowdSale-Vertrag (S) separat bereitzustellen und dennoch auf die modifikatorgeschützten Methoden von (T) von (S) zuzugreifen?

Code von (T)

 contract Token {
    function mint(address _to, uint256 _amount) onlyOwner canMint returns (bool) {
     totalSupply = totalSupply.add(_amount);
     balances[_to] = balances[_to].add(_amount);
     Mint(_to, _amount);
     return true;
 }

Code von (S)

contract SellToken {
  TokenInstance instance;
  function SellToken(address _address) {
    instance = TokenInstance(_address);
  }

  function () payable { 
    uint256 weiAmount = msg.value;

    // calculate token amount to be created
    uint256 tokens = weiAmount.mul(rate);

    // update state
    weiRaised = weiRaised.add(weiAmount);

    instance.mint(beneficiary, tokens);
  }

}

Aus irgendeinem Grund erhalte ich die folgende Fehlermeldung, wenn ich versuche, Ether an (B) zu senden

Transaktion kann nicht verarbeitet werden

BEARBEITEN: Ich habe auch die Methode ausprobiert, eine abstrakte Schnittstelle zu haben, aber das schien auch nicht viel Glück zu haben (Ref: Stack exchange Post )

Abstrakte Schnittstelle

contract TokenAbstractInterface {
    function mint(address _to, uint256 _amount) returns (bool);
    function finishMinting() returns (bool);
}

Modifizierter Code von (S)

contract SellToken {
  TokenAbstractInterface instance;
  function SellToken(address _address) {
    instance = TokenAbstractInterface(_address);
  }

  function () payable { 
    uint256 weiAmount = msg.value;

    // calculate token amount to be created
    uint256 tokens = weiAmount.mul(rate);

    // update state
    weiRaised = weiRaised.add(weiAmount);

    instance.mint(beneficiary, tokens);
  }

}

Antworten (1)

Ohne den vollständigen Code ist es schwer sicher zu sein. Aber die Funktion mintin Token als onlyOwnerModifikator.

function mint(address _to, uint256 _amount) onlyOwner canMint returns (bool)

Dies impliziert normalerweise, dass nur der Besitzer des Tokens mintdie Funktion aufrufen kann, wenn Sie möchten.

Wenn Sie Token von SellToken prägen möchten, müssen Sie SellToken als Eigentümer des Token-Vertrags festlegen.

Ja, Sie hatten Recht. Ich musste den Besitz des Tokens auf den Smart-Vertrag übertragen. Ich musste auch eine Methode hinzufügen, um den Token-Besitz vom Smart-Vertrag auf ein anderes Konto zurückzuübertragen, um nicht gesperrt zu werden, wenn der Crowdsale vorbei ist.