Contract-Development
如何燒錄不可燒的ERC20?
假設你收到了 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。
以下哪個選項更好,第二個選項會起作用嗎?
- 發送到 0x00000000000000000000000000000000000000001 (0x0 之後的第一個地址。有人擁有這個地址嗎?網際網路上沒有關於它的內容)
- 創建另一個讀取 HELLOCoins 的 ERC20 地址的智能合約。智能合約呼叫了一個未實現“require(to != address(0))”部分的 sendTo 函式。我懷疑這是否可行,但我想知道。
- 還有其他燃燒 HELLOCoins 的解決方案嗎?
選項 1 似乎是最簡單的選項,但乙太坊在其中一些低編號地址有“預編譯”(硬編碼的智能合約,如 keccak256 等)。如果你想避免這些,你可以選擇一個更大的地址。如果您只是希望令牌無法訪問,那麼您選擇哪個地址並不重要,只要沒有人擁有私鑰即可。但是,如果您想說服其他人您沒有私鑰,請務必選擇看起來非隨機的東西,例如 0xFFFFFF… 或 0x000000000000000000000000000000000DEADBEEF。
選項 2 不起作用。
另一種選擇是創建一個不能呼叫的智能合約
transfer
,例如 justcontract BurnAddress { /* nothing here, so tokens can't be retrieved */ }
。部署它並將令牌發送到那裡。