Snapserver GetTrieNodes request to handle short hash for storage (#7264)

Signed-off-by: Jason Frame <jason.frame@consensys.net>
pull/6646/merge
Jason Frame 5 months ago committed by GitHub
parent 47f341edf5
commit 67637fa3f0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/snap/SnapServer.java
  2. 25
      ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/manager/snap/SnapServerTest.java

@ -530,7 +530,7 @@ class SnapServer implements BesuEvents.InitialSyncCompletionListener {
// otherwise the first element should be account hash, and subsequent paths
// are compact encoded account storage paths
final Bytes accountPrefix = triePath.get(0);
final Bytes accountPrefix = Bytes32.leftPad(triePath.getFirst());
List<Bytes> storagePaths = triePath.subList(1, triePath.size());
for (var path : storagePaths) {

@ -534,6 +534,24 @@ public class SnapServerTest {
assertThat(trieNodes.size()).isEqualTo(4);
}
@Test
public void assertStorageTrieShortAccountHashPathRequest() {
Bytes accountShortHash = Bytes.fromHexStringLenient("0x40");
Hash accountFullHash = Hash.wrap(Bytes32.leftPad(accountShortHash));
SnapTestAccount testAccount = createTestContractAccount(accountFullHash, inMemoryStorage);
insertTestAccounts(testAccount);
var pathToSlot11 = CompactEncoding.encode(Bytes.fromHexStringLenient("0x0101"));
var pathToSlot12 = CompactEncoding.encode(Bytes.fromHexStringLenient("0x0102"));
var trieNodeRequest =
requestTrieNodes(
storageTrie.getRootHash(),
List.of(List.of(accountShortHash, pathToSlot11, pathToSlot12)));
assertThat(trieNodeRequest).isNotNull();
List<Bytes> trieNodes = trieNodeRequest.nodes(false);
assertThat(trieNodes).isNotNull();
assertThat(trieNodes.size()).isEqualTo(2);
}
@Test
public void assertStorageTrieLimitRequest() {
insertTestAccounts(acct1, acct2, acct3, acct4);
@ -671,7 +689,12 @@ public class SnapServerTest {
static SnapTestAccount createTestContractAccount(
final String hexAddr, final BonsaiWorldStateKeyValueStorage storage) {
Hash acctHash = Hash.wrap(Bytes32.rightPad(Bytes.fromHexString(hexAddr)));
final Hash acctHash = Hash.wrap(Bytes32.rightPad(Bytes.fromHexString(hexAddr)));
return createTestContractAccount(acctHash, storage);
}
static SnapTestAccount createTestContractAccount(
final Hash acctHash, final BonsaiWorldStateKeyValueStorage storage) {
MerkleTrie<Bytes32, Bytes> trie =
new StoredMerklePatriciaTrie<>(
(loc, hash) -> storage.getAccountStorageTrieNode(acctHash, loc, hash),

Loading…
Cancel
Save