grundlegende ethereum zepplin Crowdsale Smart Contract Token Rate Frage

Eine grundlegende Frage, wie Zepplin Solidity Code Token-Raten berechnet. Die Codekommentare sagen

// wie viele Token-Einheiten ein Käufer pro wei erhält

 uint256 public rate;

Wir können es jedoch nicht dazu bringen, 1000 Token pro ETH zurückzuzahlen, wenn wir einen Betrag als Kurs übergeben;

function Crowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet) {
    require(_startTime >= now);
    require(_endTime >= _startTime);
    require(_rate > 0);
    require(_wallet != address(0));

    token = createTokenContract();
    startTime = _startTime;
    endTime = _endTime;
    rate = _rate;
    wallet = _wallet;
  }

die Rate wird verwendet in;

   uint256 weiAmount = msg.value;

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

Auch hier gilt: Unabhängig davon, welche Rate wir einsenden, hoch oder niedrig, kommen nicht 1.000 Token pro Eth heraus.

Kann jemand die Funktionsweise dieser Berechnung erklären, damit wir dorthin gelangen?

Danke

Wenn Sie die Rate auf 1000 setzen, sollten Sie 1000 Token für 1 ETH erhalten. Was bekommst du?
1.000.000.000.000.000.000.000 Token
Können Sie zeigen, wie Sie die Werte im Konstrukteur initialisieren?
Verwenden Sie derzeit das in Remix verfügbare Fenster, um die Parameter an die Funktion zu übergeben, z.
1000 ist die Rate
Starten Sie dann über Metamask und verwenden Sie die Ethereum-Brieftasche, um den Vertrag zu überwachen

Antworten (1)

Dies liegt wahrscheinlich an Ihrem Dezimalwert. Ich nehme an, Sie haben die Token-Dezimalstellen auf 18 eingestellt? Beachten Sie, dass Sie anstelle von 1000 Token 1.000.000.000.000.000.000 erhalten, wobei 18 dieser Nullen aus Ihrer Dezimalvariablen stammen und die anderen 3 die 1000 sind. Dies ist alles erwartetes Verhalten.

Es gibt kein Dezimalkomma nach 1000, es sind nur gerade Nullen, die in Metamask und Etherscan angezeigt werden. Es scheint also, als würde die multiplizierte Wei-Menge die Zahl extrem groß machen Die Zahl, die herauskam, war "282.236.629.591.925.000.000.000.000.000.000.000.00".
Dezimalzahlen gibt es in der Ethereum-Blockchain nicht, es gibt nur ganze Zahlen. Dezimalstellen werden also als zusätzliche Nullen und mit der Variablen „decimals“ dargestellt, um anzuzeigen, wo die Dezimalstellen für den Benutzer zu setzen sind. Damit das Token in der Metamaske korrekt angezeigt wird, müssen Sie die Dezimalvariable in der Metamaske richtig festlegen.
@flygoing ist richtig, das liegt an den Dezimalstellen, seine Antwort sollte akzeptiert werden