From ce2c4b619980b02610b227456a0e75bfccf30b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Coll?= Date: Thu, 4 Jul 2019 15:45:18 -0300 Subject: [PATCH] Include long value length in Trie#childrenSize --- rskj-core/src/main/java/co/rsk/trie/NodeReference.java | 7 ++++++- rskj-core/src/test/java/co/rsk/trie/TrieTreeSizeTest.java | 4 ++-- .../java/org/ethereum/core/genesis/GenesisHashesTest.java | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/rskj-core/src/main/java/co/rsk/trie/NodeReference.java b/rskj-core/src/main/java/co/rsk/trie/NodeReference.java index 19ad2e916b4..9dae4607b4e 100644 --- a/rskj-core/src/main/java/co/rsk/trie/NodeReference.java +++ b/rskj-core/src/main/java/co/rsk/trie/NodeReference.java @@ -155,7 +155,12 @@ public void serializeInto(ByteBuffer buffer) { * Do not use. */ public long referenceSize() { - return getNode().map(trie -> trie.getChildrenSize().value).orElse(0L) + serializedLength(); + return getNode().map(this::nodeSize).orElse(0L); + } + + private long nodeSize(Trie trie) { + long externalValueLength = trie.hasLongValue() ? trie.getValueLength().intValue() : 0L; + return trie.getChildrenSize().value + externalValueLength + trie.getMessageLength(); } public static NodeReference empty() { diff --git a/rskj-core/src/test/java/co/rsk/trie/TrieTreeSizeTest.java b/rskj-core/src/test/java/co/rsk/trie/TrieTreeSizeTest.java index 7faf8900cd6..04c7fd205d5 100644 --- a/rskj-core/src/test/java/co/rsk/trie/TrieTreeSizeTest.java +++ b/rskj-core/src/test/java/co/rsk/trie/TrieTreeSizeTest.java @@ -36,7 +36,7 @@ public void childrenSizeShortValue() { Trie trie = new Trie() .put(new byte[]{0x00}, new byte[]{0x01}) .put(new byte[]{0x01}, new byte[32]); - Assert.assertThat(trie.getChildrenSize().value, is(37L)); + Assert.assertThat(trie.getChildrenSize().value, is(35L)); } @Test @@ -44,6 +44,6 @@ public void childrenSizeLongValue() { Trie trie = new Trie() .put(new byte[]{0x00}, new byte[]{0x01}) .put(new byte[]{0x01}, new byte[33]); - Assert.assertThat(trie.getChildrenSize().value, is(40L)); + Assert.assertThat(trie.getChildrenSize().value, is(71L)); } } \ No newline at end of file diff --git a/rskj-core/src/test/java/org/ethereum/core/genesis/GenesisHashesTest.java b/rskj-core/src/test/java/org/ethereum/core/genesis/GenesisHashesTest.java index a949fb3319b..85fb08f0432 100644 --- a/rskj-core/src/test/java/org/ethereum/core/genesis/GenesisHashesTest.java +++ b/rskj-core/src/test/java/org/ethereum/core/genesis/GenesisHashesTest.java @@ -41,6 +41,6 @@ public void testnetHashTest() { RskContext rskContext = new RskTestContext(new String[]{ "--testnet" }); rskContext.getBlockchain(); // this triggers changes in the Genesis through the BlockChainLoader Genesis genesis = rskContext.getGenesis(); - assertThat(genesis.getHash(), is(new Keccak256("d72e1c76d7b4928acf9812fc3bb5bfddfd1f8d93e3a9a99894b3479a0190a9b0"))); + assertThat(genesis.getHash(), is(new Keccak256("cabb7fbe88cd6d922042a32ffc08ce8b1fbb37d650b9d4e7dbfe2a7469adfa42"))); } } \ No newline at end of file