@gurge/sdk 0.3.16 → 0.3.19

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.
Files changed (35) hide show
  1. package/common/src/crypto/EddsaRN.cjs +1 -0
  2. package/common/src/crypto/EddsaRN.d.ts +19 -0
  3. package/common/src/crypto/EddsaRN.mjs +41 -0
  4. package/common/src/crypto/eddsa.cjs +1 -1
  5. package/common/src/crypto/eddsa.mjs +7 -5
  6. package/common/src/data-structures/Hinkal/hinkalWithdraw.cjs +1 -1
  7. package/common/src/data-structures/Hinkal/hinkalWithdraw.mjs +41 -24
  8. package/common/src/functions/snarkjs/constructGeneralZkProof.cjs +1 -1
  9. package/common/src/functions/snarkjs/constructGeneralZkProof.mjs +80 -73
  10. package/common/src/functions/snarkjs/generateZkProofEnclave.cjs +1 -1
  11. package/common/src/functions/snarkjs/generateZkProofEnclave.mjs +20 -10
  12. package/common/src/functions/utils/hinkalTiming.utils.cjs +1 -0
  13. package/common/src/functions/utils/hinkalTiming.utils.d.ts +9 -0
  14. package/common/src/functions/utils/hinkalTiming.utils.mjs +18 -0
  15. package/common/src/webworker/logError-DCl9T86l.js +2 -0
  16. package/common/src/webworker/package.json +1 -1
  17. package/common/src/webworker/performTaskWithWorker.cjs +1 -1
  18. package/common/src/webworker/performTaskWithWorker.mjs +21 -18
  19. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
  20. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
  21. package/common/src/webworker/utxoWorkerNode.cjs +1 -1
  22. package/common/src/webworker/viteWorkerURL.constant.cjs +3 -3
  23. package/common/src/webworker/viteWorkerURL.constant.mjs +3 -3
  24. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
  25. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
  26. package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
  27. package/package.json +1 -1
  28. package/react-native/HinkalWebViewWorker.cjs +35 -7
  29. package/react-native/HinkalWebViewWorker.mjs +102 -53
  30. package/react-native/bridge/HinkalRNWorker.cjs +1 -1
  31. package/react-native/bridge/HinkalRNWorker.d.ts +1 -0
  32. package/react-native/bridge/HinkalRNWorker.mjs +11 -9
  33. package/sdk/package.json.cjs +1 -1
  34. package/sdk/package.json.mjs +1 -1
  35. package/common/src/webworker/logError-BTCYh_YM.js +0 -2
@@ -1 +1 @@
1
- var e=``+(typeof document>`u`?require(`url`).pathToFileURL(__dirname+`/../../../../assets/utxoWorkerLauncher-CSg2Zipm.js`).href:new URL(`../../../../assets/utxoWorkerLauncher-CSg2Zipm.js`,document.currentScript&&document.currentScript.tagName.toUpperCase()===`SCRIPT`&&document.currentScript.src||document.baseURI).href);exports.default=e;
1
+ var e=``+(typeof document>`u`?require(`url`).pathToFileURL(__dirname+`/../../../../assets/utxoWorkerLauncher-CI8ya9N1.js`).href:new URL(`../../../../assets/utxoWorkerLauncher-CI8ya9N1.js`,document.currentScript&&document.currentScript.tagName.toUpperCase()===`SCRIPT`&&document.currentScript.src||document.baseURI).href);exports.default=e;
@@ -1,4 +1,4 @@
1
1
  //#region libs/shared/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url
2
- var e = "" + new URL("../../../../assets/utxoWorkerLauncher-CSg2Zipm.js", import.meta.url).href;
2
+ var e = "" + new URL("../../../../assets/utxoWorkerLauncher-CI8ya9N1.js", import.meta.url).href;
3
3
  //#endregion
4
4
  export { e as default };
@@ -1 +1 @@
1
- const e=require(`./workerProxy-DPeuP2Mg.js`),t=require(`./logError-BTCYh_YM.js`);let n=require(`buffer`),r=require(`process`);r=e.u(r);let i=require(`worker_threads`),a=require(`ethers`),o=require(`@solana/web3.js`);var s=`solana-on-chain-utxo:`,c=8,l=e=>e.startsWith(s),u=e=>{if(!l(e))throw Error(`Invalid encoded Solana UTXO payload`);let[n]=a.ethers.AbiCoder.defaultAbiCoder().decode([`bytes32[8]`],e.slice(21)),r=n;if(!Array.isArray(r)||r.length!==c)throw Error(`Malformed encoded Solana UTXO payload`);let[i,s,u,d,f,p,m,h]=r,g=BigInt(i),_=BigInt(d),v=t.n(_)===1n,y=t.r(_),b=a.ethers.toBeHex(BigInt(f)),x=BigInt(p),S=BigInt(m),C=BigInt(h).toString(),w=Array.from(a.ethers.getBytes(s)),T=Array.from(a.ethers.getBytes(u)),E=new o.PublicKey(Uint8Array.from([...w.slice(16),...T.slice(16)])).toBase58();return{amount:g,erc20TokenAddress:t.f(BigInt(s),BigInt(u)),mintAddress:E,randomization:y,stealthAddress:b,H0:x,H1:S,timeStamp:C,isNewStyle:v}},d=e=>{let n=a.ethers.AbiCoder.defaultAbiCoder().decode([`uint256`,`address`,`tuple(uint256, uint256, uint256, uint256)`,`uint256`,`uint256`],e),r=BigInt(n[0]),i=n[1],o=BigInt(n[2][0]),s=t.n(o),c=t.r(o),l=a.ethers.toBeHex(BigInt(n[2][1])),u=BigInt(n[2][2]),d=BigInt(n[2][3]),f=BigInt(n[3]).toString(),p=Number(n[4]);return{amount:r,erc20TokenAddress:i,randomization:c,isNewStyle:s===1n,stealthAddress:l,H0:u,H1:d,timeStamp:f,tokenId:p}},f=(n,r,i)=>{let{randomization:a,H0:o,H1:s,isNewStyle:c}=e.r(i)?u(n):d(n),l=c?t.s.verifyStealthPair([a,o],[0n,s],r):t.s.checkSignature(a,o,s,r);if(!l)throw Error(`UTXO doesn't belong to user`);return l},p=(t,n,r)=>{if(e.r(r)){let{amount:e,erc20TokenAddress:r,mintAddress:i,randomization:a,stealthAddress:o,timeStamp:s,isNewStyle:c,H0:l}=u(t);return{amount:e,erc20TokenAddress:r,mintAddress:i,timeStamp:s,nullifyingKey:n,stealthAddress:o,isNewStyle:c,...c?{H0:[a,l]}:{randomization:a}}}let{amount:i,erc20TokenAddress:a,timeStamp:o,randomization:s,isNewStyle:c,stealthAddress:l,H0:f}=d(t);return{amount:i,erc20TokenAddress:a,timeStamp:o,nullifyingKey:n,stealthAddress:l,isNewStyle:c,...c?{H0:[s,f]}:{randomization:s}}},m=class{static log(...t){e.a&&console.log(...t)}static logObject(t){e.a&&console.dir(t,{depth:null,colors:!0})}static error(...e){t.t(e)}},h=function(e){return e[e.BATCH_FILTER_UTXOS_WITH_NULLIFIER=0]=`BATCH_FILTER_UTXOS_WITH_NULLIFIER`,e[e.BUILD_UTXOS=1]=`BUILD_UTXOS`,e[e.DECIPHER_OUTPUTS=2]=`DECIPHER_OUTPUTS`,e}({}),g=new e.t,_=async({data:e})=>{let{utxos:n,nullifiers:r}=e,i=n.filter(e=>{let n=new t.o(e);return!r.has(n.getNullifier())});g.postMessageToMainThread({utxoConstructors:i,stealthPairCache:t.l.serialize(),stealthAddressCache:t.c.serialize()})},v=async({data:e})=>{let n=new t.s(e.signature),r=n.getShieldedPrivateKey(),i=e.encryptedOutputs.map(i=>{try{let a=i.isPositive?t.a(Buffer.from(i.value.slice(2),`hex`),n):p(i.value,r,e.chainId);return a.isBlocked=i.isBlocked,a}catch{return}}).filter(e=>e!==void 0&&e.amount!==0n);g.postMessageToMainThread(i)},y=async({data:e})=>{let n=new t.s(e.signature),r=[],{encryptedOutputs:i}=e,{lastOutput:a}=e,o=n.getShieldedPrivateKey();for(let s=0;s<i.length;s+=1){let c=i[s];if(a=c.value,c.isPositive)try{let e=t.i(Buffer.from(a.slice(2),`hex`),n);if(e.isBlocked=c.isBlocked,!e.erc20TokenAddress||!e.amount||!e.stealthAddress)throw Error(`bruh`);r.push(c)}catch{}else try{f(a,o,e.chainId)&&r.push(c)}catch{}}g.postMessageToMainThread({additionalEncryptedOutputs:r,lastOutput:a})},b=async e=>{try{await t.u(!0);let{type:n}=e.payload;switch(n){case h.BATCH_FILTER_UTXOS_WITH_NULLIFIER:await _(e.payload);return;case h.BUILD_UTXOS:await v(e.payload);return;case h.DECIPHER_OUTPUTS:await y(e.payload);return;default:throw Error(`Unknown worker message type ${n}`)}}catch(e){m.error(`utxo worker message failed`,e),g.postErrorToMainThread(e)}};globalThis.process=r.default,globalThis.Buffer=n.Buffer,i.parentPort.on(`message`,async e=>{await b(e)});
1
+ const e=require(`./workerProxy-DPeuP2Mg.js`),t=require(`./logError-DCl9T86l.js`);let n=require(`buffer`),r=require(`process`);r=e.u(r);let i=require(`worker_threads`),a=require(`ethers`),o=require(`@solana/web3.js`);var s=`solana-on-chain-utxo:`,c=8,l=e=>e.startsWith(s),u=e=>{if(!l(e))throw Error(`Invalid encoded Solana UTXO payload`);let[n]=a.ethers.AbiCoder.defaultAbiCoder().decode([`bytes32[8]`],e.slice(21)),r=n;if(!Array.isArray(r)||r.length!==c)throw Error(`Malformed encoded Solana UTXO payload`);let[i,s,u,d,f,p,m,h]=r,g=BigInt(i),_=BigInt(d),v=t.n(_)===1n,y=t.r(_),b=a.ethers.toBeHex(BigInt(f)),x=BigInt(p),S=BigInt(m),C=BigInt(h).toString(),w=Array.from(a.ethers.getBytes(s)),T=Array.from(a.ethers.getBytes(u)),E=new o.PublicKey(Uint8Array.from([...w.slice(16),...T.slice(16)])).toBase58();return{amount:g,erc20TokenAddress:t.f(BigInt(s),BigInt(u)),mintAddress:E,randomization:y,stealthAddress:b,H0:x,H1:S,timeStamp:C,isNewStyle:v}},d=e=>{let n=a.ethers.AbiCoder.defaultAbiCoder().decode([`uint256`,`address`,`tuple(uint256, uint256, uint256, uint256)`,`uint256`,`uint256`],e),r=BigInt(n[0]),i=n[1],o=BigInt(n[2][0]),s=t.n(o),c=t.r(o),l=a.ethers.toBeHex(BigInt(n[2][1])),u=BigInt(n[2][2]),d=BigInt(n[2][3]),f=BigInt(n[3]).toString(),p=Number(n[4]);return{amount:r,erc20TokenAddress:i,randomization:c,isNewStyle:s===1n,stealthAddress:l,H0:u,H1:d,timeStamp:f,tokenId:p}},f=(n,r,i)=>{let{randomization:a,H0:o,H1:s,isNewStyle:c}=e.r(i)?u(n):d(n),l=c?t.s.verifyStealthPair([a,o],[0n,s],r):t.s.checkSignature(a,o,s,r);if(!l)throw Error(`UTXO doesn't belong to user`);return l},p=(t,n,r)=>{if(e.r(r)){let{amount:e,erc20TokenAddress:r,mintAddress:i,randomization:a,stealthAddress:o,timeStamp:s,isNewStyle:c,H0:l}=u(t);return{amount:e,erc20TokenAddress:r,mintAddress:i,timeStamp:s,nullifyingKey:n,stealthAddress:o,isNewStyle:c,...c?{H0:[a,l]}:{randomization:a}}}let{amount:i,erc20TokenAddress:a,timeStamp:o,randomization:s,isNewStyle:c,stealthAddress:l,H0:f}=d(t);return{amount:i,erc20TokenAddress:a,timeStamp:o,nullifyingKey:n,stealthAddress:l,isNewStyle:c,...c?{H0:[s,f]}:{randomization:s}}},m=class{static log(...t){e.a&&console.log(...t)}static logObject(t){e.a&&console.dir(t,{depth:null,colors:!0})}static error(...e){t.t(e)}},h=function(e){return e[e.BATCH_FILTER_UTXOS_WITH_NULLIFIER=0]=`BATCH_FILTER_UTXOS_WITH_NULLIFIER`,e[e.BUILD_UTXOS=1]=`BUILD_UTXOS`,e[e.DECIPHER_OUTPUTS=2]=`DECIPHER_OUTPUTS`,e}({}),g=new e.t,_=async({data:e})=>{let{utxos:n,nullifiers:r}=e,i=n.filter(e=>{let n=new t.o(e);return!r.has(n.getNullifier())});g.postMessageToMainThread({utxoConstructors:i,stealthPairCache:t.l.serialize(),stealthAddressCache:t.c.serialize()})},v=async({data:e})=>{let n=new t.s(e.signature),r=n.getShieldedPrivateKey(),i=e.encryptedOutputs.map(i=>{try{let a=i.isPositive?t.a(Buffer.from(i.value.slice(2),`hex`),n):p(i.value,r,e.chainId);return a.isBlocked=i.isBlocked,a}catch{return}}).filter(e=>e!==void 0&&e.amount!==0n);g.postMessageToMainThread(i)},y=async({data:e})=>{let n=new t.s(e.signature),r=[],{encryptedOutputs:i}=e,{lastOutput:a}=e,o=n.getShieldedPrivateKey();for(let s=0;s<i.length;s+=1){let c=i[s];if(a=c.value,c.isPositive)try{let e=t.i(Buffer.from(a.slice(2),`hex`),n);if(e.isBlocked=c.isBlocked,!e.erc20TokenAddress||!e.amount||!e.stealthAddress)throw Error(`bruh`);r.push(c)}catch{}else try{f(a,o,e.chainId)&&r.push(c)}catch{}}g.postMessageToMainThread({additionalEncryptedOutputs:r,lastOutput:a})},b=async e=>{try{await t.u(!0);let{type:n}=e.payload;switch(n){case h.BATCH_FILTER_UTXOS_WITH_NULLIFIER:await _(e.payload);return;case h.BUILD_UTXOS:await v(e.payload);return;case h.DECIPHER_OUTPUTS:await y(e.payload);return;default:throw Error(`Unknown worker message type ${n}`)}}catch(e){m.error(`utxo worker message failed`,e),g.postErrorToMainThread(e)}};globalThis.process=r.default,globalThis.Buffer=n.Buffer,i.parentPort.on(`message`,async e=>{await b(e)});
@@ -14,8 +14,8 @@
14
14
  var e = /* @__PURE__ */ ((r) => (r.ZKProof = "ZKProof", r.SnarkJS = "SnarkJS", r.UTXO = "UTXO", r))(e || {});
