Ethereum
Klaytn cung cấp các loại giao dịch được bọc nhằm hỗ trợ khả năng tương thích với Ethereum. Các loại giao dịch Ethereum trong Klaytn có cùng các thuộc tính và sơ đồ mã hóa RLP với thiết kể của Ethereum, ngoại trừ dấu phân tách loại một byte có tên là EthereumTxTypeEnvelope
. Vì thế, người dùng có thể triển khai thành công các giao dịch được tạo bằng công cụ phát triển Ethereum trên Klaytn. Dấu phân tách loại cũng được bỏ qua khi người dùng sử dụng API không gian tên eth
để họ có thể sử dụng Klaytn như Ethereum. Khi sử dụng các API không gian tên klay
, người dùng có thể triển khai và truy xuất các giao dịch có định dạng Ethereum như một loại giao dịch Klaytn và không bị nhầm lẫn với các loại giao dịch Klaytn hiện có.
EthereumTxTypeEnvelope
EthereumTxTypeEnvelope là tiền tố một byte cho các giao dịch thô, biểu thị các loại giao dịch Ethereum. Ethereum đã ứng dụng sơ đồ loại giao dịch có thể mở rộng từ EIP-2718 và sử dụng một hệ thống đánh số phân loại có xung đột với Klaytn. Để giải quyết xung đột giữa hai sơ đồ loại giao dịch khác nhau, Klaytn đã giới thiệu EthereumTxTypeEnvelope
, cho phép phân tách và mở rộng các loại giao dịch Ethereum trong tương lai.
EthereumTxTypeEnvelope
là một dấu phân tách loại bổ sung và chỉ được sử dụng cho các giao dịch thô và đánh số phân loại. Nó không được sử dụng cho hàm băm giao dịch hoặc hàm băm chữ ký. Vì mục đích đó, EthereumTransactionType
, như được định nghĩa trong EIP, sẽ được sử dụng.
EthereumTxTypeEnvelope:
0x78
TxHashRLP : EthereumTransactionType || TransactionPayload
RawTransaction : EthereumTxTypeEnvelope || Loại giao dịch Ethereum || TransactionPayload
TxTypeEthereumAccessList
TxTypeEthereumAccessList
đại diện cho một loại giao dịch Ethereum được chỉ định trong EIP-2930. Loại giao dịch này chứa một danh sách quyền truy cập, một danh sách các địa chỉ và khóa lưu trữ mà giao dịch cần phải truy cập. Vì loại giao dịch này tồn tại để hỗ trợ khả năng tương thích, nó chỉ hoạt động với các EOA liên kết với [AccountKeyLegacy]. Các EOA liên kết với loại khóa tài khoản khác sẽ sử dụng những loại giao dịch khác như TxTypeValueTransfer
, TxTypeSmartContractExecution
, v.v. Loại giao dịch này có thể tạo tài khoản, chuyển token, triển khai/thực thi hợp đồng thông minh hoặc kết hợp những hoạt động vừa nêu.
LƯU Ý: Mạng Klaytn có thể xử lý loại giao dịch này sau EthTxTypeCompatibleBlock
LƯU Ý: Loại giao dịch này chỉ hỗ trợ định dạng của loại giao dịch Ethereum. Khác với EIP-2930, việc sử dụng danh sách quyền truy cập không mang lại lợi ích về mặt phí giao dịch.
Thuộc tính
Thuộc tính | type | Mô tả |
---|---|---|
type | uint8 (Go) | Loại |
chainId | *big.Int (Go) | ID chuỗi đích. |
nonce | uint64 (Go) | Giá trị dùng để định danh duy nhất cho một giao dịch của người gửi. Nếu hai giao dịch có cùng một giá trị số dùng một lần do người gửi tạo ra, chỉ có một giao dịch sẽ được thực thi. |
giá gas | *big.Int (Go) | Hệ số nhân để tính toán số lượng token mà người gửi sẽ thanh toán. Lượng token mà người gửi sẽ thanh toán được tính theo công thức |
gas | uint64 (Go) | Giá trị phí giao dịch tối đa mà giao dịch được phép sử dụng. |
đến | *common.Address (Go) | Địa chỉ tài khoản sẽ nhận giá trị được chuyển. |
giá trị | *big.Int (Go) | Số lượng KLAY tính bằng |
data | []byte (Go) | Dữ liệu được gắn kèm giao dịch, dùng để thực thi giao dịch. |
accessList | type.AccessList (Go) | Một danh sách gồm các địa chỉ và khóa lưu trữ bao gồm [](common.Address, []common.Hash). |
v, r, s | *big.Int (Go) | Chữ ký mật mã được tạo bởi người gửi để cho phép người nhận lấy được địa chỉ của người gửi. |
Mã hóa RLP cho chữ ký
Để tạo chữ ký cho loại giao dịch này, việc tuần tự hóa RLP phải được thực hiện như sau:
LƯU Ý: Loại giao dịch này phải được ký bằng London Signer
Mã hóa RLP cho SenderTxHash
Để lấy SenderTxHash
cho loại giao dịch này, việc tuần tự hóa RLP được thực hiện như sau:
Mã hóa RLP cho hàm băm giao dịch
Để tạo một hàm băm giao dịch, việc tuần tự hóa RLP được thực hiện nhu sau:
Giao dịch thô
Mã hóa RLP (Ví dụ)
Phần dưới đây cho thấy kết quả của quá trình tuần tự hóa RLP và đối tượng giao dịch:
Kết quả đầu ra RPC (Example)
Phần dưới đây cho thấy một đối tượng giao dịch được trả về qua JSON RPC.
Kết quả trả về của eth_getTransactionByHash
Kết quả trả về của klay_getTransactionByHash
TxTypeEthereumDynamicFee
TxTypeEthereumDynamicFee
đại diện cho một loại giao dịch Ethereum được chỉ định trong EIP-1559. Loại giao dịch này chứa gasTipCap
và gasFeeCap
thay vì gasPrice
. Vì loại giao dịch này tồn tại để hỗ trợ khả năng tương thích, nó chỉ hoạt động với các EOA liên kết với [AccountKeyLegacy]. Các EOA liên kết với loại khóa tài khoản khác sẽ sử dụng những loại giao dịch khác như TxTypeValueTransfer
, TxTypeSmartContractExecution
, v.v. Loại giao dịch này có thể tạo tài khoản, chuyển token, triển khai/thực thi hợp đồng thông minh hoặc kết hợp những hoạt động vừa nêu.
LƯU Ý: Mạng Klaytn có thể xử lý loại giao dịch này sau EthTxTypeCompatibleBlock
LƯU Ý: Hiện tại, loại giao dịch này chỉ hỗ trợ định dạng của loại giao dịch Ethereum. Khác với EIP-2930, việc sử dụng danh sách quyền truy cập không mang lại lợi ích về mặt phí giao dịch.
LƯU Ý: Vì Klaytn có giá gas cố định, gasTipCap
và gasFeeCap
nên lấy giá gas cho mạng lưới tương ứng, mức giá này là 250 ston vào thời điểm viết bài.
Thuộc tính
Thuộc tính | Loại | Mô tả |
---|---|---|
type | uint8 (Go) | Loại |
chainId | *big.Int (Go) | ID chuỗi đích. |
nonce | uint64 (Go) | Giá trị dùng để định danh duy nhất cho một giao dịch của người gửi. Nếu hai giao dịch có cùng một giá trị số dùng một lần do người gửi tạo ra, chỉ có một giao dịch sẽ được thực thi. |
gasTipCap | *big.Int (Go) | Hệ số nhân để biết mức phí người gửi phải thanh toán ngoài |
gasFeeCap | *big.Int (Go) | Hệ số nhân để tính toán số lượng token mà người gửi sẽ thanh toán. Lượng token mà người gửi sẽ thanh toán được tính theo công thức |
gas | uint64 (Go) | Giá trị phí giao dịch tối đa mà giao dịch được phép sử dụng. |
đến | *common.Address (Go) | Địa chỉ tài khoản sẽ nhận giá trị được chuyển. |
giá trị | *big.Int (Go) | Số lượng KLAY tính bằng |
data | []byte (Go) | Dữ liệu được gắn kèm giao dịch, dùng để thực thi giao dịch. |
accessList | type.AccessList (Go) | Một danh sách gồm các địa chỉ và khóa lưu trữ bao gồm [](common.Address, []common.Hash). |
v, r, s | *big.Int (Go) | Chữ ký mật mã được tạo bởi người gửi để cho phép người nhận lấy được địa chỉ của người gửi. |
Mã hóa RLP cho chữ ký
Để tạo chữ ký cho loại giao dịch này, việc tuần tự hóa RLP phải được thực hiện như sau:
LƯU Ý: Loại giao dịch này phải được ký bằng London Signer
Mã hóa RLP cho SenderTxHash
Để lấy SenderTxHash
cho loại giao dịch này, việc tuần tự hóa RLP được thực hiện như sau:
Mã hóa RLP cho hàm băm giao dịch
Để lấy một hàm băm giao dịch, việc tuần tự hóa RLP được thực hiện nhu sau:
Giao dịch thô
Mã hóa RLP (Ví dụ)
Phần dưới đây cho thấy kết quả của quá trình tuần tự hóa RLP và đối tượng giao dịch:
Kết quả đầu ra RPC (Example)
Phần dưới đây cho thấy một đối tượng giao dịch được trả về qua JSON RPC.
Kết quả trả về của eth_getTransactionByHash
Kết quả trả về của klay_getTransactionByHash
Last updated