Tokens
總供應量/分配量的值不正確
我正在努力在 Eth 上發布一個代幣,並且一直在修改一些程式碼,以允許通過向合約地址發送 0 eth 的人來領取代幣。
到目前為止,我已經設法實現了空投功能並設置了代幣的詳細資訊等。
我遇到的問題是,當我執行契約時,我得到了例如 3m 令牌發送到創建地址(這是我想要的)和另外 3m 令牌發送到 0x00000000000000 - 我沒有知道為什麼我看到第二個 3m 被發送到其他地方。
當我嘗試通過生成更多的東西來解決這個問題並燃燒剩餘的供應時,互動失敗(可能是由於供應中的代幣數量等),我正在努力解決問題所在。
我是一名基本的編碼員,並且已經複製了這份契約的大部分內容,並在我可以修改的地方進行了修改,這讓我陷入了困境。
我基本上想要一個總供應量為 2800 萬的代幣,300 萬發送給創建者,2500 萬留給人們通過空投功能索取。
因為我的總供應量為 2800 萬,300 萬發送給創建者,300 萬在創建時基本消失,這給了我 2500 萬的總供應,儘管契約規定總供應為 2800 萬。
[ { "topic": "0x8940c4b8e215f8822c5c8f0056c12652c746cbc57eedbd2a440b175971d47a77", "event": "Distr", "args": [ "fd2b03d644df375f96cda053790e013e12a621a2", "3000000000000000000000000" ] }, { "topic": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", "event": "Transfer", "args": [ "0000000000000000000000000000000000000000", "fd2b03d644df375f96cda053790e013e12a621a2", "3000000000000000000000000" ] }
這是我在 remix.solidity 中執行契約時得到的日誌,我的猜測是問題在於:
function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(msg.sender, _to, _amount); return true; }
這:
function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); totalRemaining = totalRemaining.sub(_amount); balances[_to] = balances[_to].add(_amount); Distr(_to, _amount); Transfer(address(0), _to, _amount); return true; if (totalDistributed >= totalSupply) { distributionFinished = true; } }
或這個:
function distribution(address[] addresses, uint256 amount) onlyOwner canDistr public { require(addresses.length <= 255); require(amount <= totalRemaining); for (uint i = 0; i < addresses.length; i++) { require(amount <= totalRemaining); distr(addresses[i], amount); } if (totalDistributed >= totalSupply) { distributionFinished = true; } }
如果有人需要更多資訊,請告訴我,我很感激任何幫助。
沒關係,我已經設法通過弄清楚刻錄功能解決了這個問題。由於數字的大小以及需要將相當大的數字放在引號中,因此刻錄功能似乎失敗了。
因此,當燃燒 3m 令牌而不是通過簡單地輸入 3000000000000000000000000 來啟動功能時,我必須輸入“3000000000000000000000000”
希望這可以幫助某人