Contract-Design

防止將 ERC20 代幣轉移到合約地址?

  • February 15, 2022

我希望我的 ERC20 合約只轉移到 EOA 地址和一些特定的合約地址。

我不想因為錯誤地轉移到無法處理 ERC20 代幣的合約地址而失去我的代幣。

如何阻止我的 ERC20 合約以防止代幣轉移到合約地址?

您應該修改合約的transferapprove函式以檢查目標地址是否為合約地址。如果是,則還原交易。

您可以通過以下方式檢查地址是否為合約地址:

function isContract(address _addr) private returns (bool isContract){
 uint32 size;
 assembly {
   size := extcodesize(_addr)
 }
 return (size > 0);
}

(來自https://ethereum.stackexchange.com/a/15642/31933

請注意,這會使任何令牌轉移更加昂貴,因為每次進行轉移/批准時都必須執行相同的檢查。

在 ERC20 傳輸函式的開頭包含這一行:

require (to != address(this));

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