Mist
在使用合約執行過程中遇到的 MEW 錯誤巴德__instruction乙一種d一世ns噸r在C噸一世這nBad instruction
我在代幣轉移方面遇到了一些問題,當我將 REMIX 與 Metamask 一起使用時,將代幣從非所有者帳戶轉移到另一個帳戶可以正常工作。然而,當使用 MEW 或 MIST 時,事務會失敗。
function transfer(address _to, uint _value) returns (bool success){ require( balances[msg.sender] >= _value && _value > 0 ); _value = _value.mul(1000000000000000000); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender,_to,_value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success){ require( balances[_from] >= _value && _value > 0 ); _value = _value.mul(1000000000000000000); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(_from,_to,_value); return true; }
該交易試圖轉移 10^22 個基礎代幣 (0x21e19e0c9bab2400000)。然後,您在契約中乘以 10^18。除非您的帳戶中有 10^40 個基本令牌,否則它將失敗。
我預計您打算轉移 10,000 個代幣,但 UI(MEW 和 Mist,但在 Metamask 的情況下不是)已將其乘以 10^18 以說明
decimals
提供契約的價值。您可以設置
decimals
為 0,或刪除乘以 10^18 的乘積,以使其更直覺。在我的代幣合約中,我沒有小數,也沒有乘法!但通常的 ERC20 代幣合約方法是不進行乘法運算。他們假設所有輸入和內部數據都是基於基本令牌的。然後,該decimals
值用於前端 UI 顯示並從顯示標記轉換為基本標記。這是一個很大的混亂來源,你需要知道你的前端是否在進行轉換。通常,您可以根據他們向您顯示的帳戶餘額來計算。但是,是的,這不是很好。