Contract-Development

如何燒錄不可燒的ERC20?

  • January 22, 2019

假設你收到了 250 個 HELLOCoin,並且你想燒掉它們。不幸的是,HELLOCoins 使用了 OpenZeppelin ERC20,它實現了以下功能:

 function _transfer(address from, address to, uint256 value) internal {
       require(to != address(0));

       _balances[from] = _balances[from].sub(value);
       _balances[to] = _balances[to].add(value);
       emit Transfer(from, to, value);
   }

要求“to”不同於 0x0 意味著您不能將任何 ERC20 發送到 0x0,因此不能燒掉 HELLOCoins。

以下哪個選項更好,第二個選項會起作用嗎?

  1. 發送到 0x00000000000000000000000000000000000000001 (0x0 之後的第一個地址。有人擁有這個地址嗎?網際網路上沒有關於它的內容)
  2. 創建另一個讀取 HELLOCoins 的 ERC20 地址的智能合約。智能合約呼叫了一個未實現“require(to != address(0))”部分的 sendTo 函式。我懷疑這是否可行,但我想知道。
  3. 還有其他燃燒 HELLOCoins 的解決方案嗎?

選項 1 似乎是最簡單的選項,但乙太坊在其中一些低編號地址有“預編譯”(硬編碼的智能合約,如 keccak256 等)。如果你想避免這些,你可以選擇一個更大的地址。如果您只是希望令牌無法訪問,那麼您選擇哪個地址並不重要,只要沒有人擁有私鑰即可。但是,如果您想說服其他人您沒有私鑰,請務必選擇看起來非隨機的東西,例如 0xFFFFFF… 或 0x000000000000000000000000000000000DEADBEEF。

選項 2 不起作用。

另一種選擇是創建一個不能呼叫的智能合約transfer,例如 just contract BurnAddress { /* nothing here, so tokens can't be retrieved */ }。部署它並將令牌發送到那裡。

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