diff --git a/ethereumj-core/src/main/java/org/ethereum/net/client/EthereumProtocolHandler.java b/ethereumj-core/src/main/java/org/ethereum/net/client/EthereumProtocolHandler.java index 62ffab43..e44f0c5c 100644 --- a/ethereumj-core/src/main/java/org/ethereum/net/client/EthereumProtocolHandler.java +++ b/ethereumj-core/src/main/java/org/ethereum/net/client/EthereumProtocolHandler.java @@ -122,7 +122,7 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter { public void channelRead(final ChannelHandlerContext ctx, Object msg) throws Exception { byte[] payload = (byte[]) msg; - logger.info("[Send msg: [{}] ]", Hex.toHexString(payload)); + logger.info("[Recv msg: [{}] ]", Hex.toHexString(payload)); byte command = RLP.getCommandCode(payload); // got HELLO diff --git a/ethereumj-core/src/main/java/org/ethereum/util/ByteUtil.java b/ethereumj-core/src/main/java/org/ethereum/util/ByteUtil.java index 30aa0725..fe7a5d56 100644 --- a/ethereumj-core/src/main/java/org/ethereum/util/ByteUtil.java +++ b/ethereumj-core/src/main/java/org/ethereum/util/ByteUtil.java @@ -52,10 +52,10 @@ public class ByteUtil { byte[] size = new byte[4]; - size[3] = (byte)(packet.length >> 0 & 0xFF); - size[2] = (byte)(packet.length >> 8 & 0xFF); - size[1] = (byte)(packet.length >> 16 & 0xFF); size[0] = (byte)(packet.length >> 24 & 0xFF); + size[1] = (byte)(packet.length >> 16 & 0xFF); + size[2] = (byte)(packet.length >> 8 & 0xFF); + size[3] = (byte)(packet.length >> 0 & 0xFF); return size; } diff --git a/ethereumj-core/src/test/java/org/ethereum/db/RepositoryTest.java b/ethereumj-core/src/test/java/org/ethereum/db/RepositoryTest.java index 38c4bc44..3a844195 100644 --- a/ethereumj-core/src/test/java/org/ethereum/db/RepositoryTest.java +++ b/ethereumj-core/src/test/java/org/ethereum/db/RepositoryTest.java @@ -26,14 +26,18 @@ public class RepositoryTest { String addr = "cd2a3d9f938e13cd947ec05abc7fe734df8dd826"; Repository repository = new Repository(); - AccountState createdState = repository.createAccount(Hex.decode(addr)); - AccountState fetchedState = - repository.getAccountState(Hex.decode(addr)); + try { + AccountState createdState = repository.createAccount(Hex.decode(addr)); - assertEquals(createdState.getEncoded(), fetchedState.getEncoded()); + AccountState fetchedState = + repository.getAccountState(Hex.decode(addr)); + + assertEquals(createdState.getEncoded(), fetchedState.getEncoded()); + } finally { + repository.close(); + } - repository.close(); } @@ -42,19 +46,23 @@ public class RepositoryTest { String addr = "cd2a3d9f938e13cd947ec05abc7fe734df8dd826"; Repository repository = new Repository(); - BigInteger nonce0 = repository.getNonce(Hex.decode(addr)); - repository.createAccount(Hex.decode(addr)); - BigInteger nonce1 = repository.getNonce(Hex.decode(addr)); + try { + BigInteger nonce0 = repository.getNonce(Hex.decode(addr)); - repository.increaseNonce(Hex.decode(addr)); - BigInteger nonce2 = repository.getNonce(Hex.decode(addr)); + repository.createAccount(Hex.decode(addr)); + BigInteger nonce1 = repository.getNonce(Hex.decode(addr)); - assertEquals(0, nonce0.intValue()); - assertEquals(0, nonce1.intValue()); - assertEquals(1, nonce2.intValue()); + repository.increaseNonce(Hex.decode(addr)); + BigInteger nonce2 = repository.getNonce(Hex.decode(addr)); + + assertEquals(0, nonce0.intValue()); + assertEquals(0, nonce1.intValue()); + assertEquals(1, nonce2.intValue()); + } finally { + repository.close(); + } - repository.close(); } @Test // increase nonce @@ -62,21 +70,24 @@ public class RepositoryTest { String addr = "cd2a3d9f938e13cd947ec05abc7fe734df8dd826"; Repository repository = new Repository(); - BigInteger nonce0 = repository.getNonce(Hex.decode(addr)); + try { + BigInteger nonce0 = repository.getNonce(Hex.decode(addr)); - repository.createAccount(Hex.decode(addr)); - BigInteger nonce1 = repository.getNonce(Hex.decode(addr)); + repository.createAccount(Hex.decode(addr)); + BigInteger nonce1 = repository.getNonce(Hex.decode(addr)); - repository.increaseNonce(Hex.decode(addr)); - repository.increaseNonce(Hex.decode(addr)); - repository.increaseNonce(Hex.decode(addr)); - BigInteger nonce2 = repository.getNonce(Hex.decode(addr)); + repository.increaseNonce(Hex.decode(addr)); + repository.increaseNonce(Hex.decode(addr)); + repository.increaseNonce(Hex.decode(addr)); + BigInteger nonce2 = repository.getNonce(Hex.decode(addr)); - assertEquals(0, nonce0.intValue()); - assertEquals(0, nonce1.intValue()); - assertEquals(3, nonce2.intValue()); + assertEquals(0, nonce0.intValue()); + assertEquals(0, nonce1.intValue()); + assertEquals(3, nonce2.intValue()); + } finally { + repository.close(); + } - repository.close(); } @@ -85,19 +96,23 @@ public class RepositoryTest { String addr = "cd2a3d9f938e13cd947ec05abc7fe734df8dd826"; Repository repository = new Repository(); - BigInteger balance0 = repository.getBalance(Hex.decode(addr)); + try { + BigInteger balance0 = repository.getBalance(Hex.decode(addr)); - repository.createAccount(Hex.decode(addr)); - BigInteger balance1 = repository.getBalance(Hex.decode(addr)); + repository.createAccount(Hex.decode(addr)); + BigInteger balance1 = repository.getBalance(Hex.decode(addr)); - repository.addBalance(Hex.decode(addr), BigInteger.valueOf(300)); - BigInteger balance2 = repository.getBalance(Hex.decode(addr)); + repository.addBalance(Hex.decode(addr), BigInteger.valueOf(300)); + BigInteger balance2 = repository.getBalance(Hex.decode(addr)); - assertEquals(0, balance0.intValue()); - assertEquals(0, balance1.intValue()); - assertEquals(300, balance2.intValue()); + assertEquals(0, balance0.intValue()); + assertEquals(0, balance1.intValue()); + assertEquals(300, balance2.intValue()); + } finally { + + repository.close(); + } - repository.close(); } @@ -106,23 +121,27 @@ public class RepositoryTest { String addr = "cd2a3d9f938e13cd947ec05abc7fe734df8dd826"; Repository repository = new Repository(); - BigInteger balance0 = repository.getBalance(Hex.decode(addr)); + try { + BigInteger balance0 = repository.getBalance(Hex.decode(addr)); - repository.createAccount(Hex.decode(addr)); - BigInteger balance1 = repository.getBalance(Hex.decode(addr)); + repository.createAccount(Hex.decode(addr)); + BigInteger balance1 = repository.getBalance(Hex.decode(addr)); - repository.addBalance(Hex.decode(addr), BigInteger.valueOf(300)); - BigInteger balance2 = repository.getBalance(Hex.decode(addr)); + repository.addBalance(Hex.decode(addr), BigInteger.valueOf(300)); + BigInteger balance2 = repository.getBalance(Hex.decode(addr)); - repository.addBalance(Hex.decode(addr), BigInteger.valueOf(-150)); - BigInteger balance3 = repository.getBalance(Hex.decode(addr)); + repository.addBalance(Hex.decode(addr), BigInteger.valueOf(-150)); + BigInteger balance3 = repository.getBalance(Hex.decode(addr)); - assertEquals(0, balance0.intValue()); - assertEquals(0, balance1.intValue()); - assertEquals(300, balance2.intValue()); - assertEquals(150, balance3.intValue()); + assertEquals(0, balance0.intValue()); + assertEquals(0, balance1.intValue()); + assertEquals(300, balance2.intValue()); + assertEquals(150, balance3.intValue()); + } finally { + + repository.close(); + } - repository.close(); } @@ -131,11 +150,15 @@ public class RepositoryTest { String addr = "cd2a3d9f938e13cd947ec05abc7fe734df8dd826"; Repository repository = new Repository(); - byte[] code = repository.getCode(Hex.decode(addr)); - assertTrue(code == null); + byte[] code; + try { + code = repository.getCode(Hex.decode(addr)); + assertTrue(code == null); + } finally { + repository.close(); + } - repository.close(); } @Test // get/set code @@ -146,18 +169,22 @@ public class RepositoryTest { String codeHash = "8f0d7fc8cc6fdd688fa58ae9256310069f5659ed2a8a3af994d80350fbf1e798"; Repository repository = new Repository(); - byte[] code0 = repository.getCode(Hex.decode(addr)); - repository.createAccount(Hex.decode(addr)); - repository.saveCode(Hex.decode(addr), Hex.decode(codeString)); - byte[] code1 = repository.getCode(Hex.decode(addr)); - AccountState accountState = repository.getAccountState(Hex.decode(addr)); + try { + byte[] code0 = repository.getCode(Hex.decode(addr)); + repository.createAccount(Hex.decode(addr)); + repository.saveCode(Hex.decode(addr), Hex.decode(codeString)); + byte[] code1 = repository.getCode(Hex.decode(addr)); + AccountState accountState = repository.getAccountState(Hex.decode(addr)); - assertTrue(code0 == null); - assertEquals(codeString, Hex.toHexString(code1)); - assertEquals(codeHash, Hex.toHexString(accountState.getCodeHash())); + assertTrue(code0 == null); + assertEquals(codeString, Hex.toHexString(code1)); + assertEquals(codeHash, Hex.toHexString(accountState.getCodeHash())); + } finally { + + repository.close(); + } - repository.close(); } @@ -168,18 +195,21 @@ public class RepositoryTest { String codeHash = "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"; Repository repository = new Repository(); - byte[] code0 = repository.getCode(Hex.decode(addr)); - repository.createAccount(Hex.decode(addr)); - repository.saveCode(Hex.decode(addr), null); - byte[] code1 = repository.getCode(Hex.decode(addr)); - AccountState accountState = repository.getAccountState(Hex.decode(addr)); + try { + byte[] code0 = repository.getCode(Hex.decode(addr)); + repository.createAccount(Hex.decode(addr)); + repository.saveCode(Hex.decode(addr), null); + byte[] code1 = repository.getCode(Hex.decode(addr)); + AccountState accountState = repository.getAccountState(Hex.decode(addr)); + assertTrue(code0 == null); + assertNull(code1); + assertEquals(codeHash, Hex.toHexString(accountState.getCodeHash())); + } finally { - assertTrue(code0 == null); - assertNull(code1); - assertEquals(codeHash, Hex.toHexString(accountState.getCodeHash())); + repository.close(); + } - repository.close(); } @@ -191,11 +221,15 @@ public class RepositoryTest { DataWord key = new DataWord(keyBytes); Repository repository = new Repository(); - DataWord value = repository.getStorageValue(Hex.decode(addr), key); - assertNull(value); + try { + DataWord value = repository.getStorageValue(Hex.decode(addr), key); + assertNull(value); + } finally { + + repository.close(); + } - repository.close(); } @Test // storage set/get @@ -203,21 +237,21 @@ public class RepositoryTest { String addr = "cd2a3d9f938e13cd947ec05abc7fe734df8dd826"; Repository repository = new Repository(); - repository.createAccount(Hex.decode(addr)); - byte[] keyBytes = Hex.decode("cd2a3d9f938e13cd947ec05abc7fe734df8dd826"); - DataWord key = new DataWord(keyBytes); + try { + repository.createAccount(Hex.decode(addr)); + byte[] keyBytes = Hex.decode("cd2a3d9f938e13cd947ec05abc7fe734df8dd826"); + DataWord key = new DataWord(keyBytes); + byte[] valueBytes = Hex.decode("0F4240"); + DataWord value = new DataWord(valueBytes); + repository.addStorageRow(Hex.decode(addr), key, value); + DataWord fetchedValue = repository.getStorageValue(Hex.decode(addr), key); + assertEquals(value, fetchedValue); + } finally { - byte[] valueBytes = Hex.decode("0F4240"); - DataWord value = new DataWord(valueBytes); + repository.close(); + } - repository.addStorageRow(Hex.decode(addr), key, value); - - DataWord fetchedValue = repository.getStorageValue(Hex.decode(addr), key); - - assertEquals(value, fetchedValue); - - repository.close(); } @Test // storage set/get @@ -227,44 +261,48 @@ public class RepositoryTest { String expectedStorageHash = "365ed874ad42c2b4af335212465291e03dcd1f0c5b600f40f048ed238ad61fd3"; Repository repository = new Repository(); - repository.createAccount(Hex.decode(addr)); - byte[] keyBytes = Hex.decode("03E8"); - DataWord key1 = new DataWord(keyBytes); + try { + repository.createAccount(Hex.decode(addr)); - keyBytes = Hex.decode("03E9"); - DataWord key2 = new DataWord(keyBytes); + byte[] keyBytes = Hex.decode("03E8"); + DataWord key1 = new DataWord(keyBytes); - keyBytes = Hex.decode("03F0"); - DataWord key3 = new DataWord(keyBytes); + keyBytes = Hex.decode("03E9"); + DataWord key2 = new DataWord(keyBytes); + keyBytes = Hex.decode("03F0"); + DataWord key3 = new DataWord(keyBytes); - byte[] valueBytes = Hex.decode("0F4240"); - DataWord value1 = new DataWord(valueBytes); + byte[] valueBytes = Hex.decode("0F4240"); + DataWord value1 = new DataWord(valueBytes); - valueBytes = Hex.decode("0F4241"); - DataWord value2 = new DataWord(valueBytes); + valueBytes = Hex.decode("0F4241"); + DataWord value2 = new DataWord(valueBytes); - valueBytes = Hex.decode("0F4242"); - DataWord value3 = new DataWord(valueBytes); + valueBytes = Hex.decode("0F4242"); + DataWord value3 = new DataWord(valueBytes); - repository.addStorageRow(Hex.decode(addr), key1, value1); - repository.addStorageRow(Hex.decode(addr), key2, value2); - repository.addStorageRow(Hex.decode(addr), key3, value3); + repository.addStorageRow(Hex.decode(addr), key1, value1); + repository.addStorageRow(Hex.decode(addr), key2, value2); + repository.addStorageRow(Hex.decode(addr), key3, value3); - DataWord fetchedValue1 = repository.getStorageValue(Hex.decode(addr), key1); - DataWord fetchedValue2 = repository.getStorageValue(Hex.decode(addr), key2); - DataWord fetchedValue3 = repository.getStorageValue(Hex.decode(addr), key3); + DataWord fetchedValue1 = repository.getStorageValue(Hex.decode(addr), key1); + DataWord fetchedValue2 = repository.getStorageValue(Hex.decode(addr), key2); + DataWord fetchedValue3 = repository.getStorageValue(Hex.decode(addr), key3); - AccountState accountState = repository.getAccountState(Hex.decode(addr)); - String stateRoot = Hex.toHexString(accountState.getStateRoot()); + AccountState accountState = repository.getAccountState(Hex.decode(addr)); + String stateRoot = Hex.toHexString(accountState.getStateRoot()); - assertEquals(value1, fetchedValue1); - assertEquals(value2, fetchedValue2); - assertEquals(value3, fetchedValue3); - assertEquals(expectedStorageHash, stateRoot); + assertEquals(value1, fetchedValue1); + assertEquals(value2, fetchedValue2); + assertEquals(value3, fetchedValue3); + assertEquals(expectedStorageHash, stateRoot); + } finally { + + repository.close(); + } - repository.close(); } @@ -276,19 +314,23 @@ public class RepositoryTest { long expectedBalance = 333; Repository origRepository = new Repository(); - Repository repository = origRepository.getTrack(); - repository.startTracking(); - repository.createAccount(Hex.decode(addr)); - repository.addBalance(Hex.decode(addr), BigInteger.valueOf(expectedBalance)); + try { + Repository repository = origRepository.getTrack(); + repository.startTracking(); - repository.commit(); + repository.createAccount(Hex.decode(addr)); + repository.addBalance(Hex.decode(addr), BigInteger.valueOf(expectedBalance)); - BigInteger balance = repository.getBalance(Hex.decode(addr)); + repository.commit(); - assertEquals(expectedBalance, balance.longValue()); + BigInteger balance = repository.getBalance(Hex.decode(addr)); + + assertEquals(expectedBalance, balance.longValue()); + } finally { + origRepository.close(); + } - origRepository.close(); } @Test // commit/rollback @@ -329,24 +371,28 @@ public class RepositoryTest { Repository origRepository = new Repository(); Repository repository = origRepository.getTrack(); - repository.createAccount(Hex.decode(addr_1)); - repository.addBalance(Hex.decode(addr_1), BigInteger.valueOf(expectedBalance)); - repository.startTracking(); + try { + repository.createAccount(Hex.decode(addr_1)); + repository.addBalance(Hex.decode(addr_1), BigInteger.valueOf(expectedBalance)); + repository.startTracking(); - repository.createAccount(Hex.decode(addr_2)); - repository.saveCode(Hex.decode(addr_2), Hex.decode(codeString)); - repository.addStorageRow(Hex.decode(addr_2), new DataWord(101), new DataWord(1000001)); - repository.addStorageRow(Hex.decode(addr_2), new DataWord(102), new DataWord(1000002)); - repository.addStorageRow(Hex.decode(addr_2), new DataWord(103), new DataWord(1000003)); - repository.rollback(); + repository.createAccount(Hex.decode(addr_2)); + repository.saveCode(Hex.decode(addr_2), Hex.decode(codeString)); + repository.addStorageRow(Hex.decode(addr_2), new DataWord(101), new DataWord(1000001)); + repository.addStorageRow(Hex.decode(addr_2), new DataWord(102), new DataWord(1000002)); + repository.addStorageRow(Hex.decode(addr_2), new DataWord(103), new DataWord(1000003)); + repository.rollback(); - BigInteger balance = repository.getBalance(Hex.decode(addr_1)); - assertEquals(expectedBalance, balance.longValue()); + BigInteger balance = repository.getBalance(Hex.decode(addr_1)); + assertEquals(expectedBalance, balance.longValue()); - DataWord value = repository.getStorageValue(Hex.decode(addr_2), new DataWord(101)); - assertNull(value); + DataWord value = repository.getStorageValue(Hex.decode(addr_2), new DataWord(101)); + assertNull(value); + } finally { + + origRepository.close(); + } - origRepository.close(); } } diff --git a/ethereumj-core/src/test/java/org/ethereum/db/TrackDatabaseTest.java b/ethereumj-core/src/test/java/org/ethereum/db/TrackDatabaseTest.java index ca4eebfb..58d8fba8 100644 --- a/ethereumj-core/src/test/java/org/ethereum/db/TrackDatabaseTest.java +++ b/ethereumj-core/src/test/java/org/ethereum/db/TrackDatabaseTest.java @@ -38,5 +38,7 @@ public class TrackDatabaseTest { trackDatabase1.commitTrack(); value = trackDatabase1.get(Hex.decode("abcdef")); Assert.assertEquals("ffffff", Hex.toHexString(value)); + + db1.close(); } } diff --git a/ethereumj-core/src/test/java/org/ethereum/net/MessagesTest.java b/ethereumj-core/src/test/java/org/ethereum/net/MessagesTest.java index 77fa752f..0606e6f4 100644 --- a/ethereumj-core/src/test/java/org/ethereum/net/MessagesTest.java +++ b/ethereumj-core/src/test/java/org/ethereum/net/MessagesTest.java @@ -212,24 +212,24 @@ public class MessagesTest { public void test_9(){ String txsPacketRaw = "f9025012f89d8080940000000000000000000000000000000000000000860918" - + "4e72a000822710b3606956330c0d630000003359366000530a0d630000003359" - + "602060005301356000533557604060005301600054630000000c588433606957" - + "1ca07f6eb94576346488c6253197bde6a7e59ddc36f2773672c849402aa9c402" - + "c3c4a06d254e662bf7450dd8d835160cbb053463fed0b53f2cdd7f3ea8731919" - + "c8e8ccf901050180940000000000000000000000000000000000000000860918" - + "4e72a000822710b85336630000002e59606956330c0d63000000155933ff3356" - + "0d63000000275960003356576000335700630000005358600035560d63000000" - + "3a590033560d63000000485960003356573360003557600035335700b84a7f4e" - + "616d655265670000000000000000000000000000000000000000000000000030" - + "57307f4e616d6552656700000000000000000000000000000000000000000000" - + "00000057336069571ba04af15a0ec494aeac5b243c8a2690833faa74c0f73db1" - + "f439d521c49c381513e9a05802e64939be5a1f9d4d614038fbd5479538c48795" - + "614ef9c551477ecbdb49d2f8a6028094ccdeac59d35627b7de09332e819d5159" - + "e7bb72508609184e72a000822710b84000000000000000000000000000000000" - + "000000000000000000000000000000000000000000000000000000002d0aceee" - + "7e5ab874e22ccf8d1a649f59106d74e81ba0d05887574456c6de8f7a0d172342" - + "c2cbdd4cf7afe15d9dbb8b75b748ba6791c9a01e87172a861f6c37b5a9e3a5d0" - + "d7393152a7fbe41530e5bb8ac8f35433e5931b"; + + "4e72a000822710b3606956330c0d630000003359366000530a0d630000003359" + + "602060005301356000533557604060005301600054630000000c588433606957" + + "1ca07f6eb94576346488c6253197bde6a7e59ddc36f2773672c849402aa9c402" + + "c3c4a06d254e662bf7450dd8d835160cbb053463fed0b53f2cdd7f3ea8731919" + + "c8e8ccf901050180940000000000000000000000000000000000000000860918" + + "4e72a000822710b85336630000002e59606956330c0d63000000155933ff3356" + + "0d63000000275960003356576000335700630000005358600035560d63000000" + + "3a590033560d63000000485960003356573360003557600035335700b84a7f4e" + + "616d655265670000000000000000000000000000000000000000000000000030" + + "57307f4e616d6552656700000000000000000000000000000000000000000000" + + "00000057336069571ba04af15a0ec494aeac5b243c8a2690833faa74c0f73db1" + + "f439d521c49c381513e9a05802e64939be5a1f9d4d614038fbd5479538c48795" + + "614ef9c551477ecbdb49d2f8a6028094ccdeac59d35627b7de09332e819d5159" + + "e7bb72508609184e72a000822710b84000000000000000000000000000000000" + + "000000000000000000000000000000000000000000000000000000002d0aceee" + + "7e5ab874e22ccf8d1a649f59106d74e81ba0d05887574456c6de8f7a0d172342" + + "c2cbdd4cf7afe15d9dbb8b75b748ba6791c9a01e87172a861f6c37b5a9e3a5d0" + + "d7393152a7fbe41530e5bb8ac8f35433e5931b"; byte[] payload = Hex.decode(txsPacketRaw); RLPList rlpList = RLP.decode2(payload); @@ -307,75 +307,10 @@ public class MessagesTest { /* BLOCKS */ - @Test /* BlocksMessage parsing 1*/ - public void test_10(){ - -// BlockData [ hash=36a24b56c6104e5a5c0e70b0553f1a4d6109d065d718d7443a6a475ec8c83905 parentHash=372d8e5c6e32335fb86fa7a6ae1b35165745346e1c786eacd42df85f8da12b3d, unclesHash=1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347, coinbase=1a4d98707ba8dd3d36d16e8c165c272645695cea, stateHash=5e2d2cc0b42b38b5b18c9d65734f9877c035dd390b9c12c48624f2243668a268, txListHash=1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347, difficulty=02471a26, timestamp=1398260220, extraData=null, nonce=0000000000000000000000000000000000000000000000006f4cd02da011a235] -// String blocksRaw = "F8CC13F8C9F8C5A0372D8E5C6E32335FB86FA7A6AE1B35165745346E1C786EACD42DF85F8DA12B3DA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941A4D98707BA8DD3D36D16E8C165C272645695CEAA05E2D2CC0B42B38B5B18C9D65734F9877C035DD390B9C12C48624F2243668A268A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D493478402471A26845357C1FC80A00000000000000000000000000000000000000000000000006F4CD02DA011A235C0C0"; - - /* - parentHash: 00000000000000000000000000000000000000000000000000000000000000000 - unclesHash: 1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 - coinbase: 0000000000000000000000000000000000000000 - stateRoot: 2f4399b08efe68945c1cf90ffe85bbe3ce978959da753f9e649f034015b8817d - txsTrieRoot: 00000000000000000000000000000000000000000000000000000000000000000 - difficulty: 400000 - number: <> - mixGasPrice: <> - gasLimit: 0f4240 - gasUsed: <> - timestamp: <> - extraData: <> - nonce: 04994f67dc55b09e814ab7ffc8df3686b4afb2bb53e60eae97ef043fe03fb829 - transaction: <> - uncles: <> - */ - - // Genesis block - String blocksRaw = "f8cbf8c7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02f4399b08efe68945c1cf90ffe85bbe3ce978959da753f9e649f034015b8817da00000000000000000000000000000000000000000000000000000000000000000834000008080830f4240808080a004994f67dc55b09e814ab7ffc8df3686b4afb2bb53e60eae97ef043fe03fb829c0c0"; - - byte[] payload = Hex.decode(blocksRaw); - RLPList rlpList = RLP.decode2(payload); - - BlocksMessage blocksMessage = new BlocksMessage(rlpList); - List list = blocksMessage.getBlockDataList(); - System.out.println(blocksMessage); - - assertEquals(1, list.size()); - - Block block = list.get(0); - - assertEquals("69a7356a245f9dc5b865475ada5ee4e89b18f93c06503a9db3b3630e88e9fb4e", - Hex.toHexString(block.getHash())); - - assertEquals("00000000000000000000000000000000000000000000000000000000000000000", - Hex.toHexString(block.getParentHash())); - - assertEquals("1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - Hex.toHexString(block.getUnclesHash())); - - assertEquals("0000000000000000000000000000000000000000", - Hex.toHexString(block.getCoinbase())); - - assertEquals("2f4399b08efe68945c1cf90ffe85bbe3ce978959da753f9e649f034015b8817d", - Hex.toHexString(block.getStateRoot())); - - assertEquals("00000000000000000000000000000000000000000000000000000000000000000", - Hex.toHexString(block.getTxTrieRoot())); - - assertEquals("400000", Hex.toHexString(block.getDifficulty())); - assertEquals(0, block.getTimestamp()); - - assertNull(block.getExtraData()); - - assertEquals("04994f67dc55b09e814ab7ffc8df3686b4afb2bb53e60eae97ef043fe03fb829", - Hex.toHexString(block.getNonce())); - } - @Test /* BlocksMessage really big message parsing */ public void test11(){ - String blocksRaw = "F91C1C13F90150F8C4A07DF3D35D4DF0A56FCF1D6344D5315CB56B9BF83BB96AD17C7B96A9CD14133C5DA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A064AFB6284FA35F26D7B2C5A26AFAA5483072FBCB575221B34CE002A991B7A223A04A8ABE6D802797DC80B497584F898C2D4FD561CC185828CFA1B92F6F38EE348E833FBFE484533F201C80A000000000000000000000000000000000000000000000000000CFCCB5CFD4667CF887F8850380942D0ACEEE7E5AB874E22CCF8D1A649F59106D74E88609184E72A000822710A047617600000000000000000000000000000000000000000000000000000000001CA08691AB40E258DE3C4F55C868C0C34E780E747158A1D96CA50186DFD3305ABD78A042269C981D048A7B791AAFC8F4E644232740C1A1CCEB5B6D05568827A64C0664C0F8C8F8C4A0637C8A6CDB907FAC6F752334AB79065BCC4E46CD4F4358DBC2A653544A20EB31A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A022A36C1A1E807E6AFC22E6BB53A31111F56E7EE7DBB2EE571CEFB152B514DB4DA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FCFD784533F1CF980A0000000000000000000000000000000000000000000000000E153D743FA040B18C0C0F8C8F8C4A07B2536237CBF114A043B0F9B27C76F84AC160EA5B87B53E42C7E76148964D450A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A07A3BE0EE10ECE4B03097BF74AABAC628AA0FAE617377D30AB1B97376EE31F41AA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FBFE884533F1CE880A0000000000000000000000000000000000000000000000000F3DEEA84969B6E95C0C0F8C8F8C4A0D2AE3F5DD931926DE428D99611980E7CDD7C1B838273E43FCAD1B94DA987CFB8A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A00B5B11FCF4EE12C6812F9D01CF0DFF07C72CD7E02E48B35682F67C595407BE14A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FAFFD84533F1CE280A00000000000000000000000000000000000000000000000005FCBC97B2EB8FFB3C0C0F8C8F8C4A094D615D3CB4B306D20985028C78F0C8413D509A75E8BB84EDA95F734DEBAD2A0A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A04B8FD1B98CF5758BD303FF86393EB6D944C1058124BDDCE5D4E04B5395254D5EA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FBFEC84533F1C7680A000000000000000000000000000000000000000000000000079FE3710116B32AAC0C0F8C8F8C4A09424A07A0E4C05BB872906C40844A75B76F6517467B79C12FA9CC6D79AE09934A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A02DBE9FF9CBBC4C5A6FF26971F75B405891141F4E9BCE3C2DC4200A305138E584A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FCFDF84533F1C3B80A0000000000000000000000000000000000000000000000000E0A6F8CF1D56031BC0C0F8C8F8C4A009AABEA60CF7EAA9DF4AFDF4E1B5F3E684DAB34FC9A9180A050085A4131CEEDFA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0436DA067F9683029E717EDF92DA46C3443E8C342974F47A563302A0678EFE702A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FDFD684533F1BFC80A00000000000000000000000000000000000000000000000005BC88C041662FFDAC0C0F8C8F8C4A0F8B104093483B7C0182E1BBA2CE3340D14469D3A3EE7646821223A676C680AC1A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0D482E71CDE61190A33CA5AEB88B6B06276984E5A14253A98DF232E8767167221A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FEFD184533F1BCE80A00000000000000000000000000000000000000000000000004AEB31823F6A1950C0C0F8C8F8C4A0DD1F0ABA02C2BB3B5A2B6CB1CC907EA70912BD46DC7A78577F2CAE6CDBCBE5F3A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A058AB6DF33D7CBEB6A735A7E4CCF4F28143E6A1742E45DDA8F8CF48AF43CB66C0A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FFFD084533F1B9F80A0000000000000000000000000000000000000000000000000577042B0858B510BC0C0F8C8F8C4A0A287BB7DA30F04344976ABE569BD719F69C1CBEA65533E5311CA5862E6EAA504A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A07E0537009C23CB1152CAF84A52272431F74B6140866B15805622B7BCB607CD42A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934783400FD384533F1B6180A000000000000000000000000000000000000000000000000083D31378A0993E1AC0C0F8C8F8C4A063483CFF8FBD489E6CE273326D8DC1D54A31C67F936CA84BF500E5419D3E9805A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A07737D08564819D51F8F834A6EE4278C23A0C2F29A3F485B21002C1F24F04D8E4A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FFFD484533F1B5780A0000000000000000000000000000000000000000000000000BB586FE6DE016E14C0C0F8C8F8C4A0975C8ED0C9197B7C018E02E1C95F315ACF82B25E4A812140F4515E8BC827650CA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0AD51229ABEAD59E93C80DB5BA160F0939BC49DCEE65D1C081F6EB040FF1F571FA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FEFD984533F1B4E80A0000000000000000000000000000000000000000000000000548F02C6CEB26FD4C0C0F8C8F8C4A05844082E41F7C1F34485C7902AFA0AA0979A6A849100FC553CD946F4A663929CA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A01BC726443437C4C062BE18D052278E4EF735B8FE84387C8A4FC85FB70D5078E0A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FFFD884533F1B1080A0000000000000000000000000000000000000000000000000CC1E528F54F22BDAC0C0F8C8F8C4A0BA06BA81C93FAAF98EA2D83CBDC0788958D938B29A9EB2A92FFBD4A628B3D52EA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A05053BFE1C0F1F0DD341C6DF35E5A659989BE041E8521027CC90F7605EB15FBB9A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FEFDD84533F1B0380A0000000000000000000000000000000000000000000000000BCF9DF2FEC615ECAC0C0F8C8F8C4A083732D997DB15109E90464C24B7C959A78881D827C55A0D668A66A2736BE5D87A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A054F4012CBA33A2B80B0DCA9DD52F56B2C588133BD71700863F8CB95127176634A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FFFDC84533F1A4680A00000000000000000000000000000000000000000000000006920A1DC9D915D0EC0C0F8C8F8C4A052E2FBA761C2D0643170EF041C017391E781190FE715AE87CDAE8EEE1D45D95BA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0EE2C82F77D7AFD1F8DBE4F791DF8477496C23E5504B9D66814172077F65F81F2A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FEFE184533F1A3880A0000000000000000000000000000000000000000000000000AE86DA9012398FC4C0C0F8C8F8C4A055703BA09544F386966B6D63BFC31033B761A4D1A6BB86B0CF49B4BB0526744EA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A01684C03A675B53786F0077D1651C3D169A009B13A6EE2B5047BE6DBBE6D957FFA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FDFEA84533F1A2F80A00000000000000000000000000000000000000000000000003247320D0EB639DFC0C0F8C8F8C4A05109A79B33D81F4EE4814B550FB0002F03368D67570F6D4E6105FCE2874D8B72A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0AE72E8C60A3DCFD53DEECDB2790D18F0CC710F77CF2C1ED76E7DA829BDE619DCA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FCFF784533F1A1D80A000000000000000000000000000000000000000000000000040E0BC9BC9BCF295C0C0F8C8F8C4A03961E4BBBA5C95FAD3DB0CFFA3A16B9106F9EA3E8957993EAB576B683C22F416A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0E9C6CF457BBE64D6BDA67852A276CDBADB4F384A36D496E81801A496CFD9B7B5A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FDFEE84533F19DF80A0000000000000000000000000000000000000000000000000DBB3FD6C816776D8C0C0F8C8F8C4A06B8265A357CB3AD744E19F04EB15377F660C10C900CC352D24F9B09073A363D6A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A07BA07E1BC6A20FFA44AE6080D30982B9FAA148FAF6B1EC15E32D89AC853AC291A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FEFE984533F198D80A00000000000000000000000000000000000000000000000005171325B6A2F17F1C0C0F8C8F8C4A0DCDC0347BB87CE72D49AC2E4E11F89069509B129A2536BF3D57C6BCA30894032A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0CA24447AA0CEDB4B561C7810461EEF19B16A827C27352E5E01F914E9D7C78247A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FFFE884533F194680A0000000000000000000000000000000000000000000000000DA4714CFED9D8BBCC0C0F8C8F8C4A047F2DD6C15EA4082B3E11E5CF6B925B27E51D9DE68051A093E52EF465CFFBB8CA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A05A7206EDDDF50FCFEEAA97348A7112FC6EDD0B5EACB44CF43D6A6C6B6609B459A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FEFED84533F193E80A0000000000000000000000000000000000000000000000000FFAFBA4BF8DC944EC0C0F8C8F8C4A04D5AD6D860772145872F6660ECEFCB0B0B2056E0AA3509A48BF4C175459E5121A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A00F4659D09BB2CED56E7FD9C4D3D90DACA8B4F471307B7C4385FD34A41016B0B2A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FDFF684533F192580A000000000000000000000000000000000000000000000000090620E5E59A39FE5C0C0F8C8F8C4A0C1725C58D1BF023AF468E0088DB3CF642AE097CF2C58C2ECE2FC746980ACC7E6A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0BE19A182EA1584050DEB0A79ABDC11BE896CE8D00A282BCFAF9FFCD65FD64D6AA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FEFF184533F189080A000000000000000000000000000000000000000000000000076F17F4199BCCD12C0C0F8C8F8C4A0BD521A20A18CA6CA7115065065A1AA20067EE580FB11E2963D1E3A681E8302AFA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A011BE45633350E39475A1A07712BA72DE4602D9EEBF639CCD5422A389095CCAF1A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FDFFA84533F187B80A00000000000000000000000000000000000000000000000000C71B81C4A4CB82CC0C0F8C8F8C4A07C6D2D56E9C87F1553E4D06705AF61A7C19A6046D2C39F8ED1417988783D3B1DA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A012F5F0668063509E33A45A64EB6A072B2D84AA19F430F49F159BE5008A786B2EA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FD00684533F186080A0000000000000000000000000000000000000000000000000B3F962892CFEC9E6C0C0F8C8F8C4A07154F0F8ECC7F791D22EEC06EC86D87A44B2704F015B3D2CFF3571A3D01AE0F6A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A079536ABF8E163CF8AA97F0D52866D04363902D591FD7C36AA35FC983D45FEFD6A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FDFFD84533F182F80A0000000000000000000000000000000000000000000000000736716E42499890FC0C0F8C8F8C4A0BF2FB1EE988AC4E17EAE221A24176649774333FAB25B6FC96C6081527FB6F121A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A041578DAAE7BCCCD4976340AEB19E4132D2FE4193A0D92F87744C82BFE113502FA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FD00984533F182B80A00000000000000000000000000000000000000000000000001C62FA76645942C6C0C0F8C8F8C4A07F84873E2679D40458B9DDA9900478A78871044E08F6B47DAD659B9B60FF8D48A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0597D3F4160770C0492333F90BAD739DC05117D0E478A91F09573742E432904E8A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FE00184533F17F680A0000000000000000000000000000000000000000000000000E24D8B1140FB34D5C0C0F8C8F8C4A0FD77BD13A8CDE1766537FEBE751A27A2A31310A04638A1AFCD5E8AD3C5485453A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0473B2B248D91010BA9AEC2696FFC93C11C415ED132832BE0FD0578F184862E13A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FEFFC84533F17CA80A0000000000000000000000000000000000000000000000000FB5B65BAC3F0D947C0C0F8C8F8C4A0518916DFB79C390BD7BFF75712174512C2F96BEC42A3F573355507AD1588CE0CA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A08599D2EC9E95EC62F41A4975B655D8445D6767035F94EB235ED5EBEA976FB9EAA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347833FE00484533F17B880A0000000000000000000000000000000000000000000000000BC27F4B8A201476BC0C0F90319F8C4A0AB6B9A5613970FAA771B12D449B2E9BB925AB7A369F0A4B86B286E9D540099CFA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347943854AAF203BA5F8D49B1EC221329C7AEBCF050D3A0990DC3B5ACBEE04124361D958FE51ACB582593613FC290683940A0769549D3EDA09BFE4817D274EA3EB8672E9FE848C3885B53BBBD1D7C26E6039F90FB96B942B0833FF00084533F16B780A000000000000000000000000000000000000000000000000077377ADFF6C227DBF9024FF89D80809400000000000000000000000000000000000000008609184E72A000822710B3606956330C0D630000003359366000530A0D630000003359602060005301356000533557604060005301600054630000000C5884336069571CA07F6EB94576346488C6253197BDE6A7E59DDC36F2773672C849402AA9C402C3C4A06D254E662BF7450DD8D835160CBB053463FED0B53F2CDD7F3EA8731919C8E8CCF9010501809400000000000000000000000000000000000000008609184E72A000822710B85336630000002E59606956330C0D63000000155933FF33560D63000000275960003356576000335700630000005358600035560D630000003A590033560D63000000485960003356573360003557600035335700B84A7F4E616D65526567000000000000000000000000000000000000000000000000003057307F4E616D655265670000000000000000000000000000000000000000000000000057336069571BA04AF15A0EC494AEAC5B243C8A2690833FAA74C0F73DB1F439D521C49C381513E9A05802E64939BE5A1F9D4D614038FBD5479538C48795614EF9C551477ECBDB49D2F8A6028094CCDEAC59D35627B7DE09332E819D5159E7BB72508609184E72A000822710B84000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002D0ACEEE7E5AB874E22CCF8D1A649F59106D74E81BA0D05887574456C6DE8F7A0D172342C2CBDD4CF7AFE15D9DBB8B75B748BA6791C9A01E87172A861F6C37B5A9E3A5D0D7393152A7FBE41530E5BB8AC8F35433E5931BC0"; + String blocksRaw = "F9172113F8B7F8B3A04E3D098FA663C27A4C724002B12B608BD636632AA17899FF6782E2E9210F4021A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A078701082D9264A31CE3AA5A12AE068709301E9F5484E853139C81D86D5959C5980835772648202A08609184E72A0008307E8F380845398D52380A03EBAE36D8FEB6DF78401117DCFE38742DF6C84EF708F20BA2341042D7BD4D40FC0C0F8B7F8B3A0A9128CE3659938930C15C22D1ADE22964EFDF4054AD6819AD8FDA2C64A0141E7A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0E5BF6A4707617B4B906DADF85F9CE2FF58222C2F89C3F29F4FEDF9E2661A00208083575C8D82029F8609184E72A0008307EAEE80845398D51A80A0BD54850235E3138F7433B66B675368C3435D53D03DEEB277078C7A425C85516DC0C0F8B7F8B3A012EC9C0863764E5A2BB88EE8B3685367CE87857329535077E34BE3C3D6502695A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A08AC24C4D4F63A4F72A5D1097F7756CC39B16574BEAACFEA82744D11FBCC075D480835746BC82029E8609184E72A0008307ECEA80845398D50080A07ECD1836FD89BC993DBC8D116FD2263F0469CEB9FBC4BBC0CA3EEC5B4CD05DC7C0C0F8B7F8B3A02FA1B8736311382AE02F669163FE53C31F3A4C98846E6DDF8738D9D4CAA05883A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A054B1EB45E47AB8D46BBA2F067AFBF7B741F5E2E3377F625522EC2D693C18313580835730F082029D8609184E72A0008307EEE680845398D4FF80A0CD6B835378456E4DF2EDE6B30DBC7A941ECF07733517BA1FF7E284344227A9C1C0C0F8B7F8B3A0DE20EAE9ED09A0A81A901CBE4B1E095AAB685E86F4501277754827E025BA173DA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0B8E5D0E8F943575CEEEFEB7CC7E17D77F8CC61CBEC7662336A95BAC330078F3E8083571B2A82029C8609184E72A0008307F0E380845398D4F580A09E9003B8A22F7F2F1C6E516700AD859A855873CE3B147E8653D6B48706C38C0BC0C0F8B7F8B3A07FC1BB6E1B8F39FDA59F136622D8B9BE14FBD01D5382FAD30F0BCA78CB78B405A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0A768B954A8BA931141E9436D74931CE02A0C3B9D54577DFADFF6467307EED162808357056982029B8609184E72A0008307F2E080845398D4F480A0C4587BBBCFA6235FCFE312BC6438936A073BD6C706D16C934034673251253C2BC0C0F8B7F8B3A09F4C296D1889239CB9E79DF78F353E37CD21354B2ED8820C99A9D2D8B9072E92A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A02ED165D7907227FC7897A2D359DECFDC4C1DA9E82D0826BBE58C5C26729E49E4808356EFAE82029A8609184E72A0008307F4DE80845398D4F180A07C19008D4830C03317B2BBEFCA9A32CD305E396619CADB67CDB398B8D0FA6643C0C0F8B7F8B3A0E18DA2225758ED3E1125AAC2B58E5F86DECEC03D0B15FA81B3A8C469DD805BF4A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A02EBCA109398FB48DA8B0BBE75E718E87447C9A6FB50C6CDA1B3899662CDF0F67808356D9F88202998609184E72A0008307F6DC80845398D4E580A0163222F3F38C75EA943760A7FEF66948E4B018C986AF96C09CA629A6C587DB6CC0C0F8B7F8B3A0BA9DB82A9848C8D21689C1C4E219A35C85FB6A7B2930A47C87C51874197B6494A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0C4CB2A304EFE58AA2E9C2752CBEC1917ED4CC235AD1A375A835E4A8D58C2E109808356C4478202988609184E72A0008307F8DB80845398D4E280A00029A05C9C96314DDBEB94DB93008BFBEC7AC8E8A2FFDA012A80CEBFE155EB33C0C0F8B7F8B3A0BB6408C4A9612A2B8D81545B03A01DEC0689750BAA77E352512AF8411A1EF07BA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0476883DE3ED8B49D0D3BDAF866331E43765B4F1C253F86ED3225BC78EA84AA58808356AE9C8202978609184E72A0008307FADA80845398D4DD80A0A6D67E30C292734082BE0E1D70BF891159A7E6C6D5293A74237E7A8C948D0D07C0C0F8B7F8B3A0B8C4CBDE5BDA2E5E306B97492AAFFCCEE1EBE4B5020724C090B0AF21AA9C072EA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0E66299FB9CD4A01D7A3A27575F4775FF8F930B78CB88B54C29E6D65E07ED7C1080835698F68202968609184E72A0008307FCDA80845398D4DC80A0CE9070210C9AFD82E70235BC067BEB2636DE3AE9C17D22D523E9545378B117F0C0C0F8B7F8B3A05CD679EB058797DE4FC2BF4072AC187B7CCB3D173880685A71382647A7ECE5CCA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0314424865F4BB387E8FAC486BF543C28CAF9B7558A8E7B9A704946D5579C0FD380835683568202958609184E72A0008307FEDA80845398D4D880A0221E7C37257E0589BE33B252C34AADBCFC17F225497101E272DC0E7A0264D4FFC0C0F8B7F8B3A073F063D35A56F2AEEE30FBB1126DA5AF83137C9ABBD86B79D62E3CE9CEA77CA6A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0579018D81D7A75BF7B09C8836B9628E24D854E68B6A0FA0907AC45854CB1A6618083566DBB8202948609184E72A000830800DB80845398D4D780A094C474744089C5D54AEAC3F0F35C024528072F6BF99A5092C76DBE0C0E174E51C0C0F8B7F8B3A07BFBCB0019132035D7EFE1428D15EB641161BB7F73079B6789AF1F3412C0DF6FA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0C8466D2B79D70C04C9DF51E852C133FB226C7FFFE19C1F487DE4464ACB34F1E080835658258202938609184E72A000830802DC80845398D4D280A0DB3DCFD66D01831115D191321847794B1A99AB0CF2EADA6418BC0E9B86B975D6C0C0F8B7F8B3A04EF151FA9C33959B4ED270A53E0BFA93EBCA8A4F8D19AC700BC56B5840986A5CA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0147C812F39499C3E9BE1549DD3829A1EF987F2112FF4455E98CFA4859443DEC680835642958202928609184E72A000830804DE80845398D4D080A0B40DD56DCB97FA44BADD2DF65B86E9BFDDA10BE1E58BE54161BBC27B0A4BFB7DC0C0F8B7F8B3A0289E7F0047FB304BC3C9412B658912A51C8399BDBFA68051B6AC2107C267813EA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A07248446C3A49C4170173AF1ED87A5F1C8A988F2BDD1CA54AF0529227C056FC088083562D0A8202918609184E72A000830806E080845398D4CF80A0A0AFBDB920883BC89724E90404425ADC2547A233151E75A924FCA74FEDED0695C0C0F8B7F8B3A0815BF53656BD7BCA2B0150696D9CF7F7EB423BC837F51D5D47B20604206984ECA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347941408C012810FDC21F9EFB5DC3A4553E7795D1007A0673842E45E540833666089984E04A5918B9B83FC501A4534E2545F93BA8EA6D380835617858202908609184E72A000830808E380845398D4C380A021FB11A6283D9F1E3E62ADD73C1CB7A3858E826DC4781A8FFDAB2BF0FE6FA27BC0C0F8B7F8B3A0DFD439BD77F248133218FE7D6FD5C025FF90C62756AB12680F57E71A0145313FA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A0EC92BB4E2D01FFF0D7A3476D1902409D1876EDECD4D4D7997E901AA88D1B454C8083562D1082028F8609184E72A00083080AE680845398D3FE80A0FD745B9AC481F76C27772CA8780E567B7EE3F61726079AE3F9B7E52C5A6625C9C0C0F8B7F8B3A016380C1C0BCD6E4E2639BF71A88C5ED62989DC050A57723208FE7B16F9692E3CA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794E559DE5527492BCB42EC68D07DF0742A98EC3F1EA0EBEF7B51621F344969C98B12162DA5561CCF1379B25A97D1EF060E9CBA6BC1A580835642A082028E8609184E72A00083080CEA80845398D3BA80A039E3ABFD43CD4C0BF449AE227FC00E575D3D9E41184C6FB8F904BFC1B2F84EEDC0C0F8B7F8B3A005D574A8528490A334A41FDBFBE30496BB157698B07CB5F50C5500B074B65FCBA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A09A9655501B4139756A1049E6BAC7C54C075911E7CE5864C96EF84B3B50547C188083562D1582028D8609184E72A00083080EEE80845398D3AA80A0095EA23CE2F7681E745B222BC0CADF0595F83540F5F5E16A5CA1B0270A4D3976C0C0F8B7F8B3A01CA5D4F780DC08D5D288B2DBDA84A8331821A3AE83FA1A05B2C41ED1901BFC4AA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A09B83C231F21075F7F6C5730AE6F641589D8C8FB0A6BB50C59BA0D54F4112FFC9808356179082028C8609184E72A000830810F380845398D3A180A029E9AE6CAC4CDF2E4F4EBD304821C0D71438EEA4249C137E07C8E5526A59C8FBC0C0F8B7F8B3A0FD542F20E15059A6EE14626D13376FD062B7FA976790919B9DE3BFC5FF64ABFCA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A0018F22DC9381175980D9339FA9EEDCC4908090EE67930B1CA12DCB095EF2A4428083562D1B82028B8609184E72A000830812F880845398D36C80A08822E8886215F90D24AF961E699F49F43EA79CF1B719E68C3260011D98E6D1DCC0C0F8B7F8B3A0BA04C05D4640D6FC157BF56D60CF4E6DF49CC4F605F2FBDACC9E3041E2E66427A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794E559DE5527492BCB42EC68D07DF0742A98EC3F1EA031EC126502CF877C096F7E23F8590A0274E66DC435068448E408536C8501089E808356179682028A8609184E72A000830814FE80845398D34780A0F1F9910D75D3EE7CB0AB0B5CB04E32F05960CFF697BF0C3319964E30EC284B31C0C0F8B7F8B3A038700E2D2033293540CA5E0D762A16B98CF9AE64D5081F8E67D944E9BE6605A9A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A0966E5E6BA73F423A1BEB270113C3CB5DCC448849C988F4CBE434BF91A6C28AF88083562D218202898609184E72A0008308170480845398D2B180A0683AFE10542DF70388960C25824CD602218125C2356B708725949333629FE2F4C0C0F8B7F8B3A0E59FB5ABDEDB01506208DFADA6B6050D00332BC43620E15894E58F9D90E4868DA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A0751F572D0F19E6D3A8E11BCA14CB54345D391D2A5934D5528AC863CFDCC5873780835642B18202888609184E72A0008308190B80845398D1DD80A0207A6B27D7CF7498073477105A90C02F4D9F8D183E780970148AB550B66FFE99C0C0F8B7F8B3A014CF3EA209980B17DA3CF6002AC192B63EFF02BCBFC62F790493A7BB9E374D72A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A053E1E3C782586C5A104DBFEC03FF64E433A3CAFBCB65DC69DC30FA12C70B63F38083562D268202878609184E72A00083081B1280845398D1C580A07AF2FBE29DCDB8E6DA26149A8B5FC181A94C89A1D60BD6AB4FAB767F419A8391C0C0F8B7F8B3A0A831B5DACE1E49762B0894E6EF1BBB1DF946C3560D811C6CCBEF8B6A7AEBB3EDA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A0F83F501E76C7863E5857885E46DFC74E5B0452AF51B17A80AF753C228AA5EF2F80835617A18202868609184E72A00083081D1A80845398D1C180A0C43332D79FC12856D6321E7BE391A0344C76A2765B9ED364DDEC1822524176D1C0C0F8B7F8B3A0B6F55A42F40528266C17FCE2FEEF2BF7DE8763F93522C416526E756659AE1B98A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A0A89948D82DDC0417B2714EC1D4096EBE38F711E4C68AD1C939189514B04E31678083562D2C8202858609184E72A00083081F2280845398D0FB80A07ED5B4E3E7BBC9EADED38B3E65A5F0EE898A82837C36C0B5BE7EB3C3962AD267C0C0F8B7F8B3A06F7A64C21AB4F5C937FA5532888A0173D2DB047DEF600D3F36E55FAC7F0E8DFCA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A0F51FD229641E356383E7716CF0FB2907FDA5B83FD014BEAFD13A7BF35066930F80835617A78202848609184E72A0008308212B80845398D0FB80A04C7385E447F646750A6FBC0BD50C9F88AC41D22ED9FB3CA49F47461362469625C0C0F8B7F8B3A08721A2E0A2AB5155325F3A19A5DBE2D97AC67D111C43EA90A94F407D1E5DC6F5A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794E559DE5527492BCB42EC68D07DF0742A98EC3F1EA07C45068F0F5A4BCC88246A32E1AA7E95E5CF02786C7FD64586B73CC2B931D06D8083562D328202838609184E72A0008308233480845398D0C180A02EC24970AB7B0E17D5D73FCE074577867321F278745E1C062257ECBDB3F51027C0C0F8B7F8B3A057A2795196F8007A34551BF356037C09C2E96B49E9611F5E308A1C9EE46147B2A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794826E9B89245FA9AD982CEDB2F85BD23494142F73A017E625F9681424401E637A37ED53FDA6A9B8F713379F3664EB26E597F2281C5780835617AD8202828609184E72A0008308253E80845398D0B680A0D61174BD762DBE2511BFC618F0C07E8480B85ADAF49434D54D9831570B2C6141C0C0F8B7F8B3A0D076D1EC43FD2E345D7B31C59D37208F0D5E93B5FC28929BE16246E63A6933EEA01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794E559DE5527492BCB42EC68D07DF0742A98EC3F1EA001C1634EB128E49ECE80896DFBDC643303AA1878FD62062AC56431E5760F3949808356022D8202818609184E72A0008308274880845398D0AD80A03BD88E5D095D1F9AA8D11A7E9503768C13EC7D82FB23A11C8F03DB5EB3B16424C0C0"; byte[] payload = Hex.decode(blocksRaw); RLPList rlpList = RLP.decode2(payload); @@ -388,30 +323,27 @@ public class MessagesTest { Block block = list.get(31); - assertEquals("518916DFB79C390BD7BFF75712174512C2F96BEC42A3F573355507AD1588CE0C", + assertEquals("57A2795196F8007A34551BF356037C09C2E96B49E9611F5E308A1C9EE46147B2", Hex.toHexString(block.getHash()).toUpperCase()); - assertEquals("AB6B9A5613970FAA771B12D449B2E9BB925AB7A369F0A4B86B286E9D540099CF", + assertEquals("D076D1EC43FD2E345D7B31C59D37208F0D5E93B5FC28929BE16246E63A6933EE", Hex.toHexString(block.getParentHash()).toUpperCase()); assertEquals("1DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347", Hex.toHexString(block.getUnclesHash()).toUpperCase()); - assertEquals("3854AAF203BA5F8D49B1EC221329C7AEBCF050D3", + assertEquals("E559DE5527492BCB42EC68D07DF0742A98EC3F1E", Hex.toHexString(block.getCoinbase()).toUpperCase()); - assertEquals("990DC3B5ACBEE04124361D958FE51ACB582593613FC290683940A0769549D3ED", + assertEquals("01C1634EB128E49ECE80896DFBDC643303AA1878FD62062AC56431E5760F3949", Hex.toHexString(block.getStateRoot()).toUpperCase()); - assertEquals("9BFE4817D274EA3EB8672E9FE848C3885B53BBBD1D7C26E6039F90FB96B942B0", - Hex.toHexString(block.getTxTrieRoot()).toUpperCase()); - - assertEquals("3FF000", Hex.toHexString(block.getDifficulty()).toUpperCase()); - assertEquals(1396643511, block.getTimestamp()); + assertEquals("56022D", Hex.toHexString(block.getDifficulty()).toUpperCase()); + assertEquals(1402523821, block.getTimestamp()); assertNull(block.getExtraData()); - assertEquals("00000000000000000000000000000000000000000000000077377ADFF6C227DB", + assertEquals("3BD88E5D095D1F9AA8D11A7E9503768C13EC7D82FB23A11C8F03DB5EB3B16424", Hex.toHexString(block.getNonce()).toUpperCase()); System.out.println(blocksMessage);