Skip to content

Commit 4004c08

Browse files
authored
fixes #21: use merkletreejs for getRootHash (#27)
* use merkletreejs in getRootHash * handle empty leaves
1 parent 364ff51 commit 4004c08

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

rollup/stackr/machine.ts

+20-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { State, StateMachine } from "@stackr/sdk/machine";
2-
import { merklize } from "@stackr/sdk";
3-
import { solidityPacked } from "ethers";
2+
import { keccak256, solidityPackedKeccak256, ZeroHash } from "ethers";
3+
import { MerkleTree } from "merkletreejs";
44
import genesisState from "../genesis-state.json";
55
import { transitions } from "./transitions";
66

@@ -25,11 +25,14 @@ export class AppState extends State<RawState, WrappedState> {
2525
transformer() {
2626
return {
2727
wrap: () => {
28-
const games = this.state.games.reduce<WrappedState['games']>((acc, game) => {
29-
const { id, ...rest } = game;
30-
acc[id] = { ...rest };
31-
return acc;
32-
}, {});
28+
const games = this.state.games.reduce<WrappedState["games"]>(
29+
(acc, game) => {
30+
const { id, ...rest } = game;
31+
acc[id] = { ...rest };
32+
return acc;
33+
},
34+
{}
35+
);
3336
return { games };
3437
},
3538
unwrap: (wrappedState: WrappedState) => {
@@ -44,11 +47,17 @@ export class AppState extends State<RawState, WrappedState> {
4447
}
4548

4649
getRootHash(): string {
47-
const leaves = this.state.games.map(
48-
({ id, player, score }) =>
49-
solidityPacked(["string", "address", "uint256"], [id, player, score])
50+
const leaves = this.state.games.map(({ id, player, score }) =>
51+
solidityPackedKeccak256(
52+
["string", "address", "uint256"],
53+
[id, player, score]
54+
)
5055
);
51-
return merklize(leaves);
56+
if (leaves.length === 0) {
57+
return ZeroHash;
58+
}
59+
const tree = new MerkleTree(leaves, keccak256);
60+
return tree.getHexRoot();
5261
}
5362
}
5463

0 commit comments

Comments
 (0)