Skip to content

Commit eeeca4e

Browse files
committed
More functionality in shared library
1 parent ea588bd commit eeeca4e

17 files changed

Lines changed: 81 additions & 85 deletions
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package com.danubetech.btc.connection;
22

3-
import com.danubetech.btc.records.Block;
4-
import com.danubetech.btc.records.Tx;
5-
63
import java.util.List;
74
import java.util.Map;
85

@@ -13,6 +10,6 @@ public interface BitcoinConnection {
1310
Block getBlockByTargetTime(Long targetTime);
1411
Block getBlockByMinConfirmations(Integer confirmations);
1512
List<Tx> getAddressTransactions(String address);
16-
Block getBlockByTransaction(String txid);
13+
Block getBlockByTransaction(Tx tx);
1714
Map<String, Object> getMetadata();
1815
}

‎src/main/java/com/danubetech/btc/connection/BitcoinConnector.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.danubetech.btc.connection;
22

3-
import com.danubetech.btc.network.Network;
3+
import com.danubetech.btc.connection.impl.BitcoindRPCBitcoinConnection;
44
import org.slf4j.Logger;
55
import org.slf4j.LoggerFactory;
66
import wf.bitcoin.javabitcoindrpcclient.BitcoinJSONRPCClient;
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
package com.danubetech.btc.records;
2-
3-
import java.util.List;
1+
package com.danubetech.btc.connection;
42

53
public record Block(
64
Integer blockHeight,
75
String blockHash,
86
Long blockTime,
9-
List<Tx> txs) {
7+
Integer confirmations) {
108
}

src/main/java/com/danubetech/btc/network/Network.java renamed to src/main/java/com/danubetech/btc/connection/Network.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.danubetech.btc.network;
1+
package com.danubetech.btc.connection;
22

33
import org.bitcoinj.base.BitcoinNetwork;
44

src/main/java/com/danubetech/btc/records/Tx.java renamed to src/main/java/com/danubetech/btc/connection/Tx.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
package com.danubetech.btc.records;
1+
package com.danubetech.btc.connection;
22

33
import java.util.List;
44

