以太坊上新的事務類型:EIP-2718 簡介

以太坊采用不同的事務類型來定義不同的操作,例如,將以太幣發送至某個地址、部署合約等等,

在最近的柏林升級之前,以太坊主要有 4 種不同的事務 “類型”:

  • 帶有收款方地址、數據字段的常規事務
  • 不帶有收款方地址的合約部署事務,其數據字段填寫的是合約代碼
  • 簽名 v 值不含鏈 ID 的事務(EIP155 實行之前)
  • 簽名 v 值含有鏈 ID 的事務

上述事務類型都采用相同的格式,不同的以太坊客戶端、庫和其它工具必須分析每個事務來判斷它屬于哪個類型。這四種不同的事務類型引入了很多復雜的情況,我們需要查看事務的所有字段來判斷其所屬類型。這是人們在提議新的事務類型(如元事務、多簽事務等)時不得不面對的重大難題,直到 EIP 2718 出現才打破這一困境,以太坊現在有了新的事務標準 Typed Transaction Envelope(類型化事務封套),由 EIP 2718 的提議者 Micah Zoltu 定義,該標準為以太坊上的一些新功能和即將開發的功能奠定了基礎,在本文中,我們將回顧柏林升級引入的一些標準以及未來有可能引入的其它標準。

標準化的事務封套

過去,以太坊的事務都采用同一種格式。每個以太坊事務都有 6 個字段:nonce、gasprice、gaslimit、to address、value、data、v、r 和 s。這些字段需要經過 RLP 編碼,如下所示:RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])

EIP 2718 為類型化事務定義了一種新的通用封套,在新的標準下,事務如下所示:TransactionType || TransactionPayload

上述字段的定義是:

  • TransactionType:0至0x7f范圍內的某個值,最多可代表 128 種事務類型。
  • TransactionPayload:由事務類型定義的任意一個字節數組。

將上述字段連接(合并)起來,即可得到一個類型化事務,EIP 2718 沒有為事務的有效負載定義格式,因此,事務的有效負載可以是任意一段經過編碼的字節序列,只要采用符合新的事務類型(如 RLP、SSZ 等)定義的編碼器即可。之所以選擇簡單的字節相連方式,是因為讀取字節數組的第一個字節非常簡單,無需使用任何庫或工具。也就是說,你不需要使用 RLP 或 SSZ 解析器來判斷事務類型。這個方法可以避免新的 EIP 在引入新的事務類型時增加現有事務格式的復雜性,并讓不同的以太坊工具(客戶端、庫)更容易區分不同的事務,在增加復雜性這一點上,EIP-155 就是一個很好的例子。它通過在事務中引入鏈 ID 來實現重放攻擊保護。由于在事務參數中增加新的字段會破壞向后兼容性,鏈 ID 被編碼進了事務簽名的恢復參數(v),就像我在上一篇關于數字簽名的文章中解釋的那樣。實行 EIP 2718 后,我們可以在不影響向后兼容性的情況下定義新的事務類型。

向后兼容性和傳統事務

EIP 2718 的一大特點就是向后兼容,EIP 2718 是完全向后兼容的,也就是說,現有的工具、庫、(硬件)錢包和事務都是開箱即用的,但是它們無法使用 EIP 2718(以及采用 EIP 2718 的標準)提供的新 “功能”。以太坊網路上的新事務依然可以使用舊的事務格式(即,傳統事務),新的事務類型最多可達0x7f種,選擇這一上限是為了保證向后兼容傳統事務。經過 RLP 編碼的事務的第一個字節始終大于或等于0xc0,因此類型化事務永遠不會與傳統事務產生沖突,而且類型化事務和傳統事務之間可以通過第一個字節來區分。EIP 2718 本身并未定義任何事務類型,不過已經出現了一些采用這一新標準的 EIP :

  • EIP 1559:改革 ETH 1.0 鏈的交易費市場,你肯定聽說過這個 EIP。
  • EIP 2711:代付事務、限期事務和批量事務。這個 EIP 同樣由Micah Zoltu 提出,EIP-2718 中定義的標準就是為此創建的,
  • EIP 2930:可選訪問列表。

我們將在下文詳細解釋其中一些標準,

為什么要引入新的事務類型?

