From e51beb6b96caeb5b8e34f2107c290996b5fd29f5 Mon Sep 17 00:00:00 2001 From: "C. Alexander Leigh" Date: Fri, 1 Apr 2022 15:42:08 -0700 Subject: [PATCH] leigh-chain: Fixed bugs. Working round/trip with JSON serialization through the blockchain. --- .../src/main/java/leigh/chain/BlockScanner.java | 8 ++++++++ leigh-chain/src/main/java/leigh/chain/LeighChain.java | 8 +++++++- .../java/leigh/chain/directory/DirectoryDaemon.java | 11 +++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/leigh-chain/src/main/java/leigh/chain/BlockScanner.java b/leigh-chain/src/main/java/leigh/chain/BlockScanner.java index 3ec052484..163c39275 100644 --- a/leigh-chain/src/main/java/leigh/chain/BlockScanner.java +++ b/leigh-chain/src/main/java/leigh/chain/BlockScanner.java @@ -10,6 +10,11 @@ import org.web3j.protocol.http.HttpService; import java.util.List; +/** + * Implementation of a block scanner. + * + * @author Alex Leigh + */ public class BlockScanner { private static final MechaLogger logger = MechaLoggerFactory.getLogger(BlockScanner.class); private final String rpcUrl; @@ -22,6 +27,9 @@ public class BlockScanner { this.handler = handler; } + /** + * BUGS: This method does not exit if the PAST is scanned. + */ public void scan() { Web3j web3j = Web3j.build(new HttpService(rpcUrl)); diff --git a/leigh-chain/src/main/java/leigh/chain/LeighChain.java b/leigh-chain/src/main/java/leigh/chain/LeighChain.java index e25f2f3a4..fbd931bab 100644 --- a/leigh-chain/src/main/java/leigh/chain/LeighChain.java +++ b/leigh-chain/src/main/java/leigh/chain/LeighChain.java @@ -2,6 +2,7 @@ package leigh.chain; import leigh.mecha.log.MechaLogger; import leigh.mecha.log.MechaLoggerFactory; +import org.bouncycastle.util.encoders.Hex; import org.web3j.crypto.*; import org.web3j.protocol.Web3j; import org.web3j.protocol.core.DefaultBlockParameterName; @@ -13,6 +14,7 @@ import org.web3j.utils.Numeric; import java.io.IOException; import java.math.BigInteger; +import java.nio.charset.StandardCharsets; /** * This class implements convenience methods for interacting with the LeighChain. @@ -45,12 +47,16 @@ public class LeighChain { // There is basically a race here, since if something else publishes, we'll duplicate // the nonce. There is basically nothing to be done about this. + String encodedData = Hex.toHexString(data.getBytes(StandardCharsets.UTF_8)); + + logger.info("Created hex string: {}", encodedData); + RawTransaction rawTransaction = RawTransaction.createTransaction( nonce, gasPrice, gasLimit, destAddr, - BigInteger.valueOf(0), data); + BigInteger.valueOf(0), encodedData); byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials); diff --git a/leigh-chain/src/main/java/leigh/chain/directory/DirectoryDaemon.java b/leigh-chain/src/main/java/leigh/chain/directory/DirectoryDaemon.java index fd9738368..48f330810 100644 --- a/leigh-chain/src/main/java/leigh/chain/directory/DirectoryDaemon.java +++ b/leigh-chain/src/main/java/leigh/chain/directory/DirectoryDaemon.java @@ -6,6 +6,7 @@ import leigh.chain.ReplayOption; import leigh.mecha.log.MechaLogger; import leigh.mecha.log.MechaLoggerFactory; import leigh.mecha.util.UniversalJob; +import org.bouncycastle.util.encoders.Hex; import org.web3j.protocol.core.methods.response.EthBlock; /** @@ -29,9 +30,19 @@ public class DirectoryDaemon { @Override public void event(EthBlock.Block block, EthBlock.TransactionObject txn) { logger.info("TXN [to: {}] [value: {}]", txn.getTo(), txn.getValue()); + + String v = txn.getInput(); + logger.info("Raw input: {}", v); + if (v.startsWith("0x")) v = v.substring(2); + + byte[] d = Hex.decode(v); + logger.info("Decoded input: {}", new String(d)); } }); scanner.scan(); logger.info("Scan finished."); + + // This is required because the block filter never seems to really exit. + System.exit(UniversalJob.RET_OK); } } -- GitLab