使用 ethereum.org 傳輸/刻錄“來自”函式
我已經使用此處指定的未更改的“完整程式碼”部署了我的合約:https ://www.ethereum.org/token#full-coin-code 。
一旦契約形成,我似乎可以毫無問題地使用 - Burn、Mint Token、Transfer、Freeze Account & Transfer Ownership 功能來管理它。
我現在正在測試 Burn From 和 Transfer From 功能,但是當我嘗試執行一個合約說從目標賬戶餘額中燒掉一半的代幣時,從合約所有者賬戶執行我收到消息“看起來這個交易將失敗。如果你送出它,它可能會消耗你提供的所有gas。當我執行契約時,我收到一條消息“Intrinsic Gas Too Low”。
範常式式碼中是否存在錯誤或(更有可能)我做錯了什麼?是否存在一些安全問題(我是否需要打開從其他地方的使用者帳戶轉移的功能)?
謝謝
這不是一個解決方案,而是一個錯誤。
require(_value <= allowance[_from][msg.sender]);
你不應該在不知道它的影響的情況下移除這條線。如果刪除此行,任何人都可以將代幣轉移到其他地址,這是一個巨大的漏洞。我可以在您不知情的情況下從您的帳戶中使用代幣。津貼用於驗證如果您允許我使用 100 個代幣,那麼我只能從您的帳戶中花費 100 個代幣。和
transferFrom
一起approve
工作。如果您希望某人從您的帳戶中花費一些代幣,則您批准他們該金額。該值儲存在津貼中。現在,當支出者試圖transferFrom
從您的帳戶中支出資金時,智能合約會驗證您是否允許支出者從您的帳戶中支出給定的代幣。
我解決了這個問題:
參考問題連結中的程式碼,我將第
transferFrom
99 行的函式更改為以下內容:function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; }
這從函式 (
require(_value <= allowance[_from][msg.sender]); // Check allowance
) 中刪除了第一行。我現在可以自由地從另一個使用者帳戶轉移資金。同樣,我將 burnFrom 函式(第 162 行)更改為如下:
function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; }
require(_value <= allowance[_from][msg.sender]); // Check allowance
刪除函式 ( )中的第二行程式碼。