diff --git a/rskj-core/src/main/java/org/ethereum/rpc/Web3Impl.java b/rskj-core/src/main/java/org/ethereum/rpc/Web3Impl.java index 32a5c0e43ec..488f37e9444 100644 --- a/rskj-core/src/main/java/org/ethereum/rpc/Web3Impl.java +++ b/rskj-core/src/main/java/org/ethereum/rpc/Web3Impl.java @@ -409,7 +409,7 @@ public String eth_getStorageAt(String address, String storageIdx, String blockId .getStorageValue(addr, DataWord.valueOf(stringHexToByteArray(storageIdx))); if (sv == null) { - s = null; + s = "0x0"; } else { s = toUnformattedJsonHex(sv.getData()); } diff --git a/rskj-core/src/test/java/org/ethereum/rpc/Web3ImplUnitTest.java b/rskj-core/src/test/java/org/ethereum/rpc/Web3ImplUnitTest.java index a3f6d46d7b9..777b82448da 100644 --- a/rskj-core/src/test/java/org/ethereum/rpc/Web3ImplUnitTest.java +++ b/rskj-core/src/test/java/org/ethereum/rpc/Web3ImplUnitTest.java @@ -143,6 +143,25 @@ public void eth_getStorageAt() { result); } + + @Test + public void eth_getStorageAtEmptyCell() { + String id = "id"; + String addr = "0x0011223344556677880011223344556677889900"; + RskAddress expectedAddress = new RskAddress(addr); + String storageIdx = "0x01"; + DataWord expectedIdx = DataWord.valueOf(stringHexToByteArray(storageIdx)); + + AccountInformationProvider aip = mock(AccountInformationProvider.class); + when(retriever.getInformationProvider(eq(id))).thenReturn(aip); + when(aip.getStorageValue(eq(expectedAddress), eq(expectedIdx))) + .thenReturn(null); + + String result = target.eth_getStorageAt(addr, storageIdx, id); + assertEquals("0x0", + result); + } + @Test public void eth_getBlockTransactionCountByNumber_blockNotFound() { String id = "id";