55
public record Tx(
66
String txId,
7-
String txHex,
87
List<TxIn> txIns,
98
List<TxOut> txOuts) {
109

src/main/java/com/danubetech/btc/records/TxIn.java renamed to src/main/java/com/danubetech/btc/connection/TxIn.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.danubetech.btc.records;
1+
package com.danubetech.btc.connection;
22

33
public record TxIn(
44
String txId,

src/main/java/com/danubetech/btc/records/TxOut.java renamed to src/main/java/com/danubetech/btc/connection/TxOut.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.danubetech.btc.records;
1+
package com.danubetech.btc.connection;
22

33
public record TxOut(
44
String txId,

src/main/java/com/danubetech/btc/connection/AbstractBitcoinConnection.java renamed to src/main/java/com/danubetech/btc/connection/impl/AbstractBitcoinConnection.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
package com.danubetech.btc.connection;
1+
package com.danubetech.btc.connection.impl;
22

3-
import com.danubetech.btc.records.Block;
4-
import com.danubetech.btc.records.Tx;
3+
import com.danubetech.btc.connection.BitcoinConnection;
4+
import com.danubetech.btc.connection.Block;
5+
import com.danubetech.btc.connection.Tx;
56

67
import java.util.List;
78

@@ -33,7 +34,7 @@ public List<Tx> getAddressTransactions(String address) {
3334
}
3435

3536
@Override
36-
public Block getBlockByTransaction(String txid) {
37+
public Block getBlockByTransaction(Tx tx) {
3738
throw new RuntimeException("Not implemented");
3839
}
3940
}

src/main/java/com/danubetech/btc/connection/BTCDRPCBitcoinConnection.java renamed to src/main/java/com/danubetech/btc/connection/impl/BTCDRPCBitcoinConnection.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
package com.danubetech.btc.connection;
1+
package com.danubetech.btc.connection.impl;
22

3+
import com.danubetech.btc.connection.BitcoinConnection;
34
import org.slf4j.Logger;
45
import org.slf4j.LoggerFactory;
56
import wf.bitcoin.javabitcoindrpcclient.BitcoinJSONRPCClient;

src/main/java/com/danubetech/btc/connection/BitcoindRPCBitcoinConnection.java renamed to src/main/java/com/danubetech/btc/connection/impl/BitcoindRPCBitcoinConnection.java

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,18 @@
1-
package com.danubetech.btc.connection;
2-
3-
import com.danubetech.btc.records.Block;
4-
import com.danubetech.btc.records.Tx;
5-
import com.danubetech.btc.records.TxIn;
6-
import com.danubetech.btc.records.TxOut;
7-
import com.fasterxml.jackson.databind.DeserializationFeature;
8-
import com.fasterxml.jackson.databind.SerializationFeature;
9-
import com.fasterxml.jackson.databind.json.JsonMapper;
1+
package com.danubetech.btc.connection.impl;
2+
3+
import com.danubetech.btc.connection.*;
104
import org.slf4j.Logger;
115
import org.slf4j.LoggerFactory;
126
import wf.bitcoin.javabitcoindrpcclient.BitcoinJSONRPCClient;
137

148
import java.net.URL;
159
import java.util.List;
1610
import java.util.Map;
17-
import java.util.stream.Collectors;
1811

1912
public class BitcoindRPCBitcoinConnection extends AbstractBitcoinConnection implements BitcoinConnection {
2013

2114
private static final Logger log = LoggerFactory.getLogger(BitcoindRPCBitcoinConnection.class);
2215

23-
private static final JsonMapper mapper = JsonMapper.builder()
24-
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
25-
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
26-
.build();
27-
2816
private final BitcoinJSONRPCClient bitcoindRpcClient;
2917

3018
private BitcoindRPCBitcoinConnection(BitcoinJSONRPCClient bitcoindRpcClient) {
@@ -40,17 +28,17 @@ public static BitcoindRPCBitcoinConnection create(URL rpcUrl) {
4028
@Override
4129
public Block getBlockByBlockHeight(Integer blockHeight) {
4230
BitcoinJSONRPCClient bitcoinJSONRPCClient = this.getBitcoinJsonRpcClient();
43-
wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.Block bitcoinBlock = bitcoinJSONRPCClient.getBlock(blockHeight);
44-
List<Tx> txs = bitcoinBlock.tx().stream().map(tx -> txFromBitcoinRawTransaction(bitcoinJSONRPCClient, tx)).collect(Collectors.toList());
45-
Block block = new Block(bitcoinBlock.height(), bitcoinBlock.hash(), bitcoinBlock.time().getTime(), txs);
31+
wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.Block bitcoinjBlock = bitcoinJSONRPCClient.getBlock(blockHeight);
32+
List<Tx> txs = bitcoinjBlock.tx().stream().map(tx -> txFromBitcoinjRawTransaction(bitcoinJSONRPCClient, tx)).toList();
33+
Block block = blockFromBitcoinjBlock(bitcoinjBlock);
4634
if (log.isDebugEnabled()) log.debug("getBlockByBlockHeight for {}: {}", blockHeight, block);
4735
return block;
4836
}
4937

5038
@Override
5139
public Tx getTransactionById(String txId) {
5240
BitcoinJSONRPCClient bitcoinJSONRPCClient = this.getBitcoinJsonRpcClient();
53-
Tx tx = txFromBitcoinRawTransaction(bitcoinJSONRPCClient, txId);
41+
Tx tx = txFromBitcoinjRawTransaction(bitcoinJSONRPCClient, txId);
5442
if (log.isDebugEnabled()) log.debug("getTransactionById for {}: {}", txId, tx);
5543
return tx;
5644
}
@@ -61,9 +49,9 @@ public Block getBlockByTargetTime(Long targetTime) {
6149
Integer blocks = bitcoinJSONRPCClient.getBlockChainInfo().blocks();
6250
Block block = null;
6351
for (int blockHeight=blocks-1; blockHeight>=0; blockHeight--) {
64-
wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.Block bitcoinBlock = bitcoinJSONRPCClient.getBlock(blockHeight);
65-
if (bitcoinBlock.time().getTime() < targetTime) {
66-
block = new Block(bitcoinBlock.height(), bitcoinBlock.hash(), bitcoinBlock.time().getTime(), null);
52+
wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.Block bitcoinjBlock = bitcoinJSONRPCClient.getBlock(blockHeight);
53+
if (bitcoinjBlock.time().getTime() < targetTime) {
54+
block = blockFromBitcoinjBlock(bitcoinjBlock);
6755
break;
6856
}
6957
}
@@ -77,9 +65,9 @@ public Block getBlockByMinConfirmations(Integer minConfirmations) {
7765
Integer blocks = bitcoinJSONRPCClient.getBlockChainInfo().blocks();
7866
Block block = null;
7967
for (int blockHeight=blocks-1; blockHeight>=0; blockHeight--) {
80-
wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.Block bitcoinBlock = bitcoinJSONRPCClient.getBlock(blockHeight);
81-
if (bitcoinBlock.confirmations() >= minConfirmations) {
82-
block = new Block(bitcoinBlock.height(), bitcoinBlock.hash(), bitcoinBlock.time().getTime(), null);
68+
wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.Block bitcoinjBlock = bitcoinJSONRPCClient.getBlock(blockHeight);
69+
if (bitcoinjBlock.confirmations() >= minConfirmations) {
70+
block = blockFromBitcoinjBlock(bitcoinjBlock);
8371
break;
8472
}
8573
}
@@ -97,24 +85,27 @@ public Map<String, Object> getMetadata() {
9785
* Helper methods
9886
*/
9987

100-
private static Tx txFromBitcoinRawTransaction(BitcoinJSONRPCClient bitcoinJSONRPCClient, String txId) {
88+
private static Block blockFromBitcoinjBlock(wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.Block bitcoinjBlock) {
89+
return new Block(bitcoinjBlock.height(), bitcoinjBlock.hash(), bitcoinjBlock.time().getTime(), bitcoinjBlock.confirmations());
90+
}
91+
92+
private static Tx txFromBitcoinjRawTransaction(BitcoinJSONRPCClient bitcoinJSONRPCClient, String txId) {
10193
if (Tx.COINBASE_TX_IDENTIFIER.equals(txId) || Tx.GENESIS_TX_IDENTIFIER.equals(txId)) {
102-
return new Tx(txId, null, null, null);
94+
return new Tx(txId, null, null);
10395
}
104-
wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.RawTransaction bitcoinRawTransaction = bitcoinJSONRPCClient.getRawTransaction(txId);
105-
String txHex = bitcoinRawTransaction.hex();
106-
List<TxIn> txIns = bitcoinRawTransaction.vIn().stream().map(BitcoindRPCBitcoinConnection::txInFromBitcoinIn).toList();
107-
List<TxOut> txOuts = bitcoinRawTransaction.vOut().stream().map(BitcoindRPCBitcoinConnection::txOutFromBitcoinOut).toList();
108-
return new Tx(txId, txHex, txIns, txOuts);
96+
wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.RawTransaction bitcoinjRawTransaction = bitcoinJSONRPCClient.getRawTransaction(txId);
97+
List<TxIn> txIns = bitcoinjRawTransaction.vIn().stream().map(BitcoindRPCBitcoinConnection::txInFromBitcoinjIn).toList();
98+
List<TxOut> txOuts = bitcoinjRawTransaction.vOut().stream().map(BitcoindRPCBitcoinConnection::txOutFromBitcoinjOut).toList();
99+
return new Tx(txId, txIns, txOuts);
109100
}
110101

111-
private static TxIn txInFromBitcoinIn(wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.RawTransaction.In in) {
112-
String txId = in.txid();
102+
private static TxIn txInFromBitcoinjIn(wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.RawTransaction.In in) {
103+
var txId = in.txid();
113104
Integer vout = txId == null ? null : in.getTransactionOutput().n();
114105
return new TxIn(txId, vout);
115106
}
116107

117-
private static TxOut txOutFromBitcoinOut(wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.RawTransaction.Out out) {
108+
private static TxOut txOutFromBitcoinjOut(wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.RawTransaction.Out out) {
118109
String txId = out.transaction().txId();
119110
String scriptPubKeyAddress = out.scriptPubKey().mapStr("address");
120111
String asm = out.scriptPubKey().asm();

0 commit comments

Comments
 (0)