UNPKG

@depay/web3-wallets

Version:

One-Stop-Shop JavaScript library to integrate various web3 crypto wallets and multiple blockchains at once with a single interface.

506 lines (430 loc) 227 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@depay/web3-client-svm'), require('@depay/web3-blockchains'), require('@depay/solana-web3.js'), require('ethers')) : typeof define === 'function' && define.amd ? define(['exports', '@depay/web3-client-svm', '@depay/web3-blockchains', '@depay/solana-web3.js', 'ethers'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Web3Wallets = {}, global.Web3Client, global.Web3Blockchains, global.SolanaWeb3js, global.ethers)); }(this, (function (exports, web3ClientSvm, Blockchains, solanaWeb3_js, ethers) { 'use strict'; function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var Blockchains__default = /*#__PURE__*/_interopDefaultLegacy(Blockchains); function _optionalChain$d(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } class Transaction { constructor({ blockchain, from, to, value, api, method, params, instructions, signers, alts, sent, succeeded, failed, accepted, }) { // required this.blockchain = blockchain; this.from = (from && from.match('0x')) ? ethers.ethers.utils.getAddress(from) : from; this.to = (to && to.match('0x')) ? ethers.ethers.utils.getAddress(to) : to; // optional this.value = _optionalChain$d([Transaction, 'access', _ => _.bigNumberify, 'call', _2 => _2(value, blockchain), 'optionalAccess', _3 => _3.toString, 'call', _4 => _4()]); this.api = api; this.method = method; this.params = params; this.accepted = accepted; this.sent = sent; this.succeeded = succeeded; this.failed = failed; this.instructions = instructions; this.signers = signers; this.alts = alts; // internal this._succeeded = false; this._failed = false; } async prepare({ wallet }) { this.from = await wallet.account(this.blockchain); } static bigNumberify(value, blockchain) { if (typeof value === 'number') { return ethers.ethers.utils.parseUnits(value.toString(), Blockchains__default['default'][blockchain].currency.decimals) } else if (value && value.toString) { return ethers.ethers.BigNumber.from(value.toString()) } else { return value } } findFragment() { return this.getContract().interface.fragments.find((fragment) => { return( fragment.name == this.method && (fragment.inputs && this.params && typeof(this.params) === 'object' ? fragment.inputs.length == Object.keys(this.params).length : true) ) }) } getParamType(param) { if(_optionalChain$d([param, 'optionalAccess', _5 => _5.components, 'optionalAccess', _6 => _6.length])) { return `(${param.components.map((param)=>this.getParamType(param)).join(',')})` } else { return param.type } } getMethodNameWithSignature() { let fragment = this.findFragment(); if(fragment.inputs) { return `${this.method}(${fragment.inputs.map((param)=>this.getParamType(param)).join(',')})` } else { return this.method } } getContractArguments() { if(this.params instanceof Array) { return this.params } else if (this.params instanceof Object) { let fragment = this.findFragment(); return fragment.inputs.map((input) => { return this.params[input.name] }) } } getContract() { return new ethers.ethers.Contract(this.to, this.api) } async getData() { let contractArguments = this.getContractArguments(); let populatedTransaction; if(contractArguments) { populatedTransaction = await this.getContract().populateTransaction[this.getMethodNameWithSignature()].apply( null, contractArguments ); } else { populatedTransaction = await this.getContract().populateTransaction[this.getMethodNameWithSignature()].apply(null); } return populatedTransaction.data } success() { if (this._succeeded) { return Promise.resolve(this) } return new Promise((resolve, reject) => { let originalSucceeded = this.succeeded; this.succeeded = (transaction) => { if (originalSucceeded) originalSucceeded(transaction); resolve(transaction); }; }) } failure() { if (this._failed) { return Promise.resolve(this) } return new Promise((resolve, reject) => { let originalFailed = this.failed; this.failed = (transaction, reason) => { if (originalFailed) originalFailed(transaction, reason); resolve(transaction, reason); }; }) } } function _optionalChain$c(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } const POLL_SPEED = 500; // 0.5 seconds const MAX_POLLS = 240; // 120 seconds const sendTransaction = async ({ transaction, wallet })=> { transaction = new Transaction(transaction); await transaction.prepare({ wallet }); await submit({ transaction, wallet }).then((signature)=>{ if(signature) { transaction.id = signature; transaction.url = Blockchains__default['default'].findByName(transaction.blockchain).explorerUrlFor({ transaction }); if (transaction.sent) transaction.sent(transaction); let count = 0; const interval = setInterval(async ()=> { count++; if(count >= MAX_POLLS) { return clearInterval(interval) } const provider = await web3ClientSvm.getProvider(transaction.blockchain); const { value } = await provider.getSignatureStatus(signature); const confirmationStatus = _optionalChain$c([value, 'optionalAccess', _ => _.confirmationStatus]); if(confirmationStatus) { const hasReachedSufficientCommitment = confirmationStatus === 'confirmed' || confirmationStatus === 'finalized'; if (hasReachedSufficientCommitment) { if(value.err) { transaction._failed = true; const confirmedTransaction = await provider.getConfirmedTransaction(signature); const failedReason = _optionalChain$c([confirmedTransaction, 'optionalAccess', _2 => _2.meta, 'optionalAccess', _3 => _3.logMessages]) ? confirmedTransaction.meta.logMessages[confirmedTransaction.meta.logMessages.length - 1] : null; if(transaction.failed) transaction.failed(transaction, failedReason); } else { transaction._succeeded = true; if (transaction.succeeded) transaction.succeeded(transaction); } return clearInterval(interval) } } }, POLL_SPEED); } else { throw('Submitting transaction failed!') } }); return transaction }; const submit = async({ transaction, wallet })=> { let result = await submitThroughWallet({ transaction, wallet }); let signature; if(typeof result === 'object' && result.signatures && result.message) { signature = await submitDirectly(result, await wallet.account()); } else if (typeof result === 'object' && result.signature && result.signature.length) { signature = result.signature; } else if (typeof result === 'string' && result.length) { signature = result; } return signature }; const submitDirectly = async(tx, from) =>{ let provider = await web3ClientSvm.getProvider('solana'); return await provider.sendRawTransaction(tx.serialize()) }; const submitThroughWallet = async({ transaction, wallet })=> { if(transaction.instructions) { return submitInstructions({ transaction, wallet }) } else { return submitSimpleTransfer({ transaction, wallet }) } }; const submitSimpleTransfer = async ({ transaction, wallet })=> { let fromPubkey = new solanaWeb3_js.PublicKey(await wallet.account()); let toPubkey = new solanaWeb3_js.PublicKey(transaction.to); const provider = await web3ClientSvm.getProvider(transaction.blockchain); let { blockhash, lastValidBlockHeight } = await provider.getLatestBlockhash(); const instructions = [ solanaWeb3_js.SystemProgram.transfer({ fromPubkey, toPubkey, lamports: parseInt(Transaction.bigNumberify(transaction.value, transaction.blockchain), 10) }) ]; const messageV0 = new solanaWeb3_js.TransactionMessage({ payerKey: fromPubkey, recentBlockhash: blockhash, instructions, }).compileToV0Message(); const transactionV0 = new solanaWeb3_js.VersionedTransaction(messageV0); transaction._lastValidBlockHeight = lastValidBlockHeight; return wallet._sendTransaction(transactionV0) }; const submitInstructions = async ({ transaction, wallet })=> { let fromPubkey = new solanaWeb3_js.PublicKey(await wallet.account()); const provider = await web3ClientSvm.getProvider(transaction.blockchain); let { blockhash, lastValidBlockHeight } = await provider.getLatestBlockhash(); const messageV0 = new solanaWeb3_js.TransactionMessage({ payerKey: fromPubkey, recentBlockhash: blockhash, instructions: transaction.instructions, }).compileToV0Message( transaction.alts ? await Promise.all(transaction.alts.map(async(alt)=>{ return (await web3ClientSvm.getProvider('solana')).getAddressLookupTable(new solanaWeb3_js.PublicKey(alt)).then((res) => res.value) })) : undefined); const transactionV0 = new solanaWeb3_js.VersionedTransaction(messageV0); if(transaction.signers && transaction.signers.length) { transactionV0.sign(Array.from(new Set(transaction.signers))); } transaction._lastValidBlockHeight = lastValidBlockHeight; return wallet._sendTransaction(transactionV0) }; let supported$1 = ['solana']; supported$1.evm = []; supported$1.svm = ['solana']; function _optionalChain$b(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } class WindowSolana { static __initStatic() {this.info = { name: 'Solana Wallet', logo: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA0NDYuNCAzNzYuOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDQ2LjQgMzc2Ljg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojODI4NDg3O30KCS5zdDF7ZmlsbDp1cmwoI1NWR0lEXzFfKTt9Cgkuc3Qye2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDE2NTIzNDE5NTQ5NTc2MDU4MDgwMDAwMDAwNjMwMzAwNDA2OTM1MjExODk1MV8pO30KCS5zdDN7ZmlsbDp1cmwoI1NWR0lEXzAwMDAwMDkyNDIyMzgxNjc5OTg1OTI5MTcwMDAwMDA2ODU0NzIyMTYxOTE4MTIzNjUzXyk7fQo8L3N0eWxlPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzgxLjcsMTEwLjJoNjQuN1Y0Ni41YzAtMjUuNy0yMC44LTQ2LjUtNDYuNS00Ni41SDQ2LjVDMjAuOCwwLDAsMjAuOCwwLDQ2LjV2NjUuMWgzNS43bDI2LjktMjYuOQoJYzEuNS0xLjUsMy42LTIuNSw1LjctMi43bDAsMGgwLjRoNzguNmM1LjMtMjUuNSwzMC4yLTQyLDU1LjctMzYuN2MyNS41LDUuMyw0MiwzMC4yLDM2LjcsNTUuN2MtMS42LDcuNS00LjksMTQuNi05LjgsMjAuNQoJYy0wLjksMS4xLTEuOSwyLjItMywzLjNjLTEuMSwxLjEtMi4yLDIuMS0zLjMsM2MtMjAuMSwxNi42LTQ5LjksMTMuOC02Ni41LTYuM2MtNC45LTUuOS04LjMtMTMtOS44LTIwLjZINzMuMmwtMjYuOSwyNi44CgljLTEuNSwxLjUtMy42LDIuNS01LjcsMi43bDAsMGgtMC40aC0wLjFoLTAuNUgwdjc0aDI4LjhsMTguMi0xOC4yYzEuNS0xLjYsMy42LTIuNSw1LjctMi43bDAsMGgwLjRoMjkuOQoJYzUuMi0yNS41LDMwLjItNDEuOSw1NS43LTM2LjdzNDEuOSwzMC4yLDM2LjcsNTUuN3MtMzAuMiw0MS45LTU1LjcsMzYuN2MtMTguNS0zLjgtMzIuOS0xOC4yLTM2LjctMzYuN0g1Ny43bC0xOC4yLDE4LjMKCWMtMS41LDEuNS0zLjYsMi41LTUuNywyLjdsMCwwaC0wLjRIMHYzNC4yaDU2LjNjMC4yLDAsMC4zLDAsMC41LDBoMC4xaDAuNGwwLDBjMi4yLDAuMiw0LjIsMS4yLDUuOCwyLjhsMjgsMjhoNTcuNwoJYzUuMy0yNS41LDMwLjItNDIsNTUuNy0zNi43czQyLDMwLjIsMzYuNyw1NS43Yy0xLjcsOC4xLTUuNSwxNS43LTExLDIxLjljLTAuNiwwLjctMS4yLDEuMy0xLjksMnMtMS4zLDEuMy0yLDEuOQoJYy0xOS41LDE3LjMtNDkuMywxNS42LTY2LjctMy45Yy01LjUtNi4yLTkuMy0xMy43LTExLTIxLjlIODcuMWMtMS4xLDAtMi4xLTAuMi0zLjEtMC41aC0wLjFsLTAuMy0wLjFsLTAuMi0wLjFsLTAuMi0wLjFsLTAuMy0wLjEKCWgtMC4xYy0wLjktMC41LTEuOC0xLjEtMi42LTEuOGwtMjgtMjhIMHY1My41YzAuMSwyNS43LDIwLjksNDYuNCw0Ni41LDQ2LjRoMzUzLjNjMjUuNywwLDQ2LjUtMjAuOCw0Ni41LTQ2LjV2LTYzLjZoLTY0LjcKCWMtNDMuMiwwLTc4LjItMzUtNzguMi03OC4ybDAsMEMzMDMuNSwxNDUuMiwzMzguNSwxMTAuMiwzODEuNywxMTAuMnoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTIyMC45LDI5OC4xYzAtMTQuNC0xMS42LTI2LTI2LTI2cy0yNiwxMS42LTI2LDI2czExLjYsMjYsMjYsMjZTMjIwLjksMzEyLjQsMjIwLjksMjk4LjFMMjIwLjksMjk4LjF6Ii8+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMTkuNiw5MS41YzAtMTQuNC0xMS42LTI2LTI2LTI2cy0yNiwxMS42LTI2LDI2czExLjYsMjYsMjYsMjZTMjE5LjYsMTA1LjgsMjE5LjYsOTEuNXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTM4Mi4yLDEyOC44aC0wLjVjLTMyLjksMC01OS42LDI2LjctNTkuNiw1OS42bDAsMGwwLDBjMCwzMi45LDI2LjcsNTkuNiw1OS42LDU5LjZsMCwwaDAuNQoJYzMyLjksMCw1OS42LTI2LjcsNTkuNi01OS42bDAsMEM0NDEuOCwxNTUuNCw0MTUuMSwxMjguOCwzODIuMiwxMjguOHogTTM5Ni42LDIxOS40aC0zMWw4LjktMzIuNWMtNy43LTMuNy0xMS0xMi45LTcuNC0yMC42CgljMy43LTcuNywxMi45LTExLDIwLjYtNy40YzcuNywzLjcsMTEsMTIuOSw3LjQsMjAuNmMtMS41LDMuMi00LjEsNS44LTcuNCw3LjRMMzk2LjYsMjE5LjR6Ii8+CjxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTQ5LjAwNzciIHkxPSIxMzkuMzA5MyIgeDI9IjEyMi4xMjMxIiB5Mj0iMTkwLjgwNDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMSAwIDMwLjUzNTQpIj4KCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMEZGQTMiLz4KCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQzFGRkYiLz4KPC9saW5lYXJHcmFkaWVudD4KPHBhdGggY2xhc3M9InN0MSIgZD0iTTExMi43LDIwMy41YzAuMy0wLjMsMC43LTAuNSwxLjEtMC41aDM4LjhjMC43LDAsMS4xLDAuOSwwLjYsMS40bC03LjcsNy43Yy0wLjMsMC4zLTAuNywwLjUtMS4xLDAuNWgtMzguOAoJYy0wLjcsMC0xLjEtMC45LTAuNi0xLjRMMTEyLjcsMjAzLjV6Ii8+CjxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMDAwMDAxNzUzMTAwMjIwMDgyNTMzODQyNTAwMDAwMTEwOTY3OTQyODQ4NDUzNDEzNTVfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjEzNy4yNTMzIiB5MT0iMTMzLjE3MjUiIHgyPSIxMTAuMzY4NyIgeTI9IjE4NC42Njc0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMCAzMC41MzU0KSI+Cgk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojMDBGRkEzIi8+Cgk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojREMxRkZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxwYXRoIHN0eWxlPSJmaWxsOnVybCgjU1ZHSURfMDAwMDAxNzUzMTAwMjIwMDgyNTMzODQyNTAwMDAwMTEwOTY3OTQyODQ4NDUzNDEzNTVfKTsiIGQ9Ik0xMTIuNywxNzQuOWMwLjMtMC4zLDAuNy0wLjUsMS4xLTAuNWgzOC44CgljMC43LDAsMS4xLDAuOSwwLjYsMS40bC03LjcsNy43Yy0wLjMsMC4zLTAuNywwLjUtMS4xLDAuNWgtMzguOGMtMC43LDAtMS4xLTAuOS0wLjYtMS40TDExMi43LDE3NC45eiIvPgo8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzAwMDAwMDIyNTU3MTYwNTg5MTY1MTU3NTIwMDAwMDE1NDYyNjI0Mjk4Nzk4NTYzMjYxXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxNDMuMDkyOSIgeTE9IjEzNi4yMjEyIiB4Mj0iMTE2LjIwODIiIHkyPSIxODcuNzE2MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDAgMzAuNTM1NCkiPgoJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzAwRkZBMyIvPgoJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0RDMUZGRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8cGF0aCBzdHlsZT0iZmlsbDp1cmwoI1NWR0lEXzAwMDAwMDIyNTU3MTYwNTg5MTY1MTU3NTIwMDAwMDE1NDYyNjI0Mjk4Nzk4NTYzMjYxXyk7IiBkPSJNMTQ1LjYsMTg5LjFjLTAuMy0wLjMtMC43LTAuNS0xLjEtMC41CgloLTM4LjhjLTAuNywwLTEuMSwwLjktMC42LDEuNGw3LjcsNy43YzAuMywwLjMsMC43LDAuNSwxLjEsMC41aDM4LjhjMC43LDAsMS4xLTAuOSwwLjYtMS40TDE0NS42LDE4OS4xeiIvPgo8L3N2Zz4K', blockchains: supported$1.svm };} static __initStatic2() {this.isAvailable = async()=>{ return ( _optionalChain$b([window, 'optionalAccess', _6 => _6.solana]) && // not Phantom !(window.phantom && !window.glow && !window.solana.isGlow && !['isBitKeep'].some((identifier)=>window.solana && window.solana[identifier])) && // not Coin98 !window.coin98 && // not BitKeep !(_optionalChain$b([window, 'optionalAccess', _7 => _7.solana]) && _optionalChain$b([window, 'optionalAccess', _8 => _8.solana, 'access', _9 => _9.isBitKeep])) && // not Glow !window.solana.isGlow && // not trust !window.trustwallet && // Brave Wallet !window.solana.isBraveWallet && // OKX Wallet !_optionalChain$b([window, 'optionalAccess', _10 => _10.okxwallet]) ) };} constructor () { this.name = this.constructor.info.name; this.logo = this.constructor.info.logo; this.blockchains = this.constructor.info.blockchains; this.sendTransaction = (transaction)=>{ return sendTransaction({ wallet: this, transaction }) }; } getProvider() { return window.solana } async account() { const provider = this.getProvider(); if(provider == undefined){ return } if(provider.publicKey) { return provider.publicKey.toString() } if(provider.isBraveWallet != true) { let publicKey; try { ({ publicKey } = await window.solana.connect({ onlyIfTrusted: true })); } catch (e) {} if(publicKey){ return publicKey.toString() } } } async connect() { const provider = this.getProvider(); if(!provider) { return undefined } let result; try { result = await provider.connect(); } catch (e2) {} if(result && result.publicKey) { return result.publicKey.toString() } else { return provider.publicKey.toString() } } on(event, callback) { let internalCallback; switch (event) { case 'account': internalCallback = (publicKey) => callback(_optionalChain$b([publicKey, 'optionalAccess', _11 => _11.toString, 'call', _12 => _12()])); this.getProvider().on('accountChanged', internalCallback); break } return internalCallback } off(event, internalCallback) { switch (event) { case 'account': this.getProvider().removeListener('accountChanged', internalCallback); break } return internalCallback } async connectedTo(input) { if(input) { return input == 'solana' } else { return 'solana' } } switchTo(blockchainName) { return new Promise((resolve, reject)=>{ reject({ code: 'NOT_SUPPORTED' }); }) } addNetwork(blockchainName) { return new Promise((resolve, reject)=>{ reject({ code: 'NOT_SUPPORTED' }); }) } async sign(message) { const encodedMessage = new TextEncoder().encode(message); const signedMessage = await this.getProvider().signMessage(encodedMessage); if(signedMessage && signedMessage.signature) { return Array.from(signedMessage.signature) } } _sendTransaction(transaction) { return this.getProvider() .signAndSendTransaction( transaction, { skipPreflight: false } // requires default options to not raise error on phantom in app mobile (https://discord.com/channels/958228318132514876/974393659380334618/1089298098905423924) ) } } WindowSolana.__initStatic(); WindowSolana.__initStatic2(); function _optionalChain$a(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } class Backpack extends WindowSolana { static __initStatic() {this.info = { name: 'Backpack', logo: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI3LjIuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxMDAgMTAwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2NsaXAtcGF0aDp1cmwoI1NWR0lEXzAwMDAwMTA2ODQwODY0OTg0NTM1NTU0MzQwMDAwMDAwNDc2MjMzMDgyNzcwODcyOTcxXyk7fQoJLnN0MXtmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiNFMzNFM0Y7fQo8L3N0eWxlPgo8Zz4KCTxkZWZzPgoJCTxyZWN0IGlkPSJTVkdJRF8xXyIgeD0iMjMuOCIgeT0iMTAuNCIgd2lkdGg9IjUyLjQiIGhlaWdodD0iNzYuMiIvPgoJPC9kZWZzPgoJPGNsaXBQYXRoIGlkPSJTVkdJRF8wMDAwMDE3ODE5NTUzMTM2ODQxNzQ3MDkwMDAwMDAxNDk2Njk4MDAxOTUxNjc4MTk3MF8iPgoJCTx1c2UgeGxpbms6aHJlZj0iI1NWR0lEXzFfIiAgc3R5bGU9Im92ZXJmbG93OnZpc2libGU7Ii8+Cgk8L2NsaXBQYXRoPgoJPGcgc3R5bGU9ImNsaXAtcGF0aDp1cmwoI1NWR0lEXzAwMDAwMTc4MTk1NTMxMzY4NDE3NDcwOTAwMDAwMDE0OTY2OTgwMDE5NTE2NzgxOTcwXyk7Ij4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNTUsMTYuNGMyLjgsMCw1LjQsMC40LDcuOCwxLjFjLTIuNC01LjUtNy4yLTcuMS0xMi43LTcuMWMtNS41LDAtMTAuNCwxLjYtMTIuNyw3LjFjMi40LTAuNyw1LTEuMSw3LjctMS4xCgkJCUg1NXogTTQ0LjQsMjEuOWMtMTMuMiwwLTIwLjcsMTAuNC0yMC43LDIzLjF2MTMuMWMwLDEuMywxLjEsMi4zLDIuNCwyLjNoNDcuNmMxLjMsMCwyLjQtMSwyLjQtMi4zVjQ1YzAtMTIuOC04LjctMjMuMS0yMS45LTIzLjEKCQkJSDQ0LjR6IE01MCw0NS4xYzQuNiwwLDguMy0zLjcsOC4zLTguM3MtMy43LTguMy04LjMtOC4zcy04LjMsMy43LTguMyw4LjNTNDUuNCw0NS4xLDUwLDQ1LjF6IE0yMy44LDY4LjFjMC0xLjMsMS4xLTIuMywyLjQtMi4zCgkJCWg0Ny42YzEuMywwLDIuNCwxLDIuNCwyLjNWODJjMCwyLjYtMi4xLDQuNi00LjgsNC42SDI4LjZjLTIuNiwwLTQuOC0yLjEtNC44LTQuNlY2OC4xeiIvPgoJPC9nPgo8L2c+Cjwvc3ZnPgo=', blockchains: ['solana'] };} static __initStatic2() {this.isAvailable = async()=>{ return ( _optionalChain$a([window, 'optionalAccess', _2 => _2.backpack]) && window.backpack.isBackpack ) };} getProvider() { return window.backpack } async sign(message) { const encodedMessage = new TextEncoder().encode(message); const signature = await this.getProvider().signMessage(encodedMessage); return Object.values(signature) } _sendTransaction(transaction) { return this.getProvider().sendAndConfirm(transaction) } } Backpack.__initStatic(); Backpack.__initStatic2(); var logos = { exodus: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0yOTguMjAzIDgzLjc2NDVMMTcwLjQ0OSAwVjQ2LjgzMzJMMjUyLjQwNSAxMDAuMDg5TDI0Mi43NjMgMTMwLjU5OEgxNzAuNDQ5VjE2OS40MDJIMjQyLjc2M0wyNTIuNDA1IDE5OS45MTFMMTcwLjQ0OSAyNTMuMTY3VjMwMEwyOTguMjAzIDIxNi41MDNMMjc3LjMxMyAxNTAuMTM0TDI5OC4yMDMgODMuNzY0NVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xNjYxXzI5NSkiLz4KPHBhdGggZD0iTTU5LjMwMDcgMTY5LjQwMkgxMzEuMzQ2VjEzMC41OThINTkuMDMyOUw0OS42NTg5IDEwMC4wODlMMTMxLjM0NiA0Ni44MzMyVjBMMy41OTI1MyA4My43NjQ1TDI0LjQ4MzEgMTUwLjEzNEwzLjU5MjUzIDIxNi41MDNMMTMxLjYxNCAzMDBWMjUzLjE2N0w0OS42NTg5IDE5OS45MTFMNTkuMzAwNyAxNjkuNDAyWiIgZmlsbD0idXJsKCNwYWludDFfbGluZWFyXzE2NjFfMjk1KSIvPgo8bWFzayBpZD0ibWFzazBfMTY2MV8yOTUiIHN0eWxlPSJtYXNrLXR5cGU6YWxwaGEiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjMiIHk9IjAiIHdpZHRoPSIyOTYiIGhlaWdodD0iMzAwIj4KPHBhdGggZD0iTTI5OC4yMDQgODMuNzY0NUwxNzAuNDUgMFY0Ni44MzMyTDI1Mi40MDUgMTAwLjA4OUwyNDIuNzYzIDEzMC41OThIMTcwLjQ1VjE2OS40MDJIMjQyLjc2M0wyNTIuNDA1IDE5OS45MTFMMTcwLjQ1IDI1My4xNjdWMzAwTDI5OC4yMDQgMjE2LjUwM0wyNzcuMzEzIDE1MC4xMzRMMjk4LjIwNCA4My43NjQ1WiIgZmlsbD0idXJsKCNwYWludDJfbGluZWFyXzE2NjFfMjk1KSIvPgo8cGF0aCBkPSJNNTkuMzAxIDE2OS40MDJIMTMxLjM0N1YxMzAuNTk4SDU5LjAzMzJMNDkuNjU5MiAxMDAuMDg5TDEzMS4zNDcgNDYuODMzMlYwTDMuNTkyNzcgODMuNzY0NUwyNC40ODM0IDE1MC4xMzRMMy41OTI3NyAyMTYuNTAzTDEzMS42MTUgMzAwVjI1My4xNjdMNDkuNjU5MiAxOTkuOTExTDU5LjMwMSAxNjkuNDAyWiIgZmlsbD0idXJsKCNwYWludDNfbGluZWFyXzE2NjFfMjk1KSIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfMTY2MV8yOTUpIj4KPHJlY3QgeD0iMy43NTAyNCIgd2lkdGg9IjI5Mi41IiBoZWlnaHQ9IjMwMCIgZmlsbD0idXJsKCNwYWludDRfbGluZWFyXzE2NjFfMjk1KSIvPgo8L2c+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTY2MV8yOTUiIHgxPSIyNTYuODc1IiB5MT0iMzIwLjYyNSIgeDI9IjE3MS4zIiB5Mj0iLTMyLjk0NTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzBCNDZGOSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNCQkZCRTAiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDFfbGluZWFyXzE2NjFfMjk1IiB4MT0iMjU2Ljg3NSIgeTE9IjMyMC42MjUiIHgyPSIxNzEuMyIgeTI9Ii0zMi45NDU5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwQjQ2RjkiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjQkJGQkUwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQyX2xpbmVhcl8xNjYxXzI5NSIgeDE9IjI1Ni44NzUiIHkxPSIzMjAuNjI1IiB4Mj0iMTcxLjMiIHkyPSItMzIuOTQ1OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMEI0NkY5Ii8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0JCRkJFMCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50M19saW5lYXJfMTY2MV8yOTUiIHgxPSIyNTYuODc1IiB5MT0iMzIwLjYyNSIgeDI9IjE3MS4zIiB5Mj0iLTMyLjk0NTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzBCNDZGOSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNCQkZCRTAiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDRfbGluZWFyXzE2NjFfMjk1IiB4MT0iMjIuNTAwMiIgeTE9IjY3LjUiIHgyPSIxNzAuNjI1IiB5Mj0iMTc4LjEyNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBvZmZzZXQ9IjAuMTE5NzkyIiBzdG9wLWNvbG9yPSIjODk1MkZGIiBzdG9wLW9wYWNpdHk9IjAuODciLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjREFCREZGIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K", phantom: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI3LjIuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAxMjggMTI4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxMjggMTI4OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6I0FCOUZGMjt9Cjwvc3R5bGU+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMy43LDEwOWMxMy42LDAsMjMuOS0xMS45LDMwLTIxLjJjLTAuNywyLjEtMS4yLDQuMS0xLjIsNi4xYzAsNS41LDMuMSw5LjQsOS4zLDkuNGM4LjUsMCwxNy42LTcuNSwyMi4zLTE1LjUKCWMtMC4zLDEuMi0wLjUsMi4yLTAuNSwzLjJjMCwzLjgsMi4xLDYuMiw2LjUsNi4yYzEzLjgsMCwyNy43LTI0LjUsMjcuNy00NS45YzAtMTYuNy04LjQtMzEuNC0yOS42LTMxLjQKCWMtMzcuMiwwLTc3LjMsNDUuNS03Ny4zLDc0LjhDMTEuMSwxMDYuMywxNy4zLDEwOSwyMy43LDEwOXogTTc1LjUsNDkuNWMwLTQuMSwyLjMtNy4xLDUuNy03LjFjMy4zLDAsNS42LDIuOSw1LjYsNy4xCgljMCw0LjEtMi4zLDcuMS01LjYsNy4xQzc3LjgsNTYuNyw3NS41LDUzLjcsNzUuNSw0OS41eiBNOTMuMiw0OS41YzAtNC4xLDIuMy03LjEsNS43LTcuMWMzLjMsMCw1LjYsMi45LDUuNiw3LjEKCWMwLDQuMS0yLjMsNy4xLTUuNiw3LjFDOTUuNSw1Ni43LDkzLjIsNTMuNyw5My4yLDQ5LjV6Ii8+Cjwvc3ZnPgo=", coin98: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA0MC43IDQwIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0MC43IDQwIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsPSIjRDlCNDMyIiBkPSJtMzMuMyAwaC0yNS45Yy00LjEgMC03LjQgMy4zLTcuNCA3LjN2MjUuNGMwIDQgMy4zIDcuMyA3LjQgNy4zaDI1LjljNC4xIDAgNy40LTMuMyA3LjQtNy4zdi0yNS40YzAtNC0zLjMtNy4zLTcuNC03LjN6Ii8+CjxwYXRoIGZpbGw9IiMyNTI1MjUiIGQ9Im0zMy4zIDBoLTI1LjljLTQuMSAwLTcuNCAzLjMtNy40IDcuM3YyNS40YzAgNCAzLjMgNy4zIDcuNCA3LjNoMjUuOWM0LjEgMCA3LjQtMy4zIDcuNC03LjN2LTI1LjRjMC00LTMuMy03LjMtNy40LTcuM3ptLTYuMyAxMGMzIDAgNS41IDIuNCA1LjUgNS40IDAgMC45LTAuMiAxLjgtMC42IDIuNi0wLjctMC41LTEuNS0xLTIuMy0xLjMgMC4yLTAuNCAwLjMtMC45IDAuMy0xLjMgMC0xLjUtMS4zLTIuOC0yLjgtMi44LTEuNiAwLTIuOCAxLjMtMi44IDIuOCAwIDAuNSAwLjEgMC45IDAuMyAxLjMtMC44IDAuMy0xLjYgMC43LTIuMyAxLjMtMC41LTAuOC0wLjYtMS43LTAuNi0yLjYtMC4xLTMgMi4zLTUuNCA1LjMtNS40em0tMTMuMyAyMGMtMyAwLTUuNS0yLjQtNS41LTUuNGgyLjZjMCAxLjUgMS4zIDIuOCAyLjggMi44czIuOC0xLjMgMi44LTIuOGgyLjZjMC4yIDMtMi4zIDUuNC01LjMgNS40em0wLTcuNWMtMy41IDAtNi4zLTIuOC02LjMtNi4yczIuOC02LjMgNi4zLTYuMyA2LjQgMi44IDYuNCA2LjNjMCAzLjQtMi45IDYuMi02LjQgNi4yem0xMy4zIDcuNWMtMy41IDAtNi40LTIuOC02LjQtNi4yIDAtMy41IDIuOC02LjMgNi40LTYuMyAzLjUgMCA2LjMgMi44IDYuMyA2LjMgMC4xIDMuNC0yLjggNi4yLTYuMyA2LjJ6bTMuOC02LjNjMCAyLjEtMS43IDMuNy0zLjggMy43cy0zLjgtMS43LTMuOC0zLjdjMC0yLjEgMS43LTMuNyAzLjgtMy43IDIuMSAwLjEgMy44IDEuNyAzLjggMy43em0tMTMuNC03LjRjMCAyLjEtMS43IDMuNy0zLjggMy43cy0zLjgtMS43LTMuOC0zLjdjMC0yLjEgMS43LTMuNyAzLjgtMy43IDIuMiAwIDMuOCAxLjYgMy44IDMuN3oiLz4KPC9zdmc+Cg==", coinbase: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cmVjdCB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiBmaWxsPSIjMDA1MkZGIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTUyIDUxMkMxNTIgNzEwLjgyMyAzMTMuMTc3IDg3MiA1MTIgODcyQzcxMC44MjMgODcyIDg3MiA3MTAuODIzIDg3MiA1MTJDODcyIDMxMy4xNzcgNzEwLjgyMyAxNTIgNTEyIDE1MkMzMTMuMTc3IDE1MiAxNTIgMzEzLjE3NyAxNTIgNTEyWk00MjAgMzk2QzQwNi43NDUgMzk2IDM5NiA0MDYuNzQ1IDM5NiA0MjBWNjA0QzM5NiA2MTcuMjU1IDQwNi43NDUgNjI4IDQyMCA2MjhINjA0QzYxNy4yNTUgNjI4IDYyOCA2MTcuMjU1IDYyOCA2MDRWNDIwQzYyOCA0MDYuNzQ1IDYxNy4yNTUgMzk2IDYwNCAzOTZINDIwWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==", trust: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAzOTkuOCA0MTUuMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzk5LjggNDE1LjE7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMDUwMEZGO30KCS5zdDF7ZmlsbDp1cmwoI1NWR0lEXzFfKTt9Cjwvc3R5bGU+CjxnPgoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTU1LjUsOTJsMTQ0LjQtNDd2MzI1Qzk2LjcsMzI2LjcsNTUuNSwyNDMuNiw1NS41LDE5Ni43TDU1LjUsOTJMNTUuNSw5MnoiLz4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMzA1Ljk5NTMiIHkxPSIxODQ2LjAwMDIiIHgyPSIxOTYuODc1MiIgeTI9IjIxODkuMzQwMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDAgLTE4MjMuNzM5NykiPgoJCTxzdG9wICBvZmZzZXQ9IjIuMDAwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6IzAwMDBGRiIvPgoJCTxzdG9wICBvZmZzZXQ9IjguMDAwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6IzAwOTRGRiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMTYiIHN0eWxlPSJzdG9wLWNvbG9yOiM0OEZGOTEiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQyIiBzdHlsZT0ic3RvcC1jb2xvcjojMDA5NEZGIi8+CgkJPHN0b3AgIG9mZnNldD0iMC42OCIgc3R5bGU9InN0b3AtY29sb3I6IzAwMzhGRiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOSIgc3R5bGU9InN0b3AtY29sb3I6IzA1MDBGRiIvPgoJPC9saW5lYXJHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0zNDQuNCw5MkwxOTkuOSw0NXYzMjVjMTAzLjItNDMuMywxNDQuNS0xMjYuNCwxNDQuNS0xNzMuM1Y5MkwzNDQuNCw5MnoiLz4KPC9nPgo8L3N2Zz4K", brave: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNTYgMzAxIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyNTYgMzAxIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgoKCTxwYXRoIGZpbGw9IiNGMTVBMjIiIGQ9Im0yMzYgMTA1LjQtNy44LTIxLjIgNS40LTEyLjJjMC43LTEuNiAwLjMtMy40LTAuOC00LjZsLTE0LjgtMTQuOWMtNi41LTYuNS0xNi4xLTguOC0yNC44LTUuN2wtNC4xIDEuNC0yMi42LTI0LjUtMzguMi0wLjNoLTAuM2wtMzguNSAwLjMtMjIuNiAyNC43LTQtMS40Yy04LjgtMy4xLTE4LjUtMC44LTI1IDUuOGwtMTUgMTUuMmMtMSAxLTEuMyAyLjQtMC44IDMuN2w1LjcgMTIuNy03LjggMjEuMiA1LjEgMTkuMiAyMyA4Ny4yYzIuNiAxMCA4LjcgMTguOCAxNy4yIDI0LjkgMCAwIDI3LjggMTkuNyA1NS4zIDM3LjUgMi40IDEuNiA1IDIuNyA3LjcgMi43czUuMi0xLjEgNy43LTIuN2MzMC45LTIwLjIgNTUuMy0zNy41IDU1LjMtMzcuNSA4LjQtNi4xIDE0LjUtMTQuOCAxNy4xLTI0LjlsMjIuOC04Ny4yIDQuOC0xOS40eiIvPgoJPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0ibTEzMy4xIDE3OS40Yy0xLTAuNC0yLjEtMC44LTIuNC0wLjhoLTIuN2MtMC4zIDAtMS40IDAuMy0yLjQgMC44bC0xMSA0LjZjLTEgMC40LTIuNyAxLjItMy43IDEuN2wtMTYuNSA4LjZjLTEgMC41LTEuMSAxLjQtMC4yIDIuMWwxNC42IDEwLjNjMC45IDAuNyAyLjQgMS44IDMuMiAyLjVsNi41IDUuNmMwLjggMC44IDIuMiAxLjkgMyAyLjdsNi4yIDUuNmMwLjggMC44IDIuMiAwLjggMyAwbDYuNC01LjZjMC44LTAuOCAyLjItMS45IDMtMi43bDYuNS01LjdjMC44LTAuOCAyLjMtMS45IDMuMi0yLjVsMTQuNi0xMC40YzAuOS0wLjcgMC44LTEuNi0wLjItMi4xbC0xNi41LTguNGMtMS0wLjUtMi43LTEuMy0zLjctMS43bC0xMC45LTQuNnoiLz4KCTxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Im0yMTIuMiAxMDkuMmMwLjMtMS4xIDAuMy0xLjUgMC4zLTEuNSAwLTEuMS0wLjEtMy0wLjMtNGwtMC44LTIuNGMtMC41LTEtMS40LTIuNi0yLTMuNWwtOS41LTE0LjFjLTAuNi0wLjktMS43LTIuNC0yLjQtMy4zbC0xMi4zLTE1LjRjLTAuNy0wLjgtMS40LTEuNi0xLjQtMS41aC0wLjJzLTAuOSAwLjItMiAwLjNsLTE4LjggMy43Yy0xLjEgMC4zLTIuOSAwLjYtNCAwLjhsLTAuMyAwLjFjLTEuMSAwLjItMi45IDAuMS00LTAuM2wtMTUuOC01LjFjLTEuMS0wLjMtMi45LTAuOC0zLjktMS4xIDAgMC0zLjItMC44LTUuOC0wLjctMi42IDAtNS44IDAuNy01LjggMC43LTEuMSAwLjMtMi45IDAuOC0zLjkgMS4xbC0xNS44IDUuMWMtMS4xIDAuMy0yLjkgMC40LTQgMC4zbC0wLjMtMC4xYy0xLjEtMC4yLTIuOS0wLjYtNC0wLjhsLTE5LTMuNWMtMS4xLTAuMy0yLTAuMy0yLTAuM2gtMC4yYy0wLjEgMC0wLjggMC43LTEuNCAxLjVsLTEyLjMgMTUuMmMtMC43IDAuOC0xLjggMi40LTIuNCAzLjNsLTkuNSAxNC4xYy0wLjYgMC45LTEuNSAyLjUtMiAzLjVsLTAuOCAyLjRjLTAuMiAxLjEtMC4zIDMtMC4zIDQuMSAwIDAgMCAwLjMgMC4zIDEuNSAwLjYgMiAyIDMuOSAyIDMuOSAwLjcgMC44IDEuOSAyLjMgMi43IDNsMjcuOSAyOS43YzAuOCAwLjggMSAyLjQgMC42IDMuNGwtNS44IDEzLjhjLTAuNCAxLTAuNSAyLjctMC4xIDMuOGwxLjYgNC4zYzEuMyAzLjYgMy42IDYuOCA2LjcgOS4zbDUuNyA0LjZjMC44IDAuNyAyLjQgMC45IDMuNCAwLjRsMTcuOS04LjVjMS0wLjUgMi41LTEuNSAzLjQtMi4zbDEyLjgtMTEuNmMxLjktMS43IDEuOS00LjYgMC4zLTYuNGwtMjYuOS0xOC4xYy0wLjktMC42LTEuMy0xLjktMC44LTNsMTEuOC0yMi4zYzAuNS0xIDAuNi0yLjYgMC4yLTMuNmwtMS40LTMuM2MtMC40LTEtMS43LTIuMi0yLjctMi42bC0zNC45LTEzYy0xLTAuNC0xLTAuOCAwLjEtMC45bDIyLjQtMi4xYzEuMS0wLjEgMi45IDAuMSA0IDAuM2wxOS45IDUuNmMxLjEgMC4zIDEuOCAxLjQgMS42IDIuNWwtNyAzNy44Yy0wLjIgMS4xLTAuMiAyLjYgMC4xIDMuNXMxLjMgMS42IDIuNCAxLjlsMTMuOCAzYzEuMSAwLjMgMi45IDAuMyA0IDBsMTIuOS0zYzEuMS0wLjMgMi4yLTEuMSAyLjQtMS45IDAuMy0wLjggMC4zLTIuNCAwLjEtMy41bC02LjgtMzcuOWMtMC4yLTEuMSAwLjUtMi4zIDEuNi0yLjVsMTkuOS01LjZjMS4xLTAuMyAyLjktMC40IDQtMC4zbDIyLjQgMi4xYzEuMSAwLjEgMS4yIDAuNSAwLjEgMC45bC0zNC43IDEzLjJjLTEgMC40LTIuMyAxLjUtMi43IDIuNmwtMS40IDMuM2MtMC40IDEtMC40IDIuNyAwLjIgMy42bDExLjkgMjIuM2MwLjUgMSAwLjIgMi4zLTAuOCAzbC0yNi45IDE4LjJjLTEuOCAxLjgtMS42IDQuNyAwLjMgNi40bDEyLjggMTEuNmMwLjggMC44IDIuNCAxLjggMy40IDIuMmwxOCA4LjVjMSAwLjUgMi41IDAuMyAzLjQtMC40bDUuNy00LjZjMy0yLjQgNS4zLTUuNyA2LjYtOS4zbDEuNi00LjNjMC40LTEgMC4zLTIuOC0wLjEtMy44bC01LjgtMTMuOGMtMC40LTEtMC4yLTIuNSAwLjYtMy40bDI3LjktMjkuN2MwLjgtMC44IDEuOS0yLjIgMi43LTMtMC40LTAuMyAxLjEtMi4xIDEuNi00LjF6Ii8+Cgo8L3N2Zz4K", magicEden: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDAwIDQwMCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQiIHgxPSIxLjgyIiB5MT0iODUuNjUiIHgyPSIzMzUuNTMiIHkyPSIyNzguMzEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii4yMyIgc3RvcC1jb2xvcj0iI2ZmMDA3NCIvPjxzdG9wIG9mZnNldD0iLjI2IiBzdG9wLWNvbG9yPSIjZmYwMDY4Ii8+PHN0b3Agb2Zmc2V0PSIuMzIiIHN0b3AtY29sb3I9IiNmZjAwNDgiLz48c3RvcCBvZmZzZXQ9Ii4zOSIgc3RvcC1jb2xvcj0iI2ZmMDAxNSIvPjxzdG9wIG9mZnNldD0iLjQxIiBzdG9wLWNvbG9yPSIjZmYwMDA5Ii8+PHN0b3Agb2Zmc2V0PSIuNDMiIHN0b3AtY29sb3I9IiNmZjA5MDgiLz48c3RvcCBvZmZzZXQ9Ii41NCIgc3RvcC1jb2xvcj0iI2ZmNDAwMyIvPjxzdG9wIG9mZnNldD0iLjYyIiBzdG9wLWNvbG9yPSIjZmY2MjAxIi8+PHN0b3Agb2Zmc2V0PSIuNjYiIHN0b3AtY29sb3I9IiNmZjZmMDAiLz48c3RvcCBvZmZzZXQ9Ii43MiIgc3RvcC1jb2xvcj0iI2ZmODcwMCIvPjxzdG9wIG9mZnNldD0iLjgzIiBzdG9wLWNvbG9yPSIjZmZhYjAwIi8+PHN0b3Agb2Zmc2V0PSIuOTIiIHN0b3AtY29sb3I9IiNmZmMxMDAiLz48c3RvcCBvZmZzZXQ9Ii45OCIgc3RvcC1jb2xvcj0iI2ZmY2EwMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIiBmaWxsPSIjMDcwYzM0Ii8+PHBhdGggZD0iTTI2Mi4wMywxNTYuMTNsMTcuNDMsMjAuNDhjMiwyLjMsMy43Niw0LjE5LDQuNDksNS4yOCw1LjIyLDUuMTgsOC4xMywxMi4xNyw4LjEzLDE5LjQ3LS40OSw4LjYxLTYuMTEsMTQuNDgtMTEuMjgsMjAuNzRsLTEyLjE5LDE0LjMxLTYuMzcsNy40MmMtLjIyLjI2LS4zOC41Ny0uNDIuOTFzMCwuNjkuMTYuOTljLjE0LjMuMzguNTcuNjkuNzUuMy4xOC42NS4yNi45OS4yNGg2My41N2M5LjcxLDAsMjEuOTQsOC4xNywyMS4yMywyMC41NCwwLDUuNjItMi4zLDExLjAyLTYuMzMsMTUtNC4wNCwzLjk4LTkuNTIsNi4yMy0xNS4yMiw2LjI1aC05OS41NmMtNi41NSwwLTI0LjE2LjcxLTI5LjA5LTE0LjMxLTEuMDUtMy4xMy0xLjE5LTYuNTEtLjQtOS43MywxLjQ0LTQuNzUsMy43LTkuMjIsNi42OS0xMy4yLDUuMDEtNy40MiwxMC40My0xNC44NCwxNS43Ny0yMi4wNCw2Ljg5LTkuNDIsMTMuOTctMTguNTQsMjAuOTMtMjguMTQuMjQtLjMuMzgtLjcxLjM4LTEuMDlzLS4xNC0uNzktLjM4LTEuMDlsLTI1LjI5LTI5LjY4Yy0uMTYtLjIyLS4zOC0uMzgtLjYzLS41MS0uMjQtLjEyLS41MS0uMTgtLjc5LS4xOHMtLjU1LjA2LS43OS4xOC0uNDcuMy0uNjMuNTFjLTYuNzcsOS4wMi0zNi40Myw0OC45My00Mi43Niw1Ny4wMi02LjMzLDguMDktMjEuOSw4LjUzLTMwLjUzLDBsLTM5LjU3LTM5LjE0Yy0uMjQtLjI0LS41Ny0uNDItLjkzLS40OS0uMzQtLjA2LS43MS0uMDQtMS4wNS4xLS4zMi4xNC0uNjEuMzYtLjgxLjY3cy0uMy42NS0uMy45OXY3NS4yNWMuMSw1LjM0LTEuNTIsMTAuNTctNC41OSwxNC45OC0zLjA3LDQuMzktNy40OCw3Ljc0LTEyLjU4LDkuNTQtMy4yNiwxLjExLTYuNzMsMS40Ni0xMC4xNS45Ny0zLjQyLS40OS02LjY3LTEuNzYtOS40OC0zLjcyLTIuODEtMS45Ni01LjEyLTQuNTctNi42OS03LjU4LTEuNTgtMy4wMS0yLjQzLTYuMzctMi40My05Ljc3di0xMzUuMzJjLjIyLTQuODcsMi05LjU2LDUuMS0xMy4zOCwzLjA3LTMuODIsNy4zLTYuNTksMTIuMDctNy45MSw0LjA4LTEuMDcsOC4zOS0xLjA3LDEyLjQ4LjA0LDQuMDgsMS4wOSw3LjgsMy4yNCwxMC43OCw2LjIxbDYwLjgyLDYwLjAxYy4xOC4xOC40LjMyLjY1LjRzLjUxLjEyLjc3LjFjLjI2LS4wMi41MS0uMS43My0uMjJzLjQyLS4zLjU3LS41MWw0My4yMS01OC45NmMyLTIuMzksNC41MS00LjMzLDcuMzQtNS42NiwyLjgzLTEuMzMsNS45Mi0yLjA0LDkuMDgtMi4wOGgxMTIuNGMzLjA3LDAsNi4xMS42Nyw4LjkyLDEuOTIsMi43OSwxLjI1LDUuMywzLjA5LDcuMzIsNS4zOCwyLjAyLDIuMjgsMy41NCw0Ljk3LDQuNDMsNy44Ny44OSwyLjkxLDEuMTMsNS45Ni43Myw4Ljk2LS43OSw1LjIyLTMuNDgsOS45Ny03LjU2LDEzLjM2LTQuMDgsMy40Mi05LjI2LDUuMjYtMTQuNjIsNS4xOGgtNjIuOTRjLS4zMiwwLS42My4xLS44OS4yNi0uMjYuMTYtLjQ5LjQtLjYzLjY3LS4xNC4yOC0uMjIuNTktLjIuODksMCwuMy4xMi42MS4zLjg3aC0uMDJaIiBmaWxsPSJ1cmwoI2xpbmVhci1ncmFkaWVudCkiLz48L3N2Zz4=", okx: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI4LjIuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAzMzYuMSAzMzYuMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzM2LjEgMzM2LjE7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRkZGRkZGO30KPC9zdHlsZT4KPHBhdGggZD0iTTMxMy43LDBIMjIuNEMxMCwwLDAsMTAsMCwyMi40djI5MS4zYzAsMTIuNCwxMCwyMi40LDIyLjQsMjIuNGgyOTEuM2MxMi40LDAsMjIuNC0xMCwyMi40LTIyLjRWMjIuNAoJQzMzNi4xLDEwLDMyNi4xLDAsMzEzLjcsMHoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTIwNC41LDEzMC43aC02NC43Yy0yLjcsMC01LDIuMi01LDV2NjQuN2MwLDIuNywyLjIsNSw1LDVoNjQuN2MyLjcsMCw1LTIuMiw1LTV2LTY0LjcKCUMyMDkuNSwxMzIuOSwyMDcuMiwxMzAuNywyMDQuNSwxMzAuN3oiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTEyOS44LDU2LjFINjUuMWMtMi43LDAtNSwyLjItNSw1djY0LjdjMCwyLjcsMi4yLDUsNSw1aDY0LjdjMi44LDAsNS0yLjIsNS01VjYxCglDMTM0LjgsNTguMywxMzIuNSw1Ni4xLDEyOS44LDU2LjF6Ii8+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNzkuMSw1Ni4xaC02NC43Yy0yLjcsMC01LDIuMi01LDV2NjQuN2MwLDIuNywyLjIsNSw1LDVoNjQuN2MyLjcsMCw1LTIuMiw1LTVWNjEKCUMyODQuMSw1OC4zLDI4MS45LDU2LjEsMjc5LjEsNTYuMXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTEyOS44LDIwNS40SDY1LjFjLTIuNywwLTUsMi4yLTUsNXY2NC43YzAsMi43LDIuMiw1LDUsNWg2NC43YzIuOCwwLDUtMi4yLDUtNXYtNjQuNwoJQzEzNC44LDIwNy42LDEzMi41LDIwNS40LDEyOS44LDIwNS40eiIvPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjc5LjEsMjA1LjRoLTY0LjdjLTIuNywwLTUsMi4yLTUsNXY2NC43YzAsMi43LDIuMiw1LDUsNWg2NC43YzIuNywwLDUtMi4yLDUtNXYtNjQuNwoJQzI4NC4xLDIwNy42LDI4MS45LDIwNS40LDI3OS4xLDIwNS40eiIvPgo8L3N2Zz4K", }; function _optionalChain$9(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } class BraveSVM extends WindowSolana { static __initStatic() {this.info = { name: 'Brave', logo: logos.brave, blockchains: supported$1.svm, platform: 'svm', };} static __initStatic2() {this.isAvailable = async()=>{ return _optionalChain$9([window, 'optionalAccess', _3 => _3.solana, 'optionalAccess', _4 => _4.isBraveWallet]) };} getProvider() { return window.braveSolana } } BraveSVM.__initStatic(); BraveSVM.__initStatic2(); function _optionalChain$8(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } class Coin98SVM extends WindowSolana { static __initStatic() {this.info = { name: 'Coin98', logo: logos.coin98, blockchains: supported$1.svm, platform: 'svm', };} static __initStatic2() {this.isAvailable = async()=>{ return _optionalChain$8([window, 'optionalAccess', _3 => _3.coin98, 'optionalAccess', _4 => _4.sol]) };} getProvider() { return window.coin98.sol } } Coin98SVM.__initStatic(); Coin98SVM.__initStatic2(); class CoinbaseSVM extends WindowSolana { static __initStatic() {this.info = { name: 'Coinbase', logo: logos.coinbase, blockchains: supported$1.svm, platform: 'svm', };} getProvider() { return window.coinbaseSolana } static __initStatic2() {this.isAvailable = async()=>{ return !!window.coinbaseSolana };} } CoinbaseSVM.__initStatic(); CoinbaseSVM.__initStatic2(); function _optionalChain$7(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } class ExodusSVM extends WindowSolana { static __initStatic() {this.info = { name: 'Exodus', logo: logos.exodus, blockchains: supported$1.svm, platform: 'svm', };} static __initStatic2() {this.isAvailable = async()=>{ return _optionalChain$7([window, 'optionalAccess', _3 => _3.solana, 'optionalAccess', _4 => _4.isExodus]) };} } ExodusSVM.__initStatic(); ExodusSVM.__initStatic2(); class Glow extends WindowSolana { static __initStatic() {this.info = { name: 'Glow', logo: 'data:image/webp;base64,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