Repository: rsksmart/rskj
Pull request #3068: Add UnionBridgeConstants for each network
Author: login: nathanieliov
Created: 2025-04-08T16:56:22Z | Merged: 2025-04-14T22:50:00Z

Add UnionBridgeConstants for each network

## How Has This Been Tested?

Unit tests

## Types of changes

- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

## Checklist:

- [x] My code follows the code style of this project.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [ x Tests for the changes have been added (for bug fixes / features)
- [ ] Requires Activation Code (Hard Fork)


Diff:
diff --git a/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java b/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java
new file mode 100644
index 00000000000..f998d0df7bc
--- /dev/null
+++ b/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java
@@ -0,0 +1,34 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+
+public class UnionBridgeConstants {
+    protected NetworkParameters btcParams;
+    protected RskAddress unionBridgeAddress;
+    protected Coin initialLockingCap;
+    protected int lockingCapIncrementsMultiplier;
+    protected AddressBasedAuthorizer changeAuthorizer;
+
+    public NetworkParameters getBtcParams() {
+        return btcParams;
+    }
+
+    public RskAddress getAddress() {
+        return unionBridgeAddress;
+    }
+
+    public Coin getInitialLockingCap() {
+        return initialLockingCap;
+    }
+
+    public int getLockingCapIncrementsMultiplier() {
+        return lockingCapIncrementsMultiplier;
+    }
+
+    public AddressBasedAuthorizer getChangeAuthorizer() {
+        return changeAuthorizer;
+    }
+}
diff --git a/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeMainNetConstants.java b/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeMainNetConstants.java
new file mode 100644
index 00000000000..8aa0dfbbb52
--- /dev/null
+++ b/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeMainNetConstants.java
@@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeMainNetConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeMainNetConstants();
+
+    // Private constructor to prevent instantiation
+    private UnionBridgeMainNetConstants() {
+        btcParams = NetworkParameters.fromID(NetworkParameters.ID_MAINNET);
+
+        // TODO: Replace with actual address
+        // seed: UNION_BRIDGE_ADDRESS
+        unionBridgeAddress = new RskAddress("5988645d30cd01e4b3bc2c02cb3909dec991ae31");
+
+        // TODO: Replace with actual initial locking cap value and increments multiplier
+        initialLockingCap = Coin.COIN.multiply(300L); // 300 BTC
+        lockingCapIncrementsMultiplier = 2;
+
+        // TODO: Replace with actual authorizers
+        List<ECKey> authorizers = Collections.singletonList(
+            // seed: unionBridgeAuthorizer
+            ECKey.fromPublicOnly(Hex.decode("041fb6d4b421bb14d95b6fb79823d45b777f0e8fd07fe18d0940c0c113d9667911e354d4e8c8073f198d7ae5867d86e3068caff4f6bd7bffccc6757a3d7ee8024a"))
+        );
+        changeAuthorizer = new AddressBasedAuthorizer(
+            authorizers,
+            AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
+        );
+    }
+
+    public static UnionBridgeConstants getInstance() {
+        return instance;
+    }
+}
diff --git a/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeRegTestConstants.java b/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeRegTestConstants.java
new file mode 100644
index 00000000000..396a1c54d8e
--- /dev/null
+++ b/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeRegTestConstants.java
@@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeRegTestConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeRegTestConstants();
+
+    // Private constructor to prevent instantiation
+    private UnionBridgeRegTestConstants() {
+        btcParams = NetworkParameters.fromID(NetworkParameters.ID_REGTEST);
+
+        // TODO: Replace with actual address
+        unionBridgeAddress = new RskAddress("5988645d30cd01e4b3bc2c02cb3909dec991ae31");
+
+        // TODO: Replace with actual initial value and increments multiplier
+        initialLockingCap = Coin.COIN.multiply(500L); // 500 BTC
+        lockingCapIncrementsMultiplier = 4;
+
+        // TODO: Replace with actual authorizers
+        List<ECKey> authorizers = Collections.singletonList(
+            // seed: unionBridgeAuthorizer
+            ECKey.fromPublicOnly(Hex.decode(
+                "041fb6d4b421bb14d95b6fb79823d45b777f0e8fd07fe18d0940c0c113d9667911e354d4e8c8073f198d7ae5867d86e3068caff4f6bd7bffccc6757a3d7ee8024a"))
+        );
+        changeAuthorizer = new AddressBasedAuthorizer(
+            authorizers,
+            AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
+        );
+    }
+
+    public static UnionBridgeConstants getInstance() {
+        return instance;
+    }
+}
diff --git a/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeTestNetConstants.java b/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeTestNetConstants.java
new file mode 100644
index 00000000000..fa164485893
--- /dev/null
+++ b/rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeTestNetConstants.java
@@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeTestNetConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeTestNetConstants();
+
+    // Private constructor to prevent instantiation
+    private UnionBridgeTestNetConstants() {
+        btcParams = NetworkParameters.fromID(NetworkParameters.ID_TESTNET);
+
+        // TODO: Replace with actual address
+        unionBridgeAddress = new RskAddress("5988645d30cd01e4b3bc2c02cb3909dec991ae31");
+
+        // TODO: Replace with actual initial value and increments multiplier
+        initialLockingCap = Coin.COIN.multiply(400L); // 400 BTC
+        lockingCapIncrementsMultiplier = 3;
+
+        // TODO: Replace with actual authorizers
+        List<ECKey> authorizers = Collections.singletonList(
+            // seed: unionBridgeAuthorizer
+            ECKey.fromPublicOnly(Hex.decode(
+                "041fb6d4b421bb14d95b6fb79823d45b777f0e8fd07fe18d0940c0c113d9667911e354d4e8c8073f198d7ae5867d86e3068caff4f6bd7bffccc6757a3d7ee8024a"))
+        );
+        changeAuthorizer = new AddressBasedAuthorizer(
+            authorizers,
+            AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
+        );
+    }
+
+    public static UnionBridgeConstants getInstance() {
+        return instance;
+    }
+}
diff --git a/rskj-core/src/test/java/co/rsk/peg/union/constants/UnionBridgeConstantsTest.java b/rskj-core/src/test/java/co/rsk/peg/union/constants/UnionBridgeConstantsTest.java
new file mode 100644
index 00000000000..a133fc255fe
--- /dev/null
+++ b/rskj-core/src/test/java/co/rsk/peg/union/constants/UnionBridgeConstantsTest.java
@@ -0,0 +1,123 @@
+package co.rsk.peg.union.constants;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.samePropertyValuesAs;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.stream.Stream;
+
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class UnionBridgeConstantsTest {
+
+    private static Stream<Arguments> unionBridgeChangeAuthorizerProvider() {
+        AddressBasedAuthorizer expectedUnionBridgeChangeAuthorizer = new AddressBasedAuthorizer(
+            Collections.singletonList(ECKey.fromPublicOnly(Hex.decode(
+                "041fb6d4b421bb14d95b6fb79823d45b777f0e8fd07fe18d0940c0c113d9667911e354d4e8c8073f198d7ae5867d86e3068caff4f6bd7bffccc6757a3d7ee8024a"
+            ))),
+            AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
+        );
+
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), expectedUnionBridgeChangeAuthorizer),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), expectedUnionBridgeChangeAuthorizer),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), expectedUnionBridgeChangeAuthorizer)
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("unionBridgeChangeAuthorizerProvider")
+    void getChangeAuthorizer_ok(UnionBridgeConstants unionBridgeConstants,
+                                            AddressBasedAuthorizer expectedUnionBridgeChangeAuthorizer) {
+        // Act
+        AddressBasedAuthorizer actualUnionBridgeChangeAuthorizer = unionBridgeConstants.getChangeAuthorizer();
+
+        // Assert
+        assertThat(actualUnionBridgeChangeAuthorizer, samePropertyValuesAs(expectedUnionBridgeChangeAuthorizer));
+    }
+
+    public static Stream<Arguments> btcParamsProvider() {
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), NetworkParameters.fromID(NetworkParameters.ID_MAINNET)),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), NetworkParameters.fromID(NetworkParameters.ID_TESTNET)),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), NetworkParameters.fromID(NetworkParameters.ID_REGTEST))
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("btcParamsProvider")
+    void getBtcParams_ok(UnionBridgeConstants unionBridgeConstants,
+        NetworkParameters expectedNetworkParameters) {
+        // Act
+        NetworkParameters actualNetworkParameters = unionBridgeConstants.getBtcParams();
+
+        // Assert
+        Assertions.assertEquals(expectedNetworkParameters, actualNetworkParameters);
+    }
+
+    public static Stream<Arguments> unionBridgeAddressProvider() {
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), "5988645d30cd01e4b3bc2c02cb3909dec991ae31"),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), "5988645d30cd01e4b3bc2c02cb3909dec991ae31"),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), "5988645d30cd01e4b3bc2c02cb3909dec991ae31")
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("unionBridgeAddressProvider")
+    void getAddress_ok(UnionBridgeConstants unionBridgeConstants,
+        RskAddress expectedUnionBridgeAddress) {
+        // Act
+        RskAddress actualUnionBridgeAddress = unionBridgeConstants.getAddress();
+
+        // Assert
+        Assertions.assertEquals(expectedUnionBridgeAddress, actualUnionBridgeAddress);
+    }
+
+    public static Stream<Arguments> unionLockingCapInitialValueProvider() {
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), Coin.COIN.multiply(300L)),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), Coin.COIN.multiply(400L)),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), Coin.COIN.multiply(500L))
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("unionLockingCapInitialValueProvider")
+    void getInitialLockingCap_ok(UnionBridgeConstants unionBridgeConstants,
+        Coin expectedInitialLockingCap) {
+        // Act
+        Coin actualInitialLockingCap = unionBridgeConstants.getInitialLockingCap();
+
+        // Assert
+        Assertions.assertEquals(expectedInitialLockingCap, actualInitialLockingCap);
+    }
+
+    private static Stream<Arguments> unionLockingCapIncrementsMultiplierProvider() {
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), 2),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), 3),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), 4)
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("unionLockingCapIncrementsMultiplierProvider")
+    void getLockingCapIncrementsMultiplier_ok(UnionBridgeConstants unionBridgeConstants,
+        int expectedLockingCapIncrementsMultiplier) {
+        // Act
+        int actualLockingCapIncrementsMultiplier = unionBridgeConstants.getLockingCapIncrementsMultiplier();
+
+        // Assert
+        Assertions.assertEquals(expectedLockingCapIncrementsMultiplier, actualLockingCapIncrementsMultiplier);
+    }
+}


