Erc-20
預售合約的 ETH 交易一直失敗
我正在嘗試向 Kovan 上的預售智能合約發送一些 ETH。已將預售地址設置為支出者 - 與預售契約中分配的代幣數量完全相同。但後來我得到:
警告!合約執行過程中遇到的錯誤$$ Bad instruction $$ 在 tx 雜湊: https ://kovan.etherscan.io/tx/0x8d0451f2a9ba2440bf5f2a27d171850437772ccb12afeb8846507c0497e65cc0
根據我的閱讀和了解,代幣轉移過程中出現了問題。但我找不到它是哪一個。
想知道是否有辦法解決這個問題,或者至少知道是哪一個導致了這個問題,以防我將來遇到同樣的問題。謝謝。
錯誤消息
Bad instruction
和 gas 消耗等於 gas 限製1,000,000
表明問題是由斷言或低級別錯誤(如數組越界訪問)引起的。查看接收函式,沒有任何傳輸會導致錯誤指令。失敗的傳輸會恢復,但不會消耗所有可用的 gas。
丟棄映射訪問後,
require
s 條件唯一可疑的程式碼是 getTokensPerEth 函式function getTokensPerEth(uint256 amount) internal view returns(uint256) { return amount.mul(tokenRatePerEth).div( 10**(uint256(9).sub(tokenDecimals).add(rateDecimals)) ); }
失敗在
uint256(9).sub(tokenDecimals)
。因為tokenDecimals
是 18 SafeMathsub
將在assert(b <= a)
(b = 18, a = 9) 處失敗。