Contract-Design

使用 ethereum.org 傳輸/刻錄“來自”函式

  • June 4, 2019

我已經使用此處指定的未更改的“完整程式碼”部署了我的合約: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從您的帳戶中支出資金時,智能合約會驗證您是否允許支出者從您的帳戶中支出給定的代幣。

我解決了這個問題:

參考問題連結中的程式碼,我將第transferFrom99 行的函式更改為以下內容:

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刪除函式 ( )中的第二行程式碼。

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