From 1bf353b653858b9cf2bdd6df6fb2b09d24a66c82 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Wed, 2 Feb 2022 18:44:41 +0100 Subject: [PATCH 1/2] force the 32-byte alignment of nonce and balance --- trie/verkle.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/trie/verkle.go b/trie/verkle.go index 4d624422c7c66..8b2133afabcc3 100644 --- a/trie/verkle.go +++ b/trie/verkle.go @@ -72,7 +72,9 @@ func (t *VerkleTrie) TryUpdateAccount(key []byte, acc *types.StateAccount) error if err = t.TryUpdate(utils.GetTreeKeyNonce(key), nonce[:]); err != nil { return fmt.Errorf("updateStateObject (%x) error: %v", key, err) } - if err = t.TryUpdate(utils.GetTreeKeyBalance(key), acc.Balance.Bytes()); err != nil { + var balance [32]byte + copy(balance[32-len(acc.Balance.Bytes()):], acc.Balance.Bytes()) + if err = t.TryUpdate(utils.GetTreeKeyBalance(key), balance[:]); err != nil { return fmt.Errorf("updateStateObject (%x) error: %v", key, err) } if err = t.TryUpdate(utils.GetTreeKeyCodeKeccak(key), acc.CodeHash); err != nil { From 847f3acee17058df00f95e082ca2d105d5ade085 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Wed, 9 Feb 2022 18:25:17 +0100 Subject: [PATCH 2/2] review feedback: fix endianness in output --- trie/verkle.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/trie/verkle.go b/trie/verkle.go index 8b2133afabcc3..043ab867f6af4 100644 --- a/trie/verkle.go +++ b/trie/verkle.go @@ -68,12 +68,14 @@ func (t *VerkleTrie) TryUpdateAccount(key []byte, acc *types.StateAccount) error return fmt.Errorf("updateStateObject (%x) error: %v", key, err) } var nonce [32]byte - binary.BigEndian.PutUint64(nonce[:], acc.Nonce) + binary.LittleEndian.PutUint64(nonce[24:], acc.Nonce) if err = t.TryUpdate(utils.GetTreeKeyNonce(key), nonce[:]); err != nil { return fmt.Errorf("updateStateObject (%x) error: %v", key, err) } var balance [32]byte - copy(balance[32-len(acc.Balance.Bytes()):], acc.Balance.Bytes()) + for i, b := range acc.Balance.Bytes() { + balance[31-i] = b + } if err = t.TryUpdate(utils.GetTreeKeyBalance(key), balance[:]); err != nil { return fmt.Errorf("updateStateObject (%x) error: %v", key, err) }