以太坊兼容性
Kaia 提供封裝的交易類型,以支持以太坊兼容性。除了名為 "EthereumTxTypeEnvelope "的單字節類型分隔符外,Kaia 中的以太坊交易類型具有與以太坊設計相同的屬性和 RLP 編碼方案。因此,用戶可以在 Kaia 上成功部署以太坊開發工具生成的交易。當用戶使用 eth 命名空間 API 時,類型分隔符也會被省略,因此他們可以像使用以太坊一樣使用 Kaia。使用 kaia 命名空間 API,用戶可以將以太坊格式化的交易作為 Kaia 交易類型進行部署和檢索,而不會與現有的 Kaia 交易類型混淆。
EthereumTxTypeEnvelope
EthereumTxTypeEnvelope 是原始交易的單字節前綴,表示以太坊交易類型。以太坊採用了EIP-2718中的可擴展交易類型方案,它使用的類型編號系統與 Kaia 的衝突。為了解決兩種不同交易類型方案之間的衝突,Kaia 引入了 "EthereumTxTypeEnvelope",允許未來以太坊交易類型的分離和擴展。
EthereumTxTypeEnvelope "是一個額外的類型分隔符,僅用於原始交易和類型編號。它不用於交易哈希或簽名哈希。為此,使用了 EIPs 中定義的 "EthereumTransactionType"。
- EthereumTxTypeEnvelope:
0x78 - TxHashRLP : EthereumTransactionType || TransactionPayload
- RawTransaction : EthereumTxTypeEnvelope || EthereumTransactionType || TransactionPayload
TxTypeEthereumAccessList
TxTypeEthereumAccessList "代表 EIP-2930 中指定的以太坊交易類型。該事務類型包含一個訪問列表,即該事務要訪問的地址和存儲密鑰列表。由於該交易類型的存在是為了支持兼容性,因此只適用於與[AccountKeyLegacy]相關的 EOA。與其他賬戶密鑰類型相關的 EOA 應使用其他交易類型,如 "TxTypeValueTransfer"、"TxTypeSmartContractExecution "等。這種交易類型可以創建賬戶、轉移代幣、部署/執行智能合約或混合使用上述交易類型。
Kaia 網絡可在 "EthTxTypeCompatibleBlock "之後處理該交易類型。
注意:此交易類型只支持以太坊交易類型的格式。與 EIP-2930不同,使用訪問列表不會帶來交易費用方面的好處。
屬性
| 屬性 | 類型 | 說明 |
|---|---|---|
| type | uint8(Go) | 由 EthereumTxTypeEthereumAccessList 和 EthereumTransactionType 連接而成的 TxTypeEthereumAccessList 類型。必須為 0x7801。 |
| chainId | *big.Int ( Go) | 目標鏈 ID。 |
| nonce | uint64 (Go) | 用於唯一標識發件人交易的值。如果一個發送方生成了兩個具有相同 nonce 的交易,則只執行其中一個。 |
| gasPrice | *big.Int ( Go) | 一個乘數,用於計算發件人將支付多少代 幣。發送方將支付的代幣數量通過 gas * gasPrice 計算得出。例如,如果 gas 為 10,gasPrice 為 10^18,發件人將支付 10 KAIA 的交易費。 See Unit of KAIA. |
| gas | uint64 (Go) | 交易允許使用的最高交易費金額。 |
| to | *common.Address(Go\) | 接收轉賬金額的賬戶地址。 |
| value | *big.Int ( Go) | 以 kei 為單位的 KAIA 轉賬金額。 |
| data | \byte (去) | 附屬於事務的數據,用於執行事務。 |
| accessList | type.AccessList(Go) | 由 [](common.Address,[]common.Hash)組成的地址和存儲密鑰列表。 |
| v, r, s | *big.Int ( Go) | 發送方為讓接收方獲取發送方地址而生成的加密簽名。 |
簽名的 RLP 編碼
為這種交易類型製作簽名的 RLP 序列化過程如下:
此類交易應由倫敦簽名人簽名
SigRLP = EthereumTransactionType || encode([chainId, nonce, gasPrice, gasLimit, to, value, data, accessList])SigHash = keccak256(SigRLP)Signature = sign(SigHash, <private key>)
SenderTxHash 的 RLP 編碼
要獲取該事務類型的 SenderTxHash 值,RLP 序列化過程如下:
SenderTxHashRLP = EthereumTransactionType || encode([chainId, nonce, gasPrice, gasLimit, to, value, data, accessList, v, r, s])SenderTxHash = keccak256(SenderTxHashRLP)Signature = sign(SenderTxHash, <private key>)
交易哈希的 RLP 編碼
製作交易哈希值的 RLP 序列化過程如下:
TxHashRLP = EthereumTransactionType || encode([chainId, nonce, gasPrice, gasLimit, to, value, data, accessList, v, r, s])TxHash = keccak256(TxHashRLP)
原始交易
RawTx = EthereumTxTypeEnvelope || EthereumTransactionType || encode([chainId, nonce, gasPrice, gasLimit, to, value, data, accessList, v, r, s])