@kapa123456789/sdk 0.0.67 → 0.0.68
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/common/src/data-structures/Hinkal/hinkalProoflessDeposit.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.mjs +10 -10
- package/common/src/functions/web3/functionCalls/constructBatchCall.cjs +1 -1
- package/common/src/functions/web3/functionCalls/constructBatchCall.mjs +6 -27
- package/common/src/functions/web3/functionCalls/transactCallDirect.cjs +1 -1
- package/common/src/functions/web3/functionCalls/transactCallDirect.mjs +92 -110
- package/common/src/providers/WagmiProviderAdapter.cjs +1 -1
- package/common/src/providers/WagmiProviderAdapter.mjs +30 -7
- package/common/src/webworker/package.json +1 -1
- package/common/src/webworker/viteWorkerURL.constant.cjs +3 -3
- package/common/src/webworker/viteWorkerURL.constant.mjs +3 -3
- package/package.json +1 -1
- package/sdk/package.json.cjs +1 -1
- package/sdk/package.json.mjs +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/ethereum-network.types.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../../functions/utils/caseInsensitive.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../functions/utils/getContractAddress.cjs`),c=require(`../../functions/utils/tron.utils.cjs`),l=require(`../../error-handling/logger.cjs`),u=require(`../../functions/utils/token-check.utils.cjs`),d=require(`../../functions/snarkjs/common.snarkjs.cjs`),f=require(`../../functions/pre-transaction/constructAdminData.cjs`),p=require(`../../externalABIs/index.cjs`),m=require(`../../functions/utils/tx-confirmation.utils.cjs`),h=require(`../../functions/utils/tronSimulation.utils.cjs`),g=require(`../../functions/web3/functionCalls/
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/ethereum-network.types.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../../functions/utils/caseInsensitive.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../functions/utils/getContractAddress.cjs`),c=require(`../../functions/utils/tron.utils.cjs`),l=require(`../../error-handling/logger.cjs`),u=require(`../../functions/utils/token-check.utils.cjs`),d=require(`../../functions/snarkjs/common.snarkjs.cjs`),f=require(`../../functions/pre-transaction/constructAdminData.cjs`),p=require(`../../externalABIs/index.cjs`),m=require(`../../functions/utils/tx-confirmation.utils.cjs`),h=require(`../../functions/utils/tronSimulation.utils.cjs`),g=require(`../../functions/web3/functionCalls/waitForErc20Approvals.cjs`),_=require(`../../API/admin-calls.cjs`),v=require(`../../functions/web3/functionCalls/constructBatchCall.cjs`);var y=(e,t)=>{let n=[],r=0;for(let i=0;i<e.length;i+=1){let a=!1;for(let o=0;o<r;o+=1)if(u.isSameERC20Token(n[o].token,e[i])){n[o].balance+=t[i],a=!0;break}a||(n[r]={token:e[i],balance:t[i]},r+=1)}return n},b=async(e,r,i,o)=>{for(let s=0;s<o.length;s+=1)a.caseInsensitiveEqual(o[s].token.erc20TokenAddress,t.zeroAddress)||await m.waitForEthereumTransactionConfirmation(r,(await e.getContractWithSigner(r,n.ContractType.ERC20Contract,o[s].token.erc20TokenAddress).approve(i,o[s].balance)).hash)},x=async(e,n,r,i)=>{let a=Array.from(i.entries());for(let i=0;i<a.length;i+=1){let[o,s]=a[i],c=await e.contract(p.ERC20ABI,o).allowance(n,r).call({from:n});if(BigInt(String(c))<s){let{transaction:i}=await e.transactionBuilder.triggerSmartContract(o,`approve(address,uint256)`,{feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN},[{type:`address`,value:r},{type:`uint256`,value:s.toString()}],n),a=await e.trx.sign(i),c=await e.trx.sendRawTransaction(a);if(!c.result){let e=c.code??`UNKNOWN`,t=c.message?Buffer.from(c.message,`hex`).toString():`no message`;throw Error(`Tron token approval failed: ${e} - ${t}`)}}}},S=e=>{let t=new Set;e.forEach(({extraRandomization:e,stealthAddress:n})=>{let r=`${e.toString()}:${n.toString()}`;if(t.has(r))throw Error(`Duplicate randomization and stealth address pair detected in stealthAddressStructures`);t.add(r)})},C=async(n,i,o,s,u)=>{let d=n.getTronWeb(),{hinkalAddress:f}=e.networkRegistry[i].contractData,p=c.evmHexToTronBase58Address(f),m=await n.getEthereumAddressByChain(i),_=o.map(e=>e.erc20TokenAddress),v=o.map(()=>0n),y=0n,b=new Map;for(let e=0;e<o.length;e+=1){let n=c.evmHexToTronBase58Address(o[e].erc20TokenAddress);if(a.caseInsensitiveEqual(o[e].erc20TokenAddress,t.zeroAddress))y+=s[e];else{let t=b.get(n)??0n;b.set(n,t+s[e])}}await x(d,m,p,b),await g.waitForTronErc20Approvals(d,m,p,Array.from(b.entries()).map(([e,t])=>({tokenAddress:e,requiredAmount:t})));let S=u.map(e=>({extraRandomization:e.extraRandomization.toString(),stealthAddress:e.stealthAddress.toString(),H0:e.H0.toString(),H1:e.H1.toString()}));if(await h.simulateTronTransaction(i,p,`prooflessDeposit`,e.networkRegistry[i].contractData.hinkalABI,[_,s.map(String),v.map(String),u.map(e=>[e.extraRandomization.toString(),e.stealthAddress.toString(),e.H0.toString(),e.H1.toString()])],m,y>0n?y:void 0),y>0n){let n=BigInt(await d.trx.getBalance(m)),a=BigInt(t.TRON_DEFAULT_FEE_LIMIT_SUN);try{let{hinkalABI:t}=e.networkRegistry[i].contractData;if(!t)throw Error(`Hinkal ABI not found`);a=await c.estimateTronFeeSunWithPadding(d,i,p,m,c.createTronCallData(t,`prooflessDeposit`,[_,s.map(String),v.map(String),u.map(e=>[e.extraRandomization.toString(),e.stealthAddress.toString(),e.H0.toString(),e.H1.toString()])]),y)}catch(e){l.Logger.error(`Error estimating Tron prooflessDeposit fee`,e)}if(n<y+a)throw Error(r.insufficientResourcesErrorCodes.INSUFFICIENT_TRON_BALANCE_FOR_FEE)}let{transaction:C}=await d.transactionBuilder.triggerSmartContract(p,`prooflessDeposit(address[],uint256[],uint256[],(uint256,uint256,uint256,uint256)[])`,{feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN,callValue:y>0n?Number(y):0},[{type:`address[]`,value:_},{type:`uint256[]`,value:s.map(String)},{type:`uint256[]`,value:v.map(String)},{type:`tuple(uint256,uint256,uint256,uint256)[]`,value:S.map(e=>[e.extraRandomization,e.stealthAddress,e.H0,e.H1])}],m),w=await d.trx.sign(C),T=await d.trx.sendRawTransaction(w);if(!T.result)throw l.Logger.error(`Tron prooflessDeposit broadcast failed`,T),Error(`Tron prooflessDeposit broadcast failed`);let E=typeof T==`string`?T:T?.txid??T?.transaction?.txID;if(!E)throw Error(`Tron prooflessDeposit failed (missing txid)`);return E},w=async(r,c,l,p,m)=>{let h=u.validateAndGetChainId(c),x=e.isTronLike(h),w=await r.getEthereumAddressByChain(h),T=r.userKeys.getShieldedPrivateKey(),E=p??c.map(()=>d.calcStealthAddressStructure(o.Utxo.findCorrectRandomization(i.randomBigInt(31),T),T));if(E.length!==c.length)throw Error(`Stealth address structures length must be equal to erc20 tokens length`);S(E);let D;if(x)D=await C(r,h,c,l,E);else{let e=r.getContractWithSigner(h,n.ContractType.HinkalContract),i=r.getProviderAdapter(h),o=y(c,l),u=c.reduce((e,n,r)=>a.caseInsensitiveEqual(n.erc20TokenAddress,t.zeroAddress)?e+l[r]:e,0n),d=o.filter(({token:e,balance:n})=>!a.caseInsensitiveEqual(e.erc20TokenAddress,t.zeroAddress)&&n>0n),f;if(d.length>0&&await i.supportsBatchCall?.(h)&&i.sendBatchCallsTransaction){let t=v.buildApproveAndProoflessDepositCalls(d.map(({token:e})=>e.erc20TokenAddress),d.map(({balance:e})=>e),s.getContractAddress(e),e,c.map(({erc20TokenAddress:e})=>e),l,c.map(()=>0n),E,u);f=await i.sendBatchCallsTransaction(h,t)}else{await b(r,h,s.getContractAddress(e),o);let t=await r.getEthereumAddressByChain(h),n=o.map(({token:e,balance:t})=>({tokenAddress:e.erc20TokenAddress,requiredAmount:t}));await g.waitForErc20Approvals(r,h,t,s.getContractAddress(e),n),f=await e.prooflessDeposit(c.map(({erc20TokenAddress:e})=>e),l,c.map(()=>0n),E,{value:u>0n?u:void 0})}D=f.hash}return _.emitTxPublicData(f.constructAdminData(m,h,c.map(({erc20TokenAddress:e})=>e),l,w)),D};exports.hinkalProoflessDeposit=w;
|
|
@@ -14,9 +14,9 @@ import { constructAdminData as _ } from "../../functions/pre-transaction/constru
|
|
|
14
14
|
import { ERC20ABI as v } from "../../externalABIs/index.mjs";
|
|
15
15
|
import { waitForEthereumTransactionConfirmation as y } from "../../functions/utils/tx-confirmation.utils.mjs";
|
|
16
16
|
import { simulateTronTransaction as b } from "../../functions/utils/tronSimulation.utils.mjs";
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
17
|
+
import { waitForErc20Approvals as x, waitForTronErc20Approvals as S } from "../../functions/web3/functionCalls/waitForErc20Approvals.mjs";
|
|
18
|
+
import { emitTxPublicData as C } from "../../API/admin-calls.mjs";
|
|
19
|
+
import { buildApproveAndProoflessDepositCalls as w } from "../../functions/web3/functionCalls/constructBatchCall.mjs";
|
|
20
20
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalProoflessDeposit.ts
|
|
21
21
|
var T = (e, t) => {
|
|
22
22
|
let n = [], r = 0;
|
|
@@ -60,16 +60,16 @@ var T = (e, t) => {
|
|
|
60
60
|
t.add(r);
|
|
61
61
|
});
|
|
62
62
|
}, k = async (e, i, o, c, l) => {
|
|
63
|
-
let m = e.getTronWeb(), { hinkalAddress: h } = t[i].contractData, g = f(h), _ = await e.getEthereumAddressByChain(i), v = o.map((e) => e.erc20TokenAddress), y = o.map(() => 0n), x = 0n,
|
|
63
|
+
let m = e.getTronWeb(), { hinkalAddress: h } = t[i].contractData, g = f(h), _ = await e.getEthereumAddressByChain(i), v = o.map((e) => e.erc20TokenAddress), y = o.map(() => 0n), x = 0n, C = /* @__PURE__ */ new Map();
|
|
64
64
|
for (let e = 0; e < o.length; e += 1) {
|
|
65
65
|
let t = f(o[e].erc20TokenAddress);
|
|
66
66
|
if (s(o[e].erc20TokenAddress, r)) x += c[e];
|
|
67
67
|
else {
|
|
68
|
-
let n =
|
|
69
|
-
|
|
68
|
+
let n = C.get(t) ?? 0n;
|
|
69
|
+
C.set(t, n + c[e]);
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
await D(m, _, g,
|
|
72
|
+
await D(m, _, g, C), await S(m, _, g, Array.from(C.entries()).map(([e, t]) => ({
|
|
73
73
|
tokenAddress: e,
|
|
74
74
|
requiredAmount: t
|
|
75
75
|
})));
|
|
@@ -149,7 +149,7 @@ var T = (e, t) => {
|
|
|
149
149
|
else {
|
|
150
150
|
let e = t.getContractWithSigner(f, i.HinkalContract), o = t.getProviderAdapter(f), c = T(n, a), u = n.reduce((e, t, n) => s(t.erc20TokenAddress, r) ? e + a[n] : e, 0n), d = c.filter(({ token: e, balance: t }) => !s(e.erc20TokenAddress, r) && t > 0n), p;
|
|
151
151
|
if (d.length > 0 && await o.supportsBatchCall?.(f) && o.sendBatchCallsTransaction) {
|
|
152
|
-
let t =
|
|
152
|
+
let t = w(d.map(({ token: e }) => e.erc20TokenAddress), d.map(({ balance: e }) => e), l(e), e, n.map(({ erc20TokenAddress: e }) => e), a, n.map(() => 0n), y, u);
|
|
153
153
|
p = await o.sendBatchCallsTransaction(f, t);
|
|
154
154
|
} else {
|
|
155
155
|
await E(t, f, l(e), c);
|
|
@@ -157,11 +157,11 @@ var T = (e, t) => {
|
|
|
157
157
|
tokenAddress: e.erc20TokenAddress,
|
|
158
158
|
requiredAmount: t
|
|
159
159
|
}));
|
|
160
|
-
await
|
|
160
|
+
await x(t, f, r, l(e), i), p = await e.prooflessDeposit(n.map(({ erc20TokenAddress: e }) => e), a, n.map(() => 0n), y, { value: u > 0n ? u : void 0 });
|
|
161
161
|
}
|
|
162
162
|
b = p.hash;
|
|
163
163
|
}
|
|
164
|
-
return
|
|
164
|
+
return C(_(d, f, n.map(({ erc20TokenAddress: e }) => e), a, m)), b;
|
|
165
165
|
};
|
|
166
166
|
//#endregion
|
|
167
167
|
export { A as hinkalProoflessDeposit };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../utils/getContractAddress.cjs`),t=require(`../../../externalABIs/index.cjs`);let n=require(`ethers`);var r=(e,r)=>new n.ethers.Interface(t.ERC20ABI).encodeFunctionData(`approve`,[e,r]),i=(e,t,n,r
|
|
1
|
+
require(`../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../utils/getContractAddress.cjs`),t=require(`../../../externalABIs/index.cjs`);let n=require(`ethers`);var r=(e,r)=>new n.ethers.Interface(t.ERC20ABI).encodeFunctionData(`approve`,[e,r]),i=(e,t,n,r,i)=>i.encodeFunctionData(`prooflessDeposit`,[e,t,n,r]),a=(e,t,i,a,o,s)=>{let c=[];for(let a=0;a<e.length;a+=1){let o=e[a],s=t[a];o!==n.ethers.ZeroAddress&&s>0n&&c.push({to:o,value:`0x0`,data:r(i,s)})}return c.push({to:a,value:s>0n?`0x${s.toString(16)}`:`0x0`,data:o}),c},o=(t,n,r,o,s,c,l,u,d)=>{let f=i(s,c,l,u,o.interface);return a(t,n,r,e.getContractAddress(o),f,d)};exports.buildApproveAndProoflessDepositCalls=o;
|
|
@@ -2,18 +2,12 @@ import { getContractAddress as e } from "../../utils/getContractAddress.mjs";
|
|
|
2
2
|
import { ERC20ABI as t } from "../../../externalABIs/index.mjs";
|
|
3
3
|
import { ethers as n } from "ethers";
|
|
4
4
|
//#region libs/shared/common/src/functions/web3/functionCalls/constructBatchCall.ts
|
|
5
|
-
var r = (e, r) => new n.Interface(t).encodeFunctionData("approve", [e, r]), i = (e, t, n, r) =>
|
|
6
|
-
e[0],
|
|
7
|
-
e[1],
|
|
8
|
-
e[2],
|
|
9
|
-
t,
|
|
10
|
-
n
|
|
11
|
-
]), a = (e, t, n, r, i) => i.encodeFunctionData("prooflessDeposit", [
|
|
5
|
+
var r = (e, r) => new n.Interface(t).encodeFunctionData("approve", [e, r]), i = (e, t, n, r, i) => i.encodeFunctionData("prooflessDeposit", [
|
|
12
6
|
e,
|
|
13
7
|
t,
|
|
14
8
|
n,
|
|
15
9
|
r
|
|
16
|
-
]),
|
|
10
|
+
]), a = (e, t, i, a, o, s) => {
|
|
17
11
|
let c = [];
|
|
18
12
|
for (let a = 0; a < e.length; a += 1) {
|
|
19
13
|
let o = e[a], s = t[a];
|
|
@@ -28,24 +22,9 @@ var r = (e, r) => new n.Interface(t).encodeFunctionData("approve", [e, r]), i =
|
|
|
28
22
|
value: s > 0n ? `0x${s.toString(16)}` : "0x0",
|
|
29
23
|
data: o
|
|
30
24
|
}), c;
|
|
31
|
-
},
|
|
32
|
-
let f =
|
|
33
|
-
|
|
34
|
-
let i = t[e], s = a[e];
|
|
35
|
-
i !== n.ZeroAddress && s > 0n && f.push({
|
|
36
|
-
to: i,
|
|
37
|
-
value: "0x0",
|
|
38
|
-
data: r(o, s)
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
return f.push({
|
|
42
|
-
to: e(s),
|
|
43
|
-
value: d > 0n ? `0x${d.toString(16)}` : "0x0",
|
|
44
|
-
data: i(c, l, u, s.interface)
|
|
45
|
-
}), f;
|
|
46
|
-
}, c = (t, n, r, i, s, c, l, u, d) => {
|
|
47
|
-
let f = a(s, c, l, u, i.interface);
|
|
48
|
-
return o(t, n, r, e(i), f, d);
|
|
25
|
+
}, o = (t, n, r, o, s, c, l, u, d) => {
|
|
26
|
+
let f = i(s, c, l, u, o.interface);
|
|
27
|
+
return a(t, n, r, e(o), f, d);
|
|
49
28
|
};
|
|
50
29
|
//#endregion
|
|
51
|
-
export {
|
|
30
|
+
export { o as buildApproveAndProoflessDepositCalls };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants/protocol.constants.cjs`),t=require(`../../../types/ethereum-network.types.cjs`),n=require(`../../utils/time.utils.cjs`),r=require(`../../utils/getContractAddress.cjs`),i=require(`./recoverTransactionFromError.cjs`),a=require(`./approveTokensToHinkal.cjs`),o=require(`./
|
|
1
|
+
require(`../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants/protocol.constants.cjs`),t=require(`../../../types/ethereum-network.types.cjs`),n=require(`../../utils/time.utils.cjs`),r=require(`../../utils/getContractAddress.cjs`),i=require(`./recoverTransactionFromError.cjs`),a=require(`./approveTokensToHinkal.cjs`),o=require(`./waitForErc20Approvals.cjs`);let s=require(`ethers`);var c=`[transactCallDirect]`,l=e=>typeof e==`bigint`?e.toString():void 0,u=e=>({aLength:e?.[0]?.length,bOuterLength:e?.[1]?.length,bInnerLengths:e?.[1]?.map(e=>e.length),cLength:e?.[2]?.length,inputLength:e?.[3]?.length}),d=e=>({tokenCount:e.erc20TokenAddresses?.length,tokenAddresses:e.erc20TokenAddresses,amountChanges:e.amountChanges?.map(e=>e.toString()),inputNullifierGroupCount:e.inputNullifiers?.length,inputNullifierSizes:e.inputNullifiers?.map(e=>e.length),outCommitmentGroupCount:e.outCommitments?.length,outCommitmentSizes:e.outCommitments?.map(e=>e.length),encryptedOutputGroupCount:e.encryptedOutputs?.length,encryptedOutputSizes:e.encryptedOutputs?.map(e=>e.length),rootHashHinkal:l(e.rootHashHinkal),rootHashAccessToken:l(e.rootHashAccessToken),relay:e.relay,externalAddress:e.externalAddress,externalActionId:l(e.externalActionId),calldataHash:l(e.calldataHash),publicSignalCount:e.publicSignalCount,originalSender:e.originalSender}),f=e=>({hash:`hash`in e?e.hash:void 0,to:e.to,from:e.from,nonce:e.nonce,value:typeof e.value==`bigint`?e.value.toString():e.value,gasLimit:typeof e.gasLimit==`bigint`?e.gasLimit.toString():e.gasLimit,dataLength:typeof e.data==`string`?e.data.length:void 0}),p=async(l,p,m,h,g,_,v,y,b,x=!0,S=!1)=>{console.log(`${c} start`,{chainId:p,preEstimateGas:x,returnTxData:S,amountIsArray:Array.isArray(m),tokenIsArray:Array.isArray(h),zkCallData:u(g),dimData:v,circomData:d(_)});let C=Array.isArray(m)?m:[m],w=Array.isArray(h)?h:[h];if(console.log(`${c} normalized inputs`,{amounts:C.map(e=>e.toString()),tokenAddresses:w.map(({erc20TokenAddress:e})=>e),tokenSymbols:w.map(({symbol:e})=>e)}),C.length!==w.length)throw Error(`token and amount length mismatch`);console.log(`${c} fetching signer contract`);let T=l.getContractWithSigner(p,t.ContractType.HinkalContract);console.log(`${c} signer contract ready`,{hinkalContractAddress:r.getContractAddress(T)}),console.log(`${c} fetching ethereum address`);let E=await l.getEthereumAddressByChain(p);console.log(`${c} ethereum address ready`,{ethereumAddress:E});let D=y??T,O=b??T;console.log(`${c} contracts resolved`,{approvalContractAddress:r.getContractAddress(D),transactionContractAddress:r.getContractAddress(O),usedCustomApprovalContract:!!y,usedCustomTransactionContract:!!b});let k=`transact`,A=w.findIndex(({erc20TokenAddress:t})=>t===e.zeroAddress),j=w.some(({erc20TokenAddress:t})=>t!==e.zeroAddress),M=A===-1?0n:C[A];console.log(`${c} token analysis`,{ethIndex:A,needsApproval:j,ethAmount:M.toString()}),console.log(`${c} fetching provider adapter`);let N=l.getProviderAdapter(p);if(console.log(`${c} provider adapter ready`,{providerAdapterType:N?.constructor?.name}),console.log(`${c} checking batch support`),!S&&(console.log(`${c} approving tokens start`),await a.approveTokensToHinkal(l,p,D,w,C),console.log(`${c} approving tokens complete`),j)){let e=w.map(({erc20TokenAddress:e},t)=>({tokenAddress:e,requiredAmount:C[t]}));console.log(`${c} waiting for approvals start`,{ownerAddress:E,spenderAddress:r.getContractAddress(D),requirements:e.map(({tokenAddress:e,requiredAmount:t})=>({tokenAddress:e,requiredAmount:t.toString()}))}),await o.waitForErc20Approvals(l,p,E,r.getContractAddress(D),e),console.log(`${c} waiting for approvals complete`)}let P={value:M>0n?BigInt(M).toString():void 0,gasLimit:void 0};console.log(`${c} overrides prepared`,P);let F,I=[g[0],g[1],g[2],v,_,{...P,from:E}];console.log(`${c} call data prepared`,{method:k,dimData:v,transactionContractAddress:r.getContractAddress(O),from:E,value:P.value,zkCallData:u(g)});let{runner:L}=O;if(console.log(`${c} runner resolved`,{runnerType:L?.constructor?.name,hasProvider:!!L?.provider}),!(L instanceof s.ethers.AbstractSigner))throw console.log(`${c} runner is not a signer`,{runnerType:L?.constructor?.name}),Error(`expected signer`);if(x){console.log(`${c} estimateGas start`);try{F=Number(await O[k].estimateGas(...I)),console.log(`${c} estimateGas success`,{gasCosts:F})}catch(e){console.log(`${c} estimateGas error`,{message:e?.message,code:e?.code,shortMessage:e?.shortMessage,reason:e?.reason,data:e?.data,error:e})}}else console.log(`${c} estimateGas skipped`);let R=F&&F>=0?Math.ceil(F*12/10):void 0;R&&(I[5].gasLimit=R),console.log(`${c} gas configuration final`,{gasCosts:F,extendedGasCosts:R,finalOverrides:I[5]}),console.log(`${c} waitLittle start`),await n.waitLittle(),console.log(`${c} waitLittle complete`);let z;try{S?(console.log(`${c} populateTransaction start`),z=await O[k].populateTransaction(...I),console.log(`${c} populateTransaction success`,f(z))):(console.log(`${c} contract call start`),z=await O[k](...I),console.log(`${c} contract call success`,f(z)))}catch(e){if(console.log(`${c} contract call error`,{message:e?.message,code:e?.code,shortMessage:e?.shortMessage,reason:e?.reason,transactionHash:e?.transactionHash,data:e?.data,error:e}),!e?.transactionHash)throw e;console.log(`${c} recoverTransactionFromError start`,{transactionHash:e.transactionHash});let t=await i.recoverTransactionFromError(L.provider,e.transactionHash);if(!t)throw console.log(`${c} recoverTransactionFromError failed`),e;console.log(`${c} recoverTransactionFromError success`,f(t)),z=t}return console.log(`${c} complete`,f(z)),z};exports.transactCallDirect=p;
|
|
@@ -4,17 +4,16 @@ import { waitLittle as n } from "../../utils/time.utils.mjs";
|
|
|
4
4
|
import { getContractAddress as r } from "../../utils/getContractAddress.mjs";
|
|
5
5
|
import { recoverTransactionFromError as i } from "./recoverTransactionFromError.mjs";
|
|
6
6
|
import { approveTokensToHinkal as a } from "./approveTokensToHinkal.mjs";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { ethers as c } from "ethers";
|
|
7
|
+
import { waitForErc20Approvals as o } from "./waitForErc20Approvals.mjs";
|
|
8
|
+
import { ethers as s } from "ethers";
|
|
10
9
|
//#region libs/shared/common/src/functions/web3/functionCalls/transactCallDirect.ts
|
|
11
|
-
var
|
|
10
|
+
var c = "[transactCallDirect]", l = (e) => typeof e == "bigint" ? e.toString() : void 0, u = (e) => ({
|
|
12
11
|
aLength: e?.[0]?.length,
|
|
13
12
|
bOuterLength: e?.[1]?.length,
|
|
14
13
|
bInnerLengths: e?.[1]?.map((e) => e.length),
|
|
15
14
|
cLength: e?.[2]?.length,
|
|
16
15
|
inputLength: e?.[3]?.length
|
|
17
|
-
}),
|
|
16
|
+
}), d = (e) => ({
|
|
18
17
|
tokenCount: e.erc20TokenAddresses?.length,
|
|
19
18
|
tokenAddresses: e.erc20TokenAddresses,
|
|
20
19
|
amountChanges: e.amountChanges?.map((e) => e.toString()),
|
|
@@ -24,15 +23,15 @@ var l = "[transactCallDirect]", u = (e) => typeof e == "bigint" ? e.toString() :
|
|
|
24
23
|
outCommitmentSizes: e.outCommitments?.map((e) => e.length),
|
|
25
24
|
encryptedOutputGroupCount: e.encryptedOutputs?.length,
|
|
26
25
|
encryptedOutputSizes: e.encryptedOutputs?.map((e) => e.length),
|
|
27
|
-
rootHashHinkal:
|
|
28
|
-
rootHashAccessToken:
|
|
26
|
+
rootHashHinkal: l(e.rootHashHinkal),
|
|
27
|
+
rootHashAccessToken: l(e.rootHashAccessToken),
|
|
29
28
|
relay: e.relay,
|
|
30
29
|
externalAddress: e.externalAddress,
|
|
31
|
-
externalActionId:
|
|
32
|
-
calldataHash:
|
|
30
|
+
externalActionId: l(e.externalActionId),
|
|
31
|
+
calldataHash: l(e.calldataHash),
|
|
33
32
|
publicSignalCount: e.publicSignalCount,
|
|
34
33
|
originalSender: e.originalSender
|
|
35
|
-
}),
|
|
34
|
+
}), f = (e) => ({
|
|
36
35
|
hash: "hash" in e ? e.hash : void 0,
|
|
37
36
|
to: e.to,
|
|
38
37
|
from: e.from,
|
|
@@ -40,108 +39,91 @@ var l = "[transactCallDirect]", u = (e) => typeof e == "bigint" ? e.toString() :
|
|
|
40
39
|
value: typeof e.value == "bigint" ? e.value.toString() : e.value,
|
|
41
40
|
gasLimit: typeof e.gasLimit == "bigint" ? e.gasLimit.toString() : e.gasLimit,
|
|
42
41
|
dataLength: typeof e.data == "string" ? e.data.length : void 0
|
|
43
|
-
}),
|
|
44
|
-
console.log(`${
|
|
45
|
-
chainId:
|
|
46
|
-
preEstimateGas:
|
|
47
|
-
returnTxData:
|
|
48
|
-
amountIsArray: Array.isArray(
|
|
49
|
-
tokenIsArray: Array.isArray(
|
|
50
|
-
zkCallData:
|
|
51
|
-
dimData:
|
|
52
|
-
circomData:
|
|
42
|
+
}), p = async (l, p, m, h, g, _, v, y, b, x = !0, S = !1) => {
|
|
43
|
+
console.log(`${c} start`, {
|
|
44
|
+
chainId: p,
|
|
45
|
+
preEstimateGas: x,
|
|
46
|
+
returnTxData: S,
|
|
47
|
+
amountIsArray: Array.isArray(m),
|
|
48
|
+
tokenIsArray: Array.isArray(h),
|
|
49
|
+
zkCallData: u(g),
|
|
50
|
+
dimData: v,
|
|
51
|
+
circomData: d(_)
|
|
53
52
|
});
|
|
54
|
-
let
|
|
55
|
-
if (console.log(`${
|
|
56
|
-
amounts:
|
|
57
|
-
tokenAddresses:
|
|
58
|
-
tokenSymbols:
|
|
59
|
-
}),
|
|
60
|
-
console.log(`${
|
|
61
|
-
let
|
|
62
|
-
console.log(`${
|
|
63
|
-
let
|
|
64
|
-
console.log(`${
|
|
65
|
-
let
|
|
66
|
-
console.log(`${
|
|
67
|
-
approvalContractAddress: r(
|
|
68
|
-
transactionContractAddress: r(
|
|
69
|
-
usedCustomApprovalContract: !!
|
|
70
|
-
usedCustomTransactionContract: !!
|
|
53
|
+
let C = Array.isArray(m) ? m : [m], w = Array.isArray(h) ? h : [h];
|
|
54
|
+
if (console.log(`${c} normalized inputs`, {
|
|
55
|
+
amounts: C.map((e) => e.toString()),
|
|
56
|
+
tokenAddresses: w.map(({ erc20TokenAddress: e }) => e),
|
|
57
|
+
tokenSymbols: w.map(({ symbol: e }) => e)
|
|
58
|
+
}), C.length !== w.length) throw Error("token and amount length mismatch");
|
|
59
|
+
console.log(`${c} fetching signer contract`);
|
|
60
|
+
let T = l.getContractWithSigner(p, t.HinkalContract);
|
|
61
|
+
console.log(`${c} signer contract ready`, { hinkalContractAddress: r(T) }), console.log(`${c} fetching ethereum address`);
|
|
62
|
+
let E = await l.getEthereumAddressByChain(p);
|
|
63
|
+
console.log(`${c} ethereum address ready`, { ethereumAddress: E });
|
|
64
|
+
let D = y ?? T, O = b ?? T;
|
|
65
|
+
console.log(`${c} contracts resolved`, {
|
|
66
|
+
approvalContractAddress: r(D),
|
|
67
|
+
transactionContractAddress: r(O),
|
|
68
|
+
usedCustomApprovalContract: !!y,
|
|
69
|
+
usedCustomTransactionContract: !!b
|
|
71
70
|
});
|
|
72
|
-
let
|
|
73
|
-
console.log(`${
|
|
74
|
-
ethIndex:
|
|
75
|
-
needsApproval:
|
|
76
|
-
ethAmount:
|
|
77
|
-
}), console.log(`${
|
|
78
|
-
let
|
|
79
|
-
console.log(`${
|
|
80
|
-
|
|
81
|
-
if (console.log(`${l} batch support resolved`, {
|
|
82
|
-
supportsBatchCall: F,
|
|
83
|
-
hasSendBatchCallsTransaction: !!P.sendBatchCallsTransaction
|
|
84
|
-
}), !C && M && F && P.sendBatchCallsTransaction) {
|
|
85
|
-
console.log(`${l} entering batch call path`);
|
|
86
|
-
let e = T.map((e) => e.erc20TokenAddress), t = o(e, w, r(O), k, _, y, v, N);
|
|
87
|
-
console.log(`${l} batch calls built`, {
|
|
88
|
-
batchCallCount: t.length,
|
|
89
|
-
tokenAddresses: e,
|
|
90
|
-
approvalContractAddress: r(O),
|
|
91
|
-
transactionContractAddress: r(k)
|
|
92
|
-
}), console.log(`${l} sending batch calls transaction`);
|
|
93
|
-
let n = await P.sendBatchCallsTransaction(m, t);
|
|
94
|
-
return console.log(`${l} batch calls transaction sent`, p(n)), n;
|
|
95
|
-
}
|
|
96
|
-
if (!C && (console.log(`${l} approving tokens start`), await a(u, m, O, T, w), console.log(`${l} approving tokens complete`), M)) {
|
|
97
|
-
let e = T.map(({ erc20TokenAddress: e }, t) => ({
|
|
71
|
+
let k = "transact", A = w.findIndex(({ erc20TokenAddress: t }) => t === e), j = w.some(({ erc20TokenAddress: t }) => t !== e), M = A === -1 ? 0n : C[A];
|
|
72
|
+
console.log(`${c} token analysis`, {
|
|
73
|
+
ethIndex: A,
|
|
74
|
+
needsApproval: j,
|
|
75
|
+
ethAmount: M.toString()
|
|
76
|
+
}), console.log(`${c} fetching provider adapter`);
|
|
77
|
+
let N = l.getProviderAdapter(p);
|
|
78
|
+
if (console.log(`${c} provider adapter ready`, { providerAdapterType: N?.constructor?.name }), console.log(`${c} checking batch support`), !S && (console.log(`${c} approving tokens start`), await a(l, p, D, w, C), console.log(`${c} approving tokens complete`), j)) {
|
|
79
|
+
let e = w.map(({ erc20TokenAddress: e }, t) => ({
|
|
98
80
|
tokenAddress: e,
|
|
99
|
-
requiredAmount:
|
|
81
|
+
requiredAmount: C[t]
|
|
100
82
|
}));
|
|
101
|
-
console.log(`${
|
|
102
|
-
ownerAddress:
|
|
103
|
-
spenderAddress: r(
|
|
83
|
+
console.log(`${c} waiting for approvals start`, {
|
|
84
|
+
ownerAddress: E,
|
|
85
|
+
spenderAddress: r(D),
|
|
104
86
|
requirements: e.map(({ tokenAddress: e, requiredAmount: t }) => ({
|
|
105
87
|
tokenAddress: e,
|
|
106
88
|
requiredAmount: t.toString()
|
|
107
89
|
}))
|
|
108
|
-
}), await
|
|
90
|
+
}), await o(l, p, E, r(D), e), console.log(`${c} waiting for approvals complete`);
|
|
109
91
|
}
|
|
110
|
-
let
|
|
111
|
-
value:
|
|
92
|
+
let P = {
|
|
93
|
+
value: M > 0n ? BigInt(M).toString() : void 0,
|
|
112
94
|
gasLimit: void 0
|
|
113
95
|
};
|
|
114
|
-
console.log(`${
|
|
115
|
-
let
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
y,
|
|
96
|
+
console.log(`${c} overrides prepared`, P);
|
|
97
|
+
let F, I = [
|
|
98
|
+
g[0],
|
|
99
|
+
g[1],
|
|
100
|
+
g[2],
|
|
120
101
|
v,
|
|
102
|
+
_,
|
|
121
103
|
{
|
|
122
|
-
...
|
|
123
|
-
from:
|
|
104
|
+
...P,
|
|
105
|
+
from: E
|
|
124
106
|
}
|
|
125
107
|
];
|
|
126
|
-
console.log(`${
|
|
127
|
-
method:
|
|
128
|
-
dimData:
|
|
129
|
-
transactionContractAddress: r(
|
|
130
|
-
from:
|
|
131
|
-
value:
|
|
132
|
-
zkCallData:
|
|
108
|
+
console.log(`${c} call data prepared`, {
|
|
109
|
+
method: k,
|
|
110
|
+
dimData: v,
|
|
111
|
+
transactionContractAddress: r(O),
|
|
112
|
+
from: E,
|
|
113
|
+
value: P.value,
|
|
114
|
+
zkCallData: u(g)
|
|
133
115
|
});
|
|
134
|
-
let { runner:
|
|
135
|
-
if (console.log(`${
|
|
136
|
-
runnerType:
|
|
137
|
-
hasProvider: !!
|
|
138
|
-
}), !(
|
|
139
|
-
if (
|
|
140
|
-
console.log(`${
|
|
116
|
+
let { runner: L } = O;
|
|
117
|
+
if (console.log(`${c} runner resolved`, {
|
|
118
|
+
runnerType: L?.constructor?.name,
|
|
119
|
+
hasProvider: !!L?.provider
|
|
120
|
+
}), !(L instanceof s.AbstractSigner)) throw console.log(`${c} runner is not a signer`, { runnerType: L?.constructor?.name }), Error("expected signer");
|
|
121
|
+
if (x) {
|
|
122
|
+
console.log(`${c} estimateGas start`);
|
|
141
123
|
try {
|
|
142
|
-
|
|
124
|
+
F = Number(await O[k].estimateGas(...I)), console.log(`${c} estimateGas success`, { gasCosts: F });
|
|
143
125
|
} catch (e) {
|
|
144
|
-
console.log(`${
|
|
126
|
+
console.log(`${c} estimateGas error`, {
|
|
145
127
|
message: e?.message,
|
|
146
128
|
code: e?.code,
|
|
147
129
|
shortMessage: e?.shortMessage,
|
|
@@ -150,18 +132,18 @@ var l = "[transactCallDirect]", u = (e) => typeof e == "bigint" ? e.toString() :
|
|
|
150
132
|
error: e
|
|
151
133
|
});
|
|
152
134
|
}
|
|
153
|
-
} else console.log(`${
|
|
154
|
-
let
|
|
155
|
-
|
|
156
|
-
gasCosts:
|
|
157
|
-
extendedGasCosts:
|
|
158
|
-
finalOverrides:
|
|
159
|
-
}), console.log(`${
|
|
160
|
-
let
|
|
135
|
+
} else console.log(`${c} estimateGas skipped`);
|
|
136
|
+
let R = F && F >= 0 ? Math.ceil(F * 12 / 10) : void 0;
|
|
137
|
+
R && (I[5].gasLimit = R), console.log(`${c} gas configuration final`, {
|
|
138
|
+
gasCosts: F,
|
|
139
|
+
extendedGasCosts: R,
|
|
140
|
+
finalOverrides: I[5]
|
|
141
|
+
}), console.log(`${c} waitLittle start`), await n(), console.log(`${c} waitLittle complete`);
|
|
142
|
+
let z;
|
|
161
143
|
try {
|
|
162
|
-
|
|
144
|
+
S ? (console.log(`${c} populateTransaction start`), z = await O[k].populateTransaction(...I), console.log(`${c} populateTransaction success`, f(z))) : (console.log(`${c} contract call start`), z = await O[k](...I), console.log(`${c} contract call success`, f(z)));
|
|
163
145
|
} catch (e) {
|
|
164
|
-
if (console.log(`${
|
|
146
|
+
if (console.log(`${c} contract call error`, {
|
|
165
147
|
message: e?.message,
|
|
166
148
|
code: e?.code,
|
|
167
149
|
shortMessage: e?.shortMessage,
|
|
@@ -170,12 +152,12 @@ var l = "[transactCallDirect]", u = (e) => typeof e == "bigint" ? e.toString() :
|
|
|
170
152
|
data: e?.data,
|
|
171
153
|
error: e
|
|
172
154
|
}), !e?.transactionHash) throw e;
|
|
173
|
-
console.log(`${
|
|
174
|
-
let t = await i(
|
|
175
|
-
if (!t) throw console.log(`${
|
|
176
|
-
console.log(`${
|
|
155
|
+
console.log(`${c} recoverTransactionFromError start`, { transactionHash: e.transactionHash });
|
|
156
|
+
let t = await i(L.provider, e.transactionHash);
|
|
157
|
+
if (!t) throw console.log(`${c} recoverTransactionFromError failed`), e;
|
|
158
|
+
console.log(`${c} recoverTransactionFromError success`, f(t)), z = t;
|
|
177
159
|
}
|
|
178
|
-
return console.log(`${
|
|
160
|
+
return console.log(`${c} complete`, f(z)), z;
|
|
179
161
|
};
|
|
180
162
|
//#endregion
|
|
181
|
-
export {
|
|
163
|
+
export { p as transactCallDirect };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../constants/chains.constants.cjs`),t=require(`../types/eip5792.types.cjs`),n=require(`../error-handling/error-codes.constants.cjs`),r=require(`../error-handling/logger.cjs`),i=require(`../functions/utils/create-provider.cjs`),a=require(`../functions/web3/getContractMetadata.cjs`);let o=require(`ethers`),s=require(`wagmi`),c=require(`wagmi/actions`);var l=class{connector;chainId;originalProvider;fetchProviders={};signer;chainEventListener;config;unsubscribeFns=[];constructor(){e.HINKAL_SUPPORTED_CHAINS.forEach(t=>{if(e.isSolanaLike(t))return;let{fetchRpcUrl:n}=e.networkRegistry[t];if(!n)throw Error(`No Fetch RPC URL In Provider Adapter`);this.fetchProviders[t]=n.includes(`wss`)?new o.ethers.WebSocketProvider(n):i.createJsonRpcProvider(t)})}initConnector(e){this.connector=e}initConfig(e){this.config=e}async init(e){if(!this.connector)throw Error(`No Connector In Provider Adapter`);if(e&&(this.chainId=e),!this.chainId)throw Error(`No Chain Id In Provider Adapter`);let t=await this.connector.getProvider();this.originalProvider=new o.ethers.BrowserProvider(t);let n=(await this.connector.getAccounts())?.[0];if(!n){this.chainEventListener&&this.chainEventListener.onChainChanged();return}this.signer=await this.walletClientToSigner({transport:t,account:n},this.chainId)}async disconnectFromConnector(){if(!this.config)throw Error(`No Config In Provider Adapter`);this.release(),await(0,c.disconnect)(this.config)}async connectToConnector(e){if(!this.config)throw Error(`No Config In Provider Adapter`);if(e.id===`walletConnect`)try{await(0,c.reconnect)(this.config,{connectors:[e]}),await(0,c.disconnect)(this.config)}catch{}try{return(await(0,c.connect)(this.config,{connector:e})).chainId}catch(t){if(t instanceof s.ConnectorAlreadyConnectedError)return e.getChainId();let r=n.transactionErrorCodes.CONNECTION_FAILED;throw t?.code===4001&&(r=n.UserFriendlyErrorCodes.YOU_CANCELED_REQUEST),Error(r)}}getChainId(){return this.chainId}async waitForTransaction(e,t,r){if((await this.fetchProviders[e]?.waitForTransaction(t,r))?.status)return!0;throw Error(n.transactionErrorCodes.TRANSACTION_NOT_CONFIRMED)}async signMessage(e){if(!this.config)throw Error(`No Config In Provider Adapter`);let t=await(0,c.signMessage)(this.config,{message:e});if(!t)throw Error(n.transactionErrorCodes.SIGNING_FAILED);if(t.includes(`error`))throw Error(n.transactionErrorCodes.SIGNATURE_UNSUPPORTED_PERSONAL_SIGN);return t}async signTypedData(e,t,n){return this.signer.signTypedData(e,t,n)}async switchNetwork(e){if(!this.config)throw Error(`No Config In Provider Adapter`);return(0,c.switchChain)(this.config,{chainId:e.chainId})}async getAddress(){if(!this.config)throw Error(`No Config In Provider Adapter`);let{address:e}=(0,c.getAccount)(this.config);if(!e)throw Error(`IllegalState`);return o.ethers.getAddress(e)}setChainEventListener(e){if(!this.config)throw Error(`No Config In Provider Adapter`);this.chainEventListener=e,this.chainEventListener&&(this.unsubscribeFns.push((0,c.watchAccount)(this.config,{onChange:({address:e},{address:t})=>{this.chainEventListener&&e!==t&&this.chainEventListener.onAccountChanged()}})),this.unsubscribeFns.push((0,c.watchChainId)(this.config,{onChange:e=>{this.chainEventListener&&this.chainEventListener.onChainChanged(e)}})))}onAccountChanged(){return this.init()}onChainChanged(e){return this.init(e)}release(){this.removeListeners()}removeListeners(){this.unsubscribeFns.forEach(e=>e()),this.unsubscribeFns=[]}getContract(e,t,n=void 0,r){return a.getContract(t,e,n,r)}getContractWithSigner(e,t,n=void 0){if(!this.signer)throw Error(`IllegalState: no signer`);return this.getContract(e,t,n,this.signer)}getContractWithFetcher(e,t,n=void 0){let r=this.fetchProviders[e];if(!r)throw Error(`fetchProvider not initialized`);return this.getContract(e,t,n,r)}async sendTransaction(e){if(!this.signer)throw Error(`IllegalState: no signer`);return await this.signer.sendTransaction(e)}async connectAndPatchProvider(e){return await this.connectToConnector(e)}isPermitterAvailable(){if(!this.chainId)throw Error(`Illegal state: no chainId`);return!!e.networkRegistry[this.chainId]?.contractData?.permitterAddress}async getGasPrice(e){let t=(await this.fetchProviders[e]?.getFeeData())?.gasPrice;if(!t)throw Error(`Could not fetch gas price in getGasPrice`);return t}async walletClientToSigner(e,t){let{account:n,transport:r}=e;return new o.ethers.BrowserProvider(r).getSigner(n)}async supportsBatchCall(e){if(
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../constants/chains.constants.cjs`),t=require(`../types/eip5792.types.cjs`),n=require(`../error-handling/error-codes.constants.cjs`),r=require(`../error-handling/logger.cjs`),i=require(`../functions/utils/create-provider.cjs`),a=require(`../functions/web3/getContractMetadata.cjs`);let o=require(`ethers`),s=require(`wagmi`),c=require(`wagmi/actions`);var l=class{connector;chainId;originalProvider;fetchProviders={};signer;chainEventListener;config;unsubscribeFns=[];constructor(){e.HINKAL_SUPPORTED_CHAINS.forEach(t=>{if(e.isSolanaLike(t))return;let{fetchRpcUrl:n}=e.networkRegistry[t];if(!n)throw Error(`No Fetch RPC URL In Provider Adapter`);this.fetchProviders[t]=n.includes(`wss`)?new o.ethers.WebSocketProvider(n):i.createJsonRpcProvider(t)})}initConnector(e){this.connector=e}initConfig(e){this.config=e}async init(e){if(!this.connector)throw Error(`No Connector In Provider Adapter`);if(e&&(this.chainId=e),!this.chainId)throw Error(`No Chain Id In Provider Adapter`);let t=await this.connector.getProvider();this.originalProvider=new o.ethers.BrowserProvider(t);let n=(await this.connector.getAccounts())?.[0];if(!n){this.chainEventListener&&this.chainEventListener.onChainChanged();return}this.signer=await this.walletClientToSigner({transport:t,account:n},this.chainId)}async disconnectFromConnector(){if(!this.config)throw Error(`No Config In Provider Adapter`);this.release(),await(0,c.disconnect)(this.config)}async connectToConnector(e){if(!this.config)throw Error(`No Config In Provider Adapter`);if(e.id===`walletConnect`)try{await(0,c.reconnect)(this.config,{connectors:[e]}),await(0,c.disconnect)(this.config)}catch{}try{return(await(0,c.connect)(this.config,{connector:e})).chainId}catch(t){if(t instanceof s.ConnectorAlreadyConnectedError)return e.getChainId();let r=n.transactionErrorCodes.CONNECTION_FAILED;throw t?.code===4001&&(r=n.UserFriendlyErrorCodes.YOU_CANCELED_REQUEST),Error(r)}}getChainId(){return this.chainId}async waitForTransaction(e,t,r){if((await this.fetchProviders[e]?.waitForTransaction(t,r))?.status)return!0;throw Error(n.transactionErrorCodes.TRANSACTION_NOT_CONFIRMED)}async signMessage(e){if(!this.config)throw Error(`No Config In Provider Adapter`);let t=await(0,c.signMessage)(this.config,{message:e});if(!t)throw Error(n.transactionErrorCodes.SIGNING_FAILED);if(t.includes(`error`))throw Error(n.transactionErrorCodes.SIGNATURE_UNSUPPORTED_PERSONAL_SIGN);return t}async signTypedData(e,t,n){return this.signer.signTypedData(e,t,n)}async switchNetwork(e){if(!this.config)throw Error(`No Config In Provider Adapter`);return(0,c.switchChain)(this.config,{chainId:e.chainId})}async getAddress(){if(!this.config)throw Error(`No Config In Provider Adapter`);let{address:e}=(0,c.getAccount)(this.config);if(!e)throw Error(`IllegalState`);return o.ethers.getAddress(e)}setChainEventListener(e){if(!this.config)throw Error(`No Config In Provider Adapter`);this.chainEventListener=e,this.chainEventListener&&(this.unsubscribeFns.push((0,c.watchAccount)(this.config,{onChange:({address:e},{address:t})=>{this.chainEventListener&&e!==t&&this.chainEventListener.onAccountChanged()}})),this.unsubscribeFns.push((0,c.watchChainId)(this.config,{onChange:e=>{this.chainEventListener&&this.chainEventListener.onChainChanged(e)}})))}onAccountChanged(){return this.init()}onChainChanged(e){return this.init(e)}release(){this.removeListeners()}removeListeners(){this.unsubscribeFns.forEach(e=>e()),this.unsubscribeFns=[]}getContract(e,t,n=void 0,r){return a.getContract(t,e,n,r)}getContractWithSigner(e,t,n=void 0){if(!this.signer)throw Error(`IllegalState: no signer`);return this.getContract(e,t,n,this.signer)}getContractWithFetcher(e,t,n=void 0){let r=this.fetchProviders[e];if(!r)throw Error(`fetchProvider not initialized`);return this.getContract(e,t,n,r)}async sendTransaction(e){if(!this.signer)throw Error(`IllegalState: no signer`);return await this.signer.sendTransaction(e)}async connectAndPatchProvider(e){return await this.connectToConnector(e)}isPermitterAvailable(){if(!this.chainId)throw Error(`Illegal state: no chainId`);return!!e.networkRegistry[this.chainId]?.contractData?.permitterAddress}async getGasPrice(e){let t=(await this.fetchProviders[e]?.getFeeData())?.gasPrice;if(!t)throw Error(`Could not fetch gas price in getGasPrice`);return t}async walletClientToSigner(e,t){let{account:n,transport:r}=e;return new o.ethers.BrowserProvider(r).getSigner(n)}async supportsBatchCall(e){let t=`[WagmiProviderAdapter.supportsBatchCall]`;if(r.Logger.log(`${t} start`,{chainId:e,hasOriginalProvider:!!this.originalProvider,adapterChainId:this.chainId}),!this.originalProvider)return r.Logger.log(`${t} no original provider`),!1;try{r.Logger.log(`${t} resolving user address`);let n=await this.getAddress();r.Logger.log(`${t} user address resolved`,{userAddress:n});let i=`0x${e.toString(16)}`;r.Logger.log(`${t} chain id hex`,{chainIdHex:i}),r.Logger.log(`${t} wallet_getCapabilities start`);let a=await this.originalProvider.send(`wallet_getCapabilities`,[n,[i]]);r.Logger.log(`${t} wallet_getCapabilities success`,{capabilityKeys:a?Object.keys(a):void 0,capabilities:a});let o=a?.[i]||a?.[`0x0`];if(r.Logger.log(`${t} chain capabilities resolved`,{chainCapabilities:o}),!o?.atomic)return r.Logger.log(`${t} atomic capability missing or falsy`),!1;let s=typeof o.atomic==`string`?o.atomic:o.atomic?.status;r.Logger.log(`${t} atomic capability parsed`,{atomicValue:s});let c=s===`supported`||s===`ready`;return r.Logger.log(`${t} complete`,{isSupported:c}),c}catch(e){return r.Logger.log(`${t} error`,{message:e?.message,code:e?.code,shortMessage:e?.shortMessage,data:e?.data,error:e}),!1}}async waitForBatchTransactionStatus(e){if(!this.originalProvider)throw Error(`WagmiProviderAdapter: Provider not initialized`);for(let n=0;n<60;n+=1){await new Promise(e=>{setTimeout(()=>e(),1e3)});try{let n=await this.originalProvider.send(`wallet_getCallsStatus`,[e]);if(n.status===t.CallsStatus.Confirmed&&n.receipts?.[0]?.transactionHash)return n.receipts[0].transactionHash;if(n.status===t.CallsStatus.OffchainFailure||n.status===t.CallsStatus.ChainFailure||n.status===t.CallsStatus.PartialFailure)break}catch(e){r.Logger.log(`waitForBatchTransactionStatus:`,e)}}throw Error(`Batch transaction timed out or failed`)}async sendBatchCallsTransaction(e,t){if(!this.fetchProviders[e])throw Error(`WagmiProviderAdapter: fetchProvider not initialized`);if(!this.originalProvider)throw Error(`WagmiProviderAdapter: Provider not initialized`);let n=await this.getAddress(),r={version:`2.0.0`,chainId:`0x${e.toString(16)}`,from:n,atomicRequired:!0,calls:t},i=await this.originalProvider.send(`wallet_sendCalls`,[r]),a=i?.id||i;if(!a||typeof a!=`string`)throw Error(`Invalid batch ID received from wallet_sendCalls`);let o=await this.waitForBatchTransactionStatus(a),s=await this.fetchProviders[e].getTransaction(o);if(!s)throw Error(`Transaction not found`);return s}},u=new l,d=()=>new l;exports.default=d,exports.wagmiProviderAdapter=u;
|
|
@@ -143,14 +143,37 @@ var y = class {
|
|
|
143
143
|
return new l.BrowserProvider(r).getSigner(n);
|
|
144
144
|
}
|
|
145
145
|
async supportsBatchCall(e) {
|
|
146
|
-
|
|
146
|
+
let t = "[WagmiProviderAdapter.supportsBatchCall]";
|
|
147
|
+
if (o.log(`${t} start`, {
|
|
148
|
+
chainId: e,
|
|
149
|
+
hasOriginalProvider: !!this.originalProvider,
|
|
150
|
+
adapterChainId: this.chainId
|
|
151
|
+
}), !this.originalProvider) return o.log(`${t} no original provider`), !1;
|
|
147
152
|
try {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
153
|
+
o.log(`${t} resolving user address`);
|
|
154
|
+
let n = await this.getAddress();
|
|
155
|
+
o.log(`${t} user address resolved`, { userAddress: n });
|
|
156
|
+
let r = `0x${e.toString(16)}`;
|
|
157
|
+
o.log(`${t} chain id hex`, { chainIdHex: r }), o.log(`${t} wallet_getCapabilities start`);
|
|
158
|
+
let i = await this.originalProvider.send("wallet_getCapabilities", [n, [r]]);
|
|
159
|
+
o.log(`${t} wallet_getCapabilities success`, {
|
|
160
|
+
capabilityKeys: i ? Object.keys(i) : void 0,
|
|
161
|
+
capabilities: i
|
|
162
|
+
});
|
|
163
|
+
let a = i?.[r] || i?.["0x0"];
|
|
164
|
+
if (o.log(`${t} chain capabilities resolved`, { chainCapabilities: a }), !a?.atomic) return o.log(`${t} atomic capability missing or falsy`), !1;
|
|
165
|
+
let s = typeof a.atomic == "string" ? a.atomic : a.atomic?.status;
|
|
166
|
+
o.log(`${t} atomic capability parsed`, { atomicValue: s });
|
|
167
|
+
let c = s === "supported" || s === "ready";
|
|
168
|
+
return o.log(`${t} complete`, { isSupported: c }), c;
|
|
169
|
+
} catch (e) {
|
|
170
|
+
return o.log(`${t} error`, {
|
|
171
|
+
message: e?.message,
|
|
172
|
+
code: e?.code,
|
|
173
|
+
shortMessage: e?.shortMessage,
|
|
174
|
+
data: e?.data,
|
|
175
|
+
error: e
|
|
176
|
+
}), !1;
|
|
154
177
|
}
|
|
155
178
|
}
|
|
156
179
|
async waitForBatchTransactionStatus(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.0.
|
|
18
|
-
[e.SnarkJS]: await getWorkerURL(domain + '/0.0.
|
|
19
|
-
[e.UTXO]: await getWorkerURL(domain + '/0.0.
|
|
17
|
+
[e.ZKProof]: await getWorkerURL(domain + '/0.0.68/' + 'zkProofWorkerLauncher.js'),
|
|
18
|
+
[e.SnarkJS]: await getWorkerURL(domain + '/0.0.68/' + 'snarkjsWorkerLauncher.js'),
|
|
19
|
+
[e.UTXO]: await getWorkerURL(domain + '/0.0.68/' + '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.0.
|
|
18
|
-
[e.SnarkJS]: await getWorkerURL(domain + '/0.0.
|
|
19
|
-
[e.UTXO]: await getWorkerURL(domain + '/0.0.
|
|
17
|
+
[e.ZKProof]: await getWorkerURL(domain + '/0.0.68/' + 'zkProofWorkerLauncher.js'),
|
|
18
|
+
[e.SnarkJS]: await getWorkerURL(domain + '/0.0.68/' + 'snarkjsWorkerLauncher.js'),
|
|
19
|
+
[e.UTXO]: await getWorkerURL(domain + '/0.0.68/' + 'utxoWorkerLauncher.js'),
|
|
20
20
|
});
|
|
21
21
|
export { n as getWorkerViteURL };
|
package/package.json
CHANGED
package/sdk/package.json.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={name:`@kapa123456789/sdk`,version:`0.0.
|
|
1
|
+
var e={name:`@kapa123456789/sdk`,version:`0.0.67`,homepage:`hinkal.io`,author:{name:`Hinkal Protocol`},keywords:[`blockchain`,`privacy`,`zero-knowledge`,`stealth addresses`],exports:{".":{types:`./index.d.ts`,main:`./index.cjs`,"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.6.8`,"async-mutex":`^0.4.0`,bs58:`^6.0.0`,buffer:`6.0.3`,"circomlibjs-hinkal-fork":`^0.0.3`,dotenv:`^16.4.5`,ethers:`^6.15.0`,"idb-keyval":`6.2.1`,multiformats:`^13.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`,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;
|