Skip to content

Commit f295041

Browse files
authored
Merge pull request #223 from rsksmart/bridge-btc-tx-index-integration
Implementation of RSKIP379
2 parents 959e100 + 0721b2b commit f295041

File tree

3 files changed

+37
-20
lines changed

3 files changed

+37
-20
lines changed

src/main/java/co/rsk/federate/BtcToRskClient.java

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,56 @@
11
package co.rsk.federate;
22

3+
import static com.google.common.base.Preconditions.checkNotNull;
4+
35
import co.rsk.bitcoinj.core.BtcTransaction;
46
import co.rsk.config.BridgeConstants;
57
import co.rsk.federate.adapter.ThinConverter;
68
import co.rsk.federate.bitcoin.BitcoinWrapper;
79
import co.rsk.federate.bitcoin.BlockListener;
810
import co.rsk.federate.bitcoin.TransactionListener;
9-
import co.rsk.federate.io.*;
11+
import co.rsk.federate.io.BtcToRskClientFileData;
12+
import co.rsk.federate.io.BtcToRskClientFileReadResult;
13+
import co.rsk.federate.io.BtcToRskClientFileStorage;
1014
import co.rsk.federate.timing.TurnScheduler;
1115
import co.rsk.net.NodeBlockProcessor;
1216
import co.rsk.panic.PanicProcessor;
1317
import co.rsk.peg.BridgeUtils;
1418
import co.rsk.peg.Federation;
1519
import co.rsk.peg.FederationMember;
20+
import co.rsk.peg.PegUtilsLegacy;
1621
import co.rsk.peg.PeginInformation;
1722
import co.rsk.peg.btcLockSender.BtcLockSender.TxSenderAddressType;
23+
import co.rsk.peg.btcLockSender.BtcLockSenderProvider;
1824
import co.rsk.peg.pegininstructions.PeginInstructionsException;
1925
import co.rsk.peg.pegininstructions.PeginInstructionsProvider;
2026
import com.google.common.annotations.VisibleForTesting;
21-
import co.rsk.peg.btcLockSender.BtcLockSenderProvider;
2227
import com.google.common.collect.Lists;
23-
import org.bitcoinj.core.*;
24-
import org.bitcoinj.store.BlockStoreException;
25-
import org.ethereum.config.blockchain.upgrades.ActivationConfig;
26-
import org.ethereum.config.blockchain.upgrades.ConsensusRule;
27-
import org.slf4j.Logger;
28-
import org.slf4j.LoggerFactory;
29-
30-
import javax.annotation.PreDestroy;
3128
import java.io.IOException;
3229
import java.time.Clock;
33-
import java.util.*;
30+
import java.util.ArrayList;
31+
import java.util.Collections;
32+
import java.util.LinkedList;
33+
import java.util.List;
34+
import java.util.Map;
35+
import java.util.Optional;
36+
import java.util.Set;
3437
import java.util.concurrent.Executors;
3538
import java.util.concurrent.ScheduledExecutorService;
3639
import java.util.concurrent.TimeUnit;
3740
import java.util.stream.IntStream;
38-
39-
import static com.google.common.base.Preconditions.checkNotNull;
41+
import javax.annotation.PreDestroy;
42+
import org.bitcoinj.core.Block;
43+
import org.bitcoinj.core.NetworkParameters;
44+
import org.bitcoinj.core.PartialMerkleTree;
45+
import org.bitcoinj.core.Sha256Hash;
46+
import org.bitcoinj.core.StoredBlock;
47+
import org.bitcoinj.core.Transaction;
48+
import org.bitcoinj.core.Utils;
49+
import org.bitcoinj.store.BlockStoreException;
50+
import org.ethereum.config.blockchain.upgrades.ActivationConfig;
51+
import org.ethereum.config.blockchain.upgrades.ConsensusRule;
52+
import org.slf4j.Logger;
53+
import org.slf4j.LoggerFactory;
4054

