mirror of https://github.com/status-im/nim-eth.git
Fix block body encoding (#598)
why: List wrapper was missing in `append()` mixin.
This commit is contained in:
parent
25b0da0280
commit
9a1d35f803
|
@ -358,10 +358,11 @@ proc rlpHash*[T](v: T): Hash256 =
|
|||
func blockHash*(h: BlockHeader): KeccakHash {.inline.} = rlpHash(h)
|
||||
|
||||
proc append*(w: var RlpWriter, b: BlockBody) =
|
||||
w.startList 2 + b.withdrawals.isSome.ord
|
||||
w.append(b.transactions)
|
||||
w.append(b.uncles)
|
||||
if b.withdrawals.isSome:
|
||||
w.append(b.withdrawals.get)
|
||||
w.append(b.withdrawals.unsafeGet)
|
||||
|
||||
# Is there a better way of doing this? We have tests that call
|
||||
# rlp.readRecordType(BlockBody, false), so I overrode
|
||||
|
|
|
@ -4,12 +4,38 @@ import
|
|||
std/[math, strutils],
|
||||
unittest2,
|
||||
stew/byteutils,
|
||||
../../eth/rlp
|
||||
../../eth/[common, rlp]
|
||||
|
||||
proc q(s: string): string = "\"" & s & "\""
|
||||
proc i(s: string): string = s.replace(" ").replace("\n")
|
||||
proc inspectMatch(r: Rlp, s: string): bool = r.inspect.i == s.i
|
||||
|
||||
proc `==`(a,b: ChainId): bool {.borrow.}
|
||||
## helper for ` test_calcBlockBodyTranscode()`
|
||||
|
||||
proc test_blockBodyTranscode() =
|
||||
## RLP encode/decode a list of `BlockBody` objects. Note that tere is/was a
|
||||
## problem in `eth/common/eth_types_rlp.append()` for `BlockBody` encoding.
|
||||
let blkSeq = @[
|
||||
BlockBody(
|
||||
transactions: @[
|
||||
Transaction(nonce: 1)]),
|
||||
BlockBody(
|
||||
uncles: @[
|
||||
BlockHeader(nonce: [0x20u8,0,0,0,0,0,0,0])]),
|
||||
BlockBody(),
|
||||
BlockBody(
|
||||
transactions: @[
|
||||
Transaction(nonce: 3),
|
||||
Transaction(nonce: 4)])]
|
||||
|
||||
let trBlkSeq = blkSeq.encode.decode(typeof blkSeq)
|
||||
|
||||
check trBlkSeq.len == blkSeq.len
|
||||
for n in 0 ..< min(trBlkSeq.len, trBlkSeq.len):
|
||||
check (n, trBlkSeq[n]) == (n, blkSeq[n])
|
||||
|
||||
|
||||
when (NimMajor, NimMinor, NimPatch) < (1, 4, 0):
|
||||
type AssertionDefect = AssertionError
|
||||
|
||||
|
@ -120,6 +146,9 @@ suite "test api usage":
|
|||
check(not list.hasData)
|
||||
expect AssertionDefect: list.skipElem
|
||||
|
||||
test "encode and decode block body":
|
||||
test_blockBodyTranscode()
|
||||
|
||||
test "toBytes":
|
||||
let rlp = rlpFromHex("f2cb847f000001827666827666a040ef02798f211da2e8173d37f255be908871ae65060dbb2f77fb29c0421447f4845ab90b50")
|
||||
let tok = rlp.listElem(1).toBytes()
|
||||
|
|
Loading…
Reference in New Issue