新的事務類型可以實現原本需要借助于 Solidity 合約或第三方解決方案的功能集成。以限期事務為例,在現有解決方案中,你可以將資金發送至 Solidity 合約,簽署一個事務并將其發送到專門的節點,讓該事務獲得額外的參數(例如,有效期)。然后,該節點會處理該事務,確保它在有效期之前執行,否則該事務不會被廣播。一些 dApp 和合約(如 Uniswap)內置該功能,但是對于大多數事務而言很難實現,EIP 2711 可以將該功能添加到以太坊網路上,同時保證向后兼容傳統事務(正如上文所述),而且無需使用智能合約或專門的節點。但是,EIP 2711 目前還是草案,我們還無法確定它近期是否會在以太坊網路上實行。EIP 2711 也有可能被拆分成幾個小的 EIP(如 EIP 3074),

-圖源:f2pool-

EIP 1559 提出的新的事務格式

在 EIP 1559 中,gas 的運作方式發生了巨大變化:gas 會被部分銷毀,不再全部支付給礦工。本文不會具體闡述 EIP 1559 的所有變化,但是 EIP 1559 確實提出了一種新的事務格式:

0x02 || RLP([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList, signatureYParity, signatureR, signatureS])最顯著的變化包括:

  • 用 “每單位 gas 的最高優先費用(max priority fee per gas)” 和 “每單位 gas 的最高費用(max fee per gas)” 來代替 gas price。
  • 鏈 ID 是單獨編碼的,不再包含在簽名v值內,這實際上是使用更簡單的實現來代替 EIP 155,
  • 簽名v值變成了一個簡單的校驗位(“簽名 Y 校驗位”),不是 0 就是 1,具體取決于使用橢圓曲線上的哪個點,

EIP 1559 還提供了一種基于 EIP 2930 指定訪問列表的方法。這樣可以減少事務的 gas 成本。由于 EIP 1559 極大地改變了 gas 費的運作方式,它并不能直接兼容傳統事務,為了保證向后兼容性,EIP 1559 提出了一種將傳統事務升級成兼容 EIP 1559 事務的方法,即,使用 “每單位 gas 的最高優先費用” 和 “每單位 gas 的最高費用” 來代替 “gas 價格”。

原生元事務和批量事務

元事務誕生已經有幾年了,但是到目前為止都需要依靠智能合約,和限期事務一樣,元事務也要求用戶將以太幣發送至專為元事務創建的智能合約,EIP 2711 使得原生元事務(又稱代付事務)和批量事務成為可能,無需依賴于智能合約。這里定義了一個新的事務格式,事務類型是 0x02(但是事務類型可能會更改,因為 EIP-1559 也使用同一個事務類型標識),交易如下所示:

0x02 || RLP([…SenderPayload, …SenderSignature, …GasPayerPayload, …GasPayerSignature])EIP 2711 主要包括 gas 付款方(用來支付事務 gas 費的賬戶)的有效負載(可選)和簽名。這樣一來,即使不持有任何以太幣的地址也能發送 ERC 20 代幣。發送方的有效負載和簽名等均基于事務子類型(1 至 4)定義。例如,如果交易類型為 1,發送方的有效負載被定義為:

[1, ChildTransaction[], nonce, ChainId, ValidUntil, gasLimit, gasPrice]ChildTransaction 被定義為 [to, value, data],可以在單個事務內指定收款方地址、值和數據。例如,ChildTransaction 可以用來在單筆事務中調用 ERC 20 的 approve 和 transferFrom。如果你想了解更多關于 EIP 2711 的事務子類型的資訊,我建議你閱讀 EIP 2711 的規范,

結論

類型化事務為以太坊網路帶來了更多可能性。我們在創建類型化事務時不會增加以太坊客戶端、庫和其它工具的復雜性。目前,由于 EIP 2718 最近才被添加到網路中,新的事務類型還沒有得到廣泛應用,但是目前還有一些很棒的 EIP 正在開發中,例如,EIP 2711 提出了限期事務、批量事務和代付事務(即,元事務),由于以太坊上可以定義新的事務類型,提出新的 EIP 也會變得更容易,

(完)

(文內有許多超鏈接,可點擊左下 ”閱讀原文“ 從 EthFans 網站上獲取)

原文鏈接:

https://blog.mycrypto.com/new-transaction-types-on-ethereum/

作者: Maarten Zuidhoorn

翻譯&校對: 閔敏 & 阿劍

0 条回复 A文章作者 M管理員
    暫無討論,說說你的看法吧