Float ist in Solidity nicht erlaubt im Vergleich zu Dezimalstellen, die für einen Token-Kontrakt angefordert wurden

Wir wissen, dass die Solidität die Float-Werte nicht unterstützt. Aber hier ( https://www.ethereum.org/token#understanding-the-code ) akzeptieren sie einen Eingabeparameter „Dezimalstellen“ für Berechnungszwecke. Wie wurde diese Aktion ausgeführt, wenn dieses Token unter Verwendung des mit Solidity geschriebenen Vertrags erstellt wurde?

Antworten (2)

Was bei unterteilbaren Token-Verträgen (und ETH selbst) tatsächlich passiert, ist, dass die tatsächliche Einheit winzig ist. Wirklich, wirklich winzig. Ein einzelner Äther ist eigentlich nur 10^18 Wei. Für die Benutzer wird es auf den verschiedenen Frontends als Dezimalzahl der ETH angezeigt.

Das gleiche Prinzip gilt für Token-Kontrakte. Intern ist es nur ein Standard-Uint mit gigantischen Zahlen, aber wenn es angezeigt wird, wird es vom Frontend in eine kleine, für Menschen lesbare Zahl umgewandelt.

Dies ist so, dass der Token in nahezu beliebiger Menge geteilt werden kann, und wenn es plötzlich noch mehr geteilt werden muss, muss nur das Frontend angepasst werden, um damit umzugehen.

Hier sind einige Beispiele aus der Antwort von @Matthew.

Wenn es ein Token mit gibt decimals = 2, muss ein Benutzer eine balanceOf100 haben, um 1,00 in Benutzeroberflächen (wie Mist oder Ethereum Wallet) zu sehen. Wenn der Benutzer balanceOfnur 1 ist, sehen sie in der Benutzeroberfläche 0,01.

In Bezug auf den Code ist die Einstellung decimalsauf 16 eine einfache Möglichkeit, 100 Token für jede 1 ETH zuzuweisen. Wenn ein Vertrag 1 ETH erhält (was msg.value10 ^ 18 entspricht) und einem Benutzer Token zuweist, balanceOfwären die des Benutzers 10 ^ 18, aber 100 würden angezeigt (10 ^ 18 / 10 ^ 16).

Was ist mit der Vertragsseite? Wie wird die Gesamtversorgung verwaltet? Angenommen, wenn 10 Ether = 1 Token und jemand 15 Ether investiert, wie wird es dann die Ausgabe von Token verwalten, denn wenn wir nur die 1,5 auf der Benutzeroberfläche anzeigen können, sollte dies auch im Vertrag widergespiegelt werden, was nicht möglich ist. Der Vertrag stellt 1 Token aus, damit ich keine falschen Daten anzeigen kann.
Auf der Vertragsseite sind 15 ETH balanceOf15*10^18; decimalswird 19 sein. Die Benutzeroberfläche zeigt die korrekte Anzahl von 1,5 (von 15 * 10 ^ 18 / 10 ^ 19) Token für den Benutzer an. Denken Sie daran, Verträge haben eine gigantische Anzahl, wie @Matthew erwähnt hat.