diff --git a/rskj-core/src/main/java/co/rsk/peg/Bridge.java b/rskj-core/src/main/java/co/rsk/peg/Bridge.java index 9e6144675ca..852615eefb4 100644 --- a/rskj-core/src/main/java/co/rsk/peg/Bridge.java +++ b/rskj-core/src/main/java/co/rsk/peg/Bridge.java @@ -1058,16 +1058,17 @@ public long getLockWhitelistEntryByAddress(Object[] args) { return WhitelistResponseCode.INVALID_ADDRESS_FORMAT.getCode(); } - LockWhitelistEntry entry = bridgeSupport.getLockWhitelistEntryByAddress(addressBase58); + Optional entry = bridgeSupport.getLockWhitelistEntryByAddress(addressBase58); - if (entry == null) { + if (entry.isEmpty()) { // Empty string is returned when address is not found logger.debug("[getLockWhitelistEntryByAddress] Address not found: {}", addressBase58); return WhitelistResponseCode.ADDRESS_NOT_EXIST.getCode(); } - return entry.getClass() == OneOffWhiteListEntry.class ? - ((OneOffWhiteListEntry)entry).maxTransferValue().getValue() : + LockWhitelistEntry lockWhitelistEntry = entry.get(); + return lockWhitelistEntry.getClass() == OneOffWhiteListEntry.class ? + ((OneOffWhiteListEntry) lockWhitelistEntry).maxTransferValue().getValue() : WhitelistResponseCode.UNLIMITED_MODE.getCode(); } diff --git a/rskj-core/src/main/java/co/rsk/peg/BridgeSupport.java b/rskj-core/src/main/java/co/rsk/peg/BridgeSupport.java index 92c93eb4de9..33b16264ec8 100644 --- a/rskj-core/src/main/java/co/rsk/peg/BridgeSupport.java +++ b/rskj-core/src/main/java/co/rsk/peg/BridgeSupport.java @@ -2125,7 +2125,7 @@ public LockWhitelistEntry getLockWhitelistEntryByIndex(int index) { return whitelistSupport.getLockWhitelistEntryByIndex(index); } - public LockWhitelistEntry getLockWhitelistEntryByAddress(String addressBase58) { + public Optional getLockWhitelistEntryByAddress(String addressBase58) { return whitelistSupport.getLockWhitelistEntryByAddress(addressBase58); } diff --git a/rskj-core/src/main/java/co/rsk/peg/whitelist/WhitelistSupport.java b/rskj-core/src/main/java/co/rsk/peg/whitelist/WhitelistSupport.java index 020e649ea83..762d1a7cc1b 100644 --- a/rskj-core/src/main/java/co/rsk/peg/whitelist/WhitelistSupport.java +++ b/rskj-core/src/main/java/co/rsk/peg/whitelist/WhitelistSupport.java @@ -3,6 +3,8 @@ import co.rsk.bitcoinj.core.Address; import co.rsk.bitcoinj.core.Coin; import java.math.BigInteger; +import java.util.Optional; + import org.ethereum.core.Transaction; /** @@ -34,7 +36,7 @@ public interface WhitelistSupport { * @param addressBase58 the address in base58 format to search for * @return the whitelist entry for the given address, or null if the addrres is not whitelisted */ - LockWhitelistEntry getLockWhitelistEntryByAddress(String addressBase58); + Optional getLockWhitelistEntryByAddress(String addressBase58); /** * Adds the given address to the lock whitelist, allowing peg-ins up to certain max value diff --git a/rskj-core/src/main/java/co/rsk/peg/whitelist/WhitelistSupportImpl.java b/rskj-core/src/main/java/co/rsk/peg/whitelist/WhitelistSupportImpl.java index ae3bb7de10f..bdae7d85b51 100644 --- a/rskj-core/src/main/java/co/rsk/peg/whitelist/WhitelistSupportImpl.java +++ b/rskj-core/src/main/java/co/rsk/peg/whitelist/WhitelistSupportImpl.java @@ -7,6 +7,8 @@ import co.rsk.peg.whitelist.constants.WhitelistConstants; import java.math.BigInteger; import java.util.List; +import java.util.Optional; + import org.ethereum.config.blockchain.upgrades.ActivationConfig; import org.ethereum.core.SignatureCache; import org.ethereum.core.Transaction; @@ -56,14 +58,14 @@ public LockWhitelistEntry getLockWhitelistEntryByIndex(int index) { } @Override - public LockWhitelistEntry getLockWhitelistEntryByAddress(String addressBase58) { + public Optional getLockWhitelistEntryByAddress(String addressBase58) { try { Address address = Address.fromBase58(networkParameters, addressBase58); - return storageProvider.getLockWhitelist(activations, networkParameters).get(address); + return Optional.ofNullable(storageProvider.getLockWhitelist(activations, networkParameters).get(address)); } catch (AddressFormatException e) { logger.warn("[getLockWhitelistEntryByAddress] {}", INVALID_ADDRESS_FORMAT_MESSAGE, e); - return null; + return Optional.empty(); } } diff --git a/rskj-core/src/test/java/co/rsk/peg/BridgeSupportTest.java b/rskj-core/src/test/java/co/rsk/peg/BridgeSupportTest.java index d4161e02247..a2767203056 100644 --- a/rskj-core/src/test/java/co/rsk/peg/BridgeSupportTest.java +++ b/rskj-core/src/test/java/co/rsk/peg/BridgeSupportTest.java @@ -80,6 +80,7 @@ import static org.hamcrest.Matchers.lessThanOrEqualTo; import static org.hamcrest.core.Is.is; import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.*; @@ -210,9 +211,10 @@ void getLockWhitelistEntryByIndex() { @Test void getLockWhitelistEntryByAddress() { LockWhitelistEntry entry = mock(LockWhitelistEntry.class); - when(whitelistSupport.getLockWhitelistEntryByAddress("address")).thenReturn(entry); + when(whitelistSupport.getLockWhitelistEntryByAddress("address")).thenReturn(Optional.of(entry)); - assertEquals(entry, bridgeSupport.getLockWhitelistEntryByAddress("address")); + assertTrue(bridgeSupport.getLockWhitelistEntryByAddress("address").isPresent()); + assertEquals(entry, bridgeSupport.getLockWhitelistEntryByAddress("address").get()); } @Test diff --git a/rskj-core/src/test/java/co/rsk/peg/whitelist/WhitelistSupportImplTest.java b/rskj-core/src/test/java/co/rsk/peg/whitelist/WhitelistSupportImplTest.java index 2e992579dba..bd1259f26c5 100644 --- a/rskj-core/src/test/java/co/rsk/peg/whitelist/WhitelistSupportImplTest.java +++ b/rskj-core/src/test/java/co/rsk/peg/whitelist/WhitelistSupportImplTest.java @@ -18,6 +18,8 @@ import java.math.BigInteger; import java.util.Collections; import java.util.List; +import java.util.Optional; + import org.apache.commons.lang3.tuple.Pair; import org.ethereum.config.blockchain.upgrades.ActivationConfig; import org.ethereum.config.blockchain.upgrades.ActivationConfigsForTest; @@ -91,18 +93,19 @@ void getLockWhitelistEntryByIndex_whenIndexIsOutOfBounds_shouldReturnNull() { @Test void getLockWhitelistEntryByAddress_whenLockWhitelistIsEmpty_shouldReturnNull() { - LockWhitelistEntry actualEntry = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()); + Optional actualEntry = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()); - assertNull(actualEntry); + assertTrue(actualEntry.isEmpty()); } @Test void getLockWhitelistEntryByAddress_whenLockWhitelistHasEntries_shouldReturnOneOffWhiteListEntry() { saveInMemoryStorageOneOffWhiteListEntry(); - LockWhitelistEntry actualLockWhitelistEntry = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()); + Optional actualLockWhitelistEntry = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()); - assertEquals(btcAddress, actualLockWhitelistEntry.address()); + assertTrue(actualLockWhitelistEntry.isPresent()); + assertEquals(btcAddress, actualLockWhitelistEntry.get().address()); } private void saveInMemoryStorageOneOffWhiteListEntry() { @@ -121,8 +124,8 @@ private void saveInMemoryStorageOneOffWhiteListEntry() { @Test void getLockWhitelistEntryByAddress_whenAddressIsInvalid_shouldReturnNull() { - LockWhitelistEntry actualLockWhitelistEntry = whitelistSupport.getLockWhitelistEntryByAddress("invalidAddress"); - assertNull(actualLockWhitelistEntry); + Optional actualLockWhitelistEntry = whitelistSupport.getLockWhitelistEntryByAddress("invalidAddress"); + assertTrue(actualLockWhitelistEntry.isEmpty()); } @Test @@ -283,11 +286,12 @@ void setLockWhitelistDisableBlockDelay_whenDisableBlockDelayPlusBtcBlockchainBes void verifyLockSenderIsWhitelisted_whenOneOffLockWhitelistAddressIsWhitelisted_shouldReturnTrue() { Transaction tx = TransactionUtils.getTransactionFromCaller(signatureCache, WhitelistCaller.AUTHORIZED.getRskAddress()); whitelistSupport.addOneOffLockWhitelistAddress(tx, btcAddress.toString(), BigInteger.TEN); - LockWhitelistEntry lockWhitelistEntry = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()); + Optional lockWhitelistEntry = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()); boolean actualResult = whitelistSupport.verifyLockSenderIsWhitelisted(btcAddress, Coin.SATOSHI, 0); - assertTrue(lockWhitelistEntry.isConsumed()); + assertTrue(lockWhitelistEntry.isPresent()); + assertTrue(lockWhitelistEntry.get().isConsumed()); assertTrue(actualResult); } @@ -326,7 +330,8 @@ void save_whenOneOffLockWhitelistAddressIsWhitelisted_shouldSaveOneOffLockWhitel whitelistSupport.save(); int actualSize = whitelistSupport.getLockWhitelistSize(); - Address actualBtcAddress = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()).address(); + Optional lockWhitelistEntry = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()); + Address actualBtcAddress = lockWhitelistEntry.get().address(); assertEquals(1, actualSize); assertEquals(btcAddress, actualBtcAddress); } @@ -339,7 +344,8 @@ void save_whenUnlimitedLockWhitelistAddressIsWhitelisted_shouldSaveUnlimitedLock whitelistSupport.save(); int actualSize = whitelistSupport.getLockWhitelistSize(); - Address actualBtcAddress = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()).address(); + Optional lockWhitelistEntry = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()); + Address actualBtcAddress = lockWhitelistEntry.get().address(); assertEquals(1, actualSize); assertEquals(btcAddress, actualBtcAddress); } @@ -353,8 +359,10 @@ void save_whenOneOffAndUnlimitedLockWhitelistAddressesAreWhitelisted_shouldSaveB whitelistSupport.save(); int actualSize = whitelistSupport.getLockWhitelistSize(); - Address actualBtcAddress = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()).address(); - Address actualSecondBtcAddress = whitelistSupport.getLockWhitelistEntryByAddress(secondBtcAddress.toString()).address(); + Optional lockWhitelistEntryBtcAddress = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()); + Address actualBtcAddress = lockWhitelistEntryBtcAddress.get().address(); + Optional lockWhitelistEntrySecondBtcAddress = whitelistSupport.getLockWhitelistEntryByAddress(secondBtcAddress.toString()); + Address actualSecondBtcAddress = lockWhitelistEntrySecondBtcAddress.get().address(); assertEquals(2, actualSize); assertEquals(btcAddress, actualBtcAddress); assertEquals(secondBtcAddress, actualSecondBtcAddress);