UNPKG

bitgo

Version:
2 lines • 31.3 MB
/*! For license information please see BitGoJS.min.js.LICENSE.txt */ !function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory(require("wasmer_wasi_js_bg.wasm")):"function"==typeof define&&define.amd?define(["wasmer_wasi_js_bg.wasm"],factory):"object"==typeof exports?exports.BitGoJS=factory(require("wasmer_wasi_js_bg.wasm")):root.BitGoJS=factory(root["wasmer_wasi_js_bg.wasm"])}(self,(__WEBPACK_EXTERNAL_MODULE__948250__=>(()=>{var __webpack_modules__={570:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var isValue=__webpack_require__(276974),isPlainFunction=__webpack_require__(901550),assign=__webpack_require__(409641),normalizeOpts=__webpack_require__(862939),contains=__webpack_require__(645545);(module.exports=function(dscr,value){var c,e,w,options,desc;return arguments.length<2||"string"!=typeof dscr?(options=value,value=dscr,dscr=null):options=arguments[2],isValue(dscr)?(c=contains.call(dscr,"c"),e=contains.call(dscr,"e"),w=contains.call(dscr,"w")):(c=w=!0,e=!1),desc={value,configurable:c,enumerable:e,writable:w},options?assign(normalizeOpts(options),desc):desc}).gs=function(dscr,get,set){var c,e,options,desc;return"string"!=typeof dscr?(options=set,set=get,get=dscr,dscr=null):options=arguments[3],isValue(get)?isPlainFunction(get)?isValue(set)?isPlainFunction(set)||(options=set,set=void 0):set=void 0:(options=get,get=set=void 0):get=void 0,isValue(dscr)?(c=contains.call(dscr,"c"),e=contains.call(dscr,"e")):(c=!0,e=!1),desc={get,set,configurable:c,enumerable:e},options?assign(normalizeOpts(options),desc):desc}},896:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var Cancel=__webpack_require__(232881);function CancelToken(executor){if("function"!=typeof executor)throw new TypeError("executor must be a function.");var resolvePromise;this.promise=new Promise((function promiseExecutor(resolve){resolvePromise=resolve}));var token=this;this.promise.then((function(cancel){if(token._listeners){var i,l=token._listeners.length;for(i=0;i<l;i++)token._listeners[i](cancel);token._listeners=null}})),this.promise.then=function(onfulfilled){var _resolve,promise=new Promise((function(resolve){token.subscribe(resolve),_resolve=resolve})).then(onfulfilled);return promise.cancel=function reject(){token.unsubscribe(_resolve)},promise},executor((function cancel(message){token.reason||(token.reason=new Cancel(message),resolvePromise(token.reason))}))}CancelToken.prototype.throwIfRequested=function throwIfRequested(){if(this.reason)throw this.reason},CancelToken.prototype.subscribe=function subscribe(listener){this.reason?listener(this.reason):this._listeners?this._listeners.push(listener):this._listeners=[listener]},CancelToken.prototype.unsubscribe=function unsubscribe(listener){if(this._listeners){var index=this._listeners.indexOf(listener);-1!==index&&this._listeners.splice(index,1)}},CancelToken.source=function source(){var cancel;return{token:new CancelToken((function executor(c){cancel=c})),cancel}},module.exports=CancelToken},1432:(module,__unused_webpack_exports,__webpack_require__)=>{var baseEach=__webpack_require__(484570);module.exports=function baseEvery(collection,predicate){var result=!0;return baseEach(collection,(function(value,index,collection){return result=!!predicate(value,index,collection)})),result}},1437:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.hash_to_ristretto255=exports.hashToRistretto255=exports.RistrettoPoint=exports.encodeToCurve=exports.hashToCurve=exports.edwardsToMontgomery=exports.x25519=exports.ed25519ph=exports.ed25519ctx=exports.ed25519=exports.ED25519_TORSION_SUBGROUP=void 0,exports.edwardsToMontgomeryPub=edwardsToMontgomeryPub,exports.edwardsToMontgomeryPriv=function edwardsToMontgomeryPriv(edwardsPriv){const hashed=ed25519Defaults.hash(edwardsPriv.subarray(0,32));return ed25519Defaults.adjustScalarBytes(hashed).subarray(0,32)};const sha512_1=__webpack_require__(164989),utils_1=__webpack_require__(849074),edwards_js_1=__webpack_require__(321515),hash_to_curve_js_1=__webpack_require__(213787),modular_js_1=__webpack_require__(988173),montgomery_js_1=__webpack_require__(388100),utils_js_1=__webpack_require__(597542),ED25519_P=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),ED25519_SQRT_M1=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),_0n=BigInt(0),_1n=BigInt(1),_2n=BigInt(2),_3n=BigInt(3),_5n=BigInt(5),_8n=BigInt(8);function ed25519_pow_2_252_3(x){const _10n=BigInt(10),_20n=BigInt(20),_40n=BigInt(40),_80n=BigInt(80),P=ED25519_P,b2=x*x%P*x%P,b4=(0,modular_js_1.pow2)(b2,_2n,P)*b2%P,b5=(0,modular_js_1.pow2)(b4,_1n,P)*x%P,b10=(0,modular_js_1.pow2)(b5,_5n,P)*b5%P,b20=(0,modular_js_1.pow2)(b10,_10n,P)*b10%P,b40=(0,modular_js_1.pow2)(b20,_20n,P)*b20%P,b80=(0,modular_js_1.pow2)(b40,_40n,P)*b40%P,b160=(0,modular_js_1.pow2)(b80,_80n,P)*b80%P,b240=(0,modular_js_1.pow2)(b160,_80n,P)*b80%P,b250=(0,modular_js_1.pow2)(b240,_10n,P)*b10%P;return{pow_p_5_8:(0,modular_js_1.pow2)(b250,_2n,P)*x%P,b2}}function adjustScalarBytes(bytes){return bytes[0]&=248,bytes[31]&=127,bytes[31]|=64,bytes}function uvRatio(u,v){const P=ED25519_P,v3=(0,modular_js_1.mod)(v*v*v,P),pow=ed25519_pow_2_252_3(u*(0,modular_js_1.mod)(v3*v3*v,P)).pow_p_5_8;let x=(0,modular_js_1.mod)(u*v3*pow,P);const vx2=(0,modular_js_1.mod)(v*x*x,P),root1=x,root2=(0,modular_js_1.mod)(x*ED25519_SQRT_M1,P),useRoot1=vx2===u,useRoot2=vx2===(0,modular_js_1.mod)(-u,P),noRoot=vx2===(0,modular_js_1.mod)(-u*ED25519_SQRT_M1,P);return useRoot1&&(x=root1),(useRoot2||noRoot)&&(x=root2),(0,modular_js_1.isNegativeLE)(x,P)&&(x=(0,modular_js_1.mod)(-x,P)),{isValid:useRoot1||useRoot2,value:x}}exports.ED25519_TORSION_SUBGROUP=["0100000000000000000000000000000000000000000000000000000000000000","c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a","0000000000000000000000000000000000000000000000000000000000000080","26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05","ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f","26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85","0000000000000000000000000000000000000000000000000000000000000000","c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa"];const Fp=(()=>(0,modular_js_1.Field)(ED25519_P,void 0,!0))(),ed25519Defaults=(()=>({a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:_8n,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:sha512_1.sha512,randomBytes:utils_1.randomBytes,adjustScalarBytes,uvRatio}))();function ed25519_domain(data,ctx,phflag){if(ctx.length>255)throw new Error("Context is too big");return(0,utils_1.concatBytes)((0,utils_1.utf8ToBytes)("SigEd25519 no Ed25519 collisions"),new Uint8Array([phflag?1:0,ctx.length]),ctx,data)}function edwardsToMontgomeryPub(edwardsPub){const{y}=exports.ed25519.ExtendedPoint.fromHex(edwardsPub),_1n=BigInt(1);return Fp.toBytes(Fp.create((_1n+y)*Fp.inv(_1n-y)))}exports.ed25519=(0,edwards_js_1.twistedEdwards)(ed25519Defaults),exports.ed25519ctx=(0,edwards_js_1.twistedEdwards)({...ed25519Defaults,domain:ed25519_domain}),exports.ed25519ph=(0,edwards_js_1.twistedEdwards)(Object.assign({},ed25519Defaults,{domain:ed25519_domain,prehash:sha512_1.sha512})),exports.x25519=(0,montgomery_js_1.montgomery)({P:ED25519_P,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:x=>{const P=ED25519_P,{pow_p_5_8,b2}=ed25519_pow_2_252_3(x);return(0,modular_js_1.mod)((0,modular_js_1.pow2)(pow_p_5_8,_3n,P)*b2,P)},adjustScalarBytes,randomBytes:utils_1.randomBytes}),exports.edwardsToMontgomery=edwardsToMontgomeryPub;const ELL2_C1=(()=>(Fp.ORDER+_3n)/_8n)(),ELL2_C2=(()=>Fp.pow(_2n,ELL2_C1))(),ELL2_C3=(()=>Fp.sqrt(Fp.neg(Fp.ONE)))();const ELL2_C1_EDWARDS=(()=>(0,modular_js_1.FpSqrtEven)(Fp,Fp.neg(BigInt(486664))))();function map_to_curve_elligator2_edwards25519(u){const{xMn,xMd,yMn,yMd}=function map_to_curve_elligator2_curve25519(u){const ELL2_C4=(Fp.ORDER-_5n)/_8n,ELL2_J=BigInt(486662);let tv1=Fp.sqr(u);tv1=Fp.mul(tv1,_2n);let xd=Fp.add(tv1,Fp.ONE),x1n=Fp.neg(ELL2_J),tv2=Fp.sqr(xd),gxd=Fp.mul(tv2,xd),gx1=Fp.mul(tv1,ELL2_J);gx1=Fp.mul(gx1,x1n),gx1=Fp.add(gx1,tv2),gx1=Fp.mul(gx1,x1n);let tv3=Fp.sqr(gxd);tv2=Fp.sqr(tv3),tv3=Fp.mul(tv3,gxd),tv3=Fp.mul(tv3,gx1),tv2=Fp.mul(tv2,tv3);let y11=Fp.pow(tv2,ELL2_C4);y11=Fp.mul(y11,tv3);let y12=Fp.mul(y11,ELL2_C3);tv2=Fp.sqr(y11),tv2=Fp.mul(tv2,gxd);let e1=Fp.eql(tv2,gx1),y1=Fp.cmov(y12,y11,e1),x2n=Fp.mul(x1n,tv1),y21=Fp.mul(y11,u);y21=Fp.mul(y21,ELL2_C2);let y22=Fp.mul(y21,ELL2_C3),gx2=Fp.mul(gx1,tv1);tv2=Fp.sqr(y21),tv2=Fp.mul(tv2,gxd);let e2=Fp.eql(tv2,gx2),y2=Fp.cmov(y22,y21,e2);tv2=Fp.sqr(y1),tv2=Fp.mul(tv2,gxd);let e3=Fp.eql(tv2,gx1),xn=Fp.cmov(x2n,x1n,e3),y=Fp.cmov(y2,y1,e3),e4=Fp.isOdd(y);return y=Fp.cmov(y,Fp.neg(y),e3!==e4),{xMn:xn,xMd:xd,yMn:y,yMd:_1n}}(u);let xn=Fp.mul(xMn,yMd);xn=Fp.mul(xn,ELL2_C1_EDWARDS);let xd=Fp.mul(xMd,yMn),yn=Fp.sub(xMn,xMd),yd=Fp.add(xMn,xMd),tv1=Fp.mul(xd,yd),e=Fp.eql(tv1,Fp.ZERO);xn=Fp.cmov(xn,Fp.ZERO,e),xd=Fp.cmov(xd,Fp.ONE,e),yn=Fp.cmov(yn,Fp.ONE,e),yd=Fp.cmov(yd,Fp.ONE,e);const inv=Fp.invertBatch([xd,yd]);return{x:Fp.mul(xn,inv[0]),y:Fp.mul(yn,inv[1])}}const htf=(()=>(0,hash_to_curve_js_1.createHasher)(exports.ed25519.ExtendedPoint,(scalars=>map_to_curve_elligator2_edwards25519(scalars[0])),{DST:"edwards25519_XMD:SHA-512_ELL2_RO_",encodeDST:"edwards25519_XMD:SHA-512_ELL2_NU_",p:Fp.ORDER,m:1,k:128,expand:"xmd",hash:sha512_1.sha512}))();function assertRstPoint(other){if(!(other instanceof RistPoint))throw new Error("RistrettoPoint expected")}exports.hashToCurve=htf.hashToCurve,exports.encodeToCurve=htf.encodeToCurve;const SQRT_M1=ED25519_SQRT_M1,SQRT_AD_MINUS_ONE=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),INVSQRT_A_MINUS_D=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),ONE_MINUS_D_SQ=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),D_MINUS_ONE_SQ=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952"),invertSqrt=number=>uvRatio(_1n,number),MAX_255B=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),bytes255ToNumberLE=bytes=>exports.ed25519.CURVE.Fp.create((0,utils_js_1.bytesToNumberLE)(bytes)&MAX_255B);function calcElligatorRistrettoMap(r0){const{d}=exports.ed25519.CURVE,P=exports.ed25519.CURVE.Fp.ORDER,mod=exports.ed25519.CURVE.Fp.create,r=mod(SQRT_M1*r0*r0),Ns=mod((r+_1n)*ONE_MINUS_D_SQ);let c=BigInt(-1);const D=mod((c-d*r)*mod(r+d));let{isValid:Ns_D_is_sq,value:s}=uvRatio(Ns,D),s_=mod(s*r0);(0,modular_js_1.isNegativeLE)(s_,P)||(s_=mod(-s_)),Ns_D_is_sq||(s=s_),Ns_D_is_sq||(c=r);const Nt=mod(c*(r-_1n)*D_MINUS_ONE_SQ-D),s2=s*s,W0=mod((s+s)*D),W1=mod(Nt*SQRT_AD_MINUS_ONE),W2=mod(_1n-s2),W3=mod(_1n+s2);return new exports.ed25519.ExtendedPoint(mod(W0*W3),mod(W2*W1),mod(W1*W3),mod(W0*W2))}class RistPoint{constructor(ep){this.ep=ep}static fromAffine(ap){return new RistPoint(exports.ed25519.ExtendedPoint.fromAffine(ap))}static hashToCurve(hex){hex=(0,utils_js_1.ensureBytes)("ristrettoHash",hex,64);const R1=calcElligatorRistrettoMap(bytes255ToNumberLE(hex.slice(0,32))),R2=calcElligatorRistrettoMap(bytes255ToNumberLE(hex.slice(32,64)));return new RistPoint(R1.add(R2))}static fromHex(hex){hex=(0,utils_js_1.ensureBytes)("ristrettoHex",hex,32);const{a,d}=exports.ed25519.CURVE,P=exports.ed25519.CURVE.Fp.ORDER,mod=exports.ed25519.CURVE.Fp.create,emsg="RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint",s=bytes255ToNumberLE(hex);if(!(0,utils_js_1.equalBytes)((0,utils_js_1.numberToBytesLE)(s,32),hex)||(0,modular_js_1.isNegativeLE)(s,P))throw new Error(emsg);const s2=mod(s*s),u1=mod(_1n+a*s2),u2=mod(_1n-a*s2),u1_2=mod(u1*u1),u2_2=mod(u2*u2),v=mod(a*d*u1_2-u2_2),{isValid,value:I}=invertSqrt(mod(v*u2_2)),Dx=mod(I*u2),Dy=mod(I*Dx*v);let x=mod((s+s)*Dx);(0,modular_js_1.isNegativeLE)(x,P)&&(x=mod(-x));const y=mod(u1*Dy),t=mod(x*y);if(!isValid||(0,modular_js_1.isNegativeLE)(t,P)||y===_0n)throw new Error(emsg);return new RistPoint(new exports.ed25519.ExtendedPoint(x,y,_1n,t))}toRawBytes(){let{ex:x,ey:y,ez:z,et:t}=this.ep;const P=exports.ed25519.CURVE.Fp.ORDER,mod=exports.ed25519.CURVE.Fp.create,u1=mod(mod(z+y)*mod(z-y)),u2=mod(x*y),u2sq=mod(u2*u2),{value:invsqrt}=invertSqrt(mod(u1*u2sq)),D1=mod(invsqrt*u1),D2=mod(invsqrt*u2),zInv=mod(D1*D2*t);let D;if((0,modular_js_1.isNegativeLE)(t*zInv,P)){let _x=mod(y*SQRT_M1),_y=mod(x*SQRT_M1);x=_x,y=_y,D=mod(D1*INVSQRT_A_MINUS_D)}else D=D2;(0,modular_js_1.isNegativeLE)(x*zInv,P)&&(y=mod(-y));let s=mod((z-y)*D);return(0,modular_js_1.isNegativeLE)(s,P)&&(s=mod(-s)),(0,utils_js_1.numberToBytesLE)(s,32)}toHex(){return(0,utils_js_1.bytesToHex)(this.toRawBytes())}toString(){return this.toHex()}equals(other){assertRstPoint(other);const{ex:X1,ey:Y1}=this.ep,{ex:X2,ey:Y2}=other.ep,mod=exports.ed25519.CURVE.Fp.create,one=mod(X1*Y2)===mod(Y1*X2),two=mod(Y1*Y2)===mod(X1*X2);return one||two}add(other){return assertRstPoint(other),new RistPoint(this.ep.add(other.ep))}subtract(other){return assertRstPoint(other),new RistPoint(this.ep.subtract(other.ep))}multiply(scalar){return new RistPoint(this.ep.multiply(scalar))}multiplyUnsafe(scalar){return new RistPoint(this.ep.multiplyUnsafe(scalar))}double(){return new RistPoint(this.ep.double())}negate(){return new RistPoint(this.ep.negate())}}exports.RistrettoPoint=(RistPoint.BASE||(RistPoint.BASE=new RistPoint(exports.ed25519.ExtendedPoint.BASE)),RistPoint.ZERO||(RistPoint.ZERO=new RistPoint(exports.ed25519.ExtendedPoint.ZERO)),RistPoint);exports.hashToRistretto255=(msg,options)=>{const d=options.DST,DST="string"==typeof d?(0,utils_1.utf8ToBytes)(d):d,uniform_bytes=(0,hash_to_curve_js_1.expand_message_xmd)(msg,DST,64,sha512_1.sha512);return RistPoint.hashToCurve(uniform_bytes)},exports.hash_to_ristretto255=exports.hashToRistretto255},1795:function(__unused_webpack_module,exports,__webpack_require__){"use strict";var ownKeys,__createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(o,v){Object.defineProperty(o,"default",{enumerable:!0,value:v})}:function(o,v){o.default=v}),__importStar=this&&this.__importStar||(ownKeys=function(o){return ownKeys=Object.getOwnPropertyNames||function(o){var ar=[];for(var k in o)Object.prototype.hasOwnProperty.call(o,k)&&(ar[ar.length]=k);return ar},ownKeys(o)},function(mod){if(mod&&mod.__esModule)return mod;var result={};if(null!=mod)for(var k=ownKeys(mod),i=0;i<k.length;i++)"default"!==k[i]&&__createBinding(result,mod,k[i]);return __setModuleDefault(result,mod),result});Object.defineProperty(exports,"__esModule",{value:!0}),exports.Tbtcbgsig=void 0;const btc_1=__webpack_require__(48373),utxolib=__importStar(__webpack_require__(83140));class Tbtcbgsig extends btc_1.Btc{constructor(bitgo){super(bitgo,utxolib.networks.bitcoinBitGoSignet)}static createInstance(bitgo){return new Tbtcbgsig(bitgo)}}exports.Tbtcbgsig=Tbtcbgsig},1799:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.shake256=exports.shake128=exports.keccak_512=exports.keccak_384=exports.keccak_256=exports.keccak_224=exports.sha3_512=exports.sha3_384=exports.sha3_256=exports.sha3_224=exports.Keccak=exports.keccakP=void 0;const _assert_js_1=__webpack_require__(504161),_u64_js_1=__webpack_require__(452346),utils_js_1=__webpack_require__(544099),SHA3_PI=[],SHA3_ROTL=[],_SHA3_IOTA=[],_0n=BigInt(0),_1n=BigInt(1),_2n=BigInt(2),_7n=BigInt(7),_256n=BigInt(256),_0x71n=BigInt(113);for(let round=0,R=_1n,x=1,y=0;round<24;round++){[x,y]=[y,(2*x+3*y)%5],SHA3_PI.push(2*(5*y+x)),SHA3_ROTL.push((round+1)*(round+2)/2%64);let t=_0n;for(let j=0;j<7;j++)R=(R<<_1n^(R>>_7n)*_0x71n)%_256n,R&_2n&&(t^=_1n<<(_1n<<BigInt(j))-_1n);_SHA3_IOTA.push(t)}const[SHA3_IOTA_H,SHA3_IOTA_L]=(0,_u64_js_1.split)(_SHA3_IOTA,!0),rotlH=(h,l,s)=>s>32?(0,_u64_js_1.rotlBH)(h,l,s):(0,_u64_js_1.rotlSH)(h,l,s),rotlL=(h,l,s)=>s>32?(0,_u64_js_1.rotlBL)(h,l,s):(0,_u64_js_1.rotlSL)(h,l,s);function keccakP(s,rounds=24){const B=new Uint32Array(10);for(let round=24-rounds;round<24;round++){for(let x=0;x<10;x++)B[x]=s[x]^s[x+10]^s[x+20]^s[x+30]^s[x+40];for(let x=0;x<10;x+=2){const idx1=(x+8)%10,idx0=(x+2)%10,B0=B[idx0],B1=B[idx0+1],Th=rotlH(B0,B1,1)^B[idx1],Tl=rotlL(B0,B1,1)^B[idx1+1];for(let y=0;y<50;y+=10)s[x+y]^=Th,s[x+y+1]^=Tl}let curH=s[2],curL=s[3];for(let t=0;t<24;t++){const shift=SHA3_ROTL[t],Th=rotlH(curH,curL,shift),Tl=rotlL(curH,curL,shift),PI=SHA3_PI[t];curH=s[PI],curL=s[PI+1],s[PI]=Th,s[PI+1]=Tl}for(let y=0;y<50;y+=10){for(let x=0;x<10;x++)B[x]=s[y+x];for(let x=0;x<10;x++)s[y+x]^=~B[(x+2)%10]&B[(x+4)%10]}s[0]^=SHA3_IOTA_H[round],s[1]^=SHA3_IOTA_L[round]}B.fill(0)}exports.keccakP=keccakP;class Keccak extends utils_js_1.Hash{constructor(blockLen,suffix,outputLen,enableXOF=!1,rounds=24){if(super(),this.blockLen=blockLen,this.suffix=suffix,this.outputLen=outputLen,this.enableXOF=enableXOF,this.rounds=rounds,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,(0,_assert_js_1.number)(outputLen),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=(0,utils_js_1.u32)(this.state)}keccak(){utils_js_1.isLE||(0,utils_js_1.byteSwap32)(this.state32),keccakP(this.state32,this.rounds),utils_js_1.isLE||(0,utils_js_1.byteSwap32)(this.state32),this.posOut=0,this.pos=0}update(data){(0,_assert_js_1.exists)(this);const{blockLen,state}=this,len=(data=(0,utils_js_1.toBytes)(data)).length;for(let pos=0;pos<len;){const take=Math.min(blockLen-this.pos,len-pos);for(let i=0;i<take;i++)state[this.pos++]^=data[pos++];this.pos===blockLen&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;const{state,suffix,pos,blockLen}=this;state[pos]^=suffix,128&suffix&&pos===blockLen-1&&this.keccak(),state[blockLen-1]^=128,this.keccak()}writeInto(out){(0,_assert_js_1.exists)(this,!1),(0,_assert_js_1.bytes)(out),this.finish();const bufferOut=this.state,{blockLen}=this;for(let pos=0,len=out.length;pos<len;){this.posOut>=blockLen&&this.keccak();const take=Math.min(blockLen-this.posOut,len-pos);out.set(bufferOut.subarray(this.posOut,this.posOut+take),pos),this.posOut+=take,pos+=take}return out}xofInto(out){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(out)}xof(bytes){return(0,_assert_js_1.number)(bytes),this.xofInto(new Uint8Array(bytes))}digestInto(out){if((0,_assert_js_1.output)(out,this),this.finished)throw new Error("digest() was already called");return this.writeInto(out),this.destroy(),out}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(to){const{blockLen,suffix,outputLen,rounds,enableXOF}=this;return to||(to=new Keccak(blockLen,suffix,outputLen,enableXOF,rounds)),to.state32.set(this.state32),to.pos=this.pos,to.posOut=this.posOut,to.finished=this.finished,to.rounds=rounds,to.suffix=suffix,to.outputLen=outputLen,to.enableXOF=enableXOF,to.destroyed=this.destroyed,to}}exports.Keccak=Keccak;const gen=(suffix,blockLen,outputLen)=>(0,utils_js_1.wrapConstructor)((()=>new Keccak(blockLen,suffix,outputLen)));exports.sha3_224=gen(6,144,28),exports.sha3_256=gen(6,136,32),exports.sha3_384=gen(6,104,48),exports.sha3_512=gen(6,72,64),exports.keccak_224=gen(1,144,28),exports.keccak_256=gen(1,136,32),exports.keccak_384=gen(1,104,48),exports.keccak_512=gen(1,72,64);const genShake=(suffix,blockLen,outputLen)=>(0,utils_js_1.wrapXOFConstructorWithOpts)(((opts={})=>new Keccak(blockLen,suffix,void 0===opts.dkLen?outputLen:opts.dkLen,!0)));exports.shake128=genShake(31,168,16),exports.shake256=genShake(31,136,32)},1800:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getTxHash=void 0;const util_crypto_1=__webpack_require__(465354);exports.getTxHash=function getTxHash(signedTx){return(0,util_crypto_1.blake2AsHex)(signedTx,256)}},1803:function(__unused_webpack_module,exports,__webpack_require__){"use strict";var ownKeys,Buffer=__webpack_require__(901048).Buffer,__createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(o,v){Object.defineProperty(o,"default",{enumerable:!0,value:v})}:function(o,v){o.default=v}),__importStar=this&&this.__importStar||(ownKeys=function(o){return ownKeys=Object.getOwnPropertyNames||function(o){var ar=[];for(var k in o)Object.prototype.hasOwnProperty.call(o,k)&&(ar[ar.length]=k);return ar},ownKeys(o)},function(mod){if(mod&&mod.__esModule)return mod;var result={};if(null!=mod)for(var k=ownKeys(mod),i=0;i<k.length;i++)"default"!==k[i]&&__createBinding(result,mod,k[i]);return __setModuleDefault(result,mod),result}),__importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.Sol=exports.DEFAULT_SCAN_FACTOR=void 0;const bignumber_js_1=__importDefault(__webpack_require__(755553)),base58=__importStar(__webpack_require__(939216)),sdk_core_1=__webpack_require__(32942),sdk_lib_mpc_1=__webpack_require__(986257),statics_1=__webpack_require__(577475),_=__importStar(__webpack_require__(645250)),request=__importStar(__webpack_require__(692335)),lib_1=__webpack_require__(939181),utils_1=__webpack_require__(421528);exports.DEFAULT_SCAN_FACTOR=20;const HEX_REGEX=/^[0-9a-fA-F]+$/;class Sol extends sdk_core_1.BaseCoin{constructor(bitgo,staticsCoin){if(super(bitgo),!staticsCoin)throw new Error("missing required constructor parameter staticsCoin");this._staticsCoin=staticsCoin}static createInstance(bitgo,staticsCoin){return new Sol(bitgo,staticsCoin)}allowsAccountConsolidations(){return!0}supportsTss(){return!0}getMPCAlgorithm(){return"eddsa"}getChain(){return this._staticsCoin.name}getFamily(){return this._staticsCoin.family}getFullName(){return this._staticsCoin.fullName}getNetwork(){return this._staticsCoin.network}getBaseFactor(){return Math.pow(10,this._staticsCoin.decimalPlaces)}async verifyTransaction(params){const totalAmount={},coinConfig=statics_1.coins.get(this.getChain()),{txParams,txPrebuild,memo,durableNonce}=params,transaction=new lib_1.Transaction(coinConfig),rawTx=txPrebuild.txBase64||txPrebuild.txHex,consolidateId=txPrebuild.consolidateId,walletRootAddress=params.wallet.coinSpecific()?.rootAddress;if(!rawTx)throw new Error("missing required tx prebuild property txBase64 or txHex");let rawTxBase64=rawTx;HEX_REGEX.test(rawTx)&&(rawTxBase64=Buffer.from(rawTx,"hex").toString("base64")),transaction.fromRawTransaction(rawTxBase64);const explainedTx=transaction.explainTransaction();if(void 0!==txParams.recipients){const filteredRecipients=txParams.recipients?.map((recipient=>_.pick(recipient,["address","amount","tokenName"]))),filteredOutputs=explainedTx.outputs.map((output=>_.pick(output,["address","amount","tokenName"])));if(filteredRecipients.length!==filteredOutputs.length)throw new Error("Number of tx outputs does not match with number of txParams recipients");if((await Promise.all(filteredRecipients.map((async(recipientFromUser,index)=>{const recipientFromTx=filteredOutputs[index],userAmount=new bignumber_js_1.default(recipientFromUser.amount),txAmount=new bignumber_js_1.default(recipientFromTx.amount);if(!userAmount.isEqualTo(txAmount))return!1;if(recipientFromUser.address===recipientFromTx.address&&recipientFromUser.tokenName===recipientFromTx.tokenName)return!0;if(recipientFromUser.address!==recipientFromTx.address&&recipientFromUser.tokenName)try{const tokenMintAddress=(0,utils_1.getSolTokenFromTokenName)(recipientFromUser.tokenName);return(0,utils_1.getAssociatedTokenAccountAddress)(tokenMintAddress.tokenAddress,recipientFromUser.address).then((ata=>ata===recipientFromTx.address))}catch{return!1}return!1})))).includes(!1))throw new Error("Tx outputs does not match with expected txParams recipients")}const transactionJson=transaction.toJson();if(memo&&memo.value!==explainedTx.memo)throw new Error("Tx memo does not match with expected txParams recipient memo");if(txParams.recipients){for(const recipients of txParams.recipients){const assetName=recipients.tokenName||this.getChain(),amount=totalAmount[assetName]||new bignumber_js_1.default(0);totalAmount[assetName]=amount.plus(recipients.amount)}const explainedTxTotal={};for(const output of explainedTx.outputs){const assetName=output.tokenName||this.getChain(),amount=explainedTxTotal[assetName]||new bignumber_js_1.default(0);explainedTxTotal[assetName]=amount.plus(output.amount)}if(!_.isEqual(explainedTxTotal,totalAmount))throw new Error("Tx total amount does not match with expected total amount field")}if(void 0===consolidateId&&transactionJson.feePayer!==walletRootAddress)throw new Error("Tx fee payer is not the wallet root address");if(durableNonce&&!_.isEqual(explainedTx.durableNonce,durableNonce))throw new Error("Tx durableNonce does not match with param durableNonce");return!0}async isWalletAddress(params){throw new sdk_core_1.MethodNotImplementedError}generateKeyPair(seed){return seed?new lib_1.KeyPair({seed}).getKeys():(new lib_1.KeyPair).getKeys()}isValidPub(pub){return(0,utils_1.isValidPublicKey)(pub)}isValidPrv(prv){return(0,utils_1.isValidPrivateKey)(prv)}isValidAddress(address){return(0,utils_1.isValidAddress)(address)}async signMessage(key,message){const solKeypair=new lib_1.KeyPair({prv:key.prv});return Buffer.isBuffer(message)&&(message=base58.encode(message)),Buffer.from(solKeypair.signMessage(message))}async signTransaction(params){const factory=this.getBuilder(),rawTx=params.txPrebuild.txHex||params.txPrebuild.txBase64,txBuilder=factory.from(rawTx);txBuilder.sign({key:params.prv});const transaction=await txBuilder.build();if(!transaction)throw new Error("Invalid transaction");return{txHex:transaction.toBroadcastFormat()}}async parseTransaction(params){const transactionExplanation=await this.explainTransaction({txBase64:params.txBase64,feeInfo:params.feeInfo,tokenAccountRentExemptAmount:params.tokenAccountRentExemptAmount});if(!transactionExplanation)throw new Error("Invalid transaction");const solTransaction=transactionExplanation;if(solTransaction.outputs.length<=0)return{inputs:[],outputs:[]};const senderAddress=solTransaction.outputs[0].address,feeAmount=new bignumber_js_1.default(solTransaction.fee.fee);return{inputs:[{address:senderAddress,amount:new bignumber_js_1.default(solTransaction.outputAmount).plus(feeAmount).toNumber()}],outputs:solTransaction.outputs.map((({address,amount,tokenName})=>{const output={address,amount};return tokenName&&(output.tokenName=tokenName),output}))}}async explainTransaction(params){const factory=this.getBuilder();let rebuiltTransaction;try{const transactionBuilder=factory.from(params.txBase64);if(transactionBuilder instanceof lib_1.TransactionBuilder){const txBuilder=transactionBuilder;txBuilder.fee({amount:params.feeInfo.fee}),params.tokenAccountRentExemptAmount&&txBuilder.associatedTokenAccountRent(params.tokenAccountRentExemptAmount)}rebuiltTransaction=await transactionBuilder.build()}catch(e){throw console.log(e),new Error("Invalid transaction")}return rebuiltTransaction.explainTransaction()}async getSignablePayload(serializedTx){const factory=this.getBuilder();return(await factory.from(serializedTx).build()).signablePayload}async presignTransaction(params){if("hot"!==params.walletData.type)return Promise.resolve(params);const txRequestId=params.txPrebuild?.txRequestId;if(void 0===txRequestId)throw new Error("Missing txRequestId");const{tssUtils}=params;await tssUtils.deleteSignatureShares(txRequestId);const recreated=await tssUtils.getTxRequest(txRequestId);let txHex="";if(txHex=recreated.unsignedTxs?recreated.unsignedTxs[0]?.serializedTxHex:recreated.transactions?recreated.transactions[0]?.unsignedTx.serializedTxHex:"",!txHex)throw new Error("Missing serialized tx hex");return Promise.resolve({...params,txPrebuild:recreated,txHex})}getPublicNodeUrl(){return sdk_core_1.Environments[this.bitgo.getEnv()].solNodeUrl}async getDataFromNode(params){const nodeUrl=this.getPublicNodeUrl();try{return await request.post(nodeUrl).send(params.payload)}catch(e){console.debug(e)}throw new Error(`Unable to call endpoint: '/' from node: ${nodeUrl}`)}async getBlockhash(){const response=await this.getDataFromNode({payload:{id:"1",jsonrpc:"2.0",method:"getLatestBlockhash",params:[{commitment:"finalized"}]}});if(200!==response.status)throw new Error("Account not found");return response.body.result.value.blockhash}async getFeeForMessage(message){const response=await this.getDataFromNode({payload:{id:"1",jsonrpc:"2.0",method:"getFeeForMessage",params:[message,{commitment:"finalized"}]}});if(200!==response.status)throw new Error("Account not found");return response.body.result.value}async getRentExemptAmount(){const response=await this.getDataFromNode({payload:{jsonrpc:"2.0",id:"1",method:"getMinimumBalanceForRentExemption",params:[165]}});if(200!==response.status||response.error)throw new Error(JSON.stringify(response.error));return response.body.result}async getAccountBalance(pubKey){const response=await this.getDataFromNode({payload:{id:"1",jsonrpc:"2.0",method:"getBalance",params:[pubKey]}});if(200!==response.status)throw new Error("Account not found");return response.body.result.value}async getAccountInfo(pubKey){const response=await this.getDataFromNode({payload:{id:"1",jsonrpc:"2.0",method:"getAccountInfo",params:[pubKey,{encoding:"jsonParsed"}]}});if(200!==response.status)throw new Error("Account not found");return{authority:response.body.result.value.data.parsed.info.authority,blockhash:response.body.result.value.data.parsed.info.blockhash}}async getTokenAccountsByOwner(pubKey=""){const response=await this.getDataFromNode({payload:{id:"1",jsonrpc:"2.0",method:"getTokenAccountsByOwner",params:[pubKey,{programId:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{encoding:"jsonParsed"}]}});if(200!==response.status)throw new Error("Account not found");if(0!==response.body.result.value.length){const tokenAccounts=[];for(const tokenAccount of response.body.result.value)tokenAccounts.push({info:tokenAccount.account.data.parsed.info,pubKey:tokenAccount.pubKey});return tokenAccounts}return[]}async getTokenAccountInfo(pubKey){const response=await this.getDataFromNode({payload:{id:"1",jsonrpc:"2.0",method:"getAccountInfo",params:[pubKey,{encoding:"jsonParsed"}]}});if(200!==response.status)throw new Error("Account not found");return{pubKey,info:response.body.result.value.data.parsed.info}}async createBroadcastableSweepTransaction(params){params.signatureShares;const req=params.signatureShares,broadcastableTransactions=[];let lastScanIndex=0;for(let i=0;i<req.length;i++){const MPC=await sdk_core_1.EDDSAMethods.getInitializedMpcInstance(),transaction=req[i].txRequest.transactions[0].unsignedTx;if(!req[i].ovc||!req[i].ovc[0].eddsaSignature)throw new Error("Missing signature(s)");const signature=req[i].ovc[0].eddsaSignature;if(!transaction.signableHex)throw new Error("Missing signable hex");const messageBuffer=Buffer.from(transaction.signableHex,"hex");if(!MPC.verify(messageBuffer,signature))throw new Error("Invalid signature");const signatureHex=Buffer.concat([Buffer.from(signature.R,"hex"),Buffer.from(signature.sigma,"hex")]),txBuilder=this.getBuilder().from(transaction.serializedTx);if(!transaction.coinSpecific?.commonKeychain)throw new Error("Missing common keychain");const commonKeychain=transaction.coinSpecific.commonKeychain;if(!transaction.derivationPath)throw new Error("Missing derivation path");const derivationPath=transaction.derivationPath,accountId=MPC.deriveUnhardened(commonKeychain,derivationPath).slice(0,64),publicKeyObj={pub:new lib_1.KeyPair({pub:accountId}).getAddress()};txBuilder.addSignature(publicKeyObj,signatureHex);const serializedTx=(await txBuilder.build()).toBroadcastFormat();broadcastableTransactions.push({serializedTx,scanIndex:transaction.scanIndex}),i===req.length-1&&transaction.coinSpecific.lastScanIndex&&(lastScanIndex=transaction.coinSpecific.lastScanIndex)}return{transactions:broadcastableTransactions,lastScanIndex}}async recover(params){if(!params.bitgoKey)throw new Error("missing bitgoKey");if(!params.recoveryDestination||!this.isValidAddress(params.recoveryDestination))throw new Error("invalid recoveryDestination");const bitgoKey=params.bitgoKey.replace(/\s/g,""),isUnsignedSweep=!params.userKey&&!params.backupKey&&!params.walletPassphrase,MPC=await sdk_core_1.EDDSAMethods.getInitializedMpcInstance();let balance=0;const index=params.index||0,currPath=params.seed?(0,sdk_lib_mpc_1.getDerivationPath)(params.seed)+`/${index}`:`m/${index}`,accountId=MPC.deriveUnhardened(bitgoKey,currPath).slice(0,64),bs58EncodedPublicKey=new lib_1.KeyPair({pub:accountId}).getAddress();balance=await this.getAccountBalance(bs58EncodedPublicKey);const factory=this.getBuilder(),walletCoin=this.getChain();let txBuilder,rentExemptAmount,blockhash=await this.getBlockhash(),authority="",totalFee=new bignumber_js_1.default(0),totalFeeForTokenRecovery=new bignumber_js_1.default(0);if(params.durableNonce){const durableNonceInfo=await this.getAccountInfo(params.durableNonce.publicKey);blockhash=durableNonceInfo.blockhash,authority=durableNonceInfo.authority}if(params.tokenContractAddress){const tokenAccounts=await this.getTokenAccountsByOwner(bs58EncodedPublicKey);if(0===tokenAccounts.length)throw Error("Did not find token account to recover tokens, please check token account");{const recovereableTokenAccounts=[];for(const tokenAccount of tokenAccounts)if(params.tokenContractAddress===tokenAccount.info.mint){const tokenAmount=new bignumber_js_1.default(tokenAccount.info.tokenAmount.amount),network=this.getNetwork(),token=(0,utils_1.getSolTokenFromAddress)(tokenAccount.info.mint,network);!_.isUndefined(token)&&tokenAmount.gt(new bignumber_js_1.default(0))&&(tokenAccount.tokenName=token.name,recovereableTokenAccounts.push(tokenAccount));break}if(0===recovereableTokenAccounts.length)throw Error("Not enough token funds to recover");{rentExemptAmount=await this.getRentExemptAmount(),txBuilder=factory.getTokenTransferBuilder().nonce(blockhash).sender(bs58EncodedPublicKey).associatedTokenAccountRent(rentExemptAmount.toString()).feePayer(bs58EncodedPublicKey);const recipientTokenAccounts=await this.getTokenAccountsByOwner(params.recoveryDestination);for(const tokenAccount of recovereableTokenAccounts){let recipientTokenAccountExists=!1;for(const recipientTokenAccount of recipientTokenAccounts)if(recipientTokenAccount.info.mint===tokenAccount.info.mint){recipientTokenAccountExists=!0;break}const recipientTokenAccount=await(0,utils_1.getAssociatedTokenAccountAddress)(tokenAccount.info.mint,params.recoveryDestination),tokenName=tokenAccount.tokenName;txBuilder.send({address:recipientTokenAccount,amount:tokenAccount.info.tokenAmount.amount,tokenName}),recipientTokenAccountExists||(txBuilder.createAssociatedTokenAccount({ownerAddress:params.recoveryDestination,tokenName}),totalFeeForTokenRecovery=totalFeeForTokenRecovery.plus(rentExemptAmount))}}}}else txBuilder=factory.getTransferBuilder().nonce(blockhash).sender(bs58EncodedPublicKey).send({address:params.recoveryDestination,amount:balance.toString()}).feePayer(bs58EncodedPublicKey);params.durableNonce&&txBuilder.nonce(blockhash,{walletNonceAddress:params.durableNonce.publicKey,authWalletAddress:authority});const serializedMessage=(await txBuilder.build()).solTransaction.serializeMessage().toString("base64"),feePerSignature=await this.getFeeForMessage(serializedMessage),baseFee=params.durableNonce?2*feePerSignature:feePerSignature;if(totalFee=totalFee.plus(new bignumber_js_1.default(baseFee)),totalFeeForTokenRecovery=totalFeeForTokenRecovery.plus(new bignumber_js_1.default(baseFee)),totalFee.gt(balance))throw Error("Did not find address with funds to recover");if(!isUnsignedSweep){if(!params.userKey)throw new Error("missing userKey");if(!params.backupKey)throw new Error("missing backupKey");if(!params.walletPassphrase)throw new Error("missing wallet passphrase");if(params.tokenContractAddress){if(totalFeeForTokenRecovery=totalFeeForTokenRecovery.plus(new bignumber_js_1.default(baseFee)),new bignumber_js_1.default(balance).lt(totalFeeForTokenRecovery))throw Error("Not enough funds to pay for recover tokens fees, have: "+balance+" need: "+totalFeeForTokenRecovery.toString());txBuilder.fee({amount:feePerSignature})}else{totalFee=new bignumber_js_1.default(baseFee);const netAmount=new bignumber_js_1.default(balance).minus(totalFee);txBuilder.send({address:params.recoveryDestination,amount:netAmount.toString()}).fee({amount:feePerSignature})}const unsignedTransaction=await txBuilder.build(),userKey=params.userKey.replace(/\s/g,""),backupKey=params.backupKey.replace(/\s/g,"");let userPrv;try{userPrv=this.bitgo.decrypt({input:userKey,password:params.walletPassphrase})}catch(e){throw new Error(`Error decrypting user keychain: ${e.message}`)}const userSigningMaterial=JSON.parse(userPrv);let backupPrv;try{backupPrv=this.bitgo.decrypt({input:backupKey,password:params.walletPassphrase})}catch(e){throw new Error(`Error decrypting backup keychain: ${e.message}`)}const backupSigningMaterial=JSON.parse(backupPrv),signatureHex=await sdk_core_1.EDDSAMethods.getTSSSignature(userSigningMaterial,backupSigningMaterial,currPath,unsignedTransaction),publicKeyObj={pub:bs58EncodedPublicKey};txBuilder.addSignature(publicKeyObj,signatureHex)}params.durableNonce&&txBuilder.sign({key:params.durableNonce.secretKey});const completedTransaction=await txBuilder.build(),serializedTx=completedTransaction.toBroadcastFormat(),derivationPath=params.seed?(0,sdk_lib_mpc_1.getDerivationPath)(params.seed)+`/${index}`:`m/${index}`,inputs=[];for(const input of completedTransaction.inputs)inputs.push({address:input.address,valueString:input.value,value:new bignumber_js_1.default(input.value).toNumber()});const outputs=[];for(const output of completedTransaction.outputs)outputs.push({address:output.address,valueString:output.value,coinName:output.coin?output.coin:walletCoin});const parsedTx={inputs,outputs,spendAmount:1===completedTransaction.inputs.length?completedTransaction.inputs[0].value:0,type:""},feeInfo={fee:totalFeeForTokenRecovery.toNumber(),feeString:totalFee.toString()},coinSpecific={commonKeychain:bitgoKey};if(isUnsignedSweep){return{txRequests:[{transactions:[{unsignedTx:{serializedTx,scanIndex:index,coin:walletCoin,signableHex:completedTransaction.signablePayload.toString("hex"),derivationPath,parsedTx,feeInfo,coinSpecific},signatureShares:[]}],walletCoin}]}}return{serializedTx,scanIndex:index}}async recoverCloseATA(params){if(!params.bitgoKey)throw new Error("missing bitgoKey");if(!params.recoveryDestination||!this.isValidAddress(params.recoveryDestination))throw new Error("invalid recoveryDestination");if(!params.closeAtaAddress||!this.isValidAddress(params.closeAtaAddress))throw new Error("invalid closeAtaAddress");const bitgoKey=params.bitgoKey.replace(/\s/g,""),MPC=await sdk_core_1.EDDSAMethods.getInitializedMpcInstance();let balance=0;const index=params.index||0,currPath=params.seed?(0,sdk_lib_mpc_1.getDerivationPath)(params.seed)+`/${index}`:`m/${index}`,accountId=MPC.deriveUnhardened(bitgoKey,currPath).slice(0,64),bs58EncodedPublicKey=new lib_1.KeyPair({pub:accountId}).getAddress(),accountBalance=await this.getAccountBalance(bs58EncodedPublicKey);if(balance=await this.getAccountBalance(params.closeAtaAddress),balance<=0)throw Error("Did not find closeAtaAddress with sol funds to recover");const factory=this.getBuilder();let txBuilder,blockhash;const recovertTxns=[],rentExemptAmount=await this.getRentExemptAmount(),tokenInfo=await this.getTokenAccountInfo(params.closeAtaAddress),tokenBalance=Number(tokenInfo.info.tokenAmount.amount);if(tokenBalance>0){if(console.log(`closeATA address ${params.closeAtaAddress} has token balance ${tokenBalance}, it needs to be withdrawn before closing ATA address`),!params.recoveryDestinationAtaAddress||!this.isValidAddress(params.recoveryDestinationAtaAddress))throw new Error("invalid recoveryDestinationAtaAddress");blockhash=await this.getBlockhash(),txBuilder=factory.getTokenTransferBuilder().nonce(blockhash).sender(bs58EncodedPublicKey).associatedTokenAccountRent(rentExemptAmount.toString()).feePayer(bs58EncodedPublicKey);const serializedMessage=(await txBuilder.build()).solTransaction.serializeMessage().toString("base64"),feePerSignature=await this.getFeeForMessage(serializedMessage),baseFee=params.durableNonce?2*feePerSignature:feePerSignature;if(new bignumber_js_1.default(baseFee).gt(accountBalance))throw Error("Did not find address with funds to recover");txBuilder.fee({amount:feePerSignature});const network=this.getNetwork(),token=(0,utils_1.getSolTokenFromAddress)(tokenInfo.info.mint,network);txBuilder.send({address:params.recoveryDestinationAtaAddress,amount:tokenBalance,tokenName:token?.name});const tokenRecoveryTxn=await this.signAndGenerateBroadcastableTransaction(params,txBuilder,bs58EncodedPublicKey),serializedTokenRecoveryTxn=(await tokenRecoveryTxn).serializedTx,broadcastTokenRecoveryTxn=await this.broadcastTransaction({serializedSignedTransaction:serializedTokenRecoveryTxn});console.log(broadcastTokenRecoveryTxn),recovertTxns.push(broadcastTokenRecoveryTxn)}if(params.closeAtaAddress){blockhash=await this.getBlockhash();const ataCloseBuilder=()=>{const txBuilder=factory.getCloseAtaInitializationBuilder();return txBuilder.nonce(blockhash),txBuilder.sender(bs58EncodedPublicKey),txBuilder.accountAddress(params.closeAtaAddress??""),txBuilder.destinationAddress(params.recoveryDestination),txBuilder.authorityAddress(bs58EncodedPublicKey),txBuilder.associatedTokenAccountRent(rentExemptAmount.toString()),txBuilder};txBuilder=ataCloseBuilder()}const closeATARecoveryTxn=await this.signAndGenerateBroadcastableTransaction(params,txBuilder,bs58EncodedPublicKey),serializedCloseATARecoveryTxn=(await closeATARecoveryTxn).serializedTx,broadcastCloseATARecoveryTxn=await this.broadcastTransaction({serializedSignedTransaction:serializedCloseATARecoveryTxn});return console.log(broadcastCloseATARecoveryTxn),recovertTxns.push(broadcastCloseATARecoveryTxn),recovertTxns}async signAndGenerateBroadcastableTransaction(params,txBuilder,bs58EncodedPublicKey){if(!params.userKey)throw new Error("missing userKey");if(!params.backupKey)throw new Error("missing backupKey");if(!params.walletPassphrase)throw new Error("missing wallet passphrase");const unsignedTransaction=await txBuilder.build(),userKey=params.userKey.replace(/\s/g,""),backupKey=params.backupKey.replace(/\s/g,"");let userPrv;try{userPrv=this.bitgo.decrypt({input:userKey,password:params.walletPassphrase})}catch(e){throw new Error(`Error decrypting user keychain: ${e.message}`)}const userSigningMaterial=JSON.parse(userPrv);let backupPrv;try{backupPrv=this.bitgo.decrypt({input:backupKey,password:params.walletPassphrase})}catch(e){throw new Error(`Error decrypting backup keychain: ${e.message}`)}const backupSigningMaterial=JSON.parse(backupPrv),index=params.index||0,currPath=params.seed?(0,sdk_lib_mpc_1.getDerivationPath)(params.seed)+`/${index}`:`m/${index}`,signatureHex=await sdk_core_1.EDDSAMethods.getTSSSignature(userSigningMaterial,backupSigningMaterial,currPath,unsignedTransaction),publicKeyObj={pub:bs58EncodedPublicKey};txBuilder.addSignature(publicKeyObj,signatureHex);return{serializedTx:(await txBuilder.build()).toBroadcastFormat(),scanIndex:index}}async recoverConsolidations(params){const isUnsignedSweep=!params.userKey&&!params.backupKey&&!params.walletPassphrase,startIdx=params.startingScanIndex||1,endIdx=params.endingScanIndex||startIdx+exports.DEFAULT_SCAN_FACTOR;if(startIdx<1||endIdx<=startIdx||endIdx-startIdx>10*exports.DEFAULT_SCAN_FACTOR)throw new Error(`Invalid starting or ending index to scan for addresses. startingScanIndex: ${startIdx}, endingScanIndex: ${endIdx}.`);if(!params.durableNonces)throw new Error("Missing durable nonces");if(!params.durableNonces.publicKeys)throw new Error("Invalid durable nonces: missing public keys");if(!params.durableNonces.secretKey)throw new Error("Invalid durable nonces array: missing secret key");const bitgoKey=params.bitgoKey.replace(/\s/g,""),MPC=await sdk_core_1.EDDSAMethods.getInitializedMpcInstance(),baseAddressPath=params.seed?(0,sdk_lib_mpc_1.getDerivationPath)(params.seed)+"/0":"m/0",accountId=MPC.deriveUnhardened(bitgoKey,baseAddressPath).slice(0,64),baseAddress=new lib_1.KeyPair({pub:accountId}).getAddress();let durableNoncePubKeysIndex=0;const durableNoncePubKeysLength=params.durableNonces.publicKeys.length,consolidationTransactions=[];let lastScanIndex=startIdx;for(let i=startIdx;i<endIdx;i++){const recoverParams={userKey:params.userKey,backupKey:params.backupKey,bitgoKey:params.bitgoKey,walletPassphrase:params.walletPassphrase,recoveryDestination:baseAddress,seed:params.seed,index:i,durableNonce:{publicKey:params.durableNonces.publicKeys[durableNoncePubKeysIndex],secretKey:params.durableNonces.secretKey},tokenContractAddress:params.tokenContractAddress};let recoveryTransaction;try{recoveryTransaction=await this.recover(recoverParams)}catch(e){if("Did not find address with funds to recover"===e.message||"Did not find token account to recover tokens, please check token account"===e.message||"Not enough token funds to recover"===e.message){lastScanIndex=i;continue}throw e}if(isUnsignedSweep?consolidationTransactions.push(recoveryTransaction.txRequests[0]):consolidationTransactions.push(recoveryTransaction),lastScanIndex=i,durableNoncePubKeysIndex++,durableNoncePubKeysIndex>=durableNoncePubKeysLength)break}if(0===consolidationTransactions.length)throw new Error("Did not find an address with funds to recover");if(isUnsignedSweep){const lastTransactionCoinSpecific={commonKeychain:consolidationTransactions[consolidationTransactions.length-1].transactions[0].unsignedTx.coinSpecific.commonKeychain,lastScanIndex};consolidationTransactions[consolidationTransactions.length-1].transactions[0].unsignedTx.coinSpecific=lastTransactionCoinSpecific;return{txRequests:consolidationTransactions}}return{transactions:consolidationTransactions,lastScanIndex}}getTokenEnablementConfig(){return{requiresTokenEnablement:!0,supportsMultipleTokenEnablements:!0}}getBuilder(){return new lib_1.TransactionBuilderFactory(statics_1.coins.get(this.getChain()))}async broadcastTransaction({serializedSignedTransaction}){(0,utils_1.validateRawTransaction)(serializedSignedTransaction,!0,!0);const response=await this.getDataFromNode({payload:{id:"1",jsonrpc:"2.0",method:"sendTransaction",params:[serializedSignedTransaction,{encoding:"base64"}]}});if(response.body.error)throw new Error("Error broadcasting transaction: "+response.body.error.message);return{txId:response.body.result}}}exports.Sol=Sol},1839:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";const{Buffer}=__webpack_require__(901048),{URL}=__webpack_require__(654419),Bignumber=__webpack_require__(755553).BigNumber,utils=__webpack_require__(411974),constants=__webpack_require__(355710),MT=constants.MT,NUMBYTES=constants.NUMBYTES,SHIFT32=constants.SHIFT32,SYMS=constants.SYMS,TAG=constants.TAG,HALF=constants.MT.SIMPLE_FLOAT<<5|constants.NUMBYTES.TWO,FLOAT=constants.MT.SIMPLE_FLOAT<<5|constants.NUMBYTES.FOUR,DOUBLE=constants.MT.SIMPLE_FLOAT<<5|constants.NUMBYTES.EIGHT,TRUE=constants.MT.SIMPLE_FLOAT<<5|constants.SIMPLE.TRUE,FALSE=constants.MT.SIMPLE_FLOAT<<5|constants.SIMPLE.FALSE,UNDEFINED=constants.MT.SIMPLE_FLOAT<<5|constants.SIMPLE.UNDEFINED,NULL=constants.MT.SIMPLE_FLOAT<<5|constants.SIMPLE.NULL,MAXINT_BN=new Bignumber("0x20000000000000"),BUF_NAN=Buffer.from("f97e00","hex"),BUF_INF_NEG=Buffer.from("f9fc00","hex"),BUF_INF_POS=Buffer.from("f97c00","hex");class Encoder{constructor(options){options=options||{},this.streaming="function"==typeof options.stream,this.onData=options.stream,this.semanticTypes=[[URL,this._pushUrl],[Bignumber,this._pushBigNumber]];const addTypes=options.genTypes||[],len=addTypes.length;for(let i=0;i<len;i++)this.addSemanticType(addTypes[i][0],addTypes[i][1]);this._reset()}addSemanticType(type,fun){const len=this.semanticTypes.length;for(let i=0;i<len;i++){if(this.semanticTypes[i][0]===type){const old=this.semanticTypes[i][1];return this.semanticTypes[i][1]=fun,old}}return this.semanticTypes.push([type,fun]),null}push(val){return!val||(this.result[this.offset]=val,this.resultMethod[this.offset]=0,this.resultLength[this.offset]=val.length,this.offset++,this.streaming&&this.onData(this.finalize()),!0)}pushWrite(val,method,len){return this.result[this.offset]=val,this.resultMethod[this.offset]=method,this.resultLength[this.offset]=len,this.offset++,this.streaming&&this.onData(this.finalize()),!0}_pushUInt8(val){return this.pushWrite(val,1,1)}_pushUInt16BE(val){return this.pushWrite(val,2,2)}_pushUInt32BE(val){return this.pushWrite(val,3,4)}_pushDoubleBE(val){return this.pushWrite(val,4,8)}_pushNaN(){return this.push(BUF_NAN)}_pushInfinity(obj){const ha