包裝以太幣
包裝以太幣是一種與以太幣一比一對應的 ERC-20 代幣。它所解決的怪癖源於歷史:以太坊的原生貨幣 ETH 早於 ERC-20 標準出現,因此 ETH 其實並未實作 ERC-20 介面(沒有 transferFrom、沒有 approve)。許多協議——自動造市商、借貸池、拍賣——都是以「統一處理 ERC-20 代幣」的方式撰寫的,若處處把 ETH 當成特例,既醜陋又容易出錯。WETH 讓 ETH 披上一件 ERC-20 的外衣,便能像任何其他代幣一樣在這些協議間流動。
這份合約簡單且完全足額抵押。你呼叫 deposit 並附上一些 ETH;合約鎖住那筆 ETH,並記給你等量的 WETH(deposit 是 payable,其 fallback 通常也會自動包裝,因此直接把 ETH 轉進去也會鑄出 WETH)。要換回去時,你呼叫 withdraw(amount);合約銷毀那筆 WETH,並把等量的 ETH 退給你。因為每一枚 WETH 都由合約中所持的恰好一枚 ETH 撐腰,這個錨定是機械式的、而非市場式的——沒有會漂移的價格,只有一筆你隨時能贖回的鎖定準備金。
以太坊主網上典型的 WETH9 合約,曾在某些時期持有相當大比例的全部 ETH,是史上使用最頻繁的合約之一。一個實務上的注意點:經典的 WETH9 沒有 permit 函式,因此對它的授權仍需一筆獨立的 approve 交易;某些較新的鏈則內建了帶 permit 的 WETH。觀念上,WETH 是最單純的包裝代幣——同一條鏈、同一種資產、無須信任即可贖回——與帶有橋接或託管風險的跨鏈包裝資產形成對比。
// wrap
WETH.deposit{value: 1 ether}(); // 1 ETH locked -> 1 WETH minted
// use it like any ERC-20
WETH.approve(dex, 1 ether);
// unwrap
WETH.withdraw(1 ether); // 1 WETH burned -> 1 ETH returned包裝並不會改變 ETH 的存在總量——它只是換個標籤。鎖在 WETH 合約裡的 ETH 並非「額外」供給,而是你停泊在一張 ERC-20 收據後面的 ETH。