Contract-Development
為什麼這個token的totalSupply靜態初始化為5500000000?
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 令牌與其他令牌有何不同或唯一性?
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); ...
您可能會注意到,它們會先增加 _to 餘額,然後再從餘額中減少 _,因此,如果您在此處使用重複呼叫可重入攻擊程式碼,則可以創建令牌,因為雙花防護已被破壞(實際上,您獲得了反复求和令牌在 _to 餘額中而不將它們從 _from 餘額中取出)。
所以它被認為是某人做的一個簡單的練習,盡快放棄。