change index logic, fixes CVF-38. Update circom version.

This commit is contained in:
poma 2021-03-21 02:26:54 +03:00
parent 9321740be7
commit a04fe966f7
No known key found for this signature in database
GPG Key ID: BA20CB01FE165657
4 changed files with 27 additions and 18 deletions

@ -28,18 +28,20 @@ template TreeUpdateArgsHasher(nLeaves) {
bitsNewRoot.in <== newRoot; bitsNewRoot.in <== newRoot;
bitsPathIndices.in <== pathIndices; bitsPathIndices.in <== pathIndices;
hasher.in[0] <== 0; var index = 0;
hasher.in[1] <== 0;
hasher.in[index++] <== 0;
hasher.in[index++] <== 0;
for(var i = 0; i < 254; i++) { for(var i = 0; i < 254; i++) {
hasher.in[i + 2] <== bitsOldRoot.out[253 - i]; hasher.in[index++] <== bitsOldRoot.out[253 - i];
} }
hasher.in[256] <== 0; hasher.in[index++] <== 0;
hasher.in[257] <== 0; hasher.in[index++] <== 0;
for(var i = 0; i < 254; i++) { for(var i = 0; i < 254; i++) {
hasher.in[i + 258] <== bitsNewRoot.out[253 - i]; hasher.in[index++] <== bitsNewRoot.out[253 - i];
} }
for(var i = 0; i < 32; i++) { for(var i = 0; i < 32; i++) {
hasher.in[i + 512] <== bitsPathIndices.out[31 - i]; hasher.in[index++] <== bitsPathIndices.out[31 - i];
} }
for(var leaf = 0; leaf < nLeaves; leaf++) { for(var leaf = 0; leaf < nLeaves; leaf++) {
// the range check on hash is optional, it's enforced by the smart contract anyway // the range check on hash is optional, it's enforced by the smart contract anyway
@ -49,16 +51,16 @@ template TreeUpdateArgsHasher(nLeaves) {
bitsHash[leaf].in <== hashes[leaf]; bitsHash[leaf].in <== hashes[leaf];
bitsInstance[leaf].in <== instances[leaf]; bitsInstance[leaf].in <== instances[leaf];
bitsBlock[leaf].in <== blocks[leaf]; bitsBlock[leaf].in <== blocks[leaf];
hasher.in[header + leaf * bitsPerLeaf + 0] <== 0; hasher.in[index++] <== 0;
hasher.in[header + leaf * bitsPerLeaf + 1] <== 0; hasher.in[index++] <== 0;
for(var i = 0; i < 254; i++) { for(var i = 0; i < 254; i++) {
hasher.in[header + leaf * bitsPerLeaf + i + 2] <== bitsHash[leaf].out[253 - i]; hasher.in[index++] <== bitsHash[leaf].out[253 - i];
} }
for(var i = 0; i < 160; i++) { for(var i = 0; i < 160; i++) {
hasher.in[header + leaf * bitsPerLeaf + i + 256] <== bitsInstance[leaf].out[159 - i]; hasher.in[index++] <== bitsInstance[leaf].out[159 - i];
} }
for(var i = 0; i < 32; i++) { for(var i = 0; i < 32; i++) {
hasher.in[header + leaf * bitsPerLeaf + i + 416] <== bitsBlock[leaf].out[31 - i]; hasher.in[index++] <== bitsBlock[leaf].out[31 - i];
} }
} }
component b2n = Bits2Num(256); component b2n = Bits2Num(256);

@ -42,7 +42,7 @@
"dependencies": { "dependencies": {
"@openzeppelin/contracts": "^3.4.0", "@openzeppelin/contracts": "^3.4.0",
"@openzeppelin/upgrades-core": "^1.5.1", "@openzeppelin/upgrades-core": "^1.5.1",
"circom": "^0.5.38", "circom": "0.5.42",
"circom_runtime": "^0.1.12", "circom_runtime": "^0.1.12",
"circomlib": "git+https://github.com/tornadocash/circomlib.git#d20d53411d1bef61f38c99a8b36d5d0cc4836aa1", "circomlib": "git+https://github.com/tornadocash/circomlib.git#d20d53411d1bef61f38c99a8b36d5d0cc4836aa1",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",

@ -42,7 +42,14 @@ function prove(input, keyBasePath) {
fs.writeFileSync(`${dir}/input.json`, JSON.stringify(input, null, 2)) fs.writeFileSync(`${dir}/input.json`, JSON.stringify(input, null, 2))
out = await exec(`${keyBasePath} ${dir}/input.json ${dir}/witness.json`) out = await exec(`${keyBasePath} ${dir}/input.json ${dir}/witness.json`)
} else { } else {
await wtns.calculate(utils.unstringifyBigInts(input), `${keyBasePath}.wasm`, `${dir}/witness.wtns`) await wtns.debug(
utils.unstringifyBigInts(input),
`${keyBasePath}.wasm`,
`${dir}/witness.wtns`,
`${keyBasePath}.sym`,
{},
console,
)
const witness = utils.stringifyBigInts(await wtns.exportJson(`${dir}/witness.wtns`)) const witness = utils.stringifyBigInts(await wtns.exportJson(`${dir}/witness.wtns`))
fs.writeFileSync(`${dir}/witness.json`, JSON.stringify(witness, null, 2)) fs.writeFileSync(`${dir}/witness.json`, JSON.stringify(witness, null, 2))
} }

@ -2241,10 +2241,10 @@ circom@0.5.33:
tmp-promise "^2.0.2" tmp-promise "^2.0.2"
wasmbuilder "0.0.10" wasmbuilder "0.0.10"
circom@^0.5.38: circom@0.5.42:
version "0.5.38" version "0.5.42"
resolved "https://registry.yarnpkg.com/circom/-/circom-0.5.38.tgz#c099fb196085837575fb266f37b0516b1ec56eb5" resolved "https://registry.yarnpkg.com/circom/-/circom-0.5.42.tgz#96a456f9538f4425654df091d15e3158e9da2acc"
integrity sha512-PFlXto8gDysUlwk6z/GYbn1Mv5BtW9BI4769N9gSP0/7KDNSqLNyVmL4DgMLc67/EpG4qJLGch3SdgzQD+/cfw== integrity sha512-v6+f9g3z2ia17NQvQmyZjvh8cE8O3GtxRE36KfJfx/a+s58Y7aEDWsUG+GFRJhp1ajiQELdj3NehY9vHSf5Rkg==
dependencies: dependencies:
chai "^4.2.0" chai "^4.2.0"
circom_runtime "0.1.12" circom_runtime "0.1.12"