代幣標準與 NFT

ERC-2612 permit

ERC-2612 permit 讓你用「簽署一則訊息」來授權花用者,而不必送出一筆 approve 交易。通常一次 DeFi 互動要花兩筆交易:先 approve(要付 gas、要點一次錢包),再做真正的兌換或存入。permit 把這兩步壓成一步:你在鏈下簽署一則賦予額度的結構化訊息,這個簽章被傳進單一筆鏈上呼叫,使授權與動作一同結算。從使用者的角度看,approve 那一步變成「免 gas」——沒有獨立的交易要付費。

其機制是一個 EIP-712 型別化資料簽章。代幣對外提供 permit(owner, spender, value, deadline, v, r, s);它會重建擁有者所簽署的那則確切訊息(含代幣的 DOMAIN_SEPARATOR、花用者、額度、每位擁有者各自的 nonce,以及一個截止時間),用 ecrecover 還原出簽署者,核對它等於 owner、且截止時間尚未過,再遞增 nonce 以阻止重放,然後才設定額度——這一切都在單一筆呼叫內完成,而這筆呼叫任何人(中繼者,或花用者合約本身)都能代為送出。正是 nonce 與截止時間,讓每張已簽 permit 都只能用一次、且有時效。

同樣的威力也是釣魚的破口。一個簽章請求看起來人畜無害,因為它不是交易、也不顯示 gas,然而一張 permit 簽章授權抽乾代幣餘額的效力,與一筆鏈上 approve 不相上下。像 DAI 早期的自訂 permit、以及更廣泛的 Permit2 合約(一個被眾多應用共用的單一授權對象)都延伸了這個構想,但對使用者而言準則始終不變:看清楚你究竟簽了什麼,尤其是花用者與額度。

// EIP-712 struct the owner signs:
Permit(
  address owner,
  address spender,
  uint256 value,
  uint256 nonce,
  uint256 deadline
)
// then on-chain, in one tx:
token.permit(owner, spender, value, deadline, v, r, s);
token.transferFrom(owner, spender, value);

鏈下簽署,於單一筆交易中完成授權並拉取。

「免 gas」只針對授權這一步,而且只對使用者而言——終究有人要送出那筆鏈上 permit 呼叫並付它的 gas。一張已簽的 permit 在其截止時間到期、或 nonce 失效之前,等同一張無記名授權。

又称
signed approval簽章授權