Skip to content

Commit fa4da8c

Browse files
marcos-iovjulia-zacknathanieliov
authored
Set Union-PowPeg initial values (#3381)
* Set union initial lockin cap to 1 RBTC * Set testnet authorizer to change union bridge contract address * Set transfer permissions and initial locking cap authorizers * Refactor Union tests in BridgeTest to use mainnet and testnet authorizers --------- Co-authored-by: julia-zack <julia.zack@iovlabs.org> Co-authored-by: nathanieliov <nathaniel.calderon@iovlabs.org> Co-authored-by: julia zack <83707069+julia-zack@users.noreply.github.com>
1 parent d188dc1 commit fa4da8c

File tree

7 files changed

+121
-62
lines changed

7 files changed

+121
-62
lines changed

rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeMainNetConstants.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@ private UnionBridgeMainNetConstants() {
1818
// TODO: Replace with actual address
1919
unionBridgeAddress = ZERO_ADDRESS;
2020

21-
// TODO: Replace with actual initial locking cap value and increments multiplier
2221
BigInteger oneRbtc = BigInteger.TEN.pow(18); // 1 RBTC = 1000000000000000000 wei
23-
initialLockingCap = new Coin(oneRbtc).multiply(BigInteger.valueOf(200));
22+
initialLockingCap = new Coin(oneRbtc);
2423
lockingCapIncrementsMultiplier = 2;
2524

2625
changeUnionBridgeContractAddressAuthorizer = AddressBasedAuthorizerFactory.buildSingleAuthorizer(ZERO_ADDRESS);

rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeRegTestConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ private UnionBridgeRegTestConstants() {
1919
unionBridgeAddress = ZERO_ADDRESS;
2020

2121
BigInteger oneRbtc = BigInteger.TEN.pow(18); // 1 RBTC = 1000000000000000000 wei
22-
initialLockingCap = new Coin(oneRbtc).multiply(BigInteger.valueOf(200));
22+
initialLockingCap = new Coin(oneRbtc);
2323
lockingCapIncrementsMultiplier = 2;
2424

2525
// seed: changeUnionBridgeContractAddressAuthorizer

rskj-core/src/main/java/co/rsk/peg/union/constants/UnionBridgeTestNetConstants.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,19 @@ private UnionBridgeTestNetConstants() {
1919
unionBridgeAddress = ZERO_ADDRESS;
2020

2121
BigInteger oneRbtc = BigInteger.TEN.pow(18); // 1 RBTC = 1000000000000000000 wei
22-
initialLockingCap = new Coin(oneRbtc).multiply(BigInteger.valueOf(200));
22+
initialLockingCap = new Coin(oneRbtc);
2323
lockingCapIncrementsMultiplier = 2;
2424

2525
changeUnionBridgeContractAddressAuthorizer = AddressBasedAuthorizerFactory.buildSingleAuthorizer(
26-
new RskAddress("c38c7f0bcdf679dd360dee652d83be7d5b386956")
26+
new RskAddress("54fdb399cf235c9b0d464ab4055af9251883bbfe")
2727
);
2828

29-
// TODO: Replace with actual authorizers
3029
changeLockingCapAuthorizer = AddressBasedAuthorizerFactory.buildSingleAuthorizer(
31-
ZERO_ADDRESS
30+
new RskAddress("1a8109af0f019ED3045Fbcdf45E5e90d6b6AAfaF")
3231
);
3332

34-
// TODO: Replace with actual authorizers
3533
changeTransferPermissionsAuthorizer = AddressBasedAuthorizerFactory.buildSingleAuthorizer(
36-
ZERO_ADDRESS
34+
new RskAddress("8db1F83E8119E4Dce5bC708ec2f4390FFd910B19")
3735
);
3836
}
3937

rskj-core/src/test/java/co/rsk/peg/BridgeTest.java

Lines changed: 94 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package co.rsk.peg;
22

3+
import static co.rsk.core.RskAddress.ZERO_ADDRESS;
34
import static co.rsk.peg.PegTestUtils.createHash3;
45
import static org.ethereum.vm.PrecompiledContracts.BRIDGE_ADDR;
56
import static org.junit.jupiter.api.Assertions.*;
@@ -3414,10 +3415,13 @@ class UnionBridgeTest {
34143415

34153416
private static final RskAddress unionBridgeAddress = unionBridgeMainNetConstants.getAddress();
34163417

3417-
private static final RskAddress changeTestnetUnionAddressAuthorizer = new RskAddress("c38c7f0bcdf679dd360dee652d83be7d5b386956");
3418+
private static final RskAddress changeTestnetUnionAddressAuthorizer = new RskAddress("54fdb399cf235c9b0d464ab4055af9251883bbfe");
34183419

3419-
private static final RskAddress increaseLockingCapAuthorizer = RskAddress.ZERO_ADDRESS;
3420-
private static final RskAddress setTransferPermissionsAuthorizer = RskAddress.ZERO_ADDRESS;
3420+
private static final RskAddress increaseLockingCapAuthorizerMainnet = ZERO_ADDRESS;
3421+
private static final RskAddress setTransferPermissionsAuthorizerMainnet = ZERO_ADDRESS;
3422+
3423+
private static final RskAddress increaseLockingCapAuthorizerTestnet = new RskAddress("1a8109af0f019ED3045Fbcdf45E5e90d6b6AAfaF");
3424+
private static final RskAddress setTransferPermissionsAuthorizerTestnet = new RskAddress("8db1F83E8119E4Dce5bC708ec2f4390FFd910B19");
34213425

34223426
private static final RskAddress unauthorizedCaller = new RskAddress("0000000000000000000000000000000000000001");
34233427
private static final byte[] superEvent = new byte []{(byte) 0x123456};
@@ -3691,6 +3695,13 @@ private static Stream<Arguments> constantsProvider() {
36913695
);
36923696
}
36933697

3698+
private static Stream<Arguments> testnetAndMainnetConstantsProvider() {
3699+
return Stream.of(
3700+
Arguments.of(Constants.testnet2(ActivationConfigsForTest.all())),
3701+
Arguments.of(Constants.mainnet())
3702+
);
3703+
}
3704+
36943705
@ParameterizedTest()
36953706
@MethodSource("constantsProvider")
36963707
void getUnionBridgeContractAddress_afterRSKIP502_shouldReturnAddress(Constants constants) throws VMException {
@@ -3740,23 +3751,30 @@ void getUnionBridgeLockingCap_afterRSKIP502_shouldReturnLockingCap(Constants con
37403751
assertEquals(expectedLockingCap, actualLockingCap);
37413752
}
37423753

3743-
@Test
3744-
void increaseUnionBridgeLockingCap_beforeRSKIP502_shouldFail() {
3754+
@ParameterizedTest()
3755+
@MethodSource("testnetAndMainnetConstantsProvider")
3756+
void increaseUnionBridgeLockingCap_beforeRSKIP502_shouldFail(Constants constants) {
37453757
bridge = bridgeBuilder
37463758
.activationConfig(ActivationConfigsForTest.lovell700())
3759+
.constants(constants)
37473760
.build();
3748-
when(rskTx.getSender(any())).thenReturn(increaseLockingCapAuthorizer);
3761+
setupIncreaseLockingCapAuthorizer(constants);
37493762

37503763
byte[] data = Bridge.INCREASE_UNION_BRIDGE_LOCKING_CAP.encode(newLockingCap.asBigInteger());
37513764

37523765
assertThrows(VMException.class, () -> bridge.execute(data));
37533766
}
37543767

3755-
@Test
3756-
void increaseUnionBridgeLockingCap_afterRSKIP502_whenMeetRequirements_shouldReturnSuccess()
3768+
@ParameterizedTest()
3769+
@MethodSource("testnetAndMainnetConstantsProvider")
3770+
void increaseUnionBridgeLockingCap_afterRSKIP502_whenMeetRequirements_shouldReturnSuccess(Constants constants)
37573771
throws VMException {
37583772
// Arrange
3759-
when(rskTx.getSender(any())).thenReturn(increaseLockingCapAuthorizer);
3773+
bridge = bridgeBuilder
3774+
.constants(constants)
3775+
.build();
3776+
setupIncreaseLockingCapAuthorizer(constants);
3777+
37603778
UnionResponseCode expectedResponseCode = UnionResponseCode.SUCCESS;
37613779
when(bridgeSupport.increaseUnionBridgeLockingCap(any(), any())).thenReturn(expectedResponseCode);
37623780

@@ -3772,11 +3790,22 @@ void increaseUnionBridgeLockingCap_afterRSKIP502_whenMeetRequirements_shouldRetu
37723790
assertEquals(UnionResponseCode.SUCCESS.getCode(), actualUnionResponseCode);
37733791
}
37743792

3775-
@Test
3776-
void increaseUnionBridgeLockingCap_afterRSKIP502_whenNewLockingCapSurpassingMaxIncrement_shouldReturnInvalidLockingCapCode()
3793+
private void setupIncreaseLockingCapAuthorizer(Constants constants) {
3794+
boolean isMainnet = constants.getChainId() == Constants.MAINNET_CHAIN_ID;
3795+
RskAddress increaseLockingCapAuthorizer = isMainnet ? increaseLockingCapAuthorizerMainnet : increaseLockingCapAuthorizerTestnet;
3796+
when(rskTx.getSender(any())).thenReturn(increaseLockingCapAuthorizer);
3797+
}
3798+
3799+
@ParameterizedTest()
3800+
@MethodSource("testnetAndMainnetConstantsProvider")
3801+
void increaseUnionBridgeLockingCap_afterRSKIP502_whenNewLockingCapSurpassingMaxIncrement_shouldReturnInvalidLockingCapCode(Constants constants)
37773802
throws VMException {
37783803
// Arrange
3779-
when(rskTx.getSender(any())).thenReturn(increaseLockingCapAuthorizer);
3804+
bridge = bridgeBuilder
3805+
.constants(constants)
3806+
.build();
3807+
setupIncreaseLockingCapAuthorizer(constants);
3808+
37803809
UnionResponseCode expectedResponseCode = UnionResponseCode.INVALID_VALUE;
37813810
when(bridgeSupport.increaseUnionBridgeLockingCap(any(), any())).thenReturn(
37823811
expectedResponseCode);
@@ -3794,11 +3823,16 @@ void increaseUnionBridgeLockingCap_afterRSKIP502_whenNewLockingCapSurpassingMaxI
37943823
assertEquals(expectedResponseCode.getCode(), actualUnionResponseCode);
37953824
}
37963825

3797-
@Test
3798-
void increaseUnionBridgeLockingCap_afterRSKIP502_whenSendingZero_shouldReturnInvalidLockingCapCode()
3826+
@ParameterizedTest()
3827+
@MethodSource("testnetAndMainnetConstantsProvider")
3828+
void increaseUnionBridgeLockingCap_afterRSKIP502_whenSendingZero_shouldReturnInvalidLockingCapCode(Constants constants)
37993829
throws VMException {
38003830
// Arrange
3801-
when(rskTx.getSender(any())).thenReturn(increaseLockingCapAuthorizer);
3831+
bridge = bridgeBuilder
3832+
.constants(constants)
3833+
.build();
3834+
setupIncreaseLockingCapAuthorizer(constants);
3835+
38023836
UnionResponseCode expectedResponseCode = UnionResponseCode.INVALID_VALUE;
38033837
when(bridgeSupport.increaseUnionBridgeLockingCap(any(), any())).thenReturn(
38043838
expectedResponseCode);
@@ -3831,11 +3865,16 @@ void increaseUnionBridgeLockingCap_afterRSKIP502_whenUnauthorized_shouldThrowVmE
38313865
verify(unionBridgeSupport, never()).increaseLockingCap(any(), any());
38323866
}
38333867

3834-
@Test
3835-
void increaseUnionBridgeLockingCap_afterRSKIP502_emptyArgument_shouldFail() throws VMException {
3868+
@ParameterizedTest()
3869+
@MethodSource("testnetAndMainnetConstantsProvider")
3870+
void increaseUnionBridgeLockingCap_afterRSKIP502_emptyArgument_shouldFail(Constants constants) throws VMException {
38363871
// Arrange
3872+
bridge = bridgeBuilder
3873+
.constants(constants)
3874+
.build();
3875+
setupIncreaseLockingCapAuthorizer(constants);
3876+
38373877
UnionResponseCode expectedResponseCode = UnionResponseCode.INVALID_VALUE;
3838-
when(rskTx.getSender(any())).thenReturn(increaseLockingCapAuthorizer);
38393878

38403879
// when no argument is passed, the default value assigned to the arg is a big integer of zero
38413880
when(bridgeSupport.increaseUnionBridgeLockingCap(any(), eq(co.rsk.core.Coin.ZERO))).thenReturn(expectedResponseCode);
@@ -4008,13 +4047,15 @@ void releaseUnionBridgeRbtc_afterRSKIP502_whenFail_shouldReturnErrorResponseCode
40084047
verify(unionBridgeSupport, times(1)).releaseUnionRbtc(rskTx);
40094048
verify(repository, times(1)).transfer(BRIDGE_ADDR, unionBridgeMainNetConstantsAddress, amountToRelease);
40104049
}
4011-
4012-
@Test
4013-
void setUnionBridgeTransferPermissions_beforeRSKIP502_shouldFail() {
4050+
4051+
@ParameterizedTest()
4052+
@MethodSource("testnetAndMainnetConstantsProvider")
4053+
void setUnionBridgeTransferPermissions_beforeRSKIP502_shouldFail(Constants constants) {
40144054
bridge = bridgeBuilder
40154055
.activationConfig(ActivationConfigsForTest.lovell700())
4056+
.constants(constants)
40164057
.build();
4017-
when(rskTx.getSender(any())).thenReturn(setTransferPermissionsAuthorizer);
4058+
setupTransferPermissionsAuthorizer(constants);
40184059

40194060
CallTransaction.Function function = BridgeMethods.SET_UNION_BRIDGE_TRANSFER_PERMISSIONS.getFunction();
40204061
byte[] data = function.encode(true, true);
@@ -4023,12 +4064,18 @@ void setUnionBridgeTransferPermissions_beforeRSKIP502_shouldFail() {
40234064
assertTrue(actualException.getMessage().contains(String.format("Invalid data given: %s",
40244065
Bytes.of(data))));
40254066
}
4026-
4027-
@Test
4028-
void setUnionBridgeTransferPermissions_whenValidArgs_shouldSetTransferPermissions() throws VMException {
4067+
4068+
@ParameterizedTest()
4069+
@MethodSource("testnetAndMainnetConstantsProvider")
4070+
void setUnionBridgeTransferPermissions_whenValidArgs_shouldSetTransferPermissions(Constants constants) throws VMException {
40294071
// Arrange
4072+
bridge = bridgeBuilder
4073+
.constants(constants)
4074+
.build();
4075+
setupTransferPermissionsAuthorizer(constants);
4076+
40304077
UnionResponseCode expectedResponseCode = UnionResponseCode.SUCCESS;
4031-
when(rskTx.getSender(any())).thenReturn(setTransferPermissionsAuthorizer);
4078+
40324079
when(unionBridgeSupport.setTransferPermissions(any(), anyBoolean(),
40334080
anyBoolean())).thenReturn(expectedResponseCode);
40344081
CallTransaction.Function function = BridgeMethods.SET_UNION_BRIDGE_TRANSFER_PERMISSIONS.getFunction();
@@ -4045,11 +4092,22 @@ void setUnionBridgeTransferPermissions_whenValidArgs_shouldSetTransferPermission
40454092
verify(unionBridgeSupport, times(1)).setTransferPermissions(any(Transaction.class), eq(true), eq(false));
40464093
}
40474094

4048-
@Test
4049-
void setUnionBridgeTransferPermissions_whenEmptyArguments_shouldAssumeArgAsFalseAndProcessed() throws VMException {
4095+
private void setupTransferPermissionsAuthorizer(Constants constants) {
4096+
boolean isMainnet = constants.getChainId() == Constants.MAINNET_CHAIN_ID;
4097+
RskAddress setTransferPermissionsAuthorizer = isMainnet ? setTransferPermissionsAuthorizerMainnet : setTransferPermissionsAuthorizerTestnet;
4098+
when(rskTx.getSender(any())).thenReturn(setTransferPermissionsAuthorizer);
4099+
}
4100+
4101+
@ParameterizedTest()
4102+
@MethodSource("testnetAndMainnetConstantsProvider")
4103+
void setUnionBridgeTransferPermissions_whenEmptyArguments_shouldAssumeArgAsFalseAndProcessed(Constants constants) throws VMException {
40504104
// Arrange
4105+
bridge = bridgeBuilder
4106+
.constants(constants)
4107+
.build();
4108+
setupTransferPermissionsAuthorizer(constants);
4109+
40514110
UnionResponseCode expectedResponseCode = UnionResponseCode.SUCCESS;
4052-
when(rskTx.getSender(any())).thenReturn(setTransferPermissionsAuthorizer);
40534111
// when no argument is passed, the default value assigned to the arg is false
40544112
when(unionBridgeSupport.setTransferPermissions(any(), eq(false), eq(false))).thenReturn(expectedResponseCode);
40554113

@@ -4067,9 +4125,14 @@ void setUnionBridgeTransferPermissions_whenEmptyArguments_shouldAssumeArgAsFalse
40674125
verify(unionBridgeSupport, times(1)).setTransferPermissions(any(Transaction.class), eq(false), eq(false));
40684126
}
40694127

4070-
@Test
4071-
void setUnionBridgeTransferPermissions_whenNotAuthorized_shouldReturnUnauthorizedCode() {
4128+
@ParameterizedTest()
4129+
@MethodSource("testnetAndMainnetConstantsProvider")
4130+
void setUnionBridgeTransferPermissions_whenNotAuthorized_shouldReturnUnauthorizedCode(Constants constants) {
40724131
// Arrange
4132+
bridge = bridgeBuilder
4133+
.constants(constants)
4134+
.build();
4135+
40734136
when(rskTx.getSender(any())).thenReturn(unauthorizedCaller);
40744137

40754138
CallTransaction.Function function = BridgeMethods.SET_UNION_BRIDGE_TRANSFER_PERMISSIONS.getFunction();

rskj-core/src/test/java/co/rsk/peg/union/UnionBridgeIT.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
4444
@TestInstance(Lifecycle.PER_CLASS)
4545
class UnionBridgeIT {
46-
4746
// Boolean constants for transfer permissions
4847
private static final boolean REQUEST_PERMISSION_ENABLED = true;
4948
private static final boolean REQUEST_PERMISSION_DISABLED = false;
@@ -77,15 +76,13 @@ class UnionBridgeIT {
7776
private static final int LOCKING_CAP_INCREMENTS_MULTIPLIER = unionBridgeMainNetConstants.getLockingCapIncrementsMultiplier();
7877
private static final Coin INITIAL_LOCKING_CAP = unionBridgeMainNetConstants.getInitialLockingCap();
7978
private static final Coin INITIAL_MAX_LOCKING_CAP_INCREMENT = INITIAL_LOCKING_CAP
80-
.multiply(BigInteger.valueOf(
81-
LOCKING_CAP_INCREMENTS_MULTIPLIER));
79+
.multiply(BigInteger.valueOf(LOCKING_CAP_INCREMENTS_MULTIPLIER));
8280

8381
private static final Coin NEW_LOCKING_CAP_1 = INITIAL_MAX_LOCKING_CAP_INCREMENT.subtract(Coin.valueOf(20));
8482

85-
private static final BigInteger ONE_ETH = BigInteger.TEN.pow(
86-
18); // 1 ETH = 1000000000000000000 wei
87-
private static final Coin AMOUNT_TO_REQUEST = new co.rsk.core.Coin(ONE_ETH.multiply(BigInteger.TWO));
88-
private static final Coin AMOUNT_TO_RELEASE = new co.rsk.core.Coin(ONE_ETH);
83+
private static final BigInteger ONE_ETH = BigInteger.TEN.pow(18); // 1 ETH = 1000000000000000000 wei
84+
private static final Coin AMOUNT_TO_REQUEST = new co.rsk.core.Coin(ONE_ETH.divide(BigInteger.TWO));
85+
private static final Coin AMOUNT_TO_RELEASE = new co.rsk.core.Coin(ONE_ETH).divide(BigInteger.valueOf(4));
8986

9087
private Repository repository;
9188
private StorageAccessor storageAccessor;
@@ -119,8 +116,7 @@ void lovellSetup() {
119116
logs
120117
);
121118

122-
UnionBridgeStorageProvider unionBridgeStorageProvider = new UnionBridgeStorageProviderImpl(
123-
storageAccessor);
119+
UnionBridgeStorageProvider unionBridgeStorageProvider = new UnionBridgeStorageProviderImpl(storageAccessor);
124120
UnionBridgeSupport unionBridgeSupport = unionBridgeSupportBuilder
125121
.withStorageProvider(unionBridgeStorageProvider)
126122
.withConstants(unionBridgeMainNetConstants)

rskj-core/src/test/java/co/rsk/peg/union/UnionBridgeSupportImplTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,11 +1050,11 @@ void releaseUnionRbtc_whenRequestUnionRbtcIsCalledBeforeRelease_shouldReturnSucc
10501050
when(rskTx.getSender(signatureCache)).thenReturn(mainnetUnionBridgeContractAddress);
10511051

10521052
BigInteger oneEth = BigInteger.TEN.pow(18); // 1 ETH = 1000000000000000000 wei
1053-
Coin amountToRequest = new Coin(oneEth.multiply(BigInteger.TEN)); // 10 RBTC
1053+
Coin amountToRequest = new Coin(oneEth.divide(BigInteger.TEN)); // 0.1 RBTC
10541054
UnionResponseCode actualResponseCode = unionBridgeSupport.requestUnionRbtc(rskTx, amountToRequest);
10551055
assertEquals(UnionResponseCode.SUCCESS, actualResponseCode);
10561056

1057-
Coin amountToRelease = new Coin(oneEth.multiply(BigInteger.TWO)); // 2 RBTC
1057+
Coin amountToRelease = new Coin(oneEth.divide(BigInteger.TEN)); // 0.1 RBTC
10581058
when(rskTx.getValue()).thenReturn(amountToRelease);
10591059

10601060
// act
@@ -1363,9 +1363,10 @@ void save_whenLockingCapIsIncreased_shouldSave(){
13631363
@MethodSource("unionBridgeConstantsProvider")
13641364
void save_whenWeisTransferredBalanceIsIncreased_shouldSave(UnionBridgeConstants unionBridgeConstants){
13651365
BigInteger oneEth = BigInteger.TEN.pow(18); // 1 ETH = 1000000000000000000 wei
1366-
Coin storedWeisTransferredAmount = new Coin(oneEth);
1366+
Coin storedWeisTransferredAmount = new Coin(oneEth).divide(BigInteger.TWO);
13671367
unionBridgeSupport = unionBridgeSupportBuilder
1368-
.withConstants(unionBridgeConstants).build();
1368+
.withConstants(unionBridgeConstants)
1369+
.build();
13691370
when(rskTx.getSender(signatureCache)).thenReturn(unionBridgeConstants.getAddress());
13701371

13711372
// to simulate the case where weis transferred balance is already stored
@@ -1375,7 +1376,7 @@ void save_whenWeisTransferredBalanceIsIncreased_shouldSave(UnionBridgeConstants
13751376
BridgeSerializationUtils::serializeRskCoin
13761377
);
13771378

1378-
Coin amountRequested = new Coin(oneEth).multiply(BigInteger.TWO);
1379+
Coin amountRequested = new Coin(oneEth).divide(BigInteger.TEN);
13791380
UnionResponseCode actualRequestUnionRbtcResponseCode = unionBridgeSupport.requestUnionRbtc(rskTx, amountRequested);
13801381
assertEquals(UnionResponseCode.SUCCESS, actualRequestUnionRbtcResponseCode);
13811382

0 commit comments

Comments
 (0)