15
15
 
16
16
  const n = async () => ({
17
- [e.ZKProof]: await getWorkerURL(domain + '/0.3.16/' + 'zkProofWorkerLauncher.js'),
18
- [e.SnarkJS]: await getWorkerURL(domain + '/0.3.16/' + 'snarkjsWorkerLauncher.js'),
19
- [e.UTXO]: await getWorkerURL(domain + '/0.3.16/' + 'utxoWorkerLauncher.js'),
17
+ [e.ZKProof]: await getWorkerURL(domain + '/0.3.19/' + 'zkProofWorkerLauncher.js'),
18
+ [e.SnarkJS]: await getWorkerURL(domain + '/0.3.19/' + 'snarkjsWorkerLauncher.js'),
19
+ [e.UTXO]: await getWorkerURL(domain + '/0.3.19/' + 'utxoWorkerLauncher.js'),
20
20
  });
21
21
  exports.getWorkerViteURL = n;
@@ -14,8 +14,8 @@
14
14
  var e = /* @__PURE__ */ ((r) => (r.ZKProof = "ZKProof", r.SnarkJS = "SnarkJS", r.UTXO = "UTXO", r))(e || {});
15
15
 
16
16
  const n = async () => ({
17
- [e.ZKProof]: await getWorkerURL(domain + '/0.3.16/' + 'zkProofWorkerLauncher.js'),
18
- [e.SnarkJS]: await getWorkerURL(domain + '/0.3.16/' + 'snarkjsWorkerLauncher.js'),
19
- [e.UTXO]: await getWorkerURL(domain + '/0.3.16/' + 'utxoWorkerLauncher.js'),
17
+ [e.ZKProof]: await getWorkerURL(domain + '/0.3.19/' + 'zkProofWorkerLauncher.js'),
18
+ [e.SnarkJS]: await getWorkerURL(domain + '/0.3.19/' + 'snarkjsWorkerLauncher.js'),
19
+ [e.UTXO]: await getWorkerURL(domain + '/0.3.19/' + 'utxoWorkerLauncher.js'),
20
20
  });
21
21
  export { n as getWorkerViteURL };
@@ -1 +1 @@
1
- var e=``+(typeof document>`u`?require(`url`).pathToFileURL(__dirname+`/../../../../assets/zkProofWorkerLauncher-Tbh34t2B.js`).href:new URL(`../../../../assets/zkProofWorkerLauncher-Tbh34t2B.js`,document.currentScript&&document.currentScript.tagName.toUpperCase()===`SCRIPT`&&document.currentScript.src||document.baseURI).href);exports.default=e;
1
+ var e=``+(typeof document>`u`?require(`url`).pathToFileURL(__dirname+`/../../../../assets/zkProofWorkerLauncher-BBhS4vyU.js`).href:new URL(`../../../../assets/zkProofWorkerLauncher-BBhS4vyU.js`,document.currentScript&&document.currentScript.tagName.toUpperCase()===`SCRIPT`&&document.currentScript.src||document.baseURI).href);exports.default=e;
@@ -1,4 +1,4 @@
1
1
  //#region libs/shared/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url
2
- var e = "" + new URL("../../../../assets/zkProofWorkerLauncher-Tbh34t2B.js", import.meta.url).href;
2
+ var e = "" + new URL("../../../../assets/zkProofWorkerLauncher-BBhS4vyU.js", import.meta.url).href;
3
3
  //#endregion
4
4
  export { e as default };
