Tokens

總供應量/分配量的值不正確

  • March 19, 2018

我正在努力在 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”

希望這可以幫助某人

引用自:https://ethereum.stackexchange.com/questions/43208