-
Notifications
You must be signed in to change notification settings - Fork 6
Description
Hello,
I encountered an issue while working with the provided tutorial code for updating data in the zkDB using zkRollup. After successfully committing initial data, attempting to update a record (specifically changing "Bob's" age from 10 to 15) results in a "wrong merkle root" error during the commit phase.
Steps to Reproduce:
- Initialize and commit initial data to the DB.
- Update the age of "Bob" from 10 to 15.
- Attempt to commit the updated data.
Expected Result: The updated data is committed without errors, and querying "Bob's" age should return the updated value (15).
Actual Result: The commit fails with an error: "VM Exception while processing transaction: reverted with reason string 'wrong merkle root'".
I followed the documentation closely and ensured the setup for SMT levels and configurations were as recommended. Is there a specific procedure for updating data that I might have missed, or could this be a bug in the commit logic?
Thank you for looking into this issue.
db = new DB({
level: 100,
size_path: 5,
size_val: 5,
size_json: 256,
size_txs:10,
level_col: 8,
wasmRU: resolve(__dirname, "../../zkjson/circom/build/circuits/rollup/index_js/index.wasm"),
zkeyRU: resolve(__dirname, "../../zkjson/circom/build/circuits/rollup/index_0001.zkey"),
wasm: resolve(__dirname, "../../zkjson/circom/build/circuits/db/index_js/index.wasm"),
zkey: resolve(__dirname, "../../zkjson/circom/build/circuits/db/index_0001.zkey"),
});
await db.init();
col_id = await db.addCollection();
const people = [
{ name: "Bob", age: 10 },
{ name: "Alice", age: 20 },
{ name: "Mike", age: 30 },
{ name: "Beth", age:40 },
]
let txs = people.map(v => { return [col_id, v.name, v] })
// batch commit write queries
const zkp = await db.genRollupProof(txs);
await myru.commit(zkp);
// query Bob's age
const zkp2 = await db.genProof({ json: people[0], col_id, path: "age", id: "Bob" });
expect((await myru.qInt([col_id, toIndex("Bob"), ...path("age")], zkp2))).to.eql(10n)
// How to update ?
const people2 = [
{ name: "Bob", age: 15 }, // change age
{ name: "Alice", age: 20 },
{ name: "Mike", age: 30 },
{ name: "Beth", age:40 },
]
txs = people2.map(v => { return [col_id, v.name, v] })
const zkp3 = await db.genRollupProof(txs);
await myru.commit(zkp3);
// commit is faild.
// Error: VM Exception while processing transaction: reverted with reason string 'wrong merkle root'
// at MyRollup.commit (zkjson/contracts/ZKRollup.sol:29)
const zkp4 = await db.genProof({ json: people2[0], col_id, path: "age", id: "Bob" });
expect((await myru.qInt([col_id, toIndex("Bob"), ...path("age")], zkp4))).to.eql(15n)