edge-currency-plugins 3.8.2 → 3.8.3

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.
@@ -58,14 +58,14 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
58
58
  `],wif:[239],legacyXPriv:[70615956],legacyXPub:[70617039],wrappedSegwitXPriv:[71978536],wrappedSegwitXPub:[71979618],segwitXPriv:[73341116],segwitXPub:[73342198],pubkeyHash:[111],scriptHash:[196],bech32:["btg"]}},yu={currencyInfo:gu,engineInfo:mu,coinInfo:Fn};var zi=Object.defineProperty,Za=Object.defineProperties,bu=Object.getOwnPropertyDescriptors,qo=Object.getOwnPropertySymbols,wu=Object.prototype.hasOwnProperty,xu=Object.prototype.propertyIsEnumerable,Ya=(T,B,j)=>B in T?zi(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Eu=(T,B)=>{for(var j in B||(B={}))wu.call(B,j)&&Ya(T,j,B[j]);if(qo)for(var j of qo(B))xu.call(B,j)&&Ya(T,j,B[j]);return T},Mu=(T,B)=>Za(T,bu(B));const bn=Mu(Eu({assetDisplayName:"Bitcoin SV",chainDisplayName:"Bitcoin SV",currencyCode:"BSV",customFeeTemplate:Ze,memoOptions:it,pluginId:"bitcoinsv",walletType:"wallet:bitcoinsv",blockExplorer:"https://whatsonchain.com/block/%s",addressExplorer:"https://whatsonchain.com/address/%s",transactionExplorer:"https://whatsonchain.com/tx/%s",denominations:[{name:"BSV",multiplier:"100000000",symbol:"\u20BF"},{name:"mBSV",multiplier:"100000",symbol:"m\u20BF"},{name:"cash",multiplier:"100",symbol:"\u0180"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://blockbook.siftbitcoin.com:9146"],enableCustomServers:!1},displayName:"Bitcoin SV",metaTokens:[]}),ji={formats:["bip44","bip32"],uriPrefix:"bitcoin",gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"20",lowFee:"3",standardFeeLow:"5",standardFeeHigh:"10",standardFeeLowAmount:"1000000",standardFeeHighAmount:"65000000",maximumFeeRate:nt(bn,33.61)},asBlockbookAddress:k(T=>{const B=p(T);try{const j=B.replace("bitcoincash:",""),le=Rr({address:j,coin:"bitcoincash"});return Xn({scriptPubkey:le,coin:"bitcoinsv",addressType:kt.p2pkh}).address}catch{return B}},T=>T)},$a={name:"bitcoinsv",segwit:!1,sighash:ze.iL.BCH_SIGHASH_ALL,coinType:236,prefixes:{messagePrefix:[`Bitcoin Signed Message:
59
59
  `],wif:[128],legacyXPriv:[76066276],legacyXPub:[76067358],pubkeyHash:[0],scriptHash:[5]}},mo={currencyInfo:bn,engineInfo:ji,coinInfo:$a};var Ja=Object.defineProperty,Su=Object.defineProperties,ku=Object.getOwnPropertyDescriptors,yi=Object.getOwnPropertySymbols,fn=Object.prototype.hasOwnProperty,yo=Object.prototype.propertyIsEnumerable,Wn=(T,B,j)=>B in T?Ja(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Xo=(T,B)=>{for(var j in B||(B={}))fn.call(B,j)&&Wn(T,j,B[j]);if(yi)for(var j of yi(B))yo.call(B,j)&&Wn(T,j,B[j]);return T},Ki=(T,B)=>Su(T,ku(B));const Qa={currencyInfo:Ki(Xo({assetDisplayName:"Bitcoin Testnet",chainDisplayName:"Bitcoin Testnet",canReplaceByFee:!0,currencyCode:"TESTBTC",customFeeTemplate:Ze,memoOptions:it,pluginId:"bitcointestnet",walletType:"wallet:bitcointestnet",blockExplorer:"https://blockchair.com/bitcoin/testnet/block/%s",addressExplorer:"https://blockchair.com/bitcoin/testnet/address/%s",transactionExplorer:"https://blockchair.com/bitcoin/testnet/transaction/%s",denominations:[{name:"TESTBTC",multiplier:"100000000",symbol:"\u20BF"},{name:"mTESTBTC",multiplier:"100000",symbol:"m\u20BF"},{name:"bits",multiplier:"100",symbol:"\u0180"},{name:"sats",multiplier:"1",symbol:"s"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://tbtc1.trezor.io","wss://tbtc2.trezor.io"],enableCustomServers:!1},displayName:"Bitcoin Testnet",metaTokens:[]}),engineInfo:{formats:["bip49","bip84","bip44","bip32"],forks:["bitcoincash","bitcoingold"],gapLimit:25,feeUpdateInterval:6e4,mempoolSpaceFeeInfoServer:"https://mempool.space/api/v1/fees/recommended",defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"150",lowFee:"20",standardFeeLow:"50",standardFeeHigh:"100",standardFeeLowAmount:"173200",standardFeeHighAmount:"8670000"}},coinInfo:{name:"bitcointestnet",segwit:!0,coinType:1,prefixes:{messagePrefix:[`Bitcoin Signed Message:
60
60
  `],wif:[239],legacyXPriv:[70615956],legacyXPub:[70617039],wrappedSegwitXPriv:[71978536],wrappedSegwitXPub:[71979618],segwitXPriv:[73341116],segwitXPub:[73342198],pubkeyHash:[111],scriptHash:[196],bech32:["tb"]}}};var es=Object.defineProperty,ts=Object.defineProperties,rs=Object.getOwnPropertyDescriptors,bo=Object.getOwnPropertySymbols,ns=Object.prototype.hasOwnProperty,_u=Object.prototype.propertyIsEnumerable,Wi=(T,B,j)=>B in T?es(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Au=(T,B)=>{for(var j in B||(B={}))ns.call(B,j)&&Wi(T,j,B[j]);if(bo)for(var j of bo(B))_u.call(B,j)&&Wi(T,j,B[j]);return T},is=(T,B)=>ts(T,rs(B));const Tu={currencyInfo:is(Au({assetDisplayName:"Bitcoin Testnet4",chainDisplayName:"Bitcoin Testnet4",canReplaceByFee:!0,currencyCode:"TESTBTC",customFeeTemplate:Ze,memoOptions:it,pluginId:"bitcointestnet4",walletType:"wallet:bitcointestnet4",blockExplorer:"https://mempool.space/testnet4/block/%s",addressExplorer:"https://mempool.space/testnet4/address/%s",transactionExplorer:"https://mempool.space/testnet4/tx/%s",denominations:[{name:"TESTBTC",multiplier:"100000000",symbol:"\u20BF"},{name:"mTESTBTC",multiplier:"100000",symbol:"m\u20BF"},{name:"bits",multiplier:"100",symbol:"\u0180"},{name:"sats",multiplier:"1",symbol:"s"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://blockbook.tbtc-1.zelcore.io","wss://testnet4-explorer.wakiyamap.dev"],enableCustomServers:!1},displayName:"Bitcoin Testnet4",metaTokens:[]}),engineInfo:{formats:["bip49","bip84","bip44","bip32"],forks:["bitcoincash","bitcoingold"],gapLimit:25,feeUpdateInterval:6e4,mempoolSpaceFeeInfoServer:"https://mempool.space/testnet4/api/v1/fees/recommended",defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"150",lowFee:"20",standardFeeLow:"50",standardFeeHigh:"100",standardFeeLowAmount:"173200",standardFeeHighAmount:"8670000"}},coinInfo:{name:"bitcointestnet4",segwit:!0,coinType:1,prefixes:{messagePrefix:[`Bitcoin Signed Message:
61
- `],wif:[239],legacyXPriv:[70615956],legacyXPub:[70617039],wrappedSegwitXPriv:[71978536],wrappedSegwitXPub:[71979618],segwitXPriv:[73341116],segwitXPub:[73342198],pubkeyHash:[111],scriptHash:[196],bech32:["tb"]}}};var Pu=Object.defineProperty,Ou=Object.defineProperties,os=Object.getOwnPropertyDescriptors,wo=Object.getOwnPropertySymbols,as=Object.prototype.hasOwnProperty,ss=Object.prototype.propertyIsEnumerable,fs=(T,B,j)=>B in T?Pu(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Bu=(T,B)=>{for(var j in B||(B={}))as.call(B,j)&&fs(T,j,B[j]);if(wo)for(var j of wo(B))ss.call(B,j)&&fs(T,j,B[j]);return T},Cu=(T,B)=>Ou(T,os(B));const Nn=Cu(Bu({assetDisplayName:"Dash",chainDisplayName:"Dash",currencyCode:"DASH",customFeeTemplate:Ze,memoOptions:it,pluginId:"dash",walletType:"wallet:dash",addressExplorer:"https://blockchair.com/dash/address/%s?from=edgeapp",blockExplorer:"https://blockchair.com/dash/block/%s?from=edgeapp",transactionExplorer:"https://blockchair.com/dash/transaction/%s?from=edgeapp",denominations:[{name:"DASH",multiplier:"100000000",symbol:"\xD0"},{name:"mDASH",multiplier:"100000",symbol:"m\xD0"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://dash1.trezor.io","wss://dash2.trezor.io","wss://dash3.trezor.io","wss://dash4.trezor.io","wss://dash5.trezor.io","wss://dash-wusa1.edge.app","wss://dash.nownodes.io/wss/%{nowNodesApiKey}"],enableCustomServers:!1},displayName:"Dash",metaTokens:[]}),Zo={serverConfigs:[{type:"blockbook-nownode",uris:["https://dash-wusa1.edge.app"]},{type:"blockbook-nownode",uris:["https://dashbook.nownodes.io"]}],formats:["bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"300",lowFee:"100",standardFeeLow:"150",standardFeeHigh:"200",standardFeeLowAmount:"20000000",standardFeeHighAmount:"981000000",maximumFeeRate:nt(Nn,25.8)},txSpecificHandling:(T,B)=>{const j=E({instantlock:b(S)}),le=x(j)(B);return(le==null?void 0:le.instantlock)===!0&&(T.confirmations="confirmed"),T}},Eo={currencyInfo:Nn,engineInfo:Zo,coinInfo:{name:"dash",segwit:!1,coinType:5,prefixes:{messagePrefix:["unused"],wif:[204],legacyXPriv:[50221816],legacyXPub:[50221772],pubkeyHash:[76],scriptHash:[16]}}};var Sn=Object.defineProperty,Ru=Object.defineProperties,us=Object.getOwnPropertyDescriptors,wi=Object.getOwnPropertySymbols,xi=Object.prototype.hasOwnProperty,Yo=Object.prototype.propertyIsEnumerable,$o=(T,B,j)=>B in T?Sn(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Fu=(T,B)=>{for(var j in B||(B={}))xi.call(B,j)&&$o(T,j,B[j]);if(wi)for(var j of wi(B))Yo.call(B,j)&&$o(T,j,B[j]);return T},Jo=(T,B)=>Ru(T,us(B));const Gi=Jo(Fu({assetDisplayName:"DigiByte",chainDisplayName:"DigiByte",currencyCode:"DGB",customFeeTemplate:Ze,memoOptions:it,pluginId:"digibyte",walletType:"wallet:digibyte",addressExplorer:"https://digiexplorer.info/address/%s",blockExplorer:"https://digiexplorer.info/block/%s",transactionExplorer:"https://digiexplorer.info/tx/%s",denominations:[{name:"DGB",multiplier:"100000000",symbol:"\u018A"},{name:"mDGB",multiplier:"100000",symbol:"m\u018A"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://dgb1.trezor.io","wss://dgb2.trezor.io","wss://dgbbook.nownodes.io/wss/%{nowNodesApiKey}"],enableCustomServers:!1},displayName:"DigiByte",metaTokens:[]}),Nu={serverConfigs:[{type:"blockbook-nownode",uris:["https://dgbbook.nownodes.io"]}],formats:["bip49","bip84","bip44","bip32"],forks:[],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"150",lowFee:"20",standardFeeLow:"50",standardFeeHigh:"100",standardFeeLowAmount:"173200",standardFeeHighAmount:"8670000",maximumFeeRate:nt(Gi,.006176)}},cs={currencyInfo:Gi,engineInfo:Nu,coinInfo:{name:"digibyte",segwit:!0,coinType:20,prefixes:{messagePrefix:[`Digibyte Signed Message:
61
+ `],wif:[239],legacyXPriv:[70615956],legacyXPub:[70617039],wrappedSegwitXPriv:[71978536],wrappedSegwitXPub:[71979618],segwitXPriv:[73341116],segwitXPub:[73342198],pubkeyHash:[111],scriptHash:[196],bech32:["tb"]}}};var Pu=Object.defineProperty,Ou=Object.defineProperties,os=Object.getOwnPropertyDescriptors,wo=Object.getOwnPropertySymbols,as=Object.prototype.hasOwnProperty,ss=Object.prototype.propertyIsEnumerable,fs=(T,B,j)=>B in T?Pu(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Bu=(T,B)=>{for(var j in B||(B={}))as.call(B,j)&&fs(T,j,B[j]);if(wo)for(var j of wo(B))ss.call(B,j)&&fs(T,j,B[j]);return T},Cu=(T,B)=>Ou(T,os(B));const Nn=Cu(Bu({assetDisplayName:"Dash",chainDisplayName:"Dash",currencyCode:"DASH",customFeeTemplate:Ze,memoOptions:it,pluginId:"dash",walletType:"wallet:dash",addressExplorer:"https://blockchair.com/dash/address/%s?from=edgeapp",blockExplorer:"https://blockchair.com/dash/block/%s?from=edgeapp",transactionExplorer:"https://blockchair.com/dash/transaction/%s?from=edgeapp",denominations:[{name:"DASH",multiplier:"100000000",symbol:"\xD0"},{name:"mDASH",multiplier:"100000",symbol:"m\xD0"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://dash1.trezor.io","wss://dash2.trezor.io","wss://dash3.trezor.io","wss://dash4.trezor.io","wss://dash5.trezor.io","wss://dash-eusa1.edge.app","wss://dash.nownodes.io/wss/%{nowNodesApiKey}"],enableCustomServers:!1},displayName:"Dash",metaTokens:[]}),Zo={serverConfigs:[{type:"blockbook-nownode",uris:["https://dash-wusa1.edge.app"]},{type:"blockbook-nownode",uris:["https://dashbook.nownodes.io"]}],formats:["bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"300",lowFee:"100",standardFeeLow:"150",standardFeeHigh:"200",standardFeeLowAmount:"20000000",standardFeeHighAmount:"981000000",maximumFeeRate:nt(Nn,25.8)},txSpecificHandling:(T,B)=>{const j=E({instantlock:b(S)}),le=x(j)(B);return(le==null?void 0:le.instantlock)===!0&&(T.confirmations="confirmed"),T}},Eo={currencyInfo:Nn,engineInfo:Zo,coinInfo:{name:"dash",segwit:!1,coinType:5,prefixes:{messagePrefix:["unused"],wif:[204],legacyXPriv:[50221816],legacyXPub:[50221772],pubkeyHash:[76],scriptHash:[16]}}};var Sn=Object.defineProperty,Ru=Object.defineProperties,us=Object.getOwnPropertyDescriptors,wi=Object.getOwnPropertySymbols,xi=Object.prototype.hasOwnProperty,Yo=Object.prototype.propertyIsEnumerable,$o=(T,B,j)=>B in T?Sn(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Fu=(T,B)=>{for(var j in B||(B={}))xi.call(B,j)&&$o(T,j,B[j]);if(wi)for(var j of wi(B))Yo.call(B,j)&&$o(T,j,B[j]);return T},Jo=(T,B)=>Ru(T,us(B));const Gi=Jo(Fu({assetDisplayName:"DigiByte",chainDisplayName:"DigiByte",currencyCode:"DGB",customFeeTemplate:Ze,memoOptions:it,pluginId:"digibyte",walletType:"wallet:digibyte",addressExplorer:"https://digiexplorer.info/address/%s",blockExplorer:"https://digiexplorer.info/block/%s",transactionExplorer:"https://digiexplorer.info/tx/%s",denominations:[{name:"DGB",multiplier:"100000000",symbol:"\u018A"},{name:"mDGB",multiplier:"100000",symbol:"m\u018A"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://dgb1.trezor.io","wss://dgb2.trezor.io","wss://dgbbook.nownodes.io/wss/%{nowNodesApiKey}"],enableCustomServers:!1},displayName:"DigiByte",metaTokens:[]}),Nu={serverConfigs:[{type:"blockbook-nownode",uris:["https://dgbbook.nownodes.io"]}],formats:["bip49","bip84","bip44","bip32"],forks:[],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"150",lowFee:"20",standardFeeLow:"50",standardFeeHigh:"100",standardFeeLowAmount:"173200",standardFeeHighAmount:"8670000",maximumFeeRate:nt(Gi,.006176)}},cs={currencyInfo:Gi,engineInfo:Nu,coinInfo:{name:"digibyte",segwit:!0,coinType:20,prefixes:{messagePrefix:[`Digibyte Signed Message:
62
62
  `],wif:[128,158],legacyXPriv:[76066276],legacyXPub:[76067358],wrappedSegwitXPriv:[77428856],wrappedSegwitXPub:[77429938],segwitXPriv:[78791436],segwitXPub:[78792518],pubkeyHash:[30],scriptHash:[63,5],bech32:["dgb"]}}};var Qo=gr(8287).Buffer;const fi=4,ea=1,Mo=72,Du=33,Pr=22,ta=36,Uu=4,kn=T=>T<253?1:T<=65535?3:T<=4294967295?5:9,ra=T=>kn(T)+T,Hu=(()=>{const T=ra(ea+Mo+ea+Du),B=(T+kn(1))/fi,j=ra(Pr),le=B+j;return{p2pkh:T,p2wpkh:B,p2wpkhp2sh:le,replayprotection:284,replayprotectionp2sh:284}})();function na(T){const B=Hu[T.scriptType];if(B==null)throw new Error(`${T.scriptType} script type not supported, yet`);return ta+B+Uu}function ia(T){const j=kn(T.script.length),le=T.script.length;return 8+j+le}function zu(T,B){return ia(T)*B}function ls(T){return T.reduce((B,j)=>((j.scriptType===Ft.p2wsh||j.scriptType===Ft.p2wpkhp2sh||j.scriptType===Ft.p2wpkh)&&B++,B),0)}function ui(T,B){const le=kn(T.length),xe=kn(B.length);let be=4+le+xe+4;ls(T)>0&&(be+=Math.ceil(2/fi));const Ie=T.reduce((Ge,Ve)=>Ge+na(Ve),0),ke=B.reduce((Ge,Ve)=>Ge+ia(Ve),0);return be+Ie+ke}const ju=T=>ze.ZX.fromHex(T).virtualSize();function Vi(T){return isFinite(T)?Math.floor(T)!==T?NaN:T<0?NaN:T:NaN}function v0(T){return T.reduce((B,j)=>B+(isFinite(j.value)?j.value:0),0)}function Ln(T){return T.reduce((B,j)=>B+Vi(j.value),0)}function oa(T,B,j,le){const xe=Ln(T),Re=Ln(B);let be=ui(T,B),Me=Math.ceil(j*be);const Ie=xe-(Re+Me),ke={script:Qo.from(le,"hex"),scriptPubkey:Qo.from(le,"hex"),value:Ie},Ge=ia(ke);be+=Ge;const Ve=j*Ge;ke.value-=Ve;let st=!1;return ke.value>zu(ke,j)?(B.push(ke),Me+=Ve,st=!0):Me+=Ie,{inputs:T,outputs:B,changeUsed:st,fee:Me}}var aa=gr(8287).Buffer,sa=Object.defineProperty,fa=Object.defineProperties,Ku=Object.getOwnPropertyDescriptors,hs=Object.getOwnPropertySymbols,ds=Object.prototype.hasOwnProperty,ps=Object.prototype.propertyIsEnumerable,vs=(T,B,j)=>B in T?sa(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Wu=(T,B)=>{for(var j in B||(B={}))ds.call(B,j)&&vs(T,j,B[j]);if(hs)for(var j of hs(B))ps.call(B,j)&&vs(T,j,B[j]);return T},Gu=(T,B)=>fa(T,Ku(B));function gs(T){const{utxos:B,targets:j,feeRate:le,changeScript:xe}=T;if(!isFinite(Vi(le)))throw new Error("No rate provided");const Re=j.map(ke=>Gu(Wu({},ke),{script:aa.from(ke.script,"hex"),scriptPubkey:aa.from(ke.script,"hex")}));let be=0;const Me=[],Ie=Ln(j);for(let ke=0;ke<B.length;++ke){const Ge=B[ke];if(le*na(Ge)>Ge.value){if(ke===B.length-1)break;continue}Me.push(Ge),be+=Ge.value;const at=ui(Me,Re)*le;if(!(be<Ie+at))return oa(Me,Re,le,xe)}return{changeUsed:!1,fee:Math.ceil(le*ui(Me,Re)),inputs:Me}}var ms=gr(8287).Buffer,Gn=Object.defineProperty,Vu=Object.defineProperties,ua=Object.getOwnPropertyDescriptors,ca=Object.getOwnPropertySymbols,ys=Object.prototype.hasOwnProperty,bs=Object.prototype.propertyIsEnumerable,ws=(T,B,j)=>B in T?Gn(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,qu=(T,B)=>{for(var j in B||(B={}))ys.call(B,j)&&ws(T,j,B[j]);if(ca)for(var j of ca(B))bs.call(B,j)&&ws(T,j,B[j]);return T},Xu=(T,B)=>Vu(T,ua(B));function Ei(T){const{utxos:B,useUtxos:j,targets:le,feeRate:xe,changeScript:Re}=T;if(!isFinite(Vi(xe)))throw new Error("No rate provided");const be=le.map(st=>Xu(qu({},st),{script:ms.from(st.script,"hex"),scriptPubkey:ms.from(st.script,"hex")})),Me=j!=null?j:[];let Ie=Me.reduce((st,{value:at})=>st+at,0);const ke=Ln(le),Ve=ui(Me,be)*xe;if(Ie>=ke+Ve)return oa(Me,be,xe,Re);for(let st=0;st<B.length;++st){const at=B[st];if(xe*na(at)>at.value){if(st===B.length-1)break;continue}Me.push(at),Ie+=at.value;const Pt=ui(Me,be)*xe;if(!(Ie<ke+Pt))return oa(Me,be,xe,Re)}return{changeUsed:!1,fee:Math.ceil(xe*ui(Me,be)),inputs:Me}}var la=gr(8287).Buffer,xs=Object.defineProperty,Mi=Object.defineProperties,Zu=Object.getOwnPropertyDescriptors,ci=Object.getOwnPropertySymbols,Es=Object.prototype.hasOwnProperty,Yu=Object.prototype.propertyIsEnumerable,Ms=(T,B,j)=>B in T?xs(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,$u=(T,B)=>{for(var j in B||(B={}))Es.call(B,j)&&Ms(T,j,B[j]);if(ci)for(var j of ci(B))Yu.call(B,j)&&Ms(T,j,B[j]);return T},Ss=(T,B)=>Mi(T,Zu(B));function ks(T){const{utxos:B,targets:j,feeRate:le}=T,xe=j.map(Me=>Ss($u({},Me),{script:la.from(Me.script,"hex"),scriptPubkey:la.from(Me.script,"hex")})),Re=Math.ceil(le*ui(B,xe));j[0].value-=Re,xe[0].value-=Re;const be=Ln(j);return isNaN(be)||Re>be?{inputs:B,fee:Re,changeUsed:!1}:{inputs:B,outputs:xe,fee:Re,changeUsed:!1}}function Ju(){return{forceUseUtxo:B=>(B.feeRate<1e3&&(B.feeRate=1e3),Ei(B)),subtractFee:B=>(B.feeRate<1e3&&(B.feeRate=1e3),ks(B)),accumulative:B=>(B.feeRate<1e3&&(B.feeRate=1e3),gs(B))}}var Is=Object.defineProperty,ha=Object.defineProperties,Qu=Object.getOwnPropertyDescriptors,Si=Object.getOwnPropertySymbols,ec=Object.prototype.hasOwnProperty,tc=Object.prototype.propertyIsEnumerable,_s=(T,B,j)=>B in T?Is(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,rc=(T,B)=>{for(var j in B||(B={}))ec.call(B,j)&&_s(T,j,B[j]);if(Si)for(var j of Si(B))tc.call(B,j)&&_s(T,j,B[j]);return T},nc=(T,B)=>ha(T,Qu(B));const As=nc(rc({assetDisplayName:"Dogecoin",chainDisplayName:"Dogecoin",currencyCode:"DOGE",customFeeTemplate:Ze,memoOptions:it,pluginId:"dogecoin",walletType:"wallet:dogecoin",addressExplorer:"https://blockchair.com/dogecoin/address/%s?from=edgeapp",blockExplorer:"https://blockchair.com/dogecoin/block/%s?from=edgeapp",transactionExplorer:"https://blockchair.com/dogecoin/transaction/%s?from=edgeapp",denominations:[{name:"DOGE",multiplier:"100000000",symbol:"\xD0"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://doge1.trezor.io","wss://doge2.trezor.io","wss://doge3.trezor.io","wss://doge4.trezor.io","wss://doge5.trezor.io","wss://doge-wusa1.edge.app","wss://dogebook.nownodes.io/wss/%{nowNodesApiKey}"],enableCustomServers:!1},displayName:"Dogecoin",metaTokens:[]}),Ts={serverConfigs:[{type:"blockbook-nownode",uris:["https://doge-wusa1.edge.app"]},{type:"blockbook-nownode",uris:["https://dogebook.nownodes.io"]}],formats:["bip44","bip32"],gapLimit:10,feeUpdateInterval:1e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"526316",lowFee:"526316",standardFeeLow:"526316",standardFeeHigh:"526316",standardFeeLowAmount:"2000000000",standardFeeHighAmount:"98100000000",maximumFeeRate:nt(As,.05938)}},ic={name:"dogecoin",segwit:!1,coinType:3,utxoPicker:Ju(),prefixes:{messagePrefix:[`Dogecoin Signed Message:
63
63
  `],wif:[158],legacyXPriv:[49988504],legacyXPub:[49990397],pubkeyHash:[30],scriptHash:[22]}},Ps={currencyInfo:As,engineInfo:Ts,coinInfo:ic};var oc=Object.defineProperty,ac=Object.defineProperties,Os=Object.getOwnPropertyDescriptors,Bs=Object.getOwnPropertySymbols,sc=Object.prototype.hasOwnProperty,fc=Object.prototype.propertyIsEnumerable,Cs=(T,B,j)=>B in T?oc(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,uc=(T,B)=>{for(var j in B||(B={}))sc.call(B,j)&&Cs(T,j,B[j]);if(Bs)for(var j of Bs(B))fc.call(B,j)&&Cs(T,j,B[j]);return T},cc=(T,B)=>ac(T,Os(B));const Rs=cc(uc({assetDisplayName:"eBoost",chainDisplayName:"eBoost",currencyCode:"EBST",customFeeTemplate:Ze,memoOptions:it,pluginId:"eboost",walletType:"wallet:eboost",addressExplorer:"https://www.blockexperts.com/ebst/address/%s",blockExplorer:"https://www.blockexperts.com/ebst/hash/%s",transactionExplorer:"https://www.blockexperts.com/ebst/tx/%s",denominations:[{name:"EBST",multiplier:"100000000",symbol:"EBST"},{name:"mEBST",multiplier:"100000",symbol:"mEBST"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:[],enableCustomServers:!1},displayName:"eBoost",metaTokens:[]}),lc={formats:["bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"300",lowFee:"100",standardFeeLow:"150",standardFeeHigh:"200",standardFeeLowAmount:"20000000",standardFeeHighAmount:"981000000",maximumFeeRate:nt(Rs,.0033)}},Fs={currencyInfo:Rs,engineInfo:lc,coinInfo:{name:"eboost",segwit:!1,coinType:324,prefixes:{messagePrefix:[`Bitcoin Signed Message:
64
64
  `],wif:[220],legacyXPriv:[76066276],legacyXPub:[76067358],pubkeyHash:[92],scriptHash:[5]}}};var qi=Object.defineProperty,Ns=Object.defineProperties,Xi=Object.getOwnPropertyDescriptors,Ls=Object.getOwnPropertySymbols,hc=Object.prototype.hasOwnProperty,dc=Object.prototype.propertyIsEnumerable,da=(T,B,j)=>B in T?qi(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,pa=(T,B)=>{for(var j in B||(B={}))hc.call(B,j)&&da(T,j,B[j]);if(Ls)for(var j of Ls(B))dc.call(B,j)&&da(T,j,B[j]);return T},Ds=(T,B)=>Ns(T,Xi(B));const Us=Ds(pa({assetDisplayName:"eCash",chainDisplayName:"eCash",currencyCode:"XEC",customFeeTemplate:Ze,memoOptions:it,pluginId:"ecash",walletType:"wallet:ecash",blockExplorer:"https://blockchair.com/ecash/block/%s",addressExplorer:"https://blockchair.com/ecash/address/%s",transactionExplorer:"https://blockchair.com/ecash/tx/%s",denominations:[{name:"XEC",multiplier:"100",symbol:"e"},{name:"sats",multiplier:"1",symbol:"s"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://blockbook.fabien.cash/websocket"],enableCustomServers:!1},displayName:"eCash",metaTokens:[]}),Hs={serverConfigs:[{type:"blockbook-nownode",uris:["https://xec-blockbook.nownodes.io"]}],formats:["bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:"1",standardFeeLowFudgeFactor:"1",standardFeeHighFudgeFactor:"1",highFeeFudgeFactor:"1",highFee:"20",lowFee:"1",standardFeeLow:"2",standardFeeHigh:"20",standardFeeLowAmount:"400000000",standardFeeHighAmount:"650000000",maximumFeeRate:nt(Us,3e-5)},asBlockbookAddress:k(T=>{const B=p(T);return B.startsWith("ecash:")?B.split(":")[1]:B},T=>T.startsWith("ecash:")?T:`ecash:${T}`)},zs={name:"ecash",segwit:!1,sighash:ze.iL.BCH_SIGHASH_ALL,coinType:899,includeCashaddrPrefix:!0,prefixes:{messagePrefix:[`Bitcoin Signed Message::
65
65
  `],wif:[128],legacyXPriv:[76066276],legacyXPub:[76067358],pubkeyHash:[0],scriptHash:[5],cashaddr:["ecash"]}},pc={currencyInfo:Us,engineInfo:Hs,coinInfo:zs};var js=Object.defineProperty,Zi=Object.defineProperties,ki=Object.getOwnPropertyDescriptors,li=Object.getOwnPropertySymbols,Ks=Object.prototype.hasOwnProperty,Ws=Object.prototype.propertyIsEnumerable,Gs=(T,B,j)=>B in T?js(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Vs=(T,B)=>{for(var j in B||(B={}))Ks.call(B,j)&&Gs(T,j,B[j]);if(li)for(var j of li(B))Ws.call(B,j)&&Gs(T,j,B[j]);return T},va=(T,B)=>Zi(T,ki(B));const ga=va(Vs({assetDisplayName:"Feathercoin",chainDisplayName:"Feathercoin",currencyCode:"FTC",customFeeTemplate:Ze,memoOptions:it,pluginId:"feathercoin",walletType:"wallet:feathercoin",addressExplorer:"https://fsight.chain.tips/address/%s",blockExplorer:"https://fsight.chain.tips/block/%s",transactionExplorer:"https://fsight.chain.tips/tx/%s",denominations:[{name:"FTC",multiplier:"100000000",symbol:"F"},{name:"mFTC",multiplier:"100000",symbol:"mF"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://blockbook.feathercoin.com"],enableCustomServers:!1},displayName:"Feathercoin",metaTokens:[]}),vc={formats:["bip49","bip84","bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"1200",lowFee:"400",standardFeeLow:"600",standardFeeHigh:"800",standardFeeLowAmount:"2000000000",standardFeeHighAmount:"98100000000",maximumFeeRate:nt(ga,.002275)}},So={currencyInfo:ga,engineInfo:vc,coinInfo:{name:"feathercoin",segwit:!0,coinType:8,prefixes:{messagePrefix:[`Feathercoin Signed Message:
66
66
  `],wif:[142],legacyXPriv:[76077806],legacyXPub:[76069926],wrappedSegwitXPriv:[77428856],wrappedSegwitXPub:[77429938],segwitXPriv:[78791436],segwitXPub:[78792518],pubkeyHash:[14],scriptHash:[5],bech32:["fc"]}}};var Yi=gr(9596),qs=gr(3929),gc=gr(625),mc=Object.defineProperty,yc=Object.defineProperties,bc=Object.getOwnPropertyDescriptors,Xs=Object.getOwnPropertySymbols,ma=Object.prototype.hasOwnProperty,ko=Object.prototype.propertyIsEnumerable,Io=(T,B,j)=>B in T?mc(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,ya=(T,B)=>{for(var j in B||(B={}))ma.call(B,j)&&Io(T,j,B[j]);if(Xs)for(var j of Xs(B))ko.call(B,j)&&Io(T,j,B[j]);return T},wc=(T,B)=>yc(T,bc(B));const Zs=wc(ya({assetDisplayName:"Groestlcoin",chainDisplayName:"Groestlcoin",currencyCode:"GRS",customFeeTemplate:Ze,memoOptions:it,pluginId:"groestlcoin",walletType:"wallet:groestlcoin",addressExplorer:"https://blockchair.com/groestlcoin/address/%s?from=edgeapp?from=edgeapp",blockExplorer:"https://blockchair.com/groestlcoin/block/%s?from=edgeapp",transactionExplorer:"https://blockchair.com/groestlcoin/transaction/%s?from=edgeapp",denominations:[{name:"GRS",multiplier:"100000000",symbol:"G"},{name:"mGRS",multiplier:"100000",symbol:"mG"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://blockbook.groestlcoin.org","wss://grsbook.nownodes.io/wss/%{nowNodesApiKey}"],enableCustomServers:!1},displayName:"Groestlcoin",metaTokens:[]}),xc={serverConfigs:[{type:"blockbook-nownode",uris:["https://grs.nownodes.io"]}],formats:["bip49","bip84","bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"150",lowFee:"20",standardFeeLow:"50",standardFeeHigh:"100",standardFeeLowAmount:"173200",standardFeeHighAmount:"8670000",maximumFeeRate:nt(Zs,.4705)}},Ec={name:"groestlcoin",segwit:!0,coinType:17,sighashFunction:ze.Et.sha256,txHashFunction:ze.Et.sha256,bs58DecodeFunc:qs.decode,bs58EncodeFunc:qs.encode,wifEncodeFunc:gc.encode,bip32FromBase58Func:Yi.n3,bip32FromSeedFunc:Yi.CC,prefixes:{messagePrefix:[`GroestlCoin Signed Message:
67
- `],wif:[128],legacyXPriv:[76066276],legacyXPub:[76067358],wrappedSegwitXPriv:[77428856],wrappedSegwitXPub:[77429938],segwitXPriv:[78791436],segwitXPub:[78792518],pubkeyHash:[36],scriptHash:[5],bech32:["grs"]}},Ys={currencyInfo:Zs,engineInfo:xc,coinInfo:Ec};var Mc=Object.defineProperty,$s=Object.defineProperties,ba=Object.getOwnPropertyDescriptors,Js=Object.getOwnPropertySymbols,_o=Object.prototype.hasOwnProperty,Qs=Object.prototype.propertyIsEnumerable,ef=(T,B,j)=>B in T?Mc(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Sc=(T,B)=>{for(var j in B||(B={}))_o.call(B,j)&&ef(T,j,B[j]);if(Js)for(var j of Js(B))Qs.call(B,j)&&ef(T,j,B[j]);return T},kc=(T,B)=>$s(T,ba(B));const tf=kc(Sc({canReplaceByFee:!1,assetDisplayName:"Litecoin",chainDisplayName:"Litecoin",currencyCode:"LTC",customFeeTemplate:Ze,memoOptions:it,pluginId:"litecoin",walletType:"wallet:litecoin",blockExplorer:"https://blockchair.com/litecoin/block/%s",addressExplorer:"https://blockchair.com/litecoin/address/%s",transactionExplorer:"https://blockchair.com/litecoin/transaction/%s",denominations:[{name:"LTC",multiplier:"100000000",symbol:"\u0141"},{name:"mLTC",multiplier:"100000",symbol:"m\u0141"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://ltc1.trezor.io","wss://ltc2.trezor.io","wss://ltc3.trezor.io","wss://ltc4.trezor.io","wss://ltc5.trezor.io","wss://ltc-wusa1.edge.app","wss://ltcbook.nownodes.io/wss/%{nowNodesApiKey}"],enableCustomServers:!1},displayName:"Litecoin",metaTokens:[]}),Ic={serverConfigs:[{type:"blockbook-nownode",uris:["https://ltc-wusa1.edge.app"]},{type:"blockbook-nownode",uris:["https://ltcbook.nownodes.io"]}],formats:["bip49","bip84","bip44","bip32"],forks:["bitcoin"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"300",lowFee:"100",standardFeeLow:"150",standardFeeHigh:"200",standardFeeLowAmount:"20000000",standardFeeHighAmount:"981000000",maximumFeeRate:nt(tf,63.64)}},rf={currencyInfo:tf,engineInfo:Ic,coinInfo:{name:"litecoin",segwit:!0,coinType:2,prefixes:{messagePrefix:[`Litecoin Signed Message:
68
- `],wif:[176],legacyXPriv:[76066276],legacyXPub:[76067358],wrappedSegwitXPriv:[28469138],wrappedSegwitXPub:[28471030],segwitXPriv:[78791436],segwitXPub:[78792518],pubkeyHash:[48],scriptHash:[50,5],bech32:["ltc"]}}};var _c=Object.defineProperty,Ac=Object.defineProperties,Tc=Object.getOwnPropertyDescriptors,wa=Object.getOwnPropertySymbols,Pc=Object.prototype.hasOwnProperty,nf=Object.prototype.propertyIsEnumerable,of=(T,B,j)=>B in T?_c(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Oc=(T,B)=>{for(var j in B||(B={}))Pc.call(B,j)&&of(T,j,B[j]);if(wa)for(var j of wa(B))nf.call(B,j)&&of(T,j,B[j]);return T},af=(T,B)=>Ac(T,Tc(B));const hi=af(Oc({assetDisplayName:"PIVX",chainDisplayName:"PIVX",currencyCode:"PIVX",customFeeTemplate:Ze,memoOptions:it,pluginId:"pivx",walletType:"wallet:pivx",addressExplorer:"https://zkbitcoin.com/address/%s",blockExplorer:"https://zkbitcoin.com/block/%s",transactionExplorer:"https://zkbitcoin.com/tx/%s",denominations:[{name:"PIVX",multiplier:"100000000",symbol:"\u2C63"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://zkbitcoin.com"],enableCustomServers:!1},displayName:"PIVX",metaTokens:[]}),Bc={serverConfigs:[{type:"blockbook-nownode",uris:["https://btc-wusa1.edge.app"]},{type:"blockbook-nownode",uris:["https://pivxbook.nownodes.io"]}],formats:["bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"200",lowFee:"50",standardFeeLow:"100",standardFeeHigh:"150",standardFeeLowAmount:"10000000",standardFeeHighAmount:"100000000",maximumFeeRate:nt(hi,.6)}},xa={currencyInfo:hi,engineInfo:Bc,coinInfo:{name:"pivx",segwit:!1,coinType:119,prefixes:{messagePrefix:[`PIVX Signed Message:
67
+ `],wif:[128],legacyXPriv:[76066276],legacyXPub:[76067358],wrappedSegwitXPriv:[77428856],wrappedSegwitXPub:[77429938],segwitXPriv:[78791436],segwitXPub:[78792518],pubkeyHash:[36],scriptHash:[5],bech32:["grs"]}},Ys={currencyInfo:Zs,engineInfo:xc,coinInfo:Ec};var Mc=Object.defineProperty,$s=Object.defineProperties,ba=Object.getOwnPropertyDescriptors,Js=Object.getOwnPropertySymbols,_o=Object.prototype.hasOwnProperty,Qs=Object.prototype.propertyIsEnumerable,ef=(T,B,j)=>B in T?Mc(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Sc=(T,B)=>{for(var j in B||(B={}))_o.call(B,j)&&ef(T,j,B[j]);if(Js)for(var j of Js(B))Qs.call(B,j)&&ef(T,j,B[j]);return T},kc=(T,B)=>$s(T,ba(B));const tf=kc(Sc({canReplaceByFee:!1,assetDisplayName:"Litecoin",chainDisplayName:"Litecoin",currencyCode:"LTC",customFeeTemplate:Ze,memoOptions:it,pluginId:"litecoin",walletType:"wallet:litecoin",blockExplorer:"https://blockchair.com/litecoin/block/%s",addressExplorer:"https://blockchair.com/litecoin/address/%s",transactionExplorer:"https://blockchair.com/litecoin/transaction/%s",denominations:[{name:"LTC",multiplier:"100000000",symbol:"\u0141"},{name:"mLTC",multiplier:"100000",symbol:"m\u0141"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://ltc1.trezor.io","wss://ltc2.trezor.io","wss://ltc3.trezor.io","wss://ltc4.trezor.io","wss://ltc5.trezor.io","wss://ltc-eusa1.edge.app","wss://ltcbook.nownodes.io/wss/%{nowNodesApiKey}"],enableCustomServers:!1},displayName:"Litecoin",metaTokens:[]}),Ic={serverConfigs:[{type:"blockbook-nownode",uris:["https://ltc-wusa1.edge.app"]},{type:"blockbook-nownode",uris:["https://ltcbook.nownodes.io"]}],formats:["bip49","bip84","bip44","bip32"],forks:["bitcoin"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"300",lowFee:"100",standardFeeLow:"150",standardFeeHigh:"200",standardFeeLowAmount:"20000000",standardFeeHighAmount:"981000000",maximumFeeRate:nt(tf,63.64)}},rf={currencyInfo:tf,engineInfo:Ic,coinInfo:{name:"litecoin",segwit:!0,coinType:2,prefixes:{messagePrefix:[`Litecoin Signed Message:
68
+ `],wif:[176],legacyXPriv:[76066276],legacyXPub:[76067358],wrappedSegwitXPriv:[28469138],wrappedSegwitXPub:[28471030],segwitXPriv:[78791436],segwitXPub:[78792518],pubkeyHash:[48],scriptHash:[50,5],bech32:["ltc"]}}};var _c=Object.defineProperty,Ac=Object.defineProperties,Tc=Object.getOwnPropertyDescriptors,wa=Object.getOwnPropertySymbols,Pc=Object.prototype.hasOwnProperty,nf=Object.prototype.propertyIsEnumerable,of=(T,B,j)=>B in T?_c(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Oc=(T,B)=>{for(var j in B||(B={}))Pc.call(B,j)&&of(T,j,B[j]);if(wa)for(var j of wa(B))nf.call(B,j)&&of(T,j,B[j]);return T},af=(T,B)=>Ac(T,Tc(B));const hi=af(Oc({assetDisplayName:"PIVX",chainDisplayName:"PIVX",currencyCode:"PIVX",customFeeTemplate:Ze,memoOptions:it,pluginId:"pivx",walletType:"wallet:pivx",addressExplorer:"https://zkbitcoin.com/address/%s",blockExplorer:"https://zkbitcoin.com/block/%s",transactionExplorer:"https://zkbitcoin.com/tx/%s",denominations:[{name:"PIVX",multiplier:"100000000",symbol:"\u2C63"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://pivx-eusa1.edge.app","wss://zkbitcoin.com"],enableCustomServers:!1},displayName:"PIVX",metaTokens:[]}),Bc={serverConfigs:[{type:"blockbook-nownode",uris:["https://btc-wusa1.edge.app"]},{type:"blockbook-nownode",uris:["https://pivxbook.nownodes.io"]}],formats:["bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"200",lowFee:"50",standardFeeLow:"100",standardFeeHigh:"150",standardFeeLowAmount:"10000000",standardFeeHighAmount:"100000000",maximumFeeRate:nt(hi,.6)}},xa={currencyInfo:hi,engineInfo:Bc,coinInfo:{name:"pivx",segwit:!1,coinType:119,prefixes:{messagePrefix:[`PIVX Signed Message:
69
69
  `],wif:[212],legacyXPriv:[35729707],legacyXPub:[36513075],pubkeyHash:[30],scriptHash:[13]}}};var sf=Object.defineProperty,Cc=Object.defineProperties,Rc=Object.getOwnPropertyDescriptors,Ea=Object.getOwnPropertySymbols,ff=Object.prototype.hasOwnProperty,uf=Object.prototype.propertyIsEnumerable,Ma=(T,B,j)=>B in T?sf(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Fc=(T,B)=>{for(var j in B||(B={}))ff.call(B,j)&&Ma(T,j,B[j]);if(Ea)for(var j of Ea(B))uf.call(B,j)&&Ma(T,j,B[j]);return T},Nc=(T,B)=>Cc(T,Rc(B));const cf=Nc(Fc({assetDisplayName:"Qtum",chainDisplayName:"Qtum",currencyCode:"QTUM",customFeeTemplate:Ze,memoOptions:it,pluginId:"qtum",walletType:"wallet:qtum",addressExplorer:"https://explorer.qtum.org/address/%s",blockExplorer:"https://explorer.qtum.org/block/%s",transactionExplorer:"https://explorer.qtum.org/tx/%s",denominations:[{name:"QTUM",multiplier:"100000000",symbol:"Q"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://qtum-eusa1.edge.app","wss://blockv3.qtum.info","wss://qtum.atomicwallet.io"],enableCustomServers:!1},displayName:"Qtum",metaTokens:[]}),Lc={formats:["bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"1000",lowFee:"400",standardFeeLow:"450",standardFeeHigh:"700",standardFeeLowAmount:"20000000",standardFeeHighAmount:"981000000",maximumFeeRate:nt(cf,2.13)}},Uc={currencyInfo:cf,engineInfo:Lc,coinInfo:{name:"qtum",segwit:!1,coinType:2301,prefixes:{messagePrefix:[`Bitcoin Signed Message:
70
70
  `],wif:[128],legacyXPriv:[76066276],legacyXPub:[76067358],pubkeyHash:[58],scriptHash:[50]}}};var Hc=Object.defineProperty,zc=Object.defineProperties,lf=Object.getOwnPropertyDescriptors,hf=Object.getOwnPropertySymbols,df=Object.prototype.hasOwnProperty,Vn=Object.prototype.propertyIsEnumerable,Sa=(T,B,j)=>B in T?Hc(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,pf=(T,B)=>{for(var j in B||(B={}))df.call(B,j)&&Sa(T,j,B[j]);if(hf)for(var j of hf(B))Vn.call(B,j)&&Sa(T,j,B[j]);return T},jc=(T,B)=>zc(T,lf(B));const ka=jc(pf({assetDisplayName:"Ravencoin",chainDisplayName:"Ravencoin",currencyCode:"RVN",customFeeTemplate:Ze,memoOptions:it,pluginId:"ravencoin",walletType:"wallet:ravencoin",addressExplorer:"https://rvn.cryptoscope.io/address/?address=%s",blockExplorer:"https://rvn.cryptoscope.io/block/?blockheight=%s",transactionExplorer:"https://rvn.cryptoscope.io/tx/?txid=%s",denominations:[{name:"RVN",multiplier:"100000000",symbol:"R"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:["wss://blockbook.ravencoin.org"],enableCustomServers:!1},displayName:"Ravencoin",metaTokens:[]}),vf={formats:["bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"150",lowFee:"20",standardFeeLow:"50",standardFeeHigh:"100",standardFeeLowAmount:"173200",standardFeeHighAmount:"8670000",maximumFeeRate:nt(ka,.01419)}},Wc={currencyInfo:ka,engineInfo:vf,coinInfo:{name:"ravencoin",segwit:!1,coinType:175,prefixes:{messagePrefix:[`Bitcoin Signed Message:
71
71
  `],wif:[128],legacyXPriv:[76066276],legacyXPub:[76067358],pubkeyHash:[60],scriptHash:[122]}}};var Ia=gr(8736),Gc=gr(4325),gf=Object.defineProperty,mf=Object.defineProperties,yf=Object.getOwnPropertyDescriptors,$i=Object.getOwnPropertySymbols,bf=Object.prototype.hasOwnProperty,wf=Object.prototype.propertyIsEnumerable,xf=(T,B,j)=>B in T?gf(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Vc=(T,B)=>{for(var j in B||(B={}))bf.call(B,j)&&xf(T,j,B[j]);if($i)for(var j of $i(B))wf.call(B,j)&&xf(T,j,B[j]);return T},Ef=(T,B)=>mf(T,yf(B));const Mf=Ef(Vc({assetDisplayName:"SmartCash",chainDisplayName:"SmartCash",currencyCode:"SMART",customFeeTemplate:Ze,memoOptions:it,pluginId:"smartcash",walletType:"wallet:smartcash",addressExplorer:"https://insight.smartcash.cc/address/%s",blockExplorer:"https://insight.smartcash.cc/block/%s",transactionExplorer:"https://insight.smartcash.cc/tx/%s",denominations:[{name:"SMART",multiplier:"100000000",symbol:"S"},{name:"mSMART",multiplier:"100000",symbol:"mS"}]},Lt),{defaultSettings:{customFeeSettings:["satPerByte"],blockbookServers:[],enableCustomServers:!1},displayName:"SmartCash",metaTokens:[]}),qc={formats:["bip44","bip32"],gapLimit:10,feeUpdateInterval:6e4,defaultFeeInfo:{lowFeeFudgeFactor:void 0,standardFeeLowFudgeFactor:void 0,standardFeeHighFudgeFactor:void 0,highFeeFudgeFactor:void 0,highFee:"1500",lowFee:"200",standardFeeLow:"500",standardFeeHigh:"1000",standardFeeLowAmount:"1732000",standardFeeHighAmount:"86700000",maximumFeeRate:nt(Mf,2171e-7)}},Sf={name:"smartcash",segwit:!1,coinType:224,sighashFunction:ze.Et.sha256,txHashFunction:ze.Et.sha256,bs58DecodeFunc:Ia.decode,bs58EncodeFunc:Ia.encode,wifEncodeFunc:Gc.encode,prefixes:{messagePrefix:[`Bitcoin Signed Message:
@@ -77,4 +77,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
77
77
  `).map(Em);function Sm(T){const{asAddress:B,connectionUri:j,engineEmitter:le,initOptions:xe,log:Re,taskGeneratorFn:be,pluginInfo:Me,socketEmitter:Ie,walletId:ke}=T;Re(`makeBlockbookElectrum with uri ${j}`);const Ge=st=>{const at=Rr({address:st,coin:Me.coinInfo.name});return ze.Et.sha256(gm.from(at,"hex")).reverse().toString("hex")},Ve=Hd({asAddress:B,asResponse:Mm,connectionUri:j,engineEmitter:le,initOptions:xe,log:Re,taskGeneratorFn:function(st){return xm(this,null,function*(){const at=be(st);let xt;for(;;){const bt=yield new Wd(at.next(xt)),Pt=bt.value;if((bt==null?void 0:bt.done)===!0)return bt.value;if(typeof Pt=="boolean")return Pt;if(Pt.method==="getAccountUtxo"){const Gt=Pt.params,rr=B!=null?B(Gt.descriptor):Gt.descriptor,dr=Ge(rr);xt=(yield Kd({},lm(dr))).map(vt=>({txid:vt.tx_hash,vout:vt.tx_pos,value:vt.value.toString(),height:vt.height}));continue}if(Pt.method==="getAccountInfo"){const Gt=Pt.params,rr=B!=null?B(Gt.descriptor):Gt.descriptor,dr=Ge(rr),Kt=yield Kd({},dm(dr));xt={address:rr,balance:"0",totalReceived:"0",totalSent:"0",txs:Kt.length,unconfirmedBalance:"0",unconfirmedTxs:Kt.reduce((vt,Et)=>vt+Et.height>=0?1:0,0),txids:[],transactions:[],page:0,totalPages:1,itemsOnPage:0};continue}}})},ping:()=>Ti(this,null,function*(){return yield Ve.promisifyWsMessage(um())}),socketEmitter:Ie,walletId:ke});return Ve.broadcastTx=()=>Ti(this,null,function*(){throw new Error("broadcastTx not supported for Electrum connections")}),Ve.fetchAddress=()=>Ti(this,null,function*(){throw new Error("fetchAddress not supported for Electrum connections")}),Ve.fetchAddressUtxos=()=>Ti(this,null,function*(){throw new Error("fetchAddressUtxos not supported for Electrum connections")}),Ve.fetchInfo=()=>Ti(this,null,function*(){throw new Error("fetchInfo not supported for Electrum connections")}),Ve.fetchTransaction=()=>Ti(this,null,function*(){throw new Error("fetchTransaction not supported for Electrum connections")}),Ve.watchAddresses=()=>Ti(this,null,function*(){}),Ve.watchBlocks=()=>Ti(this,null,function*(){}),Ve}var uu=(T,B)=>(B=Symbol[T])?B:Symbol.for("Symbol."+T),cu=(T,B,j)=>new Promise((le,xe)=>{var Re=Ie=>{try{Me(j.next(Ie))}catch(ke){xe(ke)}},be=Ie=>{try{Me(j.throw(Ie))}catch(ke){xe(ke)}},Me=Ie=>Ie.done?le(Ie.value):Promise.resolve(Ie.value).then(Re,be);Me((j=j.apply(T,B)).next())}),Ha=function(T,B){this[0]=T,this[1]=B},km=(T,B,j)=>{var le=(be,Me,Ie,ke)=>{try{var Ge=j[be](Me),Ve=(Me=Ge.value)instanceof Ha,st=Ge.done;Promise.resolve(Ve?Me[0]:Me).then(at=>Ve?le(be==="return"?be:"next",Me[1]?{done:at.done,value:at.value}:at,Ie,ke):Ie({value:at,done:st})).catch(at=>le("throw",at,Ie,ke))}catch(at){ke(at)}},xe=be=>Re[be]=Me=>new Promise((Ie,ke)=>le(be,Me,Ie,ke)),Re={};return j=j.apply(T,B),Re[uu("asyncIterator")]=()=>Re,xe("next"),xe("throw"),xe("return"),Re},Pi=T=>{var B=T[uu("asyncIterator")],j=!1,le,xe={};return B==null?(B=T[uu("iterator")](),le=Re=>xe[Re]=be=>B[Re](be)):(B=B.call(T),le=Re=>xe[Re]=be=>{if(j){if(j=!1,Re==="throw")throw be;return be}return j=!0,{done:!1,value:new Ha(new Promise(Me=>{var Ie=B[Re](be);if(!(Ie instanceof Object))throw TypeError("Object expected");Me(Ie)}),1)}}),xe[uu("iterator")]=()=>xe,le("next"),"throw"in B?le("throw"):xe.throw=Re=>{throw Re},"return"in B&&le("return"),xe};function Im(T){const{engineEmitter:B,initOptions:j,io:le,log:xe,pluginInfo:Re,pluginState:be,walletInfo:Me}=T,{serverConfigs:Ie=[]}=Re.engineInfo;xe("Making server states");const ke={};let Ge=!0,Ve=[],st=0,at=setTimeout(()=>{},0);const xt=new Wg;xt.on(oo.CONNECTION_OPEN,vt=>{st=0,xe(`${vt} ** Connected **`)}),xt.on(oo.CONNECTION_CLOSE,(vt,Et)=>{Jr(ke,vt);const Ct=Et!=null?` !! Connection ERROR !! ${Et.message}`:"";xe(`${vt} onClose ${Ct}`),Et!=null&&be.serverScoreDown(vt),Gt()}),xt.on(oo.CONNECTION_TIMER,(vt,Et)=>{const Ct=Date.now()-Et;xe(`${vt} returned healthCheck in ${Ct}ms`),be.serverScoreUp(vt,Ct)}),B.on(Ur.NEW_ADDRESS_TRANSACTION,(vt,Et)=>{xe(`${vt} received received new transaction with id ${Et.tx.txid} to address ${Et.address}`);const Ct=ke[vt];Ct!=null&&Ct.txids.add(Et.tx.txid)}),B.on(Ur.BLOCK_HEIGHT_CHANGED,(vt,Et)=>{xe(`${vt} block height changed to ${Et}`),ke[vt].blockHeight=Et});let bt;const Pt=vt=>({blockbook:vt,blockSubscriptionStatus:"unsubscribed",txids:new Set,addresses:new Set,blockHeight:0}),Gt=()=>{if(Ge){xe(`attempting server reconnect number ${st}`);const vt=Math.max(5,st++)*1e3;at=setTimeout(()=>{clearTimeout(at),Ut.refillServers()},vt)}},rr=()=>{const vt=["wss:","ws:","electrumwss:","electrumws:"];Ve.length===0&&(Ve=be.getLocalServers(wd,vt)),xe(`refillServers: Top ${wd} servers:`,Ve);let Et=1.25;for(;Object.keys(ke).length<bg;){let Dt=function(){return km(this,null,function*(){if(Ct==null||!(Ct in ke))return!1;const mt=bt(Ct);let Rt=yield new Ha(mt.next());for(;;){if((Rt==null?void 0:Rt.done)===!0)return Rt.value;const Yt=Rt.value;if(typeof Yt!="boolean"){const Vt=`${Yt.method} params: ${JSON.stringify(Yt.params)}`;xe(`${Ct} nextTask: ${Vt}`)}try{const Vt=yield Yt;Rt=yield new Ha(mt.next(Vt))}catch(Vt){Rt=yield new Ha(mt.throw(Vt).catch(nr=>(xe.error(nr),{done:!0,value:!1})))}}})};if(Ve.length===0)break;const Ct=Ve.shift();if(Ct==null){Gt();break}if(ke[Ct]!=null)continue;const At=(0,xd.parse)(Ct);if(At.scheme==null||At.scheme.length<2||At.host==null)continue;if(Et-=Et>.5?.25:0,Math.random()>Et){Ve.push(Ct);continue}let It;["electrumwss","electrumws"].includes(At.scheme)?It=Sm({asAddress:Re.engineInfo.asBlockbookAddress,connectionUri:Ct,engineEmitter:B,initOptions:j,log:xe,taskGeneratorFn:Dt,pluginInfo:Re,socketEmitter:xt,walletId:Me.id}):It=Hd({asAddress:Re.engineInfo.asBlockbookAddress,connectionUri:Ct,engineEmitter:B,initOptions:j,log:xe,taskGeneratorFn:Dt,socketEmitter:xt,walletId:Me.id}),ke[Ct]=Pt(It),It.connect().then(()=>cu(this,null,function*(){const mt=Date.now(),{bestHeight:Rt}=yield It.fetchInfo();xe("height:",Rt),ke[Ct].blockHeight=Rt,B.emit(Ur.BLOCK_HEIGHT_CHANGED,Ct,Rt);const Yt=Date.now()-mt;be.serverScoreUp(Ct,Yt)})).catch(mt=>{xe.error(`${JSON.stringify(mt.message)}`)})}},dr=(vt,Et)=>{if(ke[vt]==null)throw new Error(`No blockbook connection with ${vt}`);const At=Date.now(),It=new su;return It.promise.then(Dt=>{be.serverScoreUp(vt,Date.now()-At),Et.resolve(Dt)},Dt=>{be.serverScoreDown(vt),Et.reject(Dt)}),It};function*Kt(vt,Et){if(ke[vt]==null)throw new Error(`No blockbook connection with ${vt}`);const At=Date.now();let It;try{It=yield*Pi(Et),be.serverScoreUp(vt,Date.now()-At)}catch(Dt){throw be.serverScoreDown(vt),Dt}return It}const Ut={broadcastTx(vt){return cu(this,null,function*(){return yield new Promise((Et,Ct)=>{let At=!1,It=0;const Dt=Object.keys(ke).filter(Rt=>ke[Rt].blockbook!=null);if(Dt.length<1){Ct(new Error("Unexpected error. Missing WebSocket connections."));return}const mt=Dt.some(Rt=>ke[Rt].blockbook.isConnected);if(mt)for(const Rt of Dt){const{blockbook:Yt}=ke[Rt];Yt!=null&&Yt.broadcastTx(vt).then(Vt=>{At||(At=!0,Et(Vt.result))}).catch(Vt=>{if(++It===Dt.length){const nr=Vt!=null?`With error ${Vt.message}`:"";xe.error(`broadcastTx fail: ${JSON.stringify(vt)}
78
78
  ${nr}`),Ct(Vt)}})}if(!mt){const{nowNodesApiKey:Rt}=j,Yt=Ie.filter(Vt=>Vt.type==="blockbook-nownode").map(Vt=>Vt.uris).flat(1);if(Yt.length<1){Ct(new Error("No available connections. Check your internet signal."));return}if(Rt==null){Ct(new Error("Missing connection key for fallback servers."));return}for(const Vt of Yt)xe.warn("Falling back to NOWNode server broadcast over HTTP:",Vt),le.fetchCors(`${Vt}/api/v2/sendtx/`,{method:"POST",headers:{"api-key":Rt},body:vt.signedTx}).then(nr=>cu(this,null,function*(){if(!nr.ok)throw new Error(`Failed to broadcast transaction via Blockbook: HTTP ${nr.status}`);const qt=yield nr.json();return $n(_d)(qt)})).then(nr=>{At||(At=!0,Et(nr.result))}).catch(nr=>{if(++It===Yt.length){const qt=nr!=null?`With error ${nr.message}`:"";xe.error(`broadcastTx fail: ${JSON.stringify(vt)}
79
79
  ${qt}`),Ct(nr)}})}})})},getBlockHeight(vt){return ke[vt].blockHeight},getServerList(){return Ve},getServerState(vt){return ke[vt]},refillServers(){xe("refilling servers..."),Ge=!0,Bd({id:Me.id,updateFunc:()=>{rr()}})},setPickNextTaskCB(vt){bt=vt},setServerList(vt){Ve=vt},serverCanGetTx(vt,Et){const Ct=ke[vt];if(Ct==null)return!1;if(Ct.txids.has(Et))return!0;for(const At of Object.values(ke))if(At.txids.has(Et))return!1;return!0},serverCanGetAddress(vt,Et){const Ct=ke[vt];if(Ct==null)return!1;if(Ct.addresses.has(Et))return!0;for(const At of Object.values(ke))if(At.addresses.has(Et))return!1;return!0},serverIsAwareOfAddress(vt,Et){const Ct=ke[vt];return Ct==null?!1:!!Ct.addresses.has(Et)},stop(){return cu(this,null,function*(){Ge=!1,xe("stopping server states"),Cd(Me.id),clearTimeout(at);for(const vt of Object.keys(ke)){const Et=ke[vt],{blockbook:Ct}=Et;Ct!=null&&(yield Ct.disconnect(),Jr(ke,vt))}})},watchAddresses(vt,Et,Ct){const At=ke[vt];if(At==null)throw new Error(`No blockbook connection with ${vt}`);const{blockbook:It}=At;for(const mt of Et)At.addresses.add(mt);const Dt=new su;Dt.promise.catch(mt=>{for(const Rt of Et)At.addresses.delete(Rt);Ct==null||Ct.reject(mt)}),It.watchAddresses(Array.from(At.addresses),dr(vt,Dt))},watchBlocks(vt){const Et=ke[vt];if(Et==null)throw new Error(`No blockbook connection with ${vt}`);const{blockbook:Ct}=Et;Et.blockSubscriptionStatus="subscribing";const At=new su;At.promise.then(()=>{Et.blockSubscriptionStatus="subscribed"}).catch(()=>{Et.blockSubscriptionStatus="unsubscribed"}),Ct.watchBlocks(dr(vt,At))},addressQueryTask:function*(vt,Et,Ct){const At=ke[vt];if(At==null)throw new Error(`No blockbook connection with ${vt}`);return yield*Pi(Kt(vt,function*(){return yield*Pi(At.blockbook.addressQueryTask(Et,{asBlockbookAddress:Re.engineInfo.asBlockbookAddress,lastQueriedBlockHeight:Ct.lastQueriedBlockHeight,page:Ct.page}))}()))},transactionQueryTask:function*(vt,Et){const Ct=ke[vt];if(Ct==null)throw new Error(`No blockbook connection with ${vt}`);return yield*Pi(Kt(vt,function*(){return yield*Pi(Ct.blockbook.transactionQueryTask(Et))}()))},transactionSpecialQueryTask:function*(vt,Et){const Ct=ke[vt];if(Ct==null)throw new Error(`No blockbook connection with ${vt}`);return yield*Pi(Kt(vt,function*(){return Ct.blockbook.transactionSpecialQueryTask(Et)}()))},utxoListQueryTask:function*(vt,Et){const Ct=ke[vt];if(Ct==null)throw new Error(`No blockbook connection with ${vt}`);return yield*Pi(Kt(vt,function*(){return yield*Pi(Ct.blockbook.utxoListQueryTask(Et,{asBlockbookAddress:Re.engineInfo.asBlockbookAddress}))}()))}};return Ut}var _m=Object.defineProperty,Am=Object.defineProperties,Tm=Object.getOwnPropertyDescriptors,Gd=Object.getOwnPropertySymbols,Pm=Object.prototype.hasOwnProperty,Om=Object.prototype.propertyIsEnumerable,lu=(T,B)=>(B=Symbol[T])?B:Symbol.for("Symbol."+T),Vd=(T,B,j)=>B in T?_m(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Oi=(T,B)=>{for(var j in B||(B={}))Pm.call(B,j)&&Vd(T,j,B[j]);if(Gd)for(var j of Gd(B))Om.call(B,j)&&Vd(T,j,B[j]);return T},Bi=(T,B)=>Am(T,Tm(B)),Xr=(T,B,j)=>new Promise((le,xe)=>{var Re=Ie=>{try{Me(j.next(Ie))}catch(ke){xe(ke)}},be=Ie=>{try{Me(j.throw(Ie))}catch(ke){xe(ke)}},Me=Ie=>Ie.done?le(Ie.value):Promise.resolve(Ie.value).then(Re,be);Me((j=j.apply(T,B)).next())}),Gr=function(T,B){this[0]=T,this[1]=B},Fo=(T,B,j)=>{var le=(be,Me,Ie,ke)=>{try{var Ge=j[be](Me),Ve=(Me=Ge.value)instanceof Gr,st=Ge.done;Promise.resolve(Ve?Me[0]:Me).then(at=>Ve?le(be==="return"?be:"next",Me[1]?{done:at.done,value:at.value}:at,Ie,ke):Ie({value:at,done:st})).catch(at=>le("throw",at,Ie,ke))}catch(at){ke(at)}},xe=be=>Re[be]=Me=>new Promise((Ie,ke)=>le(be,Me,Ie,ke)),Re={};return j=j.apply(T,B),Re[lu("asyncIterator")]=()=>Re,xe("next"),xe("throw"),xe("return"),Re},Jn=T=>{var B=T[lu("asyncIterator")],j=!1,le,xe={};return B==null?(B=T[lu("iterator")](),le=Re=>xe[Re]=be=>B[Re](be)):(B=B.call(T),le=Re=>xe[Re]=be=>{if(j){if(j=!1,Re==="throw")throw be;return be}return j=!0,{done:!1,value:new Gr(new Promise(Me=>{var Ie=B[Re](be);if(!(Ie instanceof Object))throw TypeError("Object expected");Me(Ie)}),1)}}),xe[lu("iterator")]=()=>xe,le("next"),"throw"in B?le("throw"):xe.throw=Re=>{throw Re},"return"in B&&le("return"),xe};function qd(T){const{dataLayer:B,initOptions:j,io:le,emitter:xe,engineOptions:Re,pluginState:be,pluginInfo:Me,seenTxCheckpoint:Ie,walletInfo:ke,walletTools:Ge}=T,{log:Ve}=Re,{walletFormats:st}=ke.keys,at={addressForTransactionsCache:{},addressForUtxosCache:{},addressSubscribeCache:{},blockbookUtxoCache:{},dataLayerUtxoCache:{},transactionSpecificUpdateCache:{},transactionUpdateCache:{}},xt=()=>{for(const It of Object.keys(at.addressForTransactionsCache))Jr(at.addressForTransactionsCache,It);for(const It of Object.keys(at.addressForUtxosCache))Jr(at.addressForUtxosCache,It);for(const It of Object.keys(at.addressSubscribeCache))Jr(at.addressSubscribeCache,It);for(const It of Object.keys(at.blockbookUtxoCache))Jr(at.blockbookUtxoCache,It);for(const It of Object.keys(at.dataLayerUtxoCache))Jr(at.dataLayerUtxoCache,It);for(const It of Object.keys(at.transactionSpecificUpdateCache))Jr(at.transactionSpecificUpdateCache,It);for(const It of Object.keys(at.transactionUpdateCache))Jr(at.transactionUpdateCache,It)},bt=2;let Pt=0,Gt=0;const rr=()=>Xr(this,null,function*(){if(Gt>=1)return;const It=Object.keys(at.addressSubscribeCache).length*bt;if(Pt=Pt+1,It===0)throw new Error("No addresses to process");const Dt=Pt/It;(Dt-Gt>yg||Dt===1)&&(Ve(`processed changed, percent: ${Dt}, processedCount: ${Pt}, totalCount: ${It}`),Gt=Dt,vt.updateSeenTxCheckpoint(),xe.emit(Ur.ADDRESSES_CHECKED,Dt))}),dr=()=>{if(Gt<1)return;const It=vt.seenTxCheckpoint(),Dt=It!=null?parseInt(It):void 0;if(Dt==null||vt.maxSeenTxBlockHeight>Dt){const mt=vt.maxSeenTxBlockHeight.toString();vt.emitter.emit(Ur.SEEN_TX_CHECKPOINT,mt)}},Kt=new qh,Ut=Im({engineEmitter:xe,initOptions:j,io:le,log:Ve,pluginInfo:Me,pluginState:be,walletInfo:ke}),vt={pluginInfo:Me,walletInfo:ke,walletTools:Ge,dataLayer:B,emitter:xe,taskCache:at,updateProgressRatio:rr,updateSeenTxCheckpoint:dr,io:le,log:Ve,maxSeenTxBlockHeight:0,seenTxCheckpoint:Ie,serverStates:Ut,walletFormats:st,lock:Kt};Ut.setPickNextTaskCB(It=>Cm(vt,It));let Et=!1;const Ct=()=>Xr(this,null,function*(){Et||(Et=!0,yield At(),yield hu(vt))});xe.on(Ur.BLOCK_HEIGHT_CHANGED,(It,Dt)=>Xr(this,null,function*(){const mt=yield B.fetchTransactions({blockHeight:0});for(const Rt of mt)Rt!=null&&(at.transactionUpdateCache[Rt.txid]={processing:!1})})),xe.on(Ur.NEW_ADDRESS_TRANSACTION,(It,Dt)=>Xr(this,null,function*(){const mt=at.addressSubscribeCache[Dt.address];if(mt!=null){const{path:Rt}=mt;at.addressForUtxosCache[Dt.address]={processing:!1,path:Rt},Zd(vt,{address:Dt.address,changePath:Rt,blockHeight:0,addressForTransactionsCache:at.addressForTransactionsCache}).catch(()=>{throw new Error("failed to add to transaction cache")}),hu(vt).catch(Yt=>{Ve(Yt)})}}));const At=()=>Xr(this,null,function*(){const It=[];for(const Dt of st){const mt=dd(Me.engineInfo,Dt);for(const Rt of mt){const Yt=new Set,Vt={format:Dt,changeIndex:Rt},nr=B.numAddressesByFormatPath(Vt);for(let qt=0;qt<nr;qt++){const ir=yield B.fetchAddress({format:Dt,changeIndex:Rt,addressIndex:qt});if(ir==null)throw new Error(`Missing data-layer address with '${Dt}/${Rt}/${qt}' path during initialization`);const{address:sr}=Ge.scriptPubkeyToAddress({changePath:Vt,scriptPubkey:ir.scriptPubkey});Yt.add(sr),ir.balance!=null&&It.push({scriptPubkey:ir.scriptPubkey,balance:ir.balance})}a0(vt.taskCache,Yt,{format:Dt,changeIndex:Rt})}}xe.emit(Ur.ADDRESS_BALANCE_CHANGED,Me.currencyInfo.currencyCode,It)});return{processedPercent:Gt,start(){return Xr(this,null,function*(){Pt=0,Gt=0,yield Ct(),Ut.refillServers()})},stop(){return Xr(this,null,function*(){Ut.stop(),xt(),Et=!1})},getFreshAddress(It){return Xr(this,arguments,function*({branch:Dt=0,forceIndex:mt}){const{privateKeyFormat:Rt}=ke.keys;Rt==="bip32"&&(Dt=0);const{address:Yt,nativeBalance:Vt="0",legacyAddress:nr}=yield Xd(vt,{forceIndex:mt,changePath:{format:Rt,changeIndex:Dt}}),qt={publicAddress:Yt,nativeBalance:Vt,legacyAddress:nr!==Yt?nr:void 0,legacyNativeBalance:nr!==Yt?Vt:void 0},ir=iu(Me.engineInfo,ke.keys.privateKeyFormat).filter(sr=>sr!==Rt);for(const sr of ir)if(sr==="bip84"){const{address:Sr,nativeBalance:Cr="0"}=yield Xd(vt,{forceIndex:mt,changePath:{format:sr,changeIndex:Dt}});qt.segwitAddress=Sr,qt.segwitNativeBalance=Cr}return qt})},deriveScriptAddress(It){return Xr(this,null,function*(){const{address:Dt}=yield Bm({walletTools:vt.walletTools,engineInfo:vt.pluginInfo.engineInfo,dataLayer:vt.dataLayer,taskCache:vt.taskCache,format:ke.keys.privateKeyFormat,script:It});return{publicAddress:Dt}})},addGapLimitAddresses(It){return Xr(this,null,function*(){const Dt=It.map(mt=>Xr(this,null,function*(){const Rt=Ge.addressToScriptPubkey(mt);yield B.saveAddress(Jf({scriptPubkey:Rt,used:!0}))}));yield Promise.all(Dt),yield Ct()})},broadcastTx(It){return Xr(this,null,function*(){return yield Ut.broadcastTx(It),It.txid})},refillServers(){Ut.refillServers()},getServerList(){return Ut.getServerList()},setServerList(It){Ut.setServerList(It)},loadWifs(It){return Xr(this,null,function*(){for(const Dt of It)for(const mt of st){const Rt={format:mt,changeIndex:0},Yt=Bi(Oi({},Rt),{addressIndex:0}),{scriptPubkey:Vt,redeemScript:nr}=Ge.getScriptPubkeyFromWif(Dt,mt),{address:qt}=Ge.scriptPubkeyToAddress({changePath:Yt,scriptPubkey:Vt});yield B.saveAddress(Jf({scriptPubkey:Vt,redeemScript:nr,path:Yt})),at.addressSubscribeCache[qt]={path:Rt,processing:!1}}})},processUtxos(It){return Xr(this,null,function*(){var Dt;const mt=new Map,Rt=new Set;for(const Yt of It){const Vt=(Dt=mt.get(Yt.scriptPubkey))!=null?Dt:[];mt.has(Yt.scriptPubkey)||mt.set(Yt.scriptPubkey,Vt),Vt.push(Yt),Rt.add(Yt.id)}for(const[Yt,Vt]of mt.entries()){const ir=[...(yield B.fetchUtxos({scriptPubkey:Yt})).filter(sr=>sr!=null&&!Rt.has(sr==null?void 0:sr.id)),...Vt];yield $d(vt,{scriptPubkey:Yt,utxos:ir})}})}}}const Bm=T=>Xr(void 0,null,function*(){const{walletTools:B,engineInfo:j,dataLayer:le,format:xe,taskCache:Re,script:be}=T;if(j.scriptTemplates==null)throw new Error(`cannot derive script address ${be} without defined script template`);const Me=j.scriptTemplates[be],Ie={format:xe,changeIndex:nn(Me),addressIndex:0},{address:ke,scriptPubkey:Ge,redeemScript:Ve}=B.getScriptAddress({path:Ie,scriptTemplate:Me});yield le.saveAddress(Jf({scriptPubkey:Ge,redeemScript:Ve,path:Ie}));const st=new Set;return st.add(ke),a0(Re,st,{format:Ie.format,changeIndex:Ie.changeIndex}),{address:ke,scriptPubkey:Ge,redeemScript:Ve}}),Xd=(T,B)=>Xr(void 0,null,function*(){var j;const{changePath:le,forceIndex:xe}=B,Re=T.dataLayer.numAddressesByFormatPath(le),be={format:le.format,changeIndex:le.changeIndex,addressIndex:Math.max(Re-T.pluginInfo.engineInfo.gapLimit,0)};xe!=null&&(be.addressIndex=xe);const Me=yield T.dataLayer.fetchAddress(be),Ie=(j=Me==null?void 0:Me.balance)!=null?j:"0",{scriptPubkey:ke}=Me!=null?Me:yield T.walletTools.getScriptPubkey(be);if(ke==null)throw new Error("Unknown address path");const Ge=T.walletTools.scriptPubkeyToAddress({changePath:be,scriptPubkey:ke});return Bi(Oi({},Ge),{nativeBalance:Ie})}),hu=T=>Xr(void 0,null,function*(){yield T.lock.acquireAsync();try{for(const j of T.walletFormats){const le=dd(T.pluginInfo.engineInfo,j);for(const xe of le)yield B({format:j,changeIndex:xe})}}finally{T.lock.release()}function B(j){return Xr(this,null,function*(){const le=new Set,xe=T.dataLayer.numAddressesByFormatPath(j);let Re=yield T.dataLayer.lastUsedIndexByFormatPath(j),be=Re+T.pluginInfo.engineInfo.gapLimit,Me=xe;for(;Me<=be;){const Ie=Bi(Oi({},j),{addressIndex:Me}),{scriptPubkey:ke,redeemScript:Ge}=T.walletTools.getScriptPubkey(Ie),{address:Ve}=T.walletTools.scriptPubkeyToAddress({changePath:Ie,scriptPubkey:ke});yield T.dataLayer.saveAddress(Jf({scriptPubkey:ke,redeemScript:Ge,path:Ie})),le.add(Ve),Re=yield T.dataLayer.lastUsedIndexByFormatPath(j),be=Re+T.pluginInfo.engineInfo.gapLimit,Me=T.dataLayer.numAddressesByFormatPath(j)}a0(T.taskCache,le,j)})}}),a0=(T,B,j)=>{B.forEach(le=>{T.addressSubscribeCache[le]={path:j,processing:!1}})},Zd=(T,B)=>Xr(void 0,null,function*(){var j;const{address:le,changePath:xe,addressForTransactionsCache:Re}=B;let{blockHeight:be}=B;const Me=T.walletTools.addressToScriptPubkey(le);if(be===0){const{lastQueriedBlockHeight:Ie=0}=(j=yield T.dataLayer.fetchAddress(Me))!=null?j:{};be=Ie}Re[le]={processing:!1,path:xe,page:1,blockHeight:be}}),Yd=T=>T.pluginInfo.engineInfo.txSpecificHandling!=null;function Cm(T,B){return Fo(this,null,function*(){const{addressForTransactionsCache:j,addressForUtxosCache:le,addressSubscribeCache:xe,blockbookUtxoCache:Re,dataLayerUtxoCache:be,transactionSpecificUpdateCache:Me,transactionUpdateCache:Ie}=T.taskCache,ke=T.serverStates.getServerState(B);if(ke==null)return!1;if(ke.blockSubscriptionStatus==="unsubscribed")return T.serverStates.watchBlocks(B),!0;if(Object.keys(be).length>0){for(const[Ge,Ve]of Object.entries(be))if(!Ve.processing&&Ve.full)return Ve.processing=!0,yield new Gr($d(T,{scriptPubkey:Ge,utxos:Ve.utxos})),Jr(be,Ge),!0}for(const[Ge,Ve]of Object.entries(Re)){const st=Ve.blockbookUtxo;if(!Ve.processing){const at=no(Ve.path,T.pluginInfo.engineInfo.scriptTemplates);if((at===gt.Airbitz||at===gt.Legacy||at===gt.ReplayProtection)&&!T.serverStates.serverCanGetTx(B,st.txid))return!1;Ve.processing=!0,Jr(Re,Ge),yield*Jn(Dm(T,{serverUri:B,cacheItem:Ve}))}}for(const[Ge,Ve]of Object.entries(le))!Ve.processing&&T.serverStates.serverCanGetAddress(B,Ge)&&(Ve.processing=!0,Jr(le,Ge),yield*Jn(Lm(T,{address:Ge,cacheItem:Ve,serverState:ke,serverUri:B})));if(Object.keys(xe).length>0){const Ge=[],Ve=T.serverStates.getBlockHeight(B);for(const[st,at]of Object.entries(xe)){const xt=!T.serverStates.serverIsAwareOfAddress(B,st);xt&&Ge.push(st),!at.processing&&(xt&&(le[st]={processing:!1,path:at.path}),yield new Gr(Zd(T,{address:st,changePath:at.path,blockHeight:Ve,addressForTransactionsCache:j})),at.processing=!0)}if(Ge.length>0)return T.serverStates.watchAddresses(B,Ge),!0}if(Object.keys(Me).length>0){let Ge=!1;for(const[Ve,st]of Object.entries(Me))!st.processing&&T.serverStates.serverCanGetTx(B,Ve)&&(Ge=!0,st.processing=!0,Jr(Me,Ve),yield*Jn(Rm(T,{serverState:ke,serverUri:B,txId:Ve})));if(Ge)return!0}if(Object.keys(Ie).length>0){let Ge=!1;for(const[Ve,st]of Object.entries(Ie))!st.processing&&T.serverStates.serverCanGetTx(B,Ve)&&(Ge=!0,st.processing=!0,Jr(Ie,Ve),yield*Jn(Fm(T,{serverState:ke,serverUri:B,txId:Ve})));if(Ge)return!0}for(const[Ge,Ve]of Object.entries(j))!Ve.processing&&T.serverStates.serverCanGetAddress(B,Ge)&&(Ve.processing=!0,Jr(j,Ge),yield*Jn(Nm(T,{address:Ge,cacheItem:Ve,serverState:ke,serverUri:B})));return!1})}function Rm(T,B){return Fo(this,null,function*(){const{serverState:j,serverUri:le,txId:xe}=B;try{const Re=yield*Jn(T.serverStates.transactionSpecialQueryTask(le,xe));let Me=(yield new Gr(T.dataLayer.fetchTransactions({txId:xe})))[0];if(Me==null)return!0;T.pluginInfo.engineInfo.txSpecificHandling!=null&&(Me=T.pluginInfo.engineInfo.txSpecificHandling(Me,Re));const Ie=yield new Gr(T.dataLayer.saveTransaction({tx:Me})),ke=yield new Gr(Ua({dataLayer:T.dataLayer,pluginInfo:T.pluginInfo,tx:Ie,walletId:T.walletInfo.id,walletTools:T.walletTools}));return T.emitter.emit(Ur.TRANSACTIONS,[{isNew:!1,transaction:ke}]),j.txids.add(xe),!0}catch(Re){return console.error(Re),T.log("error while processing transaction specific update:",Re),T.taskCache.transactionSpecificUpdateCache[xe]={processing:!1},!1}})}function Fm(T,B){return Fo(this,null,function*(){const{serverState:j,serverUri:le,txId:xe}=B;try{const Re=yield*Jn(T.serverStates.transactionQueryTask(le,xe));if(Re.blockHeight<1)return!1;const be=s0(T,{txResponse:Re});for(const Ve of be.inputs)yield new Gr(T.dataLayer.removeUtxos([`${Ve.txId}_${Ve.outputIndex}`]));const Me=be.outputs.map(Ve=>`${be.txid}_${Ve.n}`),Ie=yield new Gr(T.dataLayer.fetchUtxos({utxoIds:Me}));for(const Ve of Ie)Ve!=null&&(Ve.blockHeight=be.blockHeight,yield new Gr(T.dataLayer.saveUtxo(Ve)));const ke=yield new Gr(T.dataLayer.saveTransaction({tx:be})),Ge=yield new Gr(Ua({dataLayer:T.dataLayer,pluginInfo:T.pluginInfo,tx:ke,walletId:T.walletInfo.id,walletTools:T.walletTools}));return T.emitter.emit(Ur.TRANSACTIONS,[{isNew:!1,transaction:Ge}]),Yd(T)&&(T.taskCache.transactionSpecificUpdateCache[xe]={processing:!1}),j.txids.add(xe),!0}catch(Re){return console.error(Re),T.log("error while processing transaction update:",Re),T.taskCache.transactionUpdateCache[xe]={processing:!1},!1}})}function Nm(T,B){return Fo(this,null,function*(){const{address:j,cacheItem:le,serverState:xe,serverUri:Re}=B,{page:be=1,blockHeight:Me}=le,Ie=T.taskCache.addressForTransactionsCache,ke=T.walletTools.addressToScriptPubkey(j),Ge=yield new Gr(T.dataLayer.fetchAddress(ke));if(Ge==null)throw new Error(`could not find address with script pubkey ${ke}`);try{const Ve=yield*Jn(T.serverStates.addressQueryTask(Re,j,{lastQueriedBlockHeight:Ge.lastQueriedBlockHeight,page:be})),{transactions:st=[],txs:at,unconfirmedTxs:xt,totalPages:bt}=Ve,Pt=at>0||xt>0;!Ge.used&&Pt&&be===1&&(Ge.used=!0);const Gt=T.seenTxCheckpoint(),rr=Gt!=null?parseInt(Gt):void 0;for(const dr of st){const[Kt]=yield new Gr(T.dataLayer.fetchTransactions({txId:dr.txid})),Ut=s0(T,{txResponse:dr}),vt=yield new Gr(T.dataLayer.saveTransaction({tx:Ut,scriptPubkeys:[ke]})),Et=yield new Gr(Ua({dataLayer:T.dataLayer,pluginInfo:T.pluginInfo,tx:vt,walletId:T.walletInfo.id,walletTools:T.walletTools})),Ct=rr!=null&&Kt==null&&(Ut.blockHeight===0||Ut.blockHeight>rr);T.emitter.emit(Ur.TRANSACTIONS,[{isNew:Ct,transaction:Et}]),Et.blockHeight>T.maxSeenTxBlockHeight&&(T.maxSeenTxBlockHeight=Et.blockHeight),Yd(T)&&(T.taskCache.transactionSpecificUpdateCache[Ut.txid]={processing:!1})}return T.updateSeenTxCheckpoint(),be<bt?(Ie[j]=Bi(Oi({},le),{processing:!1,page:be+1}),!0):(Ge.lastQueriedBlockHeight=Me,yield new Gr(T.dataLayer.saveAddress(Ge)),yield new Gr(T.updateProgressRatio()),yield new Gr(hu(T)),xe.addresses.add(j),!0)}catch(Ve){return console.error(Ve),T.log("error while processing address for transactions:",Ve),Ie[j]=Bi(Oi({},le),{processing:!1}),!1}})}const s0=(T,B)=>{const{txResponse:j}=B;let le="0";const xe=j.vout.map(be=>{var Me;const Ie=(Me=be.hex)!=null?Me:x(ke=>hd(ke),"unknown")({address:be.addresses[0],coin:T.pluginInfo.coinInfo.name});return le=(0,ue.add)(le,be.value),{n:be.n,scriptPubkey:Ie,amount:be.value}}),Re=j.vin.map(be=>{if(be.coinbase!=null)return{amount:le,n:0,outputIndex:4294967295,scriptPubkey:"",sequence:be.sequence,txId:"0000000000000000000000000000000000000000000000000000000000000000"};if(be.txid==null)throw new Error("Unexpected null txid when processing transaction inputs");const Me=x(Ie=>hd(Ie),"unknown")({address:be.addresses[0],coin:T.pluginInfo.coinInfo.name});return{txId:be.txid,outputIndex:be.vout,n:be.n,scriptPubkey:Me,sequence:be.sequence,amount:be.value}});return{txid:j.txid,hex:j.hex,blockHeight:j.blockHeight>0?j.blockHeight:0,date:j.blockTime,fees:j.fees,inputs:Re,outputs:xe,ourIns:[],ourOuts:[],ourAmount:"0"}};function Lm(T,B){return Fo(this,null,function*(){const{address:j,cacheItem:le,serverState:xe,serverUri:Re}=B,{addressForUtxosCache:be,blockbookUtxoCache:Me,dataLayerUtxoCache:Ie}=T.taskCache;try{const ke=yield*Jn(T.serverStates.utxoListQueryTask(Re,j)),Ge=T.walletTools.addressToScriptPubkey(j),Ve=yield new Gr(T.dataLayer.fetchAddress(Ge));if(Ve==null||Ve.path==null)return!0;if(ke.length===0)return Jd(Ie,le.path,Ge,0),!0;for(const st of ke){const at=`${st.txid}_${st.vout}`;Me[at]={blockbookUtxo:st,processing:!1,requiredCount:ke.length,path:le.path,address:Bi(Oi({},Ve),{path:Ve.path})}}return xe.addresses.add(j),!0}catch(ke){return console.error(ke),T.log("error while processing address for UTXOs:",ke),be[j]=Bi(Oi({},le),{processing:!1}),!1}})}const $d=(T,B)=>Xr(void 0,null,function*(){const{utxos:j,scriptPubkey:le}=B,xe=Object.fromEntries([...j].map(ke=>[ke.id,ke])),Re=[],be=yield T.dataLayer.fetchUtxos({scriptPubkey:le});let Me="0";for(const ke of be){if(ke==null)throw new Error("Unexpected undefined utxo when processing unspent transactions");ke.spent||(Me=(0,ue.add)(ke.value,Me)),xe[ke.id]==null&&Re.push(ke.id)}yield T.dataLayer.removeUtxos(Re);let Ie="0";for(const ke of Object.values(xe))ke.spent||(Ie=(0,ue.add)(ke.value,Ie)),yield T.dataLayer.saveUtxo(ke);if(Ie!==Me){T.log("address balance changed:",{scriptPubkey:le,oldBalance:Me,newBalance:Ie}),T.emitter.emit(Ur.ADDRESS_BALANCE_CHANGED,T.pluginInfo.currencyInfo.currencyCode,[{scriptPubkey:le,balance:Ie}]);const ke=yield T.dataLayer.fetchAddress(le);if(ke==null)throw new Error("address not found when processing UTXO transactions");yield T.dataLayer.saveAddress(Bi(Oi({},ke),{balance:Ie,used:!0}))}yield T.updateProgressRatio(),yield hu(T).catch(ke=>{throw T.log.error(ke),ke})});function Dm(T,B){return Fo(this,null,function*(){const{serverUri:j,cacheItem:le}=B,{blockbookUtxoCache:xe,dataLayerUtxoCache:Re}=T.taskCache,be=no(le.path,T.pluginInfo.engineInfo.scriptTemplates),Me=au(be);let Ie,ke;const Ge=()=>{var Ve;const st={id:`${le.blockbookUtxo.txid}_${le.blockbookUtxo.vout}`,txid:le.blockbookUtxo.txid,vout:le.blockbookUtxo.vout,value:le.blockbookUtxo.value,scriptPubkey:le.address.scriptPubkey,script:Ie,redeemScript:ke,scriptType:Me,blockHeight:(Ve=le.blockbookUtxo.height)!=null?Ve:-1,spent:!1};Jd(Re,le.path,le.address.scriptPubkey,le.requiredCount,st)};switch(be){case gt.Airbitz:case gt.Legacy:case gt.ReplayProtection:ke=le.address.redeemScript;{const[Ve]=yield new Gr(T.dataLayer.fetchTransactions({txId:le.blockbookUtxo.txid}));if(Ve==null)try{const st=yield*Jn(T.serverStates.transactionQueryTask(j,le.blockbookUtxo.txid));return Ie=s0(T,{txResponse:st}).hex,Ge(),!0}catch(st){T.log("error while processing Blockbook UTXO:",st);const at=`${le.blockbookUtxo.txid}_${le.blockbookUtxo.vout}`;return xe[at]={blockbookUtxo:le.blockbookUtxo,processing:!1,path:le.path,address:le.address,requiredCount:le.requiredCount},!1}else Ie=Ve.hex}break;case gt.WrappedSegwit:if(Ie=le.address.scriptPubkey,le.address.redeemScript==null)throw new Error("Address redeem script not defined, but required for p2sh wrapped segwit utxo processing");ke=le.address.redeemScript;break;case gt.Segwit:Ie=le.address.scriptPubkey;break}return Ge(),!0})}const Jd=(T,B,j,le,xe)=>{var Re;const be=(Re=T[j])!=null?Re:{utxos:[],processing:!1,path:B,full:!1};xe!=null&&be.utxos.push(xe),T[j]=be,be.full=be.utxos.length>=le};function Qd(T){const{pluginInfo:B,publicKey:j}=T,{engineInfo:le}=B,{name:xe}=B.coinInfo,Re=j.publicKeys,be={getPubkey(Me){var Ie;if(Re[Me.format]==null)throw new Error(`wallet tools: xpub with format ${Me.format} does not exist`);return An({xpub:(Ie=Re[Me.format])!=null?Ie:"",coin:xe,type:Ai(Me.format),bip44ChangeIndex:Me.changeIndex,bip44AddressIndex:Me.addressIndex})},getScriptPubkey(Me){const Ie=no(Me,le.scriptTemplates),ke=au(Ie);return Hn({pubkey:be.getPubkey(Me),scriptTemplates:le.scriptTemplates,scriptType:ke})},getScriptPubkeyFromWif(Me,Ie){const ke=Ai(Ie),Ge=au(ke),Ve=Zf({wifKey:Me,coin:xe});[gt.Segwit,gt.WrappedSegwit].includes(ke)&&!Ve.compressed&&(Ve.compressed=!0);const st=wl(Ve);return Hn({pubkey:st,scriptTemplates:le.scriptTemplates,scriptType:Ge})},getAddress(Me){const Ie=no(Me,B.engineInfo.scriptTemplates),{scriptPubkey:ke}=be.getScriptPubkey(Me),Ge=n0(Ie);return Xn({scriptPubkey:ke,addressType:Ge,coin:xe})},addressToScriptPubkey(Me){return Rr({address:Me,coin:xe})},scriptPubkeyToAddress(Me){const{changePath:Ie}=Me,ke=no(Ie,B.engineInfo.scriptTemplates),Ge=n0(ke);return Xn({scriptPubkey:Me.scriptPubkey,addressType:Ge,coin:xe,includeCashaddrPrefix:B.coinInfo.includeCashaddrPrefix})},getPrivateKey(Me){const{path:Ie,xprivKeys:ke}=Me,Ge=ke[Ie.format];if(Ge==null)throw new Error(`wallet tools: xpriv with format ${Ie.format} does not exist`);return Xf({xpriv:Ge,type:Ai(Ie.format),coin:xe,bip44ChangeIndex:Ie.changeIndex,bip44AddressIndex:Ie.addressIndex})},getPrivateKeyEncodingFromWif(Me){return Zf({wifKey:Me,coin:xe})},getScriptAddress({path:Me,scriptTemplate:Ie}){const ke=be.getPubkey(Me),Ge=Ie(ke),{address:Ve,scriptPubkey:st,redeemScript:at}=Zn({coin:xe,scriptPubkey:Ge});if(Ve==null)throw new Error("Failed to derive address for script");return{address:Ve,scriptPubkey:st,redeemScript:at}},signMessageBase64({path:Me,message:Ie,xprivKeys:ke}){const Ge=be.getPrivateKey({path:Me,xprivKeys:ke});return xl(Ie,Ge)}};return be}var ep=gr(8287).Buffer,Um=Object.defineProperty,Hm=Object.defineProperties,zm=Object.getOwnPropertyDescriptors,tp=Object.getOwnPropertySymbols,jm=Object.prototype.hasOwnProperty,Km=Object.prototype.propertyIsEnumerable,rp=(T,B,j)=>B in T?Um(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,Ci=(T,B)=>{for(var j in B||(B={}))jm.call(B,j)&&rp(T,j,B[j]);if(tp)for(var j of tp(B))Km.call(B,j)&&rp(T,j,B[j]);return T},Ri=(T,B)=>Hm(T,zm(B)),Br=(T,B,j)=>new Promise((le,xe)=>{var Re=Ie=>{try{Me(j.next(Ie))}catch(ke){xe(ke)}},be=Ie=>{try{Me(j.throw(Ie))}catch(ke){xe(ke)}},Me=Ie=>Ie.done?le(Ie.value):Promise.resolve(Ie.value).then(Re,be);Me((j=j.apply(T,B)).next())});function Wm(T){return Br(this,null,function*(){const{pluginInfo:B,pluginDisklet:j,emitter:le,engineOptions:xe,io:Re,pluginState:be}=T,{walletLocalDisklet:Me,walletLocalEncryptedDisklet:Ie,log:ke}=xe,{currencyInfo:Ge,engineInfo:Ve,coinInfo:st}=B,at=Ml(xe.userSettings);be.updateServers(at).catch(mt=>{ke.error(mt)});const xt=e0(st.name,st.coinType),bt=x(xt),Pt=ud(B)(T.walletInfo),{privateKeyFormat:Gt,publicKey:rr,walletFormats:dr}=Pt.keys;if(!Ve.formats.includes(Gt)){const mt=`Wallet format is not supported: ${Gt}`;throw ke.error(mt),new Error(mt)}const Kt=Qd({pluginInfo:B,publicKey:rr}),Ut=yield Yp({disklet:j,pluginInfo:B,io:Re,log:T.engineOptions.log}),vt=yield Xh({disklet:Me,emitter:le,log:ke}),Et=yield id({disklet:Me});let Ct;const At=(mt=>Rt=>(Rt!=null&&(mt=Rt),mt))();At(T.engineOptions.seenTxCheckpoint),le.on(Ur.SEEN_TX_CHECKPOINT,mt=>{At(mt)});const It=qd(Ri(Ci({},T),{dataLayer:Et,pluginState:be,seenTxCheckpoint:At,walletTools:Kt,walletInfo:Pt})),Dt={accelerate(mt){return Br(this,null,function*(){var Rt;const{canReplaceByFee:Yt=!1}=Ge;if(!Yt||Gt==="bip32"||Gt==="bip44")return null;const Vt=mt.txid,[nr]=yield Et.fetchTransactions({txId:Vt});if(nr==null||nr.inputs.every(Nr=>Nr.sequence>4294967293)||nr.blockHeight!==0)return null;const qt=ju(nr.hex),ir=Math.round(parseInt(nr.fees)/qt*2),sr=nr.inputs,Sr=yield Promise.all(sr.map((Nr,Kr)=>Br(this,null,function*(){const Qn=yield rg(Et,nr,Kr);return Qn.spent=!1,Qn}))),Cr=Sr.reduce((Nr,Kr)=>Kr.value>Nr.value?Kr:Nr),zr=[],Zr=[];let Fr;for(const Nr of nr.outputs){const Kr=yield Et.fetchAddress(Nr.scriptPubkey);if(Kr==null){zr.push({scriptPubkey:Nr.scriptPubkey,value:parseInt(Nr.amount)});continue}if(Kr.path==null)throw new Error("Expecting path for address");const Qn=no(Kr.path,Ve.scriptTemplates),fo=n0(Qn),{address:gn}=Xn({scriptPubkey:Kr.scriptPubkey,addressType:fo,coin:st.name,redeemScript:Kr.redeemScript});Zr.push(gn),Kr.path.changeIndex===1?Fr=gn:zr.push({scriptPubkey:Nr.scriptPubkey,value:parseInt(Nr.amount)})}const jr=Fr==null?yield It.getFreshAddress({branch:1}):{publicAddress:Fr},Bn=(Rt=jr.segwitAddress)!=null?Rt:jr.publicAddress,Fi=kl(yield Et.fetchUtxos({utxoIds:[]})).filter(Nr=>Nr.txid!==Vt),wn={utxos:[...Sr,...Fi],forceUseUtxo:[Cr],targets:zr,memos:mt.memos,feeRate:ir,coin:st.name,currencyCode:Ge.currencyCode,enableRbf:!0,freshChangeAddress:Bn,subtractFee:!1,log:ke,outputSort:"bip69"},on=(()=>{try{return Fa(wn)}catch(Nr){const Kr=O(Nr);if((Kr==null?void 0:Kr.networkFeeShortage)!=null){let Qn=parseInt(Kr.networkFeeShortage);for(const fo of zr){if(fo.value==null)continue;const gn=Math.min(fo.value,Qn);fo.value-=gn,Qn-=gn}return Fa(wn)}throw Nr}})();on.changeUsed&&Zr.push(Bn);const xn=on.inputs.map(Nr=>Nr.scriptPubkey.toString("hex"));let un="0";for(const Nr of on.outputs){const Kr=Nr.scriptPubkey.toString("hex");(yield Et.fetchAddress(Kr))==null?un=ue.sub(un,Nr.value.toString()):xn.push(Kr)}const Ni=on.fee.toString();un=ue.sub(un,Ni);const Uo={unsignedTx:on.hex,psbt:{base64:on.psbtBase64,inputs:on.inputs,outputs:on.outputs},ourScriptPubkeys:xn,replacedTxid:Vt};return Ri(Ci({},mt),{blockHeight:0,currencyCode:Ge.currencyCode,date:La(),feeRateUsed:{satPerVByte:ir},isSend:!0,nativeAmount:un,networkFee:Ni,otherParams:Uo,ourReceiveAddresses:Zr,parentNetworkFee:void 0,signedTx:"",txid:"",walletId:Pt.id})})},startEngine(){return Br(this,null,function*(){le.emit(Ur.WALLET_BALANCE_CHANGED,Ge.currencyCode,vt.state.balance),be.addEngine(It),yield Ut.start(),yield It.start()})},killEngine(){return Br(this,null,function*(){yield It.stop(),Ut.stop(),be.removeEngine(It)})},getBalance(mt){return vt.state.balance},getBlockHeight(){return vt.state.lastSeenBlockHeight},addCustomToken(mt){return Br(this,null,function*(){return yield Promise.resolve(void 0)})},addGapLimitAddresses(mt){return Br(this,null,function*(){return yield It.addGapLimitAddresses(mt)})},broadcastTx(mt){return Br(this,null,function*(){var Rt,Yt;const{otherParams:Vt}=mt;if(((Rt=Vt==null?void 0:Vt.paymentProtocolInfo)==null?void 0:Rt.payment)!=null&&((Yt=Vt==null?void 0:Vt.paymentProtocolInfo)==null?void 0:Yt.paymentUrl)!=null&&typeof(yield sg(Re.fetch,Vt.paymentProtocolInfo.paymentUrl,Vt.paymentProtocolInfo.payment))>"u")throw new Error(`Error when sending to ${Vt.paymentProtocolInfo.paymentUrl}`);if((yield It.broadcastTx(mt).catch(qt=>{throw String(qt).includes("Error: Blockbook Error: -26: dust")?new Lp:qt}))!==mt.txid)throw new Error("broadcast response txid does not match original");return mt})},changeUserSettings(mt){return Br(this,null,function*(){yield be.updateServers(Ml(mt))})},disableTokens(mt){return Br(this,null,function*(){return yield Promise.resolve(void 0)})},dumpData(){return Br(this,null,function*(){return{walletId:Pt.id.split(" - ")[0],walletType:Pt.type,data:{walletInfo:{pluginType:Ge.pluginId,privateKeyFormat:Gt,walletFormats:dr},metadataState:vt.state,storageState:yield Et.dumpData(),pluginState:be.dumpData()}}})},enableTokens(mt){return Br(this,null,function*(){return yield Promise.resolve(void 0)})},getDisplayPrivateSeed(mt){const Rt=bt(mt);return Rt==null?null:Rt.format==="bip32"?ep.from(Rt.seed,"base64").toString("hex"):Rt.seed},getDisplayPublicSeed(){const mt=rr.publicKeys;return Object.values(mt).filter(Rt=>Rt!=null).join(`
80
- `)},getFreshAddress(mt){return Br(this,null,function*(){const{forceIndex:Rt}=mt;return yield It.getFreshAddress({forceIndex:Rt})})},getNumTransactions(mt){return Et.numTransactions()},getPaymentProtocolInfo(mt){return Br(this,null,function*(){return yield og(mt,Ge.currencyCode,Re.fetch)})},getTransactions(mt){return Br(this,null,function*(){const Rt=kl(yield Et.fetchTransactions({options:mt}));return yield Promise.all(Rt.map(Yt=>Br(this,null,function*(){return yield Ua({walletId:Pt.id,tx:Yt,walletTools:Kt,dataLayer:Et,pluginInfo:B})})))})},isAddressUsed(mt){return Br(this,null,function*(){const Rt=Kt.addressToScriptPubkey(mt),Yt=yield Et.fetchAddress(Rt);if(Yt==null)throw new Error("Address not found in wallet");return Yt.used})},makeSpend(mt){return Br(this,null,function*(){var Rt,Yt,Vt,nr,qt,ir,sr;const Sr=Ct!=null?Ct:Et;Ct!=null&&(Ct=void 0),mt=vv(mt,Ge);const{memos:Cr=[],spendTargets:zr}=mt,Zr=Np((Rt=mt.otherParams)!=null?Rt:{}),Fr=(Yt=Zr.txOptions)!=null?Yt:{},{outputSort:jr,utxoSourceAddress:Bn,forceChangeAddress:Fi}=Zr;let so;if(Bn!=null&&(so=Kt.addressToScriptPubkey(Bn)),Fr.CPFP==null&&zr.length<1)throw new Error("Need to provide Spend Targets");const wn=zr.reduce((Wr,{nativeAmount:En})=>ue.add(Wr,En!=null?En:"0"),"0"),on=(Vt=Fr.utxos)!=null?Vt:kl(yield Sr.fetchUtxos({scriptPubkey:so,utxoIds:[]}));if(ue.gt(wn,`${tg(on)}`)||on.length===0)throw new Dp({tokenId:null});let xn=[];const un=[];for(const Wr of zr){if(Wr.publicAddress==null||Wr.nativeAmount==null)throw new Error("Invalid spend target");if(((nr=Wr.otherParams)==null?void 0:nr.script)!=null){const{script:En}=Wr.otherParams;if(En.type==="replayProtection"){const{publicAddress:uo}=yield It.deriveScriptAddress(En.type);xn.push({address:uo,value:Wr.nativeAmount==null?void 0:parseInt(Wr.nativeAmount)})}}else{if(Wr.publicAddress!=null){const En=Kt.addressToScriptPubkey(Wr.publicAddress);(yield Sr.fetchAddress(En))!=null&&un.push(Wr.publicAddress)}xn.push({address:Wr.publicAddress,value:Wr.nativeAmount==null?void 0:parseInt(Wr.nativeAmount)})}}if(xn.length+Cr.length<1)throw new Error("Need to provide Spend Targets");const Ni=yield It.getFreshAddress({branch:1}),Uo=(qt=Fi!=null?Fi:Ni.segwitAddress)!=null?qt:Ni.publicAddress,Nr=parseInt(yield Ut.getRate(mt));let Kr;if(Fr.CPFP!=null){const[Wr]=yield Sr.fetchTransactions({txId:Fr.CPFP});if(Wr==null)throw new Error("transaction not found");const En=[];for(const uo of Wr.ourOuts){const[ja]=yield Sr.fetchUtxos({utxoIds:[uo]});ja!=null&&En.push(ja)}Kr=En.reduce((uo,ja)=>ue.gt(uo.value,ja.value)?uo:ja),xn=[]}const Qn=Ge.canReplaceByFee===!0?(sr=(ir=mt.enableRbf)!=null?ir:Zr.enableRbf)!=null?sr:!0:!1;ke.warn(`spend: Using fee rate ${Nr} sat/B`);const fo=Fr.subtractFee!=null?Fr.subtractFee:!1,gn=Fa({utxos:on,forceUseUtxo:Kr!=null?[Kr]:[],targets:xn,memos:Cr,feeRate:Nr,coin:st.name,currencyCode:Ge.currencyCode,enableRbf:Qn,freshChangeAddress:Uo,subtractFee:fo,log:ke,outputSort:jr});gn.changeUsed&&un.push(Uo);let za="0";const pp=gn.inputs.map(Wr=>Wr.scriptPubkey.toString("hex"));for(const Wr of gn.outputs){const En=Wr.scriptPubkey.toString("hex");(yield Sr.fetchAddress(En))==null?za=ue.sub(za,Wr.value.toString()):pp.push(En)}const l0=gn.fee.toString();za=ue.sub(za,l0);const f1={unsignedTx:gn.hex,psbt:{base64:gn.psbtBase64,inputs:gn.inputs,outputs:gn.outputs},edgeSpendInfo:mt,ourScriptPubkeys:pp};return{blockHeight:0,currencyCode:Ge.currencyCode,date:La(),feeRateUsed:{satPerVByte:Nr},isSend:!0,memos:Cr,nativeAmount:za,networkFee:l0,networkFees:[{tokenId:null,nativeAmount:l0}],otherParams:f1,ourReceiveAddresses:un,signedTx:"",tokenId:null,txid:"",walletId:Pt.id}})},resyncBlockchain(){return Br(this,null,function*(){yield Dt.killEngine(),yield Et.clearAll(),yield be.clearCache(),yield vt.clear(),yield Ut.clearCache(),yield be.refreshServers(),yield Dt.startEngine()})},saveTx(mt){return Br(this,null,function*(){var Rt,Yt;const Vt=(Rt=mt.otherParams)==null?void 0:Rt.replacedTxid;if(Vt!=null){const[ir]=yield Et.fetchTransactions({txId:Vt});if(ir!=null){ir.blockHeight=-1,yield Et.saveTransaction({tx:ir});const sr=yield Ua({dataLayer:Et,pluginInfo:B,tx:ir,walletId:Pt.id,walletTools:Kt});le.emit(Ur.TRANSACTIONS,[{isNew:!1,transaction:sr}])}}const nr=Lv(mt);yield Et.saveTransaction({tx:nr,scriptPubkeys:(Yt=mt.otherParams)==null?void 0:Yt.ourScriptPubkeys});const qt=yield gg(Ve,Et,nr);yield It.processUtxos(qt)})},signMessage(mt,Rt,Yt){return Br(this,null,function*(){const Vt=Rp(Yt.otherParams),{publicAddress:nr}=Vt,qt=Kt.addressToScriptPubkey(nr),ir=yield Et.fetchAddress(qt);if((ir==null?void 0:ir.path)==null)throw new Error("Missing data-layer address to sign with");const sr=bt(Rt);if(sr==null)throw new Error("Cannot sign a message for a read-only wallet");const Sr=yield pd({privateKey:sr,walletLocalEncryptedDisklet:Ie,coin:st.name});return yield Kt.signMessageBase64({path:ir==null?void 0:ir.path,message:mt,xprivKeys:Sr})})},signTx(mt,Rt){return Br(this,null,function*(){var Yt,Vt,nr;const qt=mt.otherParams;if(qt==null)throw new Error("Invalid transaction data");const{psbt:ir,edgeSpendInfo:sr}=qt;if(ir==null)throw new Error("Invalid transaction data");const Sr=bt(Rt);if(Sr==null)throw new Error("Cannot sign a transaction for a read-only wallet");const Cr=yield pd({privateKey:Sr,walletLocalEncryptedDisklet:Ie,coin:st.name}),zr=yield Br(this,null,function*(){return(sr==null?void 0:sr.privateKeys)!=null?sr.privateKeys.map(jr=>Kt.getPrivateKeyEncodingFromWif(jr)):yield Promise.all(ir.inputs.map(jr=>Br(this,[jr],function*({hash:Bn,index:Fi}){const so=ep.from(Bn).reverse().toString("hex"),[wn]=yield Et.fetchTransactions({txId:so});if(wn==null)throw new Error("Unable to find previous transaction data for input");const on=wn.outputs.find(Uo=>Uo.n===Fi);if(on==null)throw new Error("Unable to find prevout in transaction");const{scriptPubkey:xn}=on,un=yield Et.fetchAddress(xn);if(un==null)throw new Error(`Address for scriptPubkey '${xn}' not found`);if(un.path==null)throw new Error(`Invalid scriptPubkey ${un.scriptPubkey}; Missing path`);return{hex:Kt.getPrivateKey({path:un.path,xprivKeys:Cr}),compressed:!0}})))}),Zr=yield vp({coin:st.name,feeInfo:Ut.feeInfo,privateKeyEncodings:zr,psbtBase64:ir.base64});mt.txid=Zr.id,mt.signedTx=Zr.hex;const{paymentProtocolInfo:Fr}=(nr=(Vt=(Yt=mt.otherParams)==null?void 0:Yt.edgeSpendInfo)==null?void 0:Vt.otherParams)!=null?nr:{};if(Fr!=null){const jr=ag(mt.signedTx,mt.currencyCode);mt.otherParams==null&&(mt.otherParams={}),Object.assign(mt.otherParams,{paymentProtocolInfo:Ri(Ci({},Fr),{payment:jr})})}return mt.date=La(),mt})},sweepPrivateKeys(mt){return Br(this,null,function*(){var Rt;const Yt=Ve.formats,Vt={id:Pt.id,type:Pt.type,keys:{privateKeyFormat:Pt.keys.privateKeyFormat,walletFormats:Yt,publicKey:{publicKeys:{}}}},nr=(Rt=mt.privateKeys)!=null?Rt:[];if(nr.length<1)throw new Error("No private keys given");const qt=(0,Sl.cQ)(),ir=(0,Sl.cQ)(),sr=new Vh,Sr={disklet:qt,emitter:sr,log:ke},Cr=yield Xh(Sr),zr=yield id(Sr),Zr=Qd({pluginInfo:B,publicKey:Vt.keys.publicKey}),Fr=new Promise((Bn,Fi)=>{sr.on(Ur.ADDRESSES_CHECKED,so=>Br(this,null,function*(){if(so===1)try{yield jr.stop();const wn=yield zr.fetchUtxos({utxoIds:[]});if(wn===null||wn.length<1)throw new Error("Private key has no funds");const on=yield this.getFreshAddress({tokenId:null}),xn=Cr.state.balance,un={utxos:wn,subtractFee:!0};mt.spendTargets=[{publicAddress:on.publicAddress,nativeAmount:xn}],mt.otherParams=Ri(Ci({},mt.otherParams),{txOptions:un}),Ct=zr;const Ni=yield Dt.makeSpend(mt);Bn(Ni)}catch(wn){Fi(wn)}}))}),jr=qd(Ri(Ci({},T),{dataLayer:zr,emitter:sr,engineOptions:Ri(Ci({},T.engineOptions),{walletLocalDisklet:qt,walletLocalEncryptedDisklet:ir}),pluginInfo:Ri(Ci({},B),{engineInfo:Ri(Ci({},Ve),{gapLimit:0})}),seenTxCheckpoint:()=>"0",walletTools:Zr,walletInfo:Vt}));return yield jr.loadWifs(nr),yield jr.start(),yield Fr})},otherMethods:{}};return Dt})}var np=gr(8287).Buffer,No=(T,B,j)=>new Promise((le,xe)=>{var Re=Ie=>{try{Me(j.next(Ie))}catch(ke){xe(ke)}},be=Ie=>{try{Me(j.throw(Ie))}catch(ke){xe(ke)}},Me=Ie=>Ie.done?le(Ie.value):Promise.resolve(Ie.value).then(Re,be);Me((j=j.apply(T,B)).next())});function Gm(T,B){const{currencyInfo:j,engineInfo:le,coinInfo:xe}=B,Re=e0(xe.name,xe.coinType),be=C(Re),Me=ud(B);return{checkPublicKey(ke){return No(this,null,function*(){const Ge=x(sd)(ke);if(Ge==null)return!1;const Ve=fd(Ge);return iu(le,Ve).every(at=>Ge.publicKeys[at]!=null)})},createPrivateKey(ke,Ge){return No(this,null,function*(){var Ve,st,at,xt;const Pt={imported:!1,seed:ce.VF(np.from(T.random(32))),format:(st=(Ve=Ge==null?void 0:Ge.format)!=null?Ve:le.formats[0])!=null?st:"bip44",coinType:(xt=(at=Ge==null?void 0:Ge.coinType)!=null?at:xe.coinType)!=null?xt:0};return be(Pt)})},importPrivateKey(ke,Ge){return No(this,null,function*(){var Ve,st,at,xt,bt;if(!ce.JB(ke))throw np.from(ke,"base64").length===32?new Error("Import for Airbitz seeds is unsupported."):new Error("Invalid mnemonic");const Gt={imported:!0,seed:ke,format:(at=(st=Ge==null?void 0:Ge.format)!=null?st:(Ve=le.formats)==null?void 0:Ve[0])!=null?at:"bip44",coinType:(bt=(xt=Ge==null?void 0:Ge.coinType)!=null?xt:xe.coinType)!=null?bt:0};return be(Gt)})},derivePublicKey(ke){return No(this,null,function*(){return Me(ke).keys.publicKey})},parseUri(ke){return No(this,null,function*(){const Ge=ke.toLocaleLowerCase().startsWith(`${xe.name}://`);Ge&&(ke=ke.replace("//",""));const Ve=i0()(ke,{},!0),st=Ve.protocol.replace(":","").toLowerCase();if(st!==""&&st!==j.pluginId&&st!==le.uriPrefix&&st!=="pay")throw new Error("InvalidUriError");const{pathname:at,query:xt}=Ve;if(at===""&&xt.r==null)throw new Error("InvalidUriError");const bt={};if(at!==""){const rr=eg({pathname:Ve.pathname,coin:xe.name});if(rr==null)throw new Error("InvalidUriError");Object.assign(bt,rr)}const Pt={};xt.label!=null&&(Pt.name=xt.label),xt.message!=null&&(Pt.notes=xt.message),xt.category!=null&&(Pt.category=xt.category),xt.r!=null&&(bt.paymentProtocolUrl=xt.r),Ge&&(Pt.gateway=!0),Object.assign(bt,{metadata:Pt});const Gt=j.denominations.find(({name:rr})=>rr===j.currencyCode);if(Gt!=null&&xt.amount!=null){const{multiplier:rr="1"}=Gt,dr=ue.mul(xt.amount,rr.toString());bt.currencyCode=j.currencyCode,bt.nativeAmount=ue.toFixed(dr,0,0)}return bt})},encodeUri(ke,Ge){return No(this,null,function*(){var Ve,st,at;let xt=ke.publicAddress;if(xt==="")throw new Error("InvalidPublicAddressError");((Ve=xe.prefixes.cashaddr)==null?void 0:Ve.some(Gt=>xt.startsWith(`${Gt}:`)))===!0&&(xt=xt.split(":")[1]);const bt=[];if(ke.nativeAmount!=null){const Gt=(st=ke.currencyCode)!=null?st:j.currencyCode,rr=j.denominations.find(({name:Kt})=>Kt===Gt);if(rr==null)throw new Error("InvalidDenominationError");const dr=ue.div(ke.nativeAmount,rr.multiplier,8);bt.push(`amount=${dr}`)}ke.label!=null&&bt.push(`label=${ke.label}`),ke.message!=null&&bt.push(`message=${ke.message}`);const Pt=ke.metadata;return Pt!=null&&(Pt.name!=null&&bt.push(`label=${Pt.name}`),Pt.notes!=null&&bt.push(`message=${Pt.notes}`)),bt.length>0?xd.serialize({scheme:(at=le.uriPrefix)!=null?at:j.pluginId,path:xt,query:bt.join("&")}):xt})},getSplittableTypes(ke){var Ge;const{keys:{format:Ve="bip32"}={}}=ke;return((Ge=le.forks)!=null?Ge:[]).filter(at=>nv(at).includes(Ve)).map(at=>`wallet:${at}`)}}}const Vm=E({serverUrl:p,serverScore:m,responseTime:m,numResponseTimes:m}),ip=E(Vm),qm=E({customServers:ip,enableCustomServers:x(S,!1),internalServers:ip}),Lo=999999999,du=500,f0=-100,op=-100,ap=-10;class Xm{constructor(B){const{log:j,onDirtyServer:le=()=>{}}=B;this.log=j,this.scoresLastLoaded=Date.now(),this.lastScoreUpTime=Date.now(),this.onDirtyServer=le}serverScoresLoad(B,j=[]){for(const le of j)if(B[le]===void 0){const xe={serverUrl:le,serverScore:0,responseTime:Lo,numResponseTimes:0};B[le]=xe}for(const le in B){const xe=B[le];let Re=!1;for(const Ie of j)if(Ie===le){Re=!0;break}let be=xe.serverScore;Re?be<ap&&(be=ap):be>op&&(be=op),this.scoresLastLoaded===0&&(be=Math.min(be,du-100)),le.startsWith("ws")&&be>0&&(be=0,xe.responseTime=Lo),Td(le).length>0&&(be=be-(du+f0)),xe.serverScore=be,this.onDirtyServer(le)}}clearServerScoreTimes(){this.scoresLastLoaded=Date.now(),this.lastScoreUpTime=Date.now()}printServers(B){this.log("**** printServers ****");const j=[];for(const le in B)j.push(B[le]);j.sort((le,xe)=>xe.serverScore-le.serverScore);for(const le of j){const xe=le.serverScore.toString(),Re=le.responseTime.toString(),be=le.numResponseTimes.toString(),Me=le.serverUrl;this.log(`ServerInfo ${xe} ${Re}ms ${be} ${Me}`)}this.log("**************************")}serverScoreUp(B,j,le,xe=1){const Re=B[j];Re.serverScore+=xe,Re.serverScore>du&&(Re.serverScore=du),this.lastScoreUpTime=Date.now(),le!==0&&this.setResponseTime(B,j,le),this.log(`${j}: score UP to ${Re.serverScore} ${le}ms`),this.onDirtyServer(j)}serverScoreDown(B,j,le=10){if(Date.now()-this.lastScoreUpTime>6e4){this.log(`${j}: score DOWN cancelled`);return}const Re=B[j];Re.serverScore-=le,Re.serverScore<f0&&(Re.serverScore=f0),Re.numResponseTimes===0&&this.setResponseTime(B,j,9999),this.log(`${j}: score DOWN to ${Re.serverScore}`),this.onDirtyServer(j)}setResponseTime(B,j,le){const xe=B[j];xe.numResponseTimes++;const Re=xe.responseTime;let be=0;Lo===Re?be=le:xe.numResponseTimes%10===0?be=(Re+le*4)/5:be=(Re+le)/2,xe.responseTime=be,this.onDirtyServer(j)}getServers(B,j,le=[]){if(B==null||Object.keys(B).length===0)return[];let xe=[],Re=[];for(const at in B){const xt=B[at];xe.push(xt),xt.responseTime===Lo&&xt.serverScore===0&&Re.push(xt)}if(xe.length===0)return[];if(le.length>0){const at=xt=>{for(const bt of le)if(typeof bt=="string"&&xt.serverUrl.indexOf(bt)===0||bt instanceof RegExp&&bt.test(xt.serverUrl))return!0;return!1};xe=xe.filter(at),Re=Re.filter(at)}xe.sort((at,xt)=>xt.serverScore-at.serverScore);const be=xe[0];let Me=0,Ie=0;for(let at=0;at<xe.length;at++){const xt=xe[at];xt.serverScore<be.serverScore-100||xt.serverScore<5||xt.responseTime>=Lo||(Me++,!(Me<j)&&(Me>=xe.length/2||(Ie=at)))}let ke=xe.slice(0,Ie);ke.sort((at,xt)=>at.responseTime-xt.responseTime),ke=ke.concat(xe.slice(Ie));const Ge=[];let Ve=0,st=0;for(const at of ke)if(Ve++,Ge.push(at.serverUrl),at.responseTime===Lo&&at.serverScore===0&&st++,Ve>=j||Ve>=j/2&&st===0&&Re.length>=j-Ve)break;if(st===0){for(const at of Re)if(Ge.unshift(at.serverUrl),Ve++,Ve>=j)break}return Ge}removeServers(B,j){for(const le of j)delete B[le]}}var Zm=Object.defineProperty,Ym=Object.defineProperties,$m=Object.getOwnPropertyDescriptors,sp=Object.getOwnPropertySymbols,Jm=Object.prototype.hasOwnProperty,Qm=Object.prototype.propertyIsEnumerable,fp=(T,B,j)=>B in T?Zm(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,e1=(T,B)=>{for(var j in B||(B={}))Jm.call(B,j)&&fp(T,j,B[j]);if(sp)for(var j of sp(B))Qm.call(B,j)&&fp(T,j,B[j]);return T},t1=(T,B)=>Ym(T,$m(B)),Do=(T,B,j)=>new Promise((le,xe)=>{var Re=Ie=>{try{Me(j.next(Ie))}catch(ke){xe(ke)}},be=Ie=>{try{Me(j.throw(Ie))}catch(ke){xe(ke)}},Me=Ie=>Ie.done?le(Ie.value):Promise.resolve(Ie.value).then(Re,be);Me((j=j.apply(T,B)).next())});const u0="serverCache.json";function r1(T){const{defaultSettings:B,log:j,pluginDisklet:le,pluginId:xe}=T;let Re=[];const be=t(le);let Me={customServers:{},enableCustomServers:B.enableCustomServers,internalServers:{}},Ie=!1;const ke=()=>{const bt=Me.enableCustomServers?"customServers":"internalServers";return Me[bt]},Ge=()=>Do(this,null,function*(){st.printServers(ke()),Ie&&(yield be.setJson(u0,Me).catch(bt=>{j(`${xe} - ${JSON.stringify(bt.toString())}`)}),Ie=!1,st.scoresLastLoaded=Date.now(),j(`${xe} - Saved server cache`))}),Ve=bt=>{Ie=!0;for(const Pt of Re)if(Pt.processedPercent===1&&Pt.getServerList().includes(bt)){Ge().catch(rr=>{j(`${xe} - ${JSON.stringify(rr.toString())}`)});return}},st=new Xm({log:j,onDirtyServer:Ve}),at=()=>Do(this,null,function*(){if(xt.infoPayload==null)return j.warn("info server list list empty"),[];const bt=Object.keys(xt.infoPayload.blockbookServers);return j.warn("info server list",bt),bt}),xt={infoPayload:T.infoPayload,addEngine(bt){Re.push(bt)},removeEngine(bt){Re=Re.filter(Pt=>Pt!==bt)},dumpData(){return{"pluginState.servers_":ke()}},load(){return Do(this,null,function*(){try{Me=qm(yield be.getJson(u0))}catch(bt){j(`${xe}: Failed to load server cache: ${JSON.stringify(bt)}`)}return xt.refreshServers().catch(bt=>{j(`${xe} - ${JSON.stringify(bt.toString())}`)}),this})},serverScoreDown(bt){st.serverScoreDown(ke(),bt)},serverScoreUp(bt,Pt){st.serverScoreUp(ke(),bt,Pt)},clearCache(){return Do(this,null,function*(){st.clearServerScoreTimes(),Ie=!0,yield be.delete(u0)})},getLocalServers(bt,Pt=[]){return st.getServers(ke(),bt,Pt)},refreshServers(bt){return Do(this,null,function*(){var Pt;const Gt=ke();let rr;if(Me.enableCustomServers)rr=(Pt=bt!=null?bt:Object.keys(Me.customServers))!=null?Pt:B.blockbookServers;else{const dr=yield at();rr=dr.length>0?dr:B.blockbookServers;const Kt=Object.keys(Gt).filter(Ut=>!rr.includes(Ut));st.removeServers(Gt,Kt)}st.serverScoresLoad(Gt,rr),yield Ge();for(const dr of Re)dr.refillServers()})},updateServers(bt){return Do(this,null,function*(){const Pt=()=>{const Kt=Object.keys(Me.customServers),Ut=new Set(bt.blockbookServers),vt=new Set(Kt);if(Ut.size!==vt.size)return!1;for(const Et of bt.blockbookServers)if(!vt.has(Et))return!1;return!0};if(bt.enableCustomServers===Me.enableCustomServers&&Pt())return;const Gt=bt.enableCustomServers&&bt.blockbookServers.length!==0,rr=[],dr=[];for(const Kt of Re)rr.push(Kt),Kt.setServerList([]),dr.push(Kt.stop());yield Promise.all(dr),st.clearServerScoreTimes(),Me=t1(e1({},Me),{enableCustomServers:Gt,customServers:{}}),Ie=!0,yield Ge(),yield xt.refreshServers(bt.blockbookServers);for(const Kt of rr)yield Kt.start()})}};return xt}var n1=Object.defineProperty,up=Object.getOwnPropertySymbols,i1=Object.prototype.hasOwnProperty,o1=Object.prototype.propertyIsEnumerable,cp=(T,B,j)=>B in T?n1(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,a1=(T,B)=>{for(var j in B||(B={}))i1.call(B,j)&&cp(T,j,B[j]);if(up)for(var j of up(B))o1.call(B,j)&&cp(T,j,B[j]);return T},c0=(T,B,j)=>new Promise((le,xe)=>{var Re=Ie=>{try{Me(j.next(Ie))}catch(ke){xe(ke)}},be=Ie=>{try{Me(j.throw(Ie))}catch(ke){xe(ke)}},Me=Ie=>Ie.done?le(Ie.value):Promise.resolve(Ie.value).then(Re,be);Me((j=j.apply(T,B)).next())});let lp=!1;function s1(T,B){const{currencyInfo:j}=B,{initOptions:le,io:xe,log:Re,nativeIo:be,pluginDisklet:Me}=T,Ie=Gm(xe,B),{defaultSettings:ke,pluginId:Ge,currencyCode:Ve}=j,st=r1({defaultSettings:Ml(ke),currencyCode:Ve,infoPayload:x(Hh)(T.infoPayload),io:xe,log:Re,pluginId:Ge,pluginDisklet:Me});if(!lp){const{memletConfig:xt}=be["edge-currency-plugins"];xt!=null&&(lp=!0,a(xt))}return{currencyInfo:j,makeCurrencyEngine(xt,bt){return c0(this,null,function*(){const Pt=tv(bt.callbacks),Gt={walletInfo:xt,pluginInfo:B,pluginDisklet:Me,currencyTools:Ie,initOptions:Cp(le),io:xe,emitter:Pt,engineOptions:a1({},bt),pluginState:st};return yield Wm(Gt)})},makeCurrencyTools(){return c0(this,null,function*(){return st.load().catch(xt=>{throw xt}),Ie})},updateInfoPayload(xt){return c0(this,null,function*(){try{st.infoPayload=Hh(xt)}catch{Re.warn("invalid infoPayload",xt)}})}}}var hp;const dp={};for(const T of Oo)dp[T.currencyInfo.pluginId]=B=>s1(B,T);typeof window<"u"&&((hp=window.addEdgeCorePlugins)==null||hp.call(window,dp));const pb=null})()})();})();
80
+ `)},getFreshAddress(mt){return Br(this,null,function*(){const{forceIndex:Rt}=mt;return yield It.getFreshAddress({forceIndex:Rt})})},getNumTransactions(mt){return Et.numTransactions()},getPaymentProtocolInfo(mt){return Br(this,null,function*(){return yield og(mt,Ge.currencyCode,Re.fetch)})},getTransactions(mt){return Br(this,null,function*(){const Rt=kl(yield Et.fetchTransactions({options:mt}));return yield Promise.all(Rt.map(Yt=>Br(this,null,function*(){return yield Ua({walletId:Pt.id,tx:Yt,walletTools:Kt,dataLayer:Et,pluginInfo:B})})))})},isAddressUsed(mt){return Br(this,null,function*(){const Rt=Kt.addressToScriptPubkey(mt),Yt=yield Et.fetchAddress(Rt);if(Yt==null)throw new Error("Address not found in wallet");return Yt.used})},makeSpend(mt){return Br(this,null,function*(){var Rt,Yt,Vt,nr,qt,ir,sr;const Sr=Ct!=null?Ct:Et;Ct!=null&&(Ct=void 0),mt=vv(mt,Ge);const{memos:Cr=[],spendTargets:zr}=mt,Zr=Np((Rt=mt.otherParams)!=null?Rt:{}),Fr=(Yt=Zr.txOptions)!=null?Yt:{},{outputSort:jr,utxoSourceAddress:Bn,forceChangeAddress:Fi}=Zr;let so;if(Bn!=null&&(so=Kt.addressToScriptPubkey(Bn)),Fr.CPFP==null&&zr.length<1)throw new Error("Need to provide Spend Targets");const wn=zr.reduce((Wr,{nativeAmount:En})=>ue.add(Wr,En!=null?En:"0"),"0"),on=(Vt=Fr.utxos)!=null?Vt:kl(yield Sr.fetchUtxos({scriptPubkey:so,utxoIds:[]}));if(ue.gt(wn,`${tg(on)}`)||on.length===0)throw new Dp({tokenId:null});let xn=[];const un=[];for(const Wr of zr){if(Wr.publicAddress==null||Wr.nativeAmount==null)throw new Error("Invalid spend target");if(((nr=Wr.otherParams)==null?void 0:nr.script)!=null){const{script:En}=Wr.otherParams;if(En.type==="replayProtection"){const{publicAddress:uo}=yield It.deriveScriptAddress(En.type);xn.push({address:uo,value:Wr.nativeAmount==null?void 0:parseInt(Wr.nativeAmount)})}}else{if(Wr.publicAddress!=null){const En=Kt.addressToScriptPubkey(Wr.publicAddress);(yield Sr.fetchAddress(En))!=null&&un.push(Wr.publicAddress)}xn.push({address:Wr.publicAddress,value:Wr.nativeAmount==null?void 0:parseInt(Wr.nativeAmount)})}}if(xn.length+Cr.length<1)throw new Error("Need to provide Spend Targets");const Ni=yield It.getFreshAddress({branch:1}),Uo=(qt=Fi!=null?Fi:Ni.segwitAddress)!=null?qt:Ni.publicAddress,Nr=parseInt(yield Ut.getRate(mt));let Kr;if(Fr.CPFP!=null){const[Wr]=yield Sr.fetchTransactions({txId:Fr.CPFP});if(Wr==null)throw new Error("transaction not found");const En=[];for(const uo of Wr.ourOuts){const[ja]=yield Sr.fetchUtxos({utxoIds:[uo]});ja!=null&&En.push(ja)}Kr=En.reduce((uo,ja)=>ue.gt(uo.value,ja.value)?uo:ja),xn=[]}const Qn=Ge.canReplaceByFee===!0?(sr=(ir=mt.enableRbf)!=null?ir:Zr.enableRbf)!=null?sr:!0:!1;ke.warn(`spend: Using fee rate ${Nr} sat/B`);const fo=Fr.subtractFee!=null?Fr.subtractFee:!1,gn=Fa({utxos:on,forceUseUtxo:Kr!=null?[Kr]:[],targets:xn,memos:Cr,feeRate:Nr,coin:st.name,currencyCode:Ge.currencyCode,enableRbf:Qn,freshChangeAddress:Uo,subtractFee:fo,log:ke,outputSort:jr});gn.changeUsed&&un.push(Uo);let za="0";const pp=gn.inputs.map(Wr=>Wr.scriptPubkey.toString("hex"));for(const Wr of gn.outputs){const En=Wr.scriptPubkey.toString("hex");(yield Sr.fetchAddress(En))==null?za=ue.sub(za,Wr.value.toString()):pp.push(En)}const l0=gn.fee.toString();za=ue.sub(za,l0);const f1={unsignedTx:gn.hex,psbt:{base64:gn.psbtBase64,inputs:gn.inputs,outputs:gn.outputs},edgeSpendInfo:mt,ourScriptPubkeys:pp};return{blockHeight:0,currencyCode:Ge.currencyCode,date:La(),feeRateUsed:{satPerVByte:Nr},isSend:!0,memos:Cr,nativeAmount:za,networkFee:l0,networkFees:[{tokenId:null,nativeAmount:l0}],otherParams:f1,ourReceiveAddresses:un,signedTx:"",tokenId:null,txid:"",walletId:Pt.id}})},resyncBlockchain(){return Br(this,null,function*(){yield Dt.killEngine(),yield Et.clearAll(),yield be.clearCache(),yield vt.clear(),yield Ut.clearCache(),yield be.refreshServers(),yield Dt.startEngine()})},saveTx(mt){return Br(this,null,function*(){var Rt,Yt;const Vt=(Rt=mt.otherParams)==null?void 0:Rt.replacedTxid;if(Vt!=null){const[ir]=yield Et.fetchTransactions({txId:Vt});if(ir!=null){ir.blockHeight=-1,yield Et.saveTransaction({tx:ir});const sr=yield Ua({dataLayer:Et,pluginInfo:B,tx:ir,walletId:Pt.id,walletTools:Kt});le.emit(Ur.TRANSACTIONS,[{isNew:!1,transaction:sr}])}}const nr=Lv(mt);yield Et.saveTransaction({tx:nr,scriptPubkeys:(Yt=mt.otherParams)==null?void 0:Yt.ourScriptPubkeys});const qt=yield gg(Ve,Et,nr);yield It.processUtxos(qt)})},signMessage(mt,Rt,Yt){return Br(this,null,function*(){const Vt=Rp(Yt.otherParams),{publicAddress:nr}=Vt,qt=Kt.addressToScriptPubkey(nr),ir=yield Et.fetchAddress(qt);if((ir==null?void 0:ir.path)==null)throw new Error("Missing data-layer address to sign with");const sr=bt(Rt);if(sr==null)throw new Error("Cannot sign a message for a read-only wallet");const Sr=yield pd({privateKey:sr,walletLocalEncryptedDisklet:Ie,coin:st.name});return yield Kt.signMessageBase64({path:ir==null?void 0:ir.path,message:mt,xprivKeys:Sr})})},signTx(mt,Rt){return Br(this,null,function*(){var Yt,Vt,nr;const qt=mt.otherParams;if(qt==null)throw new Error("Invalid transaction data");const{psbt:ir,edgeSpendInfo:sr}=qt;if(ir==null)throw new Error("Invalid transaction data");const Sr=bt(Rt);if(Sr==null)throw new Error("Cannot sign a transaction for a read-only wallet");const Cr=yield pd({privateKey:Sr,walletLocalEncryptedDisklet:Ie,coin:st.name}),zr=yield Br(this,null,function*(){return(sr==null?void 0:sr.privateKeys)!=null?sr.privateKeys.map(jr=>Kt.getPrivateKeyEncodingFromWif(jr)):yield Promise.all(ir.inputs.map(jr=>Br(this,[jr],function*({hash:Bn,index:Fi}){const so=ep.from(Bn).reverse().toString("hex"),[wn]=yield Et.fetchTransactions({txId:so});if(wn==null)throw new Error("Unable to find previous transaction data for input");const on=wn.outputs.find(Uo=>Uo.n===Fi);if(on==null)throw new Error("Unable to find prevout in transaction");const{scriptPubkey:xn}=on,un=yield Et.fetchAddress(xn);if(un==null)throw new Error(`Address for scriptPubkey '${xn}' not found`);if(un.path==null)throw new Error(`Invalid scriptPubkey ${un.scriptPubkey}; Missing path`);return{hex:Kt.getPrivateKey({path:un.path,xprivKeys:Cr}),compressed:!0}})))}),Zr=yield vp({coin:st.name,feeInfo:Ut.feeInfo,privateKeyEncodings:zr,psbtBase64:ir.base64});mt.txid=Zr.id,mt.signedTx=Zr.hex;const{paymentProtocolInfo:Fr}=(nr=(Vt=(Yt=mt.otherParams)==null?void 0:Yt.edgeSpendInfo)==null?void 0:Vt.otherParams)!=null?nr:{};if(Fr!=null){const jr=ag(mt.signedTx,mt.currencyCode);mt.otherParams==null&&(mt.otherParams={}),Object.assign(mt.otherParams,{paymentProtocolInfo:Ri(Ci({},Fr),{payment:jr})})}return mt.date=La(),mt})},sweepPrivateKeys(mt){return Br(this,null,function*(){var Rt;const Yt=Ve.formats,Vt={id:Pt.id,type:Pt.type,keys:{privateKeyFormat:Pt.keys.privateKeyFormat,walletFormats:Yt,publicKey:{publicKeys:{}}}},nr=(Rt=mt.privateKeys)!=null?Rt:[];if(nr.length<1)throw new Error("No private keys given");const qt=(0,Sl.cQ)(),ir=(0,Sl.cQ)(),sr=new Vh,Sr={disklet:qt,emitter:sr,log:ke},Cr=yield Xh(Sr),zr=yield id(Sr),Zr=Qd({pluginInfo:B,publicKey:Vt.keys.publicKey}),Fr=new Promise((Bn,Fi)=>{sr.on(Ur.ADDRESSES_CHECKED,so=>Br(this,null,function*(){if(so===1)try{yield jr.stop();const wn=yield zr.fetchUtxos({utxoIds:[]});if(wn===null||wn.length<1)throw new Error("Private key has no funds");const on=yield this.getFreshAddress({tokenId:null}),xn=Cr.state.balance,un={utxos:wn,subtractFee:!0};mt.spendTargets=[{publicAddress:on.publicAddress,nativeAmount:xn}],mt.otherParams=Ri(Ci({},mt.otherParams),{txOptions:un}),Ct=zr;const Ni=yield Dt.makeSpend(mt);Bn(Ni)}catch(wn){Fi(wn)}}))}),jr=qd(Ri(Ci({},T),{dataLayer:zr,emitter:sr,engineOptions:Ri(Ci({},T.engineOptions),{walletLocalDisklet:qt,walletLocalEncryptedDisklet:ir}),pluginInfo:Ri(Ci({},B),{engineInfo:Ri(Ci({},Ve),{gapLimit:0})}),seenTxCheckpoint:()=>"0",walletTools:Zr,walletInfo:Vt}));return yield jr.loadWifs(nr),yield jr.start(),yield Fr})},otherMethods:{}};return Dt})}var np=gr(8287).Buffer,No=(T,B,j)=>new Promise((le,xe)=>{var Re=Ie=>{try{Me(j.next(Ie))}catch(ke){xe(ke)}},be=Ie=>{try{Me(j.throw(Ie))}catch(ke){xe(ke)}},Me=Ie=>Ie.done?le(Ie.value):Promise.resolve(Ie.value).then(Re,be);Me((j=j.apply(T,B)).next())});function Gm(T,B){const{currencyInfo:j,engineInfo:le,coinInfo:xe}=B,Re=e0(xe.name,xe.coinType),be=C(Re),Me=ud(B);return{checkPublicKey(ke){return No(this,null,function*(){const Ge=x(sd)(ke);if(Ge==null)return!1;const Ve=fd(Ge);return iu(le,Ve).every(at=>Ge.publicKeys[at]!=null)})},createPrivateKey(ke,Ge){return No(this,null,function*(){var Ve,st,at,xt;const Pt={imported:!1,seed:ce.VF(np.from(T.random(32))),format:(st=(Ve=Ge==null?void 0:Ge.format)!=null?Ve:le.formats[0])!=null?st:"bip44",coinType:(xt=(at=Ge==null?void 0:Ge.coinType)!=null?at:xe.coinType)!=null?xt:0};return be(Pt)})},importPrivateKey(ke,Ge){return No(this,null,function*(){var Ve,st,at,xt,bt;if(!ce.JB(ke))throw np.from(ke,"base64").length===32?new Error("Import for Airbitz seeds is unsupported."):new Error("Invalid mnemonic");const Gt={imported:!0,seed:ke,format:(at=(st=Ge==null?void 0:Ge.format)!=null?st:(Ve=le.formats)==null?void 0:Ve[0])!=null?at:"bip44",coinType:(bt=(xt=Ge==null?void 0:Ge.coinType)!=null?xt:xe.coinType)!=null?bt:0};return be(Gt)})},derivePublicKey(ke){return No(this,null,function*(){return Me(ke).keys.publicKey})},parseUri(ke){return No(this,null,function*(){const Ge=ke.toLocaleLowerCase().startsWith(`${xe.name}://`);Ge&&(ke=ke.replace("//",""));const Ve=i0()(ke,{},!0),st=Ve.protocol.replace(":","").toLowerCase();if(st!==""&&st!==j.pluginId&&st!==le.uriPrefix&&st!=="pay")throw new Error("InvalidUriError");const{pathname:at,query:xt}=Ve;if(at===""&&xt.r==null)throw new Error("InvalidUriError");const bt={};if(at!==""){const rr=eg({pathname:Ve.pathname,coin:xe.name});if(rr==null)throw new Error("InvalidUriError");Object.assign(bt,rr)}const Pt={};xt.label!=null&&(Pt.name=xt.label),xt.message!=null&&(Pt.notes=xt.message),xt.category!=null&&(Pt.category=xt.category),xt.r!=null&&(bt.paymentProtocolUrl=xt.r),Ge&&(Pt.gateway=!0),Object.assign(bt,{metadata:Pt});const Gt=j.denominations.find(({name:rr})=>rr===j.currencyCode);if(Gt!=null&&xt.amount!=null){const{multiplier:rr="1"}=Gt,dr=ue.mul(xt.amount,rr.toString());bt.currencyCode=j.currencyCode,bt.nativeAmount=ue.toFixed(dr,0,0)}return bt})},encodeUri(ke,Ge){return No(this,null,function*(){var Ve,st,at;let xt=ke.publicAddress;if(xt==="")throw new Error("InvalidPublicAddressError");((Ve=xe.prefixes.cashaddr)==null?void 0:Ve.some(Gt=>xt.startsWith(`${Gt}:`)))===!0&&(xt=xt.split(":")[1]);const bt=[];if(ke.nativeAmount!=null){const Gt=(st=ke.currencyCode)!=null?st:j.currencyCode,rr=j.denominations.find(({name:Kt})=>Kt===Gt);if(rr==null)throw new Error("InvalidDenominationError");const dr=ue.div(ke.nativeAmount,rr.multiplier,8);bt.push(`amount=${dr}`)}ke.label!=null&&bt.push(`label=${ke.label}`),ke.message!=null&&bt.push(`message=${ke.message}`);const Pt=ke.metadata;return Pt!=null&&(Pt.name!=null&&bt.push(`label=${Pt.name}`),Pt.notes!=null&&bt.push(`message=${Pt.notes}`)),bt.length>0?xd.serialize({scheme:(at=le.uriPrefix)!=null?at:j.pluginId,path:xt,query:bt.join("&")}):xt})},getSplittableTypes(ke){var Ge;const{keys:{format:Ve="bip32"}={}}=ke;return((Ge=le.forks)!=null?Ge:[]).filter(at=>nv(at).includes(Ve)).map(at=>`wallet:${at}`)}}}const Vm=E({serverUrl:p,serverScore:m,responseTime:m,numResponseTimes:m}),ip=E(Vm),qm=E({customServers:ip,enableCustomServers:x(S,!1),internalServers:ip}),Lo=999999999,du=500,f0=-100,op=-100,ap=-10;class Xm{constructor(B){const{log:j,onDirtyServer:le=()=>{}}=B;this.log=j,this.scoresLastLoaded=Date.now(),this.lastScoreUpTime=Date.now(),this.onDirtyServer=le}serverScoresLoad(B,j=[]){for(const le of j)if(B[le]===void 0){const xe={serverUrl:le,serverScore:0,responseTime:Lo,numResponseTimes:0};B[le]=xe}for(const le in B){const xe=B[le];let Re=!1;for(const Ie of j)if(Ie===le){Re=!0;break}let be=xe.serverScore;Re?be<ap&&(be=ap):be>op&&(be=op),this.scoresLastLoaded===0&&(be=Math.min(be,du-100)),le.startsWith("ws")&&be>0&&(be=0,xe.responseTime=Lo),Td(le).length>0&&(be=be-(du+f0)),xe.serverScore=be,this.onDirtyServer(le)}}clearServerScoreTimes(){this.scoresLastLoaded=Date.now(),this.lastScoreUpTime=Date.now()}printServers(B){this.log("**** printServers ****");const j=[];for(const le in B)j.push(B[le]);j.sort((le,xe)=>xe.serverScore-le.serverScore);for(const le of j){const xe=le.serverScore.toString(),Re=le.responseTime.toString(),be=le.numResponseTimes.toString(),Me=le.serverUrl;this.log(`ServerInfo ${xe} ${Re}ms ${be} ${Me}`)}this.log("**************************")}serverScoreUp(B,j,le,xe=1){const Re=B[j];Re.serverScore+=xe,Re.serverScore>du&&(Re.serverScore=du),this.lastScoreUpTime=Date.now(),le!==0&&this.setResponseTime(B,j,le),this.log(`${j}: score UP to ${Re.serverScore} ${le}ms`),this.onDirtyServer(j)}serverScoreDown(B,j,le=10){if(Date.now()-this.lastScoreUpTime>6e4){this.log(`${j}: score DOWN cancelled`);return}const Re=B[j];Re.serverScore-=le,Re.serverScore<f0&&(Re.serverScore=f0),Re.numResponseTimes===0&&this.setResponseTime(B,j,9999),this.log(`${j}: score DOWN to ${Re.serverScore}`),this.onDirtyServer(j)}setResponseTime(B,j,le){const xe=B[j];xe.numResponseTimes++;const Re=xe.responseTime;let be=0;Lo===Re?be=le:xe.numResponseTimes%10===0?be=(Re+le*4)/5:be=(Re+le)/2,xe.responseTime=be,this.onDirtyServer(j)}getServers(B,j,le=[]){if(B==null||Object.keys(B).length===0)return[];let xe=[],Re=[];for(const at in B){const xt=B[at];xe.push(xt),xt.responseTime===Lo&&xt.serverScore===0&&Re.push(xt)}if(xe.length===0)return[];if(le.length>0){const at=xt=>{for(const bt of le)if(typeof bt=="string"&&xt.serverUrl.indexOf(bt)===0||bt instanceof RegExp&&bt.test(xt.serverUrl))return!0;return!1};xe=xe.filter(at),Re=Re.filter(at)}xe.sort((at,xt)=>xt.serverScore-at.serverScore);const be=xe[0];let Me=0,Ie=0;for(let at=0;at<xe.length;at++){const xt=xe[at];xt.serverScore<be.serverScore-100||xt.serverScore<5||xt.responseTime>=Lo||(Me++,!(Me<j)&&(Me>=xe.length/2||(Ie=at)))}let ke=xe.slice(0,Ie);ke.sort((at,xt)=>at.responseTime-xt.responseTime),ke=ke.concat(xe.slice(Ie));const Ge=[];let Ve=0,st=0;for(const at of ke)if(Ve++,Ge.push(at.serverUrl),at.responseTime===Lo&&at.serverScore===0&&st++,Ve>=j||Ve>=j/2&&st===0&&Re.length>=j-Ve)break;if(st===0){for(const at of Re)if(Ge.unshift(at.serverUrl),Ve++,Ve>=j)break}return Ge}removeServers(B,j){for(const le of j)delete B[le]}}var Zm=Object.defineProperty,Ym=Object.defineProperties,$m=Object.getOwnPropertyDescriptors,sp=Object.getOwnPropertySymbols,Jm=Object.prototype.hasOwnProperty,Qm=Object.prototype.propertyIsEnumerable,fp=(T,B,j)=>B in T?Zm(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,e1=(T,B)=>{for(var j in B||(B={}))Jm.call(B,j)&&fp(T,j,B[j]);if(sp)for(var j of sp(B))Qm.call(B,j)&&fp(T,j,B[j]);return T},t1=(T,B)=>Ym(T,$m(B)),Do=(T,B,j)=>new Promise((le,xe)=>{var Re=Ie=>{try{Me(j.next(Ie))}catch(ke){xe(ke)}},be=Ie=>{try{Me(j.throw(Ie))}catch(ke){xe(ke)}},Me=Ie=>Ie.done?le(Ie.value):Promise.resolve(Ie.value).then(Re,be);Me((j=j.apply(T,B)).next())});const u0="serverCache.json";function r1(T){const{defaultSettings:B,log:j,pluginDisklet:le,pluginId:xe}=T;let Re=[];const be=t(le);let Me={customServers:{},enableCustomServers:B.enableCustomServers,internalServers:{}},Ie=!1;const ke=()=>{const bt=Me.enableCustomServers?"customServers":"internalServers";return Me[bt]},Ge=()=>Do(this,null,function*(){st.printServers(ke()),Ie&&(yield be.setJson(u0,Me).catch(bt=>{j(`${xe} - ${JSON.stringify(bt.toString())}`)}),Ie=!1,st.scoresLastLoaded=Date.now(),j(`${xe} - Saved server cache`))}),Ve=bt=>{Ie=!0;for(const Pt of Re)if(Pt.processedPercent===1&&Pt.getServerList().includes(bt)){Ge().catch(rr=>{j(`${xe} - ${JSON.stringify(rr.toString())}`)});return}},st=new Xm({log:j,onDirtyServer:Ve}),at=()=>Do(this,null,function*(){if(xt.infoPayload==null)return j.warn("info server list list empty"),[];const bt=Object.keys(xt.infoPayload.blockbookServers);return j.warn("info server list",bt),bt}),xt={infoPayload:T.infoPayload,addEngine(bt){Re.push(bt)},removeEngine(bt){Re=Re.filter(Pt=>Pt!==bt)},dumpData(){return{"pluginState.servers_":ke()}},load(){return Do(this,null,function*(){try{Me=qm(yield be.getJson(u0))}catch(bt){j(`${xe}: Failed to load server cache: ${JSON.stringify(bt)}`)}return xt.refreshServers().catch(bt=>{j(`${xe} - ${JSON.stringify(bt.toString())}`)}),this})},serverScoreDown(bt){st.serverScoreDown(ke(),bt)},serverScoreUp(bt,Pt){st.serverScoreUp(ke(),bt,Pt)},clearCache(){return Do(this,null,function*(){st.clearServerScoreTimes(),Ie=!0,yield be.delete(u0)})},getLocalServers(bt,Pt=[]){return st.getServers(ke(),bt,Pt)},refreshServers(bt){return Do(this,null,function*(){var Pt;const Gt=ke();let rr;if(Me.enableCustomServers)rr=(Pt=bt!=null?bt:Object.keys(Me.customServers))!=null?Pt:B.blockbookServers;else{const dr=yield at();rr=dr.length>0?dr:B.blockbookServers;const Kt=Object.keys(Gt).filter(Ut=>!rr.includes(Ut));st.removeServers(Gt,Kt)}st.serverScoresLoad(Gt,rr),yield Ge();for(const dr of Re)dr.refillServers()})},updateServers(bt){return Do(this,null,function*(){const Pt=()=>{const Kt=Object.keys(Me.customServers),Ut=new Set(bt.blockbookServers),vt=new Set(Kt);if(Ut.size!==vt.size)return!1;for(const Et of bt.blockbookServers)if(!vt.has(Et))return!1;return!0};if(bt.enableCustomServers===Me.enableCustomServers&&Pt())return;const Gt=bt.enableCustomServers&&bt.blockbookServers.length!==0,rr=[],dr=[];for(const Kt of Re)rr.push(Kt),Kt.setServerList([]),dr.push(Kt.stop());yield Promise.all(dr),st.clearServerScoreTimes(),Me=t1(e1({},Me),{enableCustomServers:Gt,customServers:{}}),Ie=!0,yield Ge(),yield xt.refreshServers(bt.blockbookServers);for(const Kt of rr)yield Kt.start()})}};return xt}var n1=Object.defineProperty,up=Object.getOwnPropertySymbols,i1=Object.prototype.hasOwnProperty,o1=Object.prototype.propertyIsEnumerable,cp=(T,B,j)=>B in T?n1(T,B,{enumerable:!0,configurable:!0,writable:!0,value:j}):T[B]=j,a1=(T,B)=>{for(var j in B||(B={}))i1.call(B,j)&&cp(T,j,B[j]);if(up)for(var j of up(B))o1.call(B,j)&&cp(T,j,B[j]);return T},c0=(T,B,j)=>new Promise((le,xe)=>{var Re=Ie=>{try{Me(j.next(Ie))}catch(ke){xe(ke)}},be=Ie=>{try{Me(j.throw(Ie))}catch(ke){xe(ke)}},Me=Ie=>Ie.done?le(Ie.value):Promise.resolve(Ie.value).then(Re,be);Me((j=j.apply(T,B)).next())});let lp=!1;function s1(T,B){const{currencyInfo:j}=B,{initOptions:le,io:xe,log:Re,nativeIo:be,pluginDisklet:Me}=T,Ie=Gm(xe,B),{defaultSettings:ke,pluginId:Ge,currencyCode:Ve}=j,st=r1({defaultSettings:Ml(ke),currencyCode:Ve,infoPayload:x(Hh)(T.infoPayload),io:xe,log:Re,pluginId:Ge,pluginDisklet:Me});if(!lp){const xt=be["edge-currency-plugins"],bt=xt==null?void 0:xt.memletConfig;bt!=null?a(bt):a({maxMemoryUsage:50*1024*1024}),lp=!0}return{currencyInfo:j,makeCurrencyEngine(xt,bt){return c0(this,null,function*(){const Pt=tv(bt.callbacks),Gt={walletInfo:xt,pluginInfo:B,pluginDisklet:Me,currencyTools:Ie,initOptions:Cp(le),io:xe,emitter:Pt,engineOptions:a1({},bt),pluginState:st};return yield Wm(Gt)})},makeCurrencyTools(){return c0(this,null,function*(){return st.load().catch(xt=>{throw xt}),Ie})},updateInfoPayload(xt){return c0(this,null,function*(){try{st.infoPayload=Hh(xt)}catch{Re.warn("invalid infoPayload",xt)}})}}}var hp;const dp={};for(const T of Oo)dp[T.currencyInfo.pluginId]=B=>s1(B,T);typeof window<"u"&&((hp=window.addEdgeCorePlugins)==null||hp.call(window,dp));const pb=null})()})();})();
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _cleaners = require('cleaners');
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _cleaners = require('cleaners');
2
2
 
3
3
 
4
4
 
@@ -42,14 +42,20 @@ let hasMemletBeenSet = false
42
42
  })
43
43
 
44
44
  if (!hasMemletBeenSet) {
45
- const { memletConfig } = nativeIo[
45
+ const pluginConfig = nativeIo[
46
46
  'edge-currency-plugins'
47
47
  ]
48
48
 
49
+ const memletConfig = _optionalChain([pluginConfig, 'optionalAccess', _2 => _2.memletConfig])
50
+
49
51
  if (memletConfig != null) {
50
- hasMemletBeenSet = true
51
52
  _memlet.setMemletConfig.call(void 0, memletConfig)
53
+ } else {
54
+ _memlet.setMemletConfig.call(void 0, {
55
+ maxMemoryUsage: 50 * 1024 * 1024 // 50MB
56
+ })
52
57
  }
58
+ hasMemletBeenSet = true
53
59
  }
54
60
 
55
61
  const instance = {
@@ -40,7 +40,7 @@ const currencyInfo = {
40
40
  'wss://dash3.trezor.io',
41
41
  'wss://dash4.trezor.io',
42
42
  'wss://dash5.trezor.io',
43
- 'wss://dash-wusa1.edge.app',
43
+ 'wss://dash-eusa1.edge.app',
44
44
  'wss://dash.nownodes.io/wss/%{nowNodesApiKey}'
45
45
  ],
46
46
  enableCustomServers: false
@@ -38,7 +38,7 @@ var _commonInfo = require('./commonInfo');
38
38
  'wss://ltc3.trezor.io',
39
39
  'wss://ltc4.trezor.io',
40
40
  'wss://ltc5.trezor.io',
41
- 'wss://ltc-wusa1.edge.app',
41
+ 'wss://ltc-eusa1.edge.app',
42
42
  'wss://ltcbook.nownodes.io/wss/%{nowNodesApiKey}'
43
43
  ],
44
44
  enableCustomServers: false
@@ -34,9 +34,7 @@ const currencyInfo = {
34
34
  ..._commonInfo.legacyMemoInfo,
35
35
  defaultSettings: {
36
36
  customFeeSettings: ['satPerByte'],
37
- blockbookServers: [
38
- /* 'wss://pivx-eusa1.edge.app', */ 'wss://zkbitcoin.com'
39
- ],
37
+ blockbookServers: ['wss://pivx-eusa1.edge.app', 'wss://zkbitcoin.com'],
40
38
  enableCustomServers: false
41
39
  },
42
40
  displayName: 'PIVX',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edge-currency-plugins",
3
- "version": "3.8.2",
3
+ "version": "3.8.3",
4
4
  "description": "Edge currency plugins to fetch and process wallet accounts, balances and transactions.",
5
5
  "homepage": "https://edge.app/",
6
6
  "repository": "https://github.com/EdgeApp/edge-currency-plugins",