Reviews:
user: login: jeremy-then
body: LGTM.
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-11T17:41:23Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:33:27Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:33:37Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:33:48Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:33:58Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:36:42Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:37:05Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:38:07Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:38:21Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:38:54Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:39:35Z
user: login: julia-zack
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T15:40:41Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:26:23Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:26:27Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:26:31Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:26:40Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:26:55Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:26:58Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:27:02Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:27:07Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:27:11Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:27:16Z
user: login: nathanieliov
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T20:27:21Z

Review comments:
diff_hunk: @@ -0,0 +1,34 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+
+public class UnionBridgeConstants {
+    protected NetworkParameters btcParams;
+    protected RskAddress unionBridgeAddress;
+    protected Coin initialLockingCap;
+    protected int lockingCapIncrementsMultiplier;
+    protected AddressBasedAuthorizer unionBridgeChangeAuthorizer;
+
+    public NetworkParameters getBtcParams() {
+        return btcParams;
+    }
+
+    public RskAddress getUnionBridgeAddress() {
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java
user: login: julia-zack
body: ```suggestion
    public RskAddress getAddress() {
```
wdyt?
created_at: 2025-04-14T15:33:27Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,34 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+
+public class UnionBridgeConstants {
+    protected NetworkParameters btcParams;
+    protected RskAddress unionBridgeAddress;
+    protected Coin initialLockingCap;
+    protected int lockingCapIncrementsMultiplier;
+    protected AddressBasedAuthorizer unionBridgeChangeAuthorizer;
+
+    public NetworkParameters getBtcParams() {
+        return btcParams;
+    }
+
+    public RskAddress getUnionBridgeAddress() {
+        return unionBridgeAddress;
+    }
+
+    public Coin getInitialLockingCap() {
+        return initialLockingCap;
+    }
+
+    public int getLockingCapIncrementsMultiplier() {
+        return lockingCapIncrementsMultiplier;
+    }
+
+    public AddressBasedAuthorizer getUnionBridgeChangeAuthorizer() {
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java
user: login: julia-zack
body: ```suggestion
    public AddressBasedAuthorizer getChangeAuthorizer() {
```
created_at: 2025-04-14T15:33:37Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,34 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+
+public class UnionBridgeConstants {
+    protected NetworkParameters btcParams;
+    protected RskAddress unionBridgeAddress;
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java
user: login: julia-zack
body: ```suggestion
    protected RskAddress address;
```

i think the `unionBridge` is implied 
created_at: 2025-04-14T15:33:48Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,34 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+
+public class UnionBridgeConstants {
+    protected NetworkParameters btcParams;
+    protected RskAddress unionBridgeAddress;
+    protected Coin initialLockingCap;
+    protected int lockingCapIncrementsMultiplier;
+    protected AddressBasedAuthorizer unionBridgeChangeAuthorizer;
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java
user: login: julia-zack
body: ```suggestion
    protected AddressBasedAuthorizer changeAuthorizer;
```
created_at: 2025-04-14T15:33:58Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeMainNetConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeMainNetConstants();
+
+    private UnionBridgeMainNetConstants() {
+        // Private constructor to prevent instantiation
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeMainNetConstants.java
user: login: julia-zack
body: ```suggestion
     // Private constructor to prevent instantiation
    private UnionBridgeMainNetConstants() {
```
nit :)
created_at: 2025-04-14T15:36:42Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeRegTestConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeRegTestConstants();
+
+    private UnionBridgeRegTestConstants() {
+        // Private constructor to prevent instantiation
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeRegTestConstants.java
user: login: julia-zack
body: same as [here](https://github.com/rsksmart/rskj/pull/3068/files#r2042414892)
created_at: 2025-04-14T15:37:05Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeTestNetConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeTestNetConstants();
+
+    private UnionBridgeTestNetConstants() {
+        // Private constructor to prevent instantiation
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeTestNetConstants.java
user: login: julia-zack
body: same as [here](https://github.com/rsksmart/rskj/pull/3068/files#r2042414892)
created_at: 2025-04-14T15:38:06Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeTestNetConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeTestNetConstants();
+
+    private UnionBridgeTestNetConstants() {
+        // Private constructor to prevent instantiation
+        btcParams = NetworkParameters.fromID(NetworkParameters.ID_TESTNET);
+
+        // TODO: Replace with actual address
+        unionBridgeAddress = new RskAddress("5988645d30cd01e4b3bc2c02cb3909dec991ae31");
+
+        // TODO: Replace with actual initial value and increments multiplier
+        initialLockingCap = Coin.COIN.multiply(400L); // 500 BTC
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeTestNetConstants.java
user: login: julia-zack
body: ```suggestion
        initialLockingCap = Coin.COIN.multiply(400L); // 400 BTC
```
created_at: 2025-04-14T15:38:21Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,126 @@
+package co.rsk.peg.union.constants;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.samePropertyValuesAs;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.stream.Stream;
+
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class UnionBridgeConstantsTest {
+
+    public static Stream<Arguments> unionBridgeChangeAuthorizerProvider() {
path: rskj-core/src/test/java/co/rsk/peg/union/constants/UnionBridgeConstantsTest.java
user: login: julia-zack
body: ```suggestion
    private static Stream<Arguments> unionBridgeChangeAuthorizerProvider() {
```
?
created_at: 2025-04-14T15:38:54Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,126 @@
+package co.rsk.peg.union.constants;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.samePropertyValuesAs;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.stream.Stream;
+
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class UnionBridgeConstantsTest {
+
+    public static Stream<Arguments> unionBridgeChangeAuthorizerProvider() {
+        AddressBasedAuthorizer expectedUnionBridgeChangeAuthorizer = new AddressBasedAuthorizer(
+            Collections.singletonList(ECKey.fromPublicOnly(Hex.decode(
+                "041fb6d4b421bb14d95b6fb79823d45b777f0e8fd07fe18d0940c0c113d9667911e354d4e8c8073f198d7ae5867d86e3068caff4f6bd7bffccc6757a3d7ee8024a"
+            ))),
+            AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
+        );
+
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), expectedUnionBridgeChangeAuthorizer),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), expectedUnionBridgeChangeAuthorizer),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), expectedUnionBridgeChangeAuthorizer)
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("unionBridgeChangeAuthorizerProvider")
+    void getUnionBridgeChangeAuthorizer_ok(UnionBridgeConstants unionBridgeConstants,
+                                            AddressBasedAuthorizer expectedUnionBridgeChangeAuthorizer) {
+        // Act
+        AddressBasedAuthorizer actualUnionBridgeChangeAuthorizer = unionBridgeConstants.getUnionBridgeChangeAuthorizer();
+
+        // Assert
+        assertThat(actualUnionBridgeChangeAuthorizer, samePropertyValuesAs(expectedUnionBridgeChangeAuthorizer));
+    }
+
+    public static Stream<Arguments> btcParamsProvider() {
path: rskj-core/src/test/java/co/rsk/peg/union/constants/UnionBridgeConstantsTest.java
user: login: julia-zack
body: ```suggestion
    private static Stream<Arguments> btcParamsProvider() {
```
?
created_at: 2025-04-14T15:39:35Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,126 @@
+package co.rsk.peg.union.constants;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.samePropertyValuesAs;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.stream.Stream;
+
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class UnionBridgeConstantsTest {
+
+    public static Stream<Arguments> unionBridgeChangeAuthorizerProvider() {
+        AddressBasedAuthorizer expectedUnionBridgeChangeAuthorizer = new AddressBasedAuthorizer(
+            Collections.singletonList(ECKey.fromPublicOnly(Hex.decode(
+                "041fb6d4b421bb14d95b6fb79823d45b777f0e8fd07fe18d0940c0c113d9667911e354d4e8c8073f198d7ae5867d86e3068caff4f6bd7bffccc6757a3d7ee8024a"
+            ))),
+            AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
+        );
+
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), expectedUnionBridgeChangeAuthorizer),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), expectedUnionBridgeChangeAuthorizer),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), expectedUnionBridgeChangeAuthorizer)
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("unionBridgeChangeAuthorizerProvider")
+    void getUnionBridgeChangeAuthorizer_ok(UnionBridgeConstants unionBridgeConstants,
+                                            AddressBasedAuthorizer expectedUnionBridgeChangeAuthorizer) {
+        // Act
+        AddressBasedAuthorizer actualUnionBridgeChangeAuthorizer = unionBridgeConstants.getUnionBridgeChangeAuthorizer();
+
+        // Assert
+        assertThat(actualUnionBridgeChangeAuthorizer, samePropertyValuesAs(expectedUnionBridgeChangeAuthorizer));
+    }
+
+    public static Stream<Arguments> btcParamsProvider() {
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), NetworkParameters.ID_MAINNET),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), NetworkParameters.ID_TESTNET),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), NetworkParameters.ID_REGTEST)
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("btcParamsProvider")
+    void getBtcParams_ok(UnionBridgeConstants unionBridgeConstants,
+        String expectedNetworkParametersInString) {
+        // Arrange
+        NetworkParameters expectedNetworkParameters = NetworkParameters.fromID(expectedNetworkParametersInString);
path: rskj-core/src/test/java/co/rsk/peg/union/constants/UnionBridgeConstantsTest.java
user: login: julia-zack
body: why not receiving directly the network params ?
created_at: 2025-04-14T15:40:41Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,126 @@
+package co.rsk.peg.union.constants;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.samePropertyValuesAs;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.stream.Stream;
+
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class UnionBridgeConstantsTest {
+
+    public static Stream<Arguments> unionBridgeChangeAuthorizerProvider() {
+        AddressBasedAuthorizer expectedUnionBridgeChangeAuthorizer = new AddressBasedAuthorizer(
+            Collections.singletonList(ECKey.fromPublicOnly(Hex.decode(
+                "041fb6d4b421bb14d95b6fb79823d45b777f0e8fd07fe18d0940c0c113d9667911e354d4e8c8073f198d7ae5867d86e3068caff4f6bd7bffccc6757a3d7ee8024a"
+            ))),
+            AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
+        );
+
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), expectedUnionBridgeChangeAuthorizer),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), expectedUnionBridgeChangeAuthorizer),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), expectedUnionBridgeChangeAuthorizer)
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("unionBridgeChangeAuthorizerProvider")
+    void getUnionBridgeChangeAuthorizer_ok(UnionBridgeConstants unionBridgeConstants,
+                                            AddressBasedAuthorizer expectedUnionBridgeChangeAuthorizer) {
+        // Act
+        AddressBasedAuthorizer actualUnionBridgeChangeAuthorizer = unionBridgeConstants.getUnionBridgeChangeAuthorizer();
+
+        // Assert
+        assertThat(actualUnionBridgeChangeAuthorizer, samePropertyValuesAs(expectedUnionBridgeChangeAuthorizer));
+    }
+
+    public static Stream<Arguments> btcParamsProvider() {
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), NetworkParameters.ID_MAINNET),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), NetworkParameters.ID_TESTNET),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), NetworkParameters.ID_REGTEST)
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("btcParamsProvider")
+    void getBtcParams_ok(UnionBridgeConstants unionBridgeConstants,
+        String expectedNetworkParametersInString) {
+        // Arrange
+        NetworkParameters expectedNetworkParameters = NetworkParameters.fromID(expectedNetworkParametersInString);
path: rskj-core/src/test/java/co/rsk/peg/union/constants/UnionBridgeConstantsTest.java
user: login: nathanieliov
body: Done
created_at: 2025-04-14T20:26:23Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,126 @@
+package co.rsk.peg.union.constants;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.samePropertyValuesAs;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.stream.Stream;
+
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class UnionBridgeConstantsTest {
+
+    public static Stream<Arguments> unionBridgeChangeAuthorizerProvider() {
+        AddressBasedAuthorizer expectedUnionBridgeChangeAuthorizer = new AddressBasedAuthorizer(
+            Collections.singletonList(ECKey.fromPublicOnly(Hex.decode(
+                "041fb6d4b421bb14d95b6fb79823d45b777f0e8fd07fe18d0940c0c113d9667911e354d4e8c8073f198d7ae5867d86e3068caff4f6bd7bffccc6757a3d7ee8024a"
+            ))),
+            AddressBasedAuthorizer.MinimumRequiredCalculation.ONE
+        );
+
+        return Stream.of(
+            Arguments.of(UnionBridgeMainNetConstants.getInstance(), expectedUnionBridgeChangeAuthorizer),
+            Arguments.of(UnionBridgeTestNetConstants.getInstance(), expectedUnionBridgeChangeAuthorizer),
+            Arguments.of(UnionBridgeRegTestConstants.getInstance(), expectedUnionBridgeChangeAuthorizer)
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("unionBridgeChangeAuthorizerProvider")
+    void getUnionBridgeChangeAuthorizer_ok(UnionBridgeConstants unionBridgeConstants,
+                                            AddressBasedAuthorizer expectedUnionBridgeChangeAuthorizer) {
+        // Act
+        AddressBasedAuthorizer actualUnionBridgeChangeAuthorizer = unionBridgeConstants.getUnionBridgeChangeAuthorizer();
+
+        // Assert
+        assertThat(actualUnionBridgeChangeAuthorizer, samePropertyValuesAs(expectedUnionBridgeChangeAuthorizer));
+    }
+
+    public static Stream<Arguments> btcParamsProvider() {
path: rskj-core/src/test/java/co/rsk/peg/union/constants/UnionBridgeConstantsTest.java
user: login: nathanieliov
body: Done 
created_at: 2025-04-14T20:26:27Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,126 @@
+package co.rsk.peg.union.constants;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.samePropertyValuesAs;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.stream.Stream;
+
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class UnionBridgeConstantsTest {
+
+    public static Stream<Arguments> unionBridgeChangeAuthorizerProvider() {
path: rskj-core/src/test/java/co/rsk/peg/union/constants/UnionBridgeConstantsTest.java
user: login: nathanieliov
body: Done
created_at: 2025-04-14T20:26:31Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeTestNetConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeTestNetConstants();
+
+    private UnionBridgeTestNetConstants() {
+        // Private constructor to prevent instantiation
+        btcParams = NetworkParameters.fromID(NetworkParameters.ID_TESTNET);
+
+        // TODO: Replace with actual address
+        unionBridgeAddress = new RskAddress("5988645d30cd01e4b3bc2c02cb3909dec991ae31");
+
+        // TODO: Replace with actual initial value and increments multiplier
+        initialLockingCap = Coin.COIN.multiply(400L); // 500 BTC
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeTestNetConstants.java
user: login: nathanieliov
body: Updated. Thanks
created_at: 2025-04-14T20:26:40Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeTestNetConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeTestNetConstants();
+
+    private UnionBridgeTestNetConstants() {
+        // Private constructor to prevent instantiation
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeTestNetConstants.java
user: login: nathanieliov
body: Done
created_at: 2025-04-14T20:26:55Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeRegTestConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeRegTestConstants();
+
+    private UnionBridgeRegTestConstants() {
+        // Private constructor to prevent instantiation
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeRegTestConstants.java
user: login: nathanieliov
body: Done
created_at: 2025-04-14T20:26:58Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,42 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+import java.util.Collections;
+import java.util.List;
+import org.bouncycastle.util.encoders.Hex;
+import org.ethereum.crypto.ECKey;
+
+public class UnionBridgeMainNetConstants extends UnionBridgeConstants {
+
+    private static final UnionBridgeConstants instance = new UnionBridgeMainNetConstants();
+
+    private UnionBridgeMainNetConstants() {
+        // Private constructor to prevent instantiation
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeMainNetConstants.java
user: login: nathanieliov
body: Done
created_at: 2025-04-14T20:27:02Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,34 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+
+public class UnionBridgeConstants {
+    protected NetworkParameters btcParams;
+    protected RskAddress unionBridgeAddress;
+    protected Coin initialLockingCap;
+    protected int lockingCapIncrementsMultiplier;
+    protected AddressBasedAuthorizer unionBridgeChangeAuthorizer;
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java
user: login: nathanieliov
body: Renamed
created_at: 2025-04-14T20:27:07Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,34 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+
+public class UnionBridgeConstants {
+    protected NetworkParameters btcParams;
+    protected RskAddress unionBridgeAddress;
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java
user: login: nathanieliov
body: Renamed
created_at: 2025-04-14T20:27:11Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,34 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+
+public class UnionBridgeConstants {
+    protected NetworkParameters btcParams;
+    protected RskAddress unionBridgeAddress;
+    protected Coin initialLockingCap;
+    protected int lockingCapIncrementsMultiplier;
+    protected AddressBasedAuthorizer unionBridgeChangeAuthorizer;
+
+    public NetworkParameters getBtcParams() {
+        return btcParams;
+    }
+
+    public RskAddress getUnionBridgeAddress() {
+        return unionBridgeAddress;
+    }
+
+    public Coin getInitialLockingCap() {
+        return initialLockingCap;
+    }
+
+    public int getLockingCapIncrementsMultiplier() {
+        return lockingCapIncrementsMultiplier;
+    }
+
+    public AddressBasedAuthorizer getUnionBridgeChangeAuthorizer() {
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java
user: login: nathanieliov
body: Renamed
created_at: 2025-04-14T20:27:16Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,34 @@
+package co.rsk.peg.union.constants;
+
+import co.rsk.bitcoinj.core.Coin;
+import co.rsk.bitcoinj.core.NetworkParameters;
+import co.rsk.core.RskAddress;
+import co.rsk.peg.vote.AddressBasedAuthorizer;
+
+public class UnionBridgeConstants {
+    protected NetworkParameters btcParams;
+    protected RskAddress unionBridgeAddress;
+    protected Coin initialLockingCap;
+    protected int lockingCapIncrementsMultiplier;
+    protected AddressBasedAuthorizer unionBridgeChangeAuthorizer;
+
+    public NetworkParameters getBtcParams() {
+        return btcParams;
+    }
+
+    public RskAddress getUnionBridgeAddress() {
path: rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeConstants.java
user: login: nathanieliov
body: Renamed
created_at: 2025-04-14T20:27:21Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-08T16:56:47Z
body: <h1>Dependency Review</h1>
✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.<h2>OpenSSF Scorecard</h2>
<table><tr><th>Package</th><th>Version</th><th>Score</th><th>Details</th></tr>
</table><h2>Scanned Files</h2>
<ul>


<!-- dependency-review-pr-comment-marker -->
author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-04-14T22:44:55Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=rskj&pullRequest=3068) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [9 New issues](https://sonarcloud.io/project/issues?id=rskj&pullRequest=3068&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=rskj&pullRequest=3068&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=rskj&pullRequest=3068&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [100.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=rskj&pullRequest=3068&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=rskj&pullRequest=3068&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=rskj&pullRequest=3068)


author_association: NONE