edge-currency-accountbased 3.2.4 → 3.2.5
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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 3.2.5 (2024-03-11)
|
|
6
|
+
|
|
7
|
+
- fixed: Performance issue with getMaxSpendable caused by recursive calls
|
|
8
|
+
- fixed: (zkSync) fixed getMaxSpendable insufficient funds error caused by misusing gas estimation parameters
|
|
9
|
+
|
|
5
10
|
## 3.2.4 (2024-03-06)
|
|
6
11
|
|
|
7
12
|
- fixed: (zkSync) fixed gas limit estimation failures due to caching last estimations
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
(self.webpackChunkedge_currency_accountbased=self.webpackChunkedge_currency_accountbased||[]).push([[1513],{86352:function(Ee,ne,k){"use strict";k.d(ne,{Vn:function(){return se},lF:function(){return
|
|
1
|
+
(self.webpackChunkedge_currency_accountbased=self.webpackChunkedge_currency_accountbased||[]).push([[1513],{86352:function(Ee,ne,k){"use strict";k.d(ne,{Vn:function(){return se},lF:function(){return S},sp:function(){return ee}});var c=k(76714),X=(H,_,y)=>new Promise((G,b)=>{var D=C=>{try{p(y.next(C))}catch(x){b(x)}},T=C=>{try{p(y.throw(C))}catch(x){b(x)}},p=C=>C.done?G(C.value):Promise.resolve(C.value).then(D,T);p((y=y.apply(H,_)).next())});const Z=["https://info1.edge.app","https://info2.edge.app"];function z(H,_,y){return X(this,arguments,function*(G,b,D,T=5e3,p=fetch){const C=G.map(x=>()=>X(this,null,function*(){const U=yield p(x+"/"+b,D);if(typeof U!="object"){const I=`Invalid return value ${b} in ${x}`;throw console.log(I),new Error(I)}return U}));return yield(0,c.QJ)(C,T)})}function S(H,_,y,G,b=5e3,D){return X(this,null,function*(){const T=yield z((0,c.Sy)(_),y,G,b,D);if(!T.ok){const x=yield T.text();throw console.error(x),new Error(`Error fetching ${y}: ${x}`)}const p=yield T.json();return H(p)})}function ce(H,_,y,G=5e3,b){return X(this,null,function*(){return yield z((0,c.Sy)(H),_,y,G,b)})}const se=(H,_,y,G)=>X(void 0,null,function*(){return yield ce(Z,H,_,y,G)}),ee=H=>Object.keys(H).map(_=>{const y=H[_];return y==null?_:`${_}=${encodeURIComponent(y)}`}).join("&")},79014:function(Ee,ne,k){"use strict";k.d(ne,{Q:function(){return D},k:function(){return b}});var c=k(77591),X=k.n(c),Z=k(24350),z=k(84564),S=k.n(z),ce=k(76714),se=Object.defineProperty,ee=Object.getOwnPropertySymbols,H=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable,y=(T,p,C)=>p in T?se(T,p,{enumerable:!0,configurable:!0,writable:!0,value:C}):T[p]=C,G=(T,p)=>{for(var C in p||(p={}))H.call(p,C)&&y(T,C,p[C]);if(ee)for(var C of ee(p))_.call(p,C)&&y(T,C,p[C]);return T};function b(T,p,C,x,U=[]){const I=G({},S()(p,{},!0)),oe=p.startsWith(`${T.pluginId}://`);if(I.protocol!=null&&(I.protocol=I.protocol.replace(":","")),I.protocol!=null&&I.protocol!==""&&!C[I.protocol])throw new Error(`Uri protocol '${I.protocol}' is not supported for ${T.pluginId}.`);if(I.host===""&&I.pathname==="")throw new Error("Path and host not found in uri.");const re={publicAddress:I.host!==""?I.host:I.pathname.split("/")[0]},ve=I.query.label,Y=I.query.message,pe=I.query.category;(ve!=null||Y!=null||pe!=null||oe)&&(re.metadata={},re.metadata.name=ve,re.metadata.notes=Y,re.metadata.category=pe,re.metadata.gateway=oe!=null?oe:!1);const ue=I.query.amount;if(ue!=null&&typeof ue=="string"){x==null&&(x=T.currencyCode);const Pe=(0,ce.Qs)(x!=null?x:"",T,U);if(Pe==null)throw new Error("InternalErrorInvalidCurrencyCode");let we=(0,c.mul)(ue,Pe.multiplier);we=(0,c.toFixed)(we,0,0),re.nativeAmount=we,re.currencyCode=x}return{edgeParsedUri:re,parsedUri:I}}function D(T,p,C){if(T.publicAddress==null)throw new Error("InvalidPublicAddressError");if(C==null&&T.label==null&&T.message==null)return T.publicAddress;{let x="";C!=null&&(x+="amount="+C+"&"),(T.label!=null||T.message!=null)&&(typeof T.label=="string"&&(x+="label="+T.label+"&"),typeof T.message=="string"&&(x+="message="+T.message+"&")),x=x.substr(0,x.length-1);const U={scheme:p,path:T.publicAddress,query:x};return(0,Z.qC)(U)}}},44535:function(Ee,ne,k){"use strict";k.r(ne),k.d(ne,{EthereumTools:function(){return et},makeCurrencyEngine:function(){return an},makeCurrencyTools:function(){return fn}});var c=k(77591),X=k(2153),Z=k(48764),z=k(21964),S=k.n(z),ce=k(48367),se=k.n(ce),ee=k(82169),H=k(20918),_=k(79014),y=k(76714),G=k(40571),b=k(28363),D=k(35742),T=k(28856),p=k(82448),C=k(94935),x=k(50144),U=k(68142),I=k.n(U),oe=k(37217),Oe=k.n(oe),re=k(84650),ve=k(72681);const Y=1e9,pe=1e8,ue=3e4,Pe=.75,we=60*10*1e3,tt=5*60*1e3;var nt=k(84564),ie=k.n(nt),st=k(44613),be=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});class he{constructor(e,t){this.ethEngine=e,this.config=t}broadcastResponseHandler(e,t,n){if(typeof e.error<"u")throw this.ethEngine.error(`FAILURE ${t}
|
|
2
2
|
${JSON.stringify(e.error)}
|
|
3
3
|
${(0,y.oX)(n)}`),e.error;if(typeof e.result=="string")return this.ethEngine.warn(`SUCCESS ${t}
|
|
4
4
|
${(0,y.oX)(n)}`),e;throw this.ethEngine.error(`FAILURE ${t}
|
|
5
5
|
Invalid return value ${JSON.stringify(e)}
|
|
6
|
-
${(0,y.oX)(n)}`),new Error("Invalid return value on transaction send")}logError(e,t){(0,y.HY)(t).includes("rateLimited")?this.ethEngine.log(e,t):this.ethEngine.error(e,t)}serialServers(e){return be(this,null,function*(){var t;const n=((t=this.config.servers)!=null?t:[]).map(
|
|
7
|
-
${JSON.stringify(i)}`),new Error("checkTokenBalBlockchair tokenData is invalid")}return{tokenBal:a,server:"blockchair"}})}fetchGetBlockchair(e,t=!1){return Te(this,null,function*(){const{blockchairApiKey:n}=this.ethEngine.initOptions;return yield this.serialServers(r=>Te(this,null,function*(){const a=t&&n!=null?`&key=${n}`:"",i=`${r}${e}`,o=yield this.ethEngine.fetchCors(`${i}${a}`);return o.ok||this.throwError(o,"fetchGetBlockchair",i),yield o.json()}))})}}var xe=(d,e,t)=>new Promise((n,r)=>{var a=s=>{try{o(t.next(s))}catch(l){r(l)}},i=s=>{try{o(t.throw(s))}catch(l){r(l)}},o=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,i);o((t=t.apply(d,e)).next())});class at extends he{constructor(){super(...arguments),this.fetchNonce=null,this.fetchBlockheight=null,this.fetchTokenBalance=null,this.fetchTokenBalances=null,this.fetchTxs=null,this.getBaseFeePerGas=null,this.multicastRpc=null,this.broadcast=e=>xe(this,null,function*(){return yield this.parallelServers(t=>xe(this,null,function*(){const n=`v1/${this.ethEngine.currencyInfo.currencyCode.toLowerCase()}/main/txs/push`,r=e.signedTx.replace("0x",""),a=yield this.fetchPostBlockcypher(n,{tx:r},t);return{result:this.broadcastResponseHandler(a,t,e),server:"blockcypher"}}))})}fetchPostBlockcypher(e,t,n){return xe(this,null,function*(){const{blockcypherApiKey:r}=this.ethEngine.initOptions;let a="";r!=null&&r.length>5&&(a="&token="+r);const i=`${n}/${e}${a}`,o=yield this.ethEngine.fetchCors(i,{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify(t)}),s=ie()(i,{},!0);return o.ok||this.throwError(o,"fetchPostBlockcypher",s.hostname),yield o.json()})}}var lt=k(62177);const ct=d=>{const e=(0,p.XC)(d);if(/0[xX][0-9a-fA-F]+/.test(e))return parseInt(e,16);throw new TypeError("Expected a hex number")},ut=d=>{const e=(0,p.XC)(d);if(/0[xX][0-9a-fA-F]+/.test(e))return(0,c.add)(d,"0");throw new TypeError("Expected a hex number")},Be=(0,p.su)({result:ct}),ht=(0,p.su)({result:ut}),dt=(0,p.su)({safeLow:p.mH,average:p.mH,fast:p.mH,fastest:p.mH}),ft=(0,p.su)({types:(0,p.su)((0,p._2)((0,p.su)({name:p.XC,type:p.XC}))),primaryType:p.XC,domain:p.JC,message:p.JC});var pt=k(86352),ge=(d,e,t)=>new Promise((n,r)=>{var a=s=>{try{o(t.next(s))}catch(l){r(l)}},i=s=>{try{o(t.throw(s))}catch(l){r(l)}},o=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,i);o((t=t.apply(d,e)).next())});const Ce=(d,e)=>{const t=Object.keys(e);for(const n of t){const r=e[n];typeof r=="string"&&d(` ${n}: ${(0,c.div)(r,"1000000000",18)} gwei`)}},mt=(d,e,t,n,r)=>({infoFeeProvider:()=>ge(void 0,null,function*(){return yield wt(d,e)}),externalFeeProviders:[gt,vt,yt].map(i=>()=>ge(void 0,null,function*(){return yield i(d,e,t,n,r)}))}),yt=(d,e,t,n,r)=>ge(void 0,null,function*(){const{networkAdapterConfigs:a,supportsEIP1559:i=!1}=r;if(i)return;const o=a.find(w=>w.type==="rpc");if(o==null)return;const s=o.servers,l=(0,y.sD)(s,1)[0],u={headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({method:"eth_gasPrice",params:[],id:1,jsonrpc:"2.0"})},h=yield d(l,u);if(!h.ok){const w=yield h.text();throw new Error(`fetchFeesFromRpc fetch error: ${w}`)}const f=yield h.json(),m=(0,p.Vk)(P.tT)(f);if(m==null)throw new Error(`fetchFeesFromRpc ${l} returned invalid json: ${f}`);const{result:v}=m,g=(0,y.Z8)(v),b={lowFee:(0,c.mul)(g,"1"),standardFeeLow:(0,c.mul)(g,"1.06"),standardFeeHigh:(0,c.mul)(g,"1.12"),highFee:(0,c.mul)(g,"1.25")};return n(`fetchFeesFromRpc: ${e.currencyCode}`),Ce(n,b),b}),gt=(d,e,t,n,r)=>ge(void 0,null,function*(){const{networkAdapterConfigs:a}=r,i=a.find(N=>N.type==="evmscan");if(i==null)return;const o=i.servers,s=Ne(t,e,n);if(o==null||s==null)return;const l=`&apikey=${Array.isArray(s)?(0,y.sD)(s,1)[0]:s!=null?s:""}`,u=`${(0,y.sD)(o,1)[0]}/api?module=gastracker&action=gasoracle${l}`,h=yield d(u);if(!h.ok)throw new Error(`EvmScan fetch error: ${JSON.stringify(h)}`);const f=yield h.json(),m=f.message.includes("NOTOK");if(!(f!=null&&!m))throw new Error(`fetchFeesFromEvmScan unrecognized response message: ${f.message}`);const{SafeGasPrice:g,ProposeGasPrice:b,FastGasPrice:w}=(0,P.TI)(f.result),E=parseFloat(g);let C=parseFloat(b),S=parseFloat(w);C<=E&&(C=E+1),S<=C&&(S=C+1);const H=`${E*Y}`,B=`${(E+C)/2*Y}`,Q=`${S*Y}`,L=`${S*Y/Pe}`,$={lowFee:H,standardFeeLow:B,standardFeeHigh:Q,highFee:L};return n(`fetchFeesFromEvmScan: ${e.currencyCode}`),Ce(n,$),$}),vt=(d,e,t,n,r)=>ge(void 0,null,function*(){const{ethGasStationUrl:a}=r,i=kt(t,e,n);if(a==null||i==null)return;const o=i?`?api-key=${i||""}`:"",l=yield(yield d(`${a}${o}`)).json(),u=dt(l);if(e.currencyCode==="MATIC"&&(u.safeLow*=10,u.average=(l.fast+l.safeLow)/2*10,u.fast=l.standard*10,u.fastest*=10),u.safeLow<=0||u.safeLow>ue)throw new Error("Invalid safeLow value from Gas Station");if(u.average<1||u.average>ue)throw new Error("Invalid average value from Gas Station");if(u.fast<1||u.fast>ue)throw new Error("Invalid fastest value from Gas Station");if(u.fastest<1||u.fastest>ue)throw new Error("Invalid fastest value from Gas Station");u.average<=u.safeLow&&(u.average=u.safeLow+1),u.fast<=u.average&&(u.fast=u.average+1),u.fastest<=u.fast&&(u.fastest=u.fast+1);let h=u.safeLow,f=u.fast,m=((u.fast+u.fastest)*.5+u.fastest)*.5,v=m>u.fastest?m:u.fastest;h=Math.round(h)*pe,f=Math.round(f)*pe,m=Math.round(m)*pe,v=Math.round(v)*pe;const g={lowFee:h.toString(),standardFeeLow:f.toString(),standardFeeHigh:m.toString(),highFee:v.toString()};return n(`fetchFeesFromEvmGasStation: ${e.currencyCode}`),Ce(n,g),g}),wt=(d,e,...t)=>ge(void 0,[d,e,...t],function*(n,{pluginId:r},a={}){const o=yield(yield(0,pt.Vn)(`v1/networkFees/${r}`,void 0,a.timeout,n)).json();return(0,P.b6)(o)}),Ne=(d,e,t)=>{const{evmScanApiKey:n,etherscanApiKey:r,ftmscanApiKey:a,bscscanApiKey:i,polygonscanApiKey:o}=d;if(n!=null)return n;const{currencyCode:s}=e;if(s==="ETH"&&r!=null)return t.warn("INIT OPTION 'etherscanApiKey' IS DEPRECATED. USE 'evmScanApiKey' INSTEAD"),r;if(s==="FTM"&&a!=null)return t.warn("INIT OPTION 'ftmscanApiKey' IS DEPRECATED. USE 'evmScanApiKey' INSTEAD"),a;if(s==="BNB"&&i!=null)return t.warn("INIT OPTION 'bscscanApiKey' IS DEPRECATED. USE 'evmScanApiKey' INSTEAD"),i;if(s==="MATIC"&&o!=null)return t.warn("INIT OPTION 'polygonscanApiKey' IS DEPRECATED. USE 'evmScanApiKey' INSTEAD"),o},kt=(d,e,t)=>{const{gasStationApiKey:n,ethGasStationApiKey:r}=d;if(n!=null)return n;const{currencyCode:a}=e;if(a==="ETH"&&r!=null)return t.warn("INIT OPTION 'ethGasStationApiKey' IS DEPRECATED. USE 'gasStationApiKey' INSTEAD"),r};var V=(d,e,t)=>new Promise((n,r)=>{var a=s=>{try{o(t.next(s))}catch(l){r(l)}},i=s=>{try{o(t.throw(s))}catch(l){r(l)}},o=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,i);o((t=t.apply(d,e)).next())});const Et=50;class Pt extends he{constructor(){super(...arguments),this.getBaseFeePerGas=null,this.multicastRpc=null,this.fetchTokenBalances=null,this.fetchBlockheight=()=>V(this,null,function*(){const{result:e,server:t}=yield this.serialServers(r=>V(this,null,function*(){if(!r.includes("etherscan")&&!r.includes("blockscout"))throw new Error(`Unsupported command eth_blockNumber in ${r}`);let a="?module=proxy&action=eth_blockNumber";r.includes("blockscout")&&(a="?module=block&action=eth_block_number");const i=yield this.fetchGetEtherscan(r,a);if(typeof i.result!="string"){const o=`Invalid return value eth_blockNumber in ${r}`;throw this.ethEngine.error(o),new Error(o)}return{server:r,result:i}}));return{blockHeight:Be(e).result,server:t}}),this.broadcast=e=>V(this,null,function*(){return yield this.parallelServers(t=>V(this,null,function*(){const n=`?module=proxy&action=eth_sendRawTransaction&hex=${e.signedTx}`,r=yield this.fetchGetEtherscan(t,n);return{result:this.broadcastResponseHandler(r,t,e),server:"etherscan"}}))}),this.fetchNonce=()=>V(this,null,function*(){const t=`?module=proxy&action=eth_getTransactionCount&address=${this.ethEngine.walletLocalData.publicKey}&tag=latest`,{result:n,server:r}=yield this.serialServers(i=>V(this,null,function*(){if(!i.includes("etherscan")&&!i.includes("blockscout"))throw new Error(`Unsupported command eth_getTransactionCount in ${i}`);const o=yield this.fetchGetEtherscan(i,t);if(typeof o.result!="string"){const s=`Invalid return value eth_getTransactionCount in ${i}`;throw this.ethEngine.error(s),new Error(s)}return{server:i,result:o}}));return{newNonce:ht(n).result,server:r}}),this.fetchTokenBalance=e=>V(this,null,function*(){const t=this.ethEngine.walletLocalData.publicKey;let n,r,a,i;try{if(e===this.ethEngine.currencyInfo.currencyCode){const o=`?module=account&action=balance&address=${t}&tag=latest`;n=yield this.serialServers(s=>V(this,null,function*(){const l=yield this.fetchGetEtherscan(s,o);if(typeof l.result!="string"||l.result===""){const u=`Invalid return value eth_getBalance in ${s}`;throw this.ethEngine.error(u),new Error(u)}return(0,lt.jD)(l.result),{server:s,result:l}})),r=n.result,a=n.server}else{const o=this.ethEngine.getTokenInfo(e);if(o!=null&&typeof o.contractAddress=="string"){const l=`?module=account&action=tokenbalance&contractaddress=${o.contractAddress}&address=${t}&tag=latest`,u=yield this.serialServers(h=>V(this,null,function*(){const f=yield this.fetchGetEtherscan(h,l);if(typeof f.result!="string"||f.result===""){const m=`Invalid return value getTokenBalance in ${h}`;throw this.ethEngine.error(m),new Error(m)}return{server:h,result:f}}));r=u.result,a=u.server}}i=(0,P.tT)(r)}catch(o){throw this.ethEngine.error(`checkTokenBalEthscan token ${e} response ${String(n!=null?n:"")} `,o),new Error(`checkTokenBalEthscan invalid ${e} response ${JSON.stringify(r)}`)}if(/^\d+$/.test(i.result)){const o=i.result;return{tokenBal:{[e]:o},server:a}}else throw new Error(`checkTokenBalEthscan returned invalid JSON for ${e}`)}),this.fetchTxs=e=>V(this,null,function*(){var t,n,r;const{startBlock:a,currencyCode:i}=e;let o,s;if(i===this.ethEngine.currencyInfo.currencyCode){const u=yield this.getAllTxsEthscan(a,i,P.EV,{searchRegularTxs:!0}),h=yield this.getAllTxsEthscan(a,i,P.xF,{searchRegularTxs:!1});o=(n=(t=u.server)!=null?t:h.server)!=null?n:"",s=[...u.allTransactions,...h.allTransactions]}else{const u=this.ethEngine.getTokenInfo(i);if(u!=null&&typeof u.contractAddress=="string"){const h=u.contractAddress,f=yield this.getAllTxsEthscan(a,i,P.T0,{contractAddress:h});o=(r=f.server)!=null?r:"",s=f.allTransactions}else return{}}const l={blockHeight:a,edgeTransactions:s};return{tokenTxs:{[i]:l},server:o}})}fetchGetEtherscan(e,t){return V(this,null,function*(){const n=Ne(this.ethEngine.initOptions,this.ethEngine.currencyInfo,this.ethEngine.log);e.indexOf("cors-http")===0&&(e=e.replace(/^cors-http/,"http"));const a=Array.isArray(n)?(0,y.sD)(n,1)[0]:n!=null?n:"",i=a!==""?`&apikey=${a}`:"",o=`${e}/api${t}`,s=yield this.ethEngine.fetchCors(`${o}${i}`);return s.ok||this.throwError(s,"fetchGetEtherscan",o),yield s.json()})}getAllTxsEthscan(e,t,n,r){return V(this,null,function*(){const a=this.ethEngine.walletLocalData.publicKey;let i=1;const o=[];let s;const l=r.contractAddress,u=r.searchRegularTxs;for(;;){const h=Et;let f;t===this.ethEngine.currencyInfo.currencyCode?f=`?action=${u?"txlist":"txlistinternal"}&module=account`:f=`?action=tokentx&contractaddress=${l}&module=account`;const m=`${f}&address=${a}&startblock=${e}&endblock=999999999&sort=asc&page=${i}&offset=${h}`,v=this.config.servers.length===0?{result:{result:[]},server:void 0}:yield this.serialServers(b=>V(this,null,function*(){const w=yield this.fetchGetEtherscan(b,m);if(typeof w.result!="object"||typeof w.result.length!="number"){const E=`Invalid return value getTransactions in ${b}`;throw w.result!=="Max rate limit reached"&&this.ethEngine.error(E),new Error(E)}return{server:b,result:w}}));s=v.server;const g=v.result.result;for(let b=0;b<g.length;b++)try{const w=n(g[b]),E=yield this.processEvmScanTransaction(w,t);o.push(E)}catch(w){throw this.ethEngine.error(`getAllTxsEthscan ${n.name}
|
|
6
|
+
${(0,y.oX)(n)}`),new Error("Invalid return value on transaction send")}logError(e,t){(0,y.HY)(t).includes("rateLimited")?this.ethEngine.log(e,t):this.ethEngine.error(e,t)}serialServers(e){return be(this,null,function*(){var t;const n=((t=this.config.servers)!=null?t:[]).map(s=>()=>be(this,null,function*(){return yield e(s)}));return yield(0,y.QJ)((0,y.Sy)(n))})}parallelServers(e){return be(this,null,function*(){var t;const n=((t=this.config.servers)!=null?t:[]).map(s=>be(this,null,function*(){return yield e(s)}));return yield(0,y.Wp)(n)})}throwError(e,t,n){switch(e.status){case 402:case 429:case 432:throw new Error("rateLimited");default:throw new Error(`${t} The server returned error code ${e.status} for ${n}`)}}}var ye=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});class rt extends he{constructor(){super(...arguments),this.broadcast=null,this.fetchTokenBalance=null,this.fetchTokenBalances=null,this.fetchTxs=null,this.getBaseFeePerGas=null,this.multicastRpc=null,this.fetchBlockheight=()=>ye(this,null,function*(){try{const e=yield this.fetchPostAmberdataRpc("eth_blockNumber",[]);return{blockHeight:parseInt((0,b.tT)(e).result,16),server:"amberdata"}}catch(e){throw this.logError("checkBlockHeightAmberdata",e),new Error("checkTxsAmberdata (regular tx) response is invalid")}}),this.fetchNonce=()=>ye(this,null,function*(){const e=this.ethEngine.walletLocalData.publicKey;try{const t=yield this.fetchPostAmberdataRpc("eth_getTransactionCount",[e,"latest"]);return{newNonce:`${parseInt((0,b.tT)(t).result,16)}`,server:"amberdata"}}catch(t){throw this.logError("checkNonceAmberdata",t),new Error("Amberdata returned invalid JSON")}})}fetchPostAmberdataRpc(e){return ye(this,arguments,function*(t,n=[]){const{amberdataApiKey:s=""}=this.ethEngine.initOptions;return yield this.serialServers(a=>ye(this,null,function*(){const i=`${this.config.servers[0]}`,o={jsonrpc:"2.0",method:t,params:n,id:1},r=yield this.ethEngine.fetchCors(i,{headers:{"x-amberdata-blockchain-id":this.ethEngine.networkInfo.amberDataBlockchainId,"x-api-key":s,"Content-Type":"application/json"},method:"POST",body:JSON.stringify(o)}),l=ie()(i,{},!0);return r.ok||this.throwError(r,"fetchPostAmberdataRpc",l),yield r.json()}))})}fetchGetAmberdataApi(e){return ye(this,null,function*(){const{amberdataApiKey:t=""}=this.ethEngine.initOptions;return yield this.serialServers(n=>ye(this,null,function*(){const s=`${st._E}${e}`,a=yield this.ethEngine.fetchCors(s,{headers:{"x-amberdata-blockchain-id":this.ethEngine.networkInfo.amberDataBlockchainId,"x-api-key":t}});return a.ok||this.throwError(a,"fetchGetAmberdata",s),yield a.json()}))})}}var ae=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});class ot extends he{constructor(){super(...arguments),this.getBaseFeePerGas=null,this.multicastRpc=null,this.fetchTokenBalances=null,this.fetchTxs=null,this.fetchBlockheight=()=>ae(this,null,function*(){try{const{result:e,server:t}=yield this.serialServers(s=>ae(this,null,function*(){const a=yield this.fetchGetBlockbook(s,"/api/v2");return{server:s,result:a}}));return{blockHeight:(0,b.EX)(e).blockbook.bestHeight,server:t}}catch(e){throw this.ethEngine.log("checkBlockHeightBlockbook blockHeight ",e),new Error("checkBlockHeightBlockbook returned invalid JSON")}}),this.broadcast=e=>ae(this,null,function*(){return yield this.parallelServers(t=>ae(this,null,function*(){const n=yield this.fetchGetBlockbook(t,`/api/v2/sendtx/${e.signedTx}`);return{result:this.broadcastResponseHandler(n,t,e),server:"blockbook"}}))}),this.fetchNonce=()=>ae(this,null,function*(){return yield this.checkAddressBlockbook()}),this.fetchTokenBalance=()=>ae(this,null,function*(){return yield this.checkAddressBlockbook()})}checkAddressBlockbook(){return ae(this,null,function*(){const e=this.ethEngine.walletLocalData.publicKey.toLowerCase(),t={newNonce:"0",tokenBal:{},server:""},n="/api/v2/address/"+e+"?&details=tokenBalances",{result:s,server:a}=yield this.serialServers(u=>ae(this,null,function*(){const h=yield this.fetchGetBlockbook(u,n);return{server:u,result:h}}));let i;try{i=(0,b.hZ)(s)}catch{throw this.ethEngine.error(`checkTxsBlockbook ${a} error BlockbookAddress ${JSON.stringify(s)}`),new Error(`checkTxsBlockbook ${a} returned invalid JSON for BlockbookAddress`)}const{nonce:o,tokens:r,balance:l}=i;t.newNonce=o,t.tokenBal!=null&&(t.tokenBal[this.ethEngine.currencyInfo.currencyCode]=l),t.server=a;for(const u of r)try{const{symbol:h,balance:f}=(0,b.OM)(u);t.tokenBal[h]=f}catch{throw this.ethEngine.error(`checkTxsBlockbook ${a} BlockbookTokenBalance ${JSON.stringify(u)}`),new Error(`checkTxsBlockbook ${a} returned invalid JSON for BlockbookTokenBalance`)}return t})}fetchGetBlockbook(e,t){return ae(this,null,function*(){const n=e+t;return yield(e.includes("trezor")?yield this.ethEngine.fetchCors(n,{headers:{"User-Agent":"http.agent"}}):yield this.ethEngine.fetchCors(n)).json()})}}var Te=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});class it extends he{constructor(){super(...arguments),this.broadcast=null,this.fetchNonce=null,this.fetchTokenBalances=null,this.fetchTxs=null,this.getBaseFeePerGas=null,this.multicastRpc=null,this.fetchBlockheight=()=>Te(this,null,function*(){try{const e=yield this.fetchGetBlockchair(`/${this.ethEngine.currencyInfo.pluginId}/stats`,!1);return{blockHeight:parseInt((0,b.cc)(e).data.blocks.toString(),10),server:"blockchair"}}catch(e){throw this.logError(e),new Error("checkBlockHeightBlockchair returned invalid JSON")}}),this.fetchTokenBalance=e=>Te(this,null,function*(){let t;const n=this.ethEngine.walletLocalData.publicKey,s=`/${this.ethEngine.currencyInfo.pluginId}/dashboards/address/${n}?erc_20=true`;try{const i=yield this.fetchGetBlockchair(s,!1);t=(0,b.x4)(i)}catch(i){throw this.logError("checkTokenBalBlockchair",i),new Error("checkTokenBalBlockchair response is invalid")}const a={[this.ethEngine.currencyInfo.currencyCode]:t.data[n].address.balance};for(const i of t.data[n].layer_2.erc_20)try{const o=(0,b.aB)(i),r=o.balance,l=o.token_address,u=o.token_symbol,h=this.ethEngine.getTokenInfo(u);h!=null&&h.contractAddress===l&&(a[u]=r)}catch(o){throw this.ethEngine.error(`checkTokenBalBlockchair tokenData ${(0,y.HY)(o)}
|
|
7
|
+
${JSON.stringify(i)}`),new Error("checkTokenBalBlockchair tokenData is invalid")}return{tokenBal:a,server:"blockchair"}})}fetchGetBlockchair(e,t=!1){return Te(this,null,function*(){const{blockchairApiKey:n}=this.ethEngine.initOptions;return yield this.serialServers(s=>Te(this,null,function*(){const a=t&&n!=null?`&key=${n}`:"",i=`${s}${e}`,o=yield this.ethEngine.fetchCors(`${i}${a}`);return o.ok||this.throwError(o,"fetchGetBlockchair",i),yield o.json()}))})}}var xe=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});class at extends he{constructor(){super(...arguments),this.fetchNonce=null,this.fetchBlockheight=null,this.fetchTokenBalance=null,this.fetchTokenBalances=null,this.fetchTxs=null,this.getBaseFeePerGas=null,this.multicastRpc=null,this.broadcast=e=>xe(this,null,function*(){return yield this.parallelServers(t=>xe(this,null,function*(){const n=`v1/${this.ethEngine.currencyInfo.currencyCode.toLowerCase()}/main/txs/push`,s=e.signedTx.replace("0x",""),a=yield this.fetchPostBlockcypher(n,{tx:s},t);return{result:this.broadcastResponseHandler(a,t,e),server:"blockcypher"}}))})}fetchPostBlockcypher(e,t,n){return xe(this,null,function*(){const{blockcypherApiKey:s}=this.ethEngine.initOptions;let a="";s!=null&&s.length>5&&(a="&token="+s);const i=`${n}/${e}${a}`,o=yield this.ethEngine.fetchCors(i,{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify(t)}),r=ie()(i,{},!0);return o.ok||this.throwError(o,"fetchPostBlockcypher",r.hostname),yield o.json()})}}var lt=k(62177);const ct=d=>{const e=(0,p.XC)(d);if(/0[xX][0-9a-fA-F]+/.test(e))return parseInt(e,16);throw new TypeError("Expected a hex number")},ut=d=>{const e=(0,p.XC)(d);if(/0[xX][0-9a-fA-F]+/.test(e))return(0,c.add)(d,"0");throw new TypeError("Expected a hex number")},Be=(0,p.su)({result:ct}),ht=(0,p.su)({result:ut}),dt=(0,p.su)({safeLow:p.mH,average:p.mH,fast:p.mH,fastest:p.mH}),ft=(0,p.su)({types:(0,p.su)((0,p._2)((0,p.su)({name:p.XC,type:p.XC}))),primaryType:p.XC,domain:p.JC,message:p.JC});var pt=k(86352),ge=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});const Ce=(d,e)=>{const t=Object.keys(e);for(const n of t){const s=e[n];typeof s=="string"&&d(` ${n}: ${(0,c.div)(s,"1000000000",18)} gwei`)}},mt=(d,e,t,n,s)=>({infoFeeProvider:()=>ge(void 0,null,function*(){return yield wt(d,e)}),externalFeeProviders:[gt,vt,yt].map(i=>()=>ge(void 0,null,function*(){return yield i(d,e,t,n,s)}))}),yt=(d,e,t,n,s)=>ge(void 0,null,function*(){const{networkAdapterConfigs:a,supportsEIP1559:i=!1}=s;if(i)return;const o=a.find(w=>w.type==="rpc");if(o==null)return;const r=o.servers,l=(0,y.sD)(r,1)[0],u={headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({method:"eth_gasPrice",params:[],id:1,jsonrpc:"2.0"})},h=yield d(l,u);if(!h.ok){const w=yield h.text();throw new Error(`fetchFeesFromRpc fetch error: ${w}`)}const f=yield h.json(),m=(0,p.Vk)(b.tT)(f);if(m==null)throw new Error(`fetchFeesFromRpc ${l} returned invalid json: ${f}`);const{result:v}=m,g=(0,y.Z8)(v),P={lowFee:(0,c.mul)(g,"1"),standardFeeLow:(0,c.mul)(g,"1.06"),standardFeeHigh:(0,c.mul)(g,"1.12"),highFee:(0,c.mul)(g,"1.25")};return n(`fetchFeesFromRpc: ${e.currencyCode}`),Ce(n,P),P}),gt=(d,e,t,n,s)=>ge(void 0,null,function*(){const{networkAdapterConfigs:a}=s,i=a.find(B=>B.type==="evmscan");if(i==null)return;const o=i.servers,r=Ne(t,e,n);if(o==null||r==null)return;const l=`&apikey=${Array.isArray(r)?(0,y.sD)(r,1)[0]:r!=null?r:""}`,u=`${(0,y.sD)(o,1)[0]}/api?module=gastracker&action=gasoracle${l}`,h=yield d(u);if(!h.ok)throw new Error(`EvmScan fetch error: ${JSON.stringify(h)}`);const f=yield h.json(),m=f.message.includes("NOTOK");if(!(f!=null&&!m))throw new Error(`fetchFeesFromEvmScan unrecognized response message: ${f.message}`);const{SafeGasPrice:g,ProposeGasPrice:P,FastGasPrice:w}=(0,b.TI)(f.result),E=parseFloat(g);let A=parseFloat(P),F=parseFloat(w);A<=E&&(A=E+1),F<=A&&(F=A+1);const K=`${E*Y}`,$=`${(E+A)/2*Y}`,Q=`${F*Y}`,L=`${F*Y/Pe}`,R={lowFee:K,standardFeeLow:$,standardFeeHigh:Q,highFee:L};return n(`fetchFeesFromEvmScan: ${e.currencyCode}`),Ce(n,R),R}),vt=(d,e,t,n,s)=>ge(void 0,null,function*(){const{ethGasStationUrl:a}=s,i=kt(t,e,n);if(a==null||i==null)return;const o=i?`?api-key=${i||""}`:"",l=yield(yield d(`${a}${o}`)).json(),u=dt(l);if(e.currencyCode==="MATIC"&&(u.safeLow*=10,u.average=(l.fast+l.safeLow)/2*10,u.fast=l.standard*10,u.fastest*=10),u.safeLow<=0||u.safeLow>ue)throw new Error("Invalid safeLow value from Gas Station");if(u.average<1||u.average>ue)throw new Error("Invalid average value from Gas Station");if(u.fast<1||u.fast>ue)throw new Error("Invalid fastest value from Gas Station");if(u.fastest<1||u.fastest>ue)throw new Error("Invalid fastest value from Gas Station");u.average<=u.safeLow&&(u.average=u.safeLow+1),u.fast<=u.average&&(u.fast=u.average+1),u.fastest<=u.fast&&(u.fastest=u.fast+1);let h=u.safeLow,f=u.fast,m=((u.fast+u.fastest)*.5+u.fastest)*.5,v=m>u.fastest?m:u.fastest;h=Math.round(h)*pe,f=Math.round(f)*pe,m=Math.round(m)*pe,v=Math.round(v)*pe;const g={lowFee:h.toString(),standardFeeLow:f.toString(),standardFeeHigh:m.toString(),highFee:v.toString()};return n(`fetchFeesFromEvmGasStation: ${e.currencyCode}`),Ce(n,g),g}),wt=(d,e,...t)=>ge(void 0,[d,e,...t],function*(n,{pluginId:s},a={}){const o=yield(yield(0,pt.Vn)(`v1/networkFees/${s}`,void 0,a.timeout,n)).json();return(0,b.b6)(o)}),Ne=(d,e,t)=>{const{evmScanApiKey:n,etherscanApiKey:s,ftmscanApiKey:a,bscscanApiKey:i,polygonscanApiKey:o}=d;if(n!=null)return n;const{currencyCode:r}=e;if(r==="ETH"&&s!=null)return t.warn("INIT OPTION 'etherscanApiKey' IS DEPRECATED. USE 'evmScanApiKey' INSTEAD"),s;if(r==="FTM"&&a!=null)return t.warn("INIT OPTION 'ftmscanApiKey' IS DEPRECATED. USE 'evmScanApiKey' INSTEAD"),a;if(r==="BNB"&&i!=null)return t.warn("INIT OPTION 'bscscanApiKey' IS DEPRECATED. USE 'evmScanApiKey' INSTEAD"),i;if(r==="MATIC"&&o!=null)return t.warn("INIT OPTION 'polygonscanApiKey' IS DEPRECATED. USE 'evmScanApiKey' INSTEAD"),o},kt=(d,e,t)=>{const{gasStationApiKey:n,ethGasStationApiKey:s}=d;if(n!=null)return n;const{currencyCode:a}=e;if(a==="ETH"&&s!=null)return t.warn("INIT OPTION 'ethGasStationApiKey' IS DEPRECATED. USE 'gasStationApiKey' INSTEAD"),s};var V=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});const Et=50;class Pt extends he{constructor(){super(...arguments),this.getBaseFeePerGas=null,this.multicastRpc=null,this.fetchTokenBalances=null,this.fetchBlockheight=()=>V(this,null,function*(){const{result:e,server:t}=yield this.serialServers(s=>V(this,null,function*(){if(!s.includes("etherscan")&&!s.includes("blockscout"))throw new Error(`Unsupported command eth_blockNumber in ${s}`);let a="?module=proxy&action=eth_blockNumber";s.includes("blockscout")&&(a="?module=block&action=eth_block_number");const i=yield this.fetchGetEtherscan(s,a);if(typeof i.result!="string"){const o=`Invalid return value eth_blockNumber in ${s}`;throw this.ethEngine.error(o),new Error(o)}return{server:s,result:i}}));return{blockHeight:Be(e).result,server:t}}),this.broadcast=e=>V(this,null,function*(){return yield this.parallelServers(t=>V(this,null,function*(){const n=`?module=proxy&action=eth_sendRawTransaction&hex=${e.signedTx}`,s=yield this.fetchGetEtherscan(t,n);return{result:this.broadcastResponseHandler(s,t,e),server:"etherscan"}}))}),this.fetchNonce=()=>V(this,null,function*(){const t=`?module=proxy&action=eth_getTransactionCount&address=${this.ethEngine.walletLocalData.publicKey}&tag=latest`,{result:n,server:s}=yield this.serialServers(i=>V(this,null,function*(){if(!i.includes("etherscan")&&!i.includes("blockscout"))throw new Error(`Unsupported command eth_getTransactionCount in ${i}`);const o=yield this.fetchGetEtherscan(i,t);if(typeof o.result!="string"){const r=`Invalid return value eth_getTransactionCount in ${i}`;throw this.ethEngine.error(r),new Error(r)}return{server:i,result:o}}));return{newNonce:ht(n).result,server:s}}),this.fetchTokenBalance=e=>V(this,null,function*(){const t=this.ethEngine.walletLocalData.publicKey;let n,s,a,i;try{if(e===this.ethEngine.currencyInfo.currencyCode){const o=`?module=account&action=balance&address=${t}&tag=latest`;n=yield this.serialServers(r=>V(this,null,function*(){const l=yield this.fetchGetEtherscan(r,o);if(typeof l.result!="string"||l.result===""){const u=`Invalid return value eth_getBalance in ${r}`;throw this.ethEngine.error(u),new Error(u)}return(0,lt.jD)(l.result),{server:r,result:l}})),s=n.result,a=n.server}else{const o=this.ethEngine.getTokenInfo(e);if(o!=null&&typeof o.contractAddress=="string"){const l=`?module=account&action=tokenbalance&contractaddress=${o.contractAddress}&address=${t}&tag=latest`,u=yield this.serialServers(h=>V(this,null,function*(){const f=yield this.fetchGetEtherscan(h,l);if(typeof f.result!="string"||f.result===""){const m=`Invalid return value getTokenBalance in ${h}`;throw this.ethEngine.error(m),new Error(m)}return{server:h,result:f}}));s=u.result,a=u.server}}i=(0,b.tT)(s)}catch(o){throw this.ethEngine.error(`checkTokenBalEthscan token ${e} response ${String(n!=null?n:"")} `,o),new Error(`checkTokenBalEthscan invalid ${e} response ${JSON.stringify(s)}`)}if(/^\d+$/.test(i.result)){const o=i.result;return{tokenBal:{[e]:o},server:a}}else throw new Error(`checkTokenBalEthscan returned invalid JSON for ${e}`)}),this.fetchTxs=e=>V(this,null,function*(){var t,n,s;const{startBlock:a,currencyCode:i}=e;let o,r;if(i===this.ethEngine.currencyInfo.currencyCode){const u=yield this.getAllTxsEthscan(a,i,b.EV,{searchRegularTxs:!0}),h=yield this.getAllTxsEthscan(a,i,b.xF,{searchRegularTxs:!1});o=(n=(t=u.server)!=null?t:h.server)!=null?n:"",r=[...u.allTransactions,...h.allTransactions]}else{const u=this.ethEngine.getTokenInfo(i);if(u!=null&&typeof u.contractAddress=="string"){const h=u.contractAddress,f=yield this.getAllTxsEthscan(a,i,b.T0,{contractAddress:h});o=(s=f.server)!=null?s:"",r=f.allTransactions}else return{}}const l={blockHeight:a,edgeTransactions:r};return{tokenTxs:{[i]:l},server:o}})}fetchGetEtherscan(e,t){return V(this,null,function*(){const n=Ne(this.ethEngine.initOptions,this.ethEngine.currencyInfo,this.ethEngine.log);e.indexOf("cors-http")===0&&(e=e.replace(/^cors-http/,"http"));const a=Array.isArray(n)?(0,y.sD)(n,1)[0]:n!=null?n:"",i=a!==""?`&apikey=${a}`:"",o=`${e}/api${t}`,r=yield this.ethEngine.fetchCors(`${o}${i}`);return r.ok||this.throwError(r,"fetchGetEtherscan",o),yield r.json()})}getAllTxsEthscan(e,t,n,s){return V(this,null,function*(){const a=this.ethEngine.walletLocalData.publicKey;let i=1;const o=[];let r;const l=s.contractAddress,u=s.searchRegularTxs;for(;;){const h=Et;let f;t===this.ethEngine.currencyInfo.currencyCode?f=`?action=${u?"txlist":"txlistinternal"}&module=account`:f=`?action=tokentx&contractaddress=${l}&module=account`;const m=`${f}&address=${a}&startblock=${e}&endblock=999999999&sort=asc&page=${i}&offset=${h}`,v=this.config.servers.length===0?{result:{result:[]},server:void 0}:yield this.serialServers(P=>V(this,null,function*(){const w=yield this.fetchGetEtherscan(P,m);if(typeof w.result!="object"||typeof w.result.length!="number"){const E=`Invalid return value getTransactions in ${P}`;throw w.result!=="Max rate limit reached"&&this.ethEngine.error(E),new Error(E)}return{server:P,result:w}}));r=v.server;const g=v.result.result;for(let P=0;P<g.length;P++)try{const w=n(g[P]),E=yield this.processEvmScanTransaction(w,t);o.push(E)}catch(w){throw this.ethEngine.error(`getAllTxsEthscan ${n.name}
|
|
8
8
|
${(0,y.HY)(w)}
|
|
9
|
-
${JSON.stringify(g[b])}`),new Error(`getAllTxsEthscan ${n.name} is invalid`)}if(g.length===0)break;i++}return{allTransactions:o,server:s}})}processEvmScanTransaction(e,t){return V(this,null,function*(){var n;const r=[],a=(n=e.hash)!=null?n:e.transactionHash;if(a==null)throw new Error("Invalid transaction result format");const i=e.from.toLowerCase()===this.ethEngine.walletLocalData.publicKey.toLowerCase(),o=t!==this.ethEngine.currencyInfo.currencyCode,s="gasPrice"in e?e.gasPrice:void 0,l=s!=null?(0,c.mul)(s,e.gasUsed):"0";let u="0";if(i&&this.ethEngine.networkInfo.optimismRollupParams!=null){const w=yield this.ethEngine.ethNetwork.multicastRpc("eth_getTransactionReceipt",[a]),E=(0,P.zv)(w.result.result);u=(0,c.add)(u,(0,y.X0)(E.l1Fee))}let h,f,m;i?o?(h=(0,c.sub)("0",e.value),f="0",m=(0,c.add)(l,u)):e.from.toLowerCase()===e.to.toLowerCase()?(h=(0,c.sub)((0,c.sub)("0",l),u),f=(0,c.add)(l,u)):(h=(0,c.sub)((0,c.sub)((0,c.sub)("0",e.value),l),u),f=(0,c.add)(l,u)):(h=e.value,f="0",r.push(this.ethEngine.walletLocalData.publicKey));const v={from:[e.from],to:[e.to],gas:e.gas,gasPrice:s!=null?s:"",gasUsed:e.gasUsed,isFromMakeSpend:!1};let g=parseInt(e.blockNumber);return g<0&&(g=0),{blockHeight:g,currencyCode:t,date:parseInt(e.timeStamp),feeRateUsed:s!=null?Ie(s,e.gas,e.gasUsed):void 0,isSend:h.startsWith("-"),memos:[],nativeAmount:h,networkFee:f,otherParams:v,ourReceiveAddresses:r,parentNetworkFee:m,signedTx:"",txid:a,walletId:this.ethEngine.walletId}})}}var bt=k(77258),me=(d,e,t)=>new Promise((n,r)=>{var a=s=>{try{o(t.next(s))}catch(l){r(l)}},i=s=>{try{o(t.throw(s))}catch(l){r(l)}},o=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,i);o((t=t.apply(d,e)).next())});class Tt extends he{constructor(){super(...arguments),this.fetchBlockheight=null,this.broadcast=null,this.getBaseFeePerGas=null,this.multicastRpc=null,this.fetchNonce=null,this.fetchTokenBalance=null,this.fetchTokenBalances=null,this.fetchTxs=e=>me(this,null,function*(){try{return this.currentScan!=null?yield this.currentScan:(this.currentScan=this.checkTransactions(e),yield this.currentScan)}catch(t){throw console.error(t),t}finally{this.currentScan=void 0}}),this.filfoxMessageToEdgeTransaction=(e,t)=>{const n=[],r=t.transfers.filter(o=>o.type==="miner-fee"||o.type==="burner-fee").reduce((o,s)=>(0,c.add)(o,s.value),"0");let a;return t.from===e?(a=`-${r}`,t.to!==e&&(a=(0,c.sub)(a,t.value))):(a=t.value,n.push(e)),{blockHeight:t.height,currencyCode:this.ethEngine.currencyInfo.currencyCode,date:t.timestamp,isSend:a.startsWith("-"),memos:[],nativeAmount:a,networkFee:r,otherParams:{},ourReceiveAddresses:n,signedTx:"",txid:t.cid,walletId:this.ethEngine.walletId}}}checkTransactions(e){return me(this,null,function*(){const{startBlock:t,currencyCode:n}=e,{publicAddress:r}=yield this.ethEngine.getFreshAddress(),a=s=>{const l=this.ethEngine.tokenCheckTransactionsStatus[this.ethEngine.currencyInfo.currencyCode],u=s;l<1&&(u>=1||u>l*1.1)&&(this.ethEngine.tokenCheckTransactionsStatus[this.ethEngine.currencyInfo.currencyCode]=u,this.ethEngine.updateOnAddressesChecked())},i=({tx:s,progress:l})=>{s!=null&&(this.ethEngine.addTransaction(n,s),this.onUpdateTransactions(),this.ethEngine.walletLocalData.blockHeight<s.blockHeight&&this.onUpdateBlockHeight(s.blockHeight)),a(l)},o=[this.scanTransactionsFromFilfox(r,i)];return yield Promise.all(o),this.ethEngine.walletLocalData.lastAddressQueryHeight=this.ethEngine.walletLocalData.blockHeight,this.ethEngine.walletLocalDataDirty=!0,a(1),{tokenTxs:{[n]:{blockHeight:t,edgeTransactions:[]}},server:this.config.servers.join(",")}})}makeFilfoxApi(e){return new bt.V7(e,this.ethEngine.fetchCors)}onUpdateBlockHeight(e){this.ethEngine.walletLocalData.blockHeight!==e&&(this.ethEngine.walletLocalData.blockHeight=e,this.ethEngine.walletLocalDataDirty=!0,this.ethEngine.currencyEngineCallbacks.onBlockHeightChanged(this.ethEngine.walletLocalData.blockHeight))}onUpdateTransactions(){this.ethEngine.transactionsChangedArray.length>0&&(this.ethEngine.currencyEngineCallbacks.onTransactionsChanged(this.ethEngine.transactionsChangedArray),this.ethEngine.transactionsChangedArray=[])}scanTransactionsFromFilfox(e,t){return me(this,null,function*(){const n=new Set;let a=(yield this.serialServers(l=>me(this,null,function*(){return yield this.makeFilfoxApi(l).getAccountTransfers(e,0,1)}))).totalCount;const i=20;let o=Math.ceil(a/i),s=0;for(let l=o-1;l>=0;l--){const u=yield this.serialServers(f=>me(this,null,function*(){return yield this.makeFilfoxApi(f).getAccountTransfers(e,l,i)}));let h=u.transfers;if(u.totalCount!==a){const f=u.totalCount-a,v=(l+1)*(i/f),g=yield this.serialServers(b=>me(this,null,function*(){return yield this.makeFilfoxApi(b).getAccountTransfers(e,v,f)}));h=[...h,...g.transfers],a=u.totalCount,o=Math.ceil(a/i)}for(let f=h.length-1;f>=0;f--){if(!this.ethEngine.engineOn)return;const m=h[f];let v;if(m.height>=this.ethEngine.walletLocalData.lastAddressQueryHeight&&!n.has(m.message)){m.height>this.ethEngine.walletLocalData.lastAddressQueryHeight&&(this.ethEngine.walletLocalData.lastAddressQueryHeight=m.height,this.ethEngine.walletLocalDataDirty=!0);const b=yield this.serialServers(w=>me(this,null,function*(){return yield this.makeFilfoxApi(w).getMessageDetails(m.message)}));v=this.filfoxMessageToEdgeTransaction(e,b)}const g=a===0?1:++s/a;t({tx:v,progress:g}),n.add(m.message)}}})}}var Ae=(d,e,t)=>new Promise((n,r)=>{var a=s=>{try{o(t.next(s))}catch(l){r(l)}},i=s=>{try{o(t.throw(s))}catch(l){r(l)}},o=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,i);o((t=t.apply(d,e)).next())});class Ct extends he{constructor(){super(...arguments),this.fetchBlockheight=null,this.broadcast=null,this.getBaseFeePerGas=null,this.multicastRpc=null,this.fetchNonce=null,this.fetchTokenBalance=null,this.fetchTokenBalances=null,this.fetchTxs=e=>Ae(this,null,function*(){try{return this.currentScan!=null?yield this.currentScan:(this.currentScan=this.checkTransactions(e),yield this.currentScan)}catch(t){throw console.error(t),t}finally{this.currentScan=void 0}})}checkTransactions(e){return Ae(this,null,function*(){const{startBlock:t,currencyCode:n}=e,r=this.ethEngine.walletLocalData.publicKey,a=[];let i;for(;;){const s=yield this.queryTransactions(r,i);if(a.push(...s.items),i=s.next_page_params,s.items.some(l=>l.block<=t)||i==null)break}const o=a.map(s=>this.processScanTransaction(s,n));return{tokenTxs:{[n]:{blockHeight:t,edgeTransactions:o}},server:this.config.servers.join(",")}})}processScanTransaction(e,t){const n=[],r=e.hash;if(r==null)throw new Error("Invalid transaction result format");const a=e.from.hash.toLowerCase()===this.ethEngine.walletLocalData.publicKey.toLowerCase(),i=t!==this.ethEngine.currencyInfo.currencyCode,o=e.gas_price,s=o!=null?(0,c.mul)(o,e.gas_used):"0";let l,u,h;a?i?(l=(0,c.sub)("0",e.value),u="0",h=s):e.from.hash.toLowerCase()===e.to.hash.toLowerCase()?(l=(0,c.sub)("0",s),u=s):(l=(0,c.sub)((0,c.sub)("0",e.value),s),u=s):(l=e.value,u="0",n.push(this.ethEngine.walletLocalData.publicKey));const f={from:[e.from.hash],to:[e.to.hash],gas:e.gas_limit,gasPrice:o!=null?o:"",gasUsed:e.gas_used,isFromMakeSpend:!1};let m=e.block;return m<0&&(m=0),{blockHeight:m,currencyCode:t,date:new Date(e.timestamp).getTime()/1e3,feeRateUsed:o!=null?Ie(o,e.gas_limit,e.gas_used):void 0,isSend:l.startsWith("-"),memos:[],nativeAmount:l,networkFee:u,otherParams:f,ourReceiveAddresses:n,parentNetworkFee:h,signedTx:"",txid:r,walletId:this.ethEngine.walletId}}queryTransactions(e,t){return Ae(this,null,function*(){return yield this.serialServers(n=>Ae(this,null,function*(){const r=`addresses/${e}/transactions`,a=t!=null?new URLSearchParams(t).toString():"",i=`${n}/api/v2/${r}?${a}`,s=yield(yield this.ethEngine.fetchCors(i,{method:"GET",headers:{"content-type":"application/json"}})).text();return St(s)}))})}}const Re=(0,p.su)({hash:p.XC,is_contract:(0,p.Zz)(p.jK),is_verified:(0,p.Zz)(p.jK)}),At=(0,p.su)({timestamp:p.XC,gas_limit:p.XC,block:p.mH,to:Re,from:Re,hash:p.XC,gas_price:p.XC,gas_used:p.XC,value:p.XC}),It=(0,p.su)({block_number:p.mH,fee:p.XC,hash:p.XC,index:p.mH,inserted_at:p.XC,items_count:p.mH,value:p.XC}),St=(0,p.$e)((0,p.su)({items:(0,p._2)(At),next_page_params:(0,p.Zz)(It)}));var $e=k(96519),Ft=k(2593),xt=k(21046),Lt=JSON.parse('[{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"tokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"users","type":"address[]"},{"name":"tokens","type":"address[]"}],"name":"balances","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"}]'),W=(d,e,t)=>new Promise((n,r)=>{var a=s=>{try{o(t.next(s))}catch(l){r(l)}},i=s=>{try{o(t.throw(s))}catch(l){r(l)}},o=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,i);o((t=t.apply(d,e)).next())});class Ot extends he{constructor(e,t){super(e,t),this.fetchTxs=null,this.fetchBlockheight=()=>W(this,null,function*(){const{chainParams:{chainId:n}}=this.ethEngine.networkInfo,{result:r,server:a}=yield this.serialServers(o=>W(this,null,function*(){const s=yield this.fetchPostRPC("eth_blockNumber",[],n,o);if(s.error!=null)throw this.ethEngine.error(`Successful eth_blockNumber response object from ${o} included an error ${JSON.stringify(s.error)}`),new Error("Successful eth_blockNumber response object included an error");return{server:ie()(o).hostname,result:s}}));return{blockHeight:Be(r).result,server:a}}),this.broadcast=n=>W(this,null,function*(){const{chainParams:{chainId:r}}=this.ethEngine.networkInfo;return yield this.parallelServers(a=>W(this,null,function*(){const i="eth_sendRawTransaction",o=[n.signedTx],s=yield this.fetchPostRPC(i,o,r,a),l=ie()(a,{},!0);return{result:this.broadcastResponseHandler(s,l.toString(),n),server:l.hostname}}))}),this.getBaseFeePerGas=this.ethEngine.networkInfo.supportsEIP1559!==!0?null:()=>W(this,null,function*(){const{chainParams:{chainId:n}}=this.ethEngine.networkInfo;return yield this.serialServers(r=>W(this,null,function*(){return yield this.fetchPostRPC("eth_getBlockByNumber",["latest",!1],n,r).then(a=>{if(a.error!=null){const o=`multicast get_baseFeePerGas error response from ${r}: ${JSON.stringify(a.error)}`;throw this.ethEngine.warn(o),new Error(o)}return a.result.baseFeePerGas})}))}),this.multicastRpc=(n,r)=>W(this,null,function*(){const{chainParams:{chainId:a}}=this.ethEngine.networkInfo;return yield this.serialServers(i=>W(this,null,function*(){const o=yield this.fetchPostRPC(n,r,a,i);if(o.error!=null)throw this.ethEngine.error(`Successful ${n} response object from ${i} included an error ${JSON.stringify(o.error)}`),new Error(`Successful ${n} response object included an error`);return{server:ie()(i).hostname,result:o}}))}),this.fetchNonce=()=>W(this,null,function*(){const{chainParams:{chainId:n}}=this.ethEngine.networkInfo,r=this.ethEngine.walletLocalData.publicKey,{result:a,server:i}=yield this.serialServers(s=>W(this,null,function*(){const l=yield this.fetchPostRPC("eth_getTransactionCount",[r,"latest"],n,s);if(l.error!=null)throw this.ethEngine.error(`Successful eth_getTransactionCount_RPC response object from ${s} included an error ${JSON.stringify(l.error)}`),new Error("Successful eth_getTransactionCount_RPC response object included an error");return{server:ie()(s).hostname,result:l}})),o=(0,P.tT)(a);if(/0[xX][0-9a-fA-F]+/.test(o.result))return{newNonce:(0,c.add)("0",o.result),server:i};throw new Error("checkNonceRpc returned invalid JSON")}),this.fetchTokenBalance=n=>W(this,null,function*(){const{chainParams:{chainId:r}}=this.ethEngine.networkInfo;let a,i,o,s;const l=this.ethEngine.walletLocalData.publicKey;try{if(n===this.ethEngine.currencyInfo.currencyCode)i=yield this.serialServers(u=>W(this,null,function*(){const h=yield this.fetchPostRPC("eth_getBalance",[l,"latest"],r,u);if(h.error!=null)throw this.ethEngine.error(`Successful eth_getBalance response object from ${u} included an error ${JSON.stringify(h.error)}`),new Error("Successful eth_getBalance response object included an error");if(!(0,y.vq)(h.result))throw new Error(`eth_getBalance not hex for ${ie()(u).hostname}`);return h.result=(0,y.Z8)(h.result),{server:ie()(u).hostname,result:h}})),o=i.result,s=i.server;else{const u=this.ethEngine.getTokenInfo(n);if(u!=null&&typeof u.contractAddress=="string"){const h={data:`0x70a08231${(0,y.gc)((0,y.KT)(l),32)}`,to:u.contractAddress},f=yield this.ethEngine.ethNetwork.multicastRpc("eth_call",[h,"pending"]),m=f.result.result;if(!m.startsWith("0x"))throw new Error("Invalid return value. Result not hex");f.result.result=(0,y.Z8)(m),o=f.result,s=f.server}}a=(0,P.tT)(o)}catch(u){throw this.ethEngine.error(`checkTokenBalRpc token ${n} response ${String(i!=null?i:"")} `,u),new Error(`checkTokenBalRpc invalid ${n} response ${JSON.stringify(o)}`)}return{tokenBal:{[n]:a.result},server:s}}),this.fetchTokenBalances=this.config.ethBalCheckerContract==null?null:()=>W(this,null,function*(){const{allTokensMap:n,networkInfo:r,walletLocalData:a,currencyInfo:i}=this.ethEngine,{chainParams:o}=r,s={},l=[],u=this.config.ethBalCheckerContract;if(u==null)return s;const h="0x0000000000000000000000000000000000000000",f=[h];for(const v of Object.values(this.ethEngine.allTokensMap)){const g=(0,G.Oj)(v.networkLocation);g!=null&&f.unshift(g.contractAddress)}const m=yield this.serialServers(v=>W(this,null,function*(){const g=new ee.r(v,o.chainId),w=yield new $e.CH(u,Lt,g).balances([a.publicKey],f);if(w.length!==f.length)throw new Error("checkEthBalChecker balances length mismatch");return w})).catch(v=>{throw new Error(`All rpc servers failed eth balance checks: ${String(v)}`)});for(let v=0;v<m.length;v++){const g=f[v].toLowerCase(),b=Ft.O$.from(m[v]);let w;if(g===h){const{currencyCode:E}=i;w=E}else{const E=g.replace("0x","");b.gt(xt._Y)&&l.push(E);const C=n[E];if(C==null){this.logError("checkEthBalChecker",new Error(`checkEthBalChecker missing builtinToken: ${g}`));continue}const{currencyCode:S}=C;w=S}s[w]=b.toString()}return{tokenBal:s,detectedTokenIds:l,server:"ethBalChecker"}}),this.config.servers=this.config.servers.map(n=>{try{return this.addRpcApiKey(n)}catch{}}).filter(n=>n!=null)}addRpcApiKey(e){const n=/{{(.*?)}}/g.exec(e);if(n!=null){const r=n[1],a=(0,P.jq)(r),i=this.ethEngine.initOptions[a];if(typeof i=="string")e=e.replace(n[0],i);else throw i==null?new Error(`Missing ${a} in 'initOptions' for ${this.ethEngine.currencyInfo.pluginId}`):new Error("Incorrect apikey type for RPC")}return e}fetchPostRPC(e,t,n,r){return W(this,null,function*(){const a={id:n,jsonrpc:"2.0",method:e,params:t};r=this.addRpcApiKey(r);const i=yield this.ethEngine.fetchCors(r,{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify(a)}),o=ie()(r,{},!0);return i.ok||this.throwError(i,"fetchPostRPC",o.hostname),yield i.json()})}}var Bt=Object.defineProperty,Nt=Object.defineProperties,Rt=Object.getOwnPropertyDescriptors,De=Object.getOwnPropertySymbols,$t=Object.prototype.hasOwnProperty,Dt=Object.prototype.propertyIsEnumerable,_e=(d,e,t)=>e in d?Bt(d,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):d[e]=t,He=(d,e)=>{for(var t in e||(e={}))$t.call(e,t)&&_e(d,t,e[t]);if(De)for(var t of De(e))Dt.call(e,t)&&_e(d,t,e[t]);return d},_t=(d,e)=>Nt(d,Rt(e)),J=(d,e,t)=>new Promise((n,r)=>{var a=s=>{try{o(t.next(s))}catch(l){r(l)}},i=s=>{try{o(t.throw(s))}catch(l){r(l)}},o=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,i);o((t=t.apply(d,e)).next())});const Ht=2e4,Gt=2e4,Ge=2e4,Mt=2e4,Kt=4*2,jt=2*60,Ie=(d,e,t,n)=>{let r={};return r=_t(He(He({gasPrice:(0,c.div)((0,c.add)(d,"0",10),Y.toString(),Y.toString().length-1,10)},t!==void 0?{gasUsed:t}:{}),n!==void 0?{minerTip:(0,c.div)((0,c.add)(n,"0",10),Y.toString(),Y.toString().length-1,10)}:{}),{gasLimit:e}),r};class Ut{constructor(e){this.multicastRpc=(t,n)=>J(this,null,function*(){const r=this.qualifyNetworkAdapters("multicastRpc").map(i=>()=>J(this,null,function*(){return yield i.multicastRpc(t,n)}));return yield(0,y.QJ)(r)}),this.getBaseFeePerGas=()=>J(this,null,function*(){const t=this.qualifyNetworkAdapters("getBaseFeePerGas").map(n=>()=>J(this,null,function*(){return yield n.getBaseFeePerGas()}));return yield(0,y.QJ)(t)}),this.processEthereumNetworkUpdate=(t,n,r)=>{var a,i,o,s,l;if(n!=null){if(n.blockHeight!=null){this.ethEngine.log(`${this.ethEngine.currencyInfo.currencyCode} processEthereumNetworkUpdate blockHeight ${(a=n.server)!=null?a:"no server"} won`);const u=n.blockHeight;this.ethEngine.log(`Got block height ${u}`),typeof u=="number"&&this.ethEngine.walletLocalData.blockHeight!==u&&(this.ethNeeds.blockHeightLastChecked=t,this.ethEngine.checkDroppedTransactionsThrottled(),this.ethEngine.walletLocalData.blockHeight=u,this.ethEngine.walletLocalDataDirty=!0,this.ethEngine.currencyEngineCallbacks.onBlockHeightChanged(this.ethEngine.walletLocalData.blockHeight))}if(n.newNonce!=null&&(this.ethEngine.log(`${this.ethEngine.currencyInfo.currencyCode} processEthereumNetworkUpdate nonce ${(i=n.server)!=null?i:"no server"} won`),this.ethNeeds.nonceLastChecked=t,this.ethEngine.otherData.nextNonce=n.newNonce,this.ethEngine.walletLocalDataDirty=!0),n.tokenBal!=null){const u=n.tokenBal;this.ethEngine.log(`${this.ethEngine.currencyInfo.currencyCode} processEthereumNetworkUpdate tokenBal ${(o=n.server)!=null?o:"no server"} won`);for(const h of Object.keys(u))this.ethNeeds.tokenBalLastChecked[h]=t,this.ethEngine.updateBalance(h,u[h]);this.ethEngine.currencyEngineCallbacks.onNewTokens((s=n.detectedTokenIds)!=null?s:[]),this.ethNeeds.tokenBalsLastChecked=t}if(n.tokenTxs!=null){const u=n.tokenTxs;this.ethEngine.log(`${this.ethEngine.currencyInfo.currencyCode} processEthereumNetworkUpdate tokenTxs ${(l=n.server)!=null?l:"no server"} won`);for(const h of Object.keys(u)){this.ethNeeds.tokenTxsLastChecked[h]=t,this.ethEngine.tokenCheckTransactionsStatus[h]=1;const f=u[h];for(const m of f.edgeTransactions)this.ethEngine.addTransaction(h,m);this.ethEngine.walletLocalData.lastTransactionQueryHeight[h]=r,this.ethEngine.walletLocalData.lastTransactionDate[h]=t}this.ethEngine.updateOnAddressesChecked()}this.ethEngine.transactionsChangedArray.length>0&&(this.ethEngine.currencyEngineCallbacks.onTransactionsChanged(this.ethEngine.transactionsChangedArray),this.ethEngine.transactionsChangedArray=[])}},this.ethEngine=e,this.ethNeeds={blockHeightLastChecked:0,nonceLastChecked:0,tokenBalsLastChecked:0,tokenBalLastChecked:{},tokenTxsLastChecked:{}},this.networkAdapters=this.buildNetworkAdapters(this.ethEngine.networkInfo),this.walletId=e.walletInfo.id}processAlethioTransaction(e,t){let n;const r=[];let a;const i=t!==this.ethEngine.currencyInfo.currencyCode,o=e.attributes.value,s=e.attributes.fee!=null&&e.attributes.fee!==""?e.attributes.fee:"0",l=e.relationships.from.data.id,u=e.relationships.to.data.id;t===this.ethEngine.currencyInfo.currencyCode?a=s:a="0";const h=l.toLowerCase()===this.ethEngine.walletLocalData.publicKey.toLowerCase();if(h)l.toLowerCase()===u.toLowerCase()?n=(0,c.mul)(a,"-1"):(n=(0,c.sub)("0",o),i||(n=(0,c.sub)(n,a)));else if(u.toLowerCase()===this.ethEngine.walletLocalData.publicKey.toLowerCase())n=o,r.push(this.ethEngine.walletLocalData.publicKey.toLowerCase());else return null;const f={from:[l],to:[u],gas:"0",gasPrice:"0",gasUsed:"0",isFromMakeSpend:!1};let m=e.attributes.globalRank[0];m<0&&(m=0);let v,g="0";return i&&h?v=a:g=a,{blockHeight:m,currencyCode:t,date:e.attributes.blockCreationTime,isSend:n.startsWith("-"),memos:[],nativeAmount:n,networkFee:g,otherParams:f,ourReceiveAddresses:r,parentNetworkFee:v,signedTx:"",txid:e.relationships.transaction.data.id,walletId:this.walletId}}broadcastTx(e){return J(this,null,function*(){const t=this.qualifyNetworkAdapters("broadcast").map(r=>J(this,null,function*(){return yield r.broadcast(e)})),n=yield(0,y.Wp)(t);return this.ethEngine.log(`${this.ethEngine.currencyInfo.currencyCode} broadcastTx ${n.server} won`),n})}check(e,...t){return J(this,null,function*(){return yield(0,y.QJ)(this.qualifyNetworkAdapters(e).map(n=>()=>J(this,null,function*(){return yield n[e](...t)}))).catch(n=>({}))})}getTokenCurrencyCode(e){const t=this.ethEngine.walletLocalData.publicKey;if(e.toLowerCase()===t.toLowerCase())return this.ethEngine.currencyInfo.currencyCode;for(const n of this.ethEngine.enabledTokens){const r=this.ethEngine.getTokenInfo(n);if(r!=null){const a=r.contractAddress;if(e!=null&&typeof a=="string"&&a.toLowerCase()===e.toLowerCase())return n}}}checkAndUpdate(e,t,n,r){return J(this,null,function*(){const a=Date.now();if(a-e>t)try{const i=yield r();this.processEthereumNetworkUpdate(a,i,n)}catch(i){this.ethEngine.error("checkAndUpdate ",i)}})}needsLoop(){return J(this,null,function*(){for(var e,t;this.ethEngine.engineOn;){const n=this.ethEngine.walletLocalData.blockHeight;yield this.checkAndUpdate(this.ethNeeds.blockHeightLastChecked,Ht,n,()=>J(this,null,function*(){return yield this.check("fetchBlockheight")})),yield this.checkAndUpdate(this.ethNeeds.nonceLastChecked,Gt,n,()=>J(this,null,function*(){return yield this.check("fetchNonce")}));const{currencyCode:r}=this.ethEngine.currencyInfo,a=this.ethEngine.enabledTokens;a.includes(r)||a.push(r);const i=this.networkAdapters.find(o=>o.fetchTokenBalances!=null)!=null;i&&(yield this.checkAndUpdate(this.ethNeeds.tokenBalsLastChecked,Ge,n,()=>J(this,null,function*(){return yield this.check("fetchTokenBalances")})));for(const o of a)i||(yield this.checkAndUpdate((e=this.ethNeeds.tokenBalLastChecked[o])!=null?e:0,Ge,n,()=>J(this,null,function*(){return yield this.check("fetchTokenBalance",o)}))),yield this.checkAndUpdate((t=this.ethNeeds.tokenTxsLastChecked[o])!=null?t:0,Mt,n,()=>J(this,null,function*(){var s,l;const u=(s=this.ethEngine.walletLocalData.lastTransactionQueryHeight[o])!=null?s:0,h=(l=this.ethEngine.walletLocalData.lastTransactionDate[o])!=null?l:0,f={startBlock:Math.max(u-Kt,0),startDate:Math.max(h-jt,0),currencyCode:o};return this.qualifyNetworkAdapters("fetchTxs").length===0?{tokenTxs:{[this.ethEngine.currencyInfo.currencyCode]:{blockHeight:f.startBlock,edgeTransactions:[]}},server:"none"}:yield this.check("fetchTxs",f)}));yield(0,y.HB)(1e3)}})}buildNetworkAdapters(e){const{networkAdapterConfigs:t}=e;return t.map(r=>Xt(r,this.ethEngine))}qualifyNetworkAdapters(...e){return this.networkAdapters.filter(t=>e.every(n=>t[n]!=null))}}const Xt=(d,e)=>{switch(d.type){case"amberdata-rpc":return new rt(e,d);case"blockbook":return new ot(e,d);case"blockchair":return new it(e,d);case"blockcypher":return new at(e,d);case"evmscan":return new Pt(e,d);case"filfox":return new Tt(e,d);case"pulsechain-scan":return new Ct(e,d);case"rpc":return new Ot(e,d)}};var Wt=k(93901),Jt=k(79325),Vt=JSON.parse('[{"inputs":[{"internalType":"uint64","name":"size","type":"uint64"},{"internalType":"uint64","name":"leaf","type":"uint64"}],"name":"constructOutboxProof","outputs":[{"internalType":"bytes32","name":"send","type":"bytes32"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"l2CallValue","type":"uint256"},{"internalType":"address","name":"excessFeeRefundAddress","type":"address"},{"internalType":"address","name":"callValueRefundAddress","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"estimateRetryableTicket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"blockNum","type":"uint64"}],"name":"findBatchContainingBlock","outputs":[{"internalType":"uint64","name":"batch","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"contractCreation","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"gasEstimateComponents","outputs":[{"internalType":"uint64","name":"gasEstimate","type":"uint64"},{"internalType":"uint64","name":"gasEstimateForL1","type":"uint64"},{"internalType":"uint256","name":"baseFee","type":"uint256"},{"internalType":"uint256","name":"l1BaseFeeEstimate","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"contractCreation","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"gasEstimateL1Component","outputs":[{"internalType":"uint64","name":"gasEstimateForL1","type":"uint64"},{"internalType":"uint256","name":"baseFee","type":"uint256"},{"internalType":"uint256","name":"l1BaseFeeEstimate","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"name":"getL1Confirmations","outputs":[{"internalType":"uint64","name":"confirmations","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batchNum","type":"uint256"},{"internalType":"uint64","name":"index","type":"uint64"}],"name":"legacyLookupMessageBatchProof","outputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"path","type":"uint256"},{"internalType":"address","name":"l2Sender","type":"address"},{"internalType":"address","name":"l1Dest","type":"address"},{"internalType":"uint256","name":"l2Block","type":"uint256"},{"internalType":"uint256","name":"l1Block","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"calldataForL1","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nitroGenesisBlock","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"pure","type":"function"}]'),Se=(d,e,t)=>new Promise((n,r)=>{var a=s=>{try{o(t.next(s))}catch(l){r(l)}},i=s=>{try{o(t.throw(s))}catch(l){r(l)}},o=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,i);o((t=t.apply(d,e)).next())});const Qt="low",Zt="standard",zt="high",Me="custom",Ke="1000000000";function je(d,e,t,n){var r,a,i,o,s,l,u,h,f;let m=!0,v,g;const{customNetworkFee:b}=d!=null?d:{};if(d.networkFeeOption===Me&&b!=null){const{gasLimit:N,gasPrice:O}=b;if((isNaN(N)||N==="")&&(isNaN(O)||O==="")){const R=new Error("Custom Fee must have at least gasLimit or gasPrice specified");throw R.name="ErrorBelowMinimumFee",R}if(O!=null&&O!==""){const R=(o=(a=(r=e.default)==null?void 0:r.gasPrice)==null?void 0:a.minGasPrice)!=null?o:(i=n.defaultNetworkFees.default.gasPrice)==null?void 0:i.minGasPrice;if(R!=null){const j=(0,c.mul)(O,Ke);if((0,c.lt)(j,R)||/^\s*$/.test(O)){const fe=new Error(`Gas price ${j} wei below minimum ${R} wei`);throw fe.name="ErrorBelowMinimumFee",fe}}g=(0,c.mul)(O,Ke)}if(N!=null&&N!==""){const R=(h=(l=(s=e.default)==null?void 0:s.gasLimit)==null?void 0:l.minGasLimit)!=null?h:(u=n.defaultNetworkFees.default.gasLimit)==null?void 0:u.minGasLimit;if(R!=null&&(0,c.lt)(N,R)||/^\s*$/.test(N)){const j=new Error(`Gas limit ${N} below minimum ${R}`);throw j.name="ErrorBelowMinimumFee",j}v=N,m=!1}}if(v!=null&&g!=null)return{gasLimit:v,gasPrice:g,useEstimatedGasLimit:!1};let w=e.default,E=e.default;if(typeof((f=d.spendTargets[0])==null?void 0:f.publicAddress)=="string"){const N=(0,y.f0)(d.spendTargets[0].publicAddress);typeof e[N]<"u"&&(E=e[N],m=!1,typeof E.gasPrice<"u"&&(w=E))}let C="regularTransaction";d.currencyCode!=null&&d.currencyCode!==t.currencyCode&&(C="tokenTransaction");let S="standard";typeof d.networkFeeOption=="string"&&d.networkFeeOption!==Me&&(S=d.networkFeeOption);const H=E.gasLimit!=null?E.gasLimit[C]:"21000";let B="";if(d.spendTargets[0].nativeAmount==null)throw new Error("ErrorInvalidNativeAmount");let Q=d.spendTargets[0].nativeAmount;if(C==="tokenTransaction"&&(Q=(0,c.div)(Q,"10")),w.gasPrice==null)throw new Error("ErrorInvalidGasPrice");const L=w.gasPrice;switch(S){case Qt:B=L.lowFee;break;case Zt:{if((0,c.gte)(Q,w.gasPrice.standardFeeHighAmount)){B=L.standardFeeHigh;break}if((0,c.lte)(Q,L.standardFeeLowAmount)){if(w.gasPrice==null)throw new Error("ErrorInvalidGasPrice");B=w.gasPrice.standardFeeLow;break}const N=(0,c.sub)(L.standardFeeHighAmount,L.standardFeeLowAmount),O=(0,c.sub)(L.standardFeeHigh,L.standardFeeLow),R=(0,c.sub)(Q,L.standardFeeLowAmount),j=(0,c.mul)(R,O),fe=(0,c.div)(j,N);B=(0,c.add)(L.standardFeeLow,fe);break}case zt:B=w.gasPrice.highFee;break;default:throw new Error("Invalid networkFeeOption")}return{gasLimit:v!=null?v:H,gasPrice:g!=null?g:B,useEstimatedGasLimit:m}}const Yt="1040",Ue=d=>{const{chainParams:e,data:t,dynamicOverhead:n,fixedOverhead:r,gasPriceL1Wei:a,gasLimit:i,nonce:o,to:s,value:l="0x0"}=d,u=D.Gn.custom(e),f=T.nL.fromTxData({nonce:o!=null?(0,y.X0)(o):void 0,gasPrice:(0,y.X0)(a),gasLimit:(0,y.X0)(i),to:s,value:l,data:t===null?void 0:t},{common:u}).raw(),g=Xe(f).map(S=>S==null?"":Jt.YU.stringify(S).toLowerCase()).join().match(/(.{1,2})/g);if(g==null)throw new Error("Invalid rawTx string");let b=0;for(let S=0;S<g.length;S++)g[S]==="00"?b+=4:b+=16;const w=(0,c.add)((0,c.add)(b.toString(),r),Yt),E=(0,c.div)(n,"1000000",18);return(0,c.ceil)((0,c.mul)((0,c.mul)(a,w),E),0)};function Xe(d,e=[]){return d.forEach(t=>{if(t!=null){if(Array.isArray(t))return Xe(t,e);e.push(t)}}),e}function We(d,e,t){return Se(this,null,function*(){if(d<2)return{gasPrice:(0,c.mul)("1",e,16)};{const n=e;let r=(0,c.sub)(n,t);return(0,c.lte)(r,"0")&&(r=(0,c.div)(n,"10",0)),{gasPrice:(0,c.mul)("1",n,16),minerTip:(0,c.mul)("1",r,16)}}})}let Fe={destinationAddress:"",l1Gas:"0",l1GasPrice:"10000000000"};const Je=d=>Se(void 0,null,function*(){const{rpcServers:e,nodeInterfaceAddress:t,destinationAddress:n,txData:r}=d;if(n===Fe.destinationAddress)return{l1Gas:Fe.l1Gas,l1GasPrice:Fe.l1GasPrice};const a=o=>Se(void 0,null,function*(){const s=new Wt.c(o),u=yield new $e.CH(t,Vt,s).callStatic.gasEstimateL1Component(n,!1,r,{blockTag:"latest"});return{l1Gas:u.gasEstimateForL1.toString(),l1GasPrice:u.baseFee.toString()}}),i=yield(0,y.QJ)(e.map(o=>()=>Se(void 0,null,function*(){return yield a(o)})));return Fe={destinationAddress:n,l1Gas:i.l1Gas,l1GasPrice:i.l1GasPrice},i});var le=k(48764).Buffer,qt=Object.defineProperty,en=Object.defineProperties,tn=Object.getOwnPropertyDescriptors,Ve=Object.getOwnPropertySymbols,nn=Object.getPrototypeOf,sn=Object.prototype.hasOwnProperty,rn=Object.prototype.propertyIsEnumerable,on=Reflect.get,Qe=(d,e,t)=>e in d?qt(d,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):d[e]=t,te=(d,e)=>{for(var t in e||(e={}))sn.call(e,t)&&Qe(d,t,e[t]);if(Ve)for(var t of Ve(e))rn.call(e,t)&&Qe(d,t,e[t]);return d},de=(d,e)=>en(d,tn(e)),Le=(d,e,t)=>on(nn(d),t,e),K=(d,e,t)=>new Promise((n,r)=>{var a=s=>{try{o(t.next(s))}catch(l){r(l)}},i=s=>{try{o(t.throw(s))}catch(l){r(l)}},o=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,i);o((t=t.apply(d,e)).next())});class ke extends re.P{constructor(e,t,n,r,a,i){super(e,t,n,a),this.updateNetworkFeesFromBaseFeePerGas=()=>K(this,null,function*(){var l;const{supportsEIP1559:u=!1}=this.networkInfo;if(!u)return;const h=yield this.ethNetwork.getBaseFeePerGas();if(h==null)return;const f=(0,y.Z8)(h),m=this.networkFees;if(m.default==null||m.default.gasPrice==null)return;const v=this.networkInfo.defaultNetworkFees.default,g=m.default.minPriorityFee||v.minPriorityFee,b=(l=m.default.baseFeeMultiplier)!=null?l:v.baseFeeMultiplier;if(g==null||b==null)return;const w={lowFee:"",standardFeeLow:"",standardFeeHigh:"",highFee:""};for(const E of Object.keys(b)){const C=(0,c.mul)(b[E],f),S=(0,c.add)(C,g);w[E]=(0,c.div)(S,"1")}return this.log(`updateNetworkFeesFromBaseFeePerGas ${this.currencyInfo.currencyCode}`),Ce(this.log,w),w}),this.initOptions=r,this.networkInfo=e.networkInfo,this.ethNetwork=new Ut(this),this.networkInfo.optimismRollupParams!=null&&(this.optimismRollupParams=this.networkInfo.optimismRollupParams),this.networkFees=this.networkInfo.defaultNetworkFees,this.fetchCors=(0,y.zR)(e.io);const{infoFeeProvider:o,externalFeeProviders:s}=mt(this.fetchCors,this.currencyInfo,this.initOptions,this.log,this.networkInfo);this.infoFeeProvider=o,this.externalFeeProviders=[...s,this.updateNetworkFeesFromBaseFeePerGas],this.utils={signMessage:(l,u)=>{if(!(0,y.vq)(l))throw new Error("ErrorInvalidMessage");const h=le.from(u.privateKey,"hex"),f=(0,y.ah)(l),m=F().hashPersonalMessage(f),{v,r:g,s:b}=F().ecsign(m,h);return F().toRpcSig(v,g,b)},signTypedData:(l,u)=>{const h=ft(l),f=le.from(u.privateKey,"hex"),{types:m}=h;function v(L,$=[]){if($.includes(L)||m[L]===void 0)return $;$.push(L);for(const N of m[L])for(const O of v(N.type,$))$.includes(O)||$.push(O);return $}function g(L){let $=v(L);$=$.filter(O=>O!==L),$=[L].concat($.sort());let N="";for(const O of $)N+=`${O}(${m[O].map(({name:R,type:j})=>`${j} ${R}`).join(",")})`;return N}function b(L){return F().keccak256(g(L))}function w(L,$){const N=[],O=[];N.push("bytes32"),O.push(b(L));for(const R of m[L]){let j=$[R.name];if(R.type==="string"||R.type==="bytes")N.push("bytes32"),j=F().keccak256(j),O.push(j);else if(m[R.type]!==void 0)N.push("bytes32"),j=F().keccak256(w(R.type,j)),O.push(j);else{if(R.type.lastIndexOf("]")===R.type.length-1)throw new Error("Arrays currently unimplemented in encodeData");N.push(R.type),O.push(j)}}return I().rawEncode(N,O)}function E(L,$){return F().keccak256(w(L,$))}function C(){return F().keccak256(le.concat([le.from("1901","hex"),E("EIP712Domain",h.domain),E(h.primaryType,h.message)]))}const S=F().ecsign(C(),f),{v:H,r:B,s:Q}=S;return F().bufferToHex(le.concat([F().setLengthLeft(B,32),F().setLengthLeft(Q,32),F().toBuffer(H)]))},txRpcParamsToSpendInfo:l=>{const u={otherParams:l};l.to!=null&&(u.publicAddress=l.to),l.value!=null?u.nativeAmount=(0,y.Z8)(l.value):u.nativeAmount="0";let h,f,m;return l.gas!=null&&(f=(0,y.Z8)(l.gas),h="custom"),l.gasPrice!=null&&(m=(0,c.div)((0,y.Z8)(l.gasPrice),Y.toString(),18),h="custom"),{currencyCode:this.currencyInfo.currencyCode,spendTargets:[u],memos:[{type:"hex",value:(0,y.KT)(l.data),hidden:!0,memoName:"data"}],networkFeeOption:h,customNetworkFee:{gasLimit:f,gasPrice:m},otherParams:l}}},this.otherMethods={parseWalletConnectV2Payload:l=>K(this,null,function*(){var u,h;try{let f="0",m="0";switch(l.method){case"eth_sendTransaction":case"eth_signTransaction":{const v=(0,p.su)({from:p.XC,to:(0,p.Zz)(p.XC),data:p.XC,gas:(0,p.Zz)(p.XC),gasPrice:(0,p.Zz)(p.XC),value:(0,p.Zz)(p.XC)})(l.params[0]),{gas:g,gasPrice:b,value:w}=v,E=C=>{var S,H;g==null?v.gas=(0,y.X0)(C):C=(0,y.Z8)(g);let B=(H=(S=this.networkFees.default.gasPrice)==null?void 0:S.standardFeeHigh)!=null?H:"0";b==null?v.gasPrice=(0,y.X0)(B):B=(0,y.Z8)(b),m=(0,c.mul)(C,B)};w!=null&&(f=(0,y.Z8)(w)),((u=this.networkFees.default.gasLimit)==null?void 0:u.tokenTransaction)==null?this.ethNetwork.multicastRpc("eth_estimateGas",[v]).then(C=>{const S=(0,c.add)(parseInt(C.result.result,16).toString(),"0");E(S)}).catch(C=>{this.warn("Wallet connect call_request failed to get gas limit",C)}):E((h=this.networkFees.default.gasLimit)==null?void 0:h.tokenTransaction);break}}return{nativeAmount:f,networkFee:m,tokenId:null}}catch(f){throw this.warn("Wallet connect call_request ",f),f}}),txRpcParamsToSpendInfo:l=>K(this,null,function*(){return this.utils.txRpcParamsToSpendInfo(l)})}}estimateGasLimit(e){return K(this,null,function*(){var t,n;const{estimateGasParams:r,miningFees:a}=e,i=r[0].data!=null;let o=a.gasLimit;try{const l=(yield this.ethNetwork.multicastRpc("eth_getCode",[r[0].to,"latest"])).result.result!=="0x",u=(h=0)=>K(this,null,function*(){const f=this.networkInfo.defaultNetworkFees.default.gasLimit;try{if(f!=null&&!l&&!i)o=f.regularTransaction;else{const m=yield this.ethNetwork.multicastRpc("eth_estimateGas",r);o=(0,c.add)(parseInt(m.result.result,16).toString(),"0"),l&&(o=(0,c.mul)(o,"2"))}}catch{if(f==null){if(h>5)throw new Error("Unable to estimate gas limit after 5 tries. Please try again later");return yield u(h+1)}if(i)throw new Error("Unable to estimate gas limit. Please try again later");f.tokenTransaction!=null&&(o=f.tokenTransaction)}});if(yield u(),(0,c.lt)(o,(n=(t=this.networkFees.default.gasLimit)==null?void 0:t.minGasLimit)!=null?n:"21000"))throw o=a.gasLimit,new Error("Calculated gasLimit less than minimum")}catch(s){this.error("makeSpend Error determining gas limit ",s)}return o})}setOtherData(e){this.otherData=(0,P.gF)(e)}updateNetworkFees(){return K(this,null,function*(){for(const e of this.externalFeeProviders)try{const t=yield e();if(t==null)continue;const n={};Object.keys(t).forEach(r=>{const a=r;n[a]=(0,y.Y7)(t[a])}),this.networkFees.default.gasPrice!=null&&(this.networkFees.default.gasPrice=te(te({},this.networkFees.default.gasPrice),n));break}catch(t){this.error(`Error fetching fees from ${e.name}. ${JSON.stringify(t)}`)}if(this.networkInfo.supportsEIP1559===!0)try{const e=yield this.ethNetwork.getBaseFeePerGas();if(e==null)return;this.networkFees.default.baseFee=e}catch(e){this.error(`Error fetching base fee: ${JSON.stringify(e)}`)}})}updateOptimismRollupParams(){return K(this,null,function*(){if(this.optimismRollupParams!=null){try{const e={to:this.optimismRollupParams.oracleContractAddress,data:this.optimismRollupParams.gasPricel1BaseFeeMethod},t=yield this.ethNetwork.multicastRpc("eth_call",[e,"latest"]),n=(0,P.tT)(t.result);this.optimismRollupParams=de(te({},this.optimismRollupParams),{gasPriceL1Wei:(0,c.ceil)((0,c.mul)((0,y.Z8)(n.result),this.optimismRollupParams.maxGasPriceL1Multiplier),0)})}catch(e){this.log.warn("Failed to update l1GasPrice",e)}try{const e={to:this.optimismRollupParams.oracleContractAddress,data:this.optimismRollupParams.dynamicOverheadMethod},t=yield this.ethNetwork.multicastRpc("eth_call",[e,"latest"]),n=(0,P.tT)(t.result);this.optimismRollupParams=de(te({},this.optimismRollupParams),{dynamicOverhead:(0,y.Z8)(n.result)})}catch(e){this.log.warn("Failed to update dynamicOverhead",e)}}})}clearBlockchainCache(){return K(this,null,function*(){yield Le(ke.prototype,this,"clearBlockchainCache").call(this),this.otherData.nextNonce="0",this.otherData.unconfirmedNextNonce="0"})}startEngine(){return K(this,null,function*(){var e;this.engineOn=!0;const t=(e=this.networkInfo.feeUpdateFrequencyMs)!=null?e:we;this.infoFeeProvider().then(n=>K(this,null,function*(){if(this.log.warn("infoFeeProvider:",JSON.stringify(n,null,2)),this.networkFees=(0,y.nu)(this.networkFees,n),this.networkInfo.supportsEIP1559===!0)try{const r=yield this.ethNetwork.getBaseFeePerGas();if(r==null)return;this.networkFees.default.baseFee=r}catch(r){this.error(`Error fetching base fee: ${JSON.stringify(r)}`)}})).catch(()=>this.warn("Error fetching fees from Info Server")).finally(()=>{this.addToLoop("updateNetworkFees",t).catch(n=>this.warn(`Error setting up updateNetworkFees addToLoop: ${String(n)}`))}),this.addToLoop("updateOptimismRollupParams",tt).catch(()=>{}),this.ethNetwork.needsLoop(),Le(ke.prototype,this,"startEngine").call(this)})}resyncBlockchain(){return K(this,null,function*(){yield this.killEngine(),yield this.clearBlockchainCache(),yield this.startEngine()})}getFreshAddress(){return K(this,null,function*(){const{publicKey:e}=this.walletLocalData;return{publicAddress:/[A-F]/.test(e)?e:F().toChecksumAddress(e.replace("0x",""))}})}getMaxSpendable(e){return K(this,null,function*(){e=(0,ve.s)(e,this.currencyInfo);const{edgeSpendInfo:t,currencyCode:n}=this.makeSpendCheck(e),r=this.getBalance({currencyCode:e.currencyCode}),i=e.spendTargets[0].publicAddress;if(i==null)throw new Error("makeSpend Missing publicAddress");const{contractAddress:o,data:s,value:l}=this.getTxParameterInformation(t,n,this.currencyInfo);if(e.currencyCode===this.currencyInfo.currencyCode){const u=(h,f)=>K(this,null,function*(){const m=(0,c.sub)(f,h);if((0,c.lte)(m,"1"))return h;const v=(0,c.add)(h,(0,c.div)(m,"2"));e.spendTargets[0].nativeAmount=v;const g=je(e,this.networkFees,this.currencyInfo,this.networkInfo);g.useEstimatedGasLimit&&(g.gasLimit=yield this.estimateGasLimit({contractAddress:o,estimateGasParams:[{to:o!=null?o:i,from:this.walletLocalData.publicKey,gas:"0xffffff",value:l,data:s},"latest"],miningFees:g,publicAddress:i}));const b=(0,c.mul)(g.gasPrice,g.gasLimit);let w="0";if(this.optimismRollupParams!=null){const C={nonce:this.otherData.unconfirmedNextNonce,gasPriceL1Wei:this.optimismRollupParams.gasPriceL1Wei,gasLimit:g.gasLimit,to:i,value:(0,y.X0)(v),chainParams:this.networkInfo.chainParams,dynamicOverhead:this.optimismRollupParams.dynamicOverhead,fixedOverhead:this.optimismRollupParams.fixedOverhead};w=Ue(C)}else if(this.networkInfo.arbitrumRollupParams!=null){const C=this.ethNetwork.networkAdapters.filter(B=>B.config.type==="rpc").map(B=>B.config.servers).flat(),{l1Gas:S,l1GasPrice:H}=yield Je({destinationAddress:i,nodeInterfaceAddress:this.networkInfo.arbitrumRollupParams.nodeInterfaceAddress,rpcServers:C,txData:s!=null?s:"0x"});w=(0,c.mul)((0,c.mul)(S,H),"1.1")}const E=(0,c.add)((0,c.add)(v,b),w);return(0,c.gt)(E,r)?yield u(h,v):yield u(v,f)});return yield u("0",(0,c.add)(r,"1"))}else return e.spendTargets[0].nativeAmount=r,yield this.makeSpend(e),this.getBalance({currencyCode:e.currencyCode})})}getTxParameterInformation(e,t,n){var r;const{memos:a=[]}=e,{spendTargets:i}=e,o=i[0],{publicAddress:s,nativeAmount:l}=o;let u=((r=a[0])==null?void 0:r.type)==="hex"?a[0].value:void 0;u!=null&&!u.startsWith("0x")&&(u=`0x${u}`);let h;if(t===n.currencyCode)return h=l==null?void 0:(0,y.X0)(l),{data:u,value:h};{let f;if(u!=null)f=s;else{const m=this.getTokenInfo(t);if(m==null||typeof m.contractAddress!="string")throw new Error("Error: Token not supported or invalid contract address");f=m.contractAddress;const v=I().simpleEncode("transfer(address,uint256):(uint256)",s,(0,y.X0)(l!=null?l:"0"));h="0x0",u="0x"+le.from(v).toString("hex")}return{contractAddress:f,data:u,value:h}}}makeSpend(e){return K(this,null,function*(){var t,n,r;e=(0,ve.s)(e,this.currencyInfo);const{edgeSpendInfo:a,currencyCode:i,skipChecks:o}=this.makeSpendCheck(e),{memos:s=[]}=a,{pendingTxs:l=[]}=a;if(a.spendTargets.length!==1)throw new Error("Error: only one output allowed");const u=a.spendTargets[0],{publicAddress:h}=u;let{nativeAmount:f}=u;if(h==null)throw new Error("makeSpend Missing publicAddress");if(f==null)throw new A.$D;if(!F().isValidAddress(h))throw new TypeError(`Invalid ${this.currencyInfo.pluginId} address`);let m;const v=je(a,this.networkFees,this.currencyInfo,this.networkInfo),g=this.networkInfo.supportsEIP1559===!0?2:0,b=yield We(g,v.gasPrice,(t=this.networkFees.default.baseFee)!=null?t:yield this.ethNetwork.getBaseFeePerGas());let w;if(l.length>0){const O=this.walletLocalData.otherData,R=this.walletLocalData.numUnconfirmedSpendTxs>0?O.unconfirmedNextNonce:O.nextNonce;w=(0,c.add)(R,l.length.toString())}const{contractAddress:E,data:C,value:S}=this.getTxParameterInformation(a,i,this.currencyInfo);E==null?m=de(te({from:[this.walletLocalData.publicKey],to:[h]},b),{gas:v.gasLimit,gasUsed:"0",nonceUsed:w,data:C,isFromMakeSpend:!0}):m=de(te({from:[this.walletLocalData.publicKey],to:[E]},b),{gas:v.gasLimit,gasUsed:"0",tokenRecipientAddress:h,nonceUsed:w,data:C,isFromMakeSpend:!0}),v.useEstimatedGasLimit&&(m.gas=yield this.estimateGasLimit({contractAddress:E,estimateGasParams:[{to:E!=null?E:h,from:this.walletLocalData.publicKey,gas:"0xffffff",value:S,data:C},"latest"],miningFees:v,publicAddress:h}));const H=(n=this.walletLocalData.totalBalances[this.currencyInfo.currencyCode])!=null?n:"0";let B=(0,c.mul)(v.gasPrice,m.gas),Q="0",L=null,$="0";if(this.optimismRollupParams!=null){const O={nonce:m.nonceUsed,gasPriceL1Wei:this.optimismRollupParams.gasPriceL1Wei,gasLimit:m.gas,to:m.to[0],value:S,data:m.data,chainParams:this.networkInfo.chainParams,dynamicOverhead:this.optimismRollupParams.dynamicOverhead,fixedOverhead:this.optimismRollupParams.fixedOverhead};$=Ue(O)}else if(this.networkInfo.arbitrumRollupParams!=null){const O=this.ethNetwork.networkAdapters.filter(fe=>fe.config.type==="rpc").map(fe=>fe.config.servers).flat(),{l1Gas:R,l1GasPrice:j}=yield Je({destinationAddress:h,nodeInterfaceAddress:this.networkInfo.arbitrumRollupParams.nodeInterfaceAddress,rpcServers:O,txData:C!=null?C:"0x"});$=(0,c.mul)((0,c.mul)(R,j),"1.1"),m.gas=(0,c.add)(m.gas,R)}if(i===this.currencyInfo.currencyCode){if(B=(0,c.add)(B,$),Q=(0,c.add)(B,f),!o&&(0,c.gt)(Q,H))throw new A.C_;f=(0,c.mul)(Q,"-1")}else{if(L=(0,c.add)(B,$),!o&&(0,c.gt)(L,H))throw new A.C_({currencyCode:this.currencyInfo.currencyCode,networkFee:L});const O=(r=this.walletLocalData.totalBalances[i])!=null?r:"0";if(!o&&(0,c.gt)(f,O))throw new A.C_;B="0",f=(0,c.mul)(f,"-1")}const N={blockHeight:0,currencyCode:i,date:0,feeRateUsed:Ie(v.gasPrice,m.gas,void 0,b.minerTip),isSend:f.startsWith("-"),memos:s,nativeAmount:f,networkFee:B,otherParams:m,ourReceiveAddresses:[],signedTx:"",txid:"",walletId:this.walletId};return L&&(N.parentNetworkFee=L),N})}signMessage(e,t,n){return K(this,null,function*(){const r=(0,P.sh)(this.currencyInfo.pluginId)(t);if((0,P.TP)(n.otherParams).typedData){const i=JSON.parse(e);try{return this.utils.signTypedData(i,r)}catch{return(0,x.signTypedData_v4)(le.from(r.privateKey,"hex"),{data:i})}}return this.utils.signMessage(e,r)})}signTx(e,t){return K(this,null,function*(){const n=(0,P.sh)(this.currencyInfo.pluginId)(t),r=(0,y.Xp)(e),a=(0,y.NC)(r.gas);let i;if(e.currencyCode===this.currencyInfo.currencyCode){const C=(0,c.add)(e.nativeAmount,e.networkFee);i=(0,c.mul)("-1",C,16)}else i=(0,c.mul)("-1",e.nativeAmount,16);(0,c.lt)(i,"0")&&(i="0x00");let o=r.nonceUsed;o==null&&(this.walletLocalData.numUnconfirmedSpendTxs!=null&&(0,c.gt)(this.otherData.unconfirmedNextNonce,this.otherData.nextNonce)?(o=this.otherData.unconfirmedNextNonce,this.walletLocalDataDirty=!0):o=this.otherData.nextNonce);const s=(0,y.NC)(o);let l;if(r.data!=null)l=r.data,e.currencyCode!==this.currencyInfo.currencyCode&&(i="0x00");else if(e.currencyCode===this.currencyInfo.currencyCode)l="";else{const C=I().simpleEncode("transfer(address,uint256):(uint256)",r.tokenRecipientAddress,i);l="0x"+le.from(C).toString("hex"),i="0x00"}const{chainParams:u}=this.networkInfo,h=D.Gn.custom(u),f=this.networkInfo.supportsEIP1559===!0?2:0,m=this.networkInfo.supportsEIP1559===!0?{maxFeePerGas:r.gasPrice,maxPriorityFeePerGas:r.minerTip}:{gasPrice:r.gasPrice},v=de(te({nonce:s},m),{gasLimit:a,to:r.to[0],value:i,data:l,type:f}),g=le.from(n.privateKey,"hex"),b=Oe().fromPrivateKey(g);this.warn(`signTx getAddressString ${b.getAddressString()}`);const E=T.nL.fromTxData(v,{common:h}).sign(g);return e.signedTx=(0,y.dg)(E.serialize()),e.txid=(0,y.dg)(E.hash()),e.date=Date.now()/1e3,e.otherParams!=null&&(e.otherParams.nonceUsed=o),this.warn(`signTx
|
|
10
|
-
${(0,y.oX)(e)}`),e})}broadcastTx(e){return
|
|
11
|
-
${(0,y.oX)(e)}`),e})}accelerate(e){return K(this,null,function*(){var t,n,r,a;const{currencyCode:i}=e,o=(0,p.Vk)(P.Al)(e.otherParams);let s=e.txid,l=yield this.findTransaction(i,(0,y.f0)(s));if(l===-1&&((o==null?void 0:o.replacedTxid)!=null&&o.replacedTxid!==""&&(s=o.replacedTxid,l=yield this.findTransaction(i,(0,y.f0)(s))),l===-1))return null;const u=this.transactionList[i][l],h=(0,p.Vk)(P.Al)(u.otherParams);if(u==null||u.blockHeight!==0||h==null||h.nonceUsed==null||!h.isFromMakeSpend)return null;const f=((t=u.spendTargets)!=null?t:[])[0];if(f==null)return null;const m=this.networkInfo.supportsEIP1559===!0?2:0,v=yield We(m,(0,c.mul)(h.gasPrice,"2"),(n=this.networkFees.default.baseFee)!=null?n:yield this.ethNetwork.getBaseFeePerGas()),g=h.gas,b=de(te(te({},h),v),{gas:g,replacedTxid:s});let{nativeAmount:w}=f,E=(0,c.mul)(v.gasPrice,g),C="0",S;const H=(r=this.walletLocalData.totalBalances[this.currencyInfo.currencyCode])!=null?r:"0";if(i===this.currencyInfo.currencyCode){if(C=(0,c.add)(E,w),(0,c.gt)(C,H))throw new A.C_;w=(0,c.mul)(C,"-1")}else{if(S=E,(0,c.gt)(E,H))throw new A.C_({currencyCode:this.currencyInfo.currencyCode,networkFee:E});const B=(a=this.walletLocalData.totalBalances[i])!=null?a:"0";if((0,c.gt)(w,B))throw new A.C_;E="0",w=(0,c.mul)(w,"-1")}return de(te({},e),{txid:"",feeRateUsed:Ie(v.gasPrice,g,h.gasUsed,v.minerTip),nativeAmount:w,networkFee:E,otherParams:b,parentNetworkFee:S})})}saveTx(e){return K(this,null,function*(){var t;const n=(0,p.Vk)(P.Al)(e.otherParams);if((n==null?void 0:n.replacedTxid)!=null){const{currencyCode:r}=e,a=(0,y.f0)(n.replacedTxid),i=this.findTransaction(r,a);if(i!==-1){const o=this.transactionList[r][i],s=e.metadata,l=de(te({},o),{metadata:s,blockHeight:-1});this.addTransaction(r,l)}}if(e.blockHeight===0){const r=(t=e.otherParams)==null?void 0:t.nonceUsed;r!=null&&(this.otherData.unconfirmedNextNonce=(0,c.add)(r,"1"))}Le(ke.prototype,this,"saveTx").call(this,e)})}}function an(d,e,t,n){return K(this,null,function*(){const{currencyInfo:r,initOptions:a}=d,i=(0,P.VX)(t),o=new ke(d,e,i,(0,P.dp)(a),n,r);return yield o.loadEngine(),o})}var ln=Object.defineProperty,cn=Object.defineProperties,un=Object.getOwnPropertyDescriptors,Ze=Object.getOwnPropertySymbols,hn=Object.prototype.hasOwnProperty,dn=Object.prototype.propertyIsEnumerable,ze=(d,e,t)=>e in d?ln(d,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):d[e]=t,Ye=(d,e)=>{for(var t in e||(e={}))hn.call(e,t)&&ze(d,t,e[t]);if(Ze)for(var t of Ze(e))dn.call(e,t)&&ze(d,t,e[t]);return d},qe=(d,e)=>cn(d,un(e)),q=(d,e,t)=>new Promise((n,r)=>{var a=s=>{try{o(t.next(s))}catch(l){r(l)}},i=s=>{try{o(t.throw(s))}catch(l){r(l)}},o=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,i);o((t=t.apply(d,e)).next())});class et{constructor(e){const{builtinTokens:t,currencyInfo:n,io:r,networkInfo:a,initOptions:i}=e;this.builtinTokens=t,this.currencyInfo=n,this.io=r,this.networkInfo=a,this.initOptions=i}getDisplayPrivateKey(e){return q(this,null,function*(){const{pluginId:t}=this.currencyInfo;return(0,P.sh)(t)(e.keys).privateKey})}getDisplayPublicKey(e){return q(this,null,function*(){const{keys:t}=(0,P.VX)(e);return t.publicKey})}importPrivateKey(e){return q(this,null,function*(){const{pluginId:t}=this.currencyInfo,{pluginMnemonicKeyName:n,pluginRegularKeyName:r}=this.networkInfo;if(/^(0x)?[0-9a-fA-F]{64}$/.test(e)){const a=Z.Buffer.from(e.replace(/^0x/,""),"hex");if(!F().isValidPrivate(a))throw new Error("Invalid private key");const i=a.toString("hex"),o={[r]:i};return this.derivePublicKey({type:`wallet:${t}`,id:"fake",keys:o}),o}else{if(!(0,X.validateMnemonic)(e))throw new Error("Invalid input");const a=yield this._mnemonicToHex(e);return{[n]:e,[r]:a}}})}createPrivateKey(e){return q(this,null,function*(){const{pluginMnemonicKeyName:t,pluginRegularKeyName:n}=this.networkInfo;if(e.replace("wallet:","")!==this.currencyInfo.pluginId)throw new Error("InvalidWalletType");const a=Z.Buffer.from(this.io.random(32)),i=(0,X.entropyToMnemonic)(a),o=yield this._mnemonicToHex(i);return{[t]:i,[n]:o}})}derivePublicKey(e){return q(this,null,function*(){const{pluginId:t}=this.currencyInfo,{hdPathCoinType:n,pluginMnemonicKeyName:r,pluginRegularKeyName:a}=this.networkInfo;if(e.type!==`wallet:${t}`)throw new Error("Invalid wallet type");let i;if(e.keys[r]!=null){const o=(0,X.mnemonicToSeedSync)(e.keys[r]),s=se().fromMasterSeed(o),l=`m/44'/${n}'/0'/0`,f=s.derivePath(`${l}/0`).getWallet().getPublicKey(),m=F().pubToAddress(f).toString("hex");i=F().toChecksumAddress(m)}else{const o=Z.Buffer.from(e.keys[a].replace(/^0x/,""),"hex");if(!F().isValidPrivate(o))throw new Error("Invalid private key");i=`0x${F().privateToAddress(o).toString("hex")}`}if(!F().isValidAddress(i))throw new Error("Invalid address");return{publicKey:i}})}_mnemonicToHex(e){return q(this,null,function*(){const{hdPathCoinType:t}=this.networkInfo,n=se().fromMasterSeed((0,X.mnemonicToSeedSync)(e)),r=`m/44'/${t}'/0'/0`;return n.derivePath(`${r}/0`).getWallet().getPrivateKeyString().replace(/^0x/,"")})}parseUri(e,t,n){return q(this,null,function*(){var r,a,i,o,s;const l={};this.networkInfo.uriNetworks.forEach(g=>{l[g]=!0});const{parsedUri:u,edgeParsedUri:h}=(0,_.k)(this.currencyInfo,e,l,t||this.currencyInfo.currencyCode,n);let f="";h.publicAddress&&(f=h.publicAddress,h.publicAddress=h.publicAddress.toLowerCase());let[m,v]=f.split("-");if(v||(v=m,m="pay"),f=v,/[A-F]/.test(f)&&!F().isValidChecksumAddress(f))throw new Error("InvalidPublicAddressError");if(f=f.toLowerCase(),!F().isValidAddress(f||""))throw new Error("InvalidPublicAddressError");if(m==="token"||m==="token_info"){if(!u.query)throw new Error("InvalidUriError");const g=(r=u.query.symbol)!=null?r:"SYM";if(g.length<2||g.length>5)throw new Error("Wrong Token symbol");const b=(a=u.query.name)!=null?a:g,w=(i=u.query.decimals)!=null?i:"18";let E="1000000000000000000";const C=parseInt(w);if(C<0||C>18)throw new Error("Wrong number of decimals");E="1"+"0".repeat(C);const S=(o=u.query.type)!=null?o:this.networkInfo.ercTokenStandard;return{token:{currencyCode:g,contractAddress:v.toLowerCase(),currencyName:b,multiplier:E,denominations:[{name:g,multiplier:E}],type:S.toUpperCase()}}}if(m==="pay"){const g=f,b=u.pathname.split("/")[1],w=u.query;switch(b){case"transfer":{const E=(s=w.address)!=null?s:"",C=g!=null?g:"",S=w.uint256!=null?(0,y.EE)(w.uint256):h.nativeAmount,H=this.currencyInfo.metaTokens.find(B=>B.contractAddress===C);if(t!=null&&(H==null||H.currencyCode!==t))throw new Error("InternalErrorInvalidCurrencyCode");if(!F().isValidAddress(E))throw new Error("InvalidPublicAddressError");if(!F().isValidAddress(C))throw new Error("InvalidContractAddressError");return qe(Ye({},h),{currencyCode:H==null?void 0:H.currencyCode,nativeAmount:S,publicAddress:E})}case void 0:{const E=g,C=w.value!=null?(0,y.EE)(w.value):h.nativeAmount;return qe(Ye({},h),{publicAddress:E,nativeAmount:C})}default:throw new Error("UnsupportedContractFunction")}}throw new Error("InvalidUriError")})}encodeUri(e){return q(this,arguments,function*(t,n=[]){const{publicAddress:r,nativeAmount:a,currencyCode:i}=t;if(!F().isValidAddress(r))throw new Error("InvalidPublicAddressError");let s;if(typeof a=="string"){const u=(0,y.Qs)(i!=null?i:this.currencyInfo.currencyCode,this.currencyInfo,n);if(u==null)throw new Error("InternalErrorInvalidCurrencyCode");s=(0,c.div)(a,u.multiplier,18)}return(0,_.Q)(t,this.currencyInfo.pluginId,s)})}getSplittableTypes(e){return Object.keys(M.s).map(t=>`wallet:${t}`)}getTokenId(e){return q(this,null,function*(){(0,G.Rp)(e);const t=(0,G.Oj)(e.networkLocation);if(t==null||!F().isValidAddress(t.contractAddress))throw new Error("ErrorInvalidContractAddress");return t.contractAddress.toLowerCase().replace(/^0x/,"")})}resolveEnsName(e){return q(this,null,function*(){const{networkAdapterConfigs:t}=this.networkInfo,n=t.find(i=>i.type==="rpc");if(n==null)throw new Error("resolveEnsName: No RpcAdapterConfig");const a=n.servers.map(i=>new ee.r(i,1));return yield(0,y.a7)({func:i=>q(this,null,function*(){return yield i.resolveName(e)}),providers:a})})}}function fn(d){return q(this,null,function*(){return new et(d)})}},77258:function(Ee,ne,k){"use strict";k.d(ne,{V7:function(){return y}});var c=k(82448),X=(M,P,D)=>new Promise((T,p)=>{var A=I=>{try{U(D.next(I))}catch(oe){p(oe)}},x=I=>{try{U(D.throw(I))}catch(oe){p(oe)}},U=I=>I.done?T(I.value):Promise.resolve(I.value).then(A,x);U((D=D.apply(M,P)).next())});const Z=(0,c.su)({statusCode:c.mH,message:c.XC,error:c.XC}),z=M=>(0,c.$e)((0,c._C)(Z,M)),F=(0,c.su)({cid:c.XC,from:c.XC,height:c.mH,method:c.XC,nonce:c.mH,receipt:(0,c.su)({exitCode:c.mH}),timestamp:c.mH,to:c.XC,value:c.XC}),ce=(0,c.su)({cid:c.XC,height:c.mH,timestamp:c.mH,from:c.XC,to:c.XC,value:c.XC,gasLimit:c.mH,gasFeeCap:c.XC,gasPremium:c.XC,receipt:(0,c.su)({exitCode:c.mH,return:c.XC,gasUsed:c.mH}),baseFee:c.XC,fee:(0,c.su)({baseFeeBurn:c.XC,overEstimationBurn:c.XC,minerPenalty:c.XC,minerTip:c.XC,refund:c.XC}),transfers:(0,c._2)((0,c.su)({from:c.XC,fromId:c.XC,to:c.XC,toId:c.XC,value:c.XC,type:c.XC}))}),se=(0,c.su)({from:c.XC,height:c.mH,message:c.XC,timestamp:c.mH,to:c.XC,type:c.XC,value:c.XC}),ee=(0,c.su)({messages:(0,c._2)(F),totalCount:c.mH}),G=ce,_=(0,c.su)({transfers:(0,c._2)(se),totalCount:c.mH});class y{constructor(P,D){this.baseUrl=P,this.fetch=D}getAccountMessages(P,D,T=20){return X(this,null,function*(){const p=new URL(`${this.baseUrl}/address/${P}/messages`),A=new URLSearchParams({page:D.toString(),pageSize:T.toString()});p.search=A.toString();const U=yield(yield this.fetch(p.toString(),{method:"GET",headers:{"content-type":"application/json"}})).text(),I=z(ee)(U);if("error"in I)throw new Error(`Error response code ${I.statusCode}: ${I.message} ${I.error}`);return I})}getAccountTransfers(P,D,T=20){return X(this,null,function*(){const p=new URL(`${this.baseUrl}/address/${P}/transfers`),A=new URLSearchParams({page:D.toString(),pageSize:T.toString()});p.search=A.toString();const U=yield(yield this.fetch(p.toString(),{method:"GET",headers:{"content-type":"application/json"}})).text(),I=z(_)(U);if("error"in I)throw new Error(`Error response code ${I.statusCode}: ${I.message} ${I.error}`);return I})}getMessageDetails(P){return X(this,null,function*(){const T=yield(yield this.fetch(`${this.baseUrl}/message/${P}`,{method:"GET",headers:{"content-type":"application/json"}})).text(),p=z(G)(T);if("error"in p)throw new Error(`Error response code ${p.statusCode}: ${p.message} ${p.error}`);return p})}}},44613:function(Ee,ne,k){"use strict";k.d(ne,{_E:function(){return _},dh:function(){return D},wI:function(){return y}});var c=k(68142),X=k.n(c),Z=k(79325),z=k(3666),F=k.n(z),ce=k(76714),se=k(48764).Buffer;const{utils:{crypto:{decode58Check:ee,getBase58CheckAddress:G}}}=F(),_=T=>{const p=ee(T);return Z.YU.stringify(p)},y=T=>{const p=Z.YU.parse(T);return G(Array.from(p))},M="a9059cbb",P=T=>{if(!T.startsWith(M))throw new Error("Not a TRC20 data payload");const p=T.replace(M,""),A=`41${p.substring(24,64)}`,x=y(A),U=p.substring(64,128),I=hexToDecimal(U);return[x,I]},D=(T,p)=>{const A=_(T).replace(/^(41)/,"0x"),x=X().simpleEncode("transfer(address,uint256):(uint256)",A,p);return se.from(x).toString("hex")}},89214:function(){},52361:function(){},94616:function(){},88924:function(){},55024:function(){}}]);
|
|
9
|
+
${JSON.stringify(g[P])}`),new Error(`getAllTxsEthscan ${n.name} is invalid`)}if(g.length===0)break;i++}return{allTransactions:o,server:r}})}processEvmScanTransaction(e,t){return V(this,null,function*(){var n;const s=[],a=(n=e.hash)!=null?n:e.transactionHash;if(a==null)throw new Error("Invalid transaction result format");const i=e.from.toLowerCase()===this.ethEngine.walletLocalData.publicKey.toLowerCase(),o=t!==this.ethEngine.currencyInfo.currencyCode,r="gasPrice"in e?e.gasPrice:void 0,l=r!=null?(0,c.mul)(r,e.gasUsed):"0";let u="0";if(i&&this.ethEngine.networkInfo.optimismRollupParams!=null){const w=yield this.ethEngine.ethNetwork.multicastRpc("eth_getTransactionReceipt",[a]),E=(0,b.zv)(w.result.result);u=(0,c.add)(u,(0,y.X0)(E.l1Fee))}let h,f,m;i?o?(h=(0,c.sub)("0",e.value),f="0",m=(0,c.add)(l,u)):e.from.toLowerCase()===e.to.toLowerCase()?(h=(0,c.sub)((0,c.sub)("0",l),u),f=(0,c.add)(l,u)):(h=(0,c.sub)((0,c.sub)((0,c.sub)("0",e.value),l),u),f=(0,c.add)(l,u)):(h=e.value,f="0",s.push(this.ethEngine.walletLocalData.publicKey));const v={from:[e.from],to:[e.to],gas:e.gas,gasPrice:r!=null?r:"",gasUsed:e.gasUsed,isFromMakeSpend:!1};let g=parseInt(e.blockNumber);return g<0&&(g=0),{blockHeight:g,currencyCode:t,date:parseInt(e.timeStamp),feeRateUsed:r!=null?Ie(r,e.gas,e.gasUsed):void 0,isSend:h.startsWith("-"),memos:[],nativeAmount:h,networkFee:f,otherParams:v,ourReceiveAddresses:s,parentNetworkFee:m,signedTx:"",txid:a,walletId:this.ethEngine.walletId}})}}var bt=k(77258),me=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});class Tt extends he{constructor(){super(...arguments),this.fetchBlockheight=null,this.broadcast=null,this.getBaseFeePerGas=null,this.multicastRpc=null,this.fetchNonce=null,this.fetchTokenBalance=null,this.fetchTokenBalances=null,this.fetchTxs=e=>me(this,null,function*(){try{return this.currentScan!=null?yield this.currentScan:(this.currentScan=this.checkTransactions(e),yield this.currentScan)}catch(t){throw console.error(t),t}finally{this.currentScan=void 0}}),this.filfoxMessageToEdgeTransaction=(e,t)=>{const n=[],s=t.transfers.filter(o=>o.type==="miner-fee"||o.type==="burner-fee").reduce((o,r)=>(0,c.add)(o,r.value),"0");let a;return t.from===e?(a=`-${s}`,t.to!==e&&(a=(0,c.sub)(a,t.value))):(a=t.value,n.push(e)),{blockHeight:t.height,currencyCode:this.ethEngine.currencyInfo.currencyCode,date:t.timestamp,isSend:a.startsWith("-"),memos:[],nativeAmount:a,networkFee:s,otherParams:{},ourReceiveAddresses:n,signedTx:"",txid:t.cid,walletId:this.ethEngine.walletId}}}checkTransactions(e){return me(this,null,function*(){const{startBlock:t,currencyCode:n}=e,{publicAddress:s}=yield this.ethEngine.getFreshAddress(),a=r=>{const l=this.ethEngine.tokenCheckTransactionsStatus[this.ethEngine.currencyInfo.currencyCode],u=r;l<1&&(u>=1||u>l*1.1)&&(this.ethEngine.tokenCheckTransactionsStatus[this.ethEngine.currencyInfo.currencyCode]=u,this.ethEngine.updateOnAddressesChecked())},i=({tx:r,progress:l})=>{r!=null&&(this.ethEngine.addTransaction(n,r),this.onUpdateTransactions(),this.ethEngine.walletLocalData.blockHeight<r.blockHeight&&this.onUpdateBlockHeight(r.blockHeight)),a(l)},o=[this.scanTransactionsFromFilfox(s,i)];return yield Promise.all(o),this.ethEngine.walletLocalData.lastAddressQueryHeight=this.ethEngine.walletLocalData.blockHeight,this.ethEngine.walletLocalDataDirty=!0,a(1),{tokenTxs:{[n]:{blockHeight:t,edgeTransactions:[]}},server:this.config.servers.join(",")}})}makeFilfoxApi(e){return new bt.V7(e,this.ethEngine.fetchCors)}onUpdateBlockHeight(e){this.ethEngine.walletLocalData.blockHeight!==e&&(this.ethEngine.walletLocalData.blockHeight=e,this.ethEngine.walletLocalDataDirty=!0,this.ethEngine.currencyEngineCallbacks.onBlockHeightChanged(this.ethEngine.walletLocalData.blockHeight))}onUpdateTransactions(){this.ethEngine.transactionsChangedArray.length>0&&(this.ethEngine.currencyEngineCallbacks.onTransactionsChanged(this.ethEngine.transactionsChangedArray),this.ethEngine.transactionsChangedArray=[])}scanTransactionsFromFilfox(e,t){return me(this,null,function*(){const n=new Set;let a=(yield this.serialServers(l=>me(this,null,function*(){return yield this.makeFilfoxApi(l).getAccountTransfers(e,0,1)}))).totalCount;const i=20;let o=Math.ceil(a/i),r=0;for(let l=o-1;l>=0;l--){const u=yield this.serialServers(f=>me(this,null,function*(){return yield this.makeFilfoxApi(f).getAccountTransfers(e,l,i)}));let h=u.transfers;if(u.totalCount!==a){const f=u.totalCount-a,v=(l+1)*(i/f),g=yield this.serialServers(P=>me(this,null,function*(){return yield this.makeFilfoxApi(P).getAccountTransfers(e,v,f)}));h=[...h,...g.transfers],a=u.totalCount,o=Math.ceil(a/i)}for(let f=h.length-1;f>=0;f--){if(!this.ethEngine.engineOn)return;const m=h[f];let v;if(m.height>=this.ethEngine.walletLocalData.lastAddressQueryHeight&&!n.has(m.message)){m.height>this.ethEngine.walletLocalData.lastAddressQueryHeight&&(this.ethEngine.walletLocalData.lastAddressQueryHeight=m.height,this.ethEngine.walletLocalDataDirty=!0);const P=yield this.serialServers(w=>me(this,null,function*(){return yield this.makeFilfoxApi(w).getMessageDetails(m.message)}));v=this.filfoxMessageToEdgeTransaction(e,P)}const g=a===0?1:++r/a;t({tx:v,progress:g}),n.add(m.message)}}})}}var Ae=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});class Ct extends he{constructor(){super(...arguments),this.fetchBlockheight=null,this.broadcast=null,this.getBaseFeePerGas=null,this.multicastRpc=null,this.fetchNonce=null,this.fetchTokenBalance=null,this.fetchTokenBalances=null,this.fetchTxs=e=>Ae(this,null,function*(){try{return this.currentScan!=null?yield this.currentScan:(this.currentScan=this.checkTransactions(e),yield this.currentScan)}catch(t){throw console.error(t),t}finally{this.currentScan=void 0}})}checkTransactions(e){return Ae(this,null,function*(){const{startBlock:t,currencyCode:n}=e,s=this.ethEngine.walletLocalData.publicKey,a=[];let i;for(;;){const r=yield this.queryTransactions(s,i);if(a.push(...r.items),i=r.next_page_params,r.items.some(l=>l.block<=t)||i==null)break}const o=a.map(r=>this.processScanTransaction(r,n));return{tokenTxs:{[n]:{blockHeight:t,edgeTransactions:o}},server:this.config.servers.join(",")}})}processScanTransaction(e,t){const n=[],s=e.hash;if(s==null)throw new Error("Invalid transaction result format");const a=e.from.hash.toLowerCase()===this.ethEngine.walletLocalData.publicKey.toLowerCase(),i=t!==this.ethEngine.currencyInfo.currencyCode,o=e.gas_price,r=o!=null?(0,c.mul)(o,e.gas_used):"0";let l,u,h;a?i?(l=(0,c.sub)("0",e.value),u="0",h=r):e.from.hash.toLowerCase()===e.to.hash.toLowerCase()?(l=(0,c.sub)("0",r),u=r):(l=(0,c.sub)((0,c.sub)("0",e.value),r),u=r):(l=e.value,u="0",n.push(this.ethEngine.walletLocalData.publicKey));const f={from:[e.from.hash],to:[e.to.hash],gas:e.gas_limit,gasPrice:o!=null?o:"",gasUsed:e.gas_used,isFromMakeSpend:!1};let m=e.block;return m<0&&(m=0),{blockHeight:m,currencyCode:t,date:new Date(e.timestamp).getTime()/1e3,feeRateUsed:o!=null?Ie(o,e.gas_limit,e.gas_used):void 0,isSend:l.startsWith("-"),memos:[],nativeAmount:l,networkFee:u,otherParams:f,ourReceiveAddresses:n,parentNetworkFee:h,signedTx:"",txid:s,walletId:this.ethEngine.walletId}}queryTransactions(e,t){return Ae(this,null,function*(){return yield this.serialServers(n=>Ae(this,null,function*(){const s=`addresses/${e}/transactions`,a=t!=null?new URLSearchParams(t).toString():"",i=`${n}/api/v2/${s}?${a}`,r=yield(yield this.ethEngine.fetchCors(i,{method:"GET",headers:{"content-type":"application/json"}})).text();return St(r)}))})}}const Re=(0,p.su)({hash:p.XC,is_contract:(0,p.Zz)(p.jK),is_verified:(0,p.Zz)(p.jK)}),At=(0,p.su)({timestamp:p.XC,gas_limit:p.XC,block:p.mH,to:Re,from:Re,hash:p.XC,gas_price:p.XC,gas_used:p.XC,value:p.XC}),It=(0,p.su)({block_number:p.mH,fee:p.XC,hash:p.XC,index:p.mH,inserted_at:p.XC,items_count:p.mH,value:p.XC}),St=(0,p.$e)((0,p.su)({items:(0,p._2)(At),next_page_params:(0,p.Zz)(It)}));var $e=k(96519),Ft=k(2593),xt=k(21046),Lt=JSON.parse('[{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"tokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"users","type":"address[]"},{"name":"tokens","type":"address[]"}],"name":"balances","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"}]'),W=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});class Ot extends he{constructor(e,t){super(e,t),this.fetchTxs=null,this.fetchBlockheight=()=>W(this,null,function*(){const{chainParams:{chainId:n}}=this.ethEngine.networkInfo,{result:s,server:a}=yield this.serialServers(o=>W(this,null,function*(){const r=yield this.fetchPostRPC("eth_blockNumber",[],n,o);if(r.error!=null)throw this.ethEngine.error(`Successful eth_blockNumber response object from ${o} included an error ${JSON.stringify(r.error)}`),new Error("Successful eth_blockNumber response object included an error");return{server:ie()(o).hostname,result:r}}));return{blockHeight:Be(s).result,server:a}}),this.broadcast=n=>W(this,null,function*(){const{chainParams:{chainId:s}}=this.ethEngine.networkInfo;return yield this.parallelServers(a=>W(this,null,function*(){const i="eth_sendRawTransaction",o=[n.signedTx],r=yield this.fetchPostRPC(i,o,s,a),l=ie()(a,{},!0);return{result:this.broadcastResponseHandler(r,l.toString(),n),server:l.hostname}}))}),this.getBaseFeePerGas=this.ethEngine.networkInfo.supportsEIP1559!==!0?null:()=>W(this,null,function*(){const{chainParams:{chainId:n}}=this.ethEngine.networkInfo;return yield this.serialServers(s=>W(this,null,function*(){return yield this.fetchPostRPC("eth_getBlockByNumber",["latest",!1],n,s).then(a=>{if(a.error!=null){const o=`multicast get_baseFeePerGas error response from ${s}: ${JSON.stringify(a.error)}`;throw this.ethEngine.warn(o),new Error(o)}return a.result.baseFeePerGas})}))}),this.multicastRpc=(n,s)=>W(this,null,function*(){const{chainParams:{chainId:a}}=this.ethEngine.networkInfo;return yield this.serialServers(i=>W(this,null,function*(){const o=yield this.fetchPostRPC(n,s,a,i);if(o.error!=null)throw this.ethEngine.error(`Successful ${n} response object from ${i} included an error ${JSON.stringify(o.error)}`),new Error(`Successful ${n} response object included an error: ${o.error.message}`);return{server:ie()(i).hostname,result:o}}))}),this.fetchNonce=()=>W(this,null,function*(){const{chainParams:{chainId:n}}=this.ethEngine.networkInfo,s=this.ethEngine.walletLocalData.publicKey,{result:a,server:i}=yield this.serialServers(r=>W(this,null,function*(){const l=yield this.fetchPostRPC("eth_getTransactionCount",[s,"latest"],n,r);if(l.error!=null)throw this.ethEngine.error(`Successful eth_getTransactionCount_RPC response object from ${r} included an error ${JSON.stringify(l.error)}`),new Error("Successful eth_getTransactionCount_RPC response object included an error");return{server:ie()(r).hostname,result:l}})),o=(0,b.tT)(a);if(/0[xX][0-9a-fA-F]+/.test(o.result))return{newNonce:(0,c.add)("0",o.result),server:i};throw new Error("checkNonceRpc returned invalid JSON")}),this.fetchTokenBalance=n=>W(this,null,function*(){const{chainParams:{chainId:s}}=this.ethEngine.networkInfo;let a,i,o,r;const l=this.ethEngine.walletLocalData.publicKey;try{if(n===this.ethEngine.currencyInfo.currencyCode)i=yield this.serialServers(u=>W(this,null,function*(){const h=yield this.fetchPostRPC("eth_getBalance",[l,"latest"],s,u);if(h.error!=null)throw this.ethEngine.error(`Successful eth_getBalance response object from ${u} included an error ${JSON.stringify(h.error)}`),new Error("Successful eth_getBalance response object included an error");if(!(0,y.vq)(h.result))throw new Error(`eth_getBalance not hex for ${ie()(u).hostname}`);return h.result=(0,y.Z8)(h.result),{server:ie()(u).hostname,result:h}})),o=i.result,r=i.server;else{const u=this.ethEngine.getTokenInfo(n);if(u!=null&&typeof u.contractAddress=="string"){const h={data:`0x70a08231${(0,y.gc)((0,y.KT)(l),32)}`,to:u.contractAddress},f=yield this.ethEngine.ethNetwork.multicastRpc("eth_call",[h,"pending"]),m=f.result.result;if(!m.startsWith("0x"))throw new Error("Invalid return value. Result not hex");f.result.result=(0,y.Z8)(m),o=f.result,r=f.server}}a=(0,b.tT)(o)}catch(u){throw this.ethEngine.error(`checkTokenBalRpc token ${n} response ${String(i!=null?i:"")} `,u),new Error(`checkTokenBalRpc invalid ${n} response ${JSON.stringify(o)}`)}return{tokenBal:{[n]:a.result},server:r}}),this.fetchTokenBalances=this.config.ethBalCheckerContract==null?null:()=>W(this,null,function*(){const{allTokensMap:n,networkInfo:s,walletLocalData:a,currencyInfo:i}=this.ethEngine,{chainParams:o}=s,r={},l=[],u=this.config.ethBalCheckerContract;if(u==null)return r;const h="0x0000000000000000000000000000000000000000",f=[h];for(const v of Object.values(this.ethEngine.allTokensMap)){const g=(0,H.Oj)(v.networkLocation);g!=null&&f.unshift(g.contractAddress)}const m=yield this.serialServers(v=>W(this,null,function*(){const g=new ee.r(v,o.chainId),w=yield new $e.CH(u,Lt,g).balances([a.publicKey],f);if(w.length!==f.length)throw new Error("checkEthBalChecker balances length mismatch");return w})).catch(v=>{throw new Error(`All rpc servers failed eth balance checks: ${String(v)}`)});for(let v=0;v<m.length;v++){const g=f[v].toLowerCase(),P=Ft.O$.from(m[v]);let w;if(g===h){const{currencyCode:E}=i;w=E}else{const E=g.replace("0x","");P.gt(xt._Y)&&l.push(E);const A=n[E];if(A==null){this.logError("checkEthBalChecker",new Error(`checkEthBalChecker missing builtinToken: ${g}`));continue}const{currencyCode:F}=A;w=F}r[w]=P.toString()}return{tokenBal:r,detectedTokenIds:l,server:"ethBalChecker"}}),this.config.servers=this.config.servers.map(n=>{try{return this.addRpcApiKey(n)}catch{}}).filter(n=>n!=null)}addRpcApiKey(e){const n=/{{(.*?)}}/g.exec(e);if(n!=null){const s=n[1],a=(0,b.jq)(s),i=this.ethEngine.initOptions[a];if(typeof i=="string")e=e.replace(n[0],i);else throw i==null?new Error(`Missing ${a} in 'initOptions' for ${this.ethEngine.currencyInfo.pluginId}`):new Error("Incorrect apikey type for RPC")}return e}fetchPostRPC(e,t,n,s){return W(this,null,function*(){const a={id:n,jsonrpc:"2.0",method:e,params:t};s=this.addRpcApiKey(s);const i=yield this.ethEngine.fetchCors(s,{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify(a)}),o=ie()(s,{},!0);return i.ok||this.throwError(i,"fetchPostRPC",o.hostname),yield i.json()})}}var Bt=Object.defineProperty,Nt=Object.defineProperties,Rt=Object.getOwnPropertyDescriptors,De=Object.getOwnPropertySymbols,$t=Object.prototype.hasOwnProperty,Dt=Object.prototype.propertyIsEnumerable,_e=(d,e,t)=>e in d?Bt(d,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):d[e]=t,He=(d,e)=>{for(var t in e||(e={}))$t.call(e,t)&&_e(d,t,e[t]);if(De)for(var t of De(e))Dt.call(e,t)&&_e(d,t,e[t]);return d},_t=(d,e)=>Nt(d,Rt(e)),J=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});const Ht=2e4,Gt=2e4,Ge=2e4,Mt=2e4,Kt=4*2,jt=2*60,Ie=(d,e,t,n)=>{let s={};return s=_t(He(He({gasPrice:(0,c.div)((0,c.add)(d,"0",10),Y.toString(),Y.toString().length-1,10)},t!==void 0?{gasUsed:t}:{}),n!==void 0?{minerTip:(0,c.div)((0,c.add)(n,"0",10),Y.toString(),Y.toString().length-1,10)}:{}),{gasLimit:e}),s};class Ut{constructor(e){this.multicastRpc=(t,n)=>J(this,null,function*(){const s=this.qualifyNetworkAdapters("multicastRpc").map(i=>()=>J(this,null,function*(){return yield i.multicastRpc(t,n)}));return yield(0,y.QJ)(s)}),this.getBaseFeePerGas=()=>J(this,null,function*(){const t=this.qualifyNetworkAdapters("getBaseFeePerGas").map(n=>()=>J(this,null,function*(){return yield n.getBaseFeePerGas()}));return yield(0,y.QJ)(t)}),this.processEthereumNetworkUpdate=(t,n,s)=>{var a,i,o,r,l;if(n!=null){if(n.blockHeight!=null){this.ethEngine.log(`${this.ethEngine.currencyInfo.currencyCode} processEthereumNetworkUpdate blockHeight ${(a=n.server)!=null?a:"no server"} won`);const u=n.blockHeight;this.ethEngine.log(`Got block height ${u}`),typeof u=="number"&&this.ethEngine.walletLocalData.blockHeight!==u&&(this.ethNeeds.blockHeightLastChecked=t,this.ethEngine.checkDroppedTransactionsThrottled(),this.ethEngine.walletLocalData.blockHeight=u,this.ethEngine.walletLocalDataDirty=!0,this.ethEngine.currencyEngineCallbacks.onBlockHeightChanged(this.ethEngine.walletLocalData.blockHeight))}if(n.newNonce!=null&&(this.ethEngine.log(`${this.ethEngine.currencyInfo.currencyCode} processEthereumNetworkUpdate nonce ${(i=n.server)!=null?i:"no server"} won`),this.ethNeeds.nonceLastChecked=t,this.ethEngine.otherData.nextNonce=n.newNonce,this.ethEngine.walletLocalDataDirty=!0),n.tokenBal!=null){const u=n.tokenBal;this.ethEngine.log(`${this.ethEngine.currencyInfo.currencyCode} processEthereumNetworkUpdate tokenBal ${(o=n.server)!=null?o:"no server"} won`);for(const h of Object.keys(u))this.ethNeeds.tokenBalLastChecked[h]=t,this.ethEngine.updateBalance(h,u[h]);this.ethEngine.currencyEngineCallbacks.onNewTokens((r=n.detectedTokenIds)!=null?r:[]),this.ethNeeds.tokenBalsLastChecked=t}if(n.tokenTxs!=null){const u=n.tokenTxs;this.ethEngine.log(`${this.ethEngine.currencyInfo.currencyCode} processEthereumNetworkUpdate tokenTxs ${(l=n.server)!=null?l:"no server"} won`);for(const h of Object.keys(u)){this.ethNeeds.tokenTxsLastChecked[h]=t,this.ethEngine.tokenCheckTransactionsStatus[h]=1;const f=u[h];for(const m of f.edgeTransactions)this.ethEngine.addTransaction(h,m);this.ethEngine.walletLocalData.lastTransactionQueryHeight[h]=s,this.ethEngine.walletLocalData.lastTransactionDate[h]=t}this.ethEngine.updateOnAddressesChecked()}this.ethEngine.transactionsChangedArray.length>0&&(this.ethEngine.currencyEngineCallbacks.onTransactionsChanged(this.ethEngine.transactionsChangedArray),this.ethEngine.transactionsChangedArray=[])}},this.ethEngine=e,this.ethNeeds={blockHeightLastChecked:0,nonceLastChecked:0,tokenBalsLastChecked:0,tokenBalLastChecked:{},tokenTxsLastChecked:{}},this.networkAdapters=this.buildNetworkAdapters(this.ethEngine.networkInfo),this.walletId=e.walletInfo.id}processAlethioTransaction(e,t){let n;const s=[];let a;const i=t!==this.ethEngine.currencyInfo.currencyCode,o=e.attributes.value,r=e.attributes.fee!=null&&e.attributes.fee!==""?e.attributes.fee:"0",l=e.relationships.from.data.id,u=e.relationships.to.data.id;t===this.ethEngine.currencyInfo.currencyCode?a=r:a="0";const h=l.toLowerCase()===this.ethEngine.walletLocalData.publicKey.toLowerCase();if(h)l.toLowerCase()===u.toLowerCase()?n=(0,c.mul)(a,"-1"):(n=(0,c.sub)("0",o),i||(n=(0,c.sub)(n,a)));else if(u.toLowerCase()===this.ethEngine.walletLocalData.publicKey.toLowerCase())n=o,s.push(this.ethEngine.walletLocalData.publicKey.toLowerCase());else return null;const f={from:[l],to:[u],gas:"0",gasPrice:"0",gasUsed:"0",isFromMakeSpend:!1};let m=e.attributes.globalRank[0];m<0&&(m=0);let v,g="0";return i&&h?v=a:g=a,{blockHeight:m,currencyCode:t,date:e.attributes.blockCreationTime,isSend:n.startsWith("-"),memos:[],nativeAmount:n,networkFee:g,otherParams:f,ourReceiveAddresses:s,parentNetworkFee:v,signedTx:"",txid:e.relationships.transaction.data.id,walletId:this.walletId}}broadcastTx(e){return J(this,null,function*(){const t=this.qualifyNetworkAdapters("broadcast").map(s=>J(this,null,function*(){return yield s.broadcast(e)})),n=yield(0,y.Wp)(t);return this.ethEngine.log(`${this.ethEngine.currencyInfo.currencyCode} broadcastTx ${n.server} won`),n})}check(e,...t){return J(this,null,function*(){return yield(0,y.QJ)(this.qualifyNetworkAdapters(e).map(n=>()=>J(this,null,function*(){return yield n[e](...t)}))).catch(n=>({}))})}getTokenCurrencyCode(e){const t=this.ethEngine.walletLocalData.publicKey;if(e.toLowerCase()===t.toLowerCase())return this.ethEngine.currencyInfo.currencyCode;for(const n of this.ethEngine.enabledTokens){const s=this.ethEngine.getTokenInfo(n);if(s!=null){const a=s.contractAddress;if(e!=null&&typeof a=="string"&&a.toLowerCase()===e.toLowerCase())return n}}}checkAndUpdate(e,t,n,s){return J(this,null,function*(){const a=Date.now();if(a-e>t)try{const i=yield s();this.processEthereumNetworkUpdate(a,i,n)}catch(i){this.ethEngine.error("checkAndUpdate ",i)}})}needsLoop(){return J(this,null,function*(){for(var e,t;this.ethEngine.engineOn;){const n=this.ethEngine.walletLocalData.blockHeight;yield this.checkAndUpdate(this.ethNeeds.blockHeightLastChecked,Ht,n,()=>J(this,null,function*(){return yield this.check("fetchBlockheight")})),yield this.checkAndUpdate(this.ethNeeds.nonceLastChecked,Gt,n,()=>J(this,null,function*(){return yield this.check("fetchNonce")}));const{currencyCode:s}=this.ethEngine.currencyInfo,a=this.ethEngine.enabledTokens;a.includes(s)||a.push(s);const i=this.networkAdapters.find(o=>o.fetchTokenBalances!=null)!=null;i&&(yield this.checkAndUpdate(this.ethNeeds.tokenBalsLastChecked,Ge,n,()=>J(this,null,function*(){return yield this.check("fetchTokenBalances")})));for(const o of a)i||(yield this.checkAndUpdate((e=this.ethNeeds.tokenBalLastChecked[o])!=null?e:0,Ge,n,()=>J(this,null,function*(){return yield this.check("fetchTokenBalance",o)}))),yield this.checkAndUpdate((t=this.ethNeeds.tokenTxsLastChecked[o])!=null?t:0,Mt,n,()=>J(this,null,function*(){var r,l;const u=(r=this.ethEngine.walletLocalData.lastTransactionQueryHeight[o])!=null?r:0,h=(l=this.ethEngine.walletLocalData.lastTransactionDate[o])!=null?l:0,f={startBlock:Math.max(u-Kt,0),startDate:Math.max(h-jt,0),currencyCode:o};return this.qualifyNetworkAdapters("fetchTxs").length===0?{tokenTxs:{[this.ethEngine.currencyInfo.currencyCode]:{blockHeight:f.startBlock,edgeTransactions:[]}},server:"none"}:yield this.check("fetchTxs",f)}));yield(0,y.HB)(1e3)}})}buildNetworkAdapters(e){const{networkAdapterConfigs:t}=e;return t.map(s=>Xt(s,this.ethEngine))}qualifyNetworkAdapters(...e){return this.networkAdapters.filter(t=>e.every(n=>t[n]!=null))}}const Xt=(d,e)=>{switch(d.type){case"amberdata-rpc":return new rt(e,d);case"blockbook":return new ot(e,d);case"blockchair":return new it(e,d);case"blockcypher":return new at(e,d);case"evmscan":return new Pt(e,d);case"filfox":return new Tt(e,d);case"pulsechain-scan":return new Ct(e,d);case"rpc":return new Ot(e,d)}};var Wt=k(93901),Jt=k(79325),Vt=JSON.parse('[{"inputs":[{"internalType":"uint64","name":"size","type":"uint64"},{"internalType":"uint64","name":"leaf","type":"uint64"}],"name":"constructOutboxProof","outputs":[{"internalType":"bytes32","name":"send","type":"bytes32"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"l2CallValue","type":"uint256"},{"internalType":"address","name":"excessFeeRefundAddress","type":"address"},{"internalType":"address","name":"callValueRefundAddress","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"estimateRetryableTicket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"blockNum","type":"uint64"}],"name":"findBatchContainingBlock","outputs":[{"internalType":"uint64","name":"batch","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"contractCreation","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"gasEstimateComponents","outputs":[{"internalType":"uint64","name":"gasEstimate","type":"uint64"},{"internalType":"uint64","name":"gasEstimateForL1","type":"uint64"},{"internalType":"uint256","name":"baseFee","type":"uint256"},{"internalType":"uint256","name":"l1BaseFeeEstimate","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"contractCreation","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"gasEstimateL1Component","outputs":[{"internalType":"uint64","name":"gasEstimateForL1","type":"uint64"},{"internalType":"uint256","name":"baseFee","type":"uint256"},{"internalType":"uint256","name":"l1BaseFeeEstimate","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"name":"getL1Confirmations","outputs":[{"internalType":"uint64","name":"confirmations","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batchNum","type":"uint256"},{"internalType":"uint64","name":"index","type":"uint64"}],"name":"legacyLookupMessageBatchProof","outputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"path","type":"uint256"},{"internalType":"address","name":"l2Sender","type":"address"},{"internalType":"address","name":"l1Dest","type":"address"},{"internalType":"uint256","name":"l2Block","type":"uint256"},{"internalType":"uint256","name":"l1Block","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"calldataForL1","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nitroGenesisBlock","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"pure","type":"function"}]'),Se=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});const Qt="low",Zt="standard",zt="high",Me="custom",Ke="1000000000";function je(d,e,t,n){var s,a,i,o,r,l,u,h,f;let m=!0,v,g;const{customNetworkFee:P}=d!=null?d:{};if(d.networkFeeOption===Me&&P!=null){const{gasLimit:B,gasPrice:O}=P;if((isNaN(B)||B==="")&&(isNaN(O)||O==="")){const N=new Error("Custom Fee must have at least gasLimit or gasPrice specified");throw N.name="ErrorBelowMinimumFee",N}if(O!=null&&O!==""){const N=(o=(a=(s=e.default)==null?void 0:s.gasPrice)==null?void 0:a.minGasPrice)!=null?o:(i=n.defaultNetworkFees.default.gasPrice)==null?void 0:i.minGasPrice;if(N!=null){const j=(0,c.mul)(O,Ke);if((0,c.lt)(j,N)||/^\s*$/.test(O)){const fe=new Error(`Gas price ${j} wei below minimum ${N} wei`);throw fe.name="ErrorBelowMinimumFee",fe}}g=(0,c.mul)(O,Ke)}if(B!=null&&B!==""){const N=(h=(l=(r=e.default)==null?void 0:r.gasLimit)==null?void 0:l.minGasLimit)!=null?h:(u=n.defaultNetworkFees.default.gasLimit)==null?void 0:u.minGasLimit;if(N!=null&&(0,c.lt)(B,N)||/^\s*$/.test(B)){const j=new Error(`Gas limit ${B} below minimum ${N}`);throw j.name="ErrorBelowMinimumFee",j}v=B,m=!1}}if(v!=null&&g!=null)return{gasLimit:v,gasPrice:g,useEstimatedGasLimit:!1};let w=e.default,E=e.default;if(typeof((f=d.spendTargets[0])==null?void 0:f.publicAddress)=="string"){const B=(0,y.f0)(d.spendTargets[0].publicAddress);typeof e[B]<"u"&&(E=e[B],m=!1,typeof E.gasPrice<"u"&&(w=E))}let A="regularTransaction";d.currencyCode!=null&&d.currencyCode!==t.currencyCode&&(A="tokenTransaction");let F="standard";typeof d.networkFeeOption=="string"&&d.networkFeeOption!==Me&&(F=d.networkFeeOption);const K=E.gasLimit!=null?E.gasLimit[A]:"21000";let $="";if(d.spendTargets[0].nativeAmount==null)throw new Error("ErrorInvalidNativeAmount");let Q=d.spendTargets[0].nativeAmount;if(A==="tokenTransaction"&&(Q=(0,c.div)(Q,"10")),w.gasPrice==null)throw new Error("ErrorInvalidGasPrice");const L=w.gasPrice;switch(F){case Qt:$=L.lowFee;break;case Zt:{if((0,c.gte)(Q,w.gasPrice.standardFeeHighAmount)){$=L.standardFeeHigh;break}if((0,c.lte)(Q,L.standardFeeLowAmount)){if(w.gasPrice==null)throw new Error("ErrorInvalidGasPrice");$=w.gasPrice.standardFeeLow;break}const B=(0,c.sub)(L.standardFeeHighAmount,L.standardFeeLowAmount),O=(0,c.sub)(L.standardFeeHigh,L.standardFeeLow),N=(0,c.sub)(Q,L.standardFeeLowAmount),j=(0,c.mul)(N,O),fe=(0,c.div)(j,B);$=(0,c.add)(L.standardFeeLow,fe);break}case zt:$=w.gasPrice.highFee;break;default:throw new Error("Invalid networkFeeOption")}return{gasLimit:v!=null?v:K,gasPrice:g!=null?g:$,useEstimatedGasLimit:m}}const Yt="1040",Ue=d=>{const{chainParams:e,data:t,dynamicOverhead:n,fixedOverhead:s,gasPriceL1Wei:a,gasLimit:i,nonce:o,to:r,value:l="0x0"}=d,u=D.Gn.custom(e),f=T.nL.fromTxData({nonce:o!=null?(0,y.X0)(o):void 0,gasPrice:(0,y.X0)(a),gasLimit:(0,y.X0)(i),to:r,value:l,data:t===null?void 0:t},{common:u}).raw(),g=Xe(f).map(F=>F==null?"":Jt.YU.stringify(F).toLowerCase()).join().match(/(.{1,2})/g);if(g==null)throw new Error("Invalid rawTx string");let P=0;for(let F=0;F<g.length;F++)g[F]==="00"?P+=4:P+=16;const w=(0,c.add)((0,c.add)(P.toString(),s),Yt),E=(0,c.div)(n,"1000000",18);return(0,c.ceil)((0,c.mul)((0,c.mul)(a,w),E),0)};function Xe(d,e=[]){return d.forEach(t=>{if(t!=null){if(Array.isArray(t))return Xe(t,e);e.push(t)}}),e}function We(d,e,t){return Se(this,null,function*(){if(d<2)return{gasPrice:(0,c.mul)("1",e,16)};{const n=e;let s=(0,c.sub)(n,t);return(0,c.lte)(s,"0")&&(s=(0,c.div)(n,"10",0)),{gasPrice:(0,c.mul)("1",n,16),minerTip:(0,c.mul)("1",s,16)}}})}let Fe={destinationAddress:"",l1Gas:"0",l1GasPrice:"10000000000"};const Je=d=>Se(void 0,null,function*(){const{rpcServers:e,nodeInterfaceAddress:t,destinationAddress:n,txData:s}=d;if(n===Fe.destinationAddress)return{l1Gas:Fe.l1Gas,l1GasPrice:Fe.l1GasPrice};const a=o=>Se(void 0,null,function*(){const r=new Wt.c(o),u=yield new $e.CH(t,Vt,r).callStatic.gasEstimateL1Component(n,!1,s,{blockTag:"latest"});return{l1Gas:u.gasEstimateForL1.toString(),l1GasPrice:u.baseFee.toString()}}),i=yield(0,y.QJ)(e.map(o=>()=>Se(void 0,null,function*(){return yield a(o)})));return Fe={destinationAddress:n,l1Gas:i.l1Gas,l1GasPrice:i.l1GasPrice},i});var le=k(48764).Buffer,qt=Object.defineProperty,en=Object.defineProperties,tn=Object.getOwnPropertyDescriptors,Ve=Object.getOwnPropertySymbols,nn=Object.getPrototypeOf,sn=Object.prototype.hasOwnProperty,rn=Object.prototype.propertyIsEnumerable,on=Reflect.get,Qe=(d,e,t)=>e in d?qt(d,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):d[e]=t,te=(d,e)=>{for(var t in e||(e={}))sn.call(e,t)&&Qe(d,t,e[t]);if(Ve)for(var t of Ve(e))rn.call(e,t)&&Qe(d,t,e[t]);return d},de=(d,e)=>en(d,tn(e)),Le=(d,e,t)=>on(nn(d),t,e),M=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});class ke extends re.P{constructor(e,t,n,s,a,i){super(e,t,n,a),this.updateNetworkFeesFromBaseFeePerGas=()=>M(this,null,function*(){var l;const{supportsEIP1559:u=!1}=this.networkInfo;if(!u)return;const h=yield this.ethNetwork.getBaseFeePerGas();if(h==null)return;const f=(0,y.Z8)(h),m=this.networkFees;if(m.default==null||m.default.gasPrice==null)return;const v=this.networkInfo.defaultNetworkFees.default,g=m.default.minPriorityFee||v.minPriorityFee,P=(l=m.default.baseFeeMultiplier)!=null?l:v.baseFeeMultiplier;if(g==null||P==null)return;const w={lowFee:"",standardFeeLow:"",standardFeeHigh:"",highFee:""};for(const E of Object.keys(P)){const A=(0,c.mul)(P[E],f),F=(0,c.add)(A,g);w[E]=(0,c.div)(F,"1")}return this.log(`updateNetworkFeesFromBaseFeePerGas ${this.currencyInfo.currencyCode}`),Ce(this.log,w),w}),this.initOptions=s,this.networkInfo=e.networkInfo,this.ethNetwork=new Ut(this),this.networkInfo.optimismRollupParams!=null&&(this.optimismRollupParams=this.networkInfo.optimismRollupParams),this.networkFees=this.networkInfo.defaultNetworkFees,this.fetchCors=(0,y.zR)(e.io);const{infoFeeProvider:o,externalFeeProviders:r}=mt(this.fetchCors,this.currencyInfo,this.initOptions,this.log,this.networkInfo);this.infoFeeProvider=o,this.externalFeeProviders=[...r,this.updateNetworkFeesFromBaseFeePerGas],this.utils={signMessage:(l,u)=>{if(!(0,y.vq)(l))throw new Error("ErrorInvalidMessage");const h=le.from(u.privateKey,"hex"),f=(0,y.ah)(l),m=S().hashPersonalMessage(f),{v,r:g,s:P}=S().ecsign(m,h);return S().toRpcSig(v,g,P)},signTypedData:(l,u)=>{const h=ft(l),f=le.from(u.privateKey,"hex"),{types:m}=h;function v(L,R=[]){if(R.includes(L)||m[L]===void 0)return R;R.push(L);for(const B of m[L])for(const O of v(B.type,R))R.includes(O)||R.push(O);return R}function g(L){let R=v(L);R=R.filter(O=>O!==L),R=[L].concat(R.sort());let B="";for(const O of R)B+=`${O}(${m[O].map(({name:N,type:j})=>`${j} ${N}`).join(",")})`;return B}function P(L){return S().keccak256(g(L))}function w(L,R){const B=[],O=[];B.push("bytes32"),O.push(P(L));for(const N of m[L]){let j=R[N.name];if(N.type==="string"||N.type==="bytes")B.push("bytes32"),j=S().keccak256(j),O.push(j);else if(m[N.type]!==void 0)B.push("bytes32"),j=S().keccak256(w(N.type,j)),O.push(j);else{if(N.type.lastIndexOf("]")===N.type.length-1)throw new Error("Arrays currently unimplemented in encodeData");B.push(N.type),O.push(j)}}return I().rawEncode(B,O)}function E(L,R){return S().keccak256(w(L,R))}function A(){return S().keccak256(le.concat([le.from("1901","hex"),E("EIP712Domain",h.domain),E(h.primaryType,h.message)]))}const F=S().ecsign(A(),f),{v:K,r:$,s:Q}=F;return S().bufferToHex(le.concat([S().setLengthLeft($,32),S().setLengthLeft(Q,32),S().toBuffer(K)]))},txRpcParamsToSpendInfo:l=>{const u={otherParams:l};l.to!=null&&(u.publicAddress=l.to),l.value!=null?u.nativeAmount=(0,y.Z8)(l.value):u.nativeAmount="0";let h,f,m;return l.gas!=null&&(f=(0,y.Z8)(l.gas),h="custom"),l.gasPrice!=null&&(m=(0,c.div)((0,y.Z8)(l.gasPrice),Y.toString(),18),h="custom"),{currencyCode:this.currencyInfo.currencyCode,spendTargets:[u],memos:[{type:"hex",value:(0,y.KT)(l.data),hidden:!0,memoName:"data"}],networkFeeOption:h,customNetworkFee:{gasLimit:f,gasPrice:m},otherParams:l}}},this.otherMethods={parseWalletConnectV2Payload:l=>M(this,null,function*(){var u,h;try{let f="0",m="0";switch(l.method){case"eth_sendTransaction":case"eth_signTransaction":{const v=(0,p.su)({from:p.XC,to:(0,p.Zz)(p.XC),data:p.XC,gas:(0,p.Zz)(p.XC),gasPrice:(0,p.Zz)(p.XC),value:(0,p.Zz)(p.XC)})(l.params[0]),{gas:g,gasPrice:P,value:w}=v,E=A=>{var F,K;g==null?v.gas=(0,y.X0)(A):A=(0,y.Z8)(g);let $=(K=(F=this.networkFees.default.gasPrice)==null?void 0:F.standardFeeHigh)!=null?K:"0";P==null?v.gasPrice=(0,y.X0)($):$=(0,y.Z8)(P),m=(0,c.mul)(A,$)};w!=null&&(f=(0,y.Z8)(w)),((u=this.networkFees.default.gasLimit)==null?void 0:u.tokenTransaction)==null?this.ethNetwork.multicastRpc("eth_estimateGas",[v]).then(A=>{const F=(0,c.add)(parseInt(A.result.result,16).toString(),"0");E(F)}).catch(A=>{this.warn("Wallet connect call_request failed to get gas limit",A)}):E((h=this.networkFees.default.gasLimit)==null?void 0:h.tokenTransaction);break}}return{nativeAmount:f,networkFee:m,tokenId:null}}catch(f){throw this.warn("Wallet connect call_request ",f),f}}),txRpcParamsToSpendInfo:l=>M(this,null,function*(){return this.utils.txRpcParamsToSpendInfo(l)})}}estimateGasLimit(e){return M(this,null,function*(){var t,n;const{estimateGasParams:s,miningFees:a}=e,i=s[0].data!=null;let o=a.gasLimit;try{const l=(yield this.ethNetwork.multicastRpc("eth_getCode",[s[0].to,"latest"])).result.result!=="0x",u=(h=0)=>M(this,null,function*(){const f=this.networkInfo.defaultNetworkFees.default.gasLimit;try{if(f!=null&&!l&&!i)o=f.regularTransaction;else{const m=yield this.ethNetwork.multicastRpc("eth_estimateGas",s);o=(0,c.add)(parseInt(m.result.result,16).toString(),"0"),l&&(o=(0,c.mul)(o,"2"))}}catch{if(f==null){if(h>5)throw new Error("Unable to estimate gas limit after 5 tries. Please try again later");return yield u(h+1)}if(i)throw new Error("Unable to estimate gas limit. Please try again later");f.tokenTransaction!=null&&(o=f.tokenTransaction)}});if(yield u(),(0,c.lt)(o,(n=(t=this.networkFees.default.gasLimit)==null?void 0:t.minGasLimit)!=null?n:"21000"))throw o=a.gasLimit,new Error("Calculated gasLimit less than minimum")}catch(r){this.error("makeSpend Error determining gas limit ",r)}return o})}setOtherData(e){this.otherData=(0,b.gF)(e)}updateNetworkFees(){return M(this,null,function*(){for(const e of this.externalFeeProviders)try{const t=yield e();if(t==null)continue;const n={};Object.keys(t).forEach(s=>{const a=s;n[a]=(0,y.Y7)(t[a])}),this.networkFees.default.gasPrice!=null&&(this.networkFees.default.gasPrice=te(te({},this.networkFees.default.gasPrice),n));break}catch(t){this.error(`Error fetching fees from ${e.name}. ${JSON.stringify(t)}`)}if(this.networkInfo.supportsEIP1559===!0)try{const e=yield this.ethNetwork.getBaseFeePerGas();if(e==null)return;this.networkFees.default.baseFee=e}catch(e){this.error(`Error fetching base fee: ${JSON.stringify(e)}`)}})}updateOptimismRollupParams(){return M(this,null,function*(){if(this.optimismRollupParams!=null){try{const e={to:this.optimismRollupParams.oracleContractAddress,data:this.optimismRollupParams.gasPricel1BaseFeeMethod},t=yield this.ethNetwork.multicastRpc("eth_call",[e,"latest"]),n=(0,b.tT)(t.result);this.optimismRollupParams=de(te({},this.optimismRollupParams),{gasPriceL1Wei:(0,c.ceil)((0,c.mul)((0,y.Z8)(n.result),this.optimismRollupParams.maxGasPriceL1Multiplier),0)})}catch(e){this.log.warn("Failed to update l1GasPrice",e)}try{const e={to:this.optimismRollupParams.oracleContractAddress,data:this.optimismRollupParams.dynamicOverheadMethod},t=yield this.ethNetwork.multicastRpc("eth_call",[e,"latest"]),n=(0,b.tT)(t.result);this.optimismRollupParams=de(te({},this.optimismRollupParams),{dynamicOverhead:(0,y.Z8)(n.result)})}catch(e){this.log.warn("Failed to update dynamicOverhead",e)}}})}clearBlockchainCache(){return M(this,null,function*(){yield Le(ke.prototype,this,"clearBlockchainCache").call(this),this.otherData.nextNonce="0",this.otherData.unconfirmedNextNonce="0"})}startEngine(){return M(this,null,function*(){var e;this.engineOn=!0;const t=(e=this.networkInfo.feeUpdateFrequencyMs)!=null?e:we;this.infoFeeProvider().then(n=>M(this,null,function*(){if(this.log.warn("infoFeeProvider:",JSON.stringify(n,null,2)),this.networkFees=(0,y.nu)(this.networkFees,n),this.networkInfo.supportsEIP1559===!0)try{const s=yield this.ethNetwork.getBaseFeePerGas();if(s==null)return;this.networkFees.default.baseFee=s}catch(s){this.error(`Error fetching base fee: ${JSON.stringify(s)}`)}})).catch(()=>this.warn("Error fetching fees from Info Server")).finally(()=>{this.addToLoop("updateNetworkFees",t).catch(n=>this.warn(`Error setting up updateNetworkFees addToLoop: ${String(n)}`))}),this.addToLoop("updateOptimismRollupParams",tt).catch(()=>{}),this.ethNetwork.needsLoop(),Le(ke.prototype,this,"startEngine").call(this)})}resyncBlockchain(){return M(this,null,function*(){yield this.killEngine(),yield this.clearBlockchainCache(),yield this.startEngine()})}getFreshAddress(){return M(this,null,function*(){const{publicKey:e}=this.walletLocalData;return{publicAddress:/[A-F]/.test(e)?e:S().toChecksumAddress(e.replace("0x",""))}})}getMaxSpendable(e){return M(this,null,function*(){e=(0,ve.s)(e,this.currencyInfo);const{edgeSpendInfo:t,currencyCode:n}=this.makeSpendCheck(e),s=this.getBalance({currencyCode:e.currencyCode}),i=e.spendTargets[0].publicAddress;if(i==null)throw new Error("makeSpend Missing publicAddress");const{contractAddress:o,data:r}=this.getTxParameterInformation(t,n,this.currencyInfo);if(e.currencyCode===this.currencyInfo.currencyCode){e.spendTargets[0].nativeAmount=s;const l=je(e,this.networkFees,this.currencyInfo,this.networkInfo);if(l.useEstimatedGasLimit){const v=(0,c.mul)(l.gasPrice,l.gasLimit),g=(0,c.sub)(s,v),P=yield this.estimateGasLimit({contractAddress:o,estimateGasParams:[{to:o!=null?o:i,from:this.walletLocalData.publicKey,gas:"0xffffff",value:(0,y.X0)(g),data:r},"latest"],miningFees:l,publicAddress:i});l.gasLimit=(0,c.max)(P,l.gasLimit)}const u=(0,c.mul)(l.gasPrice,l.gasLimit);let h="0";if(this.optimismRollupParams!=null){const v=(0,c.sub)(s,u),g={nonce:this.otherData.unconfirmedNextNonce,gasPriceL1Wei:this.optimismRollupParams.gasPriceL1Wei,gasLimit:l.gasLimit,to:i,value:(0,y.X0)(v),chainParams:this.networkInfo.chainParams,dynamicOverhead:this.optimismRollupParams.dynamicOverhead,fixedOverhead:this.optimismRollupParams.fixedOverhead};h=Ue(g)}else if(this.networkInfo.arbitrumRollupParams!=null){const v=this.ethNetwork.networkAdapters.filter(w=>w.config.type==="rpc").map(w=>w.config.servers).flat(),{l1Gas:g,l1GasPrice:P}=yield Je({destinationAddress:i,nodeInterfaceAddress:this.networkInfo.arbitrumRollupParams.nodeInterfaceAddress,rpcServers:v,txData:r!=null?r:"0x"});h=(0,c.mul)((0,c.mul)(g,P),"1.1")}const f=(0,c.add)(u,h),m=(0,c.sub)(s,f);if((0,c.lte)(m,"0"))throw new C.C_;return m}else return e.spendTargets[0].nativeAmount=s,yield this.makeSpend(e),s})}getTxParameterInformation(e,t,n){var s;const{memos:a=[]}=e,{spendTargets:i}=e,o=i[0],{publicAddress:r,nativeAmount:l}=o;let u=((s=a[0])==null?void 0:s.type)==="hex"?a[0].value:void 0;u!=null&&!u.startsWith("0x")&&(u=`0x${u}`);let h;if(t===n.currencyCode)return h=l==null?void 0:(0,y.X0)(l),{data:u,value:h};{let f;if(u!=null)f=r;else{const m=this.getTokenInfo(t);if(m==null||typeof m.contractAddress!="string")throw new Error("Error: Token not supported or invalid contract address");f=m.contractAddress;const v=I().simpleEncode("transfer(address,uint256):(uint256)",r,(0,y.X0)(l!=null?l:"0"));h="0x0",u="0x"+le.from(v).toString("hex")}return{contractAddress:f,data:u,value:h}}}makeSpend(e){return M(this,null,function*(){var t,n,s;e=(0,ve.s)(e,this.currencyInfo);const{edgeSpendInfo:a,currencyCode:i,skipChecks:o}=this.makeSpendCheck(e),{memos:r=[]}=a,{pendingTxs:l=[]}=a;if(a.spendTargets.length!==1)throw new Error("Error: only one output allowed");const u=a.spendTargets[0],{publicAddress:h}=u;let{nativeAmount:f}=u;if(h==null)throw new Error("makeSpend Missing publicAddress");if(f==null)throw new C.$D;if(!S().isValidAddress(h))throw new TypeError(`Invalid ${this.currencyInfo.pluginId} address`);let m;const v=je(a,this.networkFees,this.currencyInfo,this.networkInfo),g=this.networkInfo.supportsEIP1559===!0?2:0,P=yield We(g,v.gasPrice,(t=this.networkFees.default.baseFee)!=null?t:yield this.ethNetwork.getBaseFeePerGas());let w;if(l.length>0){const O=this.walletLocalData.otherData,N=this.walletLocalData.numUnconfirmedSpendTxs>0?O.unconfirmedNextNonce:O.nextNonce;w=(0,c.add)(N,l.length.toString())}const{contractAddress:E,data:A,value:F}=this.getTxParameterInformation(a,i,this.currencyInfo);E==null?m=de(te({from:[this.walletLocalData.publicKey],to:[h]},P),{gas:v.gasLimit,gasUsed:"0",nonceUsed:w,data:A,isFromMakeSpend:!0}):m=de(te({from:[this.walletLocalData.publicKey],to:[E]},P),{gas:v.gasLimit,gasUsed:"0",tokenRecipientAddress:h,nonceUsed:w,data:A,isFromMakeSpend:!0}),v.useEstimatedGasLimit&&(m.gas=yield this.estimateGasLimit({contractAddress:E,estimateGasParams:[{to:E!=null?E:h,from:this.walletLocalData.publicKey,gas:"0xffffff",value:F,data:A},"latest"],miningFees:v,publicAddress:h}));const K=(n=this.walletLocalData.totalBalances[this.currencyInfo.currencyCode])!=null?n:"0";let $=(0,c.mul)(v.gasPrice,m.gas),Q="0",L=null,R="0";if(this.optimismRollupParams!=null){const O={nonce:m.nonceUsed,gasPriceL1Wei:this.optimismRollupParams.gasPriceL1Wei,gasLimit:m.gas,to:m.to[0],value:F,data:m.data,chainParams:this.networkInfo.chainParams,dynamicOverhead:this.optimismRollupParams.dynamicOverhead,fixedOverhead:this.optimismRollupParams.fixedOverhead};R=Ue(O)}else if(this.networkInfo.arbitrumRollupParams!=null){const O=this.ethNetwork.networkAdapters.filter(fe=>fe.config.type==="rpc").map(fe=>fe.config.servers).flat(),{l1Gas:N,l1GasPrice:j}=yield Je({destinationAddress:h,nodeInterfaceAddress:this.networkInfo.arbitrumRollupParams.nodeInterfaceAddress,rpcServers:O,txData:A!=null?A:"0x"});R=(0,c.mul)((0,c.mul)(N,j),"1.1"),m.gas=(0,c.add)(m.gas,N)}if(i===this.currencyInfo.currencyCode){if($=(0,c.add)($,R),Q=(0,c.add)($,f),!o&&(0,c.gt)(Q,K))throw new C.C_;f=(0,c.mul)(Q,"-1")}else{if(L=(0,c.add)($,R),!o&&(0,c.gt)(L,K))throw new C.C_({currencyCode:this.currencyInfo.currencyCode,networkFee:L});const O=(s=this.walletLocalData.totalBalances[i])!=null?s:"0";if(!o&&(0,c.gt)(f,O))throw new C.C_;$="0",f=(0,c.mul)(f,"-1")}const B={blockHeight:0,currencyCode:i,date:0,feeRateUsed:Ie(v.gasPrice,m.gas,void 0,P.minerTip),isSend:f.startsWith("-"),memos:r,nativeAmount:f,networkFee:$,otherParams:m,ourReceiveAddresses:[],signedTx:"",txid:"",walletId:this.walletId};return L&&(B.parentNetworkFee=L),B})}signMessage(e,t,n){return M(this,null,function*(){const s=(0,b.sh)(this.currencyInfo.pluginId)(t);if((0,b.TP)(n.otherParams).typedData){const i=JSON.parse(e);try{return this.utils.signTypedData(i,s)}catch{return(0,x.signTypedData_v4)(le.from(s.privateKey,"hex"),{data:i})}}return this.utils.signMessage(e,s)})}signTx(e,t){return M(this,null,function*(){const n=(0,b.sh)(this.currencyInfo.pluginId)(t),s=(0,y.Xp)(e),a=(0,y.NC)(s.gas);let i;if(e.currencyCode===this.currencyInfo.currencyCode){const A=(0,c.add)(e.nativeAmount,e.networkFee);i=(0,c.mul)("-1",A,16)}else i=(0,c.mul)("-1",e.nativeAmount,16);(0,c.lt)(i,"0")&&(i="0x00");let o=s.nonceUsed;o==null&&(this.walletLocalData.numUnconfirmedSpendTxs!=null&&(0,c.gt)(this.otherData.unconfirmedNextNonce,this.otherData.nextNonce)?(o=this.otherData.unconfirmedNextNonce,this.walletLocalDataDirty=!0):o=this.otherData.nextNonce);const r=(0,y.NC)(o);let l;if(s.data!=null)l=s.data,e.currencyCode!==this.currencyInfo.currencyCode&&(i="0x00");else if(e.currencyCode===this.currencyInfo.currencyCode)l="";else{const A=I().simpleEncode("transfer(address,uint256):(uint256)",s.tokenRecipientAddress,i);l="0x"+le.from(A).toString("hex"),i="0x00"}const{chainParams:u}=this.networkInfo,h=D.Gn.custom(u),f=this.networkInfo.supportsEIP1559===!0?2:0,m=this.networkInfo.supportsEIP1559===!0?{maxFeePerGas:s.gasPrice,maxPriorityFeePerGas:s.minerTip}:{gasPrice:s.gasPrice},v=de(te({nonce:r},m),{gasLimit:a,to:s.to[0],value:i,data:l,type:f}),g=le.from(n.privateKey,"hex"),P=Oe().fromPrivateKey(g);this.warn(`signTx getAddressString ${P.getAddressString()}`);const E=T.nL.fromTxData(v,{common:h}).sign(g);return e.signedTx=(0,y.dg)(E.serialize()),e.txid=(0,y.dg)(E.hash()),e.date=Date.now()/1e3,e.otherParams!=null&&(e.otherParams.nonceUsed=o),this.warn(`signTx
|
|
10
|
+
${(0,y.oX)(e)}`),e})}broadcastTx(e){return M(this,null,function*(){return yield this.ethNetwork.broadcastTx(e),this.warn(`SUCCESS broadcastTx
|
|
11
|
+
${(0,y.oX)(e)}`),e})}accelerate(e){return M(this,null,function*(){var t,n,s,a;const{currencyCode:i}=e,o=(0,p.Vk)(b.Al)(e.otherParams);let r=e.txid,l=yield this.findTransaction(i,(0,y.f0)(r));if(l===-1&&((o==null?void 0:o.replacedTxid)!=null&&o.replacedTxid!==""&&(r=o.replacedTxid,l=yield this.findTransaction(i,(0,y.f0)(r))),l===-1))return null;const u=this.transactionList[i][l],h=(0,p.Vk)(b.Al)(u.otherParams);if(u==null||u.blockHeight!==0||h==null||h.nonceUsed==null||!h.isFromMakeSpend)return null;const f=((t=u.spendTargets)!=null?t:[])[0];if(f==null)return null;const m=this.networkInfo.supportsEIP1559===!0?2:0,v=yield We(m,(0,c.mul)(h.gasPrice,"2"),(n=this.networkFees.default.baseFee)!=null?n:yield this.ethNetwork.getBaseFeePerGas()),g=h.gas,P=de(te(te({},h),v),{gas:g,replacedTxid:r});let{nativeAmount:w}=f,E=(0,c.mul)(v.gasPrice,g),A="0",F;const K=(s=this.walletLocalData.totalBalances[this.currencyInfo.currencyCode])!=null?s:"0";if(i===this.currencyInfo.currencyCode){if(A=(0,c.add)(E,w),(0,c.gt)(A,K))throw new C.C_;w=(0,c.mul)(A,"-1")}else{if(F=E,(0,c.gt)(E,K))throw new C.C_({currencyCode:this.currencyInfo.currencyCode,networkFee:E});const $=(a=this.walletLocalData.totalBalances[i])!=null?a:"0";if((0,c.gt)(w,$))throw new C.C_;E="0",w=(0,c.mul)(w,"-1")}return de(te({},e),{txid:"",feeRateUsed:Ie(v.gasPrice,g,h.gasUsed,v.minerTip),nativeAmount:w,networkFee:E,otherParams:P,parentNetworkFee:F})})}saveTx(e){return M(this,null,function*(){var t;const n=(0,p.Vk)(b.Al)(e.otherParams);if((n==null?void 0:n.replacedTxid)!=null){const{currencyCode:s}=e,a=(0,y.f0)(n.replacedTxid),i=this.findTransaction(s,a);if(i!==-1){const o=this.transactionList[s][i],r=e.metadata,l=de(te({},o),{metadata:r,blockHeight:-1});this.addTransaction(s,l)}}if(e.blockHeight===0){const s=(t=e.otherParams)==null?void 0:t.nonceUsed;s!=null&&(this.otherData.unconfirmedNextNonce=(0,c.add)(s,"1"))}Le(ke.prototype,this,"saveTx").call(this,e)})}}function an(d,e,t,n){return M(this,null,function*(){const{currencyInfo:s,initOptions:a}=d,i=(0,b.VX)(t),o=new ke(d,e,i,(0,b.dp)(a),n,s);return yield o.loadEngine(),o})}var ln=Object.defineProperty,cn=Object.defineProperties,un=Object.getOwnPropertyDescriptors,Ze=Object.getOwnPropertySymbols,hn=Object.prototype.hasOwnProperty,dn=Object.prototype.propertyIsEnumerable,ze=(d,e,t)=>e in d?ln(d,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):d[e]=t,Ye=(d,e)=>{for(var t in e||(e={}))hn.call(e,t)&&ze(d,t,e[t]);if(Ze)for(var t of Ze(e))dn.call(e,t)&&ze(d,t,e[t]);return d},qe=(d,e)=>cn(d,un(e)),q=(d,e,t)=>new Promise((n,s)=>{var a=r=>{try{o(t.next(r))}catch(l){s(l)}},i=r=>{try{o(t.throw(r))}catch(l){s(l)}},o=r=>r.done?n(r.value):Promise.resolve(r.value).then(a,i);o((t=t.apply(d,e)).next())});class et{constructor(e){const{builtinTokens:t,currencyInfo:n,io:s,networkInfo:a,initOptions:i}=e;this.builtinTokens=t,this.currencyInfo=n,this.io=s,this.networkInfo=a,this.initOptions=i}getDisplayPrivateKey(e){return q(this,null,function*(){const{pluginId:t}=this.currencyInfo;return(0,b.sh)(t)(e.keys).privateKey})}getDisplayPublicKey(e){return q(this,null,function*(){const{keys:t}=(0,b.VX)(e);return t.publicKey})}importPrivateKey(e){return q(this,null,function*(){const{pluginId:t}=this.currencyInfo,{pluginMnemonicKeyName:n,pluginRegularKeyName:s}=this.networkInfo;if(/^(0x)?[0-9a-fA-F]{64}$/.test(e)){const a=Z.Buffer.from(e.replace(/^0x/,""),"hex");if(!S().isValidPrivate(a))throw new Error("Invalid private key");const i=a.toString("hex"),o={[s]:i};return this.derivePublicKey({type:`wallet:${t}`,id:"fake",keys:o}),o}else{if(!(0,X.validateMnemonic)(e))throw new Error("Invalid input");const a=yield this._mnemonicToHex(e);return{[n]:e,[s]:a}}})}createPrivateKey(e){return q(this,null,function*(){const{pluginMnemonicKeyName:t,pluginRegularKeyName:n}=this.networkInfo;if(e.replace("wallet:","")!==this.currencyInfo.pluginId)throw new Error("InvalidWalletType");const a=Z.Buffer.from(this.io.random(32)),i=(0,X.entropyToMnemonic)(a),o=yield this._mnemonicToHex(i);return{[t]:i,[n]:o}})}derivePublicKey(e){return q(this,null,function*(){const{pluginId:t}=this.currencyInfo,{hdPathCoinType:n,pluginMnemonicKeyName:s,pluginRegularKeyName:a}=this.networkInfo;if(e.type!==`wallet:${t}`)throw new Error("Invalid wallet type");let i;if(e.keys[s]!=null){const o=(0,X.mnemonicToSeedSync)(e.keys[s]),r=se().fromMasterSeed(o),l=`m/44'/${n}'/0'/0`,f=r.derivePath(`${l}/0`).getWallet().getPublicKey(),m=S().pubToAddress(f).toString("hex");i=S().toChecksumAddress(m)}else{const o=Z.Buffer.from(e.keys[a].replace(/^0x/,""),"hex");if(!S().isValidPrivate(o))throw new Error("Invalid private key");i=`0x${S().privateToAddress(o).toString("hex")}`}if(!S().isValidAddress(i))throw new Error("Invalid address");return{publicKey:i}})}_mnemonicToHex(e){return q(this,null,function*(){const{hdPathCoinType:t}=this.networkInfo,n=se().fromMasterSeed((0,X.mnemonicToSeedSync)(e)),s=`m/44'/${t}'/0'/0`;return n.derivePath(`${s}/0`).getWallet().getPrivateKeyString().replace(/^0x/,"")})}parseUri(e,t,n){return q(this,null,function*(){var s,a,i,o,r;const l={};this.networkInfo.uriNetworks.forEach(g=>{l[g]=!0});const{parsedUri:u,edgeParsedUri:h}=(0,_.k)(this.currencyInfo,e,l,t||this.currencyInfo.currencyCode,n);let f="";h.publicAddress&&(f=h.publicAddress,h.publicAddress=h.publicAddress.toLowerCase());let[m,v]=f.split("-");if(v||(v=m,m="pay"),f=v,/[A-F]/.test(f)&&!S().isValidChecksumAddress(f))throw new Error("InvalidPublicAddressError");if(f=f.toLowerCase(),!S().isValidAddress(f||""))throw new Error("InvalidPublicAddressError");if(m==="token"||m==="token_info"){if(!u.query)throw new Error("InvalidUriError");const g=(s=u.query.symbol)!=null?s:"SYM";if(g.length<2||g.length>5)throw new Error("Wrong Token symbol");const P=(a=u.query.name)!=null?a:g,w=(i=u.query.decimals)!=null?i:"18";let E="1000000000000000000";const A=parseInt(w);if(A<0||A>18)throw new Error("Wrong number of decimals");E="1"+"0".repeat(A);const F=(o=u.query.type)!=null?o:this.networkInfo.ercTokenStandard;return{token:{currencyCode:g,contractAddress:v.toLowerCase(),currencyName:P,multiplier:E,denominations:[{name:g,multiplier:E}],type:F.toUpperCase()}}}if(m==="pay"){const g=f,P=u.pathname.split("/")[1],w=u.query;switch(P){case"transfer":{const E=(r=w.address)!=null?r:"",A=g!=null?g:"",F=w.uint256!=null?(0,y.EE)(w.uint256):h.nativeAmount,K=this.currencyInfo.metaTokens.find($=>$.contractAddress===A);if(t!=null&&(K==null||K.currencyCode!==t))throw new Error("InternalErrorInvalidCurrencyCode");if(!S().isValidAddress(E))throw new Error("InvalidPublicAddressError");if(!S().isValidAddress(A))throw new Error("InvalidContractAddressError");return qe(Ye({},h),{currencyCode:K==null?void 0:K.currencyCode,nativeAmount:F,publicAddress:E})}case void 0:{const E=g,A=w.value!=null?(0,y.EE)(w.value):h.nativeAmount;return qe(Ye({},h),{publicAddress:E,nativeAmount:A})}default:throw new Error("UnsupportedContractFunction")}}throw new Error("InvalidUriError")})}encodeUri(e){return q(this,arguments,function*(t,n=[]){const{publicAddress:s,nativeAmount:a,currencyCode:i}=t;if(!S().isValidAddress(s))throw new Error("InvalidPublicAddressError");let r;if(typeof a=="string"){const u=(0,y.Qs)(i!=null?i:this.currencyInfo.currencyCode,this.currencyInfo,n);if(u==null)throw new Error("InternalErrorInvalidCurrencyCode");r=(0,c.div)(a,u.multiplier,18)}return(0,_.Q)(t,this.currencyInfo.pluginId,r)})}getSplittableTypes(e){return Object.keys(G.s).map(t=>`wallet:${t}`)}getTokenId(e){return q(this,null,function*(){(0,H.Rp)(e);const t=(0,H.Oj)(e.networkLocation);if(t==null||!S().isValidAddress(t.contractAddress))throw new Error("ErrorInvalidContractAddress");return t.contractAddress.toLowerCase().replace(/^0x/,"")})}resolveEnsName(e){return q(this,null,function*(){const{networkAdapterConfigs:t}=this.networkInfo,n=t.find(i=>i.type==="rpc");if(n==null)throw new Error("resolveEnsName: No RpcAdapterConfig");const a=n.servers.map(i=>new ee.r(i,1));return yield(0,y.a7)({func:i=>q(this,null,function*(){return yield i.resolveName(e)}),providers:a})})}}function fn(d){return q(this,null,function*(){return new et(d)})}},77258:function(Ee,ne,k){"use strict";k.d(ne,{V7:function(){return y}});var c=k(82448),X=(G,b,D)=>new Promise((T,p)=>{var C=I=>{try{U(D.next(I))}catch(oe){p(oe)}},x=I=>{try{U(D.throw(I))}catch(oe){p(oe)}},U=I=>I.done?T(I.value):Promise.resolve(I.value).then(C,x);U((D=D.apply(G,b)).next())});const Z=(0,c.su)({statusCode:c.mH,message:c.XC,error:c.XC}),z=G=>(0,c.$e)((0,c._C)(Z,G)),S=(0,c.su)({cid:c.XC,from:c.XC,height:c.mH,method:c.XC,nonce:c.mH,receipt:(0,c.su)({exitCode:c.mH}),timestamp:c.mH,to:c.XC,value:c.XC}),ce=(0,c.su)({cid:c.XC,height:c.mH,timestamp:c.mH,from:c.XC,to:c.XC,value:c.XC,gasLimit:c.mH,gasFeeCap:c.XC,gasPremium:c.XC,receipt:(0,c.su)({exitCode:c.mH,return:c.XC,gasUsed:c.mH}),baseFee:c.XC,fee:(0,c.su)({baseFeeBurn:c.XC,overEstimationBurn:c.XC,minerPenalty:c.XC,minerTip:c.XC,refund:c.XC}),transfers:(0,c._2)((0,c.su)({from:c.XC,fromId:c.XC,to:c.XC,toId:c.XC,value:c.XC,type:c.XC}))}),se=(0,c.su)({from:c.XC,height:c.mH,message:c.XC,timestamp:c.mH,to:c.XC,type:c.XC,value:c.XC}),ee=(0,c.su)({messages:(0,c._2)(S),totalCount:c.mH}),H=ce,_=(0,c.su)({transfers:(0,c._2)(se),totalCount:c.mH});class y{constructor(b,D){this.baseUrl=b,this.fetch=D}getAccountMessages(b,D,T=20){return X(this,null,function*(){const p=new URL(`${this.baseUrl}/address/${b}/messages`),C=new URLSearchParams({page:D.toString(),pageSize:T.toString()});p.search=C.toString();const U=yield(yield this.fetch(p.toString(),{method:"GET",headers:{"content-type":"application/json"}})).text(),I=z(ee)(U);if("error"in I)throw new Error(`Error response code ${I.statusCode}: ${I.message} ${I.error}`);return I})}getAccountTransfers(b,D,T=20){return X(this,null,function*(){const p=new URL(`${this.baseUrl}/address/${b}/transfers`),C=new URLSearchParams({page:D.toString(),pageSize:T.toString()});p.search=C.toString();const U=yield(yield this.fetch(p.toString(),{method:"GET",headers:{"content-type":"application/json"}})).text(),I=z(_)(U);if("error"in I)throw new Error(`Error response code ${I.statusCode}: ${I.message} ${I.error}`);return I})}getMessageDetails(b){return X(this,null,function*(){const T=yield(yield this.fetch(`${this.baseUrl}/message/${b}`,{method:"GET",headers:{"content-type":"application/json"}})).text(),p=z(H)(T);if("error"in p)throw new Error(`Error response code ${p.statusCode}: ${p.message} ${p.error}`);return p})}}},44613:function(Ee,ne,k){"use strict";k.d(ne,{_E:function(){return _},dh:function(){return D},wI:function(){return y}});var c=k(68142),X=k.n(c),Z=k(79325),z=k(3666),S=k.n(z),ce=k(76714),se=k(48764).Buffer;const{utils:{crypto:{decode58Check:ee,getBase58CheckAddress:H}}}=S(),_=T=>{const p=ee(T);return Z.YU.stringify(p)},y=T=>{const p=Z.YU.parse(T);return H(Array.from(p))},G="a9059cbb",b=T=>{if(!T.startsWith(G))throw new Error("Not a TRC20 data payload");const p=T.replace(G,""),C=`41${p.substring(24,64)}`,x=y(C),U=p.substring(64,128),I=hexToDecimal(U);return[x,I]},D=(T,p)=>{const C=_(T).replace(/^(41)/,"0x"),x=X().simpleEncode("transfer(address,uint256):(uint256)",C,p);return se.from(x).toString("hex")}},89214:function(){},52361:function(){},94616:function(){},88924:function(){},55024:function(){}}]);
|
|
@@ -745,93 +745,113 @@ var _feeProviders = require('./fees/feeProviders');
|
|
|
745
745
|
if (publicAddress == null) {
|
|
746
746
|
throw new Error('makeSpend Missing publicAddress')
|
|
747
747
|
}
|
|
748
|
-
const { contractAddress, data
|
|
748
|
+
const { contractAddress, data } = this.getTxParameterInformation(
|
|
749
749
|
edgeSpendInfo,
|
|
750
750
|
currencyCode,
|
|
751
751
|
this.currencyInfo
|
|
752
752
|
)
|
|
753
753
|
|
|
754
|
+
// For mainnet currency, the fee can scale with the amount sent so we use
|
|
755
|
+
// an algorithm to calculate the max spendable amount which subtracts fees
|
|
756
|
+
// from the balance and returns the result:
|
|
754
757
|
if (spendInfo.currencyCode === this.currencyInfo.currencyCode) {
|
|
755
|
-
//
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
const
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
rpcServers,
|
|
816
|
-
txData: _nullishCoalesce(data, () => ( '0x'))
|
|
817
|
-
})
|
|
818
|
-
l1Fee = _biggystring.mul.call(void 0, _biggystring.mul.call(void 0, l1Gas, l1GasPrice), '1.1')
|
|
819
|
-
}
|
|
820
|
-
const totalAmount = _biggystring.add.call(void 0, _biggystring.add.call(void 0, mid, fee), l1Fee)
|
|
821
|
-
if (_biggystring.gt.call(void 0, totalAmount, balance)) {
|
|
822
|
-
return await getMax(min, mid)
|
|
823
|
-
} else {
|
|
824
|
-
return await getMax(mid, max)
|
|
758
|
+
// Use the balance as the initial amount for the spend info before calculating the fees:
|
|
759
|
+
spendInfo.spendTargets[0].nativeAmount = balance
|
|
760
|
+
|
|
761
|
+
// Use our calcMiningFee function to calculate the fees:
|
|
762
|
+
const miningFees = _ethMiningFees.calcMiningFees.call(void 0,
|
|
763
|
+
spendInfo,
|
|
764
|
+
this.networkFees,
|
|
765
|
+
this.currencyInfo,
|
|
766
|
+
this.networkInfo
|
|
767
|
+
)
|
|
768
|
+
|
|
769
|
+
// If our results require a call to the RPC server to estimate the gas limit, then we
|
|
770
|
+
// need to do that now:
|
|
771
|
+
if (miningFees.useEstimatedGasLimit) {
|
|
772
|
+
// Determine the preliminary fee amount and subtract that from the balance
|
|
773
|
+
// in order to avoid an insufficient funds error response from the RPC call.
|
|
774
|
+
const preliminaryFee = _biggystring.mul.call(void 0, miningFees.gasPrice, miningFees.gasLimit)
|
|
775
|
+
const preliminaryAmount = _biggystring.sub.call(void 0, balance, preliminaryFee)
|
|
776
|
+
|
|
777
|
+
// Estimate the gas limit:
|
|
778
|
+
const estimatedGasLimit = await this.estimateGasLimit({
|
|
779
|
+
contractAddress,
|
|
780
|
+
estimateGasParams: [
|
|
781
|
+
{
|
|
782
|
+
to: _nullishCoalesce(contractAddress, () => ( publicAddress)),
|
|
783
|
+
from: this.walletLocalData.publicKey,
|
|
784
|
+
gas: '0xffffff',
|
|
785
|
+
value: _utils.decimalToHex.call(void 0, preliminaryAmount),
|
|
786
|
+
data
|
|
787
|
+
},
|
|
788
|
+
'latest'
|
|
789
|
+
],
|
|
790
|
+
miningFees,
|
|
791
|
+
publicAddress
|
|
792
|
+
})
|
|
793
|
+
|
|
794
|
+
// Update the gasLimit field in our miningFees object to use the
|
|
795
|
+
// largest determined limit:
|
|
796
|
+
miningFees.gasLimit = _biggystring.max.call(void 0, estimatedGasLimit, miningFees.gasLimit)
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
// Calculate the primary network fee:
|
|
800
|
+
const primaryNetworkFee = _biggystring.mul.call(void 0, miningFees.gasPrice, miningFees.gasLimit)
|
|
801
|
+
|
|
802
|
+
// Get the L1 fee if applicable (for some rollup chains):
|
|
803
|
+
let rollupFee = '0'
|
|
804
|
+
if (this.optimismRollupParams != null) {
|
|
805
|
+
// We'll use this as our baseline case for the maximum spendable amount
|
|
806
|
+
// when calculating the rollup fees:
|
|
807
|
+
const maxSpendableBeforeRollupFee = _biggystring.sub.call(void 0, balance, primaryNetworkFee)
|
|
808
|
+
|
|
809
|
+
const txData = {
|
|
810
|
+
nonce: this.otherData.unconfirmedNextNonce,
|
|
811
|
+
gasPriceL1Wei: this.optimismRollupParams.gasPriceL1Wei,
|
|
812
|
+
gasLimit: miningFees.gasLimit,
|
|
813
|
+
to: publicAddress,
|
|
814
|
+
value: _utils.decimalToHex.call(void 0, maxSpendableBeforeRollupFee),
|
|
815
|
+
chainParams: this.networkInfo.chainParams,
|
|
816
|
+
dynamicOverhead: this.optimismRollupParams.dynamicOverhead,
|
|
817
|
+
fixedOverhead: this.optimismRollupParams.fixedOverhead
|
|
825
818
|
}
|
|
819
|
+
rollupFee = _ethMiningFees.calcOptimismRollupFees.call(void 0, txData)
|
|
820
|
+
} else if (this.networkInfo.arbitrumRollupParams != null) {
|
|
821
|
+
const rpcServers = this.ethNetwork.networkAdapters
|
|
822
|
+
.filter(adapter => adapter.config.type === 'rpc')
|
|
823
|
+
.map(adapter => adapter.config.servers)
|
|
824
|
+
.flat()
|
|
825
|
+
const { l1Gas, l1GasPrice } = await _ethMiningFees.calcArbitrumRollupFees.call(void 0, {
|
|
826
|
+
destinationAddress: publicAddress,
|
|
827
|
+
nodeInterfaceAddress:
|
|
828
|
+
this.networkInfo.arbitrumRollupParams.nodeInterfaceAddress,
|
|
829
|
+
rpcServers,
|
|
830
|
+
txData: _nullishCoalesce(data, () => ( '0x'))
|
|
831
|
+
})
|
|
832
|
+
rollupFee = _biggystring.mul.call(void 0, _biggystring.mul.call(void 0, l1Gas, l1GasPrice), '1.1')
|
|
826
833
|
}
|
|
827
834
|
|
|
828
|
-
|
|
835
|
+
// Update total fee:
|
|
836
|
+
const totalFee = _biggystring.add.call(void 0, primaryNetworkFee, rollupFee)
|
|
837
|
+
|
|
838
|
+
// Calculate the max spendable amount which accounts for all fees:
|
|
839
|
+
const maxSpendable = _biggystring.sub.call(void 0, balance, totalFee)
|
|
840
|
+
|
|
841
|
+
if (_biggystring.lte.call(void 0, maxSpendable, '0')) {
|
|
842
|
+
throw new (0, _types.InsufficientFundsError)()
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
return maxSpendable
|
|
829
846
|
} else {
|
|
847
|
+
// For tokens, the max spendable amount is the same as the balance:
|
|
830
848
|
spendInfo.spendTargets[0].nativeAmount = balance
|
|
849
|
+
|
|
850
|
+
// Call makeSpend to invoke balance checks on the primary currency:
|
|
831
851
|
await this.makeSpend(spendInfo)
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
852
|
+
|
|
853
|
+
// Return the balance as the max spendable amount:
|
|
854
|
+
return balance
|
|
835
855
|
}
|
|
836
856
|
}
|
|
837
857
|
|
|
@@ -149,7 +149,7 @@ var _types3 = require('./types');
|
|
|
149
149
|
)}`
|
|
150
150
|
)
|
|
151
151
|
throw new Error(
|
|
152
|
-
`Successful ${method} response object included an error`
|
|
152
|
+
`Successful ${method} response object included an error: ${result.error.message}`
|
|
153
153
|
)
|
|
154
154
|
}
|
|
155
155
|
return { server: _urlparse2.default.call(void 0, baseUrl).hostname, result }
|