contract UnixERC20 is StandardToken {
function() {
throw;
}
string public name;
uint8 public decimals;
string public symbol;
string public version = 'H1.0';
function UnixERC20() {
balances[msg.sender] = 5500000000;
totalSupply = 5500000000;
name = "UNIWORTH COIN";
decimals = 0;
symbol = "UNIX";
}
function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
if (!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) {
throw;
}
return true;
}
}为什么totalSupply被初始化为5500000000,是否有任何理由预先定义这个值?UNIX令牌与其他令牌有何不同或独特之处?
发布于 2019-01-01 08:48:39
totalSupply的价值是由部署人员根据对稀缺性的一般考虑(理论上说,如果很少有令牌就会更珍贵)、分配(理论上更多的令牌涉及更多的买家并由此创建一个市场)、市场预测(理论上,如果您能够预见市场,您可以理解什么是正确的数字)、错觉(理论上,如果您认为您的令牌将升值到1美元或任何东西,如果您有更多的令牌,您有更多的市场上限,即价值)等等。
您所要求的令牌是从教程中派生并部署的一个简单的erc20令牌,绝对不能重复,因为至少在transferFrom方法中,受重入攻击可能性的影响:
...
if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {
balances[_to] += _value; <—- // attack!!!
balances[_from] -= _value;
allowed[_from][msg.sender] -= _value;
Transfer(_from, _to, _value);
...正如您可能注意到的,它们在减少_from平衡之前增加_to余额,因此如果您使用重复重入调用攻击这里的代码,则可以创建令牌,因为双开销屏蔽被破坏(实际上,您可以在_to余额中多次对令牌进行求和,而不从_from余额中取出它们)。
因此,这被认为是一个简单的练习,由某人做,并尽快被放弃。
https://ethereum.stackexchange.com/questions/64855
复制相似问题