Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion rskj-core/src/main/java/co/rsk/peg/PegUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ static PegTxType getTransactionTypeUsingPegoutIndex(
* @param activations
* @return
*/
static boolean allUTXOsToFedAreAboveMinimumPeginValue(
public static boolean allUTXOsToFedAreAboveMinimumPeginValue(
BtcTransaction btcTx,
Wallet fedWallet,
Coin minimumPegInTxValue,
Expand Down
127 changes: 127 additions & 0 deletions rskj-core/src/test/java/co/rsk/peg/PegUtilsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,133 @@ void test_getTransactionType_pegin_below_minimum_active_fed() {
assertEquals(PegTxType.PEGIN, pegTxType);
}

@Test
void allUTXOsToFedAreAboveMinimumPeginValue_peginWithOneOutputExactlyMinimum_shouldReturnTrue() {
// Arrange
Wallet liveFederationWallet = new BridgeBtcWallet(context, List.of(activeFederation));
BtcTransaction peginBtcTx = new BtcTransaction(btcMainnetParams);
BtcECKey userPubKey = BitcoinTestUtils.getBtcEcKeyFromSeed("user");

peginBtcTx.addInput(
BitcoinTestUtils.createHash(1),
0,
ScriptBuilder.createInputScript(null, userPubKey)
);

Coin minimumPeginTxValue = bridgeMainnetConstants.getMinimumPeginTxValue(activations);
peginBtcTx.addOutput(minimumPeginTxValue, activeFederation.getAddress());

// Act
boolean allUTXOsAboveMinimum = PegUtils.allUTXOsToFedAreAboveMinimumPeginValue(
peginBtcTx,
liveFederationWallet,
minimumPeginTxValue,
activations
);

// Assert
assertTrue(allUTXOsAboveMinimum);
}

@Test
void allUTXOsToFedAreAboveMinimumPeginValue_peginWithOneOutputExactlyMinimumAndOneAboveMinimum_shouldReturnTrue() {
// Arrange
Wallet liveFederationWallet = new BridgeBtcWallet(context, List.of(activeFederation));
Coin minimumPeginTxValue = bridgeMainnetConstants.getMinimumPeginTxValue(activations);

BtcTransaction peginBtcTx = new BtcTransaction(btcMainnetParams);
BtcECKey userPubKey = BitcoinTestUtils.getBtcEcKeyFromSeed("user");

peginBtcTx.addInput(
BitcoinTestUtils.createHash(1),
0,
ScriptBuilder.createInputScript(null, userPubKey)
);

Address federationAddress = activeFederation.getAddress();
Coin valueAboveMinimum = minimumPeginTxValue.plus(Coin.SATOSHI);

peginBtcTx.addOutput(minimumPeginTxValue, federationAddress);
peginBtcTx.addOutput(valueAboveMinimum, federationAddress);

// Act
boolean allUTXOsAboveMinimum = PegUtils.allUTXOsToFedAreAboveMinimumPeginValue(
peginBtcTx,
liveFederationWallet,
minimumPeginTxValue,
activations
);

// Assert
assertTrue(allUTXOsAboveMinimum);
}

@Test
void allUTXOsToFedAreAboveMinimumPeginValue_peginWithOneOutputBelowMinimum_shouldReturnFalse() {
// Arrange
Wallet liveFederationWallet = new BridgeBtcWallet(context, List.of(activeFederation));
Coin minimumPeginTxValue = bridgeMainnetConstants.getMinimumPeginTxValue(activations);

BtcTransaction peginBtcTx = new BtcTransaction(btcMainnetParams);
BtcECKey userPubKey = BitcoinTestUtils.getBtcEcKeyFromSeed("user");

peginBtcTx.addInput(
BitcoinTestUtils.createHash(1),
0,
ScriptBuilder.createInputScript(null, userPubKey)
);

Address federationAddress = activeFederation.getAddress();
Coin valueBelowMinimum = minimumPeginTxValue.minus(Coin.SATOSHI);
Coin valueAboveMinimum = minimumPeginTxValue.plus(Coin.SATOSHI);

peginBtcTx.addOutput(valueBelowMinimum, federationAddress);
peginBtcTx.addOutput(minimumPeginTxValue, federationAddress);
peginBtcTx.addOutput(valueAboveMinimum, federationAddress);

// Act
boolean allUTXOsAboveMinimum = PegUtils.allUTXOsToFedAreAboveMinimumPeginValue(
peginBtcTx,
liveFederationWallet,
minimumPeginTxValue,
activations
);

// Assert
assertFalse(allUTXOsAboveMinimum);
}

@Test
void allUTXOsToFedAreAboveMinimumPeginValue_notPeginTx_shouldReturnFalse() {
// Arrange
Wallet liveFederationWallet = new BridgeBtcWallet(context, List.of(activeFederation));
Coin minimumPeginTxValue = bridgeMainnetConstants.getMinimumPeginTxValue(activations);

BtcTransaction peginBtcTx = new BtcTransaction(btcMainnetParams);
BtcECKey userPubKey = BitcoinTestUtils.getBtcEcKeyFromSeed("user");

peginBtcTx.addInput(
BitcoinTestUtils.createHash(1),
0,
ScriptBuilder.createInputScript(null, userPubKey)
);

Address receiver = BitcoinTestUtils.createP2PKHAddress(btcMainnetParams, "receiver");
// sending enough value but to some random address
peginBtcTx.addOutput(minimumPeginTxValue, receiver);

// Act
boolean allUTXOsAboveMinimum = PegUtils.allUTXOsToFedAreAboveMinimumPeginValue(
peginBtcTx,
liveFederationWallet,
minimumPeginTxValue,
activations
);

// Assert
assertFalse(allUTXOsAboveMinimum);
}

@Test
void test_getTransactionType_pegin_active_fed() {
// Arrange
Expand Down
Loading