@kodiak-finance/orderly-web3-provider-ethers 2.7.4

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.
@@ -0,0 +1,32 @@
1
+ import { Eip1193Provider, BrowserProvider, ethers } from 'ethers';
2
+ import { Web3Provider } from '@kodiak-finance/orderly-default-evm-adapter';
3
+ import { API } from '@kodiak-finance/orderly-types';
4
+
5
+ declare class EthersProvider implements Web3Provider {
6
+ private _provider;
7
+ private _originalProvider;
8
+ parseUnits(amount: string, decimals?: number): string;
9
+ formatUnits(amount: string, decimals?: number): string;
10
+ set provider(provider: Eip1193Provider);
11
+ get browserProvider(): BrowserProvider;
12
+ signTypedData(address: string, toSignatureMessage: any): Promise<string>;
13
+ call(address: string, method: string, params: any[], options: {
14
+ abi: any;
15
+ }): Promise<any>;
16
+ send(method: string, params: Array<any> | Record<string, any>): Promise<any>;
17
+ sendTransaction(contractAddress: string, method: string, payload: {
18
+ from: string;
19
+ to?: string;
20
+ data: any[];
21
+ value?: bigint;
22
+ }, options: {
23
+ abi: any;
24
+ }): Promise<any>;
25
+ pollTransactionReceiptWithBackoff(txHash: string, baseInterval?: number, maxInterval?: number, maxRetries?: number): Promise<ethers.TransactionReceipt>;
26
+ callOnChain(chain: API.NetworkInfos, address: string, method: string, params: any[], options: {
27
+ abi: any;
28
+ }): Promise<any>;
29
+ getBalance(userAddress: string): Promise<bigint>;
30
+ }
31
+
32
+ export { EthersProvider };
@@ -0,0 +1,32 @@
1
+ import { Eip1193Provider, BrowserProvider, ethers } from 'ethers';
2
+ import { Web3Provider } from '@kodiak-finance/orderly-default-evm-adapter';
3
+ import { API } from '@kodiak-finance/orderly-types';
4
+
5
+ declare class EthersProvider implements Web3Provider {
6
+ private _provider;
7
+ private _originalProvider;
8
+ parseUnits(amount: string, decimals?: number): string;
9
+ formatUnits(amount: string, decimals?: number): string;
10
+ set provider(provider: Eip1193Provider);
11
+ get browserProvider(): BrowserProvider;
12
+ signTypedData(address: string, toSignatureMessage: any): Promise<string>;
13
+ call(address: string, method: string, params: any[], options: {
14
+ abi: any;
15
+ }): Promise<any>;
16
+ send(method: string, params: Array<any> | Record<string, any>): Promise<any>;
17
+ sendTransaction(contractAddress: string, method: string, payload: {
18
+ from: string;
19
+ to?: string;
20
+ data: any[];
21
+ value?: bigint;
22
+ }, options: {
23
+ abi: any;
24
+ }): Promise<any>;
25
+ pollTransactionReceiptWithBackoff(txHash: string, baseInterval?: number, maxInterval?: number, maxRetries?: number): Promise<ethers.TransactionReceipt>;
26
+ callOnChain(chain: API.NetworkInfos, address: string, method: string, params: any[], options: {
27
+ abi: any;
28
+ }): Promise<any>;
29
+ getBalance(userAddress: string): Promise<bigint>;
30
+ }
31
+
32
+ export { EthersProvider };
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var w=Object.defineProperty,_=Object.defineProperties,T=Object.getOwnPropertyDescriptor,x=Object.getOwnPropertyDescriptors,D=Object.getOwnPropertyNames,P=Object.getOwnPropertySymbols;var m=Object.prototype.hasOwnProperty,B=Object.prototype.propertyIsEnumerable;var v=(e,r,t)=>r in e?w(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,f=(e,r)=>{for(var t in r||(r={}))m.call(r,t)&&v(e,t,r[t]);if(P)for(var t of P(r))B.call(r,t)&&v(e,t,r[t]);return e},E=(e,r)=>_(e,x(r));var C=(e,r)=>{for(var t in r)w(e,t,{get:r[t],enumerable:!0})},R=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of D(r))!m.call(e,n)&&n!==t&&w(e,n,{get:()=>r[n],enumerable:!(i=T(r,n))||i.enumerable});return e};var W=e=>R(w({},"__esModule",{value:!0}),e);var l=(e,r,t)=>(v(e,typeof r!="symbol"?r+"":r,t),t);var p=(e,r,t)=>new Promise((i,n)=>{var a=o=>{try{s(t.next(o))}catch(d){n(d)}},c=o=>{try{s(t.throw(o))}catch(d){n(d)}},s=o=>o.done?i(o.value):Promise.resolve(o.value).then(a,c);s((t=t.apply(e,r)).next())});var S={};C(S,{EthersProvider:()=>u});module.exports=W(S);var g=require("ethers");var y=require("ethers-decode-error");var U=y.ErrorDecoder.create();function h(e){return p(this,null,function*(){var i;let r=yield U.decode(e),t=(i=r.reason)!=null?i:"";return console.error("parsedError",r),E(f({},r),{message:I(t)})})}function I(e){let r=["ethers-user-denied: ","ethers-unsupported: "];if(typeof e!="string")return e;for(let t of r)if(e.startsWith(t))return e.replace(t,"");return e}var u=class{constructor(){l(this,"_provider");l(this,"_originalProvider")}parseUnits(r,t){return g.ethers.parseUnits(r,t).toString()}formatUnits(r,t){return g.ethers.formatUnits(r,t)}set provider(r){this._provider=new g.BrowserProvider(r,"any"),this._originalProvider=r}get browserProvider(){if(!this._provider)throw new Error("browserProvider is not initialized");return this._provider}signTypedData(r,t){return p(this,null,function*(){var i;return yield(i=this.browserProvider)==null?void 0:i.send("eth_signTypedData_v4",[r,t])})}call(r,t,i,n){return p(this,null,function*(){let a=["approve"];if(this._originalProvider.agwWallet&&a.includes(t))try{return{hash:yield this._originalProvider.writeContract({abi:n.abi,address:r,functionName:t,args:i})}}catch(o){throw yield h(o)}let c=yield this.browserProvider.getSigner();return new g.ethers.Contract(r,n.abi,c)[t].apply(null,i).catch(o=>p(this,null,function*(){throw yield h(o)}))})}send(r,t){return this.browserProvider.send(r,t)}sendTransaction(r,t,i,n){return p(this,null,function*(){var d;let a=yield(d=this.browserProvider)==null?void 0:d.getSigner();if(!a)throw new Error("singer is not exist");let s=new g.ethers.Contract(r,n.abi,this.browserProvider).interface.encodeFunctionData(t,i.data),o={from:i.from,to:i.to,data:s,value:i.value};try{return t==="depositTo"?yield this._originalProvider.sendTransaction({to:r,data:s,value:i.value}):yield a.sendTransaction(o)}catch(b){throw yield h(b)}})}pollTransactionReceiptWithBackoff(r,t=1e3,i=6e3,n=30){return p(this,null,function*(){let a=t,c=0;for(;c<n;){try{let s=yield this.browserProvider.getTransactionReceipt(r);if(s)return s}catch(s){}yield new Promise(s=>setTimeout(s,a)),a=Math.min(a*2,i),c++}throw new Error("Transaction did not complete after maximum retries.")})}callOnChain(r,t,i,n,a){let c=new g.ethers.JsonRpcProvider(r.public_rpc_url);return new g.ethers.Contract(t,a.abi,c)[i].apply(null,n).catch(o=>p(this,null,function*(){throw yield h(o)}))}getBalance(r){return this.browserProvider.getBalance(r).then(t=>t)}};0&&(module.exports={EthersProvider});
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/ethersProvider.ts","../src/parseError.ts"],"sourcesContent":["export { EthersProvider } from \"./ethersProvider\";\n","import { BrowserProvider, Eip1193Provider, ethers } from \"ethers\";\nimport { Web3Provider } from \"@kodiak-finance/orderly-default-evm-adapter\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { parseError } from \"./parseError\";\n\nclass EthersProvider implements Web3Provider {\n private _provider!: BrowserProvider;\n private _originalProvider!: Eip1193Provider;\n\n parseUnits(amount: string, decimals?: number): string {\n return ethers.parseUnits(amount, decimals).toString();\n }\n\n formatUnits(amount: string, decimals?: number): string {\n return ethers.formatUnits(amount, decimals);\n }\n\n set provider(provider: Eip1193Provider) {\n this._provider = new BrowserProvider(provider, \"any\");\n this._originalProvider = provider;\n }\n\n get browserProvider(): BrowserProvider {\n if (!this._provider) {\n throw new Error(\"browserProvider is not initialized\");\n }\n return this._provider;\n }\n\n async signTypedData(\n address: string,\n toSignatureMessage: any,\n ): Promise<string> {\n return await this.browserProvider?.send(\"eth_signTypedData_v4\", [\n address,\n toSignatureMessage,\n ]);\n }\n\n async call(\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const writeMethod: string[] = [\"approve\"];\n // @ts-ignore\n if (this._originalProvider.agwWallet && writeMethod.includes(method)) {\n try {\n // @ts-ignore\n const transactionHash = await this._originalProvider.writeContract({\n abi: options.abi,\n address: address,\n functionName: method,\n args: params,\n });\n\n return {\n hash: transactionHash,\n };\n } catch (error) {\n // const parsedEthersError = getParsedEthersError(error as EthersError);\n // if ((error as any).message.includes(\"rejected\")) {\n // // @ts-ignore\n // throw new Error({ content: \"REJECTED_TRANSACTION\" });\n // }\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n }\n }\n const singer = await this.browserProvider.getSigner();\n const contract = new ethers.Contract(address, options.abi, singer);\n\n return contract[method].apply(null, params).catch(async (error) => {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n });\n }\n\n send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n return this.browserProvider.send(method, params);\n }\n\n async sendTransaction(\n contractAddress: string,\n method: string,\n payload: { from: string; to?: string; data: any[]; value?: bigint },\n options: { abi: any },\n ): Promise<any> {\n const singer = await this.browserProvider?.getSigner();\n if (!singer) {\n throw new Error(\"singer is not exist\");\n }\n\n const contract = new ethers.Contract(\n contractAddress,\n options.abi,\n this.browserProvider,\n );\n\n // contract.interface.getAbiCoder().encode(tx.data);\n const encodeFunctionData = contract.interface.encodeFunctionData(\n method,\n payload.data,\n );\n\n const tx: ethers.TransactionRequest = {\n from: payload.from,\n to: payload.to,\n data: encodeFunctionData,\n value: payload.value,\n };\n\n try {\n // for agw wallet\n if (method === \"depositTo\") {\n // @ts-ignore\n return await this._originalProvider.sendTransaction({\n to: contractAddress,\n data: encodeFunctionData,\n value: payload.value,\n });\n }\n return await singer.sendTransaction(tx);\n } catch (error) {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n }\n }\n\n async pollTransactionReceiptWithBackoff(\n txHash: string,\n baseInterval = 1000,\n maxInterval = 6000,\n maxRetries = 30,\n ) {\n let interval = baseInterval;\n let retries = 0;\n\n while (retries < maxRetries) {\n try {\n const receipt =\n await this.browserProvider!.getTransactionReceipt(txHash);\n if (receipt) {\n // completed, get receipt\n return receipt;\n }\n } catch (error) {\n // waiting\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n\n interval = Math.min(interval * 2, maxInterval);\n retries++;\n }\n\n throw new Error(\"Transaction did not complete after maximum retries.\");\n }\n\n callOnChain(\n chain: API.NetworkInfos,\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const provider = new ethers.JsonRpcProvider(chain.public_rpc_url);\n\n const contract = new ethers.Contract(address, options.abi, provider);\n\n return contract[method].apply(null, params).catch(async (error) => {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n });\n }\n\n getBalance(userAddress: string): Promise<bigint> {\n return this.browserProvider!.getBalance(userAddress).then((res) => {\n return res;\n });\n }\n}\n\nexport { EthersProvider };\n","import { DecodedError, ErrorDecoder } from \"ethers-decode-error\";\n\nconst errorDecoder = ErrorDecoder.create();\n\ntype ParsedError = DecodedError & {\n message: string;\n};\n\nexport async function parseError(rawError: any): Promise<ParsedError> {\n const error: DecodedError = await errorDecoder.decode(rawError);\n const reason = error.reason ?? \"\";\n console.error(\"parsedError\", error);\n\n return {\n ...error,\n message: replacePrefix(reason),\n };\n}\n\nfunction replacePrefix(reason: string) {\n const prefixes = [\"ethers-user-denied: \", \"ethers-unsupported: \"];\n\n if (typeof reason !== \"string\") {\n return reason;\n }\n\n for (const prefix of prefixes) {\n if (reason.startsWith(prefix)) {\n return reason.replace(prefix, \"\");\n }\n }\n\n return reason;\n}\n"],"mappings":"qgCAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GCAA,IAAAI,EAAyD,kBCAzD,IAAAC,EAA2C,+BAE3C,IAAMC,EAAe,eAAa,OAAO,EAMzC,SAAsBC,EAAWC,EAAqC,QAAAC,EAAA,sBARtE,IAAAC,EASE,IAAMC,EAAsB,MAAML,EAAa,OAAOE,CAAQ,EACxDI,GAASF,EAAAC,EAAM,SAAN,KAAAD,EAAgB,GAC/B,eAAQ,MAAM,cAAeC,CAAK,EAE3BE,EAAAC,EAAA,GACFH,GADE,CAEL,QAASI,EAAcH,CAAM,CAC/B,EACF,GAEA,SAASG,EAAcH,EAAgB,CACrC,IAAMI,EAAW,CAAC,uBAAwB,sBAAsB,EAEhE,GAAI,OAAOJ,GAAW,SACpB,OAAOA,EAGT,QAAWK,KAAUD,EACnB,GAAIJ,EAAO,WAAWK,CAAM,EAC1B,OAAOL,EAAO,QAAQK,EAAQ,EAAE,EAIpC,OAAOL,CACT,CD5BA,IAAMM,EAAN,KAA6C,CAA7C,cACEC,EAAA,KAAQ,aACRA,EAAA,KAAQ,qBAER,WAAWC,EAAgBC,EAA2B,CACpD,OAAO,SAAO,WAAWD,EAAQC,CAAQ,EAAE,SAAS,CACtD,CAEA,YAAYD,EAAgBC,EAA2B,CACrD,OAAO,SAAO,YAAYD,EAAQC,CAAQ,CAC5C,CAEA,IAAI,SAASC,EAA2B,CACtC,KAAK,UAAY,IAAI,kBAAgBA,EAAU,KAAK,EACpD,KAAK,kBAAoBA,CAC3B,CAEA,IAAI,iBAAmC,CACrC,GAAI,CAAC,KAAK,UACR,MAAM,IAAI,MAAM,oCAAoC,EAEtD,OAAO,KAAK,SACd,CAEM,cACJC,EACAC,EACiB,QAAAC,EAAA,sBAhCrB,IAAAC,EAiCI,OAAO,MAAMA,EAAA,KAAK,kBAAL,YAAAA,EAAsB,KAAK,uBAAwB,CAC9DH,EACAC,CACF,EACF,GAEM,KACJD,EACAI,EACAC,EACAC,EACc,QAAAJ,EAAA,sBACd,IAAMK,EAAwB,CAAC,SAAS,EAExC,GAAI,KAAK,kBAAkB,WAAaA,EAAY,SAASH,CAAM,EACjE,GAAI,CASF,MAAO,CACL,KARsB,MAAM,KAAK,kBAAkB,cAAc,CACjE,IAAKE,EAAQ,IACb,QAASN,EACT,aAAcI,EACd,KAAMC,CACR,CAAC,CAID,CACF,OAASG,EAAO,CAOd,MAD0B,MAAMC,EAAWD,CAAK,CAElD,CAEF,IAAME,EAAS,MAAM,KAAK,gBAAgB,UAAU,EAGpD,OAFiB,IAAI,SAAO,SAASV,EAASM,EAAQ,IAAKI,CAAM,EAEjDN,CAAM,EAAE,MAAM,KAAMC,CAAM,EAAE,MAAaG,GAAUN,EAAA,sBAEjE,MAD0B,MAAMO,EAAWD,CAAK,CAElD,EAAC,CACH,GAEA,KAAKJ,EAAgBC,EAAwD,CAC3E,OAAO,KAAK,gBAAgB,KAAKD,EAAQC,CAAM,CACjD,CAEM,gBACJM,EACAP,EACAQ,EACAN,EACc,QAAAJ,EAAA,sBAxFlB,IAAAC,EAyFI,IAAMO,EAAS,MAAMP,EAAA,KAAK,kBAAL,YAAAA,EAAsB,YAC3C,GAAI,CAACO,EACH,MAAM,IAAI,MAAM,qBAAqB,EAUvC,IAAMG,EAPW,IAAI,SAAO,SAC1BF,EACAL,EAAQ,IACR,KAAK,eACP,EAGoC,UAAU,mBAC5CF,EACAQ,EAAQ,IACV,EAEME,EAAgC,CACpC,KAAMF,EAAQ,KACd,GAAIA,EAAQ,GACZ,KAAMC,EACN,MAAOD,EAAQ,KACjB,EAEA,GAAI,CAEF,OAAIR,IAAW,YAEN,MAAM,KAAK,kBAAkB,gBAAgB,CAClD,GAAIO,EACJ,KAAME,EACN,MAAOD,EAAQ,KACjB,CAAC,EAEI,MAAMF,EAAO,gBAAgBI,CAAE,CACxC,OAASN,EAAO,CAEd,MAD0B,MAAMC,EAAWD,CAAK,CAElD,CACF,GAEM,kCACJO,EACAC,EAAe,IACfC,EAAc,IACdC,EAAa,GACb,QAAAhB,EAAA,sBACA,IAAIiB,EAAWH,EACXI,EAAU,EAEd,KAAOA,EAAUF,GAAY,CAC3B,GAAI,CACF,IAAMG,EACJ,MAAM,KAAK,gBAAiB,sBAAsBN,CAAM,EAC1D,GAAIM,EAEF,OAAOA,CAEX,OAASb,EAAO,CAEhB,CAEA,MAAM,IAAI,QAASc,GAAY,WAAWA,EAASH,CAAQ,CAAC,EAE5DA,EAAW,KAAK,IAAIA,EAAW,EAAGF,CAAW,EAC7CG,GACF,CAEA,MAAM,IAAI,MAAM,qDAAqD,CACvE,GAEA,YACEG,EACAvB,EACAI,EACAC,EACAC,EACc,CACd,IAAMP,EAAW,IAAI,SAAO,gBAAgBwB,EAAM,cAAc,EAIhE,OAFiB,IAAI,SAAO,SAASvB,EAASM,EAAQ,IAAKP,CAAQ,EAEnDK,CAAM,EAAE,MAAM,KAAMC,CAAM,EAAE,MAAaG,GAAUN,EAAA,sBAEjE,MAD0B,MAAMO,EAAWD,CAAK,CAElD,EAAC,CACH,CAEA,WAAWgB,EAAsC,CAC/C,OAAO,KAAK,gBAAiB,WAAWA,CAAW,EAAE,KAAMC,GAClDA,CACR,CACH,CACF","names":["src_exports","__export","EthersProvider","__toCommonJS","import_ethers","import_ethers_decode_error","errorDecoder","parseError","rawError","__async","_a","error","reason","__spreadProps","__spreadValues","replacePrefix","prefixes","prefix","EthersProvider","__publicField","amount","decimals","provider","address","toSignatureMessage","__async","_a","method","params","options","writeMethod","error","parseError","singer","contractAddress","payload","encodeFunctionData","tx","txHash","baseInterval","maxInterval","maxRetries","interval","retries","receipt","resolve","chain","userAddress","res"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ var E=Object.defineProperty,y=Object.defineProperties;var b=Object.getOwnPropertyDescriptors;var l=Object.getOwnPropertySymbols;var _=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable;var w=(e,r,t)=>r in e?E(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,P=(e,r)=>{for(var t in r||(r={}))_.call(r,t)&&w(e,t,r[t]);if(l)for(var t of l(r))T.call(r,t)&&w(e,t,r[t]);return e},m=(e,r)=>y(e,b(r));var u=(e,r,t)=>(w(e,typeof r!="symbol"?r+"":r,t),t);var p=(e,r,t)=>new Promise((i,a)=>{var s=n=>{try{o(t.next(n))}catch(d){a(d)}},c=n=>{try{o(t.throw(n))}catch(d){a(d)}},o=n=>n.done?i(n.value):Promise.resolve(n.value).then(s,c);o((t=t.apply(e,r)).next())});import{BrowserProvider as C,ethers as g}from"ethers";import{ErrorDecoder as x}from"ethers-decode-error";var D=x.create();function h(e){return p(this,null,function*(){var i;let r=yield D.decode(e),t=(i=r.reason)!=null?i:"";return console.error("parsedError",r),m(P({},r),{message:B(t)})})}function B(e){let r=["ethers-user-denied: ","ethers-unsupported: "];if(typeof e!="string")return e;for(let t of r)if(e.startsWith(t))return e.replace(t,"");return e}var v=class{constructor(){u(this,"_provider");u(this,"_originalProvider")}parseUnits(r,t){return g.parseUnits(r,t).toString()}formatUnits(r,t){return g.formatUnits(r,t)}set provider(r){this._provider=new C(r,"any"),this._originalProvider=r}get browserProvider(){if(!this._provider)throw new Error("browserProvider is not initialized");return this._provider}signTypedData(r,t){return p(this,null,function*(){var i;return yield(i=this.browserProvider)==null?void 0:i.send("eth_signTypedData_v4",[r,t])})}call(r,t,i,a){return p(this,null,function*(){let s=["approve"];if(this._originalProvider.agwWallet&&s.includes(t))try{return{hash:yield this._originalProvider.writeContract({abi:a.abi,address:r,functionName:t,args:i})}}catch(n){throw yield h(n)}let c=yield this.browserProvider.getSigner();return new g.Contract(r,a.abi,c)[t].apply(null,i).catch(n=>p(this,null,function*(){throw yield h(n)}))})}send(r,t){return this.browserProvider.send(r,t)}sendTransaction(r,t,i,a){return p(this,null,function*(){var d;let s=yield(d=this.browserProvider)==null?void 0:d.getSigner();if(!s)throw new Error("singer is not exist");let o=new g.Contract(r,a.abi,this.browserProvider).interface.encodeFunctionData(t,i.data),n={from:i.from,to:i.to,data:o,value:i.value};try{return t==="depositTo"?yield this._originalProvider.sendTransaction({to:r,data:o,value:i.value}):yield s.sendTransaction(n)}catch(f){throw yield h(f)}})}pollTransactionReceiptWithBackoff(r,t=1e3,i=6e3,a=30){return p(this,null,function*(){let s=t,c=0;for(;c<a;){try{let o=yield this.browserProvider.getTransactionReceipt(r);if(o)return o}catch(o){}yield new Promise(o=>setTimeout(o,s)),s=Math.min(s*2,i),c++}throw new Error("Transaction did not complete after maximum retries.")})}callOnChain(r,t,i,a,s){let c=new g.JsonRpcProvider(r.public_rpc_url);return new g.Contract(t,s.abi,c)[i].apply(null,a).catch(n=>p(this,null,function*(){throw yield h(n)}))}getBalance(r){return this.browserProvider.getBalance(r).then(t=>t)}};export{v as EthersProvider};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ethersProvider.ts","../src/parseError.ts"],"sourcesContent":["import { BrowserProvider, Eip1193Provider, ethers } from \"ethers\";\nimport { Web3Provider } from \"@kodiak-finance/orderly-default-evm-adapter\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { parseError } from \"./parseError\";\n\nclass EthersProvider implements Web3Provider {\n private _provider!: BrowserProvider;\n private _originalProvider!: Eip1193Provider;\n\n parseUnits(amount: string, decimals?: number): string {\n return ethers.parseUnits(amount, decimals).toString();\n }\n\n formatUnits(amount: string, decimals?: number): string {\n return ethers.formatUnits(amount, decimals);\n }\n\n set provider(provider: Eip1193Provider) {\n this._provider = new BrowserProvider(provider, \"any\");\n this._originalProvider = provider;\n }\n\n get browserProvider(): BrowserProvider {\n if (!this._provider) {\n throw new Error(\"browserProvider is not initialized\");\n }\n return this._provider;\n }\n\n async signTypedData(\n address: string,\n toSignatureMessage: any,\n ): Promise<string> {\n return await this.browserProvider?.send(\"eth_signTypedData_v4\", [\n address,\n toSignatureMessage,\n ]);\n }\n\n async call(\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const writeMethod: string[] = [\"approve\"];\n // @ts-ignore\n if (this._originalProvider.agwWallet && writeMethod.includes(method)) {\n try {\n // @ts-ignore\n const transactionHash = await this._originalProvider.writeContract({\n abi: options.abi,\n address: address,\n functionName: method,\n args: params,\n });\n\n return {\n hash: transactionHash,\n };\n } catch (error) {\n // const parsedEthersError = getParsedEthersError(error as EthersError);\n // if ((error as any).message.includes(\"rejected\")) {\n // // @ts-ignore\n // throw new Error({ content: \"REJECTED_TRANSACTION\" });\n // }\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n }\n }\n const singer = await this.browserProvider.getSigner();\n const contract = new ethers.Contract(address, options.abi, singer);\n\n return contract[method].apply(null, params).catch(async (error) => {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n });\n }\n\n send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n return this.browserProvider.send(method, params);\n }\n\n async sendTransaction(\n contractAddress: string,\n method: string,\n payload: { from: string; to?: string; data: any[]; value?: bigint },\n options: { abi: any },\n ): Promise<any> {\n const singer = await this.browserProvider?.getSigner();\n if (!singer) {\n throw new Error(\"singer is not exist\");\n }\n\n const contract = new ethers.Contract(\n contractAddress,\n options.abi,\n this.browserProvider,\n );\n\n // contract.interface.getAbiCoder().encode(tx.data);\n const encodeFunctionData = contract.interface.encodeFunctionData(\n method,\n payload.data,\n );\n\n const tx: ethers.TransactionRequest = {\n from: payload.from,\n to: payload.to,\n data: encodeFunctionData,\n value: payload.value,\n };\n\n try {\n // for agw wallet\n if (method === \"depositTo\") {\n // @ts-ignore\n return await this._originalProvider.sendTransaction({\n to: contractAddress,\n data: encodeFunctionData,\n value: payload.value,\n });\n }\n return await singer.sendTransaction(tx);\n } catch (error) {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n }\n }\n\n async pollTransactionReceiptWithBackoff(\n txHash: string,\n baseInterval = 1000,\n maxInterval = 6000,\n maxRetries = 30,\n ) {\n let interval = baseInterval;\n let retries = 0;\n\n while (retries < maxRetries) {\n try {\n const receipt =\n await this.browserProvider!.getTransactionReceipt(txHash);\n if (receipt) {\n // completed, get receipt\n return receipt;\n }\n } catch (error) {\n // waiting\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n\n interval = Math.min(interval * 2, maxInterval);\n retries++;\n }\n\n throw new Error(\"Transaction did not complete after maximum retries.\");\n }\n\n callOnChain(\n chain: API.NetworkInfos,\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const provider = new ethers.JsonRpcProvider(chain.public_rpc_url);\n\n const contract = new ethers.Contract(address, options.abi, provider);\n\n return contract[method].apply(null, params).catch(async (error) => {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n });\n }\n\n getBalance(userAddress: string): Promise<bigint> {\n return this.browserProvider!.getBalance(userAddress).then((res) => {\n return res;\n });\n }\n}\n\nexport { EthersProvider };\n","import { DecodedError, ErrorDecoder } from \"ethers-decode-error\";\n\nconst errorDecoder = ErrorDecoder.create();\n\ntype ParsedError = DecodedError & {\n message: string;\n};\n\nexport async function parseError(rawError: any): Promise<ParsedError> {\n const error: DecodedError = await errorDecoder.decode(rawError);\n const reason = error.reason ?? \"\";\n console.error(\"parsedError\", error);\n\n return {\n ...error,\n message: replacePrefix(reason),\n };\n}\n\nfunction replacePrefix(reason: string) {\n const prefixes = [\"ethers-user-denied: \", \"ethers-unsupported: \"];\n\n if (typeof reason !== \"string\") {\n return reason;\n }\n\n for (const prefix of prefixes) {\n if (reason.startsWith(prefix)) {\n return reason.replace(prefix, \"\");\n }\n }\n\n return reason;\n}\n"],"mappings":"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","names":["BrowserProvider","ethers","ErrorDecoder","errorDecoder","ErrorDecoder","parseError","rawError","__async","_a","error","reason","__spreadProps","__spreadValues","replacePrefix","prefixes","prefix","EthersProvider","__publicField","amount","decimals","ethers","provider","BrowserProvider","address","toSignatureMessage","__async","_a","method","params","options","writeMethod","error","parseError","singer","contractAddress","payload","encodeFunctionData","tx","txHash","baseInterval","maxInterval","maxRetries","interval","retries","receipt","resolve","chain","userAddress","res"]}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@kodiak-finance/orderly-web3-provider-ethers",
3
+ "version": "2.7.4",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "keywords": [],
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "dependencies": {
16
+ "ethers": "^6.15.0",
17
+ "ethers-decode-error": "^2.1.3",
18
+ "@kodiak-finance/orderly-default-evm-adapter": "2.7.4",
19
+ "@kodiak-finance/orderly-types": "2.7.4"
20
+ },
21
+ "devDependencies": {
22
+ "jest": "^29.7.0",
23
+ "tsup": "^7.1.0",
24
+ "typescript": "^5.1.6",
25
+ "tsconfig": "0.10.4"
26
+ },
27
+ "scripts": {
28
+ "build": "tsup",
29
+ "test": "echo \"Error: no test specified\" && exit 1"
30
+ }
31
+ }