2019-08-05 23:03:41 +03:00
|
|
|
import
|
2023-01-20 11:34:31 +07:00
|
|
|
./eth_types_rlp
|
2022-09-02 16:57:52 +02:00
|
|
|
|
|
|
|
export eth_types_rlp
|
2019-08-05 23:03:41 +03:00
|
|
|
|
|
|
|
const
|
2024-06-12 00:13:11 +07:00
|
|
|
EIP155_CHAIN_ID_OFFSET* = 35'u64
|
2023-01-10 18:56:27 +02:00
|
|
|
|
2021-06-26 15:18:42 +07:00
|
|
|
func rlpEncodeLegacy(tx: Transaction): auto =
|
|
|
|
var w = initRlpWriter()
|
|
|
|
w.startList(6)
|
|
|
|
w.append(tx.nonce)
|
|
|
|
w.append(tx.gasPrice)
|
|
|
|
w.append(tx.gasLimit)
|
|
|
|
w.append(tx.to)
|
|
|
|
w.append(tx.value)
|
|
|
|
w.append(tx.payload)
|
|
|
|
w.finish()
|
2019-08-05 23:03:41 +03:00
|
|
|
|
2021-06-26 15:18:42 +07:00
|
|
|
func rlpEncodeEip155(tx: Transaction): auto =
|
|
|
|
let chainId = (tx.V - EIP155_CHAIN_ID_OFFSET) div 2
|
|
|
|
var w = initRlpWriter()
|
|
|
|
w.startList(9)
|
|
|
|
w.append(tx.nonce)
|
|
|
|
w.append(tx.gasPrice)
|
|
|
|
w.append(tx.gasLimit)
|
|
|
|
w.append(tx.to)
|
|
|
|
w.append(tx.value)
|
|
|
|
w.append(tx.payload)
|
|
|
|
w.append(chainId)
|
2024-06-12 00:13:11 +07:00
|
|
|
w.append(0'u8)
|
|
|
|
w.append(0'u8)
|
2021-06-26 15:18:42 +07:00
|
|
|
w.finish()
|
2019-08-05 23:03:41 +03:00
|
|
|
|
2021-06-26 15:18:42 +07:00
|
|
|
func rlpEncodeEip2930(tx: Transaction): auto =
|
|
|
|
var w = initRlpWriter()
|
2023-01-20 11:34:31 +07:00
|
|
|
w.append(TxEip2930)
|
2021-06-26 15:18:42 +07:00
|
|
|
w.startList(8)
|
|
|
|
w.append(tx.chainId.uint64)
|
|
|
|
w.append(tx.nonce)
|
|
|
|
w.append(tx.gasPrice)
|
|
|
|
w.append(tx.gasLimit)
|
|
|
|
w.append(tx.to)
|
|
|
|
w.append(tx.value)
|
|
|
|
w.append(tx.payload)
|
|
|
|
w.append(tx.accessList)
|
|
|
|
w.finish()
|
2021-05-15 14:26:51 +07:00
|
|
|
|
2021-06-26 15:18:42 +07:00
|
|
|
func rlpEncodeEip1559(tx: Transaction): auto =
|
|
|
|
var w = initRlpWriter()
|
2023-01-20 11:34:31 +07:00
|
|
|
w.append(TxEip1559)
|
2021-06-26 15:18:42 +07:00
|
|
|
w.startList(9)
|
|
|
|
w.append(tx.chainId.uint64)
|
|
|
|
w.append(tx.nonce)
|
2024-06-12 00:13:11 +07:00
|
|
|
w.append(tx.maxPriorityFeePerGas)
|
|
|
|
w.append(tx.maxFeePerGas)
|
2021-06-26 15:18:42 +07:00
|
|
|
w.append(tx.gasLimit)
|
|
|
|
w.append(tx.to)
|
|
|
|
w.append(tx.value)
|
|
|
|
w.append(tx.payload)
|
|
|
|
w.append(tx.accessList)
|
|
|
|
w.finish()
|
2021-05-15 14:26:51 +07:00
|
|
|
|
2023-01-20 11:34:31 +07:00
|
|
|
func rlpEncodeEip4844(tx: Transaction): auto =
|
|
|
|
var w = initRlpWriter()
|
|
|
|
w.append(TxEip4844)
|
|
|
|
w.startList(11)
|
|
|
|
w.append(tx.chainId.uint64)
|
|
|
|
w.append(tx.nonce)
|
2024-06-12 00:13:11 +07:00
|
|
|
w.append(tx.maxPriorityFeePerGas)
|
|
|
|
w.append(tx.maxFeePerGas)
|
2023-01-20 11:34:31 +07:00
|
|
|
w.append(tx.gasLimit)
|
|
|
|
w.append(tx.to)
|
|
|
|
w.append(tx.value)
|
|
|
|
w.append(tx.payload)
|
|
|
|
w.append(tx.accessList)
|
2023-07-28 10:19:00 +07:00
|
|
|
w.append(tx.maxFeePerBlobGas)
|
2023-01-20 11:34:31 +07:00
|
|
|
w.append(tx.versionedHashes)
|
|
|
|
w.finish()
|
|
|
|
|
2024-09-13 13:37:43 +07:00
|
|
|
func rlpEncodeEip7702(tx: Transaction): auto =
|
|
|
|
var w = initRlpWriter()
|
|
|
|
w.append(TxEip7702)
|
|
|
|
w.startList(10)
|
|
|
|
w.append(tx.chainId.uint64)
|
|
|
|
w.append(tx.nonce)
|
|
|
|
w.append(tx.maxPriorityFeePerGas)
|
|
|
|
w.append(tx.maxFeePerGas)
|
|
|
|
w.append(tx.gasLimit)
|
|
|
|
w.append(tx.to)
|
|
|
|
w.append(tx.value)
|
|
|
|
w.append(tx.payload)
|
|
|
|
w.append(tx.accessList)
|
|
|
|
w.append(tx.authorizationList)
|
|
|
|
w.finish()
|
|
|
|
|
2021-06-26 15:18:42 +07:00
|
|
|
func rlpEncode*(tx: Transaction): auto =
|
|
|
|
case tx.txType
|
|
|
|
of TxLegacy:
|
|
|
|
if tx.V >= EIP155_CHAIN_ID_OFFSET:
|
2022-07-21 08:58:17 +00:00
|
|
|
tx.rlpEncodeEip155
|
2021-06-26 15:18:42 +07:00
|
|
|
else:
|
|
|
|
tx.rlpEncodeLegacy
|
|
|
|
of TxEip2930:
|
|
|
|
tx.rlpEncodeEip2930
|
|
|
|
of TxEip1559:
|
|
|
|
tx.rlpEncodeEip1559
|
2023-01-20 11:34:31 +07:00
|
|
|
of TxEip4844:
|
|
|
|
tx.rlpEncodeEip4844
|
2024-09-13 13:37:43 +07:00
|
|
|
of TxEip7702:
|
|
|
|
tx.rlpEncodeEip7702
|
2021-05-14 22:34:32 +07:00
|
|
|
|
|
|
|
func txHashNoSignature*(tx: Transaction): Hash256 =
|
2021-06-26 15:18:42 +07:00
|
|
|
# Hash transaction without signature
|
2022-09-02 16:57:52 +02:00
|
|
|
keccakHash(rlpEncode(tx))
|