Ich habe einen Code unten und wenn ich 1.695.000.000 an eine bestimmte Adresse überweise, werden tatsächlich 0,000000001695 übertragen. Wieso ist es so? Heißt das, um 1,695 Milliarden Token zu übertragen, muss ich 18 führende Nullen setzen. Hier ist der Code:
function transfer(address _to, uint256 _amount) public returns (bool success) {
require(_to != address(0));
require(balances[msg.sender] >= _amount && _amount > 0
&& balances[_to].add(_amount) > balances[_to]);
// SafeMath.sub will throw if there is not enough balance.
balances[msg.sender] = balances[msg.sender].sub(_amount);
balances[_to] = balances[_to].add(_amount);
Transfer(msg.sender, _to, _amount);
return true;
}
contract SomeToken is MintableToken, BurnableToken {
string public name ;
string public symbol ;
uint8 public decimals = 18 ;
/**
*@dev users sending ether to this contract will be reverted. Any ether sent to the contract will be sent back to the caller
*/
function ()public payable {
revert();
}
/**
* @dev Constructor function to initialize the initial supply of token to the creator of the contract
* @param initialSupply The initial supply of tokens which will be fixed through out
* @param tokenName The name of the token
* @param tokenSymbol The symbol of the token
*/
function SomeToken(
uint256 initialSupply,
string tokenName,
string tokenSymbol
) public {
totalSupply = initialSupply.mul( 10 ** uint256(decimals)); //Update total supply with the decimal amount
name = tokenName;
symbol = tokenSymbol;
balances[msg.sender] = totalSupply;
//Emitting transfer event since assigning all tokens to the creator also corresponds to the transfer of tokens to the creator
Transfer(address(0), msg.sender, totalSupply);
}
}
Ihre Token sind in X Dezimalstellen unterteilt (18 in Ihrem Fall). Standardmäßig (und per Konvention) basieren Überweisungen auf dem kleinstmöglichen Betrag, damit Überweisungen keine Dezimalzahlen enthalten. Daher bedeutet die Übertragung eines Mounts von 1 die Übertragung von 0,000000000000000001 (17 Nullen) Token.
Ich würde mir vorstellen, dass dies hauptsächlich so ist, dass wir uns nicht mit Bruchzahlen befassen müssen, die mehr Speicherplatz erfordern würden und für Programme schwieriger zu verstehen sind. Äther funktioniert genauso.
Wenn Sie die Funktion zum Übertragen der Coins (Überweisung) aufrufen, müssen Sie den Parameter „amount“ mit 10**uint(decimals) multiplizieren. Das wird reichen.
Dies ist schwierig, da dies nur erforderlich ist, wenn Sie die Übertragungsfunktion direkt aufrufen. Wenn Sie eine Transaktion von Ihrer Brieftasche zu einer anderen Adresse durchführen, müssen Sie dies nicht tun, da die Brieftasche "weiß", dass Sie in Ihrem Vertrag eine bestimmte Anzahl von Dezimalstellen verwenden. Die Funktion 'Übertragen' allein kennt dies nicht.
Hinweis: Die Übertragungsfunktion sollte sich im Vertragstext befinden.
Prateek Singhania
Crissi Mariam Robert
tokenCount ** uint256(decimals)
Crissi Mariam Robert
Prateek Singhania
Crissi Mariam Robert
Niksmac