@@ -1 +1 @@
1
- const e=require(`./workerProxy-DPeuP2Mg.js`),t=require(`./logError-BTCYh_YM.js`);let n=require(`buffer`),r=require(`process`);r=e.u(r);let i=require(`worker_threads`);require(`ethers`),Object.values({preHookContract:`0x0000000000000000000000000000000000000000`,hookContract:`0x0000000000000000000000000000000000000000`,preHookMetadata:`0x00`,postHookMetadata:`0x00`}),Array.from({length:25},()=>`0`);var a=(e,t)=>{let n=[];for(let r=0;r<e.length;r+=1){n.push([]);for(let i=0;i<e[r].length;i+=1)n[r][i]=t.getSiblingHashesForVerification(BigInt(e[r][i].getCommitment())).map(e=>e.toString())}let r=[];for(let n=0;n<e.length;n+=1){r.push([]);for(let i=0;i<e[n].length;i+=1)r[n][i]=t.getSiblingSides(BigInt(e[n][i].getCommitment())).map(e=>e.toString())}return{inCommitmentSiblings:n,inCommitmentSiblingSides:r}},o=function(e){return e[e.CALC_COMMITMENTS_SIBLING_AND_SIDES=0]=`CALC_COMMITMENTS_SIBLING_AND_SIDES`,e[e.BUILD_IN_NULLIFIERS=1]=`BUILD_IN_NULLIFIERS`,e}({}),s=class extends Error{constructor(){super(`Merkle tree is incomplete`),this.name=`MerkleTreeIncompleteError`}},c=class e{tree;count;index;reverseTree;static createWithData(t,n,r,i,a,o,s){return new e(a,o,s,t,n,r,i)}static create(n,r,i=t.p){return new e(n,i,r)}createReverseTree(){let e=new Map;for(let t=this.getStartIndex();t<this.getStartIndex()+this.count;t+=1n){let n=this.tree.get(t);n!==void 0&&e.set(n,t)}return e}constructor(e,t,n,r,i,a,o){this.hashFunction=e,this.levels=t,this.defaultNodeValue=n,this.tree=r??new Map,this.count=o??0n,this.index=a??2n**(t-1n),i?this.reverseTree=i:this.reverseTree=this.createReverseTree()}getStartIndex(){return 2n**(this.levels-1n)}logarithm2(e){let t=0n;for(;2n**t<e;)t+=1n;return t}bigIntMax(e,t){return e>t?e:t}forceInsert(e,t){if(t<this.getStartIndex())throw RangeError();this.tree.set(t,e),this.reverseTree.set(e,t);let n=this.index-this.getStartIndex(),r=this.logarithm2(n),i=t;for(let e=1n;e<=r;e+=1n){i/=2n;let e=this.hashFunction(this.tree.get(i*2n)||this.defaultNodeValue,this.tree.get(i*2n+1n)||this.defaultNodeValue);this.tree.set(i,e)}}insert(e,n){let r=!1;this.tree.has(n)&&(r=!0,t.t(`Editing commitment index: ${n} `)),r||(this.count+=1n),this.index=this.bigIntMax(this.index,n+1n),this.forceInsert(e,n)}remove(e){this.forceInsert(this.defaultNodeValue,e)}completenessCheck(){if(this.count!==this.index-this.getStartIndex())throw new s}getRootHash(){this.completenessCheck();for(let e=1n;e<2n**this.levels;e*=2n)if(this.tree.get(e))return this.tree.get(e);return this.defaultNodeValue}getMerkleData(){return this.completenessCheck(),new Map(this.tree)}getValue(e){return this.tree.get(e)}getSiblingIndex(e){return e===1n?1n:e%2n==1n?e-1n:e+1n}getSiblingHashesForVerification(e){this.completenessCheck();let t=this.reverseTree.get(e);if(t===void 0)return Array(25).fill(0n);let n=[];for(;t!==0n;)n.push(this.tree.get(this.getSiblingIndex(t))||this.defaultNodeValue),t/=2n;return n.slice(0,25)}getSiblingSides(e){this.completenessCheck();let t=this.reverseTree.get(e);if(t===void 0)return Array(25).fill(0n);let n=[];for(;t!==0n;){let e=t%2n==0n?0n:1n;n.push(e),t/=2n}return n.slice(0,25)}toJSON(){let{tree:e,reverseTree:t,count:n,index:r}=this;return{tree:Object.fromEntries(e),reverseTree:Object.fromEntries(t),count:n.toString(),index:r.toString()}}toJSONLite(){let{tree:e,count:t,index:n}=this;return{tree:Object.fromEntries(e),count:t.toString(),index:n.toString()}}clone(){return e.createWithData(new Map(this.tree),new Map(this.reverseTree),this.index,this.count,this.hashFunction,this.levels,this.defaultNodeValue)}getIndex(){return this.index}},l=e=>new Map(Object.entries(e).map(([e,t])=>[BigInt(e),BigInt(t)])),u=e=>{let n=l(e.tree),r=e.reverseTree?l(e.reverseTree):void 0;return c.createWithData(n,r,BigInt(e.index),BigInt(e.count),t.d,t.p,0n)},d=new e.t,f=e=>{let{inputUtxosSerialized:n,merkleTreeSerialized:r}=e.data,i=u(r),{inCommitmentSiblings:o,inCommitmentSiblingSides:s}=a(n.map(e=>e.map(e=>new t.o(e))),i);d.postMessageToMainThread({inCommitmentSiblings:o,inCommitmentSiblingSides:s})},p=e=>{let{inputUtxosSerialized:n}=e.data,r=n.map(e=>e.map(e=>new t.o(e))).map(e=>e.map(e=>e.amount===0n?`0`:e.getNullifier()));d.postMessageToMainThread(r)},m=async e=>{try{await t.u(!0);let{type:n}=e.payload;switch(n){case o.CALC_COMMITMENTS_SIBLING_AND_SIDES:f(e.payload);return;case o.BUILD_IN_NULLIFIERS:p(e.payload);return;default:throw Error(`Unknown worker message type ${n}`)}}catch(e){console.error(`zk proof worker message failed`,e),d.postErrorToMainThread(e)}};globalThis.process=r.default,globalThis.Buffer=n.Buffer,i.parentPort.on(`message`,async e=>{await m(e)});
1
+ const e=require(`./workerProxy-DPeuP2Mg.js`),t=require(`./logError-DCl9T86l.js`);let n=require(`buffer`),r=require(`process`);r=e.u(r);let i=require(`worker_threads`);require(`ethers`),Object.values({preHookContract:`0x0000000000000000000000000000000000000000`,hookContract:`0x0000000000000000000000000000000000000000`,preHookMetadata:`0x00`,postHookMetadata:`0x00`}),Array.from({length:25},()=>`0`);var a=(e,t)=>{let n=[];for(let r=0;r<e.length;r+=1){n.push([]);for(let i=0;i<e[r].length;i+=1)n[r][i]=t.getSiblingHashesForVerification(BigInt(e[r][i].getCommitment())).map(e=>e.toString())}let r=[];for(let n=0;n<e.length;n+=1){r.push([]);for(let i=0;i<e[n].length;i+=1)r[n][i]=t.getSiblingSides(BigInt(e[n][i].getCommitment())).map(e=>e.toString())}return{inCommitmentSiblings:n,inCommitmentSiblingSides:r}},o=function(e){return e[e.CALC_COMMITMENTS_SIBLING_AND_SIDES=0]=`CALC_COMMITMENTS_SIBLING_AND_SIDES`,e[e.BUILD_IN_NULLIFIERS=1]=`BUILD_IN_NULLIFIERS`,e}({}),s=class extends Error{constructor(){super(`Merkle tree is incomplete`),this.name=`MerkleTreeIncompleteError`}},c=class e{tree;count;index;reverseTree;static createWithData(t,n,r,i,a,o,s){return new e(a,o,s,t,n,r,i)}static create(n,r,i=t.p){return new e(n,i,r)}createReverseTree(){let e=new Map;for(let t=this.getStartIndex();t<this.getStartIndex()+this.count;t+=1n){let n=this.tree.get(t);n!==void 0&&e.set(n,t)}return e}constructor(e,t,n,r,i,a,o){this.hashFunction=e,this.levels=t,this.defaultNodeValue=n,this.tree=r??new Map,this.count=o??0n,this.index=a??2n**(t-1n),i?this.reverseTree=i:this.reverseTree=this.createReverseTree()}getStartIndex(){return 2n**(this.levels-1n)}logarithm2(e){let t=0n;for(;2n**t<e;)t+=1n;return t}bigIntMax(e,t){return e>t?e:t}forceInsert(e,t){if(t<this.getStartIndex())throw RangeError();this.tree.set(t,e),this.reverseTree.set(e,t);let n=this.index-this.getStartIndex(),r=this.logarithm2(n),i=t;for(let e=1n;e<=r;e+=1n){i/=2n;let e=this.hashFunction(this.tree.get(i*2n)||this.defaultNodeValue,this.tree.get(i*2n+1n)||this.defaultNodeValue);this.tree.set(i,e)}}insert(e,n){let r=!1;this.tree.has(n)&&(r=!0,t.t(`Editing commitment index: ${n} `)),r||(this.count+=1n),this.index=this.bigIntMax(this.index,n+1n),this.forceInsert(e,n)}remove(e){this.forceInsert(this.defaultNodeValue,e)}completenessCheck(){if(this.count!==this.index-this.getStartIndex())throw new s}getRootHash(){this.completenessCheck();for(let e=1n;e<2n**this.levels;e*=2n)if(this.tree.get(e))return this.tree.get(e);return this.defaultNodeValue}getMerkleData(){return this.completenessCheck(),new Map(this.tree)}getValue(e){return this.tree.get(e)}getSiblingIndex(e){return e===1n?1n:e%2n==1n?e-1n:e+1n}getSiblingHashesForVerification(e){this.completenessCheck();let t=this.reverseTree.get(e);if(t===void 0)return Array(25).fill(0n);let n=[];for(;t!==0n;)n.push(this.tree.get(this.getSiblingIndex(t))||this.defaultNodeValue),t/=2n;return n.slice(0,25)}getSiblingSides(e){this.completenessCheck();let t=this.reverseTree.get(e);if(t===void 0)return Array(25).fill(0n);let n=[];for(;t!==0n;){let e=t%2n==0n?0n:1n;n.push(e),t/=2n}return n.slice(0,25)}toJSON(){let{tree:e,reverseTree:t,count:n,index:r}=this;return{tree:Object.fromEntries(e),reverseTree:Object.fromEntries(t),count:n.toString(),index:r.toString()}}toJSONLite(){let{tree:e,count:t,index:n}=this;return{tree:Object.fromEntries(e),count:t.toString(),index:n.toString()}}clone(){return e.createWithData(new Map(this.tree),new Map(this.reverseTree),this.index,this.count,this.hashFunction,this.levels,this.defaultNodeValue)}getIndex(){return this.index}},l=e=>new Map(Object.entries(e).map(([e,t])=>[BigInt(e),BigInt(t)])),u=e=>{let n=l(e.tree),r=e.reverseTree?l(e.reverseTree):void 0;return c.createWithData(n,r,BigInt(e.index),BigInt(e.count),t.d,t.p,0n)},d=new e.t,f=e=>{let{inputUtxosSerialized:n,merkleTreeSerialized:r}=e.data,i=u(r),{inCommitmentSiblings:o,inCommitmentSiblingSides:s}=a(n.map(e=>e.map(e=>new t.o(e))),i);d.postMessageToMainThread({inCommitmentSiblings:o,inCommitmentSiblingSides:s})},p=e=>{let{inputUtxosSerialized:n}=e.data,r=n.map(e=>e.map(e=>new t.o(e))).map(e=>e.map(e=>e.amount===0n?`0`:e.getNullifier()));d.postMessageToMainThread(r)},m=async e=>{try{await t.u(!0);let{type:n}=e.payload;switch(n){case o.CALC_COMMITMENTS_SIBLING_AND_SIDES:f(e.payload);return;case o.BUILD_IN_NULLIFIERS:p(e.payload);return;default:throw Error(`Unknown worker message type ${n}`)}}catch(e){console.error(`zk proof worker message failed`,e),d.postErrorToMainThread(e)}};globalThis.process=r.default,globalThis.Buffer=n.Buffer,i.parentPort.on(`message`,async e=>{await m(e)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gurge/sdk",
3
- "version": "0.3.16",
3
+ "version": "0.3.19",
4
4
  "homepage": "hinkal.io",
5
5
  "author": {
6
6
  "name": "Hinkal Protocol"
@@ -1,7 +1,7 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../common/src/webworker/workerFactory.cjs`),t=require(`./workerCDNUrls.cjs`),n=require(`./bridge/serialization.utils.cjs`),r=require(`./bridge/HinkalRNWorker.cjs`);let i=require(`react`),a=require(`react-native`),o=require(`react-native-webview`),s=require(`react/jsx-runtime`);var c=`${new URL(Object.values(t.WORKER_CDN_URLS)[0]).origin}/`;e.WorkerFactory.rnWorkerFactory=e=>new r.HinkalRNWorker(e);var l=`
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../common/src/functions/utils/hinkalTiming.utils.cjs`),t=require(`../common/src/webworker/workerFactory.cjs`),n=require(`./workerCDNUrls.cjs`),r=require(`./bridge/serialization.utils.cjs`),i=require(`./bridge/HinkalRNWorker.cjs`);let a=require(`react`),o=require(`react-native`),s=require(`react-native-webview`),c=require(`react/jsx-runtime`);var l=`${new URL(Object.values(n.WORKER_CDN_URLS)[0]).origin}/`;t.WorkerFactory.rnWorkerFactory=e=>new i.HinkalRNWorker(e);var u=`
2
2
  if (!window.__hinkalPageBoot) (function(){
3
3
  window.__hinkalPageBoot = true;
4
- var URLS = ${JSON.stringify(t.WORKER_CDN_URLS)};
4
+ var URLS = ${JSON.stringify(n.WORKER_CDN_URLS)};
5
5
  var BLOBS = {};
6
6
 
7
7
  function replacer(_key, value){
@@ -22,6 +22,18 @@ if (!window.__hinkalPageBoot) (function(){
22
22
  var out = {}; for (var i = 0; i < keys.length; i++) out[keys[i]] = revive(value[keys[i]]); return out;
23
23
  }
24
24
  function post(payload){ try { window.ReactNativeWebView.postMessage(JSON.stringify(payload, replacer)); } catch(_){} }
25
+ function logTiming(requestId, marks, phase, extra){
26
+ var now = Date.now();
27
+ post({
28
+ type: 'TIMING',
29
+ requestId: requestId,
30
+ phase: phase,
31
+ stepMs: now - marks.last,
32
+ totalMs: now - marks.start,
33
+ extra: extra || null,
34
+ });
35
+ marks.last = now;
36
+ }
25
37
  function describe(error){
26
38
  if (!error) return 'worker error';
27
39
  if (error.message) return error.message;
@@ -29,11 +41,16 @@ if (!window.__hinkalPageBoot) (function(){
29
41
  try { return JSON.stringify(error); } catch(_){ return String(error); }
30
42
  }
31
43
 
32
- async function blobUrl(url){
33
- if (BLOBS[url]) return BLOBS[url];
44
+ async function blobUrl(url, requestId, marks){
45
+ if (BLOBS[url]) {
46
+ logTiming(requestId, marks, 'blobUrl-cache-hit', { url: url });
47
+ return BLOBS[url];
48
+ }
49
+ logTiming(requestId, marks, 'blobUrl-fetch-start', { url: url });
34
50
  var response = await fetch(url);
35
51
  if (!response.ok) throw new Error('HTTP ' + response.status + ' ' + url);
36
52
  var body = await response.text();
53
+ logTiming(requestId, marks, 'blobUrl-fetch-done', { bytes: body.length });
37
54
  BLOBS[url] = URL.createObjectURL(new Blob([${JSON.stringify(`(function(){
38
55
  var post = self.postMessage.bind(self);
39
56
  function describe(error){
@@ -48,6 +65,7 @@ if (!window.__hinkalPageBoot) (function(){
48
65
  self.addEventListener('unhandledrejection', function(event){ try { post({ __hinkalWorkerError: 'unhandledrejection: ' + describe(event && event.reason) }); } catch(_){} });
49
66
  try { post({ __hinkalWorkerReady: true }); } catch(_){}
50
67
  })();`)}, body], { type: 'application/javascript' }));
68
+ logTiming(requestId, marks, 'blobUrl-created');
51
69
  return BLOBS[url];
52
70
  }
53
71
 
@@ -58,12 +76,18 @@ if (!window.__hinkalPageBoot) (function(){
58
76
  window.handleMessage = async function(envelope){
59
77
  var requestId = envelope && envelope.requestId;
60
78
  var variant = envelope && envelope.variant;
79
+ var marks = { start: Date.now(), last: Date.now() };
80
+ logTiming(requestId, marks, 'handleMessage-start', { variant: variant });
61
81
  var message = revive(envelope && envelope.message);
82
+ logTiming(requestId, marks, 'message-revived');
62
83
  var url = URLS[variant];
63
84
  if (!url) return post({ requestId: requestId, type: 'ERROR', error: 'Unknown variant: ' + variant });
64
85
 
65
86
  var worker;
66
- try { worker = spawn(await blobUrl(url)); }
87
+ try {
88
+ worker = spawn(await blobUrl(url, requestId, marks));
89
+ logTiming(requestId, marks, 'worker-spawned');
90
+ }
67
91
  catch (error) { return post({ requestId: requestId, type: 'ERROR', error: 'spawn failed: ' + describe(error) }); }
68
92
 
69
93
  var done = false, ready = false, pending = message;
@@ -74,20 +98,24 @@ if (!window.__hinkalPageBoot) (function(){
74
98
  if (data && typeof data === 'object') {
75
99
  if (data.__hinkalWorkerReady) {
76
100
  ready = true;
77
- try { worker.postMessage(pending); pending = null; }
101
+ logTiming(requestId, marks, 'worker-ready');
102
+ try { worker.postMessage(pending); pending = null; logTiming(requestId, marks, 'worker-payload-sent'); }
78
103
  catch (error) { post({ requestId: requestId, type: 'ERROR', error: 'postMessage failed: ' + describe(error) }); finish(); }
79
104
  return;
80
105
  }
81
106
  if (typeof data.__hinkalWorkerError === 'string') {
107
+ logTiming(requestId, marks, 'worker-error', { error: data.__hinkalWorkerError });
82
108
  post({ requestId: requestId, type: 'ERROR', error: data.__hinkalWorkerError });
83
109
  finish();
84
110
  return;
85
111
  }
86
112
  }
113
+ logTiming(requestId, marks, 'worker-result');
87
114
  post({ requestId: requestId, type: 'RESULT', data: data });
88
115
  finish();
89
116
  };
90
117
  worker.onerror = function(event){
118
+ logTiming(requestId, marks, 'worker-onerror', { ready: ready });
91
119
  post({ requestId: requestId, type: 'ERROR', error: (ready ? 'worker runtime: ' : 'worker startup: ') + describe(event) });
92
120
  finish();
93
121
  };
@@ -95,4 +123,4 @@ if (!window.__hinkalPageBoot) (function(){
95
123
 
96
124
  post({ type: 'READY' });
97
125
  })();
98
- true;`,u=`<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body><script>${l}<\/script></body></html>`,d=a.StyleSheet.create({hiddenHost:{position:`absolute`,height:1,width:1,left:-9999,top:-9999,opacity:0}}),f=()=>{let e=(0,i.useRef)(null),t=(0,i.useRef)({ready:!1,queue:[]}),r=(0,i.useCallback)((t,r,i)=>{let o;try{o=JSON.stringify({requestId:t,variant:r,message:i},n.bigIntReplacer)}catch(e){a.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,{requestId:t,type:`ERROR`,error:`serialize failed: ${e?.message??e}`});return}e.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${o}); true;`)},[]);(0,i.useEffect)(()=>{let e=a.DeviceEventEmitter.addListener(`TO_WEBVIEW_WORKER`,e=>{let n={requestId:e?.__requestId??``,variant:e?.variant??``,message:e?.message};t.current.ready?r(n.requestId,n.variant,n.message):t.current.queue.push(n)});return()=>e.remove()},[r]);let f=(0,i.useCallback)(e=>{let i;try{i=n.reviveBigInts(JSON.parse(e.nativeEvent.data))}catch(e){a.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,{type:`ERROR`,error:e?.message??`parse error`});return}if(i?.type===`READY`){t.current.ready=!0;let e=t.current.queue;t.current.queue=[],e.forEach(({requestId:e,variant:t,message:n})=>r(e,t,n));return}a.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,i)},[r]);return(0,s.jsx)(a.View,{pointerEvents:`none`,style:d.hiddenHost,children:(0,s.jsx)(o.WebView,{ref:e,source:{html:u,baseUrl:c},originWhitelist:[`*`],javaScriptEnabled:!0,domStorageEnabled:!0,androidLayerType:`hardware`,onMessage:f,onLoad:()=>e.current?.injectJavaScript(l)})})};module.exports=f;
126
+ true;`,d=`<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body><script>${u}<\/script></body></html>`,f=o.StyleSheet.create({hiddenHost:{position:`absolute`,height:1,width:1,left:-9999,top:-9999,opacity:0}}),p=()=>{let t=(0,a.useRef)(null),n=(0,a.useRef)({ready:!1,queue:[]}),i=(0,a.useRef)(e.createHinkalTiming(`webview-host`)),p=(0,a.useCallback)((n,i,a)=>{let s=e.createHinkalTiming(`webview-inject:${n}`);s.log(`start`,{variant:i});let c;try{c=JSON.stringify({requestId:n,variant:i,message:a},r.bigIntReplacer),s.log(`serialized`,{bytes:c.length})}catch(e){s.log(`serialize-failed`,{message:e?.message??String(e)}),o.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,{requestId:n,type:`ERROR`,error:`serialize failed: ${e?.message??e}`});return}t.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${c}); true;`),s.log(`injectJavaScript-called`)},[]);(0,a.useEffect)(()=>{i.current.log(`mount`);let e=o.DeviceEventEmitter.addListener(`TO_WEBVIEW_WORKER`,e=>{let t={requestId:e?.__requestId??``,variant:e?.variant??``,message:e?.message};n.current.ready?(i.current.log(`TO_WEBVIEW_WORKER-inject`,{requestId:t.requestId,variant:t.variant}),p(t.requestId,t.variant,t.message)):(i.current.log(`TO_WEBVIEW_WORKER-queued`,{requestId:t.requestId,variant:t.variant}),n.current.queue.push(t))});return()=>e.remove()},[p]);let m=(0,a.useCallback)(e=>{let t;try{t=r.reviveBigInts(JSON.parse(e.nativeEvent.data))}catch(e){o.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,{type:`ERROR`,error:e?.message??`parse error`});return}if(t?.type===`READY`){i.current.log(`webview-READY`,{queued:n.current.queue.length}),n.current.ready=!0;let e=n.current.queue;n.current.queue=[],e.forEach(({requestId:e,variant:t,message:n})=>p(e,t,n));return}if(t?.type===`TIMING`){let e=t.extra?` ${JSON.stringify(t.extra)}`:``;console.log(`[HinkalTiming] [webview:${t.requestId??`unknown`}] ${t.phase} +${t.stepMs}ms (total ${t.totalMs}ms)${e}`);return}(t?.type===`RESULT`||t?.type===`ERROR`)&&i.current.log(`webview-${t.type}`,{requestId:t.requestId}),o.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,t)},[p]);return(0,c.jsx)(o.View,{pointerEvents:`none`,style:f.hiddenHost,children:(0,c.jsx)(s.WebView,{ref:t,source:{html:d,baseUrl:l},originWhitelist:[`*`],javaScriptEnabled:!0,domStorageEnabled:!0,androidLayerType:`hardware`,onMessage:m,onConsoleMessage:e=>{let{message:t}=e.nativeEvent;(t.includes(`[HinkalTiming]`)||t.includes(`hinkal`))&&console.log(`[HinkalTiming] [WebViewConsole] ${t}`)},onLoad:()=>{i.current.log(`webview-onLoad`),t.current?.injectJavaScript(u)}})})};module.exports=p;
@@ -1,18 +1,19 @@
1
- import { WorkerFactory as e } from "../common/src/webworker/workerFactory.mjs";
2
- import { WORKER_CDN_URLS as t } from "./workerCDNUrls.mjs";
3
- import { bigIntReplacer as n, reviveBigInts as r } from "./bridge/serialization.utils.mjs";
4
- import { HinkalRNWorker as i } from "./bridge/HinkalRNWorker.mjs";
5
- import { useCallback as a, useEffect as o, useRef as s } from "react";
6
- import { DeviceEventEmitter as c, StyleSheet as l, View as u } from "react-native";
7
- import { WebView as d } from "react-native-webview";
8
- import { jsx as f } from "react/jsx-runtime";
1
+ import { createHinkalTiming as e } from "../common/src/functions/utils/hinkalTiming.utils.mjs";
2
+ import { WorkerFactory as t } from "../common/src/webworker/workerFactory.mjs";
3
+ import { WORKER_CDN_URLS as n } from "./workerCDNUrls.mjs";
4
+ import { bigIntReplacer as r, reviveBigInts as i } from "./bridge/serialization.utils.mjs";
5
+ import { HinkalRNWorker as a } from "./bridge/HinkalRNWorker.mjs";
6
+ import { useCallback as o, useEffect as s, useRef as c } from "react";
7
+ import { DeviceEventEmitter as l, StyleSheet as u, View as d } from "react-native";
8
+ import { WebView as f } from "react-native-webview";
9
+ import { jsx as p } from "react/jsx-runtime";
9
10
  //#region libs/shared/sdk/src/react-native/HinkalWebViewWorker.tsx
10
- var p = `${new URL(Object.values(t)[0]).origin}/`;
11
- e.rnWorkerFactory = (e) => new i(e);
12
- var m = `
11
+ var m = `${new URL(Object.values(n)[0]).origin}/`;
12
+ t.rnWorkerFactory = (e) => new a(e);
13
+ var h = `
13
14
  if (!window.__hinkalPageBoot) (function(){
14
15
  window.__hinkalPageBoot = true;
15
- var URLS = ${JSON.stringify(t)};
16
+ var URLS = ${JSON.stringify(n)};
16
17
  var BLOBS = {};
17
18
 
18
19
  function replacer(_key, value){
@@ -33,6 +34,18 @@ if (!window.__hinkalPageBoot) (function(){
33
34
  var out = {}; for (var i = 0; i < keys.length; i++) out[keys[i]] = revive(value[keys[i]]); return out;
34
35
  }
35
36
  function post(payload){ try { window.ReactNativeWebView.postMessage(JSON.stringify(payload, replacer)); } catch(_){} }
37
+ function logTiming(requestId, marks, phase, extra){
38
+ var now = Date.now();
39
+ post({
40
+ type: 'TIMING',
41
+ requestId: requestId,
42
+ phase: phase,
43
+ stepMs: now - marks.last,
44
+ totalMs: now - marks.start,
45
+ extra: extra || null,
46
+ });
47
+ marks.last = now;
48
+ }
36
49
  function describe(error){
37
50
  if (!error) return 'worker error';
38
51
  if (error.message) return error.message;
@@ -40,12 +53,18 @@ if (!window.__hinkalPageBoot) (function(){
40
53
  try { return JSON.stringify(error); } catch(_){ return String(error); }
41
54
  }
42
55
 
43
- async function blobUrl(url){
44
- if (BLOBS[url]) return BLOBS[url];
56
+ async function blobUrl(url, requestId, marks){
57
+ if (BLOBS[url]) {
58
+ logTiming(requestId, marks, 'blobUrl-cache-hit', { url: url });
59
+ return BLOBS[url];
60
+ }
61
+ logTiming(requestId, marks, 'blobUrl-fetch-start', { url: url });
45
62
  var response = await fetch(url);
46
63
  if (!response.ok) throw new Error('HTTP ' + response.status + ' ' + url);
47
64
  var body = await response.text();
65
+ logTiming(requestId, marks, 'blobUrl-fetch-done', { bytes: body.length });
48
66
  BLOBS[url] = URL.createObjectURL(new Blob([${JSON.stringify("(function(){\n var post = self.postMessage.bind(self);\n function describe(error){\n if (!error) return 'unknown';\n var parts = [];\n if (error.message) parts.push(error.message);\n if (error.error && error.error.stack) parts.push(error.error.stack);\n if (!parts.length) { try { parts.push(JSON.stringify(error)); } catch(_) { parts.push(String(error)); } }\n return parts.join(' | ');\n }\n self.addEventListener('error', function(event){ try { post({ __hinkalWorkerError: describe(event) }); } catch(_){} });\n self.addEventListener('unhandledrejection', function(event){ try { post({ __hinkalWorkerError: 'unhandledrejection: ' + describe(event && event.reason) }); } catch(_){} });\n try { post({ __hinkalWorkerReady: true }); } catch(_){}\n})();")}, body], { type: 'application/javascript' }));
67
+ logTiming(requestId, marks, 'blobUrl-created');
49
68
  return BLOBS[url];
50
69
  }
51
70
 
@@ -56,12 +75,18 @@ if (!window.__hinkalPageBoot) (function(){
56
75
  window.handleMessage = async function(envelope){
57
76
  var requestId = envelope && envelope.requestId;
58
77
  var variant = envelope && envelope.variant;
78
+ var marks = { start: Date.now(), last: Date.now() };
79
+ logTiming(requestId, marks, 'handleMessage-start', { variant: variant });
59
80
  var message = revive(envelope && envelope.message);
81
+ logTiming(requestId, marks, 'message-revived');
60
82
  var url = URLS[variant];
61
83
  if (!url) return post({ requestId: requestId, type: 'ERROR', error: 'Unknown variant: ' + variant });
62
84
 
63
85
  var worker;
64
- try { worker = spawn(await blobUrl(url)); }
86
+ try {
87
+ worker = spawn(await blobUrl(url, requestId, marks));
88
+ logTiming(requestId, marks, 'worker-spawned');
89
+ }
65
90
  catch (error) { return post({ requestId: requestId, type: 'ERROR', error: 'spawn failed: ' + describe(error) }); }
66
91
 
67
92
  var done = false, ready = false, pending = message;
@@ -72,20 +97,24 @@ if (!window.__hinkalPageBoot) (function(){
72
97
  if (data && typeof data === 'object') {
73
98
  if (data.__hinkalWorkerReady) {
74
99
  ready = true;
75
- try { worker.postMessage(pending); pending = null; }
100
+ logTiming(requestId, marks, 'worker-ready');
101
+ try { worker.postMessage(pending); pending = null; logTiming(requestId, marks, 'worker-payload-sent'); }
76
102
  catch (error) { post({ requestId: requestId, type: 'ERROR', error: 'postMessage failed: ' + describe(error) }); finish(); }
77
103
  return;
78
104
  }
79
105
  if (typeof data.__hinkalWorkerError === 'string') {
106
+ logTiming(requestId, marks, 'worker-error', { error: data.__hinkalWorkerError });
80
107
  post({ requestId: requestId, type: 'ERROR', error: data.__hinkalWorkerError });
81
108
  finish();
82
109
  return;
83
110
  }
84
111
  }
112
+ logTiming(requestId, marks, 'worker-result');
85
113
  post({ requestId: requestId, type: 'RESULT', data: data });
86
114
  finish();
87
115
  };
88
116
  worker.onerror = function(event){
117
+ logTiming(requestId, marks, 'worker-onerror', { ready: ready });
89
118
  post({ requestId: requestId, type: 'ERROR', error: (ready ? 'worker runtime: ' : 'worker startup: ') + describe(event) });
90
119
  finish();
91
120
  };
@@ -93,82 +122,102 @@ if (!window.__hinkalPageBoot) (function(){
93
122
 
94
123
  post({ type: 'READY' });
95
124
  })();
96
- true;`, h = `<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body><script>${m}<\/script></body></html>`, g = l.create({ hiddenHost: {
125
+ true;`, g = `<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body><script>${h}<\/script></body></html>`, _ = u.create({ hiddenHost: {
97
126
  position: "absolute",
98
127
  height: 1,
99
128
  width: 1,
100
129
  left: -9999,
101
130
  top: -9999,
102
131
  opacity: 0
103
- } }), _ = () => {
104
- let e = s(null), t = s({
132
+ } }), v = () => {
133
+ let t = c(null), n = c({
105
134
  ready: !1,
106
135
  queue: []
107
- }), i = a((t, r, i) => {
108
- let a;
136
+ }), a = c(e("webview-host")), u = o((n, i, a) => {
137
+ let o = e(`webview-inject:${n}`);
138
+ o.log("start", { variant: i });
139
+ let s;
109
140
  try {
110
- a = JSON.stringify({
111
- requestId: t,
112
- variant: r,
113
- message: i
114
- }, n);
141
+ s = JSON.stringify({
142
+ requestId: n,
143
+ variant: i,
144
+ message: a
145
+ }, r), o.log("serialized", { bytes: s.length });
115
146
  } catch (e) {
116
- c.emit("FROM_WEBVIEW_WORKER", {
117
- requestId: t,
147
+ o.log("serialize-failed", { message: e?.message ?? String(e) }), l.emit("FROM_WEBVIEW_WORKER", {
148
+ requestId: n,
118
149
  type: "ERROR",
119
150
  error: `serialize failed: ${e?.message ?? e}`
120
151
  });
121
152
  return;
122
153
  }
123
- e.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${a}); true;`);
154
+ t.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${s}); true;`), o.log("injectJavaScript-called");
124
155
  }, []);
125
- o(() => {
126
- let e = c.addListener("TO_WEBVIEW_WORKER", (e) => {
127
- let n = {
156
+ s(() => {
157
+ a.current.log("mount");
158
+ let e = l.addListener("TO_WEBVIEW_WORKER", (e) => {
159
+ let t = {
128
160
  requestId: e?.__requestId ?? "",
129
161
  variant: e?.variant ?? "",
130
162
  message: e?.message
131
163
  };
132
- t.current.ready ? i(n.requestId, n.variant, n.message) : t.current.queue.push(n);
164
+ n.current.ready ? (a.current.log("TO_WEBVIEW_WORKER-inject", {
165
+ requestId: t.requestId,
166
+ variant: t.variant
167
+ }), u(t.requestId, t.variant, t.message)) : (a.current.log("TO_WEBVIEW_WORKER-queued", {
168
+ requestId: t.requestId,
169
+ variant: t.variant
170
+ }), n.current.queue.push(t));
133
171
  });
134
172
  return () => e.remove();
135
- }, [i]);
136
- let l = a((e) => {
137
- let n;
173
+ }, [u]);
174
+ let v = o((e) => {
175
+ let t;
138
176
  try {
139
- n = r(JSON.parse(e.nativeEvent.data));
177
+ t = i(JSON.parse(e.nativeEvent.data));
140
178
  } catch (e) {
141
- c.emit("FROM_WEBVIEW_WORKER", {
179
+ l.emit("FROM_WEBVIEW_WORKER", {
142
180
  type: "ERROR",
143
181
  error: e?.message ?? "parse error"
144
182
  });
145
183
  return;
146
184
  }
147
- if (n?.type === "READY") {
148
- t.current.ready = !0;
149
- let e = t.current.queue;
150
- t.current.queue = [], e.forEach(({ requestId: e, variant: t, message: n }) => i(e, t, n));
185
+ if (t?.type === "READY") {
186
+ a.current.log("webview-READY", { queued: n.current.queue.length }), n.current.ready = !0;
187
+ let e = n.current.queue;
188
+ n.current.queue = [], e.forEach(({ requestId: e, variant: t, message: n }) => u(e, t, n));
151
189
  return;
152
190
  }
153
- c.emit("FROM_WEBVIEW_WORKER", n);
154
- }, [i]);
155
- return /* @__PURE__ */ f(u, {
191
+ if (t?.type === "TIMING") {
192
+ let e = t.extra ? ` ${JSON.stringify(t.extra)}` : "";
193
+ console.log(`[HinkalTiming] [webview:${t.requestId ?? "unknown"}] ${t.phase} +${t.stepMs}ms (total ${t.totalMs}ms)${e}`);
194
+ return;
195
+ }
196
+ (t?.type === "RESULT" || t?.type === "ERROR") && a.current.log(`webview-${t.type}`, { requestId: t.requestId }), l.emit("FROM_WEBVIEW_WORKER", t);
197
+ }, [u]);
198
+ return /* @__PURE__ */ p(d, {
156
199
  pointerEvents: "none",
157
- style: g.hiddenHost,
158
- children: /* @__PURE__ */ f(d, {
159
- ref: e,
200
+ style: _.hiddenHost,
201
+ children: /* @__PURE__ */ p(f, {
202
+ ref: t,
160
203
  source: {
161
- html: h,
162
- baseUrl: p
204
+ html: g,
205
+ baseUrl: m
163
206
  },
164
207
  originWhitelist: ["*"],
165
208
  javaScriptEnabled: !0,
166
209
  domStorageEnabled: !0,
167
210
  androidLayerType: "hardware",
168
- onMessage: l,
169
- onLoad: () => e.current?.injectJavaScript(m)
211
+ onMessage: v,
212
+ onConsoleMessage: (e) => {
213
+ let { message: t } = e.nativeEvent;
214
+ (t.includes("[HinkalTiming]") || t.includes("hinkal")) && console.log(`[HinkalTiming] [WebViewConsole] ${t}`);
215
+ },
216
+ onLoad: () => {
217
+ a.current.log("webview-onLoad"), t.current?.injectJavaScript(h);
218
+ }
170
219
  })
171
220
  });
172
221
  };
173
222
  //#endregion
174
- export { _ as default };
223
+ export { v as default };
@@ -1 +1 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./serialization.utils.cjs`);let t=require(`react-native`);var n=class{onmessage=null;onerror=null;requestId=e.nextRequestId();subscription;constructor(e){this.variant=e,this.subscription=t.DeviceEventEmitter.addListener(`FROM_WEBVIEW_WORKER`,e=>{!e||e.requestId!==this.requestId||(e.type===`RESULT`?this.onmessage?.({data:e.data}):e.type===`ERROR`&&this.onerror?.(Error(e.error??`WebView worker error`)))})}postMessage(e){t.DeviceEventEmitter.emit(`TO_WEBVIEW_WORKER`,{__requestId:this.requestId,variant:this.variant,message:e})}terminate(){this.subscription?.remove?.(),this.subscription=null}};exports.HinkalRNWorker=n;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../common/src/functions/utils/hinkalTiming.utils.cjs`),t=require(`./serialization.utils.cjs`);let n=require(`react-native`);var r=class{onmessage=null;onerror=null;requestId=t.nextRequestId();subscription;timing;constructor(t){this.variant=t,this.timing=e.createHinkalTiming(`rn-worker:${this.requestId}`),this.timing.log(`created`,{variant:t}),this.subscription=n.DeviceEventEmitter.addListener(`FROM_WEBVIEW_WORKER`,e=>{!e||e.requestId!==this.requestId||(e.type===`RESULT`?(this.timing.log(`result-from-webview`),this.onmessage?.({data:e.data})):e.type===`ERROR`&&(this.timing.log(`error-from-webview`,{error:e.error}),this.onerror?.(Error(e.error??`WebView worker error`))))})}postMessage(e){this.timing.log(`postMessage-to-webview`,{variant:this.variant}),n.DeviceEventEmitter.emit(`TO_WEBVIEW_WORKER`,{__requestId:this.requestId,variant:this.variant,message:e})}terminate(){this.subscription?.remove?.(),this.subscription=null}};exports.HinkalRNWorker=r;
@@ -7,6 +7,7 @@ export declare class HinkalRNWorker {
7
7
  onerror: ((error: any) => void) | null;
8
8
  private requestId;
9
9
  private subscription;
10
+ private timing;
10
11
  constructor(variant: WorkerVariant);
11
12
  postMessage(message: unknown): void;
12
13
  terminate(): void;
@@ -1,18 +1,20 @@
1
- import { nextRequestId as e } from "./serialization.utils.mjs";
2
- import { DeviceEventEmitter as t } from "react-native";
1
+ import { createHinkalTiming as e } from "../../common/src/functions/utils/hinkalTiming.utils.mjs";
2
+ import { nextRequestId as t } from "./serialization.utils.mjs";
3
+ import { DeviceEventEmitter as n } from "react-native";
3
4
  //#region libs/shared/sdk/src/react-native/bridge/HinkalRNWorker.ts
4
- var n = class {
5
+ var r = class {
5
6
  onmessage = null;
6
7
  onerror = null;
7
- requestId = e();
8
+ requestId = t();
8
9
  subscription;
9
- constructor(e) {
10
- this.variant = e, this.subscription = t.addListener("FROM_WEBVIEW_WORKER", (e) => {
11
- !e || e.requestId !== this.requestId || (e.type === "RESULT" ? this.onmessage?.({ data: e.data }) : e.type === "ERROR" && this.onerror?.(Error(e.error ?? "WebView worker error")));
10
+ timing;
11
+ constructor(t) {
12
+ this.variant = t, this.timing = e(`rn-worker:${this.requestId}`), this.timing.log("created", { variant: t }), this.subscription = n.addListener("FROM_WEBVIEW_WORKER", (e) => {
13
+ !e || e.requestId !== this.requestId || (e.type === "RESULT" ? (this.timing.log("result-from-webview"), this.onmessage?.({ data: e.data })) : e.type === "ERROR" && (this.timing.log("error-from-webview", { error: e.error }), this.onerror?.(Error(e.error ?? "WebView worker error"))));
12
14
  });
13
15
  }
14
16
  postMessage(e) {
15
- t.emit("TO_WEBVIEW_WORKER", {
17
+ this.timing.log("postMessage-to-webview", { variant: this.variant }), n.emit("TO_WEBVIEW_WORKER", {
16
18
  __requestId: this.requestId,
17
19
  variant: this.variant,
18
20
  message: e
@@ -23,4 +25,4 @@ var n = class {
23
25
  }
24
26
  };
25
27
  //#endregion
26
- export { n as HinkalRNWorker };
28
+ export { r as HinkalRNWorker };
@@ -1 +1 @@
1
- var e={name:`@gurge/sdk`,version:`0.3.15`,homepage:`hinkal.io`,author:{name:`Hinkal Protocol`},keywords:[`blockchain`,`privacy`,`zero-knowledge`,`stealth addresses`],exports:{".":{types:`./index.d.ts`,"react-native":`./index.cjs`,import:`./index.mjs`,default:`./index.cjs`},"./providers/WagmiProviderAdapter":{types:`./providers/WagmiProviderAdapter.d.ts`,"react-native":`./providers/WagmiProviderAdapter.cjs`,import:`./providers/WagmiProviderAdapter.mjs`,default:`./providers/WagmiProviderAdapter.cjs`},"./providers/EthersProviderAdapter":{types:`./providers/EthersProviderAdapter.d.ts`,"react-native":`./providers/EthersProviderAdapter.cjs`,import:`./providers/EthersProviderAdapter.mjs`,default:`./providers/EthersProviderAdapter.cjs`},"./providers/TronProviderAdapter":{types:`./providers/TronProviderAdapter.d.ts`,"react-native":`./providers/TronProviderAdapter.cjs`,import:`./providers/TronProviderAdapter.mjs`,default:`./providers/TronProviderAdapter.cjs`},"./providers/SolanaProviderAdapter":{types:`./providers/SolanaProviderAdapter.d.ts`,"react-native":`./providers/SolanaProviderAdapter.cjs`,import:`./providers/SolanaProviderAdapter.mjs`,default:`./providers/SolanaProviderAdapter.cjs`},"./providers/prepareEthersHinkal":{types:`./providers/prepareEthersHinkal.d.ts`,"react-native":`./providers/prepareEthersHinkal.cjs`,import:`./providers/prepareEthersHinkal.mjs`,default:`./providers/prepareEthersHinkal.cjs`},"./providers/prepareWagmiHinkal":{types:`./providers/prepareWagmiHinkal.d.ts`,"react-native":`./providers/prepareWagmiHinkal.cjs`,import:`./providers/prepareWagmiHinkal.mjs`,default:`./providers/prepareWagmiHinkal.cjs`},"./providers/prepareTronHinkal":{types:`./providers/prepareTronHinkal.d.ts`,"react-native":`./providers/prepareTronHinkal.cjs`,import:`./providers/prepareTronHinkal.mjs`,default:`./providers/prepareTronHinkal.cjs`},"./providers/prepareSolanaHinkal":{types:`./providers/prepareSolanaHinkal.d.ts`,"react-native":`./providers/prepareSolanaHinkal.cjs`,import:`./providers/prepareSolanaHinkal.mjs`,default:`./providers/prepareSolanaHinkal.cjs`},"./react-native/HinkalWebViewWorker":{types:`./react-native/HinkalWebViewWorker.d.ts`,"react-native":`./react-native/HinkalWebViewWorker.cjs`,import:`./react-native/HinkalWebViewWorker.mjs`,default:`./react-native/HinkalWebViewWorker.cjs`},"./react-native/metro-config":`./react-native/metro-config.js`,"./react-native/shims/*":`./react-native/shims/*`},types:`./index.d.ts`,scripts:{prebuild:`nx prebuild:workers`,build:`nx build`,lint:`nx lint`,test:`nx test`},devDependencies:{nx:`22.6.4`,vite:`^8.0.4`,"vite-plugin-dts":`^4.5.4`,"vite-tsconfig-paths":`^6.1.1`},dependencies:{"@coral-xyz/anchor":`^0.31.0`,"@solana/spl-token":`^0.4.14`,"@solana/web3.js":`^1.98.4`,"@solana/wallet-adapter-react":`^0.15.39`,axios:`^1.15.0`,"async-mutex":`^0.4.0`,bs58:`^6.0.0`,buffer:`6.0.3`,"circomlibjs-hinkal-fork":`^0.0.10`,dotenv:`^16.4.5`,ethers:`^6.15.0`,"idb-keyval":`6.2.1`,multiformats:`^9.4.2`,snarkjs:`0.7.5`,"libsodium-wrappers":`^0.8.2`,lodash:`^4.17.21`,tweetnacl:`^1.0.3`,process:`0.11.10`,"ua-parser-js":`^1.0.37`,uuid:`^9.0.1`,"node-forge":`^1.3.1`,"poseidon-lite":`^0.3.0`,tronweb:`^6.2.0`},peerDependencies:{wagmi:`2.13.3`,"@walletconnect/utils":`^2.17.2`,react:`*`,"react-native":`*`,"react-native-webview":`*`},peerDependenciesMeta:{wagmi:{optional:!0},"@walletconnect/utils":{optional:!0},react:{optional:!0},"react-native":{optional:!0},"react-native-webview":{optional:!0}}};exports.default=e;
1
+ var e={name:`@gurge/sdk`,version:`0.3.18`,homepage:`hinkal.io`,author:{name:`Hinkal Protocol`},keywords:[`blockchain`,`privacy`,`zero-knowledge`,`stealth addresses`],exports:{".":{types:`./index.d.ts`,"react-native":`./index.cjs`,import:`./index.mjs`,default:`./index.cjs`},"./providers/WagmiProviderAdapter":{types:`./providers/WagmiProviderAdapter.d.ts`,"react-native":`./providers/WagmiProviderAdapter.cjs`,import:`./providers/WagmiProviderAdapter.mjs`,default:`./providers/WagmiProviderAdapter.cjs`},"./providers/EthersProviderAdapter":{types:`./providers/EthersProviderAdapter.d.ts`,"react-native":`./providers/EthersProviderAdapter.cjs`,import:`./providers/EthersProviderAdapter.mjs`,default:`./providers/EthersProviderAdapter.cjs`},"./providers/TronProviderAdapter":{types:`./providers/TronProviderAdapter.d.ts`,"react-native":`./providers/TronProviderAdapter.cjs`,import:`./providers/TronProviderAdapter.mjs`,default:`./providers/TronProviderAdapter.cjs`},"./providers/SolanaProviderAdapter":{types:`./providers/SolanaProviderAdapter.d.ts`,"react-native":`./providers/SolanaProviderAdapter.cjs`,import:`./providers/SolanaProviderAdapter.mjs`,default:`./providers/SolanaProviderAdapter.cjs`},"./providers/prepareEthersHinkal":{types:`./providers/prepareEthersHinkal.d.ts`,"react-native":`./providers/prepareEthersHinkal.cjs`,import:`./providers/prepareEthersHinkal.mjs`,default:`./providers/prepareEthersHinkal.cjs`},"./providers/prepareWagmiHinkal":{types:`./providers/prepareWagmiHinkal.d.ts`,"react-native":`./providers/prepareWagmiHinkal.cjs`,import:`./providers/prepareWagmiHinkal.mjs`,default:`./providers/prepareWagmiHinkal.cjs`},"./providers/prepareTronHinkal":{types:`./providers/prepareTronHinkal.d.ts`,"react-native":`./providers/prepareTronHinkal.cjs`,import:`./providers/prepareTronHinkal.mjs`,default:`./providers/prepareTronHinkal.cjs`},"./providers/prepareSolanaHinkal":{types:`./providers/prepareSolanaHinkal.d.ts`,"react-native":`./providers/prepareSolanaHinkal.cjs`,import:`./providers/prepareSolanaHinkal.mjs`,default:`./providers/prepareSolanaHinkal.cjs`},"./react-native/HinkalWebViewWorker":{types:`./react-native/HinkalWebViewWorker.d.ts`,"react-native":`./react-native/HinkalWebViewWorker.cjs`,import:`./react-native/HinkalWebViewWorker.mjs`,default:`./react-native/HinkalWebViewWorker.cjs`},"./react-native/metro-config":`./react-native/metro-config.js`,"./react-native/shims/*":`./react-native/shims/*`},types:`./index.d.ts`,scripts:{prebuild:`nx prebuild:workers`,build:`nx build`,lint:`nx lint`,test:`nx test`},devDependencies:{nx:`22.6.4`,vite:`^8.0.4`,"vite-plugin-dts":`^4.5.4`,"vite-tsconfig-paths":`^6.1.1`},dependencies:{"@coral-xyz/anchor":`^0.31.0`,"@solana/spl-token":`^0.4.14`,"@solana/web3.js":`^1.98.4`,"@solana/wallet-adapter-react":`^0.15.39`,axios:`^1.15.0`,"async-mutex":`^0.4.0`,bs58:`^6.0.0`,buffer:`6.0.3`,"circomlibjs-hinkal-fork":`^0.0.10`,dotenv:`^16.4.5`,ethers:`^6.15.0`,"idb-keyval":`6.2.1`,multiformats:`^9.4.2`,snarkjs:`0.7.5`,"libsodium-wrappers":`^0.8.2`,lodash:`^4.17.21`,tweetnacl:`^1.0.3`,process:`0.11.10`,"ua-parser-js":`^1.0.37`,uuid:`^9.0.1`,"node-forge":`^1.3.1`,"poseidon-lite":`^0.3.0`,tronweb:`^6.2.0`},peerDependencies:{wagmi:`2.13.3`,"@walletconnect/utils":`^2.17.2`,react:`*`,"react-native":`*`,"react-native-webview":`*`},peerDependenciesMeta:{wagmi:{optional:!0},"@walletconnect/utils":{optional:!0},react:{optional:!0},"react-native":{optional:!0},"react-native-webview":{optional:!0}}};exports.default=e;
@@ -1,6 +1,6 @@
1
1
  var e = {
2
2
  name: "@gurge/sdk",
3
- version: "0.3.15",
3
+ version: "0.3.18",
4
4
  homepage: "hinkal.io",
5
5
  author: { name: "Hinkal Protocol" },
6
6
  keywords: [
@@ -1,2 +0,0 @@
1
- const e=require(`./workerProxy-DPeuP2Mg.js`);let t=require(`buffer`),n=require(`process`);n=e.u(n);let r=require(`circomlibjs-hinkal-fork`),i=require(`ethers`),a=require(`poseidon-lite`);a=e.u(a);let o=require(`libsodium-wrappers`);o=e.u(o);let s=require(`@solana/web3.js`),c=require(`bs58`);c=e.u(c);let l=require(`tweetnacl`);l=e.u(l);let u=require(`tronweb`);`${`00`.repeat(20)}`;var d=21888242871839275222246405745257275088548364400416034343698204186575808495617n,f=d/2n,p=200n;`${`00`.repeat(32)}`;var m=(e,t=d)=>{let n=e%t;return n>=0n?n:n+t},h=(e,t,n)=>{let r=1n,i=m(e,n),a=t;for(;a>0n;)a%2n==1n&&(r=r*i%n),a/=2n,i=i*i%n;return r},g=d,_={p:g,zero:0n,one:1n,e:e=>m(BigInt(e)),add:(e,t)=>m(e+t),sub:(e,t)=>m(e-t),mul:(e,t)=>m(e*t),div:(e,t)=>{if(t===0n)throw Error(`Division by zero in BabyJub field`);return m(e*h(t,g-2n,g))},toString:e=>m(e).toString()},v=class{F=_;A=_.e(`168700`);D=_.e(`168696`);Base8=[_.e(`5299619240641551281634865583518297030282874472190772894086521144482721001553`),_.e(`16950150798460657717958625567821834550301663161624707787222815936182638968203`)];addPoint(e,t){let n=_.mul(e[0],t[1]),r=_.mul(e[1],t[0]),i=_.mul(_.sub(e[1],_.mul(this.A,e[0])),_.add(t[0],t[1])),a=_.mul(n,r),o=_.mul(this.D,a);return[_.div(_.add(n,r),_.add(_.one,o)),_.div(_.add(i,_.sub(_.mul(this.A,n),r)),_.sub(_.one,o))]}mulPointEscalar(e,t){let n=[_.zero,_.one],r=BigInt(t),i=e;for(;r!==0n;)r%2n==1n&&(n=this.addPoint(n,i)),i=this.addPoint(i,i),r/=2n;return n}},y=new class{babyjub=void 0;async init(){this.babyjub||=e.o?new v:await(0,r.buildBabyjub)()}getJub(){return this.babyjub}},b=()=>y.getJub(),x=new class{eddsa=void 0;async init(){this.eddsa||=await(0,r.buildEddsa)()}getEddsa(){return this.eddsa}},S=()=>x.getEddsa();function C(e){return typeof e==`object`&&`toBigInt`in e?e.toBigInt():BigInt(e)}var w=()=>{let e=e=>{let t=a[`poseidon${e.length}`];if(!t)throw Error(`Poseidon: arity ${e.length} not supported (1..16)`);return t(e.map(e=>BigInt(e)))};return e.F={toString:e=>BigInt(e).toString()},e},T=new class{poseidon=void 0;async init(){this.poseidon||=e.o?w():await(0,r.buildPoseidon)()}getPoseidon(){return this.poseidon}};function E(...e){let t=T.getPoseidon();return C(t.F.toString(t(e)))}var D=(...e)=>{let t=T.getPoseidon();return i.ethers.toBeHex(t.F.toString(t([...e])))},O=async(e=!1)=>{(typeof window<`u`||typeof self<`u`)&&(typeof window<`u`&&(window.global=window),globalThis.Buffer=t.Buffer,globalThis.process=n.default),await Promise.all([o.default.ready,T.init(),y.init(),...e?[]:[x.init()]])},k=class{inMemoryCache=new Map;constructor(e){e&&this.mergeWithSerialized(e)}getInMemory(e){return this.inMemoryCache.get(e)??void 0}setInMemory(e,t){this.inMemoryCache.set(e,t)}mergeWithSerialized(t){Object.entries(t).forEach(([t,n])=>{this.set(t,e.c(n))})}},A=class extends k{isAttached=!1;get(e){return this.getInMemory(e)}set(e,t){this.setInMemory(e,t)}serialize(){return Object.fromEntries([...this.inMemoryCache].map(([t,n])=>[t,e.l(n)]))}attach(t){if(this.isAttached)throw Error(`can't reattach cache device`);return this.isAttached=!0,(...n)=>{let r=e.l(n),i=this.get(r);if(i!==void 0)return i;let a=t(...n);return this.set(r,a),a}}},j=e=>{if(e<0n||e>=21888242871839275222246405745257275088548364400416034343698204186575808495617n)throw RangeError();return e>f},M=e=>j(e)?1n:0n,N=new A,P=new A,F=new A,I=class{signature;nullifyingKey;PREFIX_FOR_SPENDING_PAIR=`1`;PREFIX_FOR_NULLIFYING_PAIR=`2`;constructor(e,t){this.signature=e,this.nullifyingKey=t}getSignature(){return this.requireSignature(),this.signature}setSignature(e){this.signature=e}requireSignature(){if(!this.signature)throw Error(`No signature provided`)}requireKeyMaterial(){if(!this.signature&&!this.nullifyingKey)throw Error(`No signature or private key provided`)}verifyTronMessage(e,t){return this.requireSignature(),t===u.Trx.verifyMessageV2(e,this.signature)}getShieldedPrivateKey=()=>(this.requireKeyMaterial(),this.nullifyingKey||=i.ethers.keccak256(this.signature),this.nullifyingKey);getShieldedPublicKey=()=>(this.requireKeyMaterial(),D(this.getShieldedPrivateKey()));getSpendingKeyPair=()=>{this.requireSignature();let e=S(),t=b(),n=D(this.PREFIX_FOR_SPENDING_PAIR,this.getSignature()),r=Buffer.from(i.ethers.getBytes(n)),a=e.prv2pub(r);return{privSpendingKey:n,pubSpendingBJJPoint:[BigInt(t.F.toString(a[0])),BigInt(t.F.toString(a[1]))]}};signEddsa=e=>{this.requireSignature();let t=b(),n=S(),r=Buffer.from(i.ethers.getBytes(this.getSpendingKeyPair().privSpendingKey)),a=t.F.e(e),o=n.signPoseidon(r,a);return{R8:[BigInt(t.F.toString(o.R8[0])),BigInt(t.F.toString(o.R8[1]))],S:BigInt(o.S)}};getShieldedPrivateKeyFromNonce=e=>{this.requireKeyMaterial();let t=D(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return i.ethers.keccak256(i.ethers.toUtf8Bytes(`hinkal-offchain-shielded-key:${t}`))};getClaimableSignatureFromNonce=e=>{this.requireKeyMaterial();let t=D(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return i.ethers.keccak256(i.ethers.toUtf8Bytes(`hinkal-claimable-utxo-signature:${t}`))};getDerivedEthereumAddress=()=>(this.requireKeyMaterial(),new i.ethers.Wallet(this.getShieldedPrivateKey()).address);getDerivedSolanaPublicKey=()=>(this.requireKeyMaterial(),s.Keypair.fromSeed(i.ethers.getBytes(this.getShieldedPrivateKey())).publicKey.toBase58());getNearIntentsAccountId=()=>{this.requireKeyMaterial();let e=s.Keypair.fromSeed(i.ethers.getBytes(this.getShieldedPrivateKey()));return i.ethers.hexlify(e.publicKey.toBytes()).slice(2)};getNearIntentsKeyPairString=()=>{this.requireKeyMaterial();let e=s.Keypair.fromSeed(i.ethers.getBytes(this.getShieldedPrivateKey()));return`ed25519:${c.default.encode(e.secretKey)}`};getSignerPrivateKeyFromNonce=e=>{this.requireKeyMaterial();let t=D(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return i.ethers.keccak256(i.ethers.toUtf8Bytes(t))};getSignerSolanaPrivateKeyFromNonce=e=>{let t=this.getSignerPrivateKeyFromNonce(e),n=i.ethers.getBytes(t),r=s.Keypair.fromSeed(n);return c.default.encode(r.secretKey)};verifyMessage(e){return this.requireSignature(),i.ethers.verifyMessage(e,this.signature)}verifySolanaMessage(e,t){this.requireSignature();let n=new TextEncoder().encode(e),r=i.ethers.getBytes(this.signature),a=new s.PublicKey(t).toBytes();return l.default.sign.detached.verify(n,r,a)}static getRandomizedStealthPairOld=P.attach((e,t)=>{let n=b(),r=e*(BigInt(t)%d)%d,i=n.mulPointEscalar(n.Base8,e),a=n.mulPointEscalar(n.Base8,r);return{H0:[BigInt(n.F.toString(i[0])),BigInt(n.F.toString(i[1]))],H1:[BigInt(n.F.toString(a[0])),BigInt(n.F.toString(a[1]))]}});static getRandomizedStealthPair=N.attach((e,t)=>{let n=b(),r=BigInt(t)%d,i=n.mulPointEscalar(n.Base8,e),a=n.mulPointEscalar(i,r);return{H0:[BigInt(n.F.toString(i[0])),BigInt(n.F.toString(i[1]))],H1:[BigInt(n.F.toString(a[0])),BigInt(n.F.toString(a[1]))]}});static getStealthAddressCompressedPoints=(e,t)=>{let{H0:n,H1:r}=this.getRandomizedStealthPairOld(e,t),[i,a]=[n,r].map(e=>BigInt(e[1])+2n**255n*M(e[0]));return{h0:i,h1:a}};static checkSignature=(e,t,n,r)=>{let{h0:i,h1:a}=this.getStealthAddressCompressedPoints(e,r);return t===i&&n===a};static getStealthAddress=F.attach((e,t)=>{let{H0:n,H1:r}=this.getRandomizedStealthPairOld(e,t);return D(2n*M(n[0])+M(r[0]),n[1],r[1])});static getH1FromH0=(e,t)=>{let n=b(),r=BigInt(t)%d,i=[n.F.e(e[0]),n.F.e(e[1])],a=n.mulPointEscalar(i,r);return[BigInt(n.F.toString(a[0])),BigInt(n.F.toString(a[1]))]};static verifyStealthPair=(e,t,n,r=!0)=>{let i=this.getH1FromH0(e,n);return r?i[1]===t[1]:i===t};static getStealthAddressNewStyle=(e,t,n)=>{if(n?.length!==2)throw Error(`Spending public key must be an array of 2 elements`);let r=this.getH1FromH0(e,t);return D(2n*M(e[0])+M(r[0]),e[1],r[1],n[0],n[1],t)};static findCorrectRandomization(e,t){if(!t)throw Error(`No Private Shielded Key Provided`);let n=BigInt(t)%d,r,i,a=0n;do r=e*10n**a%d,i=r*n%d,a+=1n;while(i>=2n**253n||r>=2n**253n);return r}static getH0FromRandomization=e=>{let t=b(),n=t.mulPointEscalar(t.Base8,e);return[BigInt(t.F.toString(n[0])),BigInt(t.F.toString(n[1]))]};static findH0(e,t){if(!t)return;let{H0:n}=this.getRandomizedStealthPair(e,t);return n}static getEncryptionKeyPair=e=>{let t=o.default.crypto_box_seed_keypair(i.ethers.getBytes(e));return{privateKey:i.ethers.hexlify(t.privateKey),publicKey:i.ethers.hexlify(t.publicKey)}};getAccessKey=()=>(this.requireKeyMaterial(),D(this.getShieldedPrivateKey(),this.getShieldedPublicKey()));getBackendToken=()=>(this.requireKeyMaterial(),D(this.getAccessKey(),this.getShieldedPublicKey()))},L={CANNOT_CERTIFY_FOR_PAST_WEEK:`Certification for the past week is not available`,CYCLICAL_REFERRALS_FORBIDDEN:`Cyclical referrals are forbidden`,USER_IS_UNRANKED:`Please certify transactions to see rank`},R={WC_NO_MATCHING_KEY:`creating the transaction failed
2
- version`,CONNECTION_PROBLEM:`Failed to connect wallet. Please try again.`,REQUEST_PENDING:`request of type 'wallet_requestpermissions' already pending for origin`},z={INSUFFICIENT_FUNDS:`Insufficient funds`,INSUFFICIENT_FUNDS_WITHDRAW:`Not enough funds to withdraw`,INSUFFICIENT_FUNDS_TRANSFER:`Not enough funds to transfer`,INSUFFICIENT_FUNDS_TO_TRANSACT:`Not enough funds to transact`,INSUFFICIENT_FUNDS_GAS:`Insufficient funds for gas * price`,INSUFFICIENT_TRON_BALANCE_FOR_FEE:`Insufficient TRX balance to cover transfer amount and transaction fee reserve`,INSUFFICIENT_SOL_BALANCE:`Insufficient SOL balance`},B={GAS_PRICE_EXCEEDS_AUTOSHIELD_LIMIT:`Skipped shielding due to gas fee exceeding your limit.`,AUTO_SHIELD_INSUFFICIENT_GAS:`Auto-Shield skipped due to insufficient gas.`};({...L,...R,...z,...B});var V=e=>BigInt(i.ethers.hexlify(i.ethers.randomBytes(e))),H=()=>Math.floor(Date.now()/1e3),U=class t{amount;erc20TokenAddress;mintAddress;timeStamp;nullifyingKey;spendingPublicKey;randomization;H0;stealthAddress;encryptionKey;commitment;nullifier;isBlocked;isNewStyle;constructor({amount:e,erc20TokenAddress:t,mintAddress:n,timeStamp:r,nullifyingKey:i,spendingPublicKey:a,randomization:o,H0:s,stealthAddress:c,encryptionKey:l,commitment:u=void 0,nullifier:d=void 0,isBlocked:f=!1,isNewStyle:p=!1}){this.amount=e,this.erc20TokenAddress=t,this.mintAddress=n,this.timeStamp=r??H().toString(),this.nullifyingKey=i,this.spendingPublicKey=a,this.randomization=o??(i?I.findCorrectRandomization(V(31),i):void 0),this.H0=s??(p&&this.randomization?I.findH0(this.randomization,i):void 0),this.stealthAddress=c,this.encryptionKey=l,this.commitment=u,this.nullifier=d,this.isBlocked=f,this.isNewStyle=p}static createFrom(e,n){return new t({...e.getConstructableParams(),nullifier:void 0,commitment:void 0,...n})}getConstructableParams(){return{amount:this.amount,erc20TokenAddress:this.erc20TokenAddress,mintAddress:this.mintAddress,timeStamp:this.timeStamp,nullifyingKey:this.nullifyingKey,spendingPublicKey:this.spendingPublicKey,randomization:this.randomization,H0:this.H0,stealthAddress:this.stealthAddress,encryptionKey:this.encryptionKey,commitment:this.commitment,nullifier:this.nullifier,isBlocked:this.isBlocked,isNewStyle:this.isNewStyle}}getBasicUtxoParams(){return{amount:this.amount,erc20TokenAddress:this.erc20TokenAddress,mintAddress:this.mintAddress,timeStamp:this.timeStamp,randomization:this.randomization,H0:this.H0,stealthAddress:this.stealthAddress,commitment:this.commitment,nullifier:this.nullifier,isBlocked:this.isBlocked,isNewStyle:this.isNewStyle}}getCommitment(){if(!this.commitment){let e=[this.amount,this.erc20TokenAddress,BigInt(this.getStealthAddress()),this.timeStamp];this.commitment=D(...e)}return this.commitment}getNullifier(){if(!this.nullifier){if(!this.nullifyingKey)throw Error(`No Nullifiers if private key is not provided`);let e=this.getCommitment(),t=D(this.nullifyingKey,e);this.nullifier=D(e,t)}return this.nullifier}getStealthAddress(){if(!this.stealthAddress){if(!this.nullifyingKey)throw Error(`No stealth address in UTXO if private key is not provided`);if(this.isNewStyle){if(!this.H0)throw Error(`No H0 point provided`);this.stealthAddress=I.getStealthAddressNewStyle(this.H0,this.nullifyingKey,this.spendingPublicKey)}else{if(!this.randomization)throw Error(`No randomization provided`);this.stealthAddress=I.getStealthAddress(this.randomization,this.nullifyingKey)}}return this.stealthAddress}getTokenAddress(t){let n=e.r(t)?this.mintAddress:this.erc20TokenAddress;if(!n)throw Error(`No token address provided`);return n}getEncryptionKey(){if(!this.nullifyingKey){if(!this.encryptionKey)throw Error(`No encryption key provided in UTXO`);return this.encryptionKey}return I.getEncryptionKeyPair(this.nullifyingKey).publicKey}},W=()=>o.default.crypto_box_SEALBYTES+o.default.crypto_secretbox_KEYBYTES,G=e=>{let t=o.default.crypto_secretbox_NONCEBYTES,n=W(),r=0,i=e[r];r+=1;let a=e.slice(r,r+t);r+=t;let s=[];for(let t=0;t<i;t+=1)s.push(e.slice(r,r+n)),r+=n;return{nonce:a,sealedKeys:s,ciphertext:e.slice(r)}},K=(e,t,n,r)=>{let{nonce:a,sealedKeys:s,ciphertext:c}=G(e),l=o.default.crypto_box_seal_open(s[r],i.ethers.getBytes(n),i.ethers.getBytes(t)),u=o.default.crypto_secretbox_open_easy(c,a,l);return Buffer.from(u)},q=(e,t,n)=>{let r=o.default.crypto_box_seal_open(e,i.ethers.getBytes(n),i.ethers.getBytes(t));return Buffer.from(r)},J=54912,Y=2,X=e=>e[0]*256+e[1],Z=(e,t)=>{let{privateKey:n,publicKey:r}=I.getEncryptionKeyPair(t.getShieldedPrivateKey()),i=X(e)===J?K(e.slice(Y),n,r,0):q(e,n,r),a=Buffer.from(i).toString(`utf-8`).split(`0x`).filter(e=>e.length!==0),o=e=>BigInt(`0x${e}`),c=e=>`0x${e}`,l=a.length>=8,u=l&&o(a[5])===1n,d=l?8:6,f=a[d]?c(a[d]):void 0,p=f?new s.PublicKey(Buffer.from(f.slice(2),`hex`)).toString():void 0;return{amount:o(a[0]),erc20TokenAddress:c(a[1]),randomization:o(a[2]),stealthAddress:c(a[3]),nullifyingKey:t.getShieldedPrivateKey(),timeStamp:o(a[4]).toString(),isNewStyle:u,...u?{H0:[o(a[6]),o(a[7])]}:{},mintAddress:p}},Q=(e,t)=>new U(Z(e,t)),$=e=>e&2n**255n-1n,ee=e=>e>>255n&1n,te=(...t)=>{e.a&&console.log(...t)};Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return te}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return O}});