@auditable/privacy-pool-zk-sdk 0.0.2-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/main.wasm +0 -0
- package/assets/main_final.zkey +0 -0
- package/assets/witness_calculator.js +381 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +701 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +571 -0
- package/dist/index.mjs.map +1 -0
- package/dist/prover.d.ts +5 -0
- package/dist/sdk.d.ts +47 -0
- package/dist/types.d.ts +34 -0
- package/dist/wasm.d.ts +1 -0
- package/dist/witness.d.ts +2 -0
- package/package.json +49 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sources":["../src/wasm.ts","../../circuits/build/main_js/witness_calculator.js","../src/witness.ts","../src/prover.ts","../src/sdk.ts","../src/cli.ts"],"sourcesContent":[null,"module.exports = async function builder(code, options) {\n\n options = options || {};\n\n let wasmModule;\n try {\n\twasmModule = await WebAssembly.compile(code);\n } catch (err) {\n\tconsole.log(err);\n\tconsole.log(\"\\nTry to run circom --c in order to generate c++ code instead\\n\");\n\tthrow new Error(err);\n }\n\n let wc;\n\n let errStr = \"\";\n let msgStr = \"\";\n \n const instance = await WebAssembly.instantiate(wasmModule, {\n runtime: {\n exceptionHandler : function(code) {\n\t\tlet err;\n if (code == 1) {\n err = \"Signal not found.\\n\";\n } else if (code == 2) {\n err = \"Too many signals set.\\n\";\n } else if (code == 3) {\n err = \"Signal already set.\\n\";\n\t\t} else if (code == 4) {\n err = \"Assert Failed.\\n\";\n\t\t} else if (code == 5) {\n err = \"Not enough memory.\\n\";\n\t\t} else if (code == 6) {\n err = \"Input signal array access exceeds the size.\\n\";\n\t\t} else {\n\t\t err = \"Unknown error.\\n\";\n }\n throw new Error(err + errStr);\n },\n\t printErrorMessage : function() {\n\t\terrStr += getMessage() + \"\\n\";\n // console.error(getMessage());\n\t },\n\t writeBufferMessage : function() {\n\t\t\tconst msg = getMessage();\n\t\t\t// Any calls to `log()` will always end with a `\\n`, so that's when we print and reset\n\t\t\tif (msg === \"\\n\") {\n\t\t\t\tconsole.log(msgStr);\n\t\t\t\tmsgStr = \"\";\n\t\t\t} else {\n\t\t\t\t// If we've buffered other content, put a space in between the items\n\t\t\t\tif (msgStr !== \"\") {\n\t\t\t\t\tmsgStr += \" \"\n\t\t\t\t}\n\t\t\t\t// Then append the message to the message we are creating\n\t\t\t\tmsgStr += msg;\n\t\t\t}\n\t },\n\t showSharedRWMemory : function() {\n\t\tprintSharedRWMemory ();\n }\n\n }\n });\n\n const sanityCheck =\n options\n// options &&\n// (\n// options.sanityCheck ||\n// options.logGetSignal ||\n// options.logSetSignal ||\n// options.logStartComponent ||\n// options.logFinishComponent\n// );\n\n \n wc = new WitnessCalculator(instance, sanityCheck);\n return wc;\n\n function getMessage() {\n var message = \"\";\n\tvar c = instance.exports.getMessageChar();\n while ( c != 0 ) {\n\t message += String.fromCharCode(c);\n\t c = instance.exports.getMessageChar();\n\t}\n return message;\n }\n\t\n function printSharedRWMemory () {\n\tconst shared_rw_memory_size = instance.exports.getFieldNumLen32();\n\tconst arr = new Uint32Array(shared_rw_memory_size);\n\tfor (let j=0; j<shared_rw_memory_size; j++) {\n\t arr[shared_rw_memory_size-1-j] = instance.exports.readSharedRWMemory(j);\n\t}\n\n\t// If we've buffered other content, put a space in between the items\n\tif (msgStr !== \"\") {\n\t\tmsgStr += \" \"\n\t}\n\t// Then append the value to the message we are creating\n\tmsgStr += (fromArray32(arr).toString());\n\t}\n\n};\n\nclass WitnessCalculator {\n constructor(instance, sanityCheck) {\n this.instance = instance;\n\n\tthis.version = this.instance.exports.getVersion();\n this.n32 = this.instance.exports.getFieldNumLen32();\n\n this.instance.exports.getRawPrime();\n const arr = new Uint32Array(this.n32);\n for (let i=0; i<this.n32; i++) {\n arr[this.n32-1-i] = this.instance.exports.readSharedRWMemory(i);\n }\n this.prime = fromArray32(arr);\n\n this.witnessSize = this.instance.exports.getWitnessSize();\n\n this.sanityCheck = sanityCheck;\n }\n \n circom_version() {\n\treturn this.instance.exports.getVersion();\n }\n\n async _doCalculateWitness(input_orig, sanityCheck) {\n\t//input is assumed to be a map from signals to arrays of bigints\n this.instance.exports.init((this.sanityCheck || sanityCheck) ? 1 : 0);\n\tlet prefix = \"\";\n\tvar input = new Object();\n\t//console.log(\"Input: \", input_orig);\n\tqualify_input(prefix,input_orig,input);\n\t//console.log(\"Input after: \",input);\t\n const keys = Object.keys(input);\n\tvar input_counter = 0;\n keys.forEach( (k) => {\n const h = fnvHash(k);\n const hMSB = parseInt(h.slice(0,8), 16);\n const hLSB = parseInt(h.slice(8,16), 16);\n const fArr = flatArray(input[k]);\n\t let signalSize = this.instance.exports.getInputSignalSize(hMSB, hLSB);\n\t if (signalSize < 0){\n\t\tthrow new Error(`Signal ${k} not found\\n`);\n\t }\n\t if (fArr.length < signalSize) {\n\t\tthrow new Error(`Not enough values for input signal ${k}\\n`);\n\t }\n\t if (fArr.length > signalSize) {\n\t\tthrow new Error(`Too many values for input signal ${k}\\n`);\n\t }\n for (let i=0; i<fArr.length; i++) {\n const arrFr = toArray32(normalize(fArr[i],this.prime),this.n32)\n for (let j=0; j<this.n32; j++) {\n\t\t this.instance.exports.writeSharedRWMemory(j,arrFr[this.n32-1-j]);\n\t\t}\n\t\ttry {\n this.instance.exports.setInputSignal(hMSB, hLSB,i);\n\t\t input_counter++;\n\t\t} catch (err) {\n\t\t // console.log(`After adding signal ${i} of ${k}`)\n throw new Error(err);\n\t\t}\n }\n\n });\n\tif (input_counter < this.instance.exports.getInputSize()) {\n\t throw new Error(`Not all inputs have been set. Only ${input_counter} out of ${this.instance.exports.getInputSize()}`);\n\t}\n }\n\n async calculateWitness(input, sanityCheck) {\n\n const w = [];\n await this._doCalculateWitness(input, sanityCheck);\n\n for (let i=0; i<this.witnessSize; i++) {\n this.instance.exports.getWitness(i);\n\t const arr = new Uint32Array(this.n32);\n for (let j=0; j<this.n32; j++) {\n arr[this.n32-1-j] = this.instance.exports.readSharedRWMemory(j);\n }\n w.push(fromArray32(arr));\n }\n\n return w;\n }\n \n\n async calculateBinWitness(input, sanityCheck) {\n\n const buff32 = new Uint32Array(this.witnessSize*this.n32);\n\tconst buff = new Uint8Array( buff32.buffer);\n await this._doCalculateWitness(input, sanityCheck);\n\n for (let i=0; i<this.witnessSize; i++) {\n this.instance.exports.getWitness(i);\n\t const pos = i*this.n32;\n for (let j=0; j<this.n32; j++) {\n\t\tbuff32[pos+j] = this.instance.exports.readSharedRWMemory(j);\n }\n }\n\n\treturn buff;\n }\n \n\n async calculateWTNSBin(input, sanityCheck) {\n\n const buff32 = new Uint32Array(this.witnessSize*this.n32+this.n32+11);\n\tconst buff = new Uint8Array( buff32.buffer);\n await this._doCalculateWitness(input, sanityCheck);\n \n\t//\"wtns\"\n\tbuff[0] = \"w\".charCodeAt(0)\n\tbuff[1] = \"t\".charCodeAt(0)\n\tbuff[2] = \"n\".charCodeAt(0)\n\tbuff[3] = \"s\".charCodeAt(0)\n\n\t//version 2\n\tbuff32[1] = 2;\n\n\t//number of sections: 2\n\tbuff32[2] = 2;\n\n\t//id section 1\n\tbuff32[3] = 1;\n\n\tconst n8 = this.n32*4;\n\t//id section 1 length in 64bytes\n\tconst idSection1length = 8 + n8;\n\tconst idSection1lengthHex = idSection1length.toString(16);\n buff32[4] = parseInt(idSection1lengthHex.slice(0,8), 16);\n buff32[5] = parseInt(idSection1lengthHex.slice(8,16), 16);\n\n\t//this.n32\n\tbuff32[6] = n8;\n\n\t//prime number\n\tthis.instance.exports.getRawPrime();\n\n\tvar pos = 7;\n for (let j=0; j<this.n32; j++) {\n\t buff32[pos+j] = this.instance.exports.readSharedRWMemory(j);\n }\n\tpos += this.n32;\n\n\t// witness size\n\tbuff32[pos] = this.witnessSize;\n\tpos++;\n\n\t//id section 2\n\tbuff32[pos] = 2;\n\tpos++;\n\n\t// section 2 length\n\tconst idSection2length = n8*this.witnessSize;\n\tconst idSection2lengthHex = idSection2length.toString(16);\n buff32[pos] = parseInt(idSection2lengthHex.slice(0,8), 16);\n buff32[pos+1] = parseInt(idSection2lengthHex.slice(8,16), 16);\n\n\tpos += 2;\n for (let i=0; i<this.witnessSize; i++) {\n this.instance.exports.getWitness(i);\n for (let j=0; j<this.n32; j++) {\n\t\tbuff32[pos+j] = this.instance.exports.readSharedRWMemory(j);\n }\n\t pos += this.n32;\n }\n\n\treturn buff;\n }\n\n}\n\n\nfunction qualify_input_list(prefix,input,input1){\n if (Array.isArray(input)) {\n\tfor (let i = 0; i<input.length; i++) {\n\t let new_prefix = prefix + \"[\" + i + \"]\";\n\t qualify_input_list(new_prefix,input[i],input1);\n\t}\n } else {\n\tqualify_input(prefix,input,input1);\n }\n}\n\nfunction qualify_input(prefix,input,input1) {\n if (Array.isArray(input)) {\n\ta = flatArray(input);\n\tif (a.length > 0) {\n\t let t = typeof a[0];\n\t for (let i = 1; i<a.length; i++) {\n\t\tif (typeof a[i] != t){\n\t\t throw new Error(`Types are not the same in the key ${prefix}`);\n\t\t}\n\t }\n\t if (t == \"object\") {\n\t\tqualify_input_list(prefix,input,input1);\n\t } else {\n\t\tinput1[prefix] = input;\n\t }\n\t} else {\t \n\t input1[prefix] = input;\n\t}\n } else if (typeof input == \"object\") {\n const keys = Object.keys(input);\n\tkeys.forEach( (k) => {\n\t let new_prefix = prefix == \"\"? k : prefix + \".\" + k;\n\t qualify_input(new_prefix,input[k],input1);\n\t});\n } else {\n\tinput1[prefix] = input;\n }\n}\n\nfunction toArray32(rem,size) {\n const res = []; //new Uint32Array(size); //has no unshift\n const radix = BigInt(0x100000000);\n while (rem) {\n res.unshift( Number(rem % radix));\n rem = rem / radix;\n }\n if (size) {\n\tvar i = size - res.length;\n\twhile (i>0) {\n\t res.unshift(0);\n\t i--;\n\t}\n }\n return res;\n}\n\nfunction fromArray32(arr) { //returns a BigInt\n var res = BigInt(0);\n const radix = BigInt(0x100000000);\n for (let i = 0; i<arr.length; i++) {\n res = res*radix + BigInt(arr[i]);\n }\n return res;\n}\n\nfunction flatArray(a) {\n var res = [];\n fillArray(res, a);\n return res;\n\n function fillArray(res, a) {\n if (Array.isArray(a)) {\n for (let i=0; i<a.length; i++) {\n fillArray(res, a[i]);\n }\n } else {\n res.push(a);\n }\n }\n}\n\nfunction normalize(n, prime) {\n let res = BigInt(n) % prime\n if (res < 0) res += prime\n return res\n}\n\nfunction fnvHash(str) {\n const uint64_max = BigInt(2) ** BigInt(64);\n let hash = BigInt(\"0xCBF29CE484222325\");\n for (var i = 0; i < str.length; i++) {\n\thash ^= BigInt(str[i].charCodeAt());\n\thash *= BigInt(0x100000001B3);\n\thash %= uint64_max;\n }\n let shash = hash.toString(16);\n let n = 16 - shash.length;\n shash = '0'.repeat(n).concat(shash);\n return shash;\n}\n",null,null,null,null],"names":["isNode","wasmBindings","snarkjs","fs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAMA,QAAM,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI;AAEzE,IAAI,UAAU,GAAQ,IAAI;AAEnB,eAAe,QAAQ,CAAC,UAAyB,EAAA;AACtD,IAAA,IAAI,UAAU;AAAE,QAAA,OAAO,UAAU;IAEjC,IAAIA,QAAM,EAAE;QACV,IAAI,UAAU,EAAE;AACd,YAAAC,uBAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;QACnC;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,MAAM,OAAO,MAAM,CAAC;YACjC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAC7C,YAAA,MAAM,EAAE,GAAG,MAAM,OAAO,IAAI,CAAC;AAC7B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,wPAAe,CAAC,CAAC;AACxD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC;YAC1E,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;AACxC,YAAAA,uBAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC/B;QACA,UAAU,GAAGA,uBAAY;IAC3B;SAAO;QACL,IAAI,UAAU,EAAE;AACd,YAAAA,uBAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;QACnC;aAAO;AACL,YAAA,MAAMA,uBAAY,CAAC,OAAO,EAAE;QAC9B;QACA,UAAU,GAAGA,uBAAY;IAC3B;AAEA,IAAA,OAAO,UAAU;AACnB;;;;;;AChCA,IAAA,kBAAc,GAAG,eAAe,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE;;AAEvD,IAAI,OAAO,GAAG,OAAO,IAAI,EAAE;;AAE3B,IAAI,IAAI,UAAU;AAClB,IAAI,IAAI;AACR,CAAC,UAAU,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AAC7C,IAAA,CAAK,EAAE,OAAO,GAAG,EAAE;AACnB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC;AAC/E,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AACrB,IAAA;;AAEA,IAAI,IAAI,EAAE;;AAEV,IAAI,IAAI,MAAM,GAAG,EAAE;AACnB,IAAI,IAAI,MAAM,GAAG,EAAE;AACnB;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE;AAC/D,QAAQ,OAAO,EAAE;AACjB,YAAY,gBAAgB,GAAG,SAAS,IAAI,EAAE;AAC9C,EAAE,IAAI,GAAG;AACT,gBAAgB,IAAI,IAAI,IAAI,CAAC,EAAE;AAC/B,oBAAoB,GAAG,GAAG,qBAAqB;AAC/C,gBAAA,CAAiB,MAAM,IAAI,IAAI,IAAI,CAAC,EAAE;AACtC,oBAAoB,GAAG,GAAG,yBAAyB;AACnD,gBAAA,CAAiB,MAAM,IAAI,IAAI,IAAI,CAAC,EAAE;AACtC,oBAAoB,GAAG,GAAG,uBAAuB;AACjD,EAAA,CAAG,MAAM,IAAI,IAAI,IAAI,CAAC,EAAE;AACxB,oBAAoB,GAAG,GAAG,kBAAkB;AAC5C,EAAA,CAAG,MAAM,IAAI,IAAI,IAAI,CAAC,EAAE;AACxB,oBAAoB,GAAG,GAAG,sBAAsB;AAChD,EAAA,CAAG,MAAM,IAAI,IAAI,IAAI,CAAC,EAAE;AACxB,oBAAoB,GAAG,GAAG,+CAA+C;AACzE,EAAA,CAAG,MAAM;AACT,MAAM,GAAG,GAAG,kBAAkB;AAC9B,gBAAA;AACA,gBAAgB,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;AAC7C,YAAA,CAAa;AACb,KAAK,iBAAiB,GAAG,WAAW;AACpC,EAAE,MAAM,IAAI,UAAU,EAAE,GAAG,IAAI;AAC/B;AACA,KAAA,CAAM;AACN,KAAK,kBAAkB,GAAG,WAAW;AACrC,GAAG,MAAM,GAAG,GAAG,UAAU,EAAE;AAC3B;AACA,GAAG,IAAI,GAAG,KAAK,IAAI,EAAE;AACrB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,IAAI,MAAM,GAAG,EAAE;AACf,GAAA,CAAI,MAAM;AACV;AACA,IAAI,IAAI,MAAM,KAAK,EAAE,EAAE;AACvB,KAAK,MAAM,IAAI;AACf,IAAA;AACA;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,GAAA;AACA,KAAA,CAAM;AACN,KAAK,kBAAkB,GAAG,WAAW;AACrC,EAAE,mBAAmB,GAAG;AACxB,YAAA;;AAEA;AACA,KAAK,CAAC;;AAEN,IAAI,MAAM,WAAW;AACrB,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,EAAE,GAAG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,WAAW,CAAC;AACrD,IAAI,OAAO,EAAE;;AAEb,IAAI,SAAS,UAAU,GAAG;AAC1B,QAAQ,IAAI,OAAO,GAAG,EAAE;AACxB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE;AAC1C,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG;AACzB,KAAK,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AACtC,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE;AAC1C,CAAA;AACA,QAAQ,OAAO,OAAO;AACtB,IAAA;AACA;AACA,IAAI,SAAS,mBAAmB,IAAI;AACpC,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE;AAClE,CAAC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,qBAAqB,CAAC;AACnD,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE;AAC7C,KAAK,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC5E,CAAA;;AAEA;AACA,CAAC,IAAI,MAAM,KAAK,EAAE,EAAE;AACpB,EAAE,MAAM,IAAI;AACZ,CAAA;AACA;AACA,CAAC,MAAM,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxC,CAAA;;AAEA,CAAC;;AAED,MAAM,iBAAiB,CAAC;AACxB,IAAI,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE;AACvC,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;;AAEhC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE;AAClD,QAAQ,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE;;AAE3D,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;AAC3C,QAAQ,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7C,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;AACvC,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC3E,QAAA;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC;;AAErC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE;;AAEjE,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;AACtC,IAAA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE;AAC1C,IAAA;;AAEA,IAAI,MAAM,mBAAmB,CAAC,UAAU,EAAE,WAAW,EAAE;AACvD;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC,IAAI,MAAM,GAAG,EAAE;AAChB,CAAC,IAAI,KAAK,GAAG,IAAI,MAAM,EAAE;AACzB;AACA,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC;AACA,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACvC,CAAC,IAAI,aAAa,GAAG,CAAC;AACtB,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;AAC7B,YAAY,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACnD,YAAY,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AACpD,YAAY,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5C,KAAK,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;AAC1E,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC;AACxB,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;AAC5C,KAAA;AACA,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE;AACnC,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,mCAAmC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9D,KAAA;AACA,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE;AACnC,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5D,KAAA;AACA,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,gBAAgB,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG;AAC9E,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;AAC/C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,EAAA;AACA,EAAE,IAAI;AACN,oBAAoB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACtE,MAAM,aAAa,EAAE;AACrB,EAAA,CAAG,CAAC,OAAO,GAAG,EAAE;AAChB;AACA,oBAAoB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AACxC,EAAA;AACA,YAAA;;AAEA,QAAA,CAAS,CAAC;AACV,CAAC,IAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE;AAC3D,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,mCAAmC,EAAE,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AAC1H,CAAA;AACA,IAAA;;AAEA,IAAI,MAAM,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE;;AAE/C,QAAQ,MAAM,CAAC,GAAG,EAAE;AACpB,QAAQ,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC;;AAE1D,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,KAAK,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1C,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC3E,YAAA;AACA,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACpC,QAAA;;AAEA,QAAQ,OAAO,CAAC;AAChB,IAAA;AACA;;AAEA,IAAI,MAAM,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE;;AAElD,QAAQ,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AACjE,CAAC,MAAM,IAAI,GAAG,KAAK,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;AAC7C,QAAQ,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC;;AAE1D,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG;AAC3B,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;AAC3C,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC7D,YAAA;AACA,QAAA;;AAEA,CAAC,OAAO,IAAI;AACZ,IAAA;AACA;;AAEA,IAAI,MAAM,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE;;AAE/C,QAAQ,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7E,CAAC,MAAM,IAAI,GAAG,KAAK,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;AAC7C,QAAQ,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC;AAC1D;AACA;AACA,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;AAC3B,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;AAC3B,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;AAC3B,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;;AAE3B;AACA,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;;AAEd;AACA,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;;AAEd;AACA,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;;AAEd,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACtB;AACA,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE;AAChC,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC1D,QAAQ,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAChE,QAAQ,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;;AAEjE;AACA,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;;AAEf;AACA,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;;AAEpC,CAAC,IAAI,GAAG,GAAG,CAAC;AACZ,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;AACvC,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAChE,QAAA;AACA,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG;;AAEhB;AACA,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW;AAC/B,CAAC,GAAG,EAAE;;AAEN;AACA,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAChB,CAAC,GAAG,EAAE;;AAEN;AACA,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW;AAC7C,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC1D,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClE,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;;AAErE,CAAC,GAAG,IAAI,CAAC;AACT,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;AAC3C,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC7D,YAAA;AACA,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG;AACpB,QAAA;;AAEA,CAAC,OAAO,IAAI;AACZ,IAAA;;AAEA;;;AAGA,SAAS,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AAChD,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC9B,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,KAAK,IAAI,UAAU,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG;AAC5C,KAAK,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,CAAA;AACA,IAAA,CAAK,MAAM;AACX,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AACnC,IAAA;AACA;;AAEA,SAAS,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;AAC5C,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC9B,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;AACzB,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACxB,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC,CAAC;AACpE,EAAA;AACA,KAAA;AACA,KAAK,IAAI,CAAC,IAAI,QAAQ,EAAE;AACxB,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AACzC,KAAA,CAAM,MAAM;AACZ,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK;AACxB,KAAA;AACA,CAAA,CAAE,MAAM;AACR,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK;AAC3B,CAAA;AACA,IAAA,CAAK,MAAM,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;AACzC,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACvC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;AACtB,KAAK,IAAI,UAAU,GAAG,MAAM,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC;AACxD,KAAK,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAA,CAAE,CAAC;AACH,IAAA,CAAK,MAAM;AACX,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK;AACvB,IAAA;AACA;;AAEA,SAAS,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE;AAC7B,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;AACnB,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC,IAAI,OAAO,GAAG,EAAE;AAChB,QAAQ,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;AACzC,QAAQ,GAAG,GAAG,GAAG,GAAG,KAAK;AACzB,IAAA;AACA,IAAI,IAAI,IAAI,EAAE;AACd,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM;AAC1B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACb,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACnB,KAAK,CAAC,EAAE;AACR,CAAA;AACA,IAAA;AACA,IAAI,OAAO,GAAG;AACd;;AAEA,SAAS,WAAW,CAAC,GAAG,EAAE;AAC1B,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,QAAQ,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxC,IAAA;AACA,IAAI,OAAO,GAAG;AACd;;AAEA,SAAS,SAAS,CAAC,CAAC,EAAE;AACtB,IAAI,IAAI,GAAG,GAAG,EAAE;AAChB,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;AACrB,IAAI,OAAO,GAAG;;AAEd,IAAI,SAAS,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE;AAC/B,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC9B,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,gBAAgB,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,YAAA;AACA,QAAA,CAAS,MAAM;AACf,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACvB,QAAA;AACA,IAAA;AACA;;AAEA,SAAS,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE;AAC7B,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG;AAC1B,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI;AACxB,IAAI,OAAO;AACX;;AAEA,SAAS,OAAO,CAAC,GAAG,EAAE;AACtB,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;AAC9C,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC3C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACpC,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC;AAC9B,CAAC,IAAI,IAAI,UAAU;AACnB,IAAA;AACA,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM;AAC7B,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AACvC,IAAI,OAAO,KAAK;AAChB;;;;ACzXA,MAAMD,QAAM,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI;AAElE,eAAe,eAAe,CACnC,KAAiB,EACjB,WAA0B,EAAA;AAE1B,IAAA,IAAI,UAAwB;AAC5B,IAAA,IAAI,EAAO;IAEX,IAAIA,QAAM,EAAE;AACV,QAAA,MAAM,EAAE,GAAG,MAAM,OAAO,IAAI,CAAC;AAC7B,QAAA,MAAM,QAAQ,GAAG,MAAM,OAAO,MAAM,CAAC;QACrC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAC7C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,wPAAe,CAAC,CAAC;AAC5D,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC;AAEvD,QAAA,EAAE,GAAG,EAAE,OAAO,EAAE,uBAAuB,EAAE;QAEzC,IAAI,WAAW,EAAE;YACf,UAAU,GAAG,WAAW;QAC1B;aAAO;YACL,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;YACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC5B,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAA,qBAAA,CAAuB,CAAC;YAC/E;AACA,YAAA,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;QACxC;IACF;SAAO;QACL,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,KAAK,CACb,kEAAkE;AAClE,gBAAA,kEAAkE,CACnE;QACH;QACA,UAAU,GAAG,WAAW;AACxB,QAAA,EAAE,GAAG,EAAE,OAAO,EAAE,uBAAuB,EAAE;IAC3C;IAEA,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C,MAAM,IAAI,GAAe,MAAM,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC;AACpE,IAAA,OAAO,IAAI;AACb;;AC5CA;AAGA,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI;AAOzE;;;AAGG;AACH,SAAS,YAAY,CAAC,GAAiB,EAAA;IACrC,IAAI,GAAG,YAAY,UAAU;AAAE,QAAA,OAAO,GAAG;IACzC,IAAI,GAAG,YAAY,WAAW;AAAE,QAAA,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC;AAC1D,IAAA,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;AACnE;AAEO,eAAe,aAAa,CACjC,IAAgB,EAChB,IAAmB,EAAA;AAEnB,IAAA,IAAI,QAAoB;IAExB,IAAI,IAAI,EAAE;AACR,QAAA,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC;IAC/B;SAAO,IAAI,MAAM,EAAE;AACjB,QAAA,MAAM,EAAE,GAAG,MAAM,OAAO,IAAI,CAAC;AAC7B,QAAA,MAAM,QAAQ,GAAG,MAAM,OAAO,MAAM,CAAC;QACrC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,OAAO,KAAK,CAAC;AAC7C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,wPAAe,CAAC,CAAC;AAC5D,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC;QAEzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAA,qBAAA,CAAuB,CAAC;QAC9E;QAEA,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC5C,QAAA,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC;IACrC;SAAO;QACL,MAAM,IAAI,KAAK,CACb,2DAA2D;AAC3D,YAAA,0DAA0D,CAC3D;IACH;AAEA,IAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAoB,CAAC;AAEnD,IAAA,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,MAAME,kBAAO,CAAC,OAAO,CAAC,KAAK,CAC1D,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAwB,EAAE,EAC/C,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAwB,EAAE,CAChD;AAED,IAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE;AACjC;;MCnDa,cAAc,CAAA;IAIzB,WAAA,CAAoB,IAAS,EAAE,OAAmB,EAAA;AAChD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;AAEA;;;;;;;;;;;;AAYG;AACH,IAAA,aAAa,IAAI,CAAC,OAAoB,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE;QAC1B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AAC5C,QAAA,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC;AAEA;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IACjC;AAEA;;AAEG;IACH,uBAAuB,CAAC,IAAc,EAAE,KAAgB,EAAA;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACvC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC;AACzE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;IAC/B;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpD;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,aAAuB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC7D;AAEA;;;AAGG;AACH,IAAA,MAAM,iBAAiB,CAAC,IAAc,EAAE,KAAgB,EAAA;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC5D,QAAA,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACxE,QAAA,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AAElD,QAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE;IAClC;AAEA;;;;AAIG;AACH,IAAA,sBAAsB,CAAC,SAAiB,EAAA;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;IACpD;AACD;;AClFD,eAAe,IAAI,GAAA;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAElC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACjE,QAAA,UAAU,EAAE;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;AAEA,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;AAEvB,IAAA,IAAI,OAAO,KAAK,UAAU,EAAE;QAC1B,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC;AAAO,SAAA,IAAI,OAAO,KAAK,UAAU,EAAE;QACjC,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC;SAAO;AACL,QAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAA,CAAE,CAAC;AAC5C,QAAA,UAAU,EAAE;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;;AAGA,IAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjB;AAEA,SAAS,UAAU,GAAA;IACjB,OAAO,CAAC,KAAK,CAAC,CAAA;;;;;;;;;;;;;;AAcf,CAAA,CAAC;AACF;AAEA,SAAS,SAAS,CAAC,IAAc,EAAA;IAC/B,MAAM,MAAM,GAA2B,EAAE;AACzC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACpC,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;AACnB,gBAAA,CAAC,EAAE;YACL;iBAAO;AACL,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;YACtB;QACF;AAAO,aAAA,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;YAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B;IACF;AACA,IAAA,OAAO,MAAM;AACf;AAEA,eAAe,cAAc,CAAC,IAAc,EAAA;AAC1C,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;AAC9B,IAAA,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE;AACvC,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,EAAE;AAE/B,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAE1C,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE;QACpBC,aAAE,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,CAAA,eAAA,EAAkB,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,cAAc,CAAA,CAAE,CAAC;IACrD;SAAO;AACL,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACnB;AACF;AAEA,eAAe,cAAc,CAAC,IAAc,EAAA;AAC1C,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;AAE9B,IAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACnB,QAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC;AACjD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;AACA,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACpB,QAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC;AAClD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;AAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAACA,aAAE,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AACrE,IAAA,MAAM,IAAI,GAAa,QAAQ,CAAC,IAAI,IAAI,QAAQ;AAChD,IAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK,CAACA,aAAE,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AAE9E,IAAA,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE;IACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;;AAGvD,IAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;;AAG9B,IAAA,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE;AAC1B,QAAAA,aAAE,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,CAAA,kBAAA,EAAqB,MAAM,CAAC,cAAc,CAAC,CAAA,CAAE,CAAC;IAC9D;AACA,IAAA,IAAI,MAAM,CAAC,eAAe,CAAC,EAAE;AAC3B,QAAAA,aAAE,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,CAAA,2BAAA,EAA8B,MAAM,CAAC,eAAe,CAAC,CAAA,CAAE,CAAC;IACxE;AACF;AAEA,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;IACnB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;AAC3C,IAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC;;"}
|
package/dist/index.d.ts
ADDED
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
import * as wasmBindings from 'privacy-pool-client-sdk/pkg/client_sdk_wasm.js';
|
|
2
|
+
import * as snarkjs from 'snarkjs';
|
|
3
|
+
|
|
4
|
+
const isNode$2 = typeof process !== 'undefined' && !!process.versions?.node;
|
|
5
|
+
let wasmModule = null;
|
|
6
|
+
async function loadWasm(wasmBinary) {
|
|
7
|
+
if (wasmModule)
|
|
8
|
+
return wasmModule;
|
|
9
|
+
if (isNode$2) {
|
|
10
|
+
if (wasmBinary) {
|
|
11
|
+
wasmBindings.initSync(wasmBinary);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
const path = await import('path');
|
|
15
|
+
const { fileURLToPath } = await import('url');
|
|
16
|
+
const fs = await import('fs');
|
|
17
|
+
const dir = path.dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
const wasmPath = path.resolve(dir, '..', 'pkg', 'client_sdk_wasm_bg.wasm');
|
|
19
|
+
const buffer = fs.readFileSync(wasmPath);
|
|
20
|
+
wasmBindings.initSync(buffer);
|
|
21
|
+
}
|
|
22
|
+
wasmModule = wasmBindings;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
if (wasmBinary) {
|
|
26
|
+
wasmBindings.initSync(wasmBinary);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
await wasmBindings.default();
|
|
30
|
+
}
|
|
31
|
+
wasmModule = wasmBindings;
|
|
32
|
+
}
|
|
33
|
+
return wasmModule;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function getDefaultExportFromCjs (x) {
|
|
37
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
var witness_calculator = async function builder(code, options) {
|
|
41
|
+
|
|
42
|
+
options = options || {};
|
|
43
|
+
|
|
44
|
+
let wasmModule;
|
|
45
|
+
try {
|
|
46
|
+
wasmModule = await WebAssembly.compile(code);
|
|
47
|
+
} catch (err) {
|
|
48
|
+
console.log(err);
|
|
49
|
+
console.log("\nTry to run circom --c in order to generate c++ code instead\n");
|
|
50
|
+
throw new Error(err);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
let wc;
|
|
54
|
+
|
|
55
|
+
let errStr = "";
|
|
56
|
+
let msgStr = "";
|
|
57
|
+
|
|
58
|
+
const instance = await WebAssembly.instantiate(wasmModule, {
|
|
59
|
+
runtime: {
|
|
60
|
+
exceptionHandler : function(code) {
|
|
61
|
+
let err;
|
|
62
|
+
if (code == 1) {
|
|
63
|
+
err = "Signal not found.\n";
|
|
64
|
+
} else if (code == 2) {
|
|
65
|
+
err = "Too many signals set.\n";
|
|
66
|
+
} else if (code == 3) {
|
|
67
|
+
err = "Signal already set.\n";
|
|
68
|
+
} else if (code == 4) {
|
|
69
|
+
err = "Assert Failed.\n";
|
|
70
|
+
} else if (code == 5) {
|
|
71
|
+
err = "Not enough memory.\n";
|
|
72
|
+
} else if (code == 6) {
|
|
73
|
+
err = "Input signal array access exceeds the size.\n";
|
|
74
|
+
} else {
|
|
75
|
+
err = "Unknown error.\n";
|
|
76
|
+
}
|
|
77
|
+
throw new Error(err + errStr);
|
|
78
|
+
},
|
|
79
|
+
printErrorMessage : function() {
|
|
80
|
+
errStr += getMessage() + "\n";
|
|
81
|
+
// console.error(getMessage());
|
|
82
|
+
},
|
|
83
|
+
writeBufferMessage : function() {
|
|
84
|
+
const msg = getMessage();
|
|
85
|
+
// Any calls to `log()` will always end with a `\n`, so that's when we print and reset
|
|
86
|
+
if (msg === "\n") {
|
|
87
|
+
console.log(msgStr);
|
|
88
|
+
msgStr = "";
|
|
89
|
+
} else {
|
|
90
|
+
// If we've buffered other content, put a space in between the items
|
|
91
|
+
if (msgStr !== "") {
|
|
92
|
+
msgStr += " ";
|
|
93
|
+
}
|
|
94
|
+
// Then append the message to the message we are creating
|
|
95
|
+
msgStr += msg;
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
showSharedRWMemory : function() {
|
|
99
|
+
printSharedRWMemory ();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
const sanityCheck =
|
|
106
|
+
options;
|
|
107
|
+
// options &&
|
|
108
|
+
// (
|
|
109
|
+
// options.sanityCheck ||
|
|
110
|
+
// options.logGetSignal ||
|
|
111
|
+
// options.logSetSignal ||
|
|
112
|
+
// options.logStartComponent ||
|
|
113
|
+
// options.logFinishComponent
|
|
114
|
+
// );
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
wc = new WitnessCalculator(instance, sanityCheck);
|
|
118
|
+
return wc;
|
|
119
|
+
|
|
120
|
+
function getMessage() {
|
|
121
|
+
var message = "";
|
|
122
|
+
var c = instance.exports.getMessageChar();
|
|
123
|
+
while ( c != 0 ) {
|
|
124
|
+
message += String.fromCharCode(c);
|
|
125
|
+
c = instance.exports.getMessageChar();
|
|
126
|
+
}
|
|
127
|
+
return message;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function printSharedRWMemory () {
|
|
131
|
+
const shared_rw_memory_size = instance.exports.getFieldNumLen32();
|
|
132
|
+
const arr = new Uint32Array(shared_rw_memory_size);
|
|
133
|
+
for (let j=0; j<shared_rw_memory_size; j++) {
|
|
134
|
+
arr[shared_rw_memory_size-1-j] = instance.exports.readSharedRWMemory(j);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// If we've buffered other content, put a space in between the items
|
|
138
|
+
if (msgStr !== "") {
|
|
139
|
+
msgStr += " ";
|
|
140
|
+
}
|
|
141
|
+
// Then append the value to the message we are creating
|
|
142
|
+
msgStr += (fromArray32(arr).toString());
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
class WitnessCalculator {
|
|
148
|
+
constructor(instance, sanityCheck) {
|
|
149
|
+
this.instance = instance;
|
|
150
|
+
|
|
151
|
+
this.version = this.instance.exports.getVersion();
|
|
152
|
+
this.n32 = this.instance.exports.getFieldNumLen32();
|
|
153
|
+
|
|
154
|
+
this.instance.exports.getRawPrime();
|
|
155
|
+
const arr = new Uint32Array(this.n32);
|
|
156
|
+
for (let i=0; i<this.n32; i++) {
|
|
157
|
+
arr[this.n32-1-i] = this.instance.exports.readSharedRWMemory(i);
|
|
158
|
+
}
|
|
159
|
+
this.prime = fromArray32(arr);
|
|
160
|
+
|
|
161
|
+
this.witnessSize = this.instance.exports.getWitnessSize();
|
|
162
|
+
|
|
163
|
+
this.sanityCheck = sanityCheck;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
circom_version() {
|
|
167
|
+
return this.instance.exports.getVersion();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
async _doCalculateWitness(input_orig, sanityCheck) {
|
|
171
|
+
//input is assumed to be a map from signals to arrays of bigints
|
|
172
|
+
this.instance.exports.init((this.sanityCheck || sanityCheck) ? 1 : 0);
|
|
173
|
+
let prefix = "";
|
|
174
|
+
var input = new Object();
|
|
175
|
+
//console.log("Input: ", input_orig);
|
|
176
|
+
qualify_input(prefix,input_orig,input);
|
|
177
|
+
//console.log("Input after: ",input);
|
|
178
|
+
const keys = Object.keys(input);
|
|
179
|
+
var input_counter = 0;
|
|
180
|
+
keys.forEach( (k) => {
|
|
181
|
+
const h = fnvHash(k);
|
|
182
|
+
const hMSB = parseInt(h.slice(0,8), 16);
|
|
183
|
+
const hLSB = parseInt(h.slice(8,16), 16);
|
|
184
|
+
const fArr = flatArray(input[k]);
|
|
185
|
+
let signalSize = this.instance.exports.getInputSignalSize(hMSB, hLSB);
|
|
186
|
+
if (signalSize < 0){
|
|
187
|
+
throw new Error(`Signal ${k} not found\n`);
|
|
188
|
+
}
|
|
189
|
+
if (fArr.length < signalSize) {
|
|
190
|
+
throw new Error(`Not enough values for input signal ${k}\n`);
|
|
191
|
+
}
|
|
192
|
+
if (fArr.length > signalSize) {
|
|
193
|
+
throw new Error(`Too many values for input signal ${k}\n`);
|
|
194
|
+
}
|
|
195
|
+
for (let i=0; i<fArr.length; i++) {
|
|
196
|
+
const arrFr = toArray32(normalize(fArr[i],this.prime),this.n32);
|
|
197
|
+
for (let j=0; j<this.n32; j++) {
|
|
198
|
+
this.instance.exports.writeSharedRWMemory(j,arrFr[this.n32-1-j]);
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
this.instance.exports.setInputSignal(hMSB, hLSB,i);
|
|
202
|
+
input_counter++;
|
|
203
|
+
} catch (err) {
|
|
204
|
+
// console.log(`After adding signal ${i} of ${k}`)
|
|
205
|
+
throw new Error(err);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
});
|
|
210
|
+
if (input_counter < this.instance.exports.getInputSize()) {
|
|
211
|
+
throw new Error(`Not all inputs have been set. Only ${input_counter} out of ${this.instance.exports.getInputSize()}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
async calculateWitness(input, sanityCheck) {
|
|
216
|
+
|
|
217
|
+
const w = [];
|
|
218
|
+
await this._doCalculateWitness(input, sanityCheck);
|
|
219
|
+
|
|
220
|
+
for (let i=0; i<this.witnessSize; i++) {
|
|
221
|
+
this.instance.exports.getWitness(i);
|
|
222
|
+
const arr = new Uint32Array(this.n32);
|
|
223
|
+
for (let j=0; j<this.n32; j++) {
|
|
224
|
+
arr[this.n32-1-j] = this.instance.exports.readSharedRWMemory(j);
|
|
225
|
+
}
|
|
226
|
+
w.push(fromArray32(arr));
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return w;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
async calculateBinWitness(input, sanityCheck) {
|
|
234
|
+
|
|
235
|
+
const buff32 = new Uint32Array(this.witnessSize*this.n32);
|
|
236
|
+
const buff = new Uint8Array( buff32.buffer);
|
|
237
|
+
await this._doCalculateWitness(input, sanityCheck);
|
|
238
|
+
|
|
239
|
+
for (let i=0; i<this.witnessSize; i++) {
|
|
240
|
+
this.instance.exports.getWitness(i);
|
|
241
|
+
const pos = i*this.n32;
|
|
242
|
+
for (let j=0; j<this.n32; j++) {
|
|
243
|
+
buff32[pos+j] = this.instance.exports.readSharedRWMemory(j);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return buff;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
async calculateWTNSBin(input, sanityCheck) {
|
|
252
|
+
|
|
253
|
+
const buff32 = new Uint32Array(this.witnessSize*this.n32+this.n32+11);
|
|
254
|
+
const buff = new Uint8Array( buff32.buffer);
|
|
255
|
+
await this._doCalculateWitness(input, sanityCheck);
|
|
256
|
+
|
|
257
|
+
//"wtns"
|
|
258
|
+
buff[0] = "w".charCodeAt(0);
|
|
259
|
+
buff[1] = "t".charCodeAt(0);
|
|
260
|
+
buff[2] = "n".charCodeAt(0);
|
|
261
|
+
buff[3] = "s".charCodeAt(0);
|
|
262
|
+
|
|
263
|
+
//version 2
|
|
264
|
+
buff32[1] = 2;
|
|
265
|
+
|
|
266
|
+
//number of sections: 2
|
|
267
|
+
buff32[2] = 2;
|
|
268
|
+
|
|
269
|
+
//id section 1
|
|
270
|
+
buff32[3] = 1;
|
|
271
|
+
|
|
272
|
+
const n8 = this.n32*4;
|
|
273
|
+
//id section 1 length in 64bytes
|
|
274
|
+
const idSection1length = 8 + n8;
|
|
275
|
+
const idSection1lengthHex = idSection1length.toString(16);
|
|
276
|
+
buff32[4] = parseInt(idSection1lengthHex.slice(0,8), 16);
|
|
277
|
+
buff32[5] = parseInt(idSection1lengthHex.slice(8,16), 16);
|
|
278
|
+
|
|
279
|
+
//this.n32
|
|
280
|
+
buff32[6] = n8;
|
|
281
|
+
|
|
282
|
+
//prime number
|
|
283
|
+
this.instance.exports.getRawPrime();
|
|
284
|
+
|
|
285
|
+
var pos = 7;
|
|
286
|
+
for (let j=0; j<this.n32; j++) {
|
|
287
|
+
buff32[pos+j] = this.instance.exports.readSharedRWMemory(j);
|
|
288
|
+
}
|
|
289
|
+
pos += this.n32;
|
|
290
|
+
|
|
291
|
+
// witness size
|
|
292
|
+
buff32[pos] = this.witnessSize;
|
|
293
|
+
pos++;
|
|
294
|
+
|
|
295
|
+
//id section 2
|
|
296
|
+
buff32[pos] = 2;
|
|
297
|
+
pos++;
|
|
298
|
+
|
|
299
|
+
// section 2 length
|
|
300
|
+
const idSection2length = n8*this.witnessSize;
|
|
301
|
+
const idSection2lengthHex = idSection2length.toString(16);
|
|
302
|
+
buff32[pos] = parseInt(idSection2lengthHex.slice(0,8), 16);
|
|
303
|
+
buff32[pos+1] = parseInt(idSection2lengthHex.slice(8,16), 16);
|
|
304
|
+
|
|
305
|
+
pos += 2;
|
|
306
|
+
for (let i=0; i<this.witnessSize; i++) {
|
|
307
|
+
this.instance.exports.getWitness(i);
|
|
308
|
+
for (let j=0; j<this.n32; j++) {
|
|
309
|
+
buff32[pos+j] = this.instance.exports.readSharedRWMemory(j);
|
|
310
|
+
}
|
|
311
|
+
pos += this.n32;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
return buff;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
function qualify_input_list(prefix,input,input1){
|
|
321
|
+
if (Array.isArray(input)) {
|
|
322
|
+
for (let i = 0; i<input.length; i++) {
|
|
323
|
+
let new_prefix = prefix + "[" + i + "]";
|
|
324
|
+
qualify_input_list(new_prefix,input[i],input1);
|
|
325
|
+
}
|
|
326
|
+
} else {
|
|
327
|
+
qualify_input(prefix,input,input1);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
function qualify_input(prefix,input,input1) {
|
|
332
|
+
if (Array.isArray(input)) {
|
|
333
|
+
let a = flatArray(input);
|
|
334
|
+
if (a.length > 0) {
|
|
335
|
+
let t = typeof a[0];
|
|
336
|
+
for (let i = 1; i<a.length; i++) {
|
|
337
|
+
if (typeof a[i] != t){
|
|
338
|
+
throw new Error(`Types are not the same in the key ${prefix}`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
if (t == "object") {
|
|
342
|
+
qualify_input_list(prefix,input,input1);
|
|
343
|
+
} else {
|
|
344
|
+
input1[prefix] = input;
|
|
345
|
+
}
|
|
346
|
+
} else {
|
|
347
|
+
input1[prefix] = input;
|
|
348
|
+
}
|
|
349
|
+
} else if (typeof input == "object") {
|
|
350
|
+
const keys = Object.keys(input);
|
|
351
|
+
keys.forEach( (k) => {
|
|
352
|
+
let new_prefix = prefix == ""? k : prefix + "." + k;
|
|
353
|
+
qualify_input(new_prefix,input[k],input1);
|
|
354
|
+
});
|
|
355
|
+
} else {
|
|
356
|
+
input1[prefix] = input;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
function toArray32(rem,size) {
|
|
361
|
+
const res = []; //new Uint32Array(size); //has no unshift
|
|
362
|
+
const radix = BigInt(0x100000000);
|
|
363
|
+
while (rem) {
|
|
364
|
+
res.unshift( Number(rem % radix));
|
|
365
|
+
rem = rem / radix;
|
|
366
|
+
}
|
|
367
|
+
if (size) {
|
|
368
|
+
var i = size - res.length;
|
|
369
|
+
while (i>0) {
|
|
370
|
+
res.unshift(0);
|
|
371
|
+
i--;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return res;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
function fromArray32(arr) { //returns a BigInt
|
|
378
|
+
var res = BigInt(0);
|
|
379
|
+
const radix = BigInt(0x100000000);
|
|
380
|
+
for (let i = 0; i<arr.length; i++) {
|
|
381
|
+
res = res*radix + BigInt(arr[i]);
|
|
382
|
+
}
|
|
383
|
+
return res;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
function flatArray(a) {
|
|
387
|
+
var res = [];
|
|
388
|
+
fillArray(res, a);
|
|
389
|
+
return res;
|
|
390
|
+
|
|
391
|
+
function fillArray(res, a) {
|
|
392
|
+
if (Array.isArray(a)) {
|
|
393
|
+
for (let i=0; i<a.length; i++) {
|
|
394
|
+
fillArray(res, a[i]);
|
|
395
|
+
}
|
|
396
|
+
} else {
|
|
397
|
+
res.push(a);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
function normalize(n, prime) {
|
|
403
|
+
let res = BigInt(n) % prime;
|
|
404
|
+
if (res < 0) res += prime;
|
|
405
|
+
return res
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
function fnvHash(str) {
|
|
409
|
+
const uint64_max = BigInt(2) ** BigInt(64);
|
|
410
|
+
let hash = BigInt("0xCBF29CE484222325");
|
|
411
|
+
for (var i = 0; i < str.length; i++) {
|
|
412
|
+
hash ^= BigInt(str[i].charCodeAt());
|
|
413
|
+
hash *= BigInt(0x100000001B3);
|
|
414
|
+
hash %= uint64_max;
|
|
415
|
+
}
|
|
416
|
+
let shash = hash.toString(16);
|
|
417
|
+
let n = 16 - shash.length;
|
|
418
|
+
shash = '0'.repeat(n).concat(shash);
|
|
419
|
+
return shash;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
var witnessCalculatorModule = /*@__PURE__*/getDefaultExportFromCjs(witness_calculator);
|
|
423
|
+
|
|
424
|
+
const isNode$1 = typeof process !== 'undefined' && !!process.versions?.node;
|
|
425
|
+
async function generateWitness(input, circuitWasm) {
|
|
426
|
+
let wasmBuffer;
|
|
427
|
+
let wc;
|
|
428
|
+
if (isNode$1) {
|
|
429
|
+
const fs = await import('fs');
|
|
430
|
+
const nodePath = await import('path');
|
|
431
|
+
const { fileURLToPath } = await import('url');
|
|
432
|
+
const dir = nodePath.dirname(fileURLToPath(import.meta.url));
|
|
433
|
+
const assetsDir = nodePath.resolve(dir, '..', 'assets');
|
|
434
|
+
wc = { default: witnessCalculatorModule };
|
|
435
|
+
if (circuitWasm) {
|
|
436
|
+
wasmBuffer = circuitWasm;
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
const wasmPath = nodePath.resolve(assetsDir, 'main.wasm');
|
|
440
|
+
if (!fs.existsSync(wasmPath)) {
|
|
441
|
+
throw new Error(`Circuit WASM not found at ${wasmPath}. Run build.sh first.`);
|
|
442
|
+
}
|
|
443
|
+
wasmBuffer = fs.readFileSync(wasmPath);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
if (!circuitWasm) {
|
|
448
|
+
throw new Error('In browser, you must pass circuitWasm to PrivacyPoolSDK.init(). ' +
|
|
449
|
+
'Load the circuit WASM file via fetch() and pass the ArrayBuffer.');
|
|
450
|
+
}
|
|
451
|
+
wasmBuffer = circuitWasm;
|
|
452
|
+
wc = { default: witnessCalculatorModule };
|
|
453
|
+
}
|
|
454
|
+
const calculator = await wc.default(wasmBuffer);
|
|
455
|
+
const wtns = await calculator.calculateWTNSBin(input, 0);
|
|
456
|
+
return wtns;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// @ts-ignore - snarkjs types
|
|
460
|
+
const isNode = typeof process !== 'undefined' && !!process.versions?.node;
|
|
461
|
+
/**
|
|
462
|
+
* Normalize BufferSource to Uint8Array. Required for @iden3/binfileutils/fastfile:
|
|
463
|
+
* they read via data.buffer and data.byteOffset, which ArrayBuffer does not have.
|
|
464
|
+
*/
|
|
465
|
+
function toUint8Array(src) {
|
|
466
|
+
if (src instanceof Uint8Array)
|
|
467
|
+
return src;
|
|
468
|
+
if (src instanceof ArrayBuffer)
|
|
469
|
+
return new Uint8Array(src);
|
|
470
|
+
return new Uint8Array(src.buffer, src.byteOffset, src.byteLength);
|
|
471
|
+
}
|
|
472
|
+
async function generateProof(wtns, zkey) {
|
|
473
|
+
let zkeyData;
|
|
474
|
+
if (zkey) {
|
|
475
|
+
zkeyData = toUint8Array(zkey);
|
|
476
|
+
}
|
|
477
|
+
else if (isNode) {
|
|
478
|
+
const fs = await import('fs');
|
|
479
|
+
const nodePath = await import('path');
|
|
480
|
+
const { fileURLToPath } = await import('url');
|
|
481
|
+
const dir = nodePath.dirname(fileURLToPath(import.meta.url));
|
|
482
|
+
const zkeyPath = nodePath.resolve(dir, '..', 'assets', 'main_final.zkey');
|
|
483
|
+
if (!fs.existsSync(zkeyPath)) {
|
|
484
|
+
throw new Error(`Proving key not found at ${zkeyPath}. Run build.sh first.`);
|
|
485
|
+
}
|
|
486
|
+
const zkeyBuffer = fs.readFileSync(zkeyPath);
|
|
487
|
+
zkeyData = toUint8Array(zkeyBuffer);
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
throw new Error('In browser, you must pass zkey to PrivacyPoolSDK.init(). ' +
|
|
491
|
+
'Load the zkey file via fetch() and pass the ArrayBuffer.');
|
|
492
|
+
}
|
|
493
|
+
const wtnsData = toUint8Array(wtns);
|
|
494
|
+
const { proof, publicSignals } = await snarkjs.groth16.prove({ type: 'mem', data: zkeyData }, { type: 'mem', data: wtnsData });
|
|
495
|
+
return { proof, publicSignals };
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
class PrivacyPoolSDK {
|
|
499
|
+
constructor(wasm, options) {
|
|
500
|
+
this.wasm = wasm;
|
|
501
|
+
this.options = options;
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Initialize the SDK by loading WASM modules.
|
|
505
|
+
*
|
|
506
|
+
* In Node.js, assets are loaded from the filesystem automatically.
|
|
507
|
+
* In browser, pass pre-loaded buffers via options:
|
|
508
|
+
* ```ts
|
|
509
|
+
* const sdk = await PrivacyPoolSDK.init({
|
|
510
|
+
* wasmBinary: await fetch('/pkg/client_sdk_wasm_bg.wasm').then(r => r.arrayBuffer()),
|
|
511
|
+
* circuitWasm: await fetch('/assets/main.wasm').then(r => r.arrayBuffer()),
|
|
512
|
+
* zkey: await fetch('/assets/main_final.zkey').then(r => r.arrayBuffer()),
|
|
513
|
+
* });
|
|
514
|
+
* ```
|
|
515
|
+
*/
|
|
516
|
+
static async init(options) {
|
|
517
|
+
const opts = options ?? {};
|
|
518
|
+
const wasm = await loadWasm(opts.wasmBinary);
|
|
519
|
+
return new PrivacyPoolSDK(wasm, opts);
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Generate a new coin with random nullifier and secret.
|
|
523
|
+
*/
|
|
524
|
+
generateCoin() {
|
|
525
|
+
return this.wasm.generateCoin();
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Generate withdrawal SNARK input from coin data and state.
|
|
529
|
+
*/
|
|
530
|
+
generateWithdrawalInput(coin, state) {
|
|
531
|
+
const coinJson = JSON.stringify(coin);
|
|
532
|
+
const stateJson = JSON.stringify(state);
|
|
533
|
+
const resultJson = this.wasm.generateWithdrawalInput(coinJson, stateJson);
|
|
534
|
+
return JSON.parse(resultJson);
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Convert a snarkjs proof JSON to hex bytes for Soroban.
|
|
538
|
+
*/
|
|
539
|
+
proofToHex(proof) {
|
|
540
|
+
return this.wasm.proofToHex(JSON.stringify(proof));
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Convert snarkjs public signals to hex bytes for Soroban.
|
|
544
|
+
*/
|
|
545
|
+
publicToHex(publicSignals) {
|
|
546
|
+
return this.wasm.publicToHex(JSON.stringify(publicSignals));
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* Full withdrawal flow: generate input -> witness -> proof -> serialize.
|
|
550
|
+
* Returns proof_hex and public_hex ready for Soroban contract call.
|
|
551
|
+
*/
|
|
552
|
+
async prepareWithdrawal(coin, state) {
|
|
553
|
+
const snarkInput = this.generateWithdrawalInput(coin, state);
|
|
554
|
+
const wtns = await generateWitness(snarkInput, this.options.circuitWasm);
|
|
555
|
+
const { proof, publicSignals } = await generateProof(wtns, this.options.zkey);
|
|
556
|
+
const proof_hex = this.proofToHex(proof);
|
|
557
|
+
const public_hex = this.publicToHex(publicSignals);
|
|
558
|
+
return { proof_hex, public_hex };
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* Calculate nullifier hash: Poseidon(nullifier)
|
|
562
|
+
* @param nullifier Nullifier decimal string from coin data
|
|
563
|
+
* @returns Hex string (0x...) of the hash bytes
|
|
564
|
+
*/
|
|
565
|
+
calculateNullifierHash(nullifier) {
|
|
566
|
+
return this.wasm.calculateNullifierHash(nullifier);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
export { PrivacyPoolSDK };
|
|
571
|
+
//# sourceMappingURL=index.mjs.map
|