2020-04-27 13:16:11 +00:00
|
|
|
{.used.}
|
|
|
|
|
2021-04-06 11:33:24 +00:00
|
|
|
import
|
2021-12-11 18:12:55 +00:00
|
|
|
std/[os, json],
|
|
|
|
unittest2,
|
2021-05-14 14:48:21 +00:00
|
|
|
stew/byteutils,
|
2021-04-06 11:33:24 +00:00
|
|
|
../../eth/[common, rlp]
|
2019-02-05 10:10:36 +00:00
|
|
|
|
2021-05-17 03:07:05 +00:00
|
|
|
type
|
|
|
|
EthHeader = object
|
|
|
|
header: BlockHeader
|
|
|
|
|
2021-05-14 14:48:21 +00:00
|
|
|
func `==`(a, b: ChainId): bool =
|
|
|
|
a.uint64 == b.uint64
|
2019-02-05 10:10:36 +00:00
|
|
|
|
2021-05-14 14:48:21 +00:00
|
|
|
proc loadFile(x: int) =
|
|
|
|
let fileName = "tests" / "rlp" / "eip2718" / "acl_block_" & $x & ".json"
|
|
|
|
test fileName:
|
|
|
|
let n = json.parseFile(fileName)
|
|
|
|
let data = n["rlp"].getStr()
|
2021-05-17 03:07:05 +00:00
|
|
|
var bytes1 = hexToSeqByte(data)
|
|
|
|
var blk1 = rlp.decode(bytes1, EthBlock)
|
|
|
|
|
|
|
|
let bytes2 = rlp.encode(blk1)
|
|
|
|
var blk2 = rlp.decode(bytes2, EthBlock)
|
|
|
|
check blk1 == blk2
|
|
|
|
check bytes1 == bytes2
|
|
|
|
|
|
|
|
var r = rlpFromBytes(bytes1)
|
|
|
|
let header = r.read(EthHeader).header
|
|
|
|
let body = r.readRecordType(BlockBody, false)
|
2021-05-14 14:48:21 +00:00
|
|
|
|
2021-05-17 03:07:05 +00:00
|
|
|
let blk3 = EthBlock(header: header, txs: body.transactions, uncles: body.uncles)
|
|
|
|
let bytes3 = rlp.encode(blk3)
|
|
|
|
check blk1 == blk3
|
|
|
|
check bytes1 == bytes3
|
2021-05-14 14:48:21 +00:00
|
|
|
|
|
|
|
proc suite1() =
|
|
|
|
suite "rlp encoding":
|
|
|
|
test "receipt roundtrip":
|
|
|
|
let a = Receipt(
|
2021-06-26 08:18:42 +00:00
|
|
|
receiptType: LegacyReceipt,
|
|
|
|
isHash: false,
|
|
|
|
status: false,
|
|
|
|
cumulativeGasUsed: 51000
|
2021-05-14 14:48:21 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
let hash = rlpHash(a)
|
|
|
|
let b = Receipt(
|
2021-06-26 08:18:42 +00:00
|
|
|
receiptType: LegacyReceipt,
|
|
|
|
isHash: true,
|
|
|
|
hash: hash,
|
|
|
|
cumulativeGasUsed: 21000
|
2021-05-14 14:48:21 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
let abytes = rlp.encode(a)
|
|
|
|
let bbytes = rlp.encode(b)
|
|
|
|
let aa = rlp.decode(abytes, Receipt)
|
|
|
|
let bb = rlp.decode(bbytes, Receipt)
|
|
|
|
check aa == a
|
|
|
|
check bb == b
|
2019-02-05 10:10:36 +00:00
|
|
|
|
2021-06-26 08:18:42 +00:00
|
|
|
test "EIP 2930 receipt":
|
2021-05-14 14:48:21 +00:00
|
|
|
let a = Receipt(
|
2021-06-26 08:18:42 +00:00
|
|
|
receiptType: Eip2930Receipt,
|
|
|
|
status: true
|
2021-05-14 14:48:21 +00:00
|
|
|
)
|
2019-02-05 10:10:36 +00:00
|
|
|
|
2021-05-14 14:48:21 +00:00
|
|
|
let b = Receipt(
|
2021-06-26 08:18:42 +00:00
|
|
|
receiptType: Eip2930Receipt,
|
|
|
|
status: false,
|
|
|
|
cumulativeGasUsed: 21000
|
2021-05-14 14:48:21 +00:00
|
|
|
)
|
2019-02-05 10:10:36 +00:00
|
|
|
|
2021-05-14 14:48:21 +00:00
|
|
|
let abytes = rlp.encode(a)
|
|
|
|
let bbytes = rlp.encode(b)
|
|
|
|
let aa = rlp.decode(abytes, Receipt)
|
|
|
|
let bb = rlp.decode(bbytes, Receipt)
|
|
|
|
check aa == a
|
|
|
|
check bb == b
|
2019-02-05 10:10:36 +00:00
|
|
|
|
2022-11-25 10:07:51 +00:00
|
|
|
test "EIP 4895 roundtrip":
|
|
|
|
let a = Withdrawal(
|
|
|
|
index: 1,
|
|
|
|
validatorIndex: 2,
|
|
|
|
address: EthAddress [
|
|
|
|
0.byte, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
|
|
|
|
11, 12, 13, 14, 15, 16, 17, 18, 19],
|
2023-01-14 14:39:23 +00:00
|
|
|
amount: 4)
|
2022-11-25 10:07:51 +00:00
|
|
|
|
|
|
|
let abytes = rlp.encode(a)
|
|
|
|
let aa = rlp.decode(abytes, Withdrawal)
|
|
|
|
check aa == a
|
|
|
|
|
2021-05-14 14:48:21 +00:00
|
|
|
proc suite2() =
|
|
|
|
suite "eip 2718 transaction":
|
|
|
|
for i in 0..<10:
|
|
|
|
loadFile(i)
|
2019-02-05 10:10:36 +00:00
|
|
|
|
2022-12-13 19:53:05 +00:00
|
|
|
test "rlp roundtrip EIP1559 / EIP4895 / EIP4844":
|
|
|
|
proc doTest(h: BlockHeader) =
|
|
|
|
let xy = rlp.encode(h)
|
|
|
|
let hh = rlp.decode(xy, BlockHeader)
|
|
|
|
check h == hh
|
|
|
|
|
2021-06-26 08:18:42 +00:00
|
|
|
var h: BlockHeader
|
2022-12-13 19:53:05 +00:00
|
|
|
doTest h
|
|
|
|
|
|
|
|
# EIP-1559
|
|
|
|
h.fee = some 1234.u256
|
|
|
|
doTest h
|
|
|
|
|
|
|
|
# EIP-4895
|
|
|
|
h.withdrawalsRoot = some Hash256.fromHex(
|
|
|
|
"0x7a64245f7f95164f6176d90bd4903dbdd3e5433d555dd1385e81787f9672c588")
|
|
|
|
doTest h
|
|
|
|
|
|
|
|
# EIP-4844
|
2023-07-28 03:19:00 +00:00
|
|
|
h.blobGasUsed = some 1234'u64
|
|
|
|
h.excessBlobGas = some 1234'u64
|
2022-12-13 19:53:05 +00:00
|
|
|
doTest h
|
2021-06-26 08:18:42 +00:00
|
|
|
|
2021-05-14 14:48:21 +00:00
|
|
|
suite1()
|
2021-06-26 08:18:42 +00:00
|
|
|
suite2()
|