Zuweisung nicht verkaufter Token am Ende eines Crowdsales an eine bestimmte Adresse

Ich verwende Open Zeppelin Token und Crowdsale-Verträge.

Was soll ich tun, damit am Ende eines Crowdsales der nicht verkaufte Token-Betrag einer bestimmten Adresse zugewiesen wird, die ich besitze?

balancesDerzeit erstellt der Crowdsale-Vertrag den Token-Vertrag, der Crowdsale einen Teil davon zuweist . Aber ich verstehe, dass ein Vertrag keinen privaten Schlüssel hat, also wie würde ich vorgehen, um die nicht verkauften Token nach dem Ende des Crowdsale wiederzuerlangen?

Bitte beraten.

Antworten (3)

Sie können eine Funktion hinzufügen, um die verbleibenden Token zurück in die owner.

function allocateRemainingTokens() onlyOwner public {
  require(isFinalized);
  uint256 remaining = token.balanceOf(this);
  token.transfer(owner, remaining);
}

Ich verwende FinalizableCrowdsaleden Vertrag von openzeppelin und kann verlangenisFinalized == true

Eine Alternative besteht darin, Token dynamisch zuzuweisen und dem Team am Ende des Crowdsale einen Prozentsatz der Gesamtsumme zuzuweisen.

Wenn Sie ein Verhältnis von 125 Token pro Ether haben und jemand 2 Ether beisteuert, weisen Sie ihm 250 Token zu.

Angenommen, Sie weisen dem Team 30 % zu und müssen 2100 Token verkaufen. Dann beträgt Ihr Anteil 2100 * 0,30 / 0,70 = 900. Das Gesamtangebot beträgt 2100 + 900 = 3000. Wenn Sie überprüfen möchten, dass 2100 genau die 70 % von 3000 sind.

Der Open Zeppelin Crowdsale-Vertrag prägt neue Token, er erschöpft sie nicht aus einem Pool.

// low level token purchase function
function buyTokens(address beneficiary) public payable {
  require(beneficiary != address(0));
  require(validPurchase());

  uint256 weiAmount = msg.value;

  // calculate token amount to be created
  uint256 tokens = getTokenAmount(weiAmount);

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

  token.mint(beneficiary, tokens);
  TokenPurchase(msg.sender, beneficiary, weiAmount, tokens);

  forwardFunds();
}

Sie können dies im Aufruf von sehen token.mint, der die erstellt MintableTokenund dann an die sendet beneficiary. MintableTokens erhöhen ihren Vorrat, wenn die Mint-Funktion aufgerufen wird, und nur dann.

Anders ausgedrückt: Mit dem Open Zeppelin Crowdsale-Vertrag haben Sie keine unverkauften Token, da alle erstellten Token beim Verkauf sofort übertragen werden. Wenn Ihr Ziel nur darin besteht, sich selbst kostenlose Token zu geben, können Sie den Konstruktor ändern oder eine Methode erstellen, die mit Ihrer Adresse und einem bestimmten Betrag aufruft token.mint.