4155
/**
4256
* Manages the process of informing the RSK bridge news about the bitcoin blockchain
@@ -770,7 +784,7 @@ private boolean isTxProcessable(BtcTransaction btcTx, TxSenderAddressType txSend
770784

771785
// If the tx is a peg-out it means we are receiving change (or migrating funds)
772786
// so it should be processable
773-
return BridgeUtils.isPegOutTx(btcTx, Collections.singletonList(federation), activationConfig.forBlock(bestBlockNumber))
787+
return PegUtilsLegacy.isPegOutTx(btcTx, Collections.singletonList(federation), activationConfig.forBlock(bestBlockNumber))
774788
|| activationConfig.isActive(ConsensusRule.RSKIP170, bestBlockNumber)
775789
|| BridgeUtils.txIsProcessableInLegacyVersion(txSenderAddressType, activationConfig.forBlock(bestBlockNumber));
776790
}

src/main/java/co/rsk/federate/bitcoin/BitcoinWrapperImpl.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package co.rsk.federate.bitcoin;
22

33
import co.rsk.bitcoinj.core.BtcTransaction;
4+
import co.rsk.bitcoinj.wallet.Wallet;
45
import co.rsk.config.BridgeConstants;
56
import co.rsk.federate.FederatorSupport;
67
import co.rsk.federate.adapter.ThinConverter;
7-
import co.rsk.peg.BridgeUtils;
8+
import co.rsk.peg.BridgeBtcWallet;
89
import co.rsk.peg.Federation;
10+
import co.rsk.peg.PegUtilsLegacy;
911
import co.rsk.peg.PeginInformation;
1012
import co.rsk.peg.btcLockSender.BtcLockSenderProvider;
1113
import co.rsk.peg.pegininstructions.PeginInstructionsException;
@@ -323,7 +325,8 @@ protected void coinsReceivedOrSent(Transaction tx) {
323325
for (FederationListener watched : watchedFederations) {
324326
Federation watchedFederation = watched.getFederation();
325327
TransactionListener listener = watched.getListener();
326-
if (BridgeUtils.isValidPegInTx(btcTx, watchedFederation, btcContextThin, bridgeConstants, federatorSupport.getConfigForBestBlock())) {
328+
Wallet watchedFederationWallet = new BridgeBtcWallet(btcContextThin, Collections.singletonList(watchedFederation));
329+
if (PegUtilsLegacy.isValidPegInTx(btcTx, watchedFederation, watchedFederationWallet, bridgeConstants, federatorSupport.getConfigForBestBlock())) {
327330

328331
PeginInformation peginInformation = new PeginInformation(
329332
btcLockSenderProvider,
@@ -345,7 +348,7 @@ protected void coinsReceivedOrSent(Transaction tx) {
345348
LOGGER.debug("[coinsReceivedOrSent] [btctx:{}] is a lock", tx.getWTxId());
346349
listener.onTransaction(tx);
347350
}
348-
if (BridgeUtils.isPegOutTx(btcTx, Collections.singletonList(watchedFederation), federatorSupport.getConfigForBestBlock())) {
351+
if (PegUtilsLegacy.isPegOutTx(btcTx, Collections.singletonList(watchedFederation), federatorSupport.getConfigForBestBlock())) {
349352
LOGGER.debug("[coinsReceivedOrSent] [btctx:{}] is a release", tx.getWTxId());
350353
listener.onTransaction(tx);
351354
}

src/test/java/co/rsk/federate/BtcToRskClientTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package co.rsk.federate;
22

3+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
34
import static org.junit.jupiter.api.Assertions.assertEquals;
45
import static org.junit.jupiter.api.Assertions.assertFalse;
56
import static org.junit.jupiter.api.Assertions.assertNotNull;
67
import static org.junit.jupiter.api.Assertions.assertNull;
78
import static org.junit.jupiter.api.Assertions.assertSame;
89
import static org.junit.jupiter.api.Assertions.assertThrows;
9-
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
1010
import static org.junit.jupiter.api.Assertions.assertTrue;
1111
import static org.mockito.Mockito.any;
1212
import static org.mockito.Mockito.anyInt;
@@ -38,9 +38,9 @@
3838
import co.rsk.federate.mock.SimpleBtcTransaction;
3939
import co.rsk.federate.mock.SimpleFederatorSupport;
4040
import co.rsk.net.NodeBlockProcessor;
41-
import co.rsk.peg.BridgeUtils;
4241
import co.rsk.peg.Federation;
4342
import co.rsk.peg.FederationMember;
43+
import co.rsk.peg.PegUtilsLegacy;
4444
import co.rsk.peg.btcLockSender.BtcLockSender;
4545
import co.rsk.peg.btcLockSender.BtcLockSender.TxSenderAddressType;
4646
import co.rsk.peg.btcLockSender.BtcLockSenderProvider;
@@ -1734,7 +1734,7 @@ void updateTransaction_with_release_before_rskip143() throws Exception {
17341734
releaseInput1.setScriptSig(inputScript);
17351735

17361736
// Verify it was properly signed
1737-
assertTrue(BridgeUtils.isPegOutTx(releaseTx1, Collections.singletonList(genesisFederation), activations));
1737+
assertTrue(PegUtilsLegacy.isPegOutTx(releaseTx1, Collections.singletonList(genesisFederation), activations));
17381738

17391739
Transaction releaseTx = ThinConverter.toOriginalInstance(bridgeRegTestConstants.getBtcParamsString(), releaseTx1);
17401740

0 commit comments

Comments
 (0)