@avalabs/core-wallets-sdk 3.1.0-alpha.73 → 3.1.0-alpha.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("bitcoinjs-lib"),t=require("@avalabs/core-utils-sdk"),r=require("coinselect"),s=require("@ledgerhq/hw-app-eth"),n=require("ethers"),a=require("bip32"),i=require("bip39"),o=require("@ledgerhq/hw-transport"),d=require("@metamask/eth-sig-util"),u=require("ledger-bitcoin"),c=require("@ledgerhq/hw-app-btc/lib/bip32"),l=require("@avalabs/avalanchejs"),p=require("@noble/hashes/sha256"),h=require("@avalabs/glacier-sdk"),g=require("@avalabs/core-chains-sdk"),m=require("create-hash"),f=require("xss"),x=require("bip32-path"),v=require("@avalabs/hw-app-avalanche"),y=require("hdkey"),w=require("@solana/kit"),b=require("@solana-program/system"),A=require("@solana-program/token"),T=require("@ledgerhq/hw-app-solana"),I=require("@noble/curves/ed25519"),S=require("@scure/base"),P=require("micro-key-producer/slip10.js"),B=require("buffer");function C(e){return e.reduce(((e,t)=>e+t.value),0)}class k{async getUtxoBalance(e,t=!0){const r=await this.getUTXOs(e,t);return{balance:C(r.confirmed),balanceUnconfirmed:C(r.unconfirmed),utxos:r.confirmed,utxosUnconfirmed:r.unconfirmed}}}function E(t,r,s){const n=new e.Psbt({network:s});return t.forEach((e=>{n.addInput({hash:e.txHash,index:e.index,witnessUtxo:{script:Buffer.from(e.script,"hex"),value:e.value}})})),r.forEach((e=>{n.addOutput({value:e.value,address:e.address})})),n}function M(e,t,s,n,a){const i=[{address:e,value:s}],{inputs:o,outputs:d,fee:u}=r(a,i,n);if(!o||!d)return{fee:u};const c=[d[0]],l=d[1];return l&&c.push({address:t,value:l.value}),{inputs:o,outputs:c,fee:u}}function V(e){const t=[];return e.filter((e=>{const r=e.txHash+e.index.toString();return!t.includes(r)&&(t.push(r),!0)}))}function D(e,t,r,s,n,a){const i=M(e,t,r,s,V(n));return i.inputs?{...i,psbt:E(i.inputs,i.outputs,a)}:(console.log("Unable to construct transaction, fee needed: ",i.fee),i)}function K(t,r){return e.payments.p2wpkh({pubkey:t,network:r}).address}function O(e){return new s(e,"w0w")}const U="m/44'/60'",N=`${U}/0'`;var _=(e=>(e.BIP44="bip44",e.LedgerLive="ledger_live",e))(_||{});const L=(e,t,r=!0)=>{switch(t){case _.BIP44:return`${r?"m/":""}44'/60'/0'/0/${e}`;case _.LedgerLive:return`${r?"m/":""}44'/60'/${e}'/0/0`;default:throw new Error("Invalid path spec")}};var X=[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];const F=(e,t)=>t.has(e.from.toLowerCase())||t.has((e.to??"").toLowerCase()),H=(e,t)=>{const r=new n.Interface(X).parseTransaction({data:e.data,value:e.value});if(t.has(e.from.toLowerCase()))return!0;if("transfer"===r?.name)return t.has(r.args[0]?.toLowerCase());if("transferFrom"===r?.name){const e=t.has(r.args[0]?.toLowerCase()),s=t.has(r.args[1]?.toLowerCase());return e||s}return!1};var $=[{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall.Call[]",name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes[]",name:"returnData",type:"bytes[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockCoinbase",outputs:[{internalType:"address",name:"coinbase",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockDifficulty",outputs:[{internalType:"uint256",name:"difficulty",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockGasLimit",outputs:[{internalType:"uint256",name:"gaslimit",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockTimestamp",outputs:[{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"addr",type:"address"}],name:"getEthBalance",outputs:[{internalType:"uint256",name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"}];class q extends n.JsonRpcProvider{url;constructor(e,t,r){super(t,r,{staticNetwork:r}),this.#e="string"==typeof t?new n.FetchRequest(t):void 0===t?new n.FetchRequest("http://localhost:8545"):t.clone(),this.url=this.#e.url,this._maxCalls="number"==typeof e?e:e.maxCalls,"number"!=typeof e&&e?.multiContractAddress&&(this._parentProvider=new n.JsonRpcProvider(this.#e,r,{staticNetwork:r}),this._multicallContract=new n.Contract(e.multiContractAddress,$,this._parentProvider),this._maxCalls=62)}#e;#t=1;_pendingBatchAggregator=null;_pendingBatch=[];_maxCalls;_parentProvider;_multicallContract;send(e,t){if("eth_call"!==e)return super.send(e,t);const r={method:e,params:t,id:this.#t++,jsonrpc:"2.0"};null==this._pendingBatch&&(this._pendingBatch=[]);const s={request:r,resolve:null,reject:null},n=new Promise(((e,t)=>{s.resolve=e,s.reject=t}));return this._pendingBatch.push(s),this._pendingBatchAggregator||(this._pendingBatchAggregator=setTimeout(this.flush,10)),n}flush=()=>{const e=this._pendingBatch?.slice(0,this._maxCalls)??[];!this._pendingBatch||this._pendingBatch?.length<=this._maxCalls?(this._pendingBatch=null,this._pendingBatchAggregator=null):(this._pendingBatch.splice(0,this._maxCalls),setTimeout(this.flush,10));(this._multicallContract?this.batchSendMultiCall:this.batchSend)(e).then((t=>{e?.forEach(((e,r)=>{const s=t[r];if(s.error){const t=new Error(s.error.message);t.code=s.error.code,t.data=s.error.data,e.reject(t)}else e.resolve(s.result)}))})).catch((t=>{e?.forEach((e=>{e.reject(t)}))}))};batchSend=async e=>{const t=e?.map((e=>e.request));if(!this.url||!t)throw new Error("No url");const r=this.#e.clone();r.body=t;return(await r.send()).bodyJson};batchSendMultiCall=async e=>{const t=e.map((e=>({callData:e.request.params[0].data,target:e.request.params[0].to})));return(await this._multicallContract.aggregate(t))[1].map((e=>({result:e})))}}function R(e,t){return a.fromBase58(e).derivePath(`0/${t}`).publicKey}let W=class e extends n.AbstractSigner{type="default";path;provider=null;accountIndex;derivationSpec;transport;_eth;constructor(e=0,t,r,s){super(),this.path=L(e,r),this.accountIndex=e,this.transport=t,this.derivationSpec=r,this._eth=O(t),n.defineProperties(this,{path:this.path,type:"default",provider:s??null})}setTransport(e){this._eth=O(e),this.transport=e}async getAddress(){const e=await this._eth.getAddress(this.path);return n.getAddress(e.address)}async signMessage(e){"string"==typeof e&&(e=n.toUtf8Bytes(e));const t=n.hexlify(e).substring(2),r=await this._eth.signPersonalMessage(this.path,t);return r.r="0x"+r.r,r.s="0x"+r.s,n.Signature.from(r).serialized}async signTransaction(e){const t=await this.populateTransaction(e);delete t.from;const r=n.Transaction.from(t),s=r.unsignedSerialized,a=await this._eth.signTransaction(this.path,s.slice(2),null);return r.signature={v:BigInt("0x"+a.v),r:"0x"+a.r,s:"0x"+a.s},r.serialized}connect(t){return new e(this.accountIndex,this.transport,this.derivationSpec,t)}async signTypedData(e,t,r){const{EIP712Domain:s,...a}=t,i=n.TypedDataEncoder.getPrimaryType(a);try{const s=await this._eth.signEIP712Message(this.path,{domain:{name:e.name||void 0,chainId:e.chainId?Number(e.chainId):void 0,version:e.version||void 0,verifyingContract:e.verifyingContract||void 0,salt:e.salt?.toString()||void 0},types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],...t},primaryType:i,message:r});return s.r="0x"+s.r,s.s="0x"+s.s,n.Signature.from(s).serialized}catch(s){if(s instanceof o.TransportStatusError&&s.statusCode===o.StatusCodes.INS_NOT_SUPPORTED){const s=d.TypedDataUtils.hashStruct(i,r,t,d.SignTypedDataVersion.V4),a=d.TypedDataUtils.hashStruct("EIP712Domain",e,t,d.SignTypedDataVersion.V4),o=await this._eth.signEIP712HashedMessage(this.path,a.toString("hex"),s.toString("hex"));return o.r="0x"+o.r,o.s="0x"+o.s,n.Signature.from(o).serialized}throw s}}};function j(t,r,s,n,a,i){const o=new u.PsbtV2;return o.setGlobalPsbtVersion(2),o.setGlobalTxVersion(2),o.setGlobalInputCount(t.length),o.setGlobalOutputCount(r.length),t.forEach(((e,t)=>{if(!e.txHex)throw new Error("Input tx hex is not given");o.setInputPreviousTxId(t,Buffer.from(e.txHash,"hex").reverse()),o.setInputOutputIndex(t,e.index),o.setInputNonWitnessUtxo(t,Buffer.from(e.txHex,"hex")),o.setInputWitnessUtxo(t,e.value,Buffer.from(e.script,"hex")),o.setInputBip32Derivation(t,a,n,c.pathStringToArray(i))})),r.forEach(((t,r)=>{const n=e.address.toOutputScript(t.address,s);o.setOutputAmount(r,t.value),o.setOutputScript(r,n)})),o}function J(t,r,s,n){const a=new e.Psbt({network:r}),i=t.getGlobalInputCount(),o=t.getGlobalOutputCount();for(let e=0;e<i;e++){const r=t.getInputWitnessUtxo(e),i=t.getInputBip32Derivation(e,s);a.addInput({nonWitnessUtxo:t.getInputNonWitnessUtxo(e),witnessUtxo:r?{value:r.amount,script:r.scriptPubKey}:void 0,hash:t.getInputPreviousTxid(e),index:t.getInputOutputIndex(e),bip32Derivation:i?[{path:n,pubkey:s,masterFingerprint:i.masterFingerprint}]:void 0})}for(let s=0;s<o;s++)a.addOutput({value:t.getOutputAmount(s),address:e.address.fromOutputScript(t.getOutputScript(s),r)});return a}class z{constructor(t,r){this.pubkey=t,this.provider=r;try{this.ecPair=e.ECPair.fromPublicKey(t)}catch(e){throw new Error("Not a valid public key.")}}ecPair;getAddressP2PKH(){return e.payments.p2pkh({pubkey:this.ecPair.publicKey,network:this.provider.getNetwork()}).address}getAddressBech32(){return K(this.ecPair.publicKey,this.provider.getNetwork())}async getUTXOs(){return this.provider.getUTXOs(this.getAddressBech32(),!0)}async getBalances(){return this.provider.getBalances(this.getAddressBech32())}async getUtxoBalance(){return this.provider.getUtxoBalance(this.getAddressBech32())}connect(e){this.provider=e}getProvider(){return this.provider}getPublicKey(){return this.ecPair.publicKey}createTransferTx(e,t,r,s){return D(e,this.getAddressBech32(),t,r,s,this.provider.getNetwork())}}var G=(e=>(e.Base="base",e.AddValidator="add_validator",e.AddDelegator="add_delegator",e.Export="export",e.Import="import",e.CreateSubnet="create_subnet",e.CreateChain="create_chain",e.ConvertSubnetToL1="convert_subnet_to_l1",e.RegisterL1Validator="register_l1_validator",e.SetL1ValidatorWeight="set_l1_validator_weight",e.IncreaseL1ValidatorBalance="increase_l1_validator_balance",e.DisableL1Validator="disable_l1_validator",e.AddSubnetValidator="add_subnet_validator",e.RemoveSubnetValidator="remove_subnet_validator",e.AddPermissionlessValidator="add_permissionless_validator",e.AddPermissionlessDelegator="add_permissionless_delegator",e.TransformSubnet="transform_subnet",e.TransferSubnetOwnership="transfer_subnet_ownership",e.Unknown="unknown",e))(G||{});const Y=e=>{switch(e){case"C":return l.EVM;case"X":return l.AVM;case"P":return l.PVM;default:throw new Error(`Unable to get VM type for chain "${e}"`)}};const{getTransferableInputsByTx:Q,AddressMaps:Z}=l.utils,ee=async({tx:e,fromAddressBytes:t,provider:r,credentials:s,utxos:n})=>{const a=Q(e);let i=Z.fromTransferableInputs(a,n,BigInt(Math.floor((new Date).getTime()/1e3)),t);if((e=>l.pvmSerial.isCreateChainTx(e)||l.pvmSerial.isAddSubnetValidatorTx(e)||l.pvmSerial.isRemoveSubnetValidatorTx(e)||l.pvmSerial.isTransformSubnetTx(e)||l.pvmSerial.isTransferSubnetOwnershipTx(e)||l.pvmSerial.isConvertSubnetToL1Tx(e))(e))try{const t=await(async({tx:e,provider:t,addressMaps:r})=>{const s=e.getSubnetAuth().values(),n=await t.getApiP().getSubnet({subnetID:e.getSubnetID().value()}),a=l.OutputOwners.fromNative(n.controlKeys.map((e=>l.utils.parse(e)[2])),BigInt(n.locktime),Number(n.threshold)).addrs.reduce(((e,t,r)=>(s.includes(r)&&e.push([t,r]),e)),[]);return r.push(new l.utils.AddressMap(a)),r})({tx:e,provider:r,addressMaps:i});return new l.UnsignedTx(e,n,t,s)}catch(e){throw new Error(`Error while preparing subnet authorization data: ${e.message}`)}else l.pvmSerial.isDisableL1ValidatorTx(e)&&(i=await async function(e,t,r){try{const{deactivationOwner:s}=await r.getApiP().getL1Validator(t.validationId.toString()),n=t.getDisableAuth().values(),a=s.addresses.reduce(((e,t,r)=>(n.includes(r)&&e.push([t,r]),e)),[]);return e.push(new l.utils.AddressMap(a)),e}catch(e){throw new Error(`Error while preparing disableAuth data: ${e.message}`)}}(i,e,r));return new l.UnsignedTx(e,n,i,s)},{bufferToHex:te,packTx:re}=l.utils,{publicKeyBytesToAddress:se,recoverPublicKey:ne}=l.secp256k1,ae=new l.Signature(new Uint8Array(Array(65).fill(0))),ie=(e,t)=>{const r=Math.max(...e);if(!isFinite(r))throw new Error("Error while adding placeholder signatures for the provided indices.");const s=new Array(r+1).fill(ae);if(!t)return s;const{unsignedTx:n,credentialIndex:a}=t,i=n.getCredentials()[a];if(!i)return s;const o=re(n.getTx()),d=p.sha256(o),u=ae.toString();for(const e of i.toJSON()){if(e.toString()===u)continue;const t=ne(d,e.toBytes()),r={toHex:()=>te(se(t))},i=n.addressMaps.getSigIndicesForAddress(r,!1)??[];for(const t of i)t[0]===a&&(s[t[1]]=e)}return s};function oe(e){return l.utils.bufferToHex(l.utils.addChecksum(e.toBytes()))}const{getManagerForVM:de,hexToBuffer:ue,unpackWithManager:ce}=l.utils,le=async({transactionHex:e,chainAlias:t,provider:r,utxos:s})=>{const n=Y(t);if(n===l.EVM)throw new Error("EVM transactions are not supported");const a=ue(e),i=ce(n,a),o=await(async({tx:e,txBytes:t,provider:r,vm:s,utxos:n})=>{try{const a=de(s).unpack(t,l.avaxSerial.SignedTx),i=await ee({tx:e,utxos:n,provider:r,credentials:a.getCredentials()});return e.getSigIndices().map(((e,t)=>new l.Credential(ie(e,{unsignedTx:i,credentialIndex:t}))))}catch(t){return e.getSigIndices().map((e=>new l.Credential(ie(e))))}})({tx:i,txBytes:a,provider:r,vm:n,utxos:s});return ee({tx:i,provider:r,credentials:o,utxos:s})},{parseBech32:pe,format:he}=l.utils,{publicKeyBytesToAddress:ge}=l.secp256k1;class me{constructor(e,t,r){this.baseUrl=e,this.context=t,this.fetchOptions=r}getContext(){return this.context}getChainID(e){switch(e){case"X":return this.context.xBlockchainID;case"P":return this.context.pBlockchainID;case"C":return this.context.cBlockchainID}}getNetworkID(){return this.context.networkID}getHrp(){return l.networkIDs.getHRP(this.getNetworkID())}getApiX(){const e=new l.avm.AVMApi(this.baseUrl);return this.fetchOptions&&e.setFetchOptions(this.fetchOptions),e}getApiP(){const e=new l.pvm.PVMApi(this.baseUrl);return this.fetchOptions&&e.setFetchOptions(this.fetchOptions),e}getApiC(){const e=new l.evm.EVMApi(this.baseUrl);return this.fetchOptions&&e.setFetchOptions(this.fetchOptions),e}getInfo(){const e=new l.info.InfoApi(this.baseUrl);return this.fetchOptions&&e.setFetchOptions(this.fetchOptions),e}getApi(e){switch(e){case"X":return this.getApiX();case"P":return this.getApiP();case"C":return this.getApiC()}}getAvaxID(){return this.getContext().avaxAssetID}getAddress(e,r){const s=t.strip0x(n.SigningKey.computePublicKey(e,!0)),a=Buffer.from(s,"hex"),i=ge(a);return he(r,this.getHrp(),i)}getAddressFromBuffer(e,t){return he(t,this.getHrp(),e)}formatAddress(e,t){const[,r]=pe(e);return he(t,this.getHrp(),r)}getApiByVM(e){switch(e){case"AVM":return this.getApiX();case"PVM":return this.getApiP();case"EVM":return this.getApiC()}}getApiByChainID(e){switch(e){case this.context.xBlockchainID:return this.getApiX();case this.context.pBlockchainID:return this.getApiP();case this.context.cBlockchainID:return this.getApiC()}}async issueTx(e){const t=e.unsignedTx.getVM(),r=oe(e);return this.issueTxHex(r,t)}async issueTxHex(e,t){return this.getApiByVM(t).issueTx({tx:e})}async waitForTransaction(e,t,r=6e4){const s=this.getApiByVM(t),n=Date.now();return new Promise(((t,a)=>{const i=async()=>{let o;switch(r&&n+r<Date.now()&&a(new Error("Timeout")),o=s instanceof l.evm.EVMApi?await s.getAtomicTxStatus(e):await s.getTxStatus({txID:e,includeReason:!0}),o.status){case"Accepted":case"Committed":return void t({success:!0});case"Dropped":case"Rejected":return void t({success:!1});default:setTimeout((()=>{i()}),1e3)}};i()}))}}const fe={weights:l.Common.createDimensions({bandwidth:1,dbRead:1e3,dbWrite:1e3,compute:4}),maxCapacity:BigInt(1e6),maxPerSecond:BigInt(1e5),targetPerSecond:BigInt(5e4),minPrice:BigInt(1),excessConversionConstant:BigInt(2164043)},xe={xBlockchainID:"2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM",pBlockchainID:"11111111111111111111111111111111LpoYY",cBlockchainID:"2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5",avaxAssetID:"FvwEAhmxKfeiG8SnEvq42hc6whRyY3EFYAvebMqDNDGCgxN5Z",baseTxFee:BigInt(1e6),createAssetTxFee:BigInt(1e7),networkID:1,hrp:"avax",platformFeeConfig:fe},ve={xBlockchainID:"2JVSBoinj9C2J33VntvzYtVJNZdN2NKiwwKjcumHUWEb5DbBrm",pBlockchainID:"11111111111111111111111111111111LpoYY",cBlockchainID:"yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp",avaxAssetID:"U8iRqJoiJm8xZHAacmvYyZVwqQx6uDNtQeP3CQ6fcgQk3JqnK",baseTxFee:BigInt(1e6),createAssetTxFee:BigInt(1e7),networkID:5,hrp:"fuji",platformFeeConfig:fe},ye={xBlockchainID:"2piQ2AVHCjnduiWXsSY15DtbVuwHE2cwMHYnEXHsLL73BBkdbV",pBlockchainID:"11111111111111111111111111111111LpoYY",cBlockchainID:"vV3cui1DsEPC3nLCGH9rorwo8s6BYxM2Hz4QFE5gEYjwTqAu",avaxAssetID:"22jjRVdyTJiAEtcZciAVR8bTFyVDUVoo1T3o5PiDspQSZ2maXR",baseTxFee:1000000n,createAssetTxFee:1000000n,networkID:76,hrp:"custom",platformFeeConfig:fe};class we extends me{constructor(e,t,r){super(e,t,r)}static async fromBaseURL(e){const t=await l.Context.getContextFromURI(e);try{return new we(e,t)}catch{return new we(e,t)}}static getDefaultMainnetProvider(){return new we(g.AVALANCHE_XP_NETWORK.rpcUrl,xe)}static getDefaultFujiProvider(){return new we(g.AVALANCHE_XP_TEST_NETWORK.rpcUrl,ve)}static getDefaultDevnetProvider(){return new we(g.AVALANCHE_P_DEV_NETWORK.rpcUrl,ye)}}const{bytesCompare:be,parseBech32:Ae}=l.utils,Te=(e,t)=>"P"===t,Ie=(e,t,r)=>{const s=Te(0,t)?e.amount:e.asset?.amount;return new l.TransferOutput(new l.BigIntPr(BigInt(s)),l.OutputOwners.fromNative(e.addresses.map((e=>Ae(e)[1])).sort(be),BigInt(r??0),e.threshold))},Se=(e,t)=>{const r=((e,t)=>{const r=t===h.Network.FUJI,{cBlockchainID:s,xBlockchainID:n,pBlockchainID:a}=r?ve:xe;if(s===e)return"C";if(n===e)return"X";if(a===e)return"P";throw new Error(`Unknown chainId "${e}"`)})(e.createdOnChainId,t),s=Te(0,r)?e.txHash:e.creationTxHash,n=Te(0,r)?e.assetId:e.asset?.assetId;return new l.Utxo(l.avaxSerial.UTXOID.fromNative(s,Number(e.outputIndex)),l.Id.fromString(n),((e,t)=>Te(0,t)?e.stakeableLocktime?new l.pvmSerial.StakeableLockOut(new l.BigIntPr(BigInt(e.stakeableLocktime??0)),Ie(e,t,e.platformLocktime??0)):Ie(e,t,e.platformLocktime):Ie(e,t,e.locktime))(e,r))},{unpackWithManager:Pe,parse:Be,bufferToHex:Ce,AddressMaps:ke,AddressMap:Ee}=l.utils;function Me(e){const t=Buffer.from(e,"utf8"),r=Buffer.alloc(4);r.writeUInt32BE(t.length,0);const s=Buffer.from(`Avalanche Signed Message:\n${r}${e}`,"utf8");return m("sha256").update(s).digest()}const Ve=1024,De=1024;async function Ke(e,t,r){const s=e.slice(0,Ve),n=e.slice(Ve),a=await Oe(t,{...r,addresses:s});if(n.length){const s=await Ke(n,t,{...r,addresses:e});return a.merge(s)}return a}async function Oe(e,t){if(t.addresses.length>Ve)throw new Error(`Can not get UTXOs for more than ${Ve} addresses.`);const{endIndex:r,utxos:s}=await e.getUTXOs(t),n=new l.utils.UtxoSet(s);if(s.length>=De){const s=await Oe(e,{...t,startIndex:r});return n.merge(s)}return n}function Ue(){return BigInt(Math.floor(Date.now()/1e3))}const{getUtxoInfo:Ne}=l.utils;async function _e(e,t){const r=e.slice(0,256),s=e.slice(256),n=await t.getStake({addresses:r});if(s.length){const e=await _e(s,t);return{staked:n.staked+e.staked,stakedOutputs:[...n.stakedOutputs,...e.stakedOutputs]}}return n}const{getTransferableInputsByTx:Le,hexToBuffer:Xe,unpackWithManager:Fe}=l.utils;function He(e,t=!0){try{if(t){const[t]=l.utils.parse(e);if(!["X","P","C"].includes(t))return!1}else l.utils.parseBech32(e);return!0}catch(e){return!1}}const $e=e=>{if([xe.xBlockchainID,ve.xBlockchainID,ye.xBlockchainID].includes(e))return"AVM";if([xe.pBlockchainID,ve.pBlockchainID,ye.pBlockchainID].includes(e))return"PVM";if([xe.cBlockchainID,ve.cBlockchainID,ye.cBlockchainID].includes(e))return"EVM";throw new Error("Unknown chain id. Failed to get alias.")},qe=(e,t)=>e.reduce(((e,r)=>r.assetId.toString()!==t?e:e+r.output.amount()),BigInt(0)),Re=(e,t)=>e.reduce(((e,r)=>r.assetId.toString()!==t?e:e+r.input.amount()),BigInt(0));var We={parseCreateSubnetTx:e=>l.pvmSerial.isCreateSubnetTx(e)?({feeData:t,provider:r})=>({type:G.CreateSubnet,chain:e.getVM(),threshold:e.getSubnetOwners().threshold.value(),controlKeys:e.getSubnetOwners().addrs.map((e=>`P-${e.toString(r.getHrp())}`)),...t}):null,parseCreateChainTx:e=>l.pvmSerial.isCreateChainTx(e)?({feeData:t})=>({type:G.CreateChain,chain:e.getVM(),subnetID:e.getSubnetID().value(),chainName:e.chainName.value(),chainID:e.getBlockchainId(),vmID:e.vmID.value(),fxIDs:e.fxIds.map((e=>e.value())),genesisData:e.genesisData.toString(),...t}):null,parseAddSubnetValidatorTx:e=>l.pvmSerial.isAddSubnetValidatorTx(e)?({feeData:t})=>({type:G.AddSubnetValidator,chain:e.getVM(),stake:e.subnetValidator.validator.weight.value(),nodeID:e.subnetValidator.validator.nodeId.value(),start:e.subnetValidator.validator.startTime.value().toString(),end:e.subnetValidator.validator.endTime.value().toString(),subnetID:e.getSubnetID().value(),...t}):null,parseRemoveSubnetValidatorTx:e=>l.pvmSerial.isRemoveSubnetValidatorTx(e)?({feeData:t})=>({type:G.RemoveSubnetValidator,chain:e.getVM(),nodeID:e.nodeId.toString(),subnetID:e.getSubnetID().value(),...t}):null,parseImportTx:e=>l.pvmSerial.isImportTx(e)||l.avmSerial.isImportTx(e)||l.evmSerial.isImportTx(e)?l.evmSerial.isImportTx(e)?({feeData:t,assetId:r})=>({type:G.Import,chain:e.getVM(),source:$e(e.sourceChain.value()),amount:Re(e.importedInputs,r),...t}):({feeData:t,assetId:r})=>({type:G.Import,chain:e.getVM(),source:$e(e.sourceChain.value()),amount:Re(e.ins,r),...t}):null,parseExportTx:e=>l.pvmSerial.isExportTx(e)||l.avmSerial.isExportTx(e)||l.evmSerial.isExportTx(e)?l.evmSerial.isExportTx(e)?({feeData:t,assetId:r})=>({type:G.Export,chain:e.getVM(),destination:$e(e.destinationChain.toString()),amount:qe(e.exportedOutputs,r),...t}):({feeData:t,assetId:r})=>({type:G.Export,chain:e.getVM(),destination:$e(e.destination.value()),amount:qe(e.outs,r),...t}):null,parseBaseTx:e=>l.avmSerial.isAvmBaseTx(e)||l.pvmSerial.isPvmBaseTx(e)?async({feeData:t,currentAddress:r,provider:s})=>{const n=e.baseTx,a=await(async(e,t)=>{const r=e.baseTx,s=new Set;if(r.outputs.forEach((e=>{s.add(e.assetId.value())})),l.avmSerial.isAvmBaseTx(e)){const e=await Promise.all([...s.values()].map((e=>t.getApiX().getAssetDescription(e))));return r.outputs.reduce(((r,n)=>{if(n.output instanceof l.TransferOutput){const a=n.assetId.value(),i=[...s.values()].indexOf(a),o=e[i],d=n.output.outputOwners.addrs.map((e=>`X-${e.toString(t.getContext().hrp)}`));return[...r,{assetId:a,amount:n.output.amount(),locktime:n.output.getLocktime(),threshold:BigInt(n.output.getThreshold()),assetDescription:o,owners:d,isAvax:t.getContext().avaxAssetID===a}]}return r}),[])}return r.outputs.reduce(((e,r)=>{if(r.output instanceof l.TransferOutput){const s=r.assetId.value(),n=r.output.outputOwners.addrs.map((e=>`P-${e.toString(t.getContext().hrp)}`));return[...e,{assetId:s,amount:r.output.amount(),locktime:r.output.getLocktime(),threshold:BigInt(r.output.getThreshold()),owners:n,isAvax:t.getContext().avaxAssetID===s}]}return e}),[])})(e,s),i=Ue(),o=a.filter((e=>!(1===e.owners.length&&e.owners[0]===r&&e.locktime<=i)));return{type:G.Base,chain:e.getVM(),outputs:o,memo:f(Buffer.from(n.memo.toBytes()).toString("utf-8",4)),...t}}:null,parseAddPermissionlessValidatorTx:e=>{if(!l.pvmSerial.isAddPermissionlessValidatorTx(e))return null;let t,r;return l.pvmSerial.isSigner(e.signer)&&(r=l.utils.bufferToHex(e.signer.proof.publicKey),t=l.utils.bufferToHex(e.signer.proof.signature)),({feeData:s})=>({type:G.AddPermissionlessValidator,chain:e.getVM(),stake:e.subnetValidator.validator.weight.value(),nodeID:e.subnetValidator.validator.nodeId.value(),start:e.subnetValidator.validator.startTime.value().toString(),end:e.subnetValidator.validator.endTime.value().toString(),subnetID:e.subnetValidator.subnetId.value(),delegationFee:e.shares.value(),stakeOuts:e.stake,rewardOwner:e.getValidatorRewardsOwner(),delegationRewardOwner:e.getDelegatorRewardsOwner(),signer:e.signer,publicKey:r,signature:t,...s})},parseAddPermissionlessDelegatorTx:e=>l.pvmSerial.isAddPermissionlessDelegatorTx(e)?({feeData:t})=>({type:G.AddPermissionlessDelegator,chain:e.getVM(),stake:e.subnetValidator.validator.weight.value(),nodeID:e.subnetValidator.validator.nodeId.value(),start:e.subnetValidator.validator.startTime.value().toString(),end:e.subnetValidator.validator.endTime.value().toString(),subnetID:e.subnetValidator.subnetId.value(),stakeOuts:e.stake,delegatorRewardsOwner:e.getDelegatorRewardsOwner(),...t}):null,parseTransferSubnetOwnershipTx:e=>l.pvmSerial.isTransferSubnetOwnershipTx(e)?({feeData:t,provider:r})=>({type:G.TransferSubnetOwnership,chain:e.getVM(),subnetID:e.subnetID.value(),threshold:e.getSubnetOwners().threshold.value(),controlKeys:e.getSubnetOwners().addrs.map((e=>`P-${e.toString(r.getHrp())}`)),...t}):null,parseConvertSubnetTx:e=>l.pvmSerial.isConvertSubnetToL1Tx(e)?({feeData:t,provider:r})=>{const s=r.getHrp(),n=e=>`P-${e.toString(s)}`;return{type:G.ConvertSubnetToL1,chain:e.getVM(),managerAddress:`0x${e.address.toString("hex")}`,validators:e.validators.map((e=>({nodeId:l.NodeId.fromHex(e.nodeId.toString("hex")).toString(),stake:e.weight.value(),balance:e.balance.value(),remainingBalanceOwners:e.remainingBalanceOwner.addresses.map(n),deactivationOwners:e.deactivationOwner.addresses.map(n)}))),chainID:e.chainID.value(),subnetID:e.subnetID.value(),...t}}:null,parseRegisterL1ValidatorTx:e=>l.pvmSerial.isRegisterL1ValidatorTx(e)?({feeData:t})=>({type:G.RegisterL1Validator,chain:e.getVM(),balance:e.balance.value(),...t}):null,parseIncreaseL1ValidatorBalanceTx:e=>l.pvmSerial.isIncreaseL1ValidatorBalanceTx(e)?({feeData:t})=>({type:G.IncreaseL1ValidatorBalance,chain:e.getVM(),balance:e.balance.value(),validationId:e.validationId.toString(),...t}):null,parseSetL1ValidatorWeightTx:e=>l.pvmSerial.isSetL1ValidatorWeightTx(e)?({feeData:t})=>({type:G.SetL1ValidatorWeight,chain:e.getVM(),...t}):null,parseDisableL1ValidatorTx:e=>l.pvmSerial.isDisableL1ValidatorTx(e)?({feeData:t})=>({type:G.DisableL1Validator,chain:e.getVM(),validationId:e.validationId.toString(),...t}):null};const{getBurnedAmountByTx:je,getOutputAmounts:Je,getInputAmounts:ze,validateBurnedAmount:Ge}=l.utils;function Ye(e,t,r){return[...e].sort(((e,s)=>{for(let n=0;n<t.length;n++){const a=t[n];if(e[a]>s[a])return"asc"===r?1:-1;if(e[a]<s[a])return"asc"===r?-1:1}return 0}))}function Qe(e){const t=Ue(),r=e.map((e=>({utxo:e,...l.utils.getUtxoInfo(e)}))),s=r.filter((e=>e.stakeableLocktime<=t)),n=r.filter((e=>e.stakeableLocktime>t)),a=Ye(s,["amount"],"desc"),i=Ye(n,["stakeableLocktime","amount"],"desc"),[o,...d]=a;return[...o?[o]:[],...i,...d].map((e=>e.utxo))}function Ze(e,t){return Ye(e.map((e=>({utxo:e,...l.utils.getUtxoInfo(e)}))),["amount"],t?"desc":"asc").map((e=>e.utxo))}const et=e=>Ze(e,!0),tt=e=>Ze(e,!1);const{getUtxoInfo:rt}=l.utils;var st=(e=>(e.ExportP="ExportP",e.ImportP="ImportP",e.AddPermissionlessValidator="AddPermissionlessValidator",e.AddPermissionlessDelegator="AddPermissionlessDelegator",e.BaseP="BaseP",e.ConsolidateP="ConsolidateP",e))(st||{});const nt="NodeID-8TArWpFgH3sazEH8qP4gUjtGtFMvjw1aR",at="11111111111111111111111111111111LpoYY",it=(e,t)=>e.reduce(((e,t)=>e+rt(t).amount),BigInt(0))-t,ot={BaseP:{sortFunction:et,unsignedTxBuilder:(e,t,r)=>{const s=e.getProvider().getContext();return e.baseTX({utxoSet:new l.utils.UtxoSet(t),chain:"P",toAddress:e.getCurrentAddress("P"),amountsPerAsset:{[s.avaxAssetID]:it(t,s.baseTxFee)},feeState:r})}},ConsolidateP:{sortFunction:tt,unsignedTxBuilder:(e,t,r)=>{const s=e.getProvider().getContext();return e.consolidateP({utxoSet:new l.utils.UtxoSet(t),amount:it(t,s.baseTxFee),feeState:r})}},AddPermissionlessValidator:{sortFunction:Qe,unsignedTxBuilder:(e,t,r)=>e.addPermissionlessValidator({utxoSet:new l.utils.UtxoSet(t),nodeId:nt,start:Ue(),end:Ue()+BigInt(1e3),weight:it(t,e.getProvider().getContext().baseTxFee),subnetId:at,shares:5,feeState:r,fromAddresses:void 0,rewardAddresses:void 0,delegatorRewardAddresses:void 0,publicKey:Buffer.from(l.utils.hexToBuffer("0x8f95423f7142d00a48e1014a3de8d28907d420dc33b3052a6dee03a3f2941a393c2351e354704ca66a3fc29870282e15")),signature:Buffer.from(l.utils.hexToBuffer("0x86a3ab4c45cfe31cae34c1d06f212434ac71b1be6cfe046c80c162e057614a94a5bc9f1ded1a7029deb0ba4ca7c9b71411e293438691be79c2dbf19d1ca7c3eadb9c756246fc5de5b7b89511c7d7302ae051d9e03d7991138299b5ed6a570a98"))})},AddPermissionlessDelegator:{sortFunction:Qe,unsignedTxBuilder:(e,t,r)=>e.addPermissionlessDelegator({utxoSet:new l.utils.UtxoSet(t),nodeId:nt,start:Ue(),end:Ue()+BigInt(1e3),weight:it(t,e.getProvider().getContext().baseTxFee),subnetId:at,feeState:r})},ExportP:{sortFunction:et,unsignedTxBuilder:(e,t,r)=>{const s=e.getProvider().getContext(),n=function({numberIns:e=1},t){const r=l.Common.createDimensions({bandwidth:161*e+254,dbRead:e,dbWrite:2+e,compute:200*e});return l.Common.dimensionsToGas(r,t)}({numberIns:t.length},s.platformFeeConfig.weights),a=r?n*r.price:s.baseTxFee;return e.exportP({amount:it(t,a),utxoSet:new l.utils.UtxoSet(t),destination:"X",feeState:r})}},ImportP:{sortFunction:et,unsignedTxBuilder:(e,t,r)=>e.importP({utxoSet:new l.utils.UtxoSet(t),sourceChain:"X",feeState:r})}};function dt(e){return x.validateString(e,!0)&&6===e.split("/").length}const ut=(e,t=!0)=>`${t?"m/":""}44'/9000'/${e}'/0/0`;function ct(e){if("object"!=typeof e||!e)throw new Error("feeState parameter is required post E-upgrade")}const{parse:lt,hexToBuffer:pt}=l.utils;class ht{constructor(e){this.provider=e}setProvider(e){this.provider=e}getProvider(){return this.provider}async getUTXOs(e){const t=this.provider.getApi(e);return Ke(this.getAddresses(e),t)}async getStake(){const e=this.provider.getApiP();return _e(this.getAddresses("P"),e)}async getAtomicUTXOs(e,t){if(e===t)throw new Error("Chain can not be the same as source chain.");const r=this.provider.getApi(e),s=this.provider.getChainID(t);return Ke(this.getAddresses(e),r,{sourceChain:s,addresses:[]})}exportX(e,t,r,s){s=s||this.getCurrentAddress(r);const n=lt(s)[2],a=this.provider.getAvaxID(),i=l.TransferableOutput.fromNative(a,e,[n]),o=Ze(t.getUTXOs(),!0),d=this.provider.getChainID(r),u=this.getAddresses("X").map((e=>lt(e)[2])),c=lt(this.getChangeAddress("X"))[2];return l.avm.newExportTx(this.provider.getContext(),d,u,o,[i],{threshold:1,changeAddresses:[c]})}importP({utxoSet:e,sourceChain:t,toAddress:r,threshold:s,feeState:n,locktime:a}){const i=this.provider.getChainID(t),o=this.getAddresses("P").map((e=>lt(e)[2]));lt(this.getChangeAddress("P"))[2],r=r||this.getCurrentAddress("P");const d=lt(r)[2],u=e.getUTXOs();return ct(n),l.pvm.newImportTx({fromAddressesBytes:o,utxos:u,toAddressesBytes:[d],sourceChainId:i,threshold:s,feeState:n,locktime:a},this.provider.getContext())}importX(e,t,r){const s=this.provider.getChainID(t),n=this.getAddresses("X").map((e=>lt(e)[2])),a=lt(this.getChangeAddress("X"))[2];r=r||this.getCurrentAddress("X");const i=lt(r)[2];return l.avm.newImportTx(this.provider.getContext(),s,e.getUTXOs(),[i],n,{changeAddresses:[a]})}importC(e,r,s,n,a){const i=this.provider.getChainID(r),o=this.getAddresses("C").map((e=>lt(e)[2]));a=a||this.getAddressEVM();const d=Buffer.from(t.strip0x(a),"hex");return l.evm.newImportTxFromBaseFee(this.provider.getContext(),d,o,e.getUTXOs(),i,s,n)}exportC(e,t,r,s,n){const a=pt(this.getAddressEVM()),i=this.provider.getChainID(t);n=n||this.getCurrentAddress(t);const o=lt(n)[2],d=s/BigInt(1e9);return l.evm.newExportTxFromBaseFee(this.provider.getContext(),d,e,i,a,[o],r)}exportP({amount:e,utxoSet:t,destination:r,feeState:s,toAddress:n}){n=n||this.getCurrentAddress(r);const a=lt(n)[2],i=this.provider.getAvaxID(),o=l.TransferableOutput.fromNative(i,e,[a]),d=Ze(t.getUTXOs(),!0),u=this.provider.getChainID(r),c=this.getAddresses("P").map((e=>lt(e)[2])),p=lt(this.getChangeAddress("P"))[2];return ct(s),l.pvm.newExportTx({changeAddressesBytes:[p],fromAddressesBytes:c,utxos:d,outputs:[o],destinationChainId:u,feeState:s},this.provider.getContext())}consolidateP({utxoSet:e,amount:t,feeState:r,toAddress:s,options:n}){const a=tt(e.getUTXOs());s=s??this.getCurrentAddress("P");const i=lt(s)[2],o=this.provider.getContext(),d=[l.TransferableOutput.fromNative(o.avaxAssetID,t,[i])],u=this.getAddresses("P").map((e=>lt(e)[2])),c=lt(this.getChangeAddress("P"))[2],p=n?.changeAddresses??[c];return ct(r),l.pvm.newBaseTx({changeAddressesBytes:p,fromAddressesBytes:u,utxos:a,outputs:d,minIssuanceTime:n?.minIssuanceTime,memo:n?.memo,feeState:r},o)}baseTX({utxoSet:e,chain:t,toAddress:r,amountsPerAsset:s,feeState:n,options:a,fromAddresses:i}){const[o,d,u]=lt(r);if(o!==t||d!==this.provider.getHrp())throw new Error(`Invalid recipient address "${r}"`);const c=Object.entries(s).map((([e,t])=>l.TransferableOutput.fromNative(e,t,[u]))),p=Ze(e.getUTXOs(),!0),h=(i??this.getAddresses(t)).map((e=>lt(e)[2])),g=lt(this.getChangeAddress("P"))[2],m=a?.changeAddresses??[g];return"X"===t?l.avm.newBaseTx(this.provider.getContext(),h,p,c,a):(ct(n),l.pvm.newBaseTx({changeAddressesBytes:m,fromAddressesBytes:h,utxos:p,outputs:c,minIssuanceTime:a?.minIssuanceTime,memo:a?.memo,feeState:n},this.provider.getContext()))}convertSubnetToL1({utxoSet:e,chainId:t,subnetId:r,subnetAuth:s,feeState:n,address:a,validators:i,options:o,fromAddresses:d}){const u=(d??this.getAddresses("P")).map((e=>lt(e)[2])),c=lt(this.getChangeAddress("P"))[2],p=o?.changeAddresses??[c],h=i.map((({nodeId:e,pubKey:t,signature:r,balance:s,weight:n,deactivationOwner:a,remainingBalanceOwner:i})=>{const o=new l.pvmSerial.ProofOfPossession(Uint8Array.from(l.utils.hexToBuffer(t)),Uint8Array.from(l.utils.hexToBuffer(r))),d=l.PChainOwner.fromNative(i.addresses.map((e=>lt(e)[2])),i.threshold??1),u=l.PChainOwner.fromNative(a.addresses.map((e=>lt(e)[2])),a.threshold??1);return l.L1Validator.fromNative(e,n,s,o,d,u)}));return l.pvm.newConvertSubnetToL1Tx({changeAddressesBytes:p,validators:h,fromAddressesBytes:u,address:lt(a)[2],chainId:t,subnetId:r,subnetAuth:s,feeState:n,utxos:Ze(e.getUTXOs(),!0)},this.provider.getContext())}registerL1Validator({utxoSet:e,balance:t,signature:r,message:s,feeState:n,fromAddresses:a,options:i}){const o=(a??this.getAddresses("P")).map((e=>lt(e)[2])),d=lt(this.getChangeAddress("P"))[2],u=i?.changeAddresses??[d];return l.pvm.newRegisterL1ValidatorTx({utxos:Ze(e.getUTXOs(),!0),balance:t,blsSignature:Uint8Array.from(l.utils.hexToBuffer(r)),changeAddressesBytes:u,feeState:n,fromAddressesBytes:o,memo:i?.memo,message:Uint8Array.from(l.utils.hexToBuffer(s)),minIssuanceTime:i?.minIssuanceTime},this.provider.getContext())}setL1ValidatorWeight({utxoSet:e,feeState:t,message:r,options:s,fromAddresses:n}){const a=(n??this.getAddresses("P")).map((e=>lt(e)[2])),i=lt(this.getChangeAddress("P"))[2],o=s?.changeAddresses??[i];return l.pvm.newSetL1ValidatorWeightTx({utxos:Ze(e.getUTXOs(),!0),changeAddressesBytes:o,feeState:t,fromAddressesBytes:a,memo:s?.memo,message:Uint8Array.from(l.utils.hexToBuffer(r)),minIssuanceTime:s?.minIssuanceTime},this.provider.getContext())}disableL1Validator({utxoSet:e,feeState:t,options:r,fromAddresses:s,disableAuth:n,validationId:a}){const i=(s??this.getAddresses("P")).map((e=>lt(e)[2])),o=lt(this.getChangeAddress("P"))[2],d=r?.changeAddresses??[o];return l.pvm.newDisableL1ValidatorTx({disableAuth:n,validationId:a,utxos:Ze(e.getUTXOs(),!0),changeAddressesBytes:d,feeState:t,fromAddressesBytes:i,memo:r?.memo,minIssuanceTime:r?.minIssuanceTime},this.provider.getContext())}increaseL1ValidatorBalance({utxoSet:e,feeState:t,options:r,fromAddresses:s,balance:n,validationId:a}){const i=(s??this.getAddresses("P")).map((e=>lt(e)[2])),o=lt(this.getChangeAddress("P"))[2],d=r?.changeAddresses??[o];return l.pvm.newIncreaseL1ValidatorBalanceTx({balance:n,validationId:a,utxos:Ze(e.getUTXOs(),!0),changeAddressesBytes:d,feeState:t,fromAddressesBytes:i,memo:r?.memo,minIssuanceTime:r?.minIssuanceTime},this.provider.getContext())}createBlockchain({utxoSet:e,subnetId:t,chainName:r,vmID:s,fxIds:n,genesisData:a,subnetAuth:i,feeState:o,options:d,fromAddresses:u}){const c=Ze(e.getUTXOs(),!0),p=(u??this.getAddresses("P")).map((e=>lt(e)[2])),h=lt(this.getChangeAddress("P"))[2],g=d?.changeAddresses??[h];return ct(o),l.pvm.newCreateChainTx({chainName:r,feeState:o,fromAddressesBytes:p,fxIds:n,genesisData:a,subnetAuth:i,subnetId:t,utxos:c,vmId:s,changeAddressesBytes:g},this.provider.getContext())}createSubnet({utxoSet:e,rewardAddresses:t,feeState:r,fromAddresses:s,options:n,threshold:a,locktime:i}){const o=Ze(e.getUTXOs(),!0),d=(s??this.getAddresses("P")).map((e=>lt(e)[2])),u=lt(this.getChangeAddress("P"))[2],c=n?.changeAddresses??[u],p=t.map((e=>lt(e)[2]));return ct(r),l.pvm.newCreateSubnetTx({fromAddressesBytes:d,changeAddressesBytes:c,utxos:o,minIssuanceTime:n?.minIssuanceTime,memo:n?.memo,feeState:r,threshold:a,locktime:i,subnetOwners:p},this.provider.getContext())}addSubnetValidator({utxoSet:e,nodeId:t,start:r,end:s,weight:n,subnetId:a,subnetAuth:i,feeState:o,fromAddresses:d,options:u}){const c=Ze(e.getUTXOs(),!0),p=(d??this.getAddresses("P")).map((e=>lt(e)[2])),h=lt(this.getChangeAddress("P"))[2],g=u?.changeAddresses??[h];return ct(o),l.pvm.newAddSubnetValidatorTx({changeAddressesBytes:g,fromAddressesBytes:p,utxos:c,minIssuanceTime:u?.minIssuanceTime,memo:u?.memo,nodeId:t,start:r,end:s,weight:n,subnetId:a,subnetAuth:i,feeState:o},this.provider.getContext())}addPermissionlessValidator({utxoSet:e,nodeId:t,start:r,end:s,weight:n,subnetId:a,shares:i,feeState:o,fromAddresses:d,rewardAddresses:u,delegatorRewardAddresses:c,publicKey:p,signature:h,options:g,threshold:m,locktime:f,stakingAssetId:x}){const v=Qe(e.getUTXOs()),y=(d??this.getAddresses("P")).map((e=>lt(e)[2])),w=(u??[this.getCurrentAddress("P")]).map((e=>lt(e)[2])),b=(c??[this.getCurrentAddress("P")]).map((e=>lt(e)[2]));if(!(a!==l.networkIDs.PrimaryNetworkID.toString()||p&&h))throw new Error("Must provide public key and signature for primary subnet.");const A=lt(this.getChangeAddress("P"))[2],T=g?.changeAddresses??[A];return ct(o),l.pvm.newAddPermissionlessValidatorTx({fromAddressesBytes:y,delegatorRewardsOwner:b,utxos:v,minIssuanceTime:g?.minIssuanceTime,memo:g?.memo,changeAddressesBytes:T,nodeId:t,start:r,end:s,weight:n,subnetId:a,shares:i,feeState:o,publicKey:p,rewardAddresses:w,signature:h,locktime:f,threshold:m,stakingAssetId:x},this.provider.getContext())}addPermissionlessDelegator({utxoSet:e,nodeId:t,start:r,end:s,weight:n,subnetId:a,fromAddresses:i,rewardAddresses:o,options:d,locktime:u,feeState:c,threshold:p,stakingAssetId:h}){const g=Qe(e.getUTXOs()),m=(i??this.getAddresses("P")).map((e=>lt(e)[2])),f=(o??[this.getCurrentAddress("P")]).map((e=>lt(e)[2])),x=lt(this.getChangeAddress("P"))[2],v=d?.changeAddresses??[x];return ct(c),l.pvm.newAddPermissionlessDelegatorTx({fromAddressesBytes:m,utxos:g,minIssuanceTime:d?.minIssuanceTime,memo:d?.memo,changeAddressesBytes:v,nodeId:t,start:r,end:s,weight:n,subnetId:a,rewardAddresses:f,locktime:u,stakingAssetId:h,threshold:p,feeState:c},this.provider.getContext())}removeSubnetValidator({utxoSet:e,nodeId:t,subnetId:r,subnetAuth:s,fromAddresses:n,feeState:a,options:i}){const o=Ze(e.getUTXOs(),!0),d=(n??this.getAddresses("P")).map((e=>lt(e)[2])),u=lt(this.getChangeAddress("P"))[2],c=i?.changeAddresses??[u];return ct(a),l.pvm.newRemoveSubnetValidatorTx({changeAddressesBytes:c,fromAddressesBytes:d,utxos:o,minIssuanceTime:i?.minIssuanceTime,memo:i?.memo,nodeId:t,subnetId:r,subnetAuth:s,feeState:a},this.provider.getContext())}transferSubnetOwnershipTx({utxoSet:e,subnetId:t,subnetAuth:r,subnetOwners:s,feeState:n,fromAddresses:a,options:i,threshold:o,locktime:d}){const u=Ze(e.getUTXOs(),!0),c=(a??this.getAddresses("P")).map((e=>lt(e)[2])),p=lt(this.getChangeAddress("P"))[2],h=i?.changeAddresses??[p],g=s.map((e=>lt(e)[2]));return ct(n),l.pvm.newTransferSubnetOwnershipTx({changeAddressesBytes:h,fromAddressesBytes:c,utxos:u,minIssuanceTime:i?.minIssuanceTime,memo:i?.memo,subnetId:t,subnetAuth:r,subnetOwners:g,feeState:n,threshold:o,locktime:d},this.provider.getContext())}}class gt extends ht{constructor(e,t,r){if(super(r),this.pubkeyXP=e,this.pubkeyC=t,33!==t.length||33!==e.length)throw new Error("Public key must be 33 byte compressed public key")}static fromPublicKey(e,r,s){const a=t.strip0x(n.SigningKey.computePublicKey(e,!0)),i=t.strip0x(n.SigningKey.computePublicKey(r,!0)),o=Buffer.from(a,"hex"),d=Buffer.from(i,"hex");return new gt(o,d,s)}static fromMnemonic(e,t,r,s){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");if(!dt(r)||!dt(t))throw new Error("Not valid derivation path. Make sure it is a valid BIP44 path starting with m/");const n=i.mnemonicToSeedSync(e),o=a.fromSeed(n),d=o.derivePath(r),u=o.derivePath(t);return gt.fromPublicKey(u.publicKey,d.publicKey,s)}getAddress(e){const t="C"===e?this.pubkeyC:this.pubkeyXP;return this.provider.getAddress(t,e)}getAddressEVM(){return n.computeAddress(`0x${this.pubkeyC.toString("hex")}`)}getAddresses(e){return[this.getAddress(e)]}getChangeAddress(e){return this.getAddress(e)}getCurrentAddress(e){return this.getAddress(e)}}const mt={type:"zondax",getApp:e=>new v(e),async getVersion(e){const t=this.getApp(e);return(await t.getAppInfo()).appVersion},async getAddress(e,t,r={show:!1,hrp:"avax"}){const s=this.getApp(e);return{publicKey:(await s.getAddressAndPubKey(t.toString(),r.show,r.hrp)).publicKey}},async getXPUB(e,t){const r=this.getApp(e),s=await r.getExtendedPubKey(t,!1);return{pubKey:s.publicKey,chainCode:s.chain_code}},async signHash(e,t,r,s){const n=this.getApp(e),a=s.map((e=>e.toString(!0))),i=await n.signHash(r.toString(),a,t),o=i.signatures||new Map;return{hash:i.hash||Buffer.from(""),signatures:o}},async signTx(e,t,r,s,n){const a=this.getApp(e),i=s.map((e=>e.toString(!0))),o=n?.map((e=>e.toString(!0)))||[],d=await a.sign(r.toString(),i,t,o),u=d.signatures||new Map;return{...d,signatures:u}}};async function ft(e){return!(await mt.getVersion(e)>="0.6.0")}const{parse:xt}=l.utils;class vt extends ht{constructor(e,t,r){super(r),this.avmXpub=e,this.accountNode=a.fromBase58(e),this.evmWallet=new gt(t,t,r)}accountNode;evmWallet;externalIndex=0;internalIndex=0;pubkeyCache={};static fromMnemonic(e,t){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");const r=i.mnemonicToSeedSync(e),s=a.fromSeed(r),n=s.derivePath("m/44'/9000'/0'").neutered(),o=s.derivePath(L(0,_.BIP44)).neutered();return new vt(n.toBase58(),o.publicKey,t)}setExternalIndex(e){if(e<0)throw new Error("Index must be >= 0");this.externalIndex=e}setInternalIndex(e){if(e<0)throw new Error("Index must be >= 0");this.internalIndex=e}getPubKeyAtIndex(e,t=!1){if(e<0)throw new Error("Index must be >= 0");const r=`${t?1:0}/${e}`,s=this.pubkeyCache[r];if(s)return s;const{publicKey:n}=this.accountNode.derivePath(r);return this.pubkeyCache[r]=n,n}getAddressAtIndex(e,t=!1,r){const s=this.getPubKeyAtIndex(e,t);return this.provider.getAddress(s,r)}getExternalAddresses(e){const t=[];for(let r=0;r<=this.externalIndex;r++)t.push(this.getAddressAtIndex(r,!1,e));return t}getInternalAddresses(e){const t=[];for(let r=0;r<=this.internalIndex;r++)t.push(this.getAddressAtIndex(r,!0,e));return t}getAddresses(e){return"C"===e?[this.getCurrentAddress("C")]:"P"===e?[...this.getExternalAddresses(e)]:[...this.getInternalAddresses(e),...this.getExternalAddresses(e)]}getChangeAddress(e){return"C"===e?this.evmWallet.getAddress("C"):"P"===e?this.getAddressAtIndex(this.externalIndex,!1,"P"):this.getAddressAtIndex(this.internalIndex,!0,e)}getCurrentAddress(e){return"C"===e?this.evmWallet.getAddress("C"):this.getAddressAtIndex(this.externalIndex,!1,e)}incrementIndex(e){e?this.externalIndex++:this.internalIndex++}getAddressEVM(){return this.evmWallet.getAddressEVM()}getActiveIndices(){return{external:this.externalIndex,internal:this.internalIndex}}getInternalRawAddresses(){return this.getInternalAddresses("X").map((e=>Buffer.from(xt(e)[2])))}getExternalRawAddresses(){return this.getExternalAddresses("X").map((e=>Buffer.from(xt(e)[2])))}getRawAddressC(){return Buffer.from(xt(this.getCurrentAddress("C"))[2])}}const{isTransferOut:yt,isStakeableLockOut:wt}=l.utils;function bt(e){const t=e.output;return yt(t)||wt(t)?t.getOwners():[]}function At(e){const t=e.getTx();return l.avmSerial.isExportTx(t)||l.pvmSerial.isExportTx(t)?new Set(t.outs.map(bt).flat()):l.evmSerial.isExportTx(t)?new Set(t.exportedOutputs.map(bt).flat()):new Set((t.baseTx?.outputs??[]).map(bt).flat())}const{parse:Tt}=l.utils;class It extends vt{constructor(e,t,r){super(e,t,r)}getAdditionalAddressesByIndices(e,t,r){return"C"===r?[]:e.map((e=>{const s=this.getAddressAtIndex(e,t,r),[,,n]=Tt(s);return Buffer.from(n).toString("hex")}))}static async fromTransport(e,r){if(await ft(e))throw new Error("Unsupported ledger app version. Must be >= 0.6.0");const s=O(e),i=await mt.getXPUB(e,It.getAccountPath("X")),o=a.fromPublicKey(i.pubKey,i.chainCode),d=Ht(0,"EVM",{pathSpec:_.BIP44}),u=await s.getAddress(d,!1),c=n.SigningKey.computePublicKey(Buffer.from(u.publicKey,"hex"),!0),l=Buffer.from(t.strip0x(c),"hex");return new It(o.toBase58(),l,r)}static getAccountPath(e){switch(e){case"P":case"X":return"m/44'/9000'/0'";case"C":return"m/44'/60'/0'"}}async signMessage(e){throw new Error("not implemented")}filterOwnedAddresses(e,t,r){const s=this.getInternalRawAddresses().map((e=>e.toString("hex"))),n=this.getExternalRawAddresses().map((e=>e.toString("hex"))),a=new Set([...s,...r??[]]),i=new Set([...n,...t??[]]),o=new Set;return e.forEach((e=>{const t=e.toString("hex");if(a.has(t)){const e=[...a].indexOf(t);o.add(`1/${e}`)}else if(i.has(t)){const e=[...i].indexOf(t);o.add(`0/${e}`)}})),o}async signTx(e){if(!e.transport)throw new Error("Ledger transport not provided");const{tx:t,externalIndices:r,internalIndices:s}=e,n=t.getVM(),a=Buffer.from(t.toBytes()),i="EVM"===n?"C":"X",o=t.getAddresses().map((e=>Buffer.from(e))),d=this.getAdditionalAddressesByIndices(r??[],!1,i),u=this.getAdditionalAddressesByIndices(s??[],!0,i),c=[...this.filterOwnedAddresses(o,d,u).values()].map((e=>x.fromString(e))),l=[...At(t)].map((e=>Buffer.from(e))),p=[...this.filterOwnedAddresses(l).values()].map((e=>x.fromString(e)));return(await this.signTxBuffer({buffer:a,chain:i,transport:e.transport,signers:c,change:p})).forEach((e=>{t.addSignature(e)})),t}async signTxBuffer(e){if(!e.transport)throw new Error("Ledger transport not provided");if(!e.signers)throw new Error("Signers not provided");const t=e.change||[],r=x.fromString(It.getAccountPath(e.chain));return[...(await mt.signTx(e.transport,e.buffer,r,e.signers,t)).signatures.values()]}}const{strip0x:St}=l.utils;class Pt extends vt{constructor(e,t,r){const s=a.fromBase58(e).neutered(),i=new n.SigningKey(t),o=Buffer.from(St(i.compressedPublicKey),"hex");super(s.toBase58(),o,r),this.evmPrivKey=t,this.accountNode=a.fromBase58(e)}accountNode;static fromMnemonic(e,t){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");const r=i.mnemonicToSeedSync(e),s=a.fromSeed(r),n=s.derivePath("m/44'/9000'/0'"),o=s.derivePath(Ht(0,"EVM",{pathSpec:_.BIP44}));if(!o.privateKey)throw new Error("Unable to derive EVM private key.");return new Pt(n.toBase58(),o.privateKey,t)}async signTx(e){const t=this.getSigningKeys(e);return await l.addTxSignatures({unsignedTx:e.tx,privateKeys:t}),e.tx}getExternalPrivateKeys(e){const t=[];for(let e=0;e<=this.externalIndex;e++){const r=this.accountNode.derivePath(`0/${e}`);if(!r.privateKey)throw new Error("Unable to get private key.");t.push(r.privateKey)}const r=(e??[]).reduce(((e,t)=>{if(t>this.externalIndex){const r=this.accountNode.derivePath(`0/${t}`);if(!r.privateKey)throw new Error("Unable to get private key.");e.push(r.privateKey)}return e}),[]);return[...t,...r]}getInternalPrivateKeys(e){const t=[];for(let e=0;e<=this.internalIndex;e++){const r=this.accountNode.derivePath(`1/${e}`);if(!r.privateKey)throw new Error("Unable to get private key.");t.push(r.privateKey)}const r=(e??[]).reduce(((e,t)=>{if(t>this.internalIndex){const r=this.accountNode.derivePath(`1/${t}`);if(!r.privateKey)throw new Error("Unable to get private key.");e.push(r.privateKey)}return e}),[]);return[...t,...r]}getSigningKeys(e){const{tx:t,externalIndices:r,internalIndices:s}=e,n=t.getVM();return"AVM"===n?[...this.getInternalPrivateKeys(s),...this.getExternalPrivateKeys(r)]:"PVM"===n?this.getExternalPrivateKeys(r):[this.evmPrivKey]}async signTxBuffer(e){throw new Error("not implemented")}async signMessage(e){throw new Error("not implemented")}}const{getPublicKey:Bt,sign:Ct,signHash:kt}=l.secp256k1,{addChecksum:Et}=l.utils;class Mt extends gt{privKeyXP;privKeyC;constructor(e,t,r){super(Buffer.from(Bt(e)),Buffer.from(Bt(t)),r),this.privKeyXP=e,this.privKeyC=t}static fromMnemonic(e,t,r,s){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");if(!dt(r)||!dt(t))throw new Error("Not valid derivation path. Make sure it is a valid BIP44 path starting with m/");const n=i.mnemonicToSeedSync(e),o=a.fromSeed(n),d=o.derivePath(t),u=o.derivePath(r);if(!d.privateKey||!u.privateKey)throw new Error("Failed to generate private keys.");return new Mt(d.privateKey,u.privateKey,s)}async signMessage(e){const t=Me(e.message),r=this.getSigningKey(e.chain);return Buffer.from(Et(await kt(t,r)))}getSigningKey(e){return"C"===e?this.privKeyC:this.privKeyXP}async signTx(e){return await l.addTxSignatures({unsignedTx:e.tx,privateKeys:[this.privKeyC,this.privKeyXP]}),e.tx}async signTxBuffer(e){const t=this.getSigningKey(e.chain);return[Buffer.from(await Ct(e.buffer,t))]}}const{strip0x:Vt}=l.utils;class Dt extends gt{constructor(e,t,r,s,a){const i=l.utils.strip0x(n.SigningKey.computePublicKey(e,!0)),o=l.utils.strip0x(n.SigningKey.computePublicKey(r,!0));if(super(Buffer.from(i,"hex"),Buffer.from(o,"hex"),a),this.pathXP=t,this.pathC=s,!dt(t)||!dt(s))throw new Error("Invalid path configuration.")}static async fromTransport(e,t,r,a){if(await ft(e))throw new Error("Ledger app not supported. Must be version >= 0.6.0");if(!dt(t)||!dt(r))throw new Error("Invalid path configuration.");const i=new s(e),o=await i.getAddress(r,!1),d=await i.getAddress(t,!1),u=Buffer.from(Vt(o.publicKey),"hex"),c=Buffer.from(Vt(d.publicKey),"hex"),l=Buffer.from(Vt(n.SigningKey.computePublicKey(u,!0)),"hex"),p=Buffer.from(Vt(n.SigningKey.computePublicKey(c,!0)),"hex");return new Dt(p,t,l,r,a)}async signMessage(e){if(!e.transport||!e.message)throw new Error("Unable to sign message. Incomplete or invalid request.");const t=x.fromString(this.getAccountPath(e.chain)),r=x.fromString(this.getPartialSignerPath(e.chain)),s=Me(e.message),n=(await mt.signHash(e.transport,s,t,[r])).signatures.get(r.toString(!0));if(!n)throw new Error("Failed to sign message.");return n}getFullSignerPath(e){return"C"===e?this.pathC:this.pathXP}getPartialSignerPath(e){return this.getFullSignerPath(e).split("/").slice(4).join("/")}getAccountPath(e){return this.getFullSignerPath(e).split("/").slice(0,4).join("/")}async signTx(e){if(!e.transport)throw new Error("Ledger transport not provided");const t=e.tx,r=t.getVM(),s=Buffer.from(t.toBytes()),n="EVM"===r?"C":"X";return(await this.signTxBuffer({buffer:s,chain:n,transport:e.transport})).forEach((e=>{t.addSignature(e)})),t}async signTxBuffer(e){if(!e.transport)throw new Error("Ledger transport not provided");const t=x.fromString(this.getAccountPath(e.chain)),r=x.fromString(this.getPartialSignerPath(e.chain));return[...(await mt.signTx(e.transport,e.buffer,t,[r],[r])).signatures.values()]}}const{parse:Kt}=l.utils;const Ot={C:60,X:9e3,P:9e3};var Ut=Object.freeze({__proto__:null,AbstractProvider:me,AddressWallet:class extends ht{constructor(e,t,r,s,a){if(super(a),this.addressC=e,this.addressCoreEth=t,this.xpAddresses=r,this.xpChangeAddress=s,r.length<1)throw new Error("Must have at least 1 xp address.");if(!n.isAddress(e))throw new Error("Not a valid C-Chain (EVM) address");if(r.some((e=>!He(e,!1))))throw new Error("Given addresses must be valid avalanche bech32 addresses without the chain alias prefix");if(!He(t,!1))throw new Error("Given CoreEth address must be valid avalanche bech32 addresses without the chain alias prefix");this.setChangeAddress(s)}setChangeAddress(e){if(!He(e,!1))throw new Error("Given address must be valid avalanche bech32 addresses without the chain alias prefix");this.xpChangeAddress=e}getAddressEVM(){return this.addressC}getAddresses(e){return("C"===e?[this.addressCoreEth]:this.xpAddresses).map((t=>this.provider.formatAddress(t,e)))}getChangeAddress(e){const t="C"===e?this.addressCoreEth:this.xpChangeAddress;return this.provider.formatAddress(t,e)}getCurrentAddress(e){const t="C"===e?this.addressCoreEth:this.xpAddresses[0];return this.provider.formatAddress(t,e)}},DevnetContext:ye,FujiContext:ve,JsonRpcProvider:we,LedgerLiveSigner:class{constructor(e){this.accountIndices=e}#r(e){return`m/44'/${Ot[e]}'`}#s(e,t){return`${this.#r(e)}/${t}'`}async signMessage(e){if(!e.transport||!e.message)throw new Error("Unable to sign message. Incomplete or invalid request.");if(!this.accountIndices.length)throw new Error("No account indices provided. At least one account index is required to sign a message.");const t=x.fromString(this.#s(e.chain,this.accountIndices[0])),r=x.fromString("0/0"),s=Me(e.message),n=(await mt.signHash(e.transport,s,t,[r])).signatures.get(r.toString(!0));if(!n)throw new Error("Failed to sign message.");return n}async signTx(e){if(!e.transport)throw new Error("Ledger transport not provided");const t=e.tx,r=t.getVM(),s=Buffer.from(t.toBytes()),n="EVM"===r?"C":"AVM"===r?"X":"P",a=new Set(e.externalIndices??this.accountIndices);for(const r of a){const a=x.fromString(this.#s(n,r));(await this.#n(a,{buffer:s,chain:n,transport:e.transport})).forEach((e=>{t.addSignature(e)}))}return t}async#n(e,t){if(!t.transport)throw new Error("Ledger transport not provided");return[...(await mt.signTx(t.transport,t.buffer,e,t.signers??[x.fromString("0/0")],t.change??[x.fromString("0/0")])).signatures.values()]}async signTxBuffer(e){if(!this.accountIndices.length)throw new Error("No account indices provided. At least one account index is required to sign a tx buffer.");const t=x.fromString(this.#s(e.chain,this.accountIndices[0]));return this.#n(t,e)}},LedgerSigner:Dt,LedgerWallet:It,MainnetContext:xe,MnemonicWallet:Pt,MnemonicWalletVoid:vt,P_CHAIN_TX_SIZE_LIMIT:65536,SimpleLedgerSigner:class{constructor(e,t,r){this.activeAccountIndex=e,this.provider=t,r&&(this.accountNode=a.fromBase58(r))}accountNode;reSerializeTx(e,t){return e instanceof l.EVMUnsignedTx||"C"===t?l.EVMUnsignedTx.fromJSON(JSON.stringify(e.toJSON())):l.UnsignedTx.fromJSON(JSON.stringify(e.toJSON()))}getChainAlias(e){return"EVM"===e.getVM()?"C":"X"}getAccountPath(e){switch(e){case"X":case"P":return`m/44'/9000'/${this.activeAccountIndex}'`;case"C":return"m/44'/60'/0'"}}getAddressOfPath(e,t){if(!this.accountNode)return null;const{publicKey:r}=this.accountNode.derivePath(e),s=this.provider.getAddress(r,t);return Buffer.from(Kt(s)[2]).toString("hex")}getAddressPathMap(e){const{tx:t,externalIndices:r,internalIndices:s}=e,n=this.getChainAlias(t),a="EVM"===e.tx.getVM()?`0/${this.activeAccountIndex}`:"0/0",i=new Map;if("C"===n||!this.accountNode)return i;const o=(r??[]).map((e=>`0/${e}`)),d=(s??[]).map((e=>`1/${e}`)),u=[a,...o,...d];for(const e of u){const t=this.getAddressOfPath(e,n);t&&i.set(t,e)}return i}getAddressBipPaths(e,t,r){return 0===t.size?[x.fromString("C"===r?`0/${this.activeAccountIndex}`:"0/0")]:e.reduce(((e,r)=>{const s=t.get(Buffer.from(r).toString("hex"));return s&&e.push(x.fromString(s)),e}),[])}async signTx(e){if(!e.transport)throw new Error("Ledger transport not provided");const t=this.getChainAlias(e.tx),r=this.reSerializeTx(e.tx,t),s=Buffer.from(r.toBytes()),n=this.getAddressPathMap(e),a=this.getAddressBipPaths(r.getAddresses(),n,t),i=this.getAddressBipPaths([...At(r)],n,t);return(await this.signTxBuffer({buffer:s,chain:t,transport:e.transport,signers:a,change:i})).forEach((e=>{r.addSignature(e)})),r}async signTxBuffer(e){if(!e.transport)throw new Error("Ledger transport not provided");if(!e.signers)throw new Error("Signers not provided");const t=e.change||[],r=x.fromString(this.getAccountPath(e.chain));return[...(await mt.signTx(e.transport,e.buffer,r,e.signers,t)).signatures.values()]}async signMessage(e){if(!e.transport||!e.message)throw new Error("Unable to sign message. Incomplete or invalid request.");const t="C"===e.chain?this.activeAccountIndex:0,r=e.signer||x.fromString(`0/${t}`);if(2!=r.toPathArray().length)throw new Error("Given signer path must have a depth of 2. Ex. 0/0, 0/1");const s=Me(e.message),n=(await mt.signHash(e.transport,s,x.fromString(this.getAccountPath(e.chain)),[r])).signatures.get(r.toString(!0));if(!n)throw new Error("Failed to sign message.");return n}},SimpleSigner:class{accountNodeXP;signerNodeEVM;activeAccountIndex;constructor(e,t){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");if(t<0||t%1!=0)throw new Error("Invalid account index.");const r=i.mnemonicToSeedSync(e),s=a.fromSeed(r);this.accountNodeXP=s.derivePath(`m/44'/9000'/${t}'`);const n=s.derivePath(Ht(t,"EVM",{pathSpec:_.BIP44}));this.signerNodeEVM=n,this.activeAccountIndex=t}getAdditionalKeys(e,t){return[...new Set(e??[])].reduce(((e,r)=>{const s=this.accountNodeXP.derivePath(`${t?1:0}/${r}`);if(!s.privateKey)throw new Error("Unable to get private key.");return e.push(s.privateKey),e}),[])}getSigningKeys(e,t,r){if("EVM"===e){if(!this.signerNodeEVM.privateKey)throw new Error("Unable to derive EVM private key.");return[this.signerNodeEVM.privateKey]}const s=this.accountNodeXP.derivePath("0/0");if(!s.privateKey)throw new Error("Unable to derive X/P private key.");const n=this.getAdditionalKeys(t,!1);if("AVM"===e){const e=this.getAdditionalKeys(r,!0);return[s.privateKey,...n,...e]}if("PVM"===e)return[s.privateKey,...n]}async signTx(e){const{tx:t,externalIndices:r,internalIndices:s}=e,n=t.getVM(),a=this.getSigningKeys(n,r,s);if(!a?.length)throw new Error("Unable to sign transaction: signing keys are missing.");return await l.addTxSignatures({unsignedTx:t,privateKeys:a}),e.tx}async signTxBuffer(e){throw new Error("Not implemented")}getActiveAccountNode(e){switch(e){case"X":case"P":return this.accountNodeXP.derivePath("0/0");case"C":return this.signerNodeEVM}}async signMessage(e){const t=this.getActiveAccountNode(e.chain);if(!t.privateKey)throw Error("Unable to sign message, key not found.");const r=Me(e.message),s=await l.secp256k1.signHash(r,t.privateKey);return Buffer.from(s)}},SizeSupportedTx:st,StaticSigner:Mt,TxType:G,WalletAbstract:ht,WalletVoid:gt,addSignaturesToAvalancheTx:async({transactionHex:e,signatures:t,chainAlias:r,provider:s,utxos:n})=>{if(!t.length)throw new Error("signatures were not provided");const a=await le({transactionHex:e,chainAlias:r,provider:s,utxos:n});await Promise.all(t.map((e=>a.addSignature(e))));const i=a.getCredentials(),o=a.getSigIndices().reduce(((e,t,r)=>{const s=t.map((e=>{const t=i[r]?.toJSON()[e];if(!t)throw new Error(`Failed to sign [${r}, ${e}]`);return t}));return e.push(new l.Credential(s)),e}),[]),d=new l.UnsignedTx(a.getTx(),a.getInputUtxos(),a.addressMaps,o);return{signedTxHex:oe(new l.avaxSerial.SignedTx(a.getTx(),o)),hasAllSignatures:d.hasAllSignatures()}},convertGlacierUtxo:Se,createAvalancheEvmUnsignedTx:async({txBytes:e,fromAddress:t,vm:r,credentials:s,utxos:n})=>{const a=Pe(r,e),i=Be(t)[2],o=Ce(i);if(l.evmSerial.isExportTx(a))return new l.EVMUnsignedTx(a,[],new ke([Ee.fromJSON([[o,0]])]),s);if(l.evmSerial.isImportTx(a)){const e=ke.fromTransferableInputs(a.importedInputs,n,BigInt(Math.floor((new Date).getTime()/1e3)),[i]);return new l.UnsignedTx(a,n,e,s)}throw new Error("Unsupported transaction type")},createAvalancheUnsignedTx:ee,digestMessage:Me,emptySignature:ae,getAddressFromXpub:function(e,t,r,s,n=!1){if(t<0)throw new Error("Account index must be >= 0");const i=n?"1":"0",o=a.fromBase58(e).derivePath(`${i}/${t}`).publicKey;return r.getAddress(o,s)},getAddressPublicKeyFromXpub:function(e,t){if(t<0)throw new Error("Account index must be >= 0");return a.fromBase58(e).derivePath(`0/${t}`).publicKey},getAssetBalance:function(e,t){const r=e.getAssetDict()[t],s={locked:BigInt(0),available:BigInt(0),multisig:BigInt(0),lockedStakeable:BigInt(0),total:BigInt(0)};if(!r)return s;const n=r.getUTXOs(),a=Ue();return n.forEach((e=>{const t=Ne(e);s[t.threshold>1?"multisig":t.locktime>a?"locked":t.stakeableLocktime>a?"lockedStakeable":"available"]+=t.amount})),s.total=s.locked+s.lockedStakeable+s.multisig+s.available,s},getAvalancheDerivationPath:ut,getLedgerProvider:async function(e){return mt},getMaximumUtxoSet:function({wallet:e,utxos:t,sizeSupportedTx:r,limit:s=65536,feeState:n}){const{sortFunction:a,unsignedTxBuilder:i}=ot[r],o=Ue(),d=a(t.filter((e=>{const{locktime:t,stakeableLocktime:s}=rt(e);return t<o&&(s<o||("AddPermissionlessDelegator"===r||"AddPermissionlessValidator"===r))}))),u=function(e,t,r){let s=0,n=e.length-1;if(t(e)<=r)return n;let a=-1;for(;s<=n;){const i=Math.floor((s+n)/2);t(e.slice(0,i+1))<=r?(a=i,s=i+1):n=i-1}return a}(d,(t=>{try{return function(e){const t=e.getInputUtxos().reduce(((e,t)=>e+(8+65*rt(t).threshold)),0);return 6+e.toBytes().length+t}(i(e,t,n))}catch(e){return console.log("Unable to estimate size of utxos",{e:e,utxos:t.map(rt)}),s+1}}),s);return-1===u?[]:d.slice(0,u+1)},getPaginatedUTXOs:Oe,getPchainUnixNow:async function(e){const t=await e.getApiP().getTimestamp(),r=new Date(t.timestamp),s=Math.floor(r.getTime()/1e3);return BigInt(s)},getStakeForAddresses:_e,getStakedAssetBalance:function(e){const{stakedOutputs:t}=e,r={unlockedStaked:BigInt(0),lockedStaked:BigInt(0),total:BigInt(0)};return t.forEach((e=>{r[l.utils.isStakeableLockOut(e)?"lockedStaked":"unlockedStaked"]+=e.amount()})),r.total=r.lockedStaked+r.unlockedStaked,r},getUTXOsForAddresses:Ke,getUnixNow:Ue,getUtxosByTxFromGlacier:async({transactionHex:e,chainAlias:t,network:r,url:s,token:n,headers:a})=>{const i=Y(t),o=Xe(e),d=Fe(i,o);if(l.evmSerial.isExportTx(d))return[];const u=(e=>{if(l.evmSerial.isImportTx(e)||l.avmSerial.isImportTx(e)||l.pvmSerial.isImportTx(e))return e.sourceChain.toString();const t=e.getVM();switch(t){case l.EVM:return h.BlockchainId.C_CHAIN;case l.AVM:return h.BlockchainId.X_CHAIN;case l.PVM:return h.BlockchainId.P_CHAIN;default:throw new Error(`Unable to get chain for VM type "${t}"`)}})(d),c=Le(d),p=new h.Glacier({BASE:s,TOKEN:n,HEADERS:a}),g=[...new Set(c.map((e=>e.utxoID.txID.toString())))],m=await Promise.all(g.map((e=>p.primaryNetworkTransactions.getTxByHash({blockchainId:u,network:r,txHash:e}))));return c.reduce(((e,t)=>{const s=m.find((e=>e.txHash===t.utxoID.txID.toString()));if(!s)throw new Error(`Unable to find parent tx "${t.utxoID.txID.toString()}"`);const n=s.emittedUtxos.find((e=>e.utxoId===t.utxoID.ID()));if(!n)throw new Error(`Unable to find UTXO "${t.utxoID.ID()}" at index "${t.utxoID.outputIdx.value()}"`);const a=Se(n,r);return e.push(a),e}),[])},getVmByChainAlias:Y,getXpubFromMnemonic:function(e,t){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");const r=i.mnemonicToSeedSync(e);return a.fromSeed(r).derivePath(`44'/9000'/${t}'`).neutered().toBase58()},isAddDelegatorTx:function(e){return"add_delegator"===e.type},isAddPermissionlessDelegatorTx:function(e){return"add_permissionless_delegator"===e.type},isAddPermissionlessValidatorTx:function(e){return"add_permissionless_validator"===e.type},isAddSubnetValidatorTx:function(e){return"add_subnet_validator"===e.type},isAddValidatorTx:function(e){return"add_validator"===e.type},isBaseTx:function(e){return"base"===e.type},isBech32Address:He,isConvertSubnetToL1Tx:function(e){return"convert_subnet_to_l1"===e.type},isCreateChainTx:function(e){return"create_chain"===e.type},isCreateSubnetTx:function(e){return"create_subnet"===e.type},isDisableL1ValidatorTx:function(e){return"disable_l1_validator"===e.type},isExportTx:function(e){return"export"===e.type},isImportTx:function(e){return"import"===e.type},isIncreaseL1ValidatorBalance:function(e){return"increase_l1_validator_balance"===e.type},isObsidianApp:ft,isRegisterL1ValidatorTx:function(e){return"register_l1_validator"===e.type},isRemoveSubnetValidatorTx:function(e){return"remove_subnet_validator"===e.type},isSetL1ValidatorWeightTx:function(e){return"set_l1_validator_weight"===e.type},isTransferSubnetOwnershipTx:function(e){return"transfer_subnet_ownership"===e.type},isTransformSubnetTx:function(e){return"transform_subnet"===e.type},parseAvalancheTx:async function(e,t,r,{feeTolerance:s=50,baseFee:n}={}){try{const a=t.getContext(),i=e.getTx(),o=(e=>{for(const t of Object.values(We)){const r=t(e);if(null!==r)return r}throw new Error("no parser found for tx")})(i),d=je(i,a),u=Je(i),c=ze(i).get(a.avaxAssetID)??BigInt(0),p=d.get(a.avaxAssetID)??BigInt(0),h=u.get(a.avaxAssetID)??BigInt(0);let g=n;void 0===g&&(g=0n,l.evmSerial.isImportExportTx(i)?(g=await t.getApiC().getBaseFee()/BigInt(1e9),0n===g&&(g=1n)):"PVM"===i.vm&&(g=await t.getApiP().getFeeState().then((e=>e.price)).catch((()=>BigInt(0)))));const{isValid:m,txFee:f}=Ge({unsignedTx:e,context:a,burnedAmount:p,baseFee:g,feeTolerance:s});return await o({feeData:{totalAvaxBurned:p,totalAvaxOutput:h,totalAvaxInput:c,isValidAvaxBurnedAmount:m,txFee:f,baseFee:g},assetId:a.avaxAssetID,provider:t,currentAddress:r})}catch(e){return{type:G.Unknown}}},populateCredential:ie,signedTxToHex:oe,sortUTXOsByAmount:Ze,sortUTXOsByAmountAscending:tt,sortUTXOsByAmountDescending:et,sortUTXOsStaking:Qe,verifyDerivationPath:dt});const Nt=(e,t)=>{const r=w.getTransactionDecoder().decode(w.getBase64Encoder().encode(e)),s=w.getCompiledTransactionMessageDecoder().decode(r.messageBytes);return w.decompileTransactionMessageFetchingLookupTables(s,t)},_t=Symbol(),Lt=async({mint:e,owner:t,provider:r})=>{const[s]=await A.findAssociatedTokenPda({mint:w.address(e),owner:w.address(t),tokenProgram:A.TOKEN_PROGRAM_ADDRESS}),n=await r.getAccountInfo(s,{encoding:"base64"}).send();return{address:s,exists:Boolean(n.value),info:n}},Xt=(e,t=!0)=>`${t?"m/":""}44'/501'/${e}'/0'`;class Ft{#a;#i;constructor(e){this.#a=Uint8Array.from(e),this.#i=w.address(S.base58.encode(I.ed25519.getPublicKey(this.#a)))}static fromMnemonic(e,t){const r=i.mnemonicToSeedSync(e),s=P.fromMasterSeed(Uint8Array.from(r)).derive(`m/44'/501'/${t}'/0'`);return new Ft(Buffer.from(s.privateKey))}#o(e){try{return w.getCompiledTransactionMessageDecoder().decode(e),!0}catch{return!1}}async signMessage(e){const t=S.base64.decode(e);if(this.#o(t))throw new Error("Cannot use signMessage() to sign transactions!");return S.base64.encode(I.ed25519.sign(t,this.#a))}async signTx(e,t){const r=await Nt(e,t),{signatures:s,messageBytes:n,...a}=w.compileTransaction(r);if(!this.#d(s))return e;const i=S.base58.encode(I.ed25519.sign(Uint8Array.from(n),this.#a));return w.assertIsSignature(i),w.getBase64EncodedWireTransaction({...a,messageBytes:n,signatures:{...s,[this.#i]:S.base58.decode(i)}})}#d(e){return this.#i in e&&!e[this.#i]}}function Ht(e,t,r={withRoot:!0}){if(e<0)throw new Error("Account index can not be less than 0.");switch(t){case"EVM":if(!r.pathSpec)throw new Error("Path spec is required for EVM: either BIP44 or Ledger Live");return L(e,r.pathSpec,r.withRoot);case"AVM":case"PVM":return ut(e,r.withRoot);case"SVM":return Xt(e,r.withRoot);default:throw new Error(`Unknown derivation path for VM: ${t}`)}}class $t extends z{keypair;constructor(t,r){const s=e.ECPair.fromPrivateKey(t);super(s.publicKey,r),this.keypair=s}static async fromMnemonic(e,t,r,s=_.BIP44){if(t<0)throw new Error("Account index must be >= 0");if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");const n=await i.mnemonicToSeed(e),o=a.fromSeed(n),d=Ht(t,"EVM",{pathSpec:s}),u=o.derivePath(d);if(!u.privateKey)throw new Error("Unable to derive private key from the given mnemonic.");return new $t(u.privateKey,r)}signTx(e,t){const r=E(e,t,this.provider.getNetwork());return Promise.resolve(this.signPsbt(r))}static fromEthersWallet(e,t){const r=e.privateKey;if(!r)throw new Error("Unable to get private key from ethers wallet.");const s=Buffer.from(r.substring(2),"hex");return new $t(s,t)}signPsbt(e){return e.signAllInputs(this.keypair),e.validateSignaturesOfAllInputs(),e.finalizeAllInputs(),e.extractTransaction()}}const qt=e.networks;exports.Avalanche=Ut,exports.BitcoinLedgerWallet=class extends z{constructor(e,t,r,s,n){super(e,r),this.derivationPath=t,this.transport=s,this.walletPolicyDetails=n}setTransport(e){this.transport=e}async signTx(e,t){const r=function(e){return new u.AppClient(e)}(this.transport),s=this.ecPair.publicKey,n=this.provider.getNetwork(),a=await r.getMasterFingerprint(),i=j(e,t,n,Buffer.from(a,"hex"),s,this.derivationPath),{policy:o,hmac:d}=this.walletPolicyDetails,c=await r.signPsbt(i,o,d),l=J(i,n,s,this.derivationPath);if(c.forEach((e=>{const[t,r]=e;l.updateInput(t,{partialSig:[{signature:r.signature,pubkey:r.pubkey}]})})),!l.validateSignaturesOfAllInputs())throw new Error("Failed to validate signatures");return l.finalizeAllInputs(),l.extractTransaction()}},exports.BitcoinProvider=class extends k{constructor(e=!0,r,s,n,a){super(),this.isMainnet=e,this.extraParams=a;const i=r?{headers:{"api-key":r}}:{},o=e?"https://btcbook.nownodes.io":"https://btcbook-testnet.nownodes.io";this.#u=new t.HttpClient(s||o,i);const d=e?"https://btc.nownodes.io":"https://btc-testnet.nownodes.io";this.#c=new t.HttpClient(n||d,i)}#u;#c;async#l(e,t){return this.isMainnet||t?(await Promise.all(e.map((e=>this.#c.post("",e,{},this.extraParams))))).flat():this.#c.post("",e,{},this.extraParams)}async getTxHex(e){return(await this.#u.post(`/api/v2/tx/${e}`,{},{},this.extraParams)).hex}async getUTXOs(e,t=!0,r){const s=await this.#u.post(`/api/v2/utxo/${e}`,{},{},this.extraParams);if(!s?.length)return{confirmed:[],unconfirmed:[]};const n=s.map(this._parseUtxo),a=e=>({confirmed:e.filter((e=>e.confirmations>0)),unconfirmed:e.filter((e=>0===e.confirmations))});if(!t)return a(n);return a(await this.getScriptsForUtxos(n,r))}async getAddressFromScript(e){const t=await this.#c.post("",{jsonrpc:"2.0",id:`decode-script-${e}`,method:"decodescript",params:[e]},{},this.extraParams);if(t.result)return t.result.address;throw new Error(`Unable to resolve address for script: ${e}. ${t.error.message}`)}async getScriptsForUtxos(e,t){const[r,s]=e.reduce((([e,t],r)=>r.script?[[...e,r],t]:[e,[...t,r]]),[[],[]]),n=s.map(((e,t)=>({jsonrpc:"2.0",method:"gettxout",params:[e.txHash,e.index],id:`${t}`}))),a=n.length?(await this.#l(n,t)).sort(((e,t)=>Number(e.id)-Number(t.id))):[];return[...r,...s.map(((e,t)=>({...e,script:a[t]?.result?.scriptPubKey.hex})))]}_parseUtxo(e){return{...e,txHash:e.txid,index:e.vout,value:Number(e.value),blockHeight:e.height,script:e.script,confirmations:e.confirmations}}async getBalances(e){const t=await this.#u.post(`/api/v2/address/${e}`,{},{},this.extraParams);return{available:BigInt(t.balance),pending:BigInt(t.unconfirmedBalance),final:BigInt(t.balance)+BigInt(t.unconfirmedBalance)}}async getChainHeight(){return(await this.#c.post("",{jsonrpc:"2.0",id:"nownodes",method:"getblockcount",params:[]},{},this.extraParams)).result}async getFeeRates(e){const t={jsonrpc:"2.0",method:"estimatesmartfee"},r=await this.#l([{...t,id:"1",params:[1]},{...t,id:"2",params:[3]},{...t,id:"3",params:[6]}],e).then((e=>e.sort(((e,t)=>Number(e.id)-Number(t.id))).map((e=>1e8*(e.result?.feerate??0)))));return{high:Math.ceil(r[0]/1024)||1,medium:Math.ceil(r[1]/1024)||1,low:Math.ceil(r[2]/1024)||1}}getNetwork(){return this.isMainnet?e.networks.bitcoin:e.networks.testnet}async issueRawTx(e){return await this.#c.post("",{jsonrpc:"2.0",id:"nownodes",method:"sendrawtransaction",params:[e]},{},this.extraParams).then((e=>e.result))}async getTransaction(e){const t=await this.#u.post(`/api/v2/tx/${e}`,{},{},this.extraParams);return{block:t.blockHeight,fees:Number(t.fees),confirmations:t.confirmations,amount:Number(t.value),hash:t.txid,addresses:Array.from(new Set([...t.vin.map((e=>e.addresses||[])).flat(),...t.vout.map((e=>e.addresses||[])).flat()])),blockTime:t.blockTime,inputs:[...t.vin.map((e=>({...e,value:Number(e.value)})))],outputs:[...t.vout.map((e=>({...e,value:Number(e.value)})))]}}async getTxHistory(e){const t=await this.#u.post(`/api/v2/address/${e}`,{},{},this.extraParams),r=t.txids?.slice(0,25)??[];return await Promise.allSettled(r.map((async t=>{try{const r=await this.#u.post(`/api/v2/tx/${t}`,{},{},this.extraParams);return function(e,t){const r=t.vin.filter((t=>t.addresses?.includes(e))),s=t.vout.filter((t=>t.addresses?.includes(e))),n=t.vin.filter((t=>!t.addresses?.includes(e))),a=t.vout.filter((t=>!t.addresses?.includes(e))),i=r.reduce(((e,t)=>e+BigInt(t.value)),0n),o=s.reduce(((e,t)=>e+BigInt(t.value)),0n),d=i>o;let u=o-i;d&&(u+=BigInt(t.fees));const c=n.map((e=>e.addresses||[])).flat(),l=a.map((e=>e.addresses||[])).flat(),p=d?l:c,h=p.filter(((e,t)=>p.indexOf(e)===t)),g=s.filter((e=>(e.addresses?.length||0)>1)).length>0;return{addresses:h,isSender:d,block:t.blockHeight,fee:Number(t.fees),confirmations:t.confirmations,amount:Number(u),hash:t.txid,containsMultisig:g,receivedTime:t.blockTime,confirmedTime:t.confirmations>0?t.blockTime:void 0}}(e,r)}catch(e){console.log(`Unable to parse full tx ${t}.`)}}))).then((e=>e.map((e=>"fulfilled"===e.status&&e.value?e.value:void 0)).filter((e=>void 0!==e))))}async waitForTx(e,{maxAttempts:t=20,attempt:r=1,pollInterval:s=500}={}){try{return await this.getTransaction(e)}catch(n){if(r>=t)throw n;return await new Promise((e=>setTimeout(e,s))),this.waitForTx(e,{maxAttempts:t,attempt:r+1,pollInterval:s})}}},exports.BitcoinProviderAbstract=k,exports.BitcoinWallet=$t,exports.BitcoinWalletAbstract=z,exports.BitcoinWalletVoid=class extends z{constructor(e,t){super(e,t)}signTx(e){throw new Error("Void wallets can not sign.")}},exports.BtcNetworks=qt,exports.DerivationPath=_,exports.ETH_ACCOUNT_PATH=N,exports.ETH_COIN_PATH=U,exports.JsonRpcBatchInternal=q,exports.LedgerSigner=W,exports.SolanaLedgerSigner=class{#p;#h;constructor(e,t){this.#p=Xt(e,!1),this.#h=t}async signTx(e,t){const r=await Nt(e,t),{signatures:s,messageBytes:n,...a}=w.compileTransaction(r),i=new T(this.#h),{address:o}=await i.getAddress(this.#p),d=w.address(S.base58.encode(Uint8Array.from(o)));if(!this.#d(d,s))return e;const{signature:u}=await i.signTransaction(this.#p,Buffer.from(n)),c=S.base58.encode(Uint8Array.from(u));return w.assertIsSignature(c),w.getBase64EncodedWireTransaction({...a,messageBytes:n,signatures:{...s,[d]:S.base58.decode(c)}})}#d(e,t){return e in t&&!t[e]}},exports.SolanaSigner=Ft,exports.addEncodedSigToPsbt=function(e,t,r,s){const n=[{pubkey:t,signature:e}];r.updateInput(s,{partialSig:n})},exports.compileSolanaTx=e=>w.compileTransaction(e),exports.createPSBTV2=j,exports.createPsbt=E,exports.createTransferTx=D,exports.createWalletPolicy=function(e,t,r,s){const n=new u.DefaultWalletPolicy("wpkh(@0/**)",`[${e}/44'/60'/${t}']${r}`);return new u.WalletPolicy(s,"wpkh(@0/**)",n.keys)},exports.deserializeTransactionMessage=Nt,exports.formatAddressForNetworkBech32=function(t,r){const s=e.address.fromBech32(t);return e.address.toBech32(s.data,s.version,r.bech32)},exports.getAddressDerivationPath=Ht,exports.getAddressFromXPub=function(e,t){const r=R(e,t);return n.computeAddress(`0x${r.toString("hex")}`)},exports.getAddressPrivateKeyFromXPriv=function(e,t){const r=a.fromBase58(e).derivePath(`0/${t}`);if(!r.privateKey)throw new Error("Unable to derive private key.");return r.privateKey},exports.getAddressPublicKeyFromXPub=R,exports.getAppEth=O,exports.getBech32Address=K,exports.getBech32AddressFromXPub=function(e,t,r){return K(R(e,t),r)},exports.getBtcAddressFromPubKey=function(e,r){const s=t.strip0x(n.SigningKey.computePublicKey(e,!0));return K(Buffer.from(s,"hex"),r)},exports.getEVMDerivationPath=L,exports.getEvmAddressFromPubKey=function(e){return n.computeAddress(`0x${e.toString("hex")}`)},exports.getLedgerAppInfo=async function(e){const t=await e.send(176,1,0,0),r=t.readUInt8(1),s=t.readUInt8(2+r),n=t.subarray(2,2+r),a=t.subarray(2+r+1,2+r+1+s);return{applicationName:n.toString("ascii"),version:a.toString("ascii")}},exports.getLedgerExtendedPublicKey=async function(e,t=!1,r){const s=O(e),n=await s.getAddress(r??N,t,!0),a=new y;return a.publicKey=B.Buffer.from(n.publicKey,"hex"),a.chainCode=B.Buffer.from(n.chainCode,"hex"),a.publicExtendedKey},exports.getMaxTransferAmount=function(e,t,r,s){const n=C(e);if(!n)return 0;const{fee:a}=M(t,r,n,s,e);return n-a},exports.getPubKeyFromTransport=async function(e,t,r,s="EVM"){const n=O(e),a="EVM"===s?Ht(t,s,{pathSpec:r}):Ht(t,s),i=await n.getAddress(a,!1,!1);return Buffer.from(i.publicKey,"hex")},exports.getPublicKeyFromPrivateKey=function(e){const t=Buffer.isBuffer(e)?e:Buffer.from(e,"hex");try{return Buffer.from(l.secp256k1.getPublicKey(t))}finally{t.fill(0)}},exports.getSolanaDerivationPath=Xt,exports.getSolanaProvider=({isTestnet:e,rpcUrl:t})=>{const r=w.createSolanaRpc(e?w.devnet(t):w.mainnet(t));return new Proxy(r,{get:(e,t,r)=>t===_t||("then"===t||"catch"===t||"finally"===t?e:Reflect.get(e,t,r))})},exports.getSolanaPublicKeyFromLedger=async(e,t)=>{const r=new T(t),{address:s}=await r.getAddress(Xt(e,!1));return s},exports.getTransferTxDetails=function(e,t,r,s,n){const a=M(e,t,r,s,V(n));return a.inputs||console.log("Unable to construct transaction, fee needed: ",a.fee),a},exports.getVoidSigner=function(e,t){return new n.VoidSigner(e,t)},exports.getWalletFromMnemonic=function(e,t,r){if(!(t>=0&&t%1==0))throw new Error("Account index must be an integer greater than or equal to 0.");return n.HDNodeWallet.fromMnemonic(n.Mnemonic.fromPhrase(e),L(t,r))},exports.getXpubFromMnemonic=async function(e){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");const t=await i.mnemonicToSeed(e);return a.fromSeed(t).derivePath(N).neutered().toBase58()},exports.isERC20Transfer=H,exports.isNativeTxn=F,exports.isSolanaProvider=e=>!(!e||"object"!=typeof e)&&!0===e[_t],exports.maybeGetAssociatedTokenAccount=Lt,exports.omitUndefinedKeys=function(e){return Object.keys(e).reduce(((t,r)=>(void 0!==e[r]&&(t[r]=e[r]),t)),{})},exports.onBalanceChange=async(e,t,r,s)=>{const n=new Set(e.map((e=>e.toLowerCase()))),a=new Set(t.map((e=>e.toLowerCase()))),i=async e=>{const t=await r.getBlock(e,!0);t?.prefetchedTransactions.forEach((function(e){e.to&&a.has(e.to.toLowerCase())&&H(e,n)?s(e,{type:"erc20",contractAddress:e.to}):F(e,n)&&s(e,{type:"native"})}))},o=await r.on("block",i);return{unsubscribe:()=>o.off("block",i)}},exports.openLedgerApp=async function(e,t){try{return(await e.send(224,216,0,0,Buffer.from(t,"ascii"))).equals(Buffer.from([144,0]))}catch(e){return!1}},exports.psbt2ToPsbt0=J,exports.quitLedgerApp=async function(e){return await e.send(176,167,0,0)},exports.selectUtxos=M,exports.serializeSolanaTx=e=>w.getBase64EncodedWireTransaction(e),exports.transferSol=async({from:e,to:t,amount:r,provider:s})=>{const{value:n}=await s.getLatestBlockhash().send(),a=[b.getTransferSolInstruction({source:w.createNoopSigner(w.address(e)),destination:w.address(t),amount:r})];return w.pipe(w.createTransactionMessage({version:0}),(e=>w.setTransactionMessageLifetimeUsingBlockhash(n,e)),(t=>w.setTransactionMessageFeePayer(w.address(e),t)),(e=>w.appendTransactionMessageInstructions(a,e)))},exports.transferToken=async({from:e,to:t,mint:r,amount:s,decimals:n,provider:a})=>{const{address:i}=await Lt({mint:w.address(r),owner:w.address(e),provider:a}),{address:o,exists:d}=await Lt({mint:w.address(r),owner:w.address(t),provider:a}),u=[];d||u.push(A.getCreateAssociatedTokenIdempotentInstruction({payer:w.createNoopSigner(w.address(e)),mint:w.address(r),owner:w.address(t),ata:o})),u.push(A.getTransferCheckedInstruction({amount:s,authority:w.createNoopSigner(w.address(e)),decimals:n,mint:w.address(r),destination:o,source:i}));const{value:c}=await a.getLatestBlockhash().send();return w.pipe(w.createTransactionMessage({version:0}),(e=>w.setTransactionMessageLifetimeUsingBlockhash(c,e)),(t=>w.setTransactionMessageFeePayer(w.address(e),t)),(e=>w.appendTransactionMessageInstructions(u,e)))};
|
|
1
|
+
"use strict";var e=require("bitcoinjs-lib"),t=require("@avalabs/core-utils-sdk"),r=require("coinselect"),s=require("@ledgerhq/hw-app-eth"),n=require("ethers"),a=require("bip32"),i=require("bip39"),o=require("@ledgerhq/hw-transport"),d=require("@metamask/eth-sig-util"),u=require("ledger-bitcoin"),c=require("@ledgerhq/hw-app-btc/lib/bip32"),l=require("@avalabs/avalanchejs"),p=require("@noble/hashes/sha256"),h=require("@avalabs/glacier-sdk"),g=require("@avalabs/core-chains-sdk"),m=require("create-hash"),f=require("xss"),x=require("bip32-path"),v=require("@avalabs/hw-app-avalanche"),y=require("hdkey"),w=require("@solana/kit"),b=require("@solana-program/system"),A=require("@solana-program/token"),T=require("@ledgerhq/hw-app-solana"),I=require("@noble/curves/ed25519"),S=require("@scure/base"),P=require("micro-key-producer/slip10.js"),B=require("buffer");function C(e){return e.reduce(((e,t)=>e+t.value),0)}class k{async getUtxoBalance(e,t=!0){const r=await this.getUTXOs(e,t);return{balance:C(r.confirmed),balanceUnconfirmed:C(r.unconfirmed),utxos:r.confirmed,utxosUnconfirmed:r.unconfirmed}}}function E(t,r,s){const n=new e.Psbt({network:s});return t.forEach((e=>{n.addInput({hash:e.txHash,index:e.index,witnessUtxo:{script:Buffer.from(e.script,"hex"),value:e.value}})})),r.forEach((e=>{n.addOutput({value:e.value,address:e.address})})),n}function M(e,t,s,n,a){const i=[{address:e,value:s}],{inputs:o,outputs:d,fee:u}=r(a,i,n);if(!o||!d)return{fee:u};const c=[d[0]],l=d[1];return l&&c.push({address:t,value:l.value}),{inputs:o,outputs:c,fee:u}}function V(e){const t=[];return e.filter((e=>{const r=e.txHash+e.index.toString();return!t.includes(r)&&(t.push(r),!0)}))}function D(e,t,r,s,n,a){const i=M(e,t,r,s,V(n));return i.inputs?{...i,psbt:E(i.inputs,i.outputs,a)}:(console.log("Unable to construct transaction, fee needed: ",i.fee),i)}function K(t,r){return e.payments.p2wpkh({pubkey:t,network:r}).address}function O(e){return new s(e,"w0w")}const U="m/44'/60'",N=`${U}/0'`;var _=(e=>(e.BIP44="bip44",e.LedgerLive="ledger_live",e))(_||{});const L=(e,t,r=!0)=>{switch(t){case _.BIP44:return`${r?"m/":""}44'/60'/0'/0/${e}`;case _.LedgerLive:return`${r?"m/":""}44'/60'/${e}'/0/0`;default:throw new Error("Invalid path spec")}};var X=[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];const F=(e,t)=>t.has(e.from.toLowerCase())||t.has((e.to??"").toLowerCase()),H=(e,t)=>{const r=new n.Interface(X).parseTransaction({data:e.data,value:e.value});if(t.has(e.from.toLowerCase()))return!0;if("transfer"===r?.name)return t.has(r.args[0]?.toLowerCase());if("transferFrom"===r?.name){const e=t.has(r.args[0]?.toLowerCase()),s=t.has(r.args[1]?.toLowerCase());return e||s}return!1};var $=[{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall.Call[]",name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes[]",name:"returnData",type:"bytes[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockCoinbase",outputs:[{internalType:"address",name:"coinbase",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockDifficulty",outputs:[{internalType:"uint256",name:"difficulty",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockGasLimit",outputs:[{internalType:"uint256",name:"gaslimit",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockTimestamp",outputs:[{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"addr",type:"address"}],name:"getEthBalance",outputs:[{internalType:"uint256",name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"}];class q extends n.JsonRpcProvider{url;constructor(e,t,r){super(t,r,{staticNetwork:r}),this.#e="string"==typeof t?new n.FetchRequest(t):void 0===t?new n.FetchRequest("http://localhost:8545"):t.clone(),this.url=this.#e.url,this._maxCalls="number"==typeof e?e:e.maxCalls,"number"!=typeof e&&e?.multiContractAddress&&(this._parentProvider=new n.JsonRpcProvider(this.#e,r,{staticNetwork:r}),this._multicallContract=new n.Contract(e.multiContractAddress,$,this._parentProvider),this._maxCalls=62)}#e;#t=1;_pendingBatchAggregator=null;_pendingBatch=[];_maxCalls;_parentProvider;_multicallContract;send(e,t){if("eth_call"!==e)return super.send(e,t);const r={method:e,params:t,id:this.#t++,jsonrpc:"2.0"};null==this._pendingBatch&&(this._pendingBatch=[]);const s={request:r,resolve:null,reject:null},n=new Promise(((e,t)=>{s.resolve=e,s.reject=t}));return this._pendingBatch.push(s),this._pendingBatchAggregator||(this._pendingBatchAggregator=setTimeout(this.flush,10)),n}flush=()=>{const e=this._pendingBatch?.slice(0,this._maxCalls)??[];!this._pendingBatch||this._pendingBatch?.length<=this._maxCalls?(this._pendingBatch=null,this._pendingBatchAggregator=null):(this._pendingBatch.splice(0,this._maxCalls),setTimeout(this.flush,10));(this._multicallContract?this.batchSendMultiCall:this.batchSend)(e).then((t=>{e?.forEach(((e,r)=>{const s=t[r];if(s.error){const t=new Error(s.error.message);t.code=s.error.code,t.data=s.error.data,e.reject(t)}else e.resolve(s.result)}))})).catch((t=>{e?.forEach((e=>{e.reject(t)}))}))};batchSend=async e=>{const t=e?.map((e=>e.request));if(!this.url||!t)throw new Error("No url");const r=this.#e.clone();r.body=t;return(await r.send()).bodyJson};batchSendMultiCall=async e=>{const t=e.map((e=>({callData:e.request.params[0].data,target:e.request.params[0].to})));return(await this._multicallContract.aggregate(t))[1].map((e=>({result:e})))}}function R(e,t){return a.fromBase58(e).derivePath(`0/${t}`).publicKey}let W=class e extends n.AbstractSigner{type="default";path;provider=null;accountIndex;derivationSpec;transport;_eth;constructor(e=0,t,r,s){super(),this.path=L(e,r),this.accountIndex=e,this.transport=t,this.derivationSpec=r,this._eth=O(t),n.defineProperties(this,{path:this.path,type:"default",provider:s??null})}setTransport(e){this._eth=O(e),this.transport=e}async getAddress(){const e=await this._eth.getAddress(this.path);return n.getAddress(e.address)}async signMessage(e){"string"==typeof e&&(e=n.toUtf8Bytes(e));const t=n.hexlify(e).substring(2),r=await this._eth.signPersonalMessage(this.path,t);return r.r="0x"+r.r,r.s="0x"+r.s,n.Signature.from(r).serialized}async signTransaction(e){const t=await this.populateTransaction(e);delete t.from;const r=n.Transaction.from(t),s=r.unsignedSerialized,a=await this._eth.signTransaction(this.path,s.slice(2),null);return r.signature={v:BigInt("0x"+a.v),r:"0x"+a.r,s:"0x"+a.s},r.serialized}connect(t){return new e(this.accountIndex,this.transport,this.derivationSpec,t)}async signTypedData(e,t,r){const{EIP712Domain:s,...a}=t,i=n.TypedDataEncoder.getPrimaryType(a);try{const s=await this._eth.signEIP712Message(this.path,{domain:{name:e.name||void 0,chainId:e.chainId?Number(e.chainId):void 0,version:e.version||void 0,verifyingContract:e.verifyingContract||void 0,salt:e.salt?.toString()||void 0},types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],...t},primaryType:i,message:r});return s.r="0x"+s.r,s.s="0x"+s.s,n.Signature.from(s).serialized}catch(s){if(s instanceof o.TransportStatusError&&s.statusCode===o.StatusCodes.INS_NOT_SUPPORTED){const s=d.TypedDataUtils.hashStruct(i,r,t,d.SignTypedDataVersion.V4),a=d.TypedDataUtils.hashStruct("EIP712Domain",e,t,d.SignTypedDataVersion.V4),o=await this._eth.signEIP712HashedMessage(this.path,a.toString("hex"),s.toString("hex"));return o.r="0x"+o.r,o.s="0x"+o.s,n.Signature.from(o).serialized}throw s}}};function j(t,r,s,n,a,i){const o=new u.PsbtV2;return o.setGlobalPsbtVersion(2),o.setGlobalTxVersion(2),o.setGlobalInputCount(t.length),o.setGlobalOutputCount(r.length),t.forEach(((e,t)=>{if(!e.txHex)throw new Error("Input tx hex is not given");o.setInputPreviousTxId(t,Buffer.from(e.txHash,"hex").reverse()),o.setInputOutputIndex(t,e.index),o.setInputNonWitnessUtxo(t,Buffer.from(e.txHex,"hex")),o.setInputWitnessUtxo(t,e.value,Buffer.from(e.script,"hex")),o.setInputBip32Derivation(t,a,n,c.pathStringToArray(i))})),r.forEach(((t,r)=>{const n=e.address.toOutputScript(t.address,s);o.setOutputAmount(r,t.value),o.setOutputScript(r,n)})),o}function J(t,r,s,n){const a=new e.Psbt({network:r}),i=t.getGlobalInputCount(),o=t.getGlobalOutputCount();for(let e=0;e<i;e++){const r=t.getInputWitnessUtxo(e),i=t.getInputBip32Derivation(e,s);a.addInput({nonWitnessUtxo:t.getInputNonWitnessUtxo(e),witnessUtxo:r?{value:r.amount,script:r.scriptPubKey}:void 0,hash:t.getInputPreviousTxid(e),index:t.getInputOutputIndex(e),bip32Derivation:i?[{path:n,pubkey:s,masterFingerprint:i.masterFingerprint}]:void 0})}for(let s=0;s<o;s++)a.addOutput({value:t.getOutputAmount(s),address:e.address.fromOutputScript(t.getOutputScript(s),r)});return a}class z{constructor(t,r){this.pubkey=t,this.provider=r;try{this.ecPair=e.ECPair.fromPublicKey(t)}catch(e){throw new Error("Not a valid public key.")}}ecPair;getAddressP2PKH(){return e.payments.p2pkh({pubkey:this.ecPair.publicKey,network:this.provider.getNetwork()}).address}getAddressBech32(){return K(this.ecPair.publicKey,this.provider.getNetwork())}async getUTXOs(){return this.provider.getUTXOs(this.getAddressBech32(),!0)}async getBalances(){return this.provider.getBalances(this.getAddressBech32())}async getUtxoBalance(){return this.provider.getUtxoBalance(this.getAddressBech32())}connect(e){this.provider=e}getProvider(){return this.provider}getPublicKey(){return this.ecPair.publicKey}createTransferTx(e,t,r,s){return D(e,this.getAddressBech32(),t,r,s,this.provider.getNetwork())}}var G=(e=>(e.Base="base",e.AddValidator="add_validator",e.AddDelegator="add_delegator",e.Export="export",e.Import="import",e.CreateSubnet="create_subnet",e.CreateChain="create_chain",e.ConvertSubnetToL1="convert_subnet_to_l1",e.RegisterL1Validator="register_l1_validator",e.SetL1ValidatorWeight="set_l1_validator_weight",e.IncreaseL1ValidatorBalance="increase_l1_validator_balance",e.DisableL1Validator="disable_l1_validator",e.AddSubnetValidator="add_subnet_validator",e.RemoveSubnetValidator="remove_subnet_validator",e.AddPermissionlessValidator="add_permissionless_validator",e.AddPermissionlessDelegator="add_permissionless_delegator",e.TransformSubnet="transform_subnet",e.TransferSubnetOwnership="transfer_subnet_ownership",e.Unknown="unknown",e))(G||{});const Y=e=>{switch(e){case"C":return l.EVM;case"X":return l.AVM;case"P":return l.PVM;default:throw new Error(`Unable to get VM type for chain "${e}"`)}};const{getTransferableInputsByTx:Q,AddressMaps:Z}=l.utils,ee=async({tx:e,fromAddressBytes:t,provider:r,credentials:s,utxos:n})=>{const a=Q(e);let i=Z.fromTransferableInputs(a,n,BigInt(Math.floor((new Date).getTime()/1e3)),t);if((e=>l.pvmSerial.isCreateChainTx(e)||l.pvmSerial.isAddSubnetValidatorTx(e)||l.pvmSerial.isRemoveSubnetValidatorTx(e)||l.pvmSerial.isTransformSubnetTx(e)||l.pvmSerial.isTransferSubnetOwnershipTx(e)||l.pvmSerial.isConvertSubnetToL1Tx(e))(e))try{const t=await(async({tx:e,provider:t,addressMaps:r})=>{const s=e.getSubnetAuth().values(),n=await t.getApiP().getSubnet({subnetID:e.getSubnetID().value()}),a=l.OutputOwners.fromNative(n.controlKeys.map((e=>l.utils.parse(e)[2])),BigInt(n.locktime),Number(n.threshold)).addrs.reduce(((e,t,r)=>(s.includes(r)&&e.push([t,r]),e)),[]);return r.push(new l.utils.AddressMap(a)),r})({tx:e,provider:r,addressMaps:i});return new l.UnsignedTx(e,n,t,s)}catch(e){throw new Error(`Error while preparing subnet authorization data: ${e.message}`)}else l.pvmSerial.isDisableL1ValidatorTx(e)&&(i=await async function(e,t,r){try{const{deactivationOwner:s}=await r.getApiP().getL1Validator(t.validationId.toString()),n=t.getDisableAuth().values(),a=s.addresses.reduce(((e,t,r)=>(n.includes(r)&&e.push([t,r]),e)),[]);return e.push(new l.utils.AddressMap(a)),e}catch(e){throw new Error(`Error while preparing disableAuth data: ${e.message}`)}}(i,e,r));return new l.UnsignedTx(e,n,i,s)},{bufferToHex:te,packTx:re}=l.utils,{publicKeyBytesToAddress:se,recoverPublicKey:ne}=l.secp256k1,ae=new l.Signature(new Uint8Array(Array(65).fill(0))),ie=(e,t)=>{const r=Math.max(...e);if(!isFinite(r))throw new Error("Error while adding placeholder signatures for the provided indices.");const s=new Array(r+1).fill(ae);if(!t)return s;const{unsignedTx:n,credentialIndex:a}=t,i=n.getCredentials()[a];if(!i)return s;const o=re(n.getTx()),d=p.sha256(o),u=ae.toString();for(const e of i.toJSON()){if(e.toString()===u)continue;const t=ne(d,e.toBytes()),r={toHex:()=>te(se(t))},i=n.addressMaps.getSigIndicesForAddress(r,!1)??[];for(const t of i)t[0]===a&&(s[t[1]]=e)}return s};function oe(e){return l.utils.bufferToHex(l.utils.addChecksum(e.toBytes()))}const{getManagerForVM:de,hexToBuffer:ue,unpackWithManager:ce}=l.utils,le=async({transactionHex:e,chainAlias:t,provider:r,utxos:s})=>{const n=Y(t);if(n===l.EVM)throw new Error("EVM transactions are not supported");const a=ue(e),i=ce(n,a),o=await(async({tx:e,txBytes:t,provider:r,vm:s,utxos:n})=>{try{const a=de(s).unpack(t,l.avaxSerial.SignedTx),i=await ee({tx:e,utxos:n,provider:r,credentials:a.getCredentials()});return e.getSigIndices().map(((e,t)=>new l.Credential(ie(e,{unsignedTx:i,credentialIndex:t}))))}catch(t){return e.getSigIndices().map((e=>new l.Credential(ie(e))))}})({tx:i,txBytes:a,provider:r,vm:n,utxos:s});return ee({tx:i,provider:r,credentials:o,utxos:s})},{parseBech32:pe,format:he}=l.utils,{publicKeyBytesToAddress:ge}=l.secp256k1;class me{constructor(e,t,r){this.baseUrl=e,this.context=t,this.fetchOptions=r}getContext(){return this.context}getChainID(e){switch(e){case"X":return this.context.xBlockchainID;case"P":return this.context.pBlockchainID;case"C":return this.context.cBlockchainID}}getNetworkID(){return this.context.networkID}getHrp(){return l.networkIDs.getHRP(this.getNetworkID())}getApiX(){const e=new l.avm.AVMApi(this.baseUrl);return this.fetchOptions&&e.setFetchOptions(this.fetchOptions),e}getApiP(){const e=new l.pvm.PVMApi(this.baseUrl);return this.fetchOptions&&e.setFetchOptions(this.fetchOptions),e}getApiC(){const e=new l.evm.EVMApi(this.baseUrl);return this.fetchOptions&&e.setFetchOptions(this.fetchOptions),e}getInfo(){const e=new l.info.InfoApi(this.baseUrl);return this.fetchOptions&&e.setFetchOptions(this.fetchOptions),e}getApi(e){switch(e){case"X":return this.getApiX();case"P":return this.getApiP();case"C":return this.getApiC()}}getAvaxID(){return this.getContext().avaxAssetID}getAddress(e,r){const s=t.strip0x(n.SigningKey.computePublicKey(e,!0)),a=Buffer.from(s,"hex"),i=ge(a);return he(r,this.getHrp(),i)}getAddressFromBuffer(e,t){return he(t,this.getHrp(),e)}formatAddress(e,t){const[,r]=pe(e);return he(t,this.getHrp(),r)}getApiByVM(e){switch(e){case"AVM":return this.getApiX();case"PVM":return this.getApiP();case"EVM":return this.getApiC()}}getApiByChainID(e){switch(e){case this.context.xBlockchainID:return this.getApiX();case this.context.pBlockchainID:return this.getApiP();case this.context.cBlockchainID:return this.getApiC()}}async issueTx(e){const t=e.unsignedTx.getVM(),r=oe(e);return this.issueTxHex(r,t)}async issueTxHex(e,t){return this.getApiByVM(t).issueTx({tx:e})}async waitForTransaction(e,t,r=6e4){const s=this.getApiByVM(t),n=Date.now();return new Promise(((t,a)=>{const i=async()=>{let o;switch(r&&n+r<Date.now()&&a(new Error("Timeout")),o=s instanceof l.evm.EVMApi?await s.getAtomicTxStatus(e):await s.getTxStatus({txID:e,includeReason:!0}),o.status){case"Accepted":case"Committed":return void t({success:!0});case"Dropped":case"Rejected":return void t({success:!1});default:setTimeout((()=>{i()}),1e3)}};i()}))}}const fe={weights:l.Common.createDimensions({bandwidth:1,dbRead:1e3,dbWrite:1e3,compute:4}),maxCapacity:BigInt(1e6),maxPerSecond:BigInt(1e5),targetPerSecond:BigInt(5e4),minPrice:BigInt(1),excessConversionConstant:BigInt(2164043)},xe={xBlockchainID:"2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM",pBlockchainID:"11111111111111111111111111111111LpoYY",cBlockchainID:"2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5",avaxAssetID:"FvwEAhmxKfeiG8SnEvq42hc6whRyY3EFYAvebMqDNDGCgxN5Z",baseTxFee:BigInt(1e6),createAssetTxFee:BigInt(1e7),networkID:1,hrp:"avax",platformFeeConfig:fe},ve={xBlockchainID:"2JVSBoinj9C2J33VntvzYtVJNZdN2NKiwwKjcumHUWEb5DbBrm",pBlockchainID:"11111111111111111111111111111111LpoYY",cBlockchainID:"yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp",avaxAssetID:"U8iRqJoiJm8xZHAacmvYyZVwqQx6uDNtQeP3CQ6fcgQk3JqnK",baseTxFee:BigInt(1e6),createAssetTxFee:BigInt(1e7),networkID:5,hrp:"fuji",platformFeeConfig:fe},ye={xBlockchainID:"2piQ2AVHCjnduiWXsSY15DtbVuwHE2cwMHYnEXHsLL73BBkdbV",pBlockchainID:"11111111111111111111111111111111LpoYY",cBlockchainID:"vV3cui1DsEPC3nLCGH9rorwo8s6BYxM2Hz4QFE5gEYjwTqAu",avaxAssetID:"22jjRVdyTJiAEtcZciAVR8bTFyVDUVoo1T3o5PiDspQSZ2maXR",baseTxFee:1000000n,createAssetTxFee:1000000n,networkID:76,hrp:"custom",platformFeeConfig:fe};class we extends me{constructor(e,t,r){super(e,t,r)}static async fromBaseURL(e){const t=await l.Context.getContextFromURI(e);try{return new we(e,t)}catch{return new we(e,t)}}static getDefaultMainnetProvider(){return new we(g.AVALANCHE_XP_NETWORK.rpcUrl,xe)}static getDefaultFujiProvider(){return new we(g.AVALANCHE_XP_TEST_NETWORK.rpcUrl,ve)}static getDefaultDevnetProvider(){return new we(g.AVALANCHE_P_DEV_NETWORK.rpcUrl,ye)}}const{bytesCompare:be,parseBech32:Ae}=l.utils,Te=(e,t)=>"P"===t,Ie=(e,t,r)=>{const s=Te(0,t)?e.amount:e.asset?.amount;return new l.TransferOutput(new l.BigIntPr(BigInt(s)),l.OutputOwners.fromNative(e.addresses.map((e=>Ae(e)[1])).sort(be),BigInt(r??0),e.threshold))},Se=(e,t)=>{const r=((e,t)=>{const r=t===h.Network.FUJI,{cBlockchainID:s,xBlockchainID:n,pBlockchainID:a}=r?ve:xe;if(s===e)return"C";if(n===e)return"X";if(a===e)return"P";throw new Error(`Unknown chainId "${e}"`)})(e.createdOnChainId,t),s=Te(0,r)?e.txHash:e.creationTxHash,n=Te(0,r)?e.assetId:e.asset?.assetId;return new l.Utxo(l.avaxSerial.UTXOID.fromNative(s,Number(e.outputIndex)),l.Id.fromString(n),((e,t)=>Te(0,t)?e.stakeableLocktime?new l.pvmSerial.StakeableLockOut(new l.BigIntPr(BigInt(e.stakeableLocktime??0)),Ie(e,t,e.platformLocktime??0)):Ie(e,t,e.platformLocktime):Ie(e,t,e.locktime))(e,r))},{unpackWithManager:Pe,parse:Be,bufferToHex:Ce,AddressMaps:ke,AddressMap:Ee}=l.utils;function Me(e){const t=Buffer.from(e,"utf8"),r=Buffer.alloc(4);r.writeUInt32BE(t.length,0);const s=Buffer.from(`Avalanche Signed Message:\n${r}${e}`,"utf8");return m("sha256").update(s).digest()}const Ve=1024,De=1024;async function Ke(e,t,r){const s=e.slice(0,Ve),n=e.slice(Ve),a=await Oe(t,{...r,addresses:s});if(n.length){const s=await Ke(n,t,{...r,addresses:e});return a.merge(s)}return a}async function Oe(e,t){if(t.addresses.length>Ve)throw new Error(`Can not get UTXOs for more than ${Ve} addresses.`);const{endIndex:r,utxos:s}=await e.getUTXOs(t),n=new l.utils.UtxoSet(s);if(s.length>=De){const s=await Oe(e,{...t,startIndex:r});return n.merge(s)}return n}function Ue(){return BigInt(Math.floor(Date.now()/1e3))}const{getUtxoInfo:Ne}=l.utils;async function _e(e,t){const r=e.slice(0,256),s=e.slice(256),n=await t.getStake({addresses:r});if(s.length){const e=await _e(s,t);return{staked:n.staked+e.staked,stakedOutputs:[...n.stakedOutputs,...e.stakedOutputs]}}return n}const{getTransferableInputsByTx:Le,hexToBuffer:Xe,unpackWithManager:Fe}=l.utils;function He(e,t=!0){try{if(t){const[t]=l.utils.parse(e);if(!["X","P","C"].includes(t))return!1}else l.utils.parseBech32(e);return!0}catch(e){return!1}}const $e=e=>{if([xe.xBlockchainID,ve.xBlockchainID,ye.xBlockchainID].includes(e))return"AVM";if([xe.pBlockchainID,ve.pBlockchainID,ye.pBlockchainID].includes(e))return"PVM";if([xe.cBlockchainID,ve.cBlockchainID,ye.cBlockchainID].includes(e))return"EVM";throw new Error("Unknown chain id. Failed to get alias.")},qe=(e,t)=>e.reduce(((e,r)=>r.assetId.toString()!==t?e:e+r.output.amount()),BigInt(0)),Re=(e,t)=>e.reduce(((e,r)=>r.assetId.toString()!==t?e:e+r.input.amount()),BigInt(0));var We={parseCreateSubnetTx:e=>l.pvmSerial.isCreateSubnetTx(e)?({feeData:t,provider:r})=>({type:G.CreateSubnet,chain:e.getVM(),threshold:e.getSubnetOwners().threshold.value(),controlKeys:e.getSubnetOwners().addrs.map((e=>`P-${e.toString(r.getHrp())}`)),...t}):null,parseCreateChainTx:e=>l.pvmSerial.isCreateChainTx(e)?({feeData:t})=>({type:G.CreateChain,chain:e.getVM(),subnetID:e.getSubnetID().value(),chainName:e.chainName.value(),chainID:e.getBlockchainId(),vmID:e.vmID.value(),fxIDs:e.fxIds.map((e=>e.value())),genesisData:e.genesisData.toString(),...t}):null,parseAddSubnetValidatorTx:e=>l.pvmSerial.isAddSubnetValidatorTx(e)?({feeData:t})=>({type:G.AddSubnetValidator,chain:e.getVM(),stake:e.subnetValidator.validator.weight.value(),nodeID:e.subnetValidator.validator.nodeId.value(),start:e.subnetValidator.validator.startTime.value().toString(),end:e.subnetValidator.validator.endTime.value().toString(),subnetID:e.getSubnetID().value(),...t}):null,parseRemoveSubnetValidatorTx:e=>l.pvmSerial.isRemoveSubnetValidatorTx(e)?({feeData:t})=>({type:G.RemoveSubnetValidator,chain:e.getVM(),nodeID:e.nodeId.toString(),subnetID:e.getSubnetID().value(),...t}):null,parseImportTx:e=>l.pvmSerial.isImportTx(e)||l.avmSerial.isImportTx(e)||l.evmSerial.isImportTx(e)?l.evmSerial.isImportTx(e)?({feeData:t,assetId:r})=>({type:G.Import,chain:e.getVM(),source:$e(e.sourceChain.value()),amount:Re(e.importedInputs,r),...t}):({feeData:t,assetId:r})=>({type:G.Import,chain:e.getVM(),source:$e(e.sourceChain.value()),amount:Re(e.ins,r),...t}):null,parseExportTx:e=>l.pvmSerial.isExportTx(e)||l.avmSerial.isExportTx(e)||l.evmSerial.isExportTx(e)?l.evmSerial.isExportTx(e)?({feeData:t,assetId:r})=>({type:G.Export,chain:e.getVM(),destination:$e(e.destinationChain.toString()),amount:qe(e.exportedOutputs,r),...t}):({feeData:t,assetId:r})=>({type:G.Export,chain:e.getVM(),destination:$e(e.destination.value()),amount:qe(e.outs,r),...t}):null,parseBaseTx:e=>l.avmSerial.isAvmBaseTx(e)||l.pvmSerial.isPvmBaseTx(e)?async({feeData:t,currentAddress:r,provider:s})=>{const n=e.baseTx,a=await(async(e,t)=>{const r=e.baseTx,s=new Set;if(r.outputs.forEach((e=>{s.add(e.assetId.value())})),l.avmSerial.isAvmBaseTx(e)){const e=await Promise.all([...s.values()].map((e=>t.getApiX().getAssetDescription(e))));return r.outputs.reduce(((r,n)=>{if(n.output instanceof l.TransferOutput){const a=n.assetId.value(),i=[...s.values()].indexOf(a),o=e[i],d=n.output.outputOwners.addrs.map((e=>`X-${e.toString(t.getContext().hrp)}`));return[...r,{assetId:a,amount:n.output.amount(),locktime:n.output.getLocktime(),threshold:BigInt(n.output.getThreshold()),assetDescription:o,owners:d,isAvax:t.getContext().avaxAssetID===a}]}return r}),[])}return r.outputs.reduce(((e,r)=>{if(r.output instanceof l.TransferOutput){const s=r.assetId.value(),n=r.output.outputOwners.addrs.map((e=>`P-${e.toString(t.getContext().hrp)}`));return[...e,{assetId:s,amount:r.output.amount(),locktime:r.output.getLocktime(),threshold:BigInt(r.output.getThreshold()),owners:n,isAvax:t.getContext().avaxAssetID===s}]}return e}),[])})(e,s),i=Ue(),o=a.filter((e=>!(1===e.owners.length&&e.owners[0]===r&&e.locktime<=i)));return{type:G.Base,chain:e.getVM(),outputs:o,memo:f(Buffer.from(n.memo.toBytes()).toString("utf-8",4)),...t}}:null,parseAddPermissionlessValidatorTx:e=>{if(!l.pvmSerial.isAddPermissionlessValidatorTx(e))return null;let t,r;return l.pvmSerial.isSigner(e.signer)&&(r=l.utils.bufferToHex(e.signer.proof.publicKey),t=l.utils.bufferToHex(e.signer.proof.signature)),({feeData:s})=>({type:G.AddPermissionlessValidator,chain:e.getVM(),stake:e.subnetValidator.validator.weight.value(),nodeID:e.subnetValidator.validator.nodeId.value(),start:e.subnetValidator.validator.startTime.value().toString(),end:e.subnetValidator.validator.endTime.value().toString(),subnetID:e.subnetValidator.subnetId.value(),delegationFee:e.shares.value(),stakeOuts:e.stake,rewardOwner:e.getValidatorRewardsOwner(),delegationRewardOwner:e.getDelegatorRewardsOwner(),signer:e.signer,publicKey:r,signature:t,...s})},parseAddPermissionlessDelegatorTx:e=>l.pvmSerial.isAddPermissionlessDelegatorTx(e)?({feeData:t})=>({type:G.AddPermissionlessDelegator,chain:e.getVM(),stake:e.subnetValidator.validator.weight.value(),nodeID:e.subnetValidator.validator.nodeId.value(),start:e.subnetValidator.validator.startTime.value().toString(),end:e.subnetValidator.validator.endTime.value().toString(),subnetID:e.subnetValidator.subnetId.value(),stakeOuts:e.stake,delegatorRewardsOwner:e.getDelegatorRewardsOwner(),...t}):null,parseTransferSubnetOwnershipTx:e=>l.pvmSerial.isTransferSubnetOwnershipTx(e)?({feeData:t,provider:r})=>({type:G.TransferSubnetOwnership,chain:e.getVM(),subnetID:e.subnetID.value(),threshold:e.getSubnetOwners().threshold.value(),controlKeys:e.getSubnetOwners().addrs.map((e=>`P-${e.toString(r.getHrp())}`)),...t}):null,parseConvertSubnetTx:e=>l.pvmSerial.isConvertSubnetToL1Tx(e)?({feeData:t,provider:r})=>{const s=r.getHrp(),n=e=>`P-${e.toString(s)}`;return{type:G.ConvertSubnetToL1,chain:e.getVM(),managerAddress:`0x${e.address.toString("hex")}`,validators:e.validators.map((e=>({nodeId:l.NodeId.fromHex(e.nodeId.toString("hex")).toString(),stake:e.weight.value(),balance:e.balance.value(),remainingBalanceOwners:e.remainingBalanceOwner.addresses.map(n),deactivationOwners:e.deactivationOwner.addresses.map(n)}))),chainID:e.chainID.value(),subnetID:e.subnetID.value(),...t}}:null,parseRegisterL1ValidatorTx:e=>l.pvmSerial.isRegisterL1ValidatorTx(e)?({feeData:t})=>({type:G.RegisterL1Validator,chain:e.getVM(),balance:e.balance.value(),...t}):null,parseIncreaseL1ValidatorBalanceTx:e=>l.pvmSerial.isIncreaseL1ValidatorBalanceTx(e)?({feeData:t})=>({type:G.IncreaseL1ValidatorBalance,chain:e.getVM(),balance:e.balance.value(),validationId:e.validationId.toString(),...t}):null,parseSetL1ValidatorWeightTx:e=>l.pvmSerial.isSetL1ValidatorWeightTx(e)?({feeData:t})=>({type:G.SetL1ValidatorWeight,chain:e.getVM(),...t}):null,parseDisableL1ValidatorTx:e=>l.pvmSerial.isDisableL1ValidatorTx(e)?({feeData:t})=>({type:G.DisableL1Validator,chain:e.getVM(),validationId:e.validationId.toString(),...t}):null};const{getBurnedAmountByTx:je,getOutputAmounts:Je,getInputAmounts:ze,validateBurnedAmount:Ge}=l.utils;function Ye(e,t,r){return[...e].sort(((e,s)=>{for(let n=0;n<t.length;n++){const a=t[n];if(e[a]>s[a])return"asc"===r?1:-1;if(e[a]<s[a])return"asc"===r?-1:1}return 0}))}function Qe(e){const t=Ue(),r=e.map((e=>({utxo:e,...l.utils.getUtxoInfo(e)}))),s=r.filter((e=>e.stakeableLocktime<=t)),n=r.filter((e=>e.stakeableLocktime>t)),a=Ye(s,["amount"],"desc"),i=Ye(n,["stakeableLocktime","amount"],"desc"),[o,...d]=a;return[...o?[o]:[],...i,...d].map((e=>e.utxo))}function Ze(e,t){return Ye(e.map((e=>({utxo:e,...l.utils.getUtxoInfo(e)}))),["amount"],t?"desc":"asc").map((e=>e.utxo))}const et=e=>Ze(e,!0),tt=e=>Ze(e,!1);const{getUtxoInfo:rt}=l.utils;var st=(e=>(e.ExportP="ExportP",e.ImportP="ImportP",e.AddPermissionlessValidator="AddPermissionlessValidator",e.AddPermissionlessDelegator="AddPermissionlessDelegator",e.BaseP="BaseP",e.ConsolidateP="ConsolidateP",e))(st||{});const nt="NodeID-8TArWpFgH3sazEH8qP4gUjtGtFMvjw1aR",at="11111111111111111111111111111111LpoYY",it=(e,t)=>e.reduce(((e,t)=>e+rt(t).amount),BigInt(0))-t,ot={BaseP:{sortFunction:et,unsignedTxBuilder:(e,t,r)=>{const s=e.getProvider().getContext();return e.baseTX({utxoSet:new l.utils.UtxoSet(t),chain:"P",toAddress:e.getCurrentAddress("P"),amountsPerAsset:{[s.avaxAssetID]:it(t,s.baseTxFee)},feeState:r})}},ConsolidateP:{sortFunction:tt,unsignedTxBuilder:(e,t,r)=>{const s=e.getProvider().getContext();return e.consolidateP({utxoSet:new l.utils.UtxoSet(t),amount:it(t,s.baseTxFee),feeState:r})}},AddPermissionlessValidator:{sortFunction:Qe,unsignedTxBuilder:(e,t,r)=>e.addPermissionlessValidator({utxoSet:new l.utils.UtxoSet(t),nodeId:nt,start:Ue(),end:Ue()+BigInt(1e3),weight:it(t,e.getProvider().getContext().baseTxFee),subnetId:at,shares:5,feeState:r,fromAddresses:void 0,rewardAddresses:void 0,delegatorRewardAddresses:void 0,publicKey:Buffer.from(l.utils.hexToBuffer("0x8f95423f7142d00a48e1014a3de8d28907d420dc33b3052a6dee03a3f2941a393c2351e354704ca66a3fc29870282e15")),signature:Buffer.from(l.utils.hexToBuffer("0x86a3ab4c45cfe31cae34c1d06f212434ac71b1be6cfe046c80c162e057614a94a5bc9f1ded1a7029deb0ba4ca7c9b71411e293438691be79c2dbf19d1ca7c3eadb9c756246fc5de5b7b89511c7d7302ae051d9e03d7991138299b5ed6a570a98"))})},AddPermissionlessDelegator:{sortFunction:Qe,unsignedTxBuilder:(e,t,r)=>e.addPermissionlessDelegator({utxoSet:new l.utils.UtxoSet(t),nodeId:nt,start:Ue(),end:Ue()+BigInt(1e3),weight:it(t,e.getProvider().getContext().baseTxFee),subnetId:at,feeState:r})},ExportP:{sortFunction:et,unsignedTxBuilder:(e,t,r)=>{const s=e.getProvider().getContext(),n=function({numberIns:e=1},t){const r=l.Common.createDimensions({bandwidth:161*e+254,dbRead:e,dbWrite:2+e,compute:200*e});return l.Common.dimensionsToGas(r,t)}({numberIns:t.length},s.platformFeeConfig.weights),a=r?n*r.price:s.baseTxFee;return e.exportP({amount:it(t,a),utxoSet:new l.utils.UtxoSet(t),destination:"X",feeState:r})}},ImportP:{sortFunction:et,unsignedTxBuilder:(e,t,r)=>e.importP({utxoSet:new l.utils.UtxoSet(t),sourceChain:"X",feeState:r})}};function dt(e){return x.validateString(e,!0)&&6===e.split("/").length}const ut=(e,t=!0)=>`${t?"m/":""}44'/9000'/${e}'/0/0`;function ct(e){if("object"!=typeof e||!e)throw new Error("feeState parameter is required post E-upgrade")}const{parse:lt,hexToBuffer:pt}=l.utils;class ht{constructor(e){this.provider=e}setProvider(e){this.provider=e}getProvider(){return this.provider}async getUTXOs(e){const t=this.provider.getApi(e);return Ke(this.getAddresses(e),t)}async getStake(){const e=this.provider.getApiP();return _e(this.getAddresses("P"),e)}async getAtomicUTXOs(e,t){if(e===t)throw new Error("Chain can not be the same as source chain.");const r=this.provider.getApi(e),s=this.provider.getChainID(t);return Ke(this.getAddresses(e),r,{sourceChain:s,addresses:[]})}exportX(e,t,r,s){s=s||this.getCurrentAddress(r);const n=lt(s)[2],a=this.provider.getAvaxID(),i=l.TransferableOutput.fromNative(a,e,[n]),o=Ze(t.getUTXOs(),!0),d=this.provider.getChainID(r),u=this.getAddresses("X").map((e=>lt(e)[2])),c=lt(this.getChangeAddress("X"))[2];return l.avm.newExportTx(this.provider.getContext(),d,u,o,[i],{threshold:1,changeAddresses:[c]})}importP({utxoSet:e,sourceChain:t,toAddress:r,threshold:s,feeState:n,locktime:a}){const i=this.provider.getChainID(t),o=this.getAddresses("P").map((e=>lt(e)[2]));lt(this.getChangeAddress("P"))[2],r=r||this.getCurrentAddress("P");const d=lt(r)[2],u=e.getUTXOs();return ct(n),l.pvm.newImportTx({fromAddressesBytes:o,utxos:u,toAddressesBytes:[d],sourceChainId:i,threshold:s,feeState:n,locktime:a},this.provider.getContext())}importX(e,t,r){const s=this.provider.getChainID(t),n=this.getAddresses("X").map((e=>lt(e)[2])),a=lt(this.getChangeAddress("X"))[2];r=r||this.getCurrentAddress("X");const i=lt(r)[2];return l.avm.newImportTx(this.provider.getContext(),s,e.getUTXOs(),[i],n,{changeAddresses:[a]})}importC(e,r,s,n,a){const i=this.provider.getChainID(r),o=this.getAddresses("C").map((e=>lt(e)[2]));a=a||this.getAddressEVM();const d=Buffer.from(t.strip0x(a),"hex");return l.evm.newImportTxFromBaseFee(this.provider.getContext(),d,o,e.getUTXOs(),i,s,n)}exportC(e,t,r,s,n){const a=pt(this.getAddressEVM()),i=this.provider.getChainID(t);n=n||this.getCurrentAddress(t);const o=lt(n)[2],d=s/BigInt(1e9);return l.evm.newExportTxFromBaseFee(this.provider.getContext(),d,e,i,a,[o],r)}exportP({amount:e,utxoSet:t,destination:r,feeState:s,toAddress:n}){n=n||this.getCurrentAddress(r);const a=lt(n)[2],i=this.provider.getAvaxID(),o=l.TransferableOutput.fromNative(i,e,[a]),d=Ze(t.getUTXOs(),!0),u=this.provider.getChainID(r),c=this.getAddresses("P").map((e=>lt(e)[2])),p=lt(this.getChangeAddress("P"))[2];return ct(s),l.pvm.newExportTx({changeAddressesBytes:[p],fromAddressesBytes:c,utxos:d,outputs:[o],destinationChainId:u,feeState:s},this.provider.getContext())}consolidateP({utxoSet:e,amount:t,feeState:r,toAddress:s,options:n}){const a=tt(e.getUTXOs());s=s??this.getCurrentAddress("P");const i=lt(s)[2],o=this.provider.getContext(),d=[l.TransferableOutput.fromNative(o.avaxAssetID,t,[i])],u=this.getAddresses("P").map((e=>lt(e)[2])),c=lt(this.getChangeAddress("P"))[2],p=n?.changeAddresses??[c];return ct(r),l.pvm.newBaseTx({changeAddressesBytes:p,fromAddressesBytes:u,utxos:a,outputs:d,minIssuanceTime:n?.minIssuanceTime,memo:n?.memo,feeState:r},o)}baseTX({utxoSet:e,chain:t,toAddress:r,amountsPerAsset:s,feeState:n,options:a,fromAddresses:i}){const[o,d,u]=lt(r);if(o!==t||d!==this.provider.getHrp())throw new Error(`Invalid recipient address "${r}"`);const c=Object.entries(s).map((([e,t])=>l.TransferableOutput.fromNative(e,t,[u]))),p=Ze(e.getUTXOs(),!0),h=(i??this.getAddresses(t)).map((e=>lt(e)[2])),g=lt(this.getChangeAddress("P"))[2],m=a?.changeAddresses??[g];return"X"===t?l.avm.newBaseTx(this.provider.getContext(),h,p,c,a):(ct(n),l.pvm.newBaseTx({changeAddressesBytes:m,fromAddressesBytes:h,utxos:p,outputs:c,minIssuanceTime:a?.minIssuanceTime,memo:a?.memo,feeState:n},this.provider.getContext()))}convertSubnetToL1({utxoSet:e,chainId:t,subnetId:r,subnetAuth:s,feeState:n,address:a,validators:i,options:o,fromAddresses:d}){const u=(d??this.getAddresses("P")).map((e=>lt(e)[2])),c=lt(this.getChangeAddress("P"))[2],p=o?.changeAddresses??[c],h=i.map((({nodeId:e,pubKey:t,signature:r,balance:s,weight:n,deactivationOwner:a,remainingBalanceOwner:i})=>{const o=new l.pvmSerial.ProofOfPossession(Uint8Array.from(l.utils.hexToBuffer(t)),Uint8Array.from(l.utils.hexToBuffer(r))),d=l.PChainOwner.fromNative(i.addresses.map((e=>lt(e)[2])),i.threshold??1),u=l.PChainOwner.fromNative(a.addresses.map((e=>lt(e)[2])),a.threshold??1);return l.L1Validator.fromNative(e,n,s,o,d,u)}));return l.pvm.newConvertSubnetToL1Tx({changeAddressesBytes:p,validators:h,fromAddressesBytes:u,address:lt(a)[2],chainId:t,subnetId:r,subnetAuth:s,feeState:n,utxos:Ze(e.getUTXOs(),!0)},this.provider.getContext())}registerL1Validator({utxoSet:e,balance:t,signature:r,message:s,feeState:n,fromAddresses:a,options:i}){const o=(a??this.getAddresses("P")).map((e=>lt(e)[2])),d=lt(this.getChangeAddress("P"))[2],u=i?.changeAddresses??[d];return l.pvm.newRegisterL1ValidatorTx({utxos:Ze(e.getUTXOs(),!0),balance:t,blsSignature:Uint8Array.from(l.utils.hexToBuffer(r)),changeAddressesBytes:u,feeState:n,fromAddressesBytes:o,memo:i?.memo,message:Uint8Array.from(l.utils.hexToBuffer(s)),minIssuanceTime:i?.minIssuanceTime},this.provider.getContext())}setL1ValidatorWeight({utxoSet:e,feeState:t,message:r,options:s,fromAddresses:n}){const a=(n??this.getAddresses("P")).map((e=>lt(e)[2])),i=lt(this.getChangeAddress("P"))[2],o=s?.changeAddresses??[i];return l.pvm.newSetL1ValidatorWeightTx({utxos:Ze(e.getUTXOs(),!0),changeAddressesBytes:o,feeState:t,fromAddressesBytes:a,memo:s?.memo,message:Uint8Array.from(l.utils.hexToBuffer(r)),minIssuanceTime:s?.minIssuanceTime},this.provider.getContext())}disableL1Validator({utxoSet:e,feeState:t,options:r,fromAddresses:s,disableAuth:n,validationId:a}){const i=(s??this.getAddresses("P")).map((e=>lt(e)[2])),o=lt(this.getChangeAddress("P"))[2],d=r?.changeAddresses??[o];return l.pvm.newDisableL1ValidatorTx({disableAuth:n,validationId:a,utxos:Ze(e.getUTXOs(),!0),changeAddressesBytes:d,feeState:t,fromAddressesBytes:i,memo:r?.memo,minIssuanceTime:r?.minIssuanceTime},this.provider.getContext())}increaseL1ValidatorBalance({utxoSet:e,feeState:t,options:r,fromAddresses:s,balance:n,validationId:a}){const i=(s??this.getAddresses("P")).map((e=>lt(e)[2])),o=lt(this.getChangeAddress("P"))[2],d=r?.changeAddresses??[o];return l.pvm.newIncreaseL1ValidatorBalanceTx({balance:n,validationId:a,utxos:Ze(e.getUTXOs(),!0),changeAddressesBytes:d,feeState:t,fromAddressesBytes:i,memo:r?.memo,minIssuanceTime:r?.minIssuanceTime},this.provider.getContext())}createBlockchain({utxoSet:e,subnetId:t,chainName:r,vmID:s,fxIds:n,genesisData:a,subnetAuth:i,feeState:o,options:d,fromAddresses:u}){const c=Ze(e.getUTXOs(),!0),p=(u??this.getAddresses("P")).map((e=>lt(e)[2])),h=lt(this.getChangeAddress("P"))[2],g=d?.changeAddresses??[h];return ct(o),l.pvm.newCreateChainTx({chainName:r,feeState:o,fromAddressesBytes:p,fxIds:n,genesisData:a,subnetAuth:i,subnetId:t,utxos:c,vmId:s,changeAddressesBytes:g},this.provider.getContext())}createSubnet({utxoSet:e,rewardAddresses:t,feeState:r,fromAddresses:s,options:n,threshold:a,locktime:i}){const o=Ze(e.getUTXOs(),!0),d=(s??this.getAddresses("P")).map((e=>lt(e)[2])),u=lt(this.getChangeAddress("P"))[2],c=n?.changeAddresses??[u],p=t.map((e=>lt(e)[2]));return ct(r),l.pvm.newCreateSubnetTx({fromAddressesBytes:d,changeAddressesBytes:c,utxos:o,minIssuanceTime:n?.minIssuanceTime,memo:n?.memo,feeState:r,threshold:a,locktime:i,subnetOwners:p},this.provider.getContext())}addSubnetValidator({utxoSet:e,nodeId:t,start:r,end:s,weight:n,subnetId:a,subnetAuth:i,feeState:o,fromAddresses:d,options:u}){const c=Ze(e.getUTXOs(),!0),p=(d??this.getAddresses("P")).map((e=>lt(e)[2])),h=lt(this.getChangeAddress("P"))[2],g=u?.changeAddresses??[h];return ct(o),l.pvm.newAddSubnetValidatorTx({changeAddressesBytes:g,fromAddressesBytes:p,utxos:c,minIssuanceTime:u?.minIssuanceTime,memo:u?.memo,nodeId:t,start:r,end:s,weight:n,subnetId:a,subnetAuth:i,feeState:o},this.provider.getContext())}addPermissionlessValidator({utxoSet:e,nodeId:t,start:r,end:s,weight:n,subnetId:a,shares:i,feeState:o,fromAddresses:d,rewardAddresses:u,delegatorRewardAddresses:c,publicKey:p,signature:h,options:g,threshold:m,locktime:f,stakingAssetId:x}){const v=Qe(e.getUTXOs()),y=(d??this.getAddresses("P")).map((e=>lt(e)[2])),w=(u??[this.getCurrentAddress("P")]).map((e=>lt(e)[2])),b=(c??[this.getCurrentAddress("P")]).map((e=>lt(e)[2]));if(!(a!==l.networkIDs.PrimaryNetworkID.toString()||p&&h))throw new Error("Must provide public key and signature for primary subnet.");const A=lt(this.getChangeAddress("P"))[2],T=g?.changeAddresses??[A];return ct(o),l.pvm.newAddPermissionlessValidatorTx({fromAddressesBytes:y,delegatorRewardsOwner:b,utxos:v,minIssuanceTime:g?.minIssuanceTime,memo:g?.memo,changeAddressesBytes:T,nodeId:t,start:r,end:s,weight:n,subnetId:a,shares:i,feeState:o,publicKey:p,rewardAddresses:w,signature:h,locktime:f,threshold:m,stakingAssetId:x},this.provider.getContext())}addPermissionlessDelegator({utxoSet:e,nodeId:t,start:r,end:s,weight:n,subnetId:a,fromAddresses:i,rewardAddresses:o,options:d,locktime:u,feeState:c,threshold:p,stakingAssetId:h}){const g=Qe(e.getUTXOs()),m=(i??this.getAddresses("P")).map((e=>lt(e)[2])),f=(o??[this.getCurrentAddress("P")]).map((e=>lt(e)[2])),x=lt(this.getChangeAddress("P"))[2],v=d?.changeAddresses??[x];return ct(c),l.pvm.newAddPermissionlessDelegatorTx({fromAddressesBytes:m,utxos:g,minIssuanceTime:d?.minIssuanceTime,memo:d?.memo,changeAddressesBytes:v,nodeId:t,start:r,end:s,weight:n,subnetId:a,rewardAddresses:f,locktime:u,stakingAssetId:h,threshold:p,feeState:c},this.provider.getContext())}removeSubnetValidator({utxoSet:e,nodeId:t,subnetId:r,subnetAuth:s,fromAddresses:n,feeState:a,options:i}){const o=Ze(e.getUTXOs(),!0),d=(n??this.getAddresses("P")).map((e=>lt(e)[2])),u=lt(this.getChangeAddress("P"))[2],c=i?.changeAddresses??[u];return ct(a),l.pvm.newRemoveSubnetValidatorTx({changeAddressesBytes:c,fromAddressesBytes:d,utxos:o,minIssuanceTime:i?.minIssuanceTime,memo:i?.memo,nodeId:t,subnetId:r,subnetAuth:s,feeState:a},this.provider.getContext())}transferSubnetOwnershipTx({utxoSet:e,subnetId:t,subnetAuth:r,subnetOwners:s,feeState:n,fromAddresses:a,options:i,threshold:o,locktime:d}){const u=Ze(e.getUTXOs(),!0),c=(a??this.getAddresses("P")).map((e=>lt(e)[2])),p=lt(this.getChangeAddress("P"))[2],h=i?.changeAddresses??[p],g=s.map((e=>lt(e)[2]));return ct(n),l.pvm.newTransferSubnetOwnershipTx({changeAddressesBytes:h,fromAddressesBytes:c,utxos:u,minIssuanceTime:i?.minIssuanceTime,memo:i?.memo,subnetId:t,subnetAuth:r,subnetOwners:g,feeState:n,threshold:o,locktime:d},this.provider.getContext())}}class gt extends ht{constructor(e,t,r){if(super(r),this.pubkeyXP=e,this.pubkeyC=t,33!==t.length||33!==e.length)throw new Error("Public key must be 33 byte compressed public key")}static fromPublicKey(e,r,s){const a=t.strip0x(n.SigningKey.computePublicKey(e,!0)),i=t.strip0x(n.SigningKey.computePublicKey(r,!0)),o=Buffer.from(a,"hex"),d=Buffer.from(i,"hex");return new gt(o,d,s)}static fromMnemonic(e,t,r,s){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");if(!dt(r)||!dt(t))throw new Error("Not valid derivation path. Make sure it is a valid BIP44 path starting with m/");const n=i.mnemonicToSeedSync(e),o=a.fromSeed(n),d=o.derivePath(r),u=o.derivePath(t);return gt.fromPublicKey(u.publicKey,d.publicKey,s)}getAddress(e){const t="C"===e?this.pubkeyC:this.pubkeyXP;return this.provider.getAddress(t,e)}getAddressEVM(){return n.computeAddress(`0x${this.pubkeyC.toString("hex")}`)}getAddresses(e){return[this.getAddress(e)]}getChangeAddress(e){return this.getAddress(e)}getCurrentAddress(e){return this.getAddress(e)}}const mt={type:"zondax",getApp:e=>new v(e),async getVersion(e){const t=this.getApp(e);return(await t.getAppInfo()).appVersion},async getAddress(e,t,r={show:!1,hrp:"avax"}){const s=this.getApp(e);return{publicKey:(await s.getAddressAndPubKey(t.toString(),r.show,r.hrp)).publicKey}},async getXPUB(e,t){const r=this.getApp(e),s=await r.getExtendedPubKey(t,!1);return{pubKey:s.publicKey,chainCode:s.chain_code}},async signHash(e,t,r,s){const n=this.getApp(e),a=s.map((e=>e.toString(!0))),i=await n.signHash(r.toString(),a,t),o=i.signatures||new Map;return{hash:i.hash||Buffer.from(""),signatures:o}},async signTx(e,t,r,s,n){const a=this.getApp(e),i=s.map((e=>e.toString(!0))),o=n?.map((e=>e.toString(!0)))||[],d=await a.sign(r.toString(),i,t,o),u=d.signatures||new Map;return{...d,signatures:u}}};async function ft(e){return!(await mt.getVersion(e)>="0.6.0")}const{parse:xt}=l.utils;class vt extends ht{constructor(e,t,r){super(r),this.avmXpub=e,this.accountNode=a.fromBase58(e),this.evmWallet=new gt(t,t,r)}accountNode;evmWallet;externalIndex=0;internalIndex=0;pubkeyCache={};static fromMnemonic(e,t){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");const r=i.mnemonicToSeedSync(e),s=a.fromSeed(r),n=s.derivePath("m/44'/9000'/0'").neutered(),o=s.derivePath(L(0,_.BIP44)).neutered();return new vt(n.toBase58(),o.publicKey,t)}setExternalIndex(e){if(e<0)throw new Error("Index must be >= 0");this.externalIndex=e}setInternalIndex(e){if(e<0)throw new Error("Index must be >= 0");this.internalIndex=e}getPubKeyAtIndex(e,t=!1){if(e<0)throw new Error("Index must be >= 0");const r=`${t?1:0}/${e}`,s=this.pubkeyCache[r];if(s)return s;const{publicKey:n}=this.accountNode.derivePath(r);return this.pubkeyCache[r]=n,n}getAddressAtIndex(e,t=!1,r){const s=this.getPubKeyAtIndex(e,t);return this.provider.getAddress(s,r)}getExternalAddresses(e){const t=[];for(let r=0;r<=this.externalIndex;r++)t.push(this.getAddressAtIndex(r,!1,e));return t}getInternalAddresses(e){const t=[];for(let r=0;r<=this.internalIndex;r++)t.push(this.getAddressAtIndex(r,!0,e));return t}getAddresses(e){return"C"===e?[this.getCurrentAddress("C")]:"P"===e?[...this.getExternalAddresses(e)]:[...this.getInternalAddresses(e),...this.getExternalAddresses(e)]}getChangeAddress(e){return"C"===e?this.evmWallet.getAddress("C"):"P"===e?this.getAddressAtIndex(this.externalIndex,!1,"P"):this.getAddressAtIndex(this.internalIndex,!0,e)}getCurrentAddress(e){return"C"===e?this.evmWallet.getAddress("C"):this.getAddressAtIndex(this.externalIndex,!1,e)}incrementIndex(e){e?this.externalIndex++:this.internalIndex++}getAddressEVM(){return this.evmWallet.getAddressEVM()}getActiveIndices(){return{external:this.externalIndex,internal:this.internalIndex}}getInternalRawAddresses(){return this.getInternalAddresses("X").map((e=>Buffer.from(xt(e)[2])))}getExternalRawAddresses(){return this.getExternalAddresses("X").map((e=>Buffer.from(xt(e)[2])))}getRawAddressC(){return Buffer.from(xt(this.getCurrentAddress("C"))[2])}}const{isTransferOut:yt,isStakeableLockOut:wt}=l.utils;function bt(e){const t=e.output;return yt(t)||wt(t)?t.getOwners():[]}function At(e){const t=e.getTx();return l.avmSerial.isExportTx(t)||l.pvmSerial.isExportTx(t)?new Set(t.outs.map(bt).flat()):l.evmSerial.isExportTx(t)?new Set(t.exportedOutputs.map(bt).flat()):new Set((t.baseTx?.outputs??[]).map(bt).flat())}const{parse:Tt}=l.utils;class It extends vt{constructor(e,t,r){super(e,t,r)}getAdditionalAddressesByIndices(e,t,r){return"C"===r?[]:e.map((e=>{const s=this.getAddressAtIndex(e,t,r),[,,n]=Tt(s);return Buffer.from(n).toString("hex")}))}static async fromTransport(e,r){if(await ft(e))throw new Error("Unsupported ledger app version. Must be >= 0.6.0");const s=O(e),i=await mt.getXPUB(e,It.getAccountPath("X")),o=a.fromPublicKey(i.pubKey,i.chainCode),d=Ht(0,"EVM",{pathSpec:_.BIP44}),u=await s.getAddress(d,!1),c=n.SigningKey.computePublicKey(Buffer.from(u.publicKey,"hex"),!0),l=Buffer.from(t.strip0x(c),"hex");return new It(o.toBase58(),l,r)}static getAccountPath(e){switch(e){case"P":case"X":return"m/44'/9000'/0'";case"C":return"m/44'/60'/0'"}}async signMessage(e){throw new Error("not implemented")}filterOwnedAddresses(e,t,r){const s=this.getInternalRawAddresses().map((e=>e.toString("hex"))),n=this.getExternalRawAddresses().map((e=>e.toString("hex"))),a=new Set([...s,...r??[]]),i=new Set([...n,...t??[]]),o=new Set;return e.forEach((e=>{const t=e.toString("hex");if(a.has(t)){const e=[...a].indexOf(t);o.add(`1/${e}`)}else if(i.has(t)){const e=[...i].indexOf(t);o.add(`0/${e}`)}})),o}async signTx(e){if(!e.transport)throw new Error("Ledger transport not provided");const{tx:t,externalIndices:r,internalIndices:s}=e,n=t.getVM(),a=Buffer.from(t.toBytes()),i="EVM"===n?"C":"X",o=t.getAddresses().map((e=>Buffer.from(e))),d=this.getAdditionalAddressesByIndices(r??[],!1,i),u=this.getAdditionalAddressesByIndices(s??[],!0,i),c=[...this.filterOwnedAddresses(o,d,u).values()].map((e=>x.fromString(e))),l=[...At(t)].map((e=>Buffer.from(e))),p=[...this.filterOwnedAddresses(l).values()].map((e=>x.fromString(e)));return(await this.signTxBuffer({buffer:a,chain:i,transport:e.transport,signers:c,change:p})).forEach((e=>{t.addSignature(e)})),t}async signTxBuffer(e){if(!e.transport)throw new Error("Ledger transport not provided");if(!e.signers)throw new Error("Signers not provided");const t=e.change||[],r=x.fromString(It.getAccountPath(e.chain));return[...(await mt.signTx(e.transport,e.buffer,r,e.signers,t)).signatures.values()]}}const{strip0x:St}=l.utils;class Pt extends vt{constructor(e,t,r){const s=a.fromBase58(e).neutered(),i=new n.SigningKey(t),o=Buffer.from(St(i.compressedPublicKey),"hex");super(s.toBase58(),o,r),this.evmPrivKey=t,this.accountNode=a.fromBase58(e)}accountNode;static fromMnemonic(e,t){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");const r=i.mnemonicToSeedSync(e),s=a.fromSeed(r),n=s.derivePath("m/44'/9000'/0'"),o=s.derivePath(Ht(0,"EVM",{pathSpec:_.BIP44}));if(!o.privateKey)throw new Error("Unable to derive EVM private key.");return new Pt(n.toBase58(),o.privateKey,t)}async signTx(e){const t=this.getSigningKeys(e);return await l.addTxSignatures({unsignedTx:e.tx,privateKeys:t}),e.tx}getExternalPrivateKeys(e){const t=[];for(let e=0;e<=this.externalIndex;e++){const r=this.accountNode.derivePath(`0/${e}`);if(!r.privateKey)throw new Error("Unable to get private key.");t.push(r.privateKey)}const r=(e??[]).reduce(((e,t)=>{if(t>this.externalIndex){const r=this.accountNode.derivePath(`0/${t}`);if(!r.privateKey)throw new Error("Unable to get private key.");e.push(r.privateKey)}return e}),[]);return[...t,...r]}getInternalPrivateKeys(e){const t=[];for(let e=0;e<=this.internalIndex;e++){const r=this.accountNode.derivePath(`1/${e}`);if(!r.privateKey)throw new Error("Unable to get private key.");t.push(r.privateKey)}const r=(e??[]).reduce(((e,t)=>{if(t>this.internalIndex){const r=this.accountNode.derivePath(`1/${t}`);if(!r.privateKey)throw new Error("Unable to get private key.");e.push(r.privateKey)}return e}),[]);return[...t,...r]}getSigningKeys(e){const{tx:t,externalIndices:r,internalIndices:s}=e,n=t.getVM();return"AVM"===n?[...this.getInternalPrivateKeys(s),...this.getExternalPrivateKeys(r)]:"PVM"===n?this.getExternalPrivateKeys(r):[this.evmPrivKey]}async signTxBuffer(e){throw new Error("not implemented")}async signMessage(e){throw new Error("not implemented")}}const{getPublicKey:Bt,sign:Ct,signHash:kt}=l.secp256k1,{addChecksum:Et}=l.utils;class Mt extends gt{privKeyXP;privKeyC;constructor(e,t,r){super(Buffer.from(Bt(e)),Buffer.from(Bt(t)),r),this.privKeyXP=e,this.privKeyC=t}static fromMnemonic(e,t,r,s){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");if(!dt(r)||!dt(t))throw new Error("Not valid derivation path. Make sure it is a valid BIP44 path starting with m/");const n=i.mnemonicToSeedSync(e),o=a.fromSeed(n),d=o.derivePath(t),u=o.derivePath(r);if(!d.privateKey||!u.privateKey)throw new Error("Failed to generate private keys.");return new Mt(d.privateKey,u.privateKey,s)}async signMessage(e){const t=Me(e.message),r=this.getSigningKey(e.chain);return Buffer.from(Et(await kt(t,r)))}getSigningKey(e){return"C"===e?this.privKeyC:this.privKeyXP}async signTx(e){return await l.addTxSignatures({unsignedTx:e.tx,privateKeys:[this.privKeyC,this.privKeyXP]}),e.tx}async signTxBuffer(e){const t=this.getSigningKey(e.chain);return[Buffer.from(await Ct(e.buffer,t))]}}const{strip0x:Vt}=l.utils;class Dt extends gt{constructor(e,t,r,s,a){const i=l.utils.strip0x(n.SigningKey.computePublicKey(e,!0)),o=l.utils.strip0x(n.SigningKey.computePublicKey(r,!0));if(super(Buffer.from(i,"hex"),Buffer.from(o,"hex"),a),this.pathXP=t,this.pathC=s,!dt(t)||!dt(s))throw new Error("Invalid path configuration.")}static async fromTransport(e,t,r,a){if(await ft(e))throw new Error("Ledger app not supported. Must be version >= 0.6.0");if(!dt(t)||!dt(r))throw new Error("Invalid path configuration.");const i=new s(e),o=await i.getAddress(r,!1),d=await i.getAddress(t,!1),u=Buffer.from(Vt(o.publicKey),"hex"),c=Buffer.from(Vt(d.publicKey),"hex"),l=Buffer.from(Vt(n.SigningKey.computePublicKey(u,!0)),"hex"),p=Buffer.from(Vt(n.SigningKey.computePublicKey(c,!0)),"hex");return new Dt(p,t,l,r,a)}async signMessage(e){if(!e.transport||!e.message)throw new Error("Unable to sign message. Incomplete or invalid request.");const t=x.fromString(this.getAccountPath(e.chain)),r=x.fromString(this.getPartialSignerPath(e.chain)),s=Me(e.message),n=(await mt.signHash(e.transport,s,t,[r])).signatures.get(r.toString(!0));if(!n)throw new Error("Failed to sign message.");return n}getFullSignerPath(e){return"C"===e?this.pathC:this.pathXP}getPartialSignerPath(e){return this.getFullSignerPath(e).split("/").slice(4).join("/")}getAccountPath(e){return this.getFullSignerPath(e).split("/").slice(0,4).join("/")}async signTx(e){if(!e.transport)throw new Error("Ledger transport not provided");const t=e.tx,r=t.getVM(),s=Buffer.from(t.toBytes()),n="EVM"===r?"C":"X";return(await this.signTxBuffer({buffer:s,chain:n,transport:e.transport})).forEach((e=>{t.addSignature(e)})),t}async signTxBuffer(e){if(!e.transport)throw new Error("Ledger transport not provided");const t=x.fromString(this.getAccountPath(e.chain)),r=x.fromString(this.getPartialSignerPath(e.chain));return[...(await mt.signTx(e.transport,e.buffer,t,[r],[r])).signatures.values()]}}const{parse:Kt}=l.utils;const Ot={C:60,X:9e3,P:9e3};var Ut=Object.freeze({__proto__:null,AbstractProvider:me,AddressWallet:class extends ht{constructor(e,t,r,s,a){if(super(a),this.addressC=e,this.addressCoreEth=t,this.xpAddresses=r,this.xpChangeAddress=s,r.length<1)throw new Error("Must have at least 1 xp address.");if(!n.isAddress(e))throw new Error("Not a valid C-Chain (EVM) address");if(r.some((e=>!He(e,!1))))throw new Error("Given addresses must be valid avalanche bech32 addresses without the chain alias prefix");if(!He(t,!1))throw new Error("Given CoreEth address must be valid avalanche bech32 addresses without the chain alias prefix");this.setChangeAddress(s)}setChangeAddress(e){if(!He(e,!1))throw new Error("Given address must be valid avalanche bech32 addresses without the chain alias prefix");this.xpChangeAddress=e}getAddressEVM(){return this.addressC}getAddresses(e){return("C"===e?[this.addressCoreEth]:this.xpAddresses).map((t=>this.provider.formatAddress(t,e)))}getChangeAddress(e){const t="C"===e?this.addressCoreEth:this.xpChangeAddress;return this.provider.formatAddress(t,e)}getCurrentAddress(e){const t="C"===e?this.addressCoreEth:this.xpAddresses[0];return this.provider.formatAddress(t,e)}},DevnetContext:ye,FujiContext:ve,JsonRpcProvider:we,LedgerLiveSigner:class{constructor(e){this.accountIndices=e}#r(e){return`m/44'/${Ot[e]}'`}#s(e,t){return`${this.#r(e)}/${t}'`}async signMessage(e){if(!e.transport||!e.message)throw new Error("Unable to sign message. Incomplete or invalid request.");if(!this.accountIndices.length)throw new Error("No account indices provided. At least one account index is required to sign a message.");const t=x.fromString(this.#s(e.chain,this.accountIndices[0])),r=x.fromString("0/0"),s=Me(e.message),n=(await mt.signHash(e.transport,s,t,[r])).signatures.get(r.toString(!0));if(!n)throw new Error("Failed to sign message.");return n}async signTx(e){if(!e.transport)throw new Error("Ledger transport not provided");const t=e.tx,r=t.getVM(),s=Buffer.from(t.toBytes()),n="EVM"===r?"C":"AVM"===r?"X":"P",a=new Set(e.externalIndices??this.accountIndices);for(const r of a){const a=x.fromString(this.#s(n,r));(await this.#n(a,{buffer:s,chain:n,transport:e.transport})).forEach((e=>{t.addSignature(e)}))}return t}async#n(e,t){if(!t.transport)throw new Error("Ledger transport not provided");return[...(await mt.signTx(t.transport,t.buffer,e,t.signers??[x.fromString("0/0")],t.change??[x.fromString("0/0")])).signatures.values()]}async signTxBuffer(e){if(!this.accountIndices.length)throw new Error("No account indices provided. At least one account index is required to sign a tx buffer.");const t=x.fromString(this.#s(e.chain,this.accountIndices[0]));return this.#n(t,e)}},LedgerSigner:Dt,LedgerWallet:It,MainnetContext:xe,MnemonicWallet:Pt,MnemonicWalletVoid:vt,P_CHAIN_TX_SIZE_LIMIT:65536,SimpleLedgerSigner:class{constructor(e,t,r,s=_.BIP44){this.activeAccountIndex=e,this.provider=t,this.pathSpec=s,r&&(this.accountNode=a.fromBase58(r))}accountNode;reSerializeTx(e,t){return e instanceof l.EVMUnsignedTx||"C"===t?l.EVMUnsignedTx.fromJSON(JSON.stringify(e.toJSON())):l.UnsignedTx.fromJSON(JSON.stringify(e.toJSON()))}getChainAlias(e){return"EVM"===e.getVM()?"C":"X"}getAccountPath(e){switch(e){case"X":case"P":return`m/44'/9000'/${this.activeAccountIndex}'`;case"C":return`m/44'/60'/${this.pathSpec===_.LedgerLive?this.activeAccountIndex:0}'`}}getAddressOfPath(e,t){if(!this.accountNode)return null;const{publicKey:r}=this.accountNode.derivePath(e),s=this.provider.getAddress(r,t);return Buffer.from(Kt(s)[2]).toString("hex")}getAddressPathMap(e){const{tx:t,externalIndices:r,internalIndices:s}=e,n=this.getChainAlias(t),a="EVM"===e.tx.getVM()?`0/${this.pathSpec===_.LedgerLive?0:this.activeAccountIndex}`:"0/0",i=new Map;if("C"===n||!this.accountNode)return i;const o=(r??[]).map((e=>`0/${e}`)),d=(s??[]).map((e=>`1/${e}`)),u=[a,...o,...d];for(const e of u){const t=this.getAddressOfPath(e,n);t&&i.set(t,e)}return i}getAddressBipPaths(e,t,r){return 0===t.size?[x.fromString("C"===r?`0/${this.pathSpec===_.LedgerLive?0:this.activeAccountIndex}`:"0/0")]:e.reduce(((e,r)=>{const s=t.get(Buffer.from(r).toString("hex"));return s&&e.push(x.fromString(s)),e}),[])}async signTx(e){if(!e.transport)throw new Error("Ledger transport not provided");const t=this.getChainAlias(e.tx),r=this.reSerializeTx(e.tx,t),s=Buffer.from(r.toBytes()),n=this.getAddressPathMap(e),a=this.getAddressBipPaths(r.getAddresses(),n,t),i=this.getAddressBipPaths([...At(r)],n,t);return(await this.signTxBuffer({buffer:s,chain:t,transport:e.transport,signers:a,change:i})).forEach((e=>{r.addSignature(e)})),r}async signTxBuffer(e){if(!e.transport)throw new Error("Ledger transport not provided");if(!e.signers)throw new Error("Signers not provided");const t=e.change||[],r=x.fromString(this.getAccountPath(e.chain));return[...(await mt.signTx(e.transport,e.buffer,r,e.signers,t)).signatures.values()]}async signMessage(e){if(!e.transport||!e.message)throw new Error("Unable to sign message. Incomplete or invalid request.");const t="C"===e.chain?this.activeAccountIndex:0,r=e.signer||x.fromString(`0/${t}`);if(2!=r.toPathArray().length)throw new Error("Given signer path must have a depth of 2. Ex. 0/0, 0/1");const s=Me(e.message),n=(await mt.signHash(e.transport,s,x.fromString(this.getAccountPath(e.chain)),[r])).signatures.get(r.toString(!0));if(!n)throw new Error("Failed to sign message.");return n}},SimpleSigner:class{accountNodeXP;signerNodeEVM;activeAccountIndex;constructor(e,t){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");if(t<0||t%1!=0)throw new Error("Invalid account index.");const r=i.mnemonicToSeedSync(e),s=a.fromSeed(r);this.accountNodeXP=s.derivePath(`m/44'/9000'/${t}'`);const n=s.derivePath(Ht(t,"EVM",{pathSpec:_.BIP44}));this.signerNodeEVM=n,this.activeAccountIndex=t}getAdditionalKeys(e,t){return[...new Set(e??[])].reduce(((e,r)=>{const s=this.accountNodeXP.derivePath(`${t?1:0}/${r}`);if(!s.privateKey)throw new Error("Unable to get private key.");return e.push(s.privateKey),e}),[])}getSigningKeys(e,t,r){if("EVM"===e){if(!this.signerNodeEVM.privateKey)throw new Error("Unable to derive EVM private key.");return[this.signerNodeEVM.privateKey]}const s=this.accountNodeXP.derivePath("0/0");if(!s.privateKey)throw new Error("Unable to derive X/P private key.");const n=this.getAdditionalKeys(t,!1);if("AVM"===e){const e=this.getAdditionalKeys(r,!0);return[s.privateKey,...n,...e]}if("PVM"===e)return[s.privateKey,...n]}async signTx(e){const{tx:t,externalIndices:r,internalIndices:s}=e,n=t.getVM(),a=this.getSigningKeys(n,r,s);if(!a?.length)throw new Error("Unable to sign transaction: signing keys are missing.");return await l.addTxSignatures({unsignedTx:t,privateKeys:a}),e.tx}async signTxBuffer(e){throw new Error("Not implemented")}getActiveAccountNode(e){switch(e){case"X":case"P":return this.accountNodeXP.derivePath("0/0");case"C":return this.signerNodeEVM}}async signMessage(e){const t=this.getActiveAccountNode(e.chain);if(!t.privateKey)throw Error("Unable to sign message, key not found.");const r=Me(e.message),s=await l.secp256k1.signHash(r,t.privateKey);return Buffer.from(s)}},SizeSupportedTx:st,StaticSigner:Mt,TxType:G,WalletAbstract:ht,WalletVoid:gt,addSignaturesToAvalancheTx:async({transactionHex:e,signatures:t,chainAlias:r,provider:s,utxos:n})=>{if(!t.length)throw new Error("signatures were not provided");const a=await le({transactionHex:e,chainAlias:r,provider:s,utxos:n});await Promise.all(t.map((e=>a.addSignature(e))));const i=a.getCredentials(),o=a.getSigIndices().reduce(((e,t,r)=>{const s=t.map((e=>{const t=i[r]?.toJSON()[e];if(!t)throw new Error(`Failed to sign [${r}, ${e}]`);return t}));return e.push(new l.Credential(s)),e}),[]),d=new l.UnsignedTx(a.getTx(),a.getInputUtxos(),a.addressMaps,o);return{signedTxHex:oe(new l.avaxSerial.SignedTx(a.getTx(),o)),hasAllSignatures:d.hasAllSignatures()}},convertGlacierUtxo:Se,createAvalancheEvmUnsignedTx:async({txBytes:e,fromAddress:t,vm:r,credentials:s,utxos:n})=>{const a=Pe(r,e),i=Be(t)[2],o=Ce(i);if(l.evmSerial.isExportTx(a))return new l.EVMUnsignedTx(a,[],new ke([Ee.fromJSON([[o,0]])]),s);if(l.evmSerial.isImportTx(a)){const e=ke.fromTransferableInputs(a.importedInputs,n,BigInt(Math.floor((new Date).getTime()/1e3)),[i]);return new l.UnsignedTx(a,n,e,s)}throw new Error("Unsupported transaction type")},createAvalancheUnsignedTx:ee,digestMessage:Me,emptySignature:ae,getAddressFromXpub:function(e,t,r,s,n=!1){if(t<0)throw new Error("Account index must be >= 0");const i=n?"1":"0",o=a.fromBase58(e).derivePath(`${i}/${t}`).publicKey;return r.getAddress(o,s)},getAddressPublicKeyFromXpub:function(e,t){if(t<0)throw new Error("Account index must be >= 0");return a.fromBase58(e).derivePath(`0/${t}`).publicKey},getAssetBalance:function(e,t){const r=e.getAssetDict()[t],s={locked:BigInt(0),available:BigInt(0),multisig:BigInt(0),lockedStakeable:BigInt(0),total:BigInt(0)};if(!r)return s;const n=r.getUTXOs(),a=Ue();return n.forEach((e=>{const t=Ne(e);s[t.threshold>1?"multisig":t.locktime>a?"locked":t.stakeableLocktime>a?"lockedStakeable":"available"]+=t.amount})),s.total=s.locked+s.lockedStakeable+s.multisig+s.available,s},getAvalancheDerivationPath:ut,getLedgerProvider:async function(e){return mt},getMaximumUtxoSet:function({wallet:e,utxos:t,sizeSupportedTx:r,limit:s=65536,feeState:n}){const{sortFunction:a,unsignedTxBuilder:i}=ot[r],o=Ue(),d=a(t.filter((e=>{const{locktime:t,stakeableLocktime:s}=rt(e);return t<o&&(s<o||("AddPermissionlessDelegator"===r||"AddPermissionlessValidator"===r))}))),u=function(e,t,r){let s=0,n=e.length-1;if(t(e)<=r)return n;let a=-1;for(;s<=n;){const i=Math.floor((s+n)/2);t(e.slice(0,i+1))<=r?(a=i,s=i+1):n=i-1}return a}(d,(t=>{try{return function(e){const t=e.getInputUtxos().reduce(((e,t)=>e+(8+65*rt(t).threshold)),0);return 6+e.toBytes().length+t}(i(e,t,n))}catch(e){return console.log("Unable to estimate size of utxos",{e:e,utxos:t.map(rt)}),s+1}}),s);return-1===u?[]:d.slice(0,u+1)},getPaginatedUTXOs:Oe,getPchainUnixNow:async function(e){const t=await e.getApiP().getTimestamp(),r=new Date(t.timestamp),s=Math.floor(r.getTime()/1e3);return BigInt(s)},getStakeForAddresses:_e,getStakedAssetBalance:function(e){const{stakedOutputs:t}=e,r={unlockedStaked:BigInt(0),lockedStaked:BigInt(0),total:BigInt(0)};return t.forEach((e=>{r[l.utils.isStakeableLockOut(e)?"lockedStaked":"unlockedStaked"]+=e.amount()})),r.total=r.lockedStaked+r.unlockedStaked,r},getUTXOsForAddresses:Ke,getUnixNow:Ue,getUtxosByTxFromGlacier:async({transactionHex:e,chainAlias:t,network:r,url:s,token:n,headers:a})=>{const i=Y(t),o=Xe(e),d=Fe(i,o);if(l.evmSerial.isExportTx(d))return[];const u=(e=>{if(l.evmSerial.isImportTx(e)||l.avmSerial.isImportTx(e)||l.pvmSerial.isImportTx(e))return e.sourceChain.toString();const t=e.getVM();switch(t){case l.EVM:return h.BlockchainId.C_CHAIN;case l.AVM:return h.BlockchainId.X_CHAIN;case l.PVM:return h.BlockchainId.P_CHAIN;default:throw new Error(`Unable to get chain for VM type "${t}"`)}})(d),c=Le(d),p=new h.Glacier({BASE:s,TOKEN:n,HEADERS:a}),g=[...new Set(c.map((e=>e.utxoID.txID.toString())))],m=await Promise.all(g.map((e=>p.primaryNetworkTransactions.getTxByHash({blockchainId:u,network:r,txHash:e}))));return c.reduce(((e,t)=>{const s=m.find((e=>e.txHash===t.utxoID.txID.toString()));if(!s)throw new Error(`Unable to find parent tx "${t.utxoID.txID.toString()}"`);const n=s.emittedUtxos.find((e=>e.utxoId===t.utxoID.ID()));if(!n)throw new Error(`Unable to find UTXO "${t.utxoID.ID()}" at index "${t.utxoID.outputIdx.value()}"`);const a=Se(n,r);return e.push(a),e}),[])},getVmByChainAlias:Y,getXpubFromMnemonic:function(e,t){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");const r=i.mnemonicToSeedSync(e);return a.fromSeed(r).derivePath(`44'/9000'/${t}'`).neutered().toBase58()},isAddDelegatorTx:function(e){return"add_delegator"===e.type},isAddPermissionlessDelegatorTx:function(e){return"add_permissionless_delegator"===e.type},isAddPermissionlessValidatorTx:function(e){return"add_permissionless_validator"===e.type},isAddSubnetValidatorTx:function(e){return"add_subnet_validator"===e.type},isAddValidatorTx:function(e){return"add_validator"===e.type},isBaseTx:function(e){return"base"===e.type},isBech32Address:He,isConvertSubnetToL1Tx:function(e){return"convert_subnet_to_l1"===e.type},isCreateChainTx:function(e){return"create_chain"===e.type},isCreateSubnetTx:function(e){return"create_subnet"===e.type},isDisableL1ValidatorTx:function(e){return"disable_l1_validator"===e.type},isExportTx:function(e){return"export"===e.type},isImportTx:function(e){return"import"===e.type},isIncreaseL1ValidatorBalance:function(e){return"increase_l1_validator_balance"===e.type},isObsidianApp:ft,isRegisterL1ValidatorTx:function(e){return"register_l1_validator"===e.type},isRemoveSubnetValidatorTx:function(e){return"remove_subnet_validator"===e.type},isSetL1ValidatorWeightTx:function(e){return"set_l1_validator_weight"===e.type},isTransferSubnetOwnershipTx:function(e){return"transfer_subnet_ownership"===e.type},isTransformSubnetTx:function(e){return"transform_subnet"===e.type},parseAvalancheTx:async function(e,t,r,{feeTolerance:s=50,baseFee:n}={}){try{const a=t.getContext(),i=e.getTx(),o=(e=>{for(const t of Object.values(We)){const r=t(e);if(null!==r)return r}throw new Error("no parser found for tx")})(i),d=je(i,a),u=Je(i),c=ze(i).get(a.avaxAssetID)??BigInt(0),p=d.get(a.avaxAssetID)??BigInt(0),h=u.get(a.avaxAssetID)??BigInt(0);let g=n;void 0===g&&(g=0n,l.evmSerial.isImportExportTx(i)?(g=await t.getApiC().getBaseFee()/BigInt(1e9),0n===g&&(g=1n)):"PVM"===i.vm&&(g=await t.getApiP().getFeeState().then((e=>e.price)).catch((()=>BigInt(0)))));const{isValid:m,txFee:f}=Ge({unsignedTx:e,context:a,burnedAmount:p,baseFee:g,feeTolerance:s});return await o({feeData:{totalAvaxBurned:p,totalAvaxOutput:h,totalAvaxInput:c,isValidAvaxBurnedAmount:m,txFee:f,baseFee:g},assetId:a.avaxAssetID,provider:t,currentAddress:r})}catch(e){return{type:G.Unknown}}},populateCredential:ie,signedTxToHex:oe,sortUTXOsByAmount:Ze,sortUTXOsByAmountAscending:tt,sortUTXOsByAmountDescending:et,sortUTXOsStaking:Qe,verifyDerivationPath:dt});const Nt=(e,t)=>{const r=w.getTransactionDecoder().decode(w.getBase64Encoder().encode(e)),s=w.getCompiledTransactionMessageDecoder().decode(r.messageBytes);return w.decompileTransactionMessageFetchingLookupTables(s,t)},_t=Symbol(),Lt=async({mint:e,owner:t,provider:r})=>{const[s]=await A.findAssociatedTokenPda({mint:w.address(e),owner:w.address(t),tokenProgram:A.TOKEN_PROGRAM_ADDRESS}),n=await r.getAccountInfo(s,{encoding:"base64"}).send();return{address:s,exists:Boolean(n.value),info:n}},Xt=(e,t=!0)=>`${t?"m/":""}44'/501'/${e}'/0'`;class Ft{#a;#i;constructor(e){this.#a=Uint8Array.from(e),this.#i=w.address(S.base58.encode(I.ed25519.getPublicKey(this.#a)))}static fromMnemonic(e,t){const r=i.mnemonicToSeedSync(e),s=P.fromMasterSeed(Uint8Array.from(r)).derive(`m/44'/501'/${t}'/0'`);return new Ft(Buffer.from(s.privateKey))}#o(e){try{return w.getCompiledTransactionMessageDecoder().decode(e),!0}catch{return!1}}async signMessage(e){const t=S.base64.decode(e);if(this.#o(t))throw new Error("Cannot use signMessage() to sign transactions!");return S.base64.encode(I.ed25519.sign(t,this.#a))}async signTx(e,t){const r=await Nt(e,t),{signatures:s,messageBytes:n,...a}=w.compileTransaction(r);if(!this.#d(s))return e;const i=S.base58.encode(I.ed25519.sign(Uint8Array.from(n),this.#a));return w.assertIsSignature(i),w.getBase64EncodedWireTransaction({...a,messageBytes:n,signatures:{...s,[this.#i]:S.base58.decode(i)}})}#d(e){return this.#i in e&&!e[this.#i]}}function Ht(e,t,r={withRoot:!0}){if(e<0)throw new Error("Account index can not be less than 0.");switch(t){case"EVM":if(!r.pathSpec)throw new Error("Path spec is required for EVM: either BIP44 or Ledger Live");return L(e,r.pathSpec,r.withRoot);case"AVM":case"PVM":return ut(e,r.withRoot);case"SVM":return Xt(e,r.withRoot);default:throw new Error(`Unknown derivation path for VM: ${t}`)}}class $t extends z{keypair;constructor(t,r){const s=e.ECPair.fromPrivateKey(t);super(s.publicKey,r),this.keypair=s}static async fromMnemonic(e,t,r,s=_.BIP44){if(t<0)throw new Error("Account index must be >= 0");if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");const n=await i.mnemonicToSeed(e),o=a.fromSeed(n),d=Ht(t,"EVM",{pathSpec:s}),u=o.derivePath(d);if(!u.privateKey)throw new Error("Unable to derive private key from the given mnemonic.");return new $t(u.privateKey,r)}signTx(e,t){const r=E(e,t,this.provider.getNetwork());return Promise.resolve(this.signPsbt(r))}static fromEthersWallet(e,t){const r=e.privateKey;if(!r)throw new Error("Unable to get private key from ethers wallet.");const s=Buffer.from(r.substring(2),"hex");return new $t(s,t)}signPsbt(e){return e.signAllInputs(this.keypair),e.validateSignaturesOfAllInputs(),e.finalizeAllInputs(),e.extractTransaction()}}const qt=e.networks;exports.Avalanche=Ut,exports.BitcoinLedgerWallet=class extends z{constructor(e,t,r,s,n){super(e,r),this.derivationPath=t,this.transport=s,this.walletPolicyDetails=n}setTransport(e){this.transport=e}async signTx(e,t){const r=function(e){return new u.AppClient(e)}(this.transport),s=this.ecPair.publicKey,n=this.provider.getNetwork(),a=await r.getMasterFingerprint(),i=j(e,t,n,Buffer.from(a,"hex"),s,this.derivationPath),{policy:o,hmac:d}=this.walletPolicyDetails,c=await r.signPsbt(i,o,d),l=J(i,n,s,this.derivationPath);if(c.forEach((e=>{const[t,r]=e;l.updateInput(t,{partialSig:[{signature:r.signature,pubkey:r.pubkey}]})})),!l.validateSignaturesOfAllInputs())throw new Error("Failed to validate signatures");return l.finalizeAllInputs(),l.extractTransaction()}},exports.BitcoinProvider=class extends k{constructor(e=!0,r,s,n,a){super(),this.isMainnet=e,this.extraParams=a;const i=r?{headers:{"api-key":r}}:{},o=e?"https://btcbook.nownodes.io":"https://btcbook-testnet.nownodes.io";this.#u=new t.HttpClient(s||o,i);const d=e?"https://btc.nownodes.io":"https://btc-testnet.nownodes.io";this.#c=new t.HttpClient(n||d,i)}#u;#c;async#l(e,t){return this.isMainnet||t?(await Promise.all(e.map((e=>this.#c.post("",e,{},this.extraParams))))).flat():this.#c.post("",e,{},this.extraParams)}async getTxHex(e){return(await this.#u.post(`/api/v2/tx/${e}`,{},{},this.extraParams)).hex}async getUTXOs(e,t=!0,r){const s=await this.#u.post(`/api/v2/utxo/${e}`,{},{},this.extraParams);if(!s?.length)return{confirmed:[],unconfirmed:[]};const n=s.map(this._parseUtxo),a=e=>({confirmed:e.filter((e=>e.confirmations>0)),unconfirmed:e.filter((e=>0===e.confirmations))});if(!t)return a(n);return a(await this.getScriptsForUtxos(n,r))}async getAddressFromScript(e){const t=await this.#c.post("",{jsonrpc:"2.0",id:`decode-script-${e}`,method:"decodescript",params:[e]},{},this.extraParams);if(t.result)return t.result.address;throw new Error(`Unable to resolve address for script: ${e}. ${t.error.message}`)}async getScriptsForUtxos(e,t){const[r,s]=e.reduce((([e,t],r)=>r.script?[[...e,r],t]:[e,[...t,r]]),[[],[]]),n=s.map(((e,t)=>({jsonrpc:"2.0",method:"gettxout",params:[e.txHash,e.index],id:`${t}`}))),a=n.length?(await this.#l(n,t)).sort(((e,t)=>Number(e.id)-Number(t.id))):[];return[...r,...s.map(((e,t)=>({...e,script:a[t]?.result?.scriptPubKey.hex})))]}_parseUtxo(e){return{...e,txHash:e.txid,index:e.vout,value:Number(e.value),blockHeight:e.height,script:e.script,confirmations:e.confirmations}}async getBalances(e){const t=await this.#u.post(`/api/v2/address/${e}`,{},{},this.extraParams);return{available:BigInt(t.balance),pending:BigInt(t.unconfirmedBalance),final:BigInt(t.balance)+BigInt(t.unconfirmedBalance)}}async getChainHeight(){return(await this.#c.post("",{jsonrpc:"2.0",id:"nownodes",method:"getblockcount",params:[]},{},this.extraParams)).result}async getFeeRates(e){const t={jsonrpc:"2.0",method:"estimatesmartfee"},r=await this.#l([{...t,id:"1",params:[1]},{...t,id:"2",params:[3]},{...t,id:"3",params:[6]}],e).then((e=>e.sort(((e,t)=>Number(e.id)-Number(t.id))).map((e=>1e8*(e.result?.feerate??0)))));return{high:Math.ceil(r[0]/1024)||1,medium:Math.ceil(r[1]/1024)||1,low:Math.ceil(r[2]/1024)||1}}getNetwork(){return this.isMainnet?e.networks.bitcoin:e.networks.testnet}async issueRawTx(e){return await this.#c.post("",{jsonrpc:"2.0",id:"nownodes",method:"sendrawtransaction",params:[e]},{},this.extraParams).then((e=>e.result))}async getTransaction(e){const t=await this.#u.post(`/api/v2/tx/${e}`,{},{},this.extraParams);return{block:t.blockHeight,fees:Number(t.fees),confirmations:t.confirmations,amount:Number(t.value),hash:t.txid,addresses:Array.from(new Set([...t.vin.map((e=>e.addresses||[])).flat(),...t.vout.map((e=>e.addresses||[])).flat()])),blockTime:t.blockTime,inputs:[...t.vin.map((e=>({...e,value:Number(e.value)})))],outputs:[...t.vout.map((e=>({...e,value:Number(e.value)})))]}}async getTxHistory(e){const t=await this.#u.post(`/api/v2/address/${e}`,{},{},this.extraParams),r=t.txids?.slice(0,25)??[];return await Promise.allSettled(r.map((async t=>{try{const r=await this.#u.post(`/api/v2/tx/${t}`,{},{},this.extraParams);return function(e,t){const r=t.vin.filter((t=>t.addresses?.includes(e))),s=t.vout.filter((t=>t.addresses?.includes(e))),n=t.vin.filter((t=>!t.addresses?.includes(e))),a=t.vout.filter((t=>!t.addresses?.includes(e))),i=r.reduce(((e,t)=>e+BigInt(t.value)),0n),o=s.reduce(((e,t)=>e+BigInt(t.value)),0n),d=i>o;let u=o-i;d&&(u+=BigInt(t.fees));const c=n.map((e=>e.addresses||[])).flat(),l=a.map((e=>e.addresses||[])).flat(),p=d?l:c,h=p.filter(((e,t)=>p.indexOf(e)===t)),g=s.filter((e=>(e.addresses?.length||0)>1)).length>0;return{addresses:h,isSender:d,block:t.blockHeight,fee:Number(t.fees),confirmations:t.confirmations,amount:Number(u),hash:t.txid,containsMultisig:g,receivedTime:t.blockTime,confirmedTime:t.confirmations>0?t.blockTime:void 0}}(e,r)}catch(e){console.log(`Unable to parse full tx ${t}.`)}}))).then((e=>e.map((e=>"fulfilled"===e.status&&e.value?e.value:void 0)).filter((e=>void 0!==e))))}async waitForTx(e,{maxAttempts:t=20,attempt:r=1,pollInterval:s=500}={}){try{return await this.getTransaction(e)}catch(n){if(r>=t)throw n;return await new Promise((e=>setTimeout(e,s))),this.waitForTx(e,{maxAttempts:t,attempt:r+1,pollInterval:s})}}},exports.BitcoinProviderAbstract=k,exports.BitcoinWallet=$t,exports.BitcoinWalletAbstract=z,exports.BitcoinWalletVoid=class extends z{constructor(e,t){super(e,t)}signTx(e){throw new Error("Void wallets can not sign.")}},exports.BtcNetworks=qt,exports.DerivationPath=_,exports.ETH_ACCOUNT_PATH=N,exports.ETH_COIN_PATH=U,exports.JsonRpcBatchInternal=q,exports.LedgerSigner=W,exports.SolanaLedgerSigner=class{#p;#h;constructor(e,t){this.#p=Xt(e,!1),this.#h=t}async signTx(e,t){const r=await Nt(e,t),{signatures:s,messageBytes:n,...a}=w.compileTransaction(r),i=new T(this.#h),{address:o}=await i.getAddress(this.#p),d=w.address(S.base58.encode(Uint8Array.from(o)));if(!this.#d(d,s))return e;const{signature:u}=await i.signTransaction(this.#p,Buffer.from(n)),c=S.base58.encode(Uint8Array.from(u));return w.assertIsSignature(c),w.getBase64EncodedWireTransaction({...a,messageBytes:n,signatures:{...s,[d]:S.base58.decode(c)}})}#d(e,t){return e in t&&!t[e]}},exports.SolanaSigner=Ft,exports.addEncodedSigToPsbt=function(e,t,r,s){const n=[{pubkey:t,signature:e}];r.updateInput(s,{partialSig:n})},exports.compileSolanaTx=e=>w.compileTransaction(e),exports.createPSBTV2=j,exports.createPsbt=E,exports.createTransferTx=D,exports.createWalletPolicy=function(e,t,r,s){const n=new u.DefaultWalletPolicy("wpkh(@0/**)",`[${e}/44'/60'/${t}']${r}`);return new u.WalletPolicy(s,"wpkh(@0/**)",n.keys)},exports.deserializeTransactionMessage=Nt,exports.formatAddressForNetworkBech32=function(t,r){const s=e.address.fromBech32(t);return e.address.toBech32(s.data,s.version,r.bech32)},exports.getAddressDerivationPath=Ht,exports.getAddressFromXPub=function(e,t){const r=R(e,t);return n.computeAddress(`0x${r.toString("hex")}`)},exports.getAddressPrivateKeyFromXPriv=function(e,t){const r=a.fromBase58(e).derivePath(`0/${t}`);if(!r.privateKey)throw new Error("Unable to derive private key.");return r.privateKey},exports.getAddressPublicKeyFromXPub=R,exports.getAppEth=O,exports.getBech32Address=K,exports.getBech32AddressFromXPub=function(e,t,r){return K(R(e,t),r)},exports.getBtcAddressFromPubKey=function(e,r){const s=t.strip0x(n.SigningKey.computePublicKey(e,!0));return K(Buffer.from(s,"hex"),r)},exports.getEVMDerivationPath=L,exports.getEvmAddressFromPubKey=function(e){return n.computeAddress(`0x${e.toString("hex")}`)},exports.getLedgerAppInfo=async function(e){const t=await e.send(176,1,0,0),r=t.readUInt8(1),s=t.readUInt8(2+r),n=t.subarray(2,2+r),a=t.subarray(2+r+1,2+r+1+s);return{applicationName:n.toString("ascii"),version:a.toString("ascii")}},exports.getLedgerExtendedPublicKey=async function(e,t=!1,r){const s=O(e),n=await s.getAddress(r??N,t,!0),a=new y;return a.publicKey=B.Buffer.from(n.publicKey,"hex"),a.chainCode=B.Buffer.from(n.chainCode,"hex"),a.publicExtendedKey},exports.getMaxTransferAmount=function(e,t,r,s){const n=C(e);if(!n)return 0;const{fee:a}=M(t,r,n,s,e);return n-a},exports.getPubKeyFromTransport=async function(e,t,r,s="EVM"){const n=O(e),a="EVM"===s?Ht(t,s,{pathSpec:r}):Ht(t,s),i=await n.getAddress(a,!1,!1);return Buffer.from(i.publicKey,"hex")},exports.getPublicKeyFromPrivateKey=function(e){const t=Buffer.isBuffer(e)?e:Buffer.from(e,"hex");try{return Buffer.from(l.secp256k1.getPublicKey(t))}finally{t.fill(0)}},exports.getSolanaDerivationPath=Xt,exports.getSolanaProvider=({isTestnet:e,rpcUrl:t})=>{const r=w.createSolanaRpc(e?w.devnet(t):w.mainnet(t));return new Proxy(r,{get:(e,t,r)=>t===_t||("then"===t||"catch"===t||"finally"===t?e:Reflect.get(e,t,r))})},exports.getSolanaPublicKeyFromLedger=async(e,t)=>{const r=new T(t),{address:s}=await r.getAddress(Xt(e,!1));return s},exports.getTransferTxDetails=function(e,t,r,s,n){const a=M(e,t,r,s,V(n));return a.inputs||console.log("Unable to construct transaction, fee needed: ",a.fee),a},exports.getVoidSigner=function(e,t){return new n.VoidSigner(e,t)},exports.getWalletFromMnemonic=function(e,t,r){if(!(t>=0&&t%1==0))throw new Error("Account index must be an integer greater than or equal to 0.");return n.HDNodeWallet.fromMnemonic(n.Mnemonic.fromPhrase(e),L(t,r))},exports.getXpubFromMnemonic=async function(e){if(!i.validateMnemonic(e))throw new Error("Invalid mnemonic phrase.");const t=await i.mnemonicToSeed(e);return a.fromSeed(t).derivePath(N).neutered().toBase58()},exports.isERC20Transfer=H,exports.isNativeTxn=F,exports.isSolanaProvider=e=>!(!e||"object"!=typeof e)&&!0===e[_t],exports.maybeGetAssociatedTokenAccount=Lt,exports.omitUndefinedKeys=function(e){return Object.keys(e).reduce(((t,r)=>(void 0!==e[r]&&(t[r]=e[r]),t)),{})},exports.onBalanceChange=async(e,t,r,s)=>{const n=new Set(e.map((e=>e.toLowerCase()))),a=new Set(t.map((e=>e.toLowerCase()))),i=async e=>{const t=await r.getBlock(e,!0);t?.prefetchedTransactions.forEach((function(e){e.to&&a.has(e.to.toLowerCase())&&H(e,n)?s(e,{type:"erc20",contractAddress:e.to}):F(e,n)&&s(e,{type:"native"})}))},o=await r.on("block",i);return{unsubscribe:()=>o.off("block",i)}},exports.openLedgerApp=async function(e,t){try{return(await e.send(224,216,0,0,Buffer.from(t,"ascii"))).equals(Buffer.from([144,0]))}catch(e){return!1}},exports.psbt2ToPsbt0=J,exports.quitLedgerApp=async function(e){return await e.send(176,167,0,0)},exports.selectUtxos=M,exports.serializeSolanaTx=e=>w.getBase64EncodedWireTransaction(e),exports.transferSol=async({from:e,to:t,amount:r,provider:s})=>{const{value:n}=await s.getLatestBlockhash().send(),a=[b.getTransferSolInstruction({source:w.createNoopSigner(w.address(e)),destination:w.address(t),amount:r})];return w.pipe(w.createTransactionMessage({version:0}),(e=>w.setTransactionMessageLifetimeUsingBlockhash(n,e)),(t=>w.setTransactionMessageFeePayer(w.address(e),t)),(e=>w.appendTransactionMessageInstructions(a,e)))},exports.transferToken=async({from:e,to:t,mint:r,amount:s,decimals:n,provider:a})=>{const{address:i}=await Lt({mint:w.address(r),owner:w.address(e),provider:a}),{address:o,exists:d}=await Lt({mint:w.address(r),owner:w.address(t),provider:a}),u=[];d||u.push(A.getCreateAssociatedTokenIdempotentInstruction({payer:w.createNoopSigner(w.address(e)),mint:w.address(r),owner:w.address(t),ata:o})),u.push(A.getTransferCheckedInstruction({amount:s,authority:w.createNoopSigner(w.address(e)),decimals:n,mint:w.address(r),destination:o,source:i}));const{value:c}=await a.getLatestBlockhash().send();return w.pipe(w.createTransactionMessage({version:0}),(e=>w.setTransactionMessageLifetimeUsingBlockhash(c,e)),(t=>w.setTransactionMessageFeePayer(w.address(e),t)),(e=>w.appendTransactionMessageInstructions(u,e)))};
|
package/dist/index.d.ts
CHANGED
|
@@ -1536,12 +1536,13 @@ declare class LedgerSigner extends WalletVoid implements Signer {
|
|
|
1536
1536
|
declare class SimpleLedgerSigner implements Signer {
|
|
1537
1537
|
private activeAccountIndex;
|
|
1538
1538
|
private provider;
|
|
1539
|
+
private pathSpec;
|
|
1539
1540
|
private accountNode;
|
|
1540
1541
|
/**
|
|
1541
1542
|
* @param {number} activeAccountIndex - the index of the primary account used for static signing
|
|
1542
1543
|
* @param {string} xpubXP - optional extended public key of `m/44'/9000'/${activeAccountIndex}`
|
|
1543
1544
|
*/
|
|
1544
|
-
constructor(activeAccountIndex: number, provider: JsonRpcProvider, xpubXP?: string);
|
|
1545
|
+
constructor(activeAccountIndex: number, provider: JsonRpcProvider, xpubXP?: string, pathSpec?: DerivationPath);
|
|
1545
1546
|
private reSerializeTx;
|
|
1546
1547
|
private getChainAlias;
|
|
1547
1548
|
private getAccountPath;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { UnsignedTx } from '@avalabs/avalanchejs';
|
|
2
2
|
import { Signer, SignTxRequest, SignTxBufferRequest, SignMessageRequest } from '../models.js';
|
|
3
3
|
import { JsonRpcProvider } from '../../providers/JsonRpcProvider.js';
|
|
4
|
+
import { DerivationPath } from '../../../EVM/constants.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* A wallet class that can sign X/P and C transactions.
|
|
@@ -12,12 +13,13 @@ import { JsonRpcProvider } from '../../providers/JsonRpcProvider.js';
|
|
|
12
13
|
declare class SimpleLedgerSigner implements Signer {
|
|
13
14
|
private activeAccountIndex;
|
|
14
15
|
private provider;
|
|
16
|
+
private pathSpec;
|
|
15
17
|
private accountNode;
|
|
16
18
|
/**
|
|
17
19
|
* @param {number} activeAccountIndex - the index of the primary account used for static signing
|
|
18
20
|
* @param {string} xpubXP - optional extended public key of `m/44'/9000'/${activeAccountIndex}`
|
|
19
21
|
*/
|
|
20
|
-
constructor(activeAccountIndex: number, provider: JsonRpcProvider, xpubXP?: string);
|
|
22
|
+
constructor(activeAccountIndex: number, provider: JsonRpcProvider, xpubXP?: string, pathSpec?: DerivationPath);
|
|
21
23
|
private reSerializeTx;
|
|
22
24
|
private getChainAlias;
|
|
23
25
|
private getAccountPath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{utils as t,EVMUnsignedTx as
|
|
1
|
+
import{utils as t,EVMUnsignedTx as e,UnsignedTx as r}from"@avalabs/avalanchejs";import s from"bip32-path";import{getTxOutputAddresses as i}from"../../utils/getTxOutputAddresses.js";import{ZondaxProvider as n}from"./ZondaxProvider.js";import{fromBase58 as o}from"bip32";import"../../utils/addSignaturesToAvalancheTx.js";import"../../utils/convertGlacierUtxo.js";import"../../utils/createAvalancheEvmUnsignedTx.js";import"../../utils/createAvalancheUnsignedTx.js";import{digestMessage as a}from"../../utils/digestMessage.js";import"../../utils/getAssetBalance.js";import"../../utils/getUtxosByTxFromGlacier.js";import"bip39";import"../../utils/parseAvalancheTx.js";import"../../utils/populateCredential.js";import"../../utils/txSizeLimits.js";import"@ledgerhq/hw-app-eth";import"ethers";import{DerivationPath as c}from"../../../EVM/constants.js";import"bitcoinjs-lib";import"@avalabs/core-utils-sdk";import"@ledgerhq/hw-transport";import"@metamask/eth-sig-util";const{parse:h}=t;class p{constructor(t,e,r,s=c.BIP44){this.activeAccountIndex=t,this.provider=e,this.pathSpec=s,r&&(this.accountNode=o(r))}accountNode;reSerializeTx(t,s){return t instanceof e||"C"===s?e.fromJSON(JSON.stringify(t.toJSON())):r.fromJSON(JSON.stringify(t.toJSON()))}getChainAlias(t){return"EVM"===t.getVM()?"C":"X"}getAccountPath(t){switch(t){case"X":case"P":return`m/44'/9000'/${this.activeAccountIndex}'`;case"C":return`m/44'/60'/${this.pathSpec===c.LedgerLive?this.activeAccountIndex:0}'`}}getAddressOfPath(t,e){if(!this.accountNode)return null;const{publicKey:r}=this.accountNode.derivePath(t),s=this.provider.getAddress(r,e);return Buffer.from(h(s)[2]).toString("hex")}getAddressPathMap(t){const{tx:e,externalIndices:r,internalIndices:s}=t,i=this.getChainAlias(e),n="EVM"===t.tx.getVM()?`0/${this.pathSpec===c.LedgerLive?0:this.activeAccountIndex}`:"0/0",o=new Map;if("C"===i||!this.accountNode)return o;const a=[n,...(r??[]).map((t=>`0/${t}`)),...(s??[]).map((t=>`1/${t}`))];for(const t of a){const e=this.getAddressOfPath(t,i);e&&o.set(e,t)}return o}getAddressBipPaths(t,e,r){return 0===e.size?[s.fromString("C"===r?`0/${this.pathSpec===c.LedgerLive?0:this.activeAccountIndex}`:"0/0")]:t.reduce(((t,r)=>{const i=e.get(Buffer.from(r).toString("hex"));return i&&t.push(s.fromString(i)),t}),[])}async signTx(t){if(!t.transport)throw new Error("Ledger transport not provided");const e=this.getChainAlias(t.tx),r=this.reSerializeTx(t.tx,e),s=Buffer.from(r.toBytes()),n=this.getAddressPathMap(t),o=this.getAddressBipPaths(r.getAddresses(),n,e),a=this.getAddressBipPaths([...i(r)],n,e);return(await this.signTxBuffer({buffer:s,chain:e,transport:t.transport,signers:o,change:a})).forEach((t=>{r.addSignature(t)})),r}async signTxBuffer(t){if(!t.transport)throw new Error("Ledger transport not provided");if(!t.signers)throw new Error("Signers not provided");const e=t.change||[],r=s.fromString(this.getAccountPath(t.chain));return[...(await n.signTx(t.transport,t.buffer,r,t.signers,e)).signatures.values()]}async signMessage(t){if(!t.transport||!t.message)throw new Error("Unable to sign message. Incomplete or invalid request.");const e="C"===t.chain?this.activeAccountIndex:0,r=t.signer||s.fromString(`0/${e}`);if(2!=r.toPathArray().length)throw new Error("Given signer path must have a depth of 2. Ex. 0/0, 0/1");const i=a(t.message),o=(await n.signHash(t.transport,i,s.fromString(this.getAccountPath(t.chain)),[r])).signatures.get(r.toString(!0));if(!o)throw new Error("Failed to sign message.");return o}}export{p as SimpleLedgerSigner};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@avalabs/core-wallets-sdk",
|
|
3
|
-
"version": "3.1.0-alpha.
|
|
3
|
+
"version": "3.1.0-alpha.74",
|
|
4
4
|
"license": "Limited Ecosystem License",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"peerDependencies": {
|
|
71
71
|
"ethers": "^6.7.1"
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "4d9aed666e72df2d2edd0b80c3f5f15154825075"
|
|
74
74
|
}
|