Skip to content

Commit

Permalink
Created SyncCachedMerkleTree
Browse files Browse the repository at this point in the history
  • Loading branch information
ejMina226 committed Nov 15, 2024
1 parent 708ef4b commit a1d81d2
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ import { LinkedMerkleTree } from "@proto-kit/common/dist/trees/LinkedMerkleTree"

import { distinctByString } from "../../helpers/utils";
import { CachedStateService } from "../../state/state/CachedStateService";
import { SyncCachedMerkleTreeStore } from "../../state/merkle/SyncCachedMerkleTreeStore";
import type {
TransactionExecutionResult,
BlockWithResult,
} from "../../storage/model/Block";
import { AsyncMerkleTreeStore } from "../../state/async/AsyncMerkleTreeStore";
import { VerificationKeyService } from "../runtime/RuntimeVerificationKeyService";
import { CachedLinkedMerkleTreeStore } from "../../state/merkle/CachedLinkedMerkleTreeStore";
import { SyncCachedLinkedMerkleTreeStore } from "../../state/merkle/SyncCachedLinkedMerkleTreeStore";

import type { TransactionTrace, BlockTrace } from "./BatchProducerModule";
import { StateTransitionProofParameters } from "./tasks/StateTransitionTaskParameters";
Expand Down Expand Up @@ -266,7 +266,7 @@ export class TransactionTraceService {
}> {
const keys = this.allKeys(protocolTransitions.concat(stateTransitions));

const runtimeSimulationMerkleStore = new SyncCachedMerkleTreeStore(
const runtimeSimulationMerkleStore = new SyncCachedLinkedMerkleTreeStore(
merkleStore
);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import {
InMemoryLinkedMerkleTreeStorage,
LinkedLeaf,
LinkedMerkleTree,
LinkedMerkleTreeStore,
} from "@proto-kit/common";

export class SyncCachedLinkedMerkleTreeStore extends InMemoryLinkedMerkleTreeStorage {
public constructor(private readonly parent: LinkedMerkleTreeStore) {
super();
}

public getNode(key: bigint, level: number): bigint | undefined {
return super.getNode(key, level) ?? this.parent.getNode(key, level);
}

public setNode(key: bigint, level: number, value: bigint) {
super.setNode(key, level, value);
}

public getLeaf(index: bigint): LinkedLeaf | undefined {
return super.getLeaf(index) ?? this.parent.getLeaf(index);
}

public setLeaf(index: bigint, value: LinkedLeaf) {
super.setLeaf(index, value);
}

public mergeIntoParent() {
if (Object.keys(this.leaves).length === 0) {
return;
}

const { nodes, leaves } = this;
Object.entries(leaves).forEach(([key, leaf]) =>
this.setLeaf(BigInt(key), leaf)
);
Array.from({ length: LinkedMerkleTree.HEIGHT }).forEach((ignored, level) =>
Object.entries(nodes[level]).forEach((entry) => {
this.parent.setNode(BigInt(entry[0]), level, entry[1]);
})
);

this.leaves = {};
this.nodes = {};
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import {
InMemoryLinkedMerkleTreeStorage,
InMemoryMerkleTreeStorage,
MerkleTreeStore,
RollupMerkleTree,
} from "@proto-kit/common";

export class SyncCachedMerkleTreeStore extends InMemoryLinkedMerkleTreeStorage {
export class SyncCachedMerkleTreeStore extends InMemoryMerkleTreeStorage {
public constructor(private readonly parent: MerkleTreeStore) {
super();
}
Expand Down

0 comments on commit a1d81d2

Please sign in to comment.