@swapkit/helpers 1.13.2 → 1.14.0
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.js +3 -3
- package/dist/index.js.map +4 -4
- package/package.json +7 -7
- package/src/helpers/__tests__/asset.test.ts +85 -106
- package/src/helpers/derivationPath.ts +10 -3
- package/src/modules/__tests__/assetValue.test.ts +1 -1
- package/src/modules/__tests__/swapKitNumber.test.ts +28 -0
- package/src/modules/bigIntArithmetics.ts +5 -4
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var Ln=Object.create;var{getPrototypeOf:_n,defineProperty:nn,getOwnPropertyNames:Gn}=Object;var In=Object.prototype.hasOwnProperty;var hn=(n,h,t)=>{t=n!=null?Ln(_n(n)):{};const x=h||!n||!n.__esModule?nn(t,"default",{value:n,enumerable:!0}):t;for(let o of Gn(n))if(!In.call(x,o))nn(x,o,{get:()=>n[o],enumerable:!0});return x};var tn=((n)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(n,{get:(h,t)=>(typeof require!=="undefined"?require:h)[t]}):n)(function(n){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});export*from"@swapkit/contracts";var M;(($)=>{$.Arbitrum="https://arb1.arbitrum.io/rpc";$.Avalanche="https://node-router.thorswap.net/avalanche-c";$.Base="https://base.llamarpc.com";$.BinanceSmartChain="https://bsc-dataseed.binance.org";$.Bitcoin="https://node-router.thorswap.net/bitcoin";$.BitcoinCash="https://node-router.thorswap.net/bitcoin-cash";$.Chainflip="wss://mainnet-archive.chainflip.io";$.Cosmos="https://node-router.thorswap.net/cosmos/rpc";$.Dash="https://node-router.thorswap.net/dash";$.Dogecoin="https://node-router.thorswap.net/dogecoin";$.Ethereum="https://node-router.thorswap.net/ethereum";$.Kujira="https://rpc-kujira.synergynodes.com/";$.Litecoin="https://node-router.thorswap.net/litecoin";$.Maya="https://tendermint.mayachain.info";$.MayaStagenet="https://stagenet.tendermint.mayachain.info";$.Optimism="https://mainnet.optimism.io";$.Polkadot="wss://rpc.polkadot.io";$.Polygon="https://polygon-rpc.com";$.Radix="https://radix-mainnet.rpc.grove.city/v1/326002fc/core";$.THORChain="https://rpc.thorswap.net";$.THORChainStagenet="https://stagenet-rpc.ninerealms.com";$.Solana="https://solana-rpc.publicnode.com"})(M||={});var v;((R)=>{R.Arbitrum="https://arbiscan.io";R.Avalanche="https://snowtrace.io";R.Base="https://basescan.org";R.BinanceSmartChain="https://bscscan.com";R.Bitcoin="https://blockchair.com/bitcoin";R.BitcoinCash="https://www.blockchair.com/bitcoin-cash";R.Chainflip="https://explorer.polkascan.io/polkadot";R.Cosmos="https://www.mintscan.io/cosmos";R.Dash="https://blockchair.com/dash";R.Dogecoin="https://blockchair.com/dogecoin";R.Ethereum="https://etherscan.io";R.Kujira="https://finder.kujira.network/kaiyo-1";R.Litecoin="https://blockchair.com/litecoin";R.Maya="https://www.mayascan.org";R.Optimism="https://optimistic.etherscan.io";R.Polkadot="https://polkadot.subscan.io";R.Polygon="https://polygonscan.com";R.Radix="https://dashboard.radixdlt.com";R.THORChain="https://runescan.io";R.Solana="https://solscan.io"})(v||={});var g;((R)=>{R.Arbitrum="ARB";R.Avalanche="AVAX";R.Base="BASE";R.BinanceSmartChain="BSC";R.Bitcoin="BTC";R.BitcoinCash="BCH";R.Cosmos="GAIA";R.Dash="DASH";R.Dogecoin="DOGE";R.Ethereum="ETH";R.Kujira="KUJI";R.Litecoin="LTC";R.Maya="MAYA";R.Optimism="OP";R.Polkadot="DOT";R.Chainflip="FLIP";R.Polygon="MATIC";R.Radix="XRD";R.THORChain="THOR";R.Solana="SOL"})(g||={});var Z;((N)=>{N.Arbitrum="42161";N.ArbitrumHex="0xa4b1";N.Avalanche="43114";N.AvalancheHex="0xa86a";N.Base="8453";N.BaseHex="0x2105";N.BinanceSmartChain="56";N.BinanceSmartChainHex="0x38";N.Bitcoin="bitcoin";N.BitcoinCash="bitcoincash";N.Chainflip="chainflip";N.Cosmos="cosmoshub-4";N.Dash="dash";N.Dogecoin="dogecoin";N.Kujira="kaiyo-1";N.Ethereum="1";N.EthereumHex="0x1";N.Litecoin="litecoin";N.Maya="mayachain-mainnet-v1";N.MayaStagenet="mayachain-stagenet-v1";N.Optimism="10";N.OptimismHex="0xa";N.Polkadot="polkadot";N.Polygon="137";N.PolygonHex="0x89";N.Radix="radix-mainnet";N.THORChain="thorchain-1";N.THORChainStagenet="thorchain-stagenet-v2";N.Solana="solana"})(Z||={});var Th={["0xa4b1"]:"ARB",["42161"]:"ARB",["0xa86a"]:"AVAX",["43114"]:"AVAX",["0x2105"]:"BASE",["8453"]:"BASE",["0x38"]:"BSC",["56"]:"BSC",["bitcoincash"]:"BCH",["bitcoin"]:"BTC",["chainflip"]:"FLIP",["cosmoshub-4"]:"GAIA",["dash"]:"DASH",["dogecoin"]:"DOGE",["0x1"]:"ETH",["kaiyo-1"]:"KUJI",["1"]:"ETH",["litecoin"]:"LTC",["mayachain-stagenet-v1"]:"MAYA",["mayachain-mainnet-v1"]:"MAYA",["0xa"]:"OP",["10"]:"OP",["polkadot"]:"DOT",["0x89"]:"MATIC",["137"]:"MATIC",["radix-mainnet"]:"XRD",["thorchain-stagenet-v2"]:"THOR",["thorchain-1"]:"THOR",["solana"]:"SOL"},gn=Object.keys(g),Y=Object.values(g),s={ARB:18,AVAX:18,BASE:18,BCH:8,BSC:18,BTC:8,DASH:8,DOGE:8,DOT:10,ETH:18,FLIP:18,GAIA:6,KUJI:6,LTC:8,MATIC:18,MAYA:8,OP:18,SOL:9,THOR:8,XRD:18},kh=["DOT","FLIP"],V=["ARB","AVAX","BASE","BSC","ETH","OP","MATIC"],Oh=["BTC","BCH","DASH","DOGE","LTC"],$h=["GAIA","THOR","MAYA","KUJI"],Lh=["AVAX","BSC","BTC","BCH","GAIA","DOGE","ETH","LTC","THOR"],_h=["ARB","DASH","ETH","KUJI","MAYA","THOR"],b=Y.reduce((n,h)=>{const t=gn.find((x)=>g[x]===h);if(t)n[h]=t;return n},{}),xn=Y.reduce((n,h)=>{return n[h]=Z[b[h]],n},{}),a=Y.reduce((n,h)=>{return n[h]=M[b[h]],n},{}),Gh=Y.reduce((n,h)=>{const t=`${b[h]}Hex`;return n[h]=Z[t],n},{}),Ih=Y.reduce((n,h)=>{return n[h]=v[b[h]],n},{});var Pn;((O)=>{O.TC_SUPPORTED_TO_TC_SUPPORTED="TC-TC";O.TC_SUPPORTED_TO_ETH="TC-ERC20";O.TC_SUPPORTED_TO_AVAX="TC-ARC20";O.TC_SUPPORTED_TO_BSC="TC-BEP20";O.ETH_TO_TC_SUPPORTED="ERC20-TC";O.ETH_TO_ETH="ERC20-ERC20";O.ETH_TO_AVAX="ERC20-ARC20";O.ETH_TO_BSC="ERC20-BEP20";O.AVAX_TO_TC_SUPPORTED="ARC20-TC";O.AVAX_TO_ETH="ARC20-ERC20";O.AVAX_TO_AVAX="ARC20-ARC20";O.AVAX_TO_BSC="ARC20-BEP20";O.BSC_TO_TC_SUPPORTED="BEP20-TC";O.BSC_TO_ETH="BEP20-ERC20";O.BSC_TO_AVAX="BEP20-ARC20";O.BSC_TO_BSC="BEP20-BEP20"})(Pn||={});var Ph=["ERC20-ERC20","ARC20-ARC20","BEP20-BEP20"],jh=["ERC20-TC","ERC20-ARC20","ERC20-BEP20","ARC20-TC","ARC20-ERC20","ARC20-BEP20","BEP20-TC","BEP20-ERC20","BEP20-ARC20"],Xh=["TC-TC","TC-ERC20","TC-ARC20","TC-BEP20"];var jn;((B)=>{B.ARB="0x0000000000000000000000000000000000000000";B.AVAX="0x0000000000000000000000000000000000000000";B.BASE="0x0000000000000000000000000000000000000000";B.ETH="0x0000000000000000000000000000000000000000";B.BSC="0x0000000000000000000000000000000000000000";B.MATIC="0x0000000000000000000000000000000000001010";B.OP="0x4200000000000000000000000000000000000042"})(jn||={});var Xn;((R)=>{R.ARB="m/44'/60'/0'/0";R.AVAX="m/44'/60'/0'/0";R.BASE="m/44'/60'/0'/0";R.BCH="m/44'/145'/0'/0";R.BSC="m/44'/60'/0'/0";R.BTC="m/84'/0'/0'/0";R.DASH="m/44'/5'/0'/0";R.DOGE="m/44'/3'/0'/0";R.DOT="////";R.ETH="m/44'/60'/0'/0";R.FLIP="////";R.GAIA="m/44'/118'/0'/0";R.KUJI="m/44'/118'/0'/0";R.LTC="m/84'/2'/0'/0";R.MATIC="m/44'/60'/0'/0";R.MAYA="m/44'/931'/0'/0";R.OP="m/44'/60'/0'/0";R.SOL="m/44'/501'/0'/0";R.THOR="m/44'/931'/0'/0";R.XRD="////"})(Xn||={});var d={ARB:[44,60,0,0,0],AVAX:[44,60,0,0,0],BASE:[44,60,0,0,0],BCH:[44,145,0,0,0],BSC:[44,60,0,0,0],BTC:[84,0,0,0,0],DASH:[44,5,0,0,0],DOGE:[44,3,0,0,0],ETH:[44,60,0,0,0],GAIA:[44,118,0,0,0],KUJI:[44,118,0,0,0],LTC:[84,2,0,0,0],MATIC:[44,60,0,0,0],MAYA:[44,931,0,0,0],OP:[44,60,0,0,0],SOL:[44,501,0,0,0],THOR:[44,931,0,0,0],XRD:[0,0,0,0,0],DOT:[0,0,0,0,0],FLIP:[0,0,0,0,0]};var on;((k)=>{k.BRAVE="BRAVE";k.COINBASE_MOBILE="COINBASE_MOBILE";k.COINBASE_WEB="COINBASE_WEB";k.EIP6963="EIP6963";k.EXODUS="EXODUS";k.KEEPKEY="KEEPKEY";k.KEEPKEY_BEX="KEEPKEY_BEX";k.KEPLR="KEPLR";k.KEYSTORE="KEYSTORE";k.LEAP="LEAP";k.LEDGER="LEDGER";k.LEDGER_LIVE="LEDGER_LIVE";k.METAMASK="METAMASK";k.OKX="OKX";k.OKX_MOBILE="OKX_MOBILE";k.PHANTOM="PHANTOM";k.POLKADOT_JS="POLKADOT_JS";k.RADIX_WALLET="RADIX_WALLET";k.TREZOR="TREZOR";k.TALISMAN="TALISMAN";k.TRUSTWALLET_WEB="TRUSTWALLET_WEB";k.WALLETCONNECT="WALLETCONNECT";k.XDEFI="XDEFI"})(on||={});var un;((x)=>{x[x.NoError=36864]="NoError";x[x.LockedDevice=21781]="LockedDevice";x[x.TC_NotFound=65535]="TC_NotFound"})(un||={});var Sn;((x)=>{x.Average="average";x.Fast="fast";x.Fastest="fastest"})(Sn||={});var yn;((t)=>{t.Approve="approve";t.CheckOnly="checkOnly"})(yn||={});var cn;((A)=>{A.NAME_REGISTER="~";A.BOND="BOND";A.DEPOSIT="+";A.LEAVE="LEAVE";A.UNBOND="UNBOND";A.WITHDRAW="-";A.OPEN_LOAN="$+";A.CLOSE_LOAN="$-";A.RUNEPOOL_DEPOSIT="POOL+";A.RUNEPOOL_WITHDRAW="POOL-"})(cn||={});var Jn;((c)=>{c.unknownError="unknownError";c.test_error="test_error";c.providerDetailsError="providerDetailsError";c.blockHeaderNotFound="blockHeaderNotFound";c.blockHashNotFoundAtHeight="blockHashNotFoundAtHeight";c.blockHashNotFoundAtHash="blockHashNotFoundAtHash";c.txHashMissing="txHashMissing";c.assetValueMissingInfo="assetValueMissingInfo";c.invalidAsset="invalidAsset";c.blockIsRequired="blockIsRequired";c.currentBlockHeaderNotFound="currentBlockHeaderNotFound";c.failedToRetrieveBalance="failedToRetrieveBalance";c.failedToRetrieveBlock="failedToRetrieveBlock";c.failedToRetrieveFees="failedToRetrieveFees";c.notImplementedBCH="notImplementedBCH";c.notImplementedDoge="notImplementedDoge";c.noPoolsFound="noPoolsFound";c.noVaultsFound="noVaultsFound";c.noTxFound="noTxFound";c.noInputCoinFound="noInputCoinFound";c.noBlockDataFound="noBlockDataFound";c.multipleCosmosMessages="multipleCosmosMessages";c.heightOrHashNotProvided="heightOrHashNotProvided";c.unknownDenom="unknownDenom";c.invalidBlockHeight="invalidBlockHeight";c.timestampExtrinsicNoArgumentsForBlock="timestampExtrinsicNoArgumentsForBlock";c.timestampExtrinsicNoTimestampForBlock="timestampExtrinsicNoTimestampForBlock";c.noTimestampExtrinsicForHash="noTimestampExtrinsicForHash";c.timestampExtrinsicNoArgumentsForHash="timestampExtrinsicNoArgumentsForHash";c.txMemoUndefined="txMemoUndefined";c.txMemoIncorrect="txMemoIncorrect";c.txTypeNotFound="txTypeNotFound";c.txNoMessage="txNoMessage";c.txNotFound="txNotFound";c.txReceiptNotFound="txReceiptNotFound";c.txParsingError="txParsingError";c.blockNotFound="blockNotFound";c.balanceNotFound="balanceNotFound";c.configError="configError";c.noQuoteResponse="noQuoteResponse";c.noPoolAssetsFound="noPoolAssetsFound";c.noThorchainPools="noThorchainPools";c.noMayachainPools="noMayachainPools";c.invalidAffiliateFee="invalidAffiliateFee";c.invalidBuyAssetAddress="invalidBuyAssetAddress";c.invalidSellAssetAddress="invalidSellAssetAddress";c.invalidSourceAddress="invalidSourceAddress";c.invalidDestinationAddress="invalidDestinationAddress";c.sourceAddressIsSmartContract="sourceAddressIsSmartContract";c.destinationAddressIsSmartContract="destinationAddressIsSmartContract";c.invalidChainId="invalidChainId";c.unsupportedChainId="unsupportedChainId";c.unsupportedEVMChainId="unsupportedEVMChainId";c.noWhitelistTokens="noWhitelistTokens";c.failedFetchGasPrice="failedFetchGasPrice";c.failedToCreateDepositChannel="failedToCreateDepositChannel";c.noProviderDetailsFound="noProviderDetailsFound";c.noTokenListsFound="noTokenListsFound";c.tokenNotFound="tokenNotFound";c.tokenPriceNotFound="tokenPriceNotFound";c.swapAmountTooSmall="swapAmountTooSmall";c.legsArrayIsEmpty="legsArrayIsEmpty";c.failedToFetchQuoteForLeg="failedToFetchQuoteForLeg";c.noBlockHeaderFound="noBlockHeaderFound";c.failedToSimulateSwap="failedToSimulateSwap";c.addressScreeningFailed="addressScreeningFailed";c.noLiquidtyProvidersFound="noLiquidtyProvidersFound";c.noSaversFound="noSaversFound";c.noInboundAddressesFound="noInboundAddressesFound";c.noInboundAddressFoundForChain="noInboundAddressFoundForChain";c.noLastBlocksFound="noLastBlocksFound";c.noVersionFound="noVersionFound";c.noConstantsFound="noConstantsFound";c.noMimirsFound="noMimirsFound";c.noRoutesFound="noRoutesFound";c.quoteNotFound="quoteNotFound";c.ledgerSignFailed="ledgerSignFailed";c.ledgerFetchSwapFailed="ledgerFetchSwapFailed";c.failedToFetchTx="failedToFetchTx";c.failedBuildTransactionDetails="failedBuildTransactionDetails";c.noLegsForRoute="noLegsForRoute";c.noRouterAddressFound="noRouterAddressFound";c.noAggregatorAddressFound="noAggregatorAddressFound";c.noContractInstanceFound="noContractInstanceFound";c.noContractAddressFound="noContractAddressFound";c.invalidAffiliate="invalidAffiliate";c.providerNotfound="No provider found";c.noRecordFound="No Record found";c.slippageTooLow="Slippage too low";c.tradingHalted="tradingHalted";c.noWrappedGasAsset="noWrappedGasAsset";c.aggregatorAddressNotFound="aggregatorAddressNotFound";c.routerAddressNotFound="routerAddressNotFound";c.dummyAddressNotFound="dummyAddressNotFound";c.trackerError="trackerError";c.noOhlcvDataFound="noOhlcvDataFound";c.noTradingPairs="noTradingPairs";c.noLoanPositionFound="noLoanPositionFound";c.noLendingAvailability="noLendingAvailability";c.lendingRepayTooSmall="lendingRepayTooSmall";c.missingState="missingState";c.ledgerSwapNotFound="ledgerSwapNotFound";c.ledgerSwapNotReadyForTracking="ledgerSwapNotReadyForTracking";c.errorEstimatingGas="errorEstimatingGas";c.apiKeyInvalid="apiKeyInvalid";c.apiKeyFailedToUpdate="apiKeyFailedToUpdate";c.apiKeyExpired="apiKeyExpired";c.unauthorized="unauthorized";c.failedToCreateMemo="failedToCreateMemo";c.radixIncorrectInstructions="radixIncorrectInstructions";c.invalidAddressForChain="invalidAddressForChain"})(Jn||={});var pn;((t)=>{t.highSlippage="highSlippage";t.highPriceImpact="highPriceImpact"})(pn||={});var wn;((L)=>{L.CHAINFLIP="CHAINFLIP";L.MAYACHAIN="MAYACHAIN";L.MAYACHAIN_STREAMING="MAYACHAIN_STREAMING";L.ONEINCH="ONEINCH";L.PANCAKESWAP="PANCAKESWAP";L.PANGOLIN_V1="PANGOLIN_V1";L.SUSHISWAP_V2="SUSHISWAP_V2";L.THORCHAIN="THORCHAIN";L.THORCHAIN_STREAMING="THORCHAIN_STREAMING";L.TRADERJOE_V2="TRADERJOE_V2";L.UNISWAP_V2="UNISWAP_V2";L.UNISWAP_V3="UNISWAP_V3";L.CAVIAR_V1="CAVIAR_V1"})(wn||={});var zn;((F)=>{F.LIQUIDITY="liquidity";F.NETWORK="network";F.INBOUND="inbound";F.OUTBOUND="outbound";F.AFFILIATE="affiliate";F.TAX="tax"})(zn||={});function bh({apiKey:n,...h}){m={...h,apiKey:n}}async function K(n,h){const{apiKey:t,...x}=m,{searchParams:o,json:H,body:F}=h,B={...Zn,...x.headers,...h.headers,...H?{"Content-Type":"application/json"}:{}},T=H?JSON.stringify(H):F,C=new URL(n);if(o)C.search=new URLSearchParams(o).toString();if(t)B["x-api-key"]=t;try{const I=await(await fetch(C.toString(),{...x,...h,body:T,headers:B})).json();if(h.responseHandler)return h.responseHandler(I);return I}catch(A){if(h.onError)return h.onError(A);console.error(A)}}var m={},Zn=typeof window!=="undefined"?{}:{referrer:"https://sk.thorswap.net",referer:"https://sk.thorswap.net"},w={get:async(n,h)=>K(n,{...h,method:"GET"}),post:async(n,h)=>K(n,{...h,method:"POST"}),extend:(n)=>{const h={...m,...n};return{get:async(t,x)=>K(t,{...h,...x,method:"GET"}),post:async(t,x)=>K(t,{...h,...x,method:"POST"}),extend:(t)=>w.extend({...h,...t})}}};var Yn={core_estimated_max_spendable_chain_not_supported:10002,core_extend_error:10003,core_inbound_data_not_found:10004,core_approve_asset_address_or_from_not_found:10005,core_plugin_not_found:10006,core_plugin_swap_not_found:10007,core_approve_asset_target_invalid:10008,core_explorer_unsupported_chain:10009,core_verify_message_not_supported:10010,core_chain_halted:10099,core_wallet_connection_not_found:10100,core_wallet_xdefi_not_installed:10101,core_wallet_evmwallet_not_installed:10102,core_wallet_walletconnect_not_installed:10103,core_wallet_keystore_not_installed:10104,core_wallet_ledger_not_installed:10105,core_wallet_trezor_not_installed:10106,core_wallet_keplr_not_installed:10107,core_wallet_okx_not_installed:10108,core_wallet_keepkey_not_installed:10109,core_wallet_talisman_not_installed:10110,core_wallet_not_keypair_wallet:10111,core_wallet_sign_message_not_supported:10110,core_swap_invalid_params:10200,core_swap_route_not_complete:10201,core_swap_asset_not_recognized:10202,core_swap_contract_not_found:10203,core_swap_route_transaction_not_found:10204,core_swap_contract_not_supported:10205,core_swap_transaction_error:10206,core_swap_quote_mode_not_supported:10207,core_transaction_deposit_error:10301,core_transaction_create_liquidity_base_error:10302,core_transaction_create_liquidity_asset_error:10303,core_transaction_create_liquidity_invalid_params:10304,core_transaction_add_liquidity_invalid_params:10305,core_transaction_add_liquidity_base_address:10306,core_transaction_add_liquidity_base_error:10307,core_transaction_add_liquidity_asset_error:10308,core_transaction_withdraw_error:10309,core_transaction_deposit_to_pool_error:10310,core_transaction_deposit_insufficient_funds_error:10311,core_transaction_deposit_gas_error:10312,core_transaction_invalid_sender_address:10313,core_transaction_deposit_server_error:10314,core_transaction_user_rejected:10315,core_transaction_failed:10316,core_transaction_invalid_recipient_address:10317,wallet_connection_rejected_by_user:20000,wallet_missing_api_key:20001,wallet_chain_not_supported:20002,wallet_missing_params:20003,wallet_provider_not_found:20004,wallet_failed_to_add_or_switch_network:20005,wallet_ledger_connection_error:20101,wallet_ledger_connection_claimed:20102,wallet_ledger_get_address_error:20103,wallet_ledger_device_not_found:20104,wallet_ledger_device_locked:20105,wallet_phantom_not_found:20201,wallet_xdefi_not_found:20301,wallet_xdefi_send_transaction_no_address:20302,wallet_xdefi_contract_address_not_provided:20303,wallet_xdefi_asset_not_defined:20304,wallet_walletconnect_project_id_not_specified:20401,wallet_walletconnect_connection_not_established:20402,wallet_walletconnect_namespace_not_supported:20403,wallet_trezor_failed_to_sign_transaction:20501,wallet_trezor_derivation_path_not_supported:20502,wallet_trezor_failed_to_get_address:20503,wallet_talisman_not_enabled:20601,wallet_talisman_not_found:20602,wallet_polkadot_not_found:20701,wallet_radix_not_found:20801,wallet_radix_transaction_failed:20802,wallet_keepkey_not_found:20900,wallet_keepkey_asset_not_defined:20901,wallet_keepkey_contract_address_not_provided:20902,wallet_keepkey_send_transaction_no_address:20903,chainflip_channel_error:30001,chainflip_unknown_asset:30002,chainflip_broker_invalid_params:30100,chainflip_broker_recipient_error:30101,chainflip_broker_register:30102,chainflip_broker_tx_error:30103,chainflip_broker_withdraw:30104,chainflip_broker_fund_only_flip_supported:30105,chainflip_broker_fund_invalid_address:30106,thorchain_chain_halted:40001,thorchain_trading_halted:40002,thorchain_swapin_router_required:40100,thorchain_swapin_vault_required:40101,thorchain_swapin_memo_required:40102,thorchain_swapin_token_required:40103,thorchain_preferred_asset_payout_required:40104,api_v2_invalid_response:50001,api_v2_server_error:50002,toolbox_cosmos_signer_not_defined:90101,toolbox_cosmos_no_accounts_found:90102,toolbox_cosmos_verify_signature_no_pubkey:90103,toolbox_evm_no_abi_fragment:90201,toolbox_evm_no_signer:90202,toolbox_evm_no_signer_address:90203,toolbox_evm_no_from_address:90204,toolbox_evm_no_contract_address:90205,toolbox_evm_no_fee_data:90206,toolbox_evm_no_gas_price:90207,toolbox_evm_no_to_address:90208,toolbox_evm_invalid_gas_asset_address:90209,toolbox_evm_provider_not_eip1193_compatible:90210,toolbox_evm_error_estimating_gas_limit:90211,toolbox_evm_error_sending_transaction:90212,toolbox_radix_signer_not_defined:90301,helpers_invalid_number_different_decimals:99000,helpers_invalid_number_of_years:99001,helpers_invalid_identifier:99002,helpers_invalid_asset_url:99003,helpers_invalid_asset_identifier:99004,helpers_invalid_memo_type:99005,helpers_failed_to_switch_network:99103,helpers_not_found_provider:99200,not_implemented:99999};class G extends Error{static ErrorCode=Yn;constructor(n,h){const t=typeof n==="string",x=t?n:n.errorKey;if(h)console.error(h,{stack:h?.stack,message:h?.message});super(x,{cause:{code:G.ErrorCode[x],message:`${x}${t?"":`: ${JSON.stringify(n.info)}`}`}});Object.setPrototypeOf(this,G.prototype)}}function ah(n){if(n<0)throw new G({errorKey:"helpers_invalid_number_of_years",info:{numberOfYears:n}});return 10+n}function dh(n){if(n<0)throw new G({errorKey:"helpers_invalid_number_of_years",info:{numberOfYears:n}});return Math.round((10+n*1.0512)*10000000000)/10000000000}function mh(n,h){try{return n()}catch(t){if(h)throw new G(h,t);return console.error(t)}}function ih(n){switch(n){case"THOR":return`${n}.RUNE`;case"GAIA":return`${n}.ATOM`;case"BSC":return`${n}`;default:return`${n}.${n}`}}function Fn(n,h){if(!qn&&n){if(Hn.has(h))return;Hn.add(h),console.warn(h)}}async function rh(n="thorchain-1"){if(!["thorchain-stagenet-v2","thorchain-1","thorchain-mainnet-v1"].includes(n))return n;try{return(await w.get(`${n!=="thorchain-1"?"https://stagenet-rpc.ninerealms.com":"https://rpc.thorswap.net"}/status`)).result.node_info.network}catch(h){return n}}var qn=["production","test"].includes("development"),Hn=new Set;function Bn(n=""){const h=n.toUpperCase(),[t]=h.split(".");if(Rn.includes(t))return!0;const[x]=h.split("/");if(Rn.includes(x))return!0;throw new G({errorKey:"helpers_invalid_identifier",info:{message:`Invalid identifier: ${n}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`,identifier:n}})}function ht(n){if(n.length>30)return!1;const h=/^[a-zA-Z0-9+_-]+$/g;return!!n.match(h)}var Rn=[...Object.values(g),"TERRA"];function z({value:n,bigIntDecimal:h=Q,decimal:t=Q}){if(t===0)return n.toString();const x=n<0n;let o=n.toString().substring(x?1:0);const H=t-(o.length-1);if(H>0)o="0".repeat(H)+o;const F=o.length-t;let B=o.slice(-t);if(Number.parseInt(B[h]||"0")>=5)B=`${B.substring(0,h-1)}${(Number.parseInt(B[h-1]||"0")+1).toString()}`;else B=B.substring(0,h);return`${x?"-":""}${o.slice(0,F)}.${B}`.replace(/\.?0*$/,"")}function D(n){const t=`${typeof n==="number"?Qn.format(n):i(n)}`.replaceAll(",",".").split(".");return t.length>1?`${t.slice(0,-1).join("")}.${t.at(-1)}`:t[0]||"0"}function Cn(n){const h=n.split(".")[1]?.length||0;return Math.max(h,Q)}function i(n){return typeof n==="object"?"getValue"in n?n.getValue("string"):n.value:n}var Q=8,p=(n)=>10n**BigInt(n),q=(n)=>Math.log10(Number.parseFloat(n.toString()));class S{decimalMultiplier=10n**8n;bigIntValue=0n;decimal;static fromBigInt(n,h){return new S({decimal:h,value:z({value:n,bigIntDecimal:h,decimal:h})})}static shiftDecimals({value:n,from:h,to:t}){return S.fromBigInt(n.getBaseValue("bigint")*p(t)/p(h),t)}constructor(n){const h=i(n),t=typeof n==="object";this.decimal=t?n.decimal:void 0,this.decimalMultiplier=t&&"decimalMultiplier"in n?n.decimalMultiplier:p(Math.max(Cn(D(h)),this.decimal||0)),this.#o(h)}set(n){return new this.constructor({decimal:this.decimal,value:n,identifier:this.toString({includeSynthProtocol:!0})})}add(...n){return this.#h("add",...n)}sub(...n){return this.#h("sub",...n)}mul(...n){return this.#h("mul",...n)}div(...n){return this.#h("div",...n)}gt(n){return this.#n("gt",n)}gte(n){return this.#n("gte",n)}lt(n){return this.#n("lt",n)}lte(n){return this.#n("lte",n)}eqValue(n){return this.#n("eqValue",n)}getValue(n){const h=this.formatBigIntToSafeValue(this.bigIntValue,this.decimal||q(this.decimalMultiplier));switch(n){case"number":return Number(h);case"string":return h;case"bigint":return this.bigIntValue*10n**BigInt(this.decimal||8n)/this.decimalMultiplier}}getBaseValue(n){const h=this.decimalMultiplier/p(this.decimal||s.THOR),t=this.bigIntValue/h;switch(n){case"number":return Number(t);case"string":return t.toString();case"bigint":return t}}getBigIntValue(n,h){if(!h&&typeof n==="object")return n.bigIntValue;const t=i(n),x=D(t);if(x==="0"||x==="undefined")return 0n;return this.#x(x,h)}toSignificant(n=6){const[h,t]=this.getValue("string").split("."),x=h||"",o=t||"";if((Number.parseInt(x)?x.length+o.length:o.length)<=n)return this.getValue("string");if(x.length>=n)return x.slice(0,n).padEnd(x.length,"0");if(Number.parseInt(x))return`${x}.${o.slice(0,n-x.length)}`.padEnd(n-x.length,"0");const F=Number.parseInt(o),B=`${F}`.slice(0,n);return`0.${B.padStart(o.length-`${F}`.length+B.length,"0")}`}toFixed(n=6){const[h,t]=this.getValue("string").split("."),x=h||"",o=t||"";if(Number.parseInt(x))return`${x}.${o.slice(0,n)}`.padEnd(n,"0");const H=Number.parseInt(o),F=`${H}`.slice(0,n);return`0.${F.padStart(o.length-`${H}`.length+F.length,"0")}`}toAbbreviation(n=2){const h=this.getValue("number"),t=["","K","M","B","T","Q","Qi","S"],x=Math.floor(Math.log10(Math.abs(h))/3),o=t[x];if(!o)return this.getValue("string");const H=10**(x*3);return`${(h/H).toFixed(n)}${o}`}toCurrency(n="$",{currencyPosition:h="start",decimal:t=2,decimalSeparator:x=".",thousandSeparator:o=","}={}){const H=this.getValue("number"),[F="",B=""]=H.toFixed(6).split("."),T=F.replace(/\B(?=(\d{3})+(?!\d))/g,o),C=F||B?F==="0"?`${Number.parseFloat(`0.${B}`)}`.replace(".",x):`${T}${Number.parseInt(B)?`${x}${B.slice(0,t)}`:""}`:"0.00";return`${h==="start"?n:""}${C}${h==="end"?n:""}`}formatBigIntToSafeValue(n,h){const t=h||this.decimal||Q,x=Math.max(t,q(this.decimalMultiplier)),o=n<0n,H=n.toString().substring(o?1:0),F=x-(H.length-1),B=F>0?"0".repeat(F)+H:H,T=B.length-x;let C=B.slice(-x);if(Number.parseInt(C[t]||"0")>=5)C=`${C.substring(0,t-1)}${(Number.parseInt(C[t-1]||"0")+1).toString()}`;else C=C.substring(0,t);return`${o?"-":""}${B.slice(0,T)}.${C}`.replace(/\.?0*$/,"")}#h(n,...h){const t=this.#t(this,...h),x=Math.max(t,q(this.decimalMultiplier)),o=p(x),H=h.reduce((B,T)=>{const C=this.getBigIntValue(T,x);switch(n){case"add":return B+C;case"sub":return B-C;case"mul":return B*C/o;case"div":{if(C===0n)throw new RangeError("Division by zero");return B*o/C}default:return B}},this.bigIntValue*o/this.decimalMultiplier),F=z({bigIntDecimal:x,decimal:x,value:H});return new this.constructor({decimalMultiplier:p(x),decimal:this.decimal,value:F,identifier:this.toString()})}#n(n,...h){const t=this.#t(this,...h),x=this.getBigIntValue(h[0]||"0",t),o=this.getBigIntValue(this,t);switch(n){case"gt":return o>x;case"gte":return o>=x;case"lt":return o<x;case"lte":return o<=x;case"eqValue":return o===x}}#o(n){const h=D(n)||"0";this.bigIntValue=this.#x(h)}#t(...n){const h=n.map((t)=>{return typeof t==="object"?t.decimal||q(t.decimalMultiplier):Cn(D(t))}).filter(Boolean);return Math.max(...h,Q)}#x(n,h){const t=h?p(h):this.decimalMultiplier,x=q(t),[o="",H=""]=n.split(".");return BigInt(`${o}${H.padEnd(x,"0")}`)}}var Qn=Intl.NumberFormat("fullwide",{useGrouping:!1,maximumFractionDigits:20});function Nt(n){const h=_.from({chain:n});switch(n){case"BTC":case"LTC":case"BCH":case"DASH":return h.set(0.00010001);case"DOGE":return h.set(1.00000001);case"AVAX":case"ETH":case"ARB":case"BSC":return h.set(0.00000001);case"THOR":case"MAYA":return h.set(0);case"GAIA":case"KUJI":return h.set(0.000001);default:return h.set(0.00000001)}}async function fn(n,h=0){Bn(n);const x=n.includes("SOL.")?n:n.toUpperCase(),o=U.get(x),H=o?.decimal||await An(r(n));if(!o)U.set(x,{identifier:n,decimal:H});return new _({decimal:H,value:E(h,H),identifier:n})}function Wn(n,h=0){const t=n.includes(".")?n.split(".")?.[0]?.toUpperCase():void 0,x=t?["MAYA","THOR"].includes(t):!1,o=n.slice(0,14).includes("~")?"~":"/",[H,F]=x?n.split(".").slice(1).join().split(o):n.split(o);if(!(H&&F))throw new G({errorKey:"helpers_invalid_asset_identifier",info:{identifier:n}});return new _({decimal:8,value:E(h,8),identifier:`${t||"THOR"}.${H}${o}${F}`})}function E(n,h){return typeof n==="bigint"?z({value:n,bigIntDecimal:h,decimal:h}):n}function r(n){const h=n.slice(0,14).includes("/"),t=n.slice(0,14).includes("~"),x=t?"~":"/",o=n.split(".")?.[0]?.toUpperCase()==="THOR",H=n.split(".")?.[0]?.toUpperCase()==="MAYA",[F,B=""]=o||H?n.split(".").slice(1).join().split(x):n.split(x);if((h||t)&&!(F&&B))throw new G({errorKey:"helpers_invalid_asset_identifier",info:{identifier:n}});const T=n.includes(".")&&!h&&!t?n:`${H?"MAYA":"THOR"}.${B}`,[C,...A]=T.split("."),I=h||t?B:A.join("."),j=I.split("-"),L=j.length===1?j[0]:j.slice(0,-1).join("-"),y=j.length===1?void 0:j[j.length-1],u=C==="SOL"?y:y?.toLowerCase();return{address:u,chain:C,isGasAsset:l({chain:C,symbol:I}),isSynthetic:h,isTradeAsset:t,ticker:L,symbol:(h||t?`${F}${x}`:"")+(u?`${L}-${u??""}`:I)}}var U=new Map;class _ extends S{address;chain;isGasAsset=!1;isSynthetic=!1;isTradeAsset=!1;symbol;tax;ticker;type;chainId;constructor({value:n,decimal:h,tax:t,chain:x,symbol:o,identifier:H}){super(typeof n==="object"?n:{decimal:h,value:n});const F=r(H||`${x}.${o}`);this.type=Tn(F),this.tax=t,this.chain=F.chain,this.ticker=F.ticker,this.symbol=F.symbol,this.address=F.address,this.isSynthetic=F.isSynthetic,this.isTradeAsset=F.isTradeAsset,this.isGasAsset=F.isGasAsset,this.chainId=xn[F.chain]}toString({includeSynthProtocol:n}={}){return(this.isSynthetic||this.isTradeAsset)&&!n?this.symbol:`${this.chain}.${this.symbol}`}toUrl(){return this.isSynthetic?`${this.chain}.${this.symbol.replace("/",".")}`:this.isTradeAsset?`${this.chain}.${this.symbol.replace("~","..")}`:this.toString()}eqAsset({chain:n,symbol:h}){return this.chain===n&&this.symbol===h}eq(n){return this.eqAsset(n)&&this.eqValue(n)}static fromUrl(n,h=0){const[t,x,o]=n.split(".");if(!(t&&x))throw new G({errorKey:"helpers_invalid_asset_url",info:{urlAsset:n}});const H=t==="THOR"&&o?`${t}.${x}/${o}`:n;return _.from({asset:H,value:h})}static from({value:n=0,fromBaseDecimal:h,asyncTokenLookup:t,...x}){const o=n instanceof S?n.getValue("string"):n,H="chain"in x,F=H?x.chain:x.asset,B=H||Nn.includes(F),{identifier:T,decimal:C}=B?sn(F):{identifier:F,decimal:void 0},{chain:A,isSynthetic:I,isTradeAsset:j}=r(T),L=U.get(A==="SOL"?T:T.toUpperCase()),y=L?.decimal||C;Fn(!(t||y),`Couldn't find static decimal for ${T} (Using default ${s[A]} decimal as fallback).
|
|
1
|
+
var Gn=Object.create;var{getPrototypeOf:Ln,defineProperty:hn,getOwnPropertyNames:sn}=Object;var jn=Object.prototype.hasOwnProperty;var Hn=(n,h,H)=>{H=n!=null?Gn(Ln(n)):{};let x=h||!n||!n.__esModule?hn(H,"default",{value:n,enumerable:!0}):H;for(let R of sn(n))if(!jn.call(x,R))hn(x,R,{get:()=>n[R],enumerable:!0});return x};var xn=((n)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(n,{get:(h,H)=>(typeof require!=="undefined"?require:h)[H]}):n)(function(n){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});export*from"@swapkit/contracts";var p;((_)=>{_.Arbitrum="https://arb1.arbitrum.io/rpc";_.Avalanche="https://node-router.thorswap.net/avalanche-c";_.Base="https://base.llamarpc.com";_.BinanceSmartChain="https://bsc-dataseed.binance.org";_.Bitcoin="https://node-router.thorswap.net/bitcoin";_.BitcoinCash="https://node-router.thorswap.net/bitcoin-cash";_.Chainflip="wss://mainnet-archive.chainflip.io";_.Cosmos="https://node-router.thorswap.net/cosmos/rpc";_.Dash="https://node-router.thorswap.net/dash";_.Dogecoin="https://node-router.thorswap.net/dogecoin";_.Ethereum="https://node-router.thorswap.net/ethereum";_.Kujira="https://rpc-kujira.synergynodes.com/";_.Litecoin="https://node-router.thorswap.net/litecoin";_.Maya="https://tendermint.mayachain.info";_.MayaStagenet="https://stagenet.tendermint.mayachain.info";_.Optimism="https://mainnet.optimism.io";_.Polkadot="wss://rpc.polkadot.io";_.Polygon="https://polygon-rpc.com";_.Radix="https://radix-mainnet.rpc.grove.city/v1/326002fc/core";_.THORChain="https://rpc.thorswap.net";_.THORChainStagenet="https://stagenet-rpc.ninerealms.com";_.Solana="https://solana-rpc.publicnode.com"})(p||={});var m;((C)=>{C.Arbitrum="https://arbiscan.io";C.Avalanche="https://snowtrace.io";C.Base="https://basescan.org";C.BinanceSmartChain="https://bscscan.com";C.Bitcoin="https://blockchair.com/bitcoin";C.BitcoinCash="https://www.blockchair.com/bitcoin-cash";C.Chainflip="https://explorer.polkascan.io/polkadot";C.Cosmos="https://www.mintscan.io/cosmos";C.Dash="https://blockchair.com/dash";C.Dogecoin="https://blockchair.com/dogecoin";C.Ethereum="https://etherscan.io";C.Kujira="https://finder.kujira.network/kaiyo-1";C.Litecoin="https://blockchair.com/litecoin";C.Maya="https://www.mayascan.org";C.Optimism="https://optimistic.etherscan.io";C.Polkadot="https://polkadot.subscan.io";C.Polygon="https://polygonscan.com";C.Radix="https://dashboard.radixdlt.com";C.THORChain="https://runescan.io";C.Solana="https://solscan.io"})(m||={});var X;((C)=>{C.Arbitrum="ARB";C.Avalanche="AVAX";C.Base="BASE";C.BinanceSmartChain="BSC";C.Bitcoin="BTC";C.BitcoinCash="BCH";C.Cosmos="GAIA";C.Dash="DASH";C.Dogecoin="DOGE";C.Ethereum="ETH";C.Kujira="KUJI";C.Litecoin="LTC";C.Maya="MAYA";C.Optimism="OP";C.Polkadot="DOT";C.Chainflip="FLIP";C.Polygon="MATIC";C.Radix="XRD";C.THORChain="THOR";C.Solana="SOL"})(X||={});var Q;((c)=>{c.Arbitrum="42161";c.ArbitrumHex="0xa4b1";c.Avalanche="43114";c.AvalancheHex="0xa86a";c.Base="8453";c.BaseHex="0x2105";c.BinanceSmartChain="56";c.BinanceSmartChainHex="0x38";c.Bitcoin="bitcoin";c.BitcoinCash="bitcoincash";c.Chainflip="chainflip";c.Cosmos="cosmoshub-4";c.Dash="dash";c.Dogecoin="dogecoin";c.Kujira="kaiyo-1";c.Ethereum="1";c.EthereumHex="0x1";c.Litecoin="litecoin";c.Maya="mayachain-mainnet-v1";c.MayaStagenet="mayachain-stagenet-v1";c.Optimism="10";c.OptimismHex="0xa";c.Polkadot="polkadot";c.Polygon="137";c.PolygonHex="0x89";c.Radix="radix-mainnet";c.THORChain="thorchain-1";c.THORChainStagenet="thorchain-stagenet-v2";c.Solana="solana"})(Q||={});var Oh={["0xa4b1"]:"ARB",["42161"]:"ARB",["0xa86a"]:"AVAX",["43114"]:"AVAX",["0x2105"]:"BASE",["8453"]:"BASE",["0x38"]:"BSC",["56"]:"BSC",["bitcoincash"]:"BCH",["bitcoin"]:"BTC",["chainflip"]:"FLIP",["cosmoshub-4"]:"GAIA",["dash"]:"DASH",["dogecoin"]:"DOGE",["0x1"]:"ETH",["kaiyo-1"]:"KUJI",["1"]:"ETH",["litecoin"]:"LTC",["mayachain-stagenet-v1"]:"MAYA",["mayachain-mainnet-v1"]:"MAYA",["0xa"]:"OP",["10"]:"OP",["polkadot"]:"DOT",["0x89"]:"MATIC",["137"]:"MATIC",["radix-mainnet"]:"XRD",["thorchain-stagenet-v2"]:"THOR",["thorchain-1"]:"THOR",["solana"]:"SOL"},Xn=Object.keys(X),y=Object.values(X),k={ARB:18,AVAX:18,BASE:18,BCH:8,BSC:18,BTC:8,DASH:8,DOGE:8,DOT:10,ETH:18,FLIP:18,GAIA:6,KUJI:6,LTC:8,MATIC:18,MAYA:8,OP:18,SOL:9,THOR:8,XRD:18},$h=["DOT","FLIP"],K=["ARB","AVAX","BASE","BSC","ETH","OP","MATIC"],th=["BTC","BCH","DASH","DOGE","LTC"],_h=["GAIA","THOR","MAYA","KUJI"],Gh=["AVAX","BSC","BTC","BCH","GAIA","DOGE","ETH","LTC","THOR"],Lh=["ARB","DASH","ETH","KUJI","MAYA","THOR"],f=y.reduce((n,h)=>{let H=Xn.find((x)=>X[x]===h);if(H)n[h]=H;return n},{}),Rn=y.reduce((n,h)=>{return n[h]=Q[f[h]],n},{}),d=y.reduce((n,h)=>{return n[h]=p[f[h]],n},{}),sh=y.reduce((n,h)=>{let H=`${f[h]}Hex`;return n[h]=Q[H],n},{}),jh=y.reduce((n,h)=>{return n[h]=m[f[h]],n},{});var Jn;((t)=>{t.TC_SUPPORTED_TO_TC_SUPPORTED="TC-TC";t.TC_SUPPORTED_TO_ETH="TC-ERC20";t.TC_SUPPORTED_TO_AVAX="TC-ARC20";t.TC_SUPPORTED_TO_BSC="TC-BEP20";t.ETH_TO_TC_SUPPORTED="ERC20-TC";t.ETH_TO_ETH="ERC20-ERC20";t.ETH_TO_AVAX="ERC20-ARC20";t.ETH_TO_BSC="ERC20-BEP20";t.AVAX_TO_TC_SUPPORTED="ARC20-TC";t.AVAX_TO_ETH="ARC20-ERC20";t.AVAX_TO_AVAX="ARC20-ARC20";t.AVAX_TO_BSC="ARC20-BEP20";t.BSC_TO_TC_SUPPORTED="BEP20-TC";t.BSC_TO_ETH="BEP20-ERC20";t.BSC_TO_AVAX="BEP20-ARC20";t.BSC_TO_BSC="BEP20-BEP20"})(Jn||={});var Jh=["ERC20-ERC20","ARC20-ARC20","BEP20-BEP20"],Ih=["ERC20-TC","ERC20-ARC20","ERC20-BEP20","ARC20-TC","ARC20-ERC20","ARC20-BEP20","BEP20-TC","BEP20-ERC20","BEP20-ARC20"],Sh=["TC-TC","TC-ERC20","TC-ARC20","TC-BEP20"];var In;((o)=>{o.ARB="0x0000000000000000000000000000000000000000";o.AVAX="0x0000000000000000000000000000000000000000";o.BASE="0x0000000000000000000000000000000000000000";o.ETH="0x0000000000000000000000000000000000000000";o.BSC="0x0000000000000000000000000000000000000000";o.MATIC="0x0000000000000000000000000000000000001010";o.OP="0x4200000000000000000000000000000000000042"})(In||={});var Sn;((C)=>{C.ARB="m/44'/60'/0'/0";C.AVAX="m/44'/60'/0'/0";C.BASE="m/44'/60'/0'/0";C.BCH="m/44'/145'/0'/0";C.BSC="m/44'/60'/0'/0";C.BTC="m/84'/0'/0'/0";C.DASH="m/44'/5'/0'/0";C.DOGE="m/44'/3'/0'/0";C.DOT="////";C.ETH="m/44'/60'/0'/0";C.FLIP="////";C.GAIA="m/44'/118'/0'/0";C.KUJI="m/44'/118'/0'/0";C.LTC="m/84'/2'/0'/0";C.MATIC="m/44'/60'/0'/0";C.MAYA="m/44'/931'/0'/0";C.OP="m/44'/60'/0'/0";C.SOL="m/44'/501'/0'/0";C.THOR="m/44'/931'/0'/0";C.XRD="////"})(Sn||={});var b={ARB:[44,60,0,0,0],AVAX:[44,60,0,0,0],BASE:[44,60,0,0,0],BCH:[44,145,0,0,0],BSC:[44,60,0,0,0],BTC:[84,0,0,0,0],DASH:[44,5,0,0,0],DOGE:[44,3,0,0,0],ETH:[44,60,0,0,0],GAIA:[44,118,0,0,0],KUJI:[44,118,0,0,0],LTC:[84,2,0,0,0],MATIC:[44,60,0,0,0],MAYA:[44,931,0,0,0],OP:[44,60,0,0,0],SOL:[44,501,0,0,0],THOR:[44,931,0,0,0],XRD:[0,0,0,0,0],DOT:[0,0,0,0,0],FLIP:[0,0,0,0,0]};var Fn;(($)=>{$.BRAVE="BRAVE";$.COINBASE_MOBILE="COINBASE_MOBILE";$.COINBASE_WEB="COINBASE_WEB";$.EIP6963="EIP6963";$.EXODUS="EXODUS";$.KEEPKEY="KEEPKEY";$.KEEPKEY_BEX="KEEPKEY_BEX";$.KEPLR="KEPLR";$.KEYSTORE="KEYSTORE";$.LEAP="LEAP";$.LEDGER="LEDGER";$.LEDGER_LIVE="LEDGER_LIVE";$.METAMASK="METAMASK";$.OKX="OKX";$.OKX_MOBILE="OKX_MOBILE";$.PHANTOM="PHANTOM";$.POLKADOT_JS="POLKADOT_JS";$.RADIX_WALLET="RADIX_WALLET";$.TREZOR="TREZOR";$.TALISMAN="TALISMAN";$.TRUSTWALLET_WEB="TRUSTWALLET_WEB";$.WALLETCONNECT="WALLETCONNECT";$.XDEFI="XDEFI"})(Fn||={});var gn;((x)=>{x[x.NoError=36864]="NoError";x[x.LockedDevice=21781]="LockedDevice";x[x.TC_NotFound=65535]="TC_NotFound"})(gn||={});var zn;((x)=>{x.Average="average";x.Fast="fast";x.Fastest="fastest"})(zn||={});var Zn;((H)=>{H.Approve="approve";H.CheckOnly="checkOnly"})(Zn||={});var Bn;((T)=>{T.NAME_REGISTER="~";T.BOND="BOND";T.DEPOSIT="+";T.LEAVE="LEAVE";T.UNBOND="UNBOND";T.WITHDRAW="-";T.OPEN_LOAN="$+";T.CLOSE_LOAN="$-";T.RUNEPOOL_DEPOSIT="POOL+";T.RUNEPOOL_WITHDRAW="POOL-"})(Bn||={});var Yn;((F)=>{F.unknownError="unknownError";F.test_error="test_error";F.providerDetailsError="providerDetailsError";F.blockHeaderNotFound="blockHeaderNotFound";F.blockHashNotFoundAtHeight="blockHashNotFoundAtHeight";F.blockHashNotFoundAtHash="blockHashNotFoundAtHash";F.txHashMissing="txHashMissing";F.assetValueMissingInfo="assetValueMissingInfo";F.invalidAsset="invalidAsset";F.blockIsRequired="blockIsRequired";F.currentBlockHeaderNotFound="currentBlockHeaderNotFound";F.failedToRetrieveBalance="failedToRetrieveBalance";F.failedToRetrieveBlock="failedToRetrieveBlock";F.failedToRetrieveFees="failedToRetrieveFees";F.notImplementedBCH="notImplementedBCH";F.notImplementedDoge="notImplementedDoge";F.noPoolsFound="noPoolsFound";F.noVaultsFound="noVaultsFound";F.noTxFound="noTxFound";F.noInputCoinFound="noInputCoinFound";F.noBlockDataFound="noBlockDataFound";F.multipleCosmosMessages="multipleCosmosMessages";F.heightOrHashNotProvided="heightOrHashNotProvided";F.unknownDenom="unknownDenom";F.invalidBlockHeight="invalidBlockHeight";F.timestampExtrinsicNoArgumentsForBlock="timestampExtrinsicNoArgumentsForBlock";F.timestampExtrinsicNoTimestampForBlock="timestampExtrinsicNoTimestampForBlock";F.noTimestampExtrinsicForHash="noTimestampExtrinsicForHash";F.timestampExtrinsicNoArgumentsForHash="timestampExtrinsicNoArgumentsForHash";F.txMemoUndefined="txMemoUndefined";F.txMemoIncorrect="txMemoIncorrect";F.txTypeNotFound="txTypeNotFound";F.txNoMessage="txNoMessage";F.txNotFound="txNotFound";F.txReceiptNotFound="txReceiptNotFound";F.txParsingError="txParsingError";F.blockNotFound="blockNotFound";F.balanceNotFound="balanceNotFound";F.configError="configError";F.noQuoteResponse="noQuoteResponse";F.noPoolAssetsFound="noPoolAssetsFound";F.noThorchainPools="noThorchainPools";F.noMayachainPools="noMayachainPools";F.invalidAffiliateFee="invalidAffiliateFee";F.invalidBuyAssetAddress="invalidBuyAssetAddress";F.invalidSellAssetAddress="invalidSellAssetAddress";F.invalidSourceAddress="invalidSourceAddress";F.invalidDestinationAddress="invalidDestinationAddress";F.sourceAddressIsSmartContract="sourceAddressIsSmartContract";F.destinationAddressIsSmartContract="destinationAddressIsSmartContract";F.invalidChainId="invalidChainId";F.unsupportedChainId="unsupportedChainId";F.unsupportedEVMChainId="unsupportedEVMChainId";F.noWhitelistTokens="noWhitelistTokens";F.failedFetchGasPrice="failedFetchGasPrice";F.failedToCreateDepositChannel="failedToCreateDepositChannel";F.noProviderDetailsFound="noProviderDetailsFound";F.noTokenListsFound="noTokenListsFound";F.tokenNotFound="tokenNotFound";F.tokenPriceNotFound="tokenPriceNotFound";F.swapAmountTooSmall="swapAmountTooSmall";F.legsArrayIsEmpty="legsArrayIsEmpty";F.failedToFetchQuoteForLeg="failedToFetchQuoteForLeg";F.noBlockHeaderFound="noBlockHeaderFound";F.failedToSimulateSwap="failedToSimulateSwap";F.addressScreeningFailed="addressScreeningFailed";F.noLiquidtyProvidersFound="noLiquidtyProvidersFound";F.noSaversFound="noSaversFound";F.noInboundAddressesFound="noInboundAddressesFound";F.noInboundAddressFoundForChain="noInboundAddressFoundForChain";F.noLastBlocksFound="noLastBlocksFound";F.noVersionFound="noVersionFound";F.noConstantsFound="noConstantsFound";F.noMimirsFound="noMimirsFound";F.noRoutesFound="noRoutesFound";F.quoteNotFound="quoteNotFound";F.ledgerSignFailed="ledgerSignFailed";F.ledgerFetchSwapFailed="ledgerFetchSwapFailed";F.failedToFetchTx="failedToFetchTx";F.failedBuildTransactionDetails="failedBuildTransactionDetails";F.noLegsForRoute="noLegsForRoute";F.noRouterAddressFound="noRouterAddressFound";F.noAggregatorAddressFound="noAggregatorAddressFound";F.noContractInstanceFound="noContractInstanceFound";F.noContractAddressFound="noContractAddressFound";F.invalidAffiliate="invalidAffiliate";F.providerNotfound="No provider found";F.noRecordFound="No Record found";F.slippageTooLow="Slippage too low";F.tradingHalted="tradingHalted";F.noWrappedGasAsset="noWrappedGasAsset";F.aggregatorAddressNotFound="aggregatorAddressNotFound";F.routerAddressNotFound="routerAddressNotFound";F.dummyAddressNotFound="dummyAddressNotFound";F.trackerError="trackerError";F.noOhlcvDataFound="noOhlcvDataFound";F.noTradingPairs="noTradingPairs";F.noLoanPositionFound="noLoanPositionFound";F.noLendingAvailability="noLendingAvailability";F.lendingRepayTooSmall="lendingRepayTooSmall";F.missingState="missingState";F.ledgerSwapNotFound="ledgerSwapNotFound";F.ledgerSwapNotReadyForTracking="ledgerSwapNotReadyForTracking";F.errorEstimatingGas="errorEstimatingGas";F.apiKeyInvalid="apiKeyInvalid";F.apiKeyFailedToUpdate="apiKeyFailedToUpdate";F.apiKeyExpired="apiKeyExpired";F.unauthorized="unauthorized";F.failedToCreateMemo="failedToCreateMemo";F.radixIncorrectInstructions="radixIncorrectInstructions";F.invalidAddressForChain="invalidAddressForChain"})(Yn||={});var Pn;((H)=>{H.highSlippage="highSlippage";H.highPriceImpact="highPriceImpact"})(Pn||={});var wn;((G)=>{G.CHAINFLIP="CHAINFLIP";G.MAYACHAIN="MAYACHAIN";G.MAYACHAIN_STREAMING="MAYACHAIN_STREAMING";G.ONEINCH="ONEINCH";G.PANCAKESWAP="PANCAKESWAP";G.PANGOLIN_V1="PANGOLIN_V1";G.SUSHISWAP_V2="SUSHISWAP_V2";G.THORCHAIN="THORCHAIN";G.THORCHAIN_STREAMING="THORCHAIN_STREAMING";G.TRADERJOE_V2="TRADERJOE_V2";G.UNISWAP_V2="UNISWAP_V2";G.UNISWAP_V3="UNISWAP_V3";G.CAVIAR_V1="CAVIAR_V1"})(wn||={});var qn;((N)=>{N.LIQUIDITY="liquidity";N.NETWORK="network";N.INBOUND="inbound";N.OUTBOUND="outbound";N.AFFILIATE="affiliate";N.TAX="tax"})(qn||={});var a={},Qn=typeof window!=="undefined"?{}:{referrer:"https://sk.thorswap.net",referer:"https://sk.thorswap.net"};function fh({apiKey:n,...h}){a={...h,apiKey:n}}async function U(n,h){let{apiKey:H,...x}=a,{searchParams:R,json:B,body:N}=h,o={...Qn,...x.headers,...h.headers,...B?{"Content-Type":"application/json"}:{}},O=B?JSON.stringify(B):N,A=new URL(n);if(R)A.search=new URLSearchParams(R).toString();if(H)o["x-api-key"]=H;try{let j=await(await fetch(A.toString(),{...x,...h,body:O,headers:o})).json();if(h.responseHandler)return h.responseHandler(j);return j}catch(T){if(h.onError)return h.onError(T);console.error(T)}}var w={get:async(n,h)=>U(n,{...h,method:"GET"}),post:async(n,h)=>U(n,{...h,method:"POST"}),extend:(n)=>{let h={...a,...n};return{get:async(H,x)=>U(H,{...h,...x,method:"GET"}),post:async(H,x)=>U(H,{...h,...x,method:"POST"}),extend:(H)=>w.extend({...h,...H})}}};var yn={core_estimated_max_spendable_chain_not_supported:10002,core_extend_error:10003,core_inbound_data_not_found:10004,core_approve_asset_address_or_from_not_found:10005,core_plugin_not_found:10006,core_plugin_swap_not_found:10007,core_approve_asset_target_invalid:10008,core_explorer_unsupported_chain:10009,core_verify_message_not_supported:10010,core_chain_halted:10099,core_wallet_connection_not_found:10100,core_wallet_xdefi_not_installed:10101,core_wallet_evmwallet_not_installed:10102,core_wallet_walletconnect_not_installed:10103,core_wallet_keystore_not_installed:10104,core_wallet_ledger_not_installed:10105,core_wallet_trezor_not_installed:10106,core_wallet_keplr_not_installed:10107,core_wallet_okx_not_installed:10108,core_wallet_keepkey_not_installed:10109,core_wallet_talisman_not_installed:10110,core_wallet_not_keypair_wallet:10111,core_wallet_sign_message_not_supported:10110,core_swap_invalid_params:10200,core_swap_route_not_complete:10201,core_swap_asset_not_recognized:10202,core_swap_contract_not_found:10203,core_swap_route_transaction_not_found:10204,core_swap_contract_not_supported:10205,core_swap_transaction_error:10206,core_swap_quote_mode_not_supported:10207,core_transaction_deposit_error:10301,core_transaction_create_liquidity_base_error:10302,core_transaction_create_liquidity_asset_error:10303,core_transaction_create_liquidity_invalid_params:10304,core_transaction_add_liquidity_invalid_params:10305,core_transaction_add_liquidity_base_address:10306,core_transaction_add_liquidity_base_error:10307,core_transaction_add_liquidity_asset_error:10308,core_transaction_withdraw_error:10309,core_transaction_deposit_to_pool_error:10310,core_transaction_deposit_insufficient_funds_error:10311,core_transaction_deposit_gas_error:10312,core_transaction_invalid_sender_address:10313,core_transaction_deposit_server_error:10314,core_transaction_user_rejected:10315,core_transaction_failed:10316,core_transaction_invalid_recipient_address:10317,wallet_connection_rejected_by_user:20000,wallet_missing_api_key:20001,wallet_chain_not_supported:20002,wallet_missing_params:20003,wallet_provider_not_found:20004,wallet_failed_to_add_or_switch_network:20005,wallet_ledger_connection_error:20101,wallet_ledger_connection_claimed:20102,wallet_ledger_get_address_error:20103,wallet_ledger_device_not_found:20104,wallet_ledger_device_locked:20105,wallet_phantom_not_found:20201,wallet_xdefi_not_found:20301,wallet_xdefi_send_transaction_no_address:20302,wallet_xdefi_contract_address_not_provided:20303,wallet_xdefi_asset_not_defined:20304,wallet_walletconnect_project_id_not_specified:20401,wallet_walletconnect_connection_not_established:20402,wallet_walletconnect_namespace_not_supported:20403,wallet_trezor_failed_to_sign_transaction:20501,wallet_trezor_derivation_path_not_supported:20502,wallet_trezor_failed_to_get_address:20503,wallet_talisman_not_enabled:20601,wallet_talisman_not_found:20602,wallet_polkadot_not_found:20701,wallet_radix_not_found:20801,wallet_radix_transaction_failed:20802,wallet_keepkey_not_found:20900,wallet_keepkey_asset_not_defined:20901,wallet_keepkey_contract_address_not_provided:20902,wallet_keepkey_send_transaction_no_address:20903,chainflip_channel_error:30001,chainflip_unknown_asset:30002,chainflip_broker_invalid_params:30100,chainflip_broker_recipient_error:30101,chainflip_broker_register:30102,chainflip_broker_tx_error:30103,chainflip_broker_withdraw:30104,chainflip_broker_fund_only_flip_supported:30105,chainflip_broker_fund_invalid_address:30106,thorchain_chain_halted:40001,thorchain_trading_halted:40002,thorchain_swapin_router_required:40100,thorchain_swapin_vault_required:40101,thorchain_swapin_memo_required:40102,thorchain_swapin_token_required:40103,thorchain_preferred_asset_payout_required:40104,api_v2_invalid_response:50001,api_v2_server_error:50002,toolbox_cosmos_signer_not_defined:90101,toolbox_cosmos_no_accounts_found:90102,toolbox_cosmos_verify_signature_no_pubkey:90103,toolbox_evm_no_abi_fragment:90201,toolbox_evm_no_signer:90202,toolbox_evm_no_signer_address:90203,toolbox_evm_no_from_address:90204,toolbox_evm_no_contract_address:90205,toolbox_evm_no_fee_data:90206,toolbox_evm_no_gas_price:90207,toolbox_evm_no_to_address:90208,toolbox_evm_invalid_gas_asset_address:90209,toolbox_evm_provider_not_eip1193_compatible:90210,toolbox_evm_error_estimating_gas_limit:90211,toolbox_evm_error_sending_transaction:90212,toolbox_radix_signer_not_defined:90301,helpers_invalid_number_different_decimals:99000,helpers_invalid_number_of_years:99001,helpers_invalid_identifier:99002,helpers_invalid_asset_url:99003,helpers_invalid_asset_identifier:99004,helpers_invalid_memo_type:99005,helpers_failed_to_switch_network:99103,helpers_not_found_provider:99200,not_implemented:99999};class s extends Error{static ErrorCode=yn;constructor(n,h){let H=typeof n==="string",x=H?n:n.errorKey;if(h)console.error(h,{stack:h?.stack,message:h?.message});super(x,{cause:{code:s.ErrorCode[x],message:`${x}${H?"":`: ${JSON.stringify(n.info)}`}`}});Object.setPrototypeOf(this,s.prototype)}}function mh(n){if(n<0)throw new s({errorKey:"helpers_invalid_number_of_years",info:{numberOfYears:n}});return 10+n}function dh(n){if(n<0)throw new s({errorKey:"helpers_invalid_number_of_years",info:{numberOfYears:n}});return Math.round((10+n*1.0512)*10000000000)/10000000000}function ah(n,h){try{return n()}catch(H){if(h)throw new s(h,H);return console.error(H)}}function ih(n){switch(n){case"THOR":return`${n}.RUNE`;case"GAIA":return`${n}.ATOM`;case"BSC":return`${n}`;default:return`${n}.${n}`}}var Wn=["production","test"].includes("development"),Nn=new Set;function Cn(n,h){if(!Wn&&n){if(Nn.has(h))return;Nn.add(h),console.warn(h)}}async function lh(n="thorchain-1"){if(!["thorchain-stagenet-v2","thorchain-1","thorchain-mainnet-v1"].includes(n))return n;try{return(await w.get(`${n!=="thorchain-1"?"https://stagenet-rpc.ninerealms.com":"https://rpc.thorswap.net"}/status`)).result.node_info.network}catch(h){return n}}var on=[...Object.values(X),"TERRA"];function An(n=""){let h=n.toUpperCase(),[H]=h.split(".");if(on.includes(H))return!0;let[x]=h.split("/");if(on.includes(x))return!0;throw new s({errorKey:"helpers_invalid_identifier",info:{message:`Invalid identifier: ${n}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`,identifier:n}})}function hH(n){if(n.length>30)return!1;let h=/^[a-zA-Z0-9+_-]+$/g;return!!n.match(h)}var V=8,P=(n)=>10n**BigInt(n),W=(n)=>Math.log10(Number.parseFloat(n.toString()));function q({value:n,bigIntDecimal:h=V,decimal:H=V}){if(H===0)return n.toString();let x=n<0n,R=n.toString().substring(x?1:0),B=H-(R.length-1);if(B>0)R="0".repeat(B)+R;let N=R.length-H,o=R.slice(-H);if(Number.parseInt(o[h]||"0")>=5)o=`${o.substring(0,h-1)}${(Number.parseInt(o[h-1]||"0")+1).toString()}`;else o=o.substring(0,h);return`${x?"-":""}${R.slice(0,N)}.${o}`.replace(/\.?0*$/,"")}class z{decimalMultiplier=10n**8n;bigIntValue=0n;decimal;static fromBigInt(n,h){return new z({decimal:h,value:q({value:n,bigIntDecimal:h,decimal:h})})}static shiftDecimals({value:n,from:h,to:H}){return z.fromBigInt(n.getBaseValue("bigint")*P(H)/P(h),H)}constructor(n){let h=i(n),H=typeof n==="object";this.decimal=H?n.decimal:void 0,this.decimalMultiplier=H&&"decimalMultiplier"in n?n.decimalMultiplier:P(Math.max(cn(D(h)),this.decimal||0)),this.#R(h)}set(n){return new this.constructor({decimal:this.decimal,value:n,identifier:this.toString({includeSynthProtocol:!0})})}add(...n){return this.#h("add",...n)}sub(...n){return this.#h("sub",...n)}mul(...n){return this.#h("mul",...n)}div(...n){return this.#h("div",...n)}gt(n){return this.#n("gt",n)}gte(n){return this.#n("gte",n)}lt(n){return this.#n("lt",n)}lte(n){return this.#n("lte",n)}eqValue(n){return this.#n("eqValue",n)}getValue(n,h){let H=this.formatBigIntToSafeValue(this.bigIntValue,h||this.decimal||W(this.decimalMultiplier));switch(n){case"number":return Number(H);case"string":return H;case"bigint":return this.bigIntValue*10n**BigInt(this.decimal||8n)/this.decimalMultiplier}}getBaseValue(n,h){let H=this.decimalMultiplier/P(h||this.decimal||k.THOR),x=this.bigIntValue/H;switch(n){case"number":return Number(x);case"string":return x.toString();case"bigint":return x}}getBigIntValue(n,h){if(!h&&typeof n==="object")return n.bigIntValue;let H=i(n),x=D(H);if(x==="0"||x==="undefined")return 0n;return this.#x(x,h)}toSignificant(n=6){let[h,H]=this.getValue("string").split("."),x=h||"",R=H||"";if((Number.parseInt(x)?x.length+R.length:R.length)<=n)return this.getValue("string");if(x.length>=n)return x.slice(0,n).padEnd(x.length,"0");if(Number.parseInt(x))return`${x}.${R.slice(0,n-x.length)}`.padEnd(n-x.length,"0");let N=Number.parseInt(R),o=`${N}`.slice(0,n);return`0.${o.padStart(R.length-`${N}`.length+o.length,"0")}`}toFixed(n=6){let[h,H]=this.getValue("string").split("."),x=h||"",R=H||"";if(Number.parseInt(x))return`${x}.${R.slice(0,n)}`.padEnd(n,"0");let B=Number.parseInt(R),N=`${B}`.slice(0,n);return`0.${N.padStart(R.length-`${B}`.length+N.length,"0")}`}toAbbreviation(n=2){let h=this.getValue("number"),H=["","K","M","B","T","Q","Qi","S"],x=Math.floor(Math.log10(Math.abs(h))/3),R=H[x];if(!R)return this.getValue("string");let B=10**(x*3);return`${(h/B).toFixed(n)}${R}`}toCurrency(n="$",{currencyPosition:h="start",decimal:H=2,decimalSeparator:x=".",thousandSeparator:R=","}={}){let B=this.getValue("number"),[N="",o=""]=B.toFixed(6).split("."),O=N.replace(/\B(?=(\d{3})+(?!\d))/g,R),A=N||o?N==="0"?`${Number.parseFloat(`0.${o}`)}`.replace(".",x):`${O}${Number.parseInt(o)?`${x}${o.slice(0,H)}`:""}`:"0.00";return`${h==="start"?n:""}${A}${h==="end"?n:""}`}formatBigIntToSafeValue(n,h){let H=h||this.decimal||V,x=Math.max(H,W(this.decimalMultiplier)),R=n<0n,B=n.toString().substring(R?1:0),N=x-(B.length-1),o=N>0?"0".repeat(N)+B:B,O=o.length-x,A=o.slice(-x);if(Number.parseInt(A[H]||"0")>=5)A=`${A.substring(0,H-1)}${(Number.parseInt(A[H-1]||"0")+1).toString()}`;else A=A.substring(0,H);return`${R?"-":""}${o.slice(0,O)}.${A}`.replace(/\.?0*$/,"")}#h(n,...h){let H=this.#H(this,...h),x=Math.max(H,W(this.decimalMultiplier)),R=P(x),B=h.reduce((o,O)=>{let A=this.getBigIntValue(O,x);switch(n){case"add":return o+A;case"sub":return o-A;case"mul":return o*A/R;case"div":{if(A===0n)throw new RangeError("Division by zero");return o*R/A}default:return o}},this.bigIntValue*R/this.decimalMultiplier),N=q({bigIntDecimal:x,decimal:x,value:B});return new this.constructor({decimalMultiplier:P(x),decimal:this.decimal,value:N,identifier:this.toString()})}#n(n,...h){let H=this.#H(this,...h),x=this.getBigIntValue(h[0]||"0",H),R=this.getBigIntValue(this,H);switch(n){case"gt":return R>x;case"gte":return R>=x;case"lt":return R<x;case"lte":return R<=x;case"eqValue":return R===x}}#R(n){let h=D(n)||"0";this.bigIntValue=this.#x(h)}#H(...n){let h=n.map((H)=>{return typeof H==="object"?H.decimal||W(H.decimalMultiplier):cn(D(H))}).filter(Boolean);return Math.max(...h,V)}#x(n,h){let H=h?P(h):this.decimalMultiplier,x=W(H),[R="",B=""]=n.split(".");return BigInt(`${R}${B.padEnd(x,"0")}`)}}var Vn=Intl.NumberFormat("fullwide",{useGrouping:!1,maximumFractionDigits:20});function D(n){let H=`${typeof n==="number"?Vn.format(n):i(n)}`.replaceAll(",",".").split(".");return H.length>1?`${H.slice(0,-1).join("")}.${H.at(-1)}`:H[0]||"0"}function cn(n){let h=n.split(".")[1]?.length||0;return Math.max(h,V)}function i(n){return typeof n==="object"?"getValue"in n?n.getValue("string"):n.value:n}var E=new Map;class L extends z{address;chain;isGasAsset=!1;isSynthetic=!1;isTradeAsset=!1;symbol;tax;ticker;type;chainId;constructor({value:n,decimal:h,tax:H,chain:x,symbol:R,identifier:B}){super(typeof n==="object"?n:{decimal:h,value:n});let N=l(B||`${x}.${R}`);this.type=$n(N),this.tax=H,this.chain=N.chain,this.ticker=N.ticker,this.symbol=N.symbol,this.address=N.address,this.isSynthetic=N.isSynthetic,this.isTradeAsset=N.isTradeAsset,this.isGasAsset=N.isGasAsset,this.chainId=Rn[N.chain]}toString({includeSynthProtocol:n}={}){return(this.isSynthetic||this.isTradeAsset)&&!n?this.symbol:`${this.chain}.${this.symbol}`}toUrl(){return this.isSynthetic?`${this.chain}.${this.symbol.replace("/",".")}`:this.isTradeAsset?`${this.chain}.${this.symbol.replace("~","..")}`:this.toString()}eqAsset({chain:n,symbol:h}){return this.chain===n&&this.symbol===h}eq(n){return this.eqAsset(n)&&this.eqValue(n)}static fromUrl(n,h=0){let[H,x,R]=n.split(".");if(!(H&&x))throw new s({errorKey:"helpers_invalid_asset_url",info:{urlAsset:n}});let B=H==="THOR"&&R?`${H}.${x}/${R}`:n;return L.from({asset:B,value:h})}static from({value:n=0,fromBaseDecimal:h,asyncTokenLookup:H,...x}){let R=n instanceof z?n.getValue("string"):n,B="chain"in x,N=B?x.chain:x.asset,o=B||Tn.includes(N),{identifier:O,decimal:A}=o?On(N):{identifier:N,decimal:void 0},{chain:T,isSynthetic:j,isTradeAsset:I}=l(O),G=E.get(T==="SOL"?O:O.toUpperCase()),Z=G?.decimal||A;Cn(!(H||Z),`Couldn't find static decimal for ${O} (Using default ${k[T]} decimal as fallback).
|
|
2
2
|
This can result in incorrect calculations and mess with amount sent on transactions.
|
|
3
3
|
You can load static assets by installing @swapkit/tokens package and calling AssetValue.loadStaticAssets()
|
|
4
|
-
or by passing asyncTokenLookup: true to the from() function, which will make it async and return a promise.`);const{decimal:u,identifier:O,tax:W}=L||{decimal:y||s[A],identifier:T},J=h?E(BigInt(o),h):E(o,u);return t?fn(O,h?J:o):I||j?Wn(O,J):new _({tax:W,decimal:u,identifier:O,value:J})}static loadStaticAssets(){return new Promise((n,h)=>{try{import("@swapkit/tokens").then((t)=>{for(let x of Object.values(t))for(let{identifier:o,chain:H,...F}of x.tokens)U.set(H!=="SOL"?o.toUpperCase():o,{identifier:o,decimal:"decimals"in F?F.decimals:s[H]});n({ok:!0})})}catch(t){console.error(t),h({ok:!1,error:t,message:"Couldn't load static assets. Ensure you have installed @swapkit/tokens package"})}})}static fromString(n,h=0){return _.from({asset:n,value:h,asyncTokenLookup:!0})}static fromIdentifier(n,h=0){return _.from({asset:n,value:h,asyncTokenLookup:!0})}static fromStringSync(n,h=0){return _.from({asset:n,value:h})}static fromStringWithBase(n,h=0n,t=s.THOR){return _.from({asyncTokenLookup:!0,asset:n,value:h,fromBaseDecimal:t})}static fromStringWithBaseSync(n,h=0n,t=s.THOR){return _.from({asset:n,value:h,fromBaseDecimal:t})}static fromIdentifierSync(n,h=0){return _.from({asset:n,value:h})}static fromChainOrSignature(n,h=0){if(Object.values(g).includes(n))return _.from({chain:n,value:h});return _.from({asset:n,value:h})}}async function _t(n){const h=await import("@swapkit/tokens");for(let t of Object.values(h))for(let{identifier:x,chain:o,...H}of t.tokens){if("identifier"in n&&x===n.identifier)return x;if("address"in H&&"chain"in n&&o===n.chain&&H.address.toLowerCase()===n.contract.toLowerCase())return x}return}var Mn="0x313ce567",Nn=[`${"MAYA"}.MAYA`,`${"ETH"}.THOR`,`${"ETH"}.vTHOR`,`${"KUJI"}.USK`],kn=async({chain:n,to:h})=>{try{const{result:t}=await w.post(a[n],{headers:{accept:"*/*","content-type":"application/json","cache-control":"no-cache"},body:JSON.stringify({id:44,jsonrpc:"2.0",method:"eth_call",params:[{to:h.toLowerCase(),data:Mn},"latest"]})});return Number.parseInt(BigInt(t||s[n]).toString())}catch(t){return console.error(t),s[n]}},Vn=async({symbol:n})=>{try{const h=n.split("-")[1]?.toLowerCase(),{manager:t}=await w.post(`${a["XRD"]}/state/resource`,{headers:{Accept:"*/*","Content-Type":"application/json"},body:JSON.stringify({network:"mainnet",resource_address:h})});return t.divisibility.value.divisibility}catch(h){return console.error(h),s["XRD"]}},bn=(n)=>{if(n==="ETH")return s.ETH;const h=n.split("-"),t=h.length===1?void 0:h[h.length-1]?.toLowerCase();return t?.startsWith("0x")?kn({chain:"ETH",to:t}):s.ETH},Kn=(n)=>{const h=n.split("-"),t=h.length===1?void 0:h[h.length-1];return t?.startsWith("0x")?kn({chain:"AVAX",to:t.toLowerCase()}):s.AVAX},Dn=(n)=>{if(n==="BSC")return s.BSC;return s.BSC},Un=(n)=>{if(n==="XRD")return s.XRD;return Vn({symbol:n})},An=({chain:n,symbol:h})=>{switch(n){case"ETH":return bn(h);case"AVAX":return Kn(h);case"BSC":return Dn(h);case"XRD":return Un(h);default:return s[n]}},Ot=({chain:n})=>{switch(n){case"ARB":case"BASE":case"OP":return _.from({asset:`${n}.ETH`});case"MAYA":return _.from({asset:`${n}.CACAO`});case"GAIA":return _.from({asset:`${n}.ATOM`});case"BSC":return _.from({asset:`${n}.BNB`});case"THOR":return _.from({asset:`${n}.RUNE`});default:return _.from({asset:`${n}.${n}`})}},l=({chain:n,symbol:h})=>{switch(n){case"ARB":case"BASE":case"OP":return h==="ETH";case"MAYA":return h==="CACAO";case"GAIA":return h==="ATOM";case"BSC":return h==="BNB";case"THOR":return h==="RUNE";default:return h===n}},sn=(n)=>{switch(n){case"ARB":case"BASE":case"OP":return{identifier:`${n}.ETH`,decimal:s[n]};case`${"ETH"}.THOR`:return{identifier:"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044",decimal:18};case`${"ETH"}.vTHOR`:return{identifier:"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d",decimal:18};case"GAIA":return{identifier:`${n}.ATOM`,decimal:s[n]};case"THOR":return{identifier:`${n}.RUNE`,decimal:s[n]};case"BSC":return{identifier:`${n}.BNB`,decimal:s[n]};case"MAYA":return{identifier:`${n}.CACAO`,decimal:10};case"XRD":return{identifier:`${"XRD"}.XRD`,decimal:s[n]};case`${"MAYA"}.MAYA`:return{identifier:n,decimal:4};case`${"KUJI"}.USK`:return{identifier:n,decimal:6};default:return{identifier:`${n}.${n}`,decimal:s[n]}}},Tn=({chain:n,symbol:h})=>{if(h.includes("/"))return"Synth";switch(n){case"ARB":case"OP":case"BASE":return h==="ETH"?"Native":n;case"GAIA":return h==="ATOM"?"Native":n;case"BSC":return h==="BNB"?"Native":n;case"MAYA":return h==="CACAO"?"Native":n;case"THOR":return h==="RUNE"?"Native":n;default:return h===n?"Native":n}},$t=(n)=>{const[h,...t]=n.split("."),x=n.includes("/"),o=t.join("."),H=o?.split("-"),F=H?.length?H.length===1?H[0]:H.slice(0,-1).join("-"):void 0;return{chain:h,symbol:o,ticker:F,synth:x}},En=new RegExp(/(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/,"gmi"),vn=(n)=>{const[h,t]=n.split(".");if(!V.includes(h))return!0;const x=t.split("-"),o=x.length===1?void 0:x[x.length-1];return l({chain:h,symbol:t})||!!o},Lt=(n)=>n.filter(({chain:h,value:t,symbol:x})=>{const o=`${h}.${x}`;return!En.test(o)&&vn(o)&&t!=="0"});function gt([n,h,t,x,o]){return`m/${n}'/${h}'/${t}'/${x}${typeof o!=="number"?"":`/${o}`}`}function Pt({chain:n,index:h,addressIndex:t=0,type:x}){if(V.includes(n)){if(x==="legacy")return[44,60,0,h];if(x==="ledgerLive")return[44,60,h,0,t];return On(d[n],h)}const o=n==="LTC"?2:0;switch(x){case"nativeSegwitMiddleAccount":return[84,o,h,0,t];case"segwit":return[49,o,0,0,h];case"legacy":return[44,o,0,0,h];default:return On(d[n],h)}}function jt(n){const[h,t,x]=n.split("/").map((o)=>Number.parseInt(o,10));switch(t){case 44:return"legacy";case 49:return"p2sh";default:return"bech32"}}var On=(n,h)=>{return[...n.slice(0,n.length-1),h]};function an({liquidityUnits:n,poolUnits:h,runeDepth:t}){const x=P(n),o=P(h),H=P(t),F=x.mul(H),B=o.mul(o).mul(2),T=o.mul(x).mul(2),C=x.mul(x),A=o.mul(o).mul(o);return F.mul(B.sub(T).add(C)).div(A)}function dn({liquidityUnits:n,poolUnits:h,assetDepth:t}){const x=P(n),o=P(h),H=P(t),F=x.mul(H),B=o.mul(o).mul(2),T=o.mul(x).mul(2),C=x.mul(x),A=F.mul(B.sub(T).add(C)),I=o.mul(o).mul(o);return A.div(I)}function yt({percent:n,runeDepth:h,liquidityUnits:t,poolUnits:x}){return an({runeDepth:h,liquidityUnits:t,poolUnits:x}).mul(n)}function Jt({percent:n,assetDepth:h,liquidityUnits:t,poolUnits:x}){return dn({assetDepth:h,liquidityUnits:t,poolUnits:x}).mul(n)}function P(n){return X.fromBigInt(BigInt(n),s.THOR)}function mn({liquidityUnits:n,poolUnits:h,runeDepth:t,assetDepth:x}){return{assetAmount:P(x).mul(n).div(h),runeAmount:P(t).mul(n).div(h)}}function pt({liquidityUnits:n,poolUnits:h,runeDepth:t,assetDepth:x,percent:o}){return Object.fromEntries(Object.entries(mn({liquidityUnits:n,poolUnits:h,runeDepth:t,assetDepth:x})).map(([H,F])=>[H,F.mul(o)]))}function wt({runeDepth:n,poolUnits:h,assetDepth:t,liquidityUnits:x,runeAmount:o,assetAmount:H}){const F=new X({value:n,decimal:8}),B=new X({value:t,decimal:8}),T=new X({value:h,decimal:8}),C=new X({value:o,decimal:8}),A=new X({value:H,decimal:8}),I=C.mul(B),j=A.mul(F),L=C.mul(A),y=F.mul(B),u=T.mul(I.add(j.add(L.mul(2)))),O=I.add(j.add(y.mul(2))),W=u.div(O),J=P(x).add(W);if(W.getBaseValue("number")===0)return J.div(T).getBaseValue("number");const e=T.add(J);return J.div(e).getBaseValue("number")}function zt({runeAmount:n,assetAmount:h,runeDepth:t,assetDepth:x}){if(n==="0"||h==="0"||t==="0"||x==="0")return 0;const o=P(t),H=P(x),F=P(h),B=P(n),T=F.mul(o).sub(H.mul(B)),C=H.mul(B).add(o.mul(H));return Math.abs(T.div(C).getBaseValue("number"))}function rn({type:n,address:h}){return`${n}:${h}`}function ln({address:n,unbondAmount:h}){return`${"UNBOND"}:${n}:${h}`}function ft(n){return f("POOL+",n)}function en({chain:n,symbol:h,...t}){return f(`${"+"}:${n}/${h}`,t)}function nh({chain:n,symbol:h,address:t,...x}){const o=ch({chain:n,symbol:h}),H=t?`:${t}:`:":";return f(`${"+"}:${o}${H}`,x)}function hh({chain:n,symbol:h,basisPoints:t}){return`${"-"}:${n}/${h}:${t}`}function th({chain:n,symbol:h,ticker:t,basisPoints:x,targetAsset:o}){const H=n==="ETH"&&t!=="ETH"?`${t}-${h.slice(-3)}`:h,F=o?`:${o}`:"";return`${"-"}:${n}.${H}:${x}${F}`}function Wt({basisPoints:n,...h}){return f(`${"POOL-"}:${n}`,h)}function xh({name:n,chain:h,address:t,owner:x}){const o=`${"~"}:${n}:${h}:${t}`,H=x?`:${x}`:"";return`${o}${H}`}function Mt({name:n,chain:h,asset:t,payout:x,owner:o}){return`${"~"}:${n}:${h}:${x}:${o}:${t}`}function oh(n,{asset:h,address:t,minAmount:x,...o}){const H=`${n}:${h}:${t}`,F=x?`:${x}`:"";return f(`${H}${F}`,o)}function f(n,{affiliateAddress:h,affiliateBasisPoints:t}={}){const x=`${n}${h?`:${h}:${t||0}`:""}`;return x.endsWith(":")?x.slice(0,-1):x}function ch({chain:n,symbol:h}){switch(n){case"BTC":case"DOGE":case"LTC":return n.slice(0,1).toLowerCase();case"BCH":return"c";default:return`${n}.${h}`}}var Vt=(n,h)=>{switch(n){case"LEAVE":case"BOND":return rn({type:n,address:h?.address});case"UNBOND":return ln({address:h?.address,unbondAmount:h?.unbondAmount});case"~":return xh(h);case"$+":case"$-":return oh(n,h);case"+":{const{chain:t,symbol:x,address:o,singleSide:H}=h;if(H)return en({chain:t,symbol:x});return nh({chain:t,symbol:x,address:o})}case"-":{const{chain:t,ticker:x,symbol:o,basisPoints:H,targetAssetString:F,singleSide:B}=h;if(B)return hh({chain:t,symbol:o,basisPoints:H});return th({chain:t,ticker:x,symbol:o,basisPoints:H,targetAsset:F})}default:throw new G({errorKey:"helpers_invalid_memo_type",info:{memoType:n}})}};function mt({chain:n,covalentApiKey:h,ethplorerApiKey:t}){const x=n!=="ETH"&&!h?"covalentApiKey":t?void 0:"ethplorerApiKey";if(x)throw new G({errorKey:"wallet_missing_api_key",info:{missingKey:x}});return{covalentApiKey:h,ethplorerApiKey:t}}function it(){const n=[];function h(x){if(n.map((o)=>o.info.uuid).includes(x.detail.info.uuid))return;n.push(x.detail)}window.addEventListener("eip6963:announceProvider",h),window.dispatchEvent(new Event("eip6963:requestProvider"));function t(){window.removeEventListener("eip6963:announceProvider",h)}return{providers:n,removeEIP6963EventListener:t}}var Hh=["approve","approvedAmount","call","sendTransaction","transfer","isApproved","approvedAmount","EIP1193SendTransaction","getFeeData","broadcastTransaction","estimateCall","estimateGasLimit","estimateGasPrices","createContractTxObject"],Fh=(n,h,t)=>async(...x)=>{try{await Rh(h,t)}catch(o){throw new G({errorKey:"helpers_failed_to_switch_network",info:{error:o}})}return n(...x)},$n=({provider:n,params:h,method:t})=>{if(!n?.send)throw new G("helpers_not_found_provider");const x=h?Array.isArray(h)?h:[h]:[];return n.send(t,x)},Ut=({toolbox:n,chainId:h,provider:t=window.ethereum})=>{const x=Hh.reduce((o,H)=>{if(!n[H])return o;const F=n[H];if(typeof F!=="function")return o;return{...o,[H]:Fh(F,t,h)}},{});return{...n,...x}},Et=(n,h)=>$n({provider:n,method:"wallet_addEthereumChain",params:[h]}),Rh=(n,h="0x1")=>$n({provider:n,method:"wallet_switchEthereumChain",params:[{chainId:h}]}),vt=(n)=>{window.ethereum?.on("accountsChanged",()=>n()),window.xfi?.ethereum.on("accountsChanged",()=>n())},at=()=>{const{isTrust:n,isBraveWallet:h,__XDEFI:t,overrideIsMetaMask:x,selectedProvider:o}=window?.ethereum||{};if(n)return"TRUSTWALLET_WEB";if(h)return"BRAVE";if(x&&o?.isCoinbaseWallet)return"COINBASE_WEB";if(t)"XDEFI";return"METAMASK"},dt=(n)=>{return Bh().includes(n)},Bh=()=>{const n=window?.ethereum&&!window.ethereum?.isBraveWallet,h=window?.xfi||window?.ethereum?.__XDEFI,t=window?.ethereum?.isBraveWallet,x=window?.ethereum?.isTrust||window?.trustwallet,o=window?.ethereum?.overrideIsMetaMask&&window?.ethereum?.selectedProvider?.isCoinbaseWallet||window?.coinbaseWalletExtension,H=[];if(n)H.push("METAMASK");if(h)H.push("XDEFI");if(t)H.push("BRAVE");if(x)H.push("TRUSTWALLET_WEB");if(o)H.push("COINBASE_WEB");if(Ch())H.push("OKX_MOBILE");return H},Ch=()=>{const n=navigator.userAgent,h=/iphone|ipad|ipod|ios/i.test(n),t=/android|XiaoMi|MiuiBrowser/i.test(n),x=h||t,o=/OKApp/i.test(n);return x&&o},rt=()=>typeof window.ethereum!=="undefined";class X extends S{eq(n){return this.eqValue(n)}static fromBigInt(n,h){return new X({decimal:h,value:z({value:n,bigIntDecimal:h,decimal:h})})}}export{mh as wrapWithThrow,Fh as wrapMethodWithNetworkSwitch,Fn as warnOnce,ht as validateTNS,Bn as validateIdentifier,Rh as switchEVMWalletNetwork,bh as setRequestClientConfig,Ut as prepareNetworkSwitch,Ch as okxMobileEnabled,Bh as listWeb3EVMWallets,rt as isWeb3Detected,l as isGasAsset,dt as isDetected,jt as getWalletFormatFor,ah as getTHORNameCost,pt as getSymmetricWithdraw,mn as getSymmetricPoolShare,Nt as getMinAmountByChain,th as getMemoForWithdraw,ln as getMemoForUnbond,hh as getMemoForSaverWithdraw,en as getMemoForSaverDeposit,Wt as getMemoForRunePoolWithdraw,ft as getMemoForRunePoolDeposit,xh as getMemoForNameRegister,Mt as getMemoForNamePreferredAssetRegister,oh as getMemoForLoan,rn as getMemoForLeaveAndBond,nh as getMemoForDeposit,Vt as getMemoFor,dh as getMAYANameCost,zt as getLiquiditySlippage,Ot as getGasAsset,wt as getEstimatedPoolShare,at as getETHDefaultWallet,it as getEIP6963Wallets,rh as getDynamicChainId,Pt as getDerivationPathFor,An as getDecimal,sn as getCommonAssetInfo,ih as getChainIdentifier,yt as getAsymmetricRuneWithdrawAmount,an as getAsymmetricRuneShare,Jt as getAsymmetricAssetWithdrawAmount,dn as getAsymmetricAssetShare,Tn as getAssetType,z as formatBigIntToSafeValue,_t as findAssetBy,Lt as filterAssets,mt as ensureEVMApiKeys,gt as derivationPathToString,Zn as defaultRequestHeaders,$t as assetFromString,Et as addEVMWalletNetwork,vt as addAccountsChangedCallback,pn as WarningCodeEnum,on as WalletOption,Oh as UTXOChains,Lh as TCSupportedChains,X as SwapKitNumber,G as SwapKitError,kh as SubstrateChains,Xh as SWAP_OUT,jh as SWAP_IN,w as RequestClient,M as RPCUrl,Pn as QuoteMode,wn as ProviderName,d as NetworkDerivationPath,cn as MemoType,_h as MAYASupportedChains,un as LedgerErrorCode,zn as FeeTypeEnum,Sn as FeeOption,v as ExplorerUrl,Jn as ErrorCode,V as EVMChains,Xn as DerivationPath,$h as CosmosChains,jn as ContractAddress,Nn as CommonAssetStrings,a as ChainToRPC,Gh as ChainToHexChainId,Ih as ChainToExplorerUrl,xn as ChainToChainId,Th as ChainIdToChain,Z as ChainId,g as Chain,S as BigIntArithmetics,s as BaseDecimal,_ as AssetValue,yn as ApproveMode,Ph as AGG_SWAP};
|
|
4
|
+
or by passing asyncTokenLookup: true to the from() function, which will make it async and return a promise.`);let{decimal:g,identifier:t,tax:M}=G||{decimal:Z||k[T],identifier:O},Y=h?v(BigInt(R),h):v(R,g);return H?un(t,h?Y:R):j||I?Mn(t,Y):new L({tax:M,decimal:g,identifier:t,value:Y})}static loadStaticAssets(){return new Promise((n,h)=>{try{import("@swapkit/tokens").then((H)=>{for(let x of Object.values(H))for(let{identifier:R,chain:B,...N}of x.tokens)E.set(B!=="SOL"?R.toUpperCase():R,{identifier:R,decimal:"decimals"in N?N.decimals:k[B]});n({ok:!0})})}catch(H){console.error(H),h({ok:!1,error:H,message:"Couldn't load static assets. Ensure you have installed @swapkit/tokens package"})}})}static fromString(n,h=0){return L.from({asset:n,value:h,asyncTokenLookup:!0})}static fromIdentifier(n,h=0){return L.from({asset:n,value:h,asyncTokenLookup:!0})}static fromStringSync(n,h=0){return L.from({asset:n,value:h})}static fromStringWithBase(n,h=0n,H=k.THOR){return L.from({asyncTokenLookup:!0,asset:n,value:h,fromBaseDecimal:H})}static fromStringWithBaseSync(n,h=0n,H=k.THOR){return L.from({asset:n,value:h,fromBaseDecimal:H})}static fromIdentifierSync(n,h=0){return L.from({asset:n,value:h})}static fromChainOrSignature(n,h=0){if(Object.values(X).includes(n))return L.from({chain:n,value:h});return L.from({asset:n,value:h})}}function cH(n){let h=L.from({chain:n});switch(n){case"BTC":case"LTC":case"BCH":case"DASH":return h.set(0.00010001);case"DOGE":return h.set(1.00000001);case"AVAX":case"ETH":case"ARB":case"BSC":return h.set(0.00000001);case"THOR":case"MAYA":return h.set(0);case"GAIA":case"KUJI":return h.set(0.000001);default:return h.set(0.00000001)}}async function un(n,h=0){An(n);let x=n.includes("SOL.")?n:n.toUpperCase(),R=E.get(x),B=R?.decimal||await kn(l(n));if(!R)E.set(x,{identifier:n,decimal:B});return new L({decimal:B,value:v(h,B),identifier:n})}function Mn(n,h=0){let H=n.includes(".")?n.split(".")?.[0]?.toUpperCase():void 0,x=H?["MAYA","THOR"].includes(H):!1,R=n.slice(0,14).includes("~")?"~":"/",[B,N]=x?n.split(".").slice(1).join().split(R):n.split(R);if(!(B&&N))throw new s({errorKey:"helpers_invalid_asset_identifier",info:{identifier:n}});return new L({decimal:8,value:v(h,8),identifier:`${H||"THOR"}.${B}${R}${N}`})}function v(n,h){return typeof n==="bigint"?q({value:n,bigIntDecimal:h,decimal:h}):n}function l(n){let h=n.slice(0,14).includes("/"),H=n.slice(0,14).includes("~"),x=H?"~":"/",R=n.split(".")?.[0]?.toUpperCase()==="THOR",B=n.split(".")?.[0]?.toUpperCase()==="MAYA",[N,o=""]=R||B?n.split(".").slice(1).join().split(x):n.split(x);if((h||H)&&!(N&&o))throw new s({errorKey:"helpers_invalid_asset_identifier",info:{identifier:n}});let O=n.includes(".")&&!h&&!H?n:`${B?"MAYA":"THOR"}.${o}`,[A,...T]=O.split("."),j=h||H?o:T.join("."),I=j.split("-"),G=I.length===1?I[0]:I.slice(0,-1).join("-"),Z=I.length===1?void 0:I[I.length-1],g=A==="SOL"?Z:Z?.toLowerCase();return{address:g,chain:A,isGasAsset:r({chain:A,symbol:j}),isSynthetic:h,isTradeAsset:H,ticker:G,symbol:(h||H?`${N}${x}`:"")+(g?`${G}-${g??""}`:j)}}var pn="0x313ce567",Tn=[`${"MAYA"}.MAYA`,`${"ETH"}.THOR`,`${"ETH"}.vTHOR`,`${"KUJI"}.USK`],tn=async({chain:n,to:h})=>{try{let{result:H}=await w.post(d[n],{headers:{accept:"*/*","content-type":"application/json","cache-control":"no-cache"},body:JSON.stringify({id:44,jsonrpc:"2.0",method:"eth_call",params:[{to:h.toLowerCase(),data:pn},"latest"]})});return Number.parseInt(BigInt(H||k[n]).toString())}catch(H){return console.error(H),k[n]}},Kn=async({symbol:n})=>{try{let h=n.split("-")[1]?.toLowerCase(),{manager:H}=await w.post(`${d["XRD"]}/state/resource`,{headers:{Accept:"*/*","Content-Type":"application/json"},body:JSON.stringify({network:"mainnet",resource_address:h})});return H.divisibility.value.divisibility}catch(h){return console.error(h),k["XRD"]}},fn=(n)=>{if(n==="ETH")return k.ETH;let h=n.split("-"),H=h.length===1?void 0:h[h.length-1]?.toLowerCase();return H?.startsWith("0x")?tn({chain:"ETH",to:H}):k.ETH},bn=(n)=>{let h=n.split("-"),H=h.length===1?void 0:h[h.length-1];return H?.startsWith("0x")?tn({chain:"AVAX",to:H.toLowerCase()}):k.AVAX},Un=(n)=>{if(n==="BSC")return k.BSC;return k.BSC},Dn=(n)=>{if(n==="XRD")return k.XRD;return Kn({symbol:n})},kn=({chain:n,symbol:h})=>{switch(n){case"ETH":return fn(h);case"AVAX":return bn(h);case"BSC":return Un(h);case"XRD":return Dn(h);default:return k[n]}},tH=({chain:n})=>{switch(n){case"ARB":case"BASE":case"OP":return L.from({asset:`${n}.ETH`});case"MAYA":return L.from({asset:`${n}.CACAO`});case"GAIA":return L.from({asset:`${n}.ATOM`});case"BSC":return L.from({asset:`${n}.BNB`});case"THOR":return L.from({asset:`${n}.RUNE`});default:return L.from({asset:`${n}.${n}`})}},r=({chain:n,symbol:h})=>{switch(n){case"ARB":case"BASE":case"OP":return h==="ETH";case"MAYA":return h==="CACAO";case"GAIA":return h==="ATOM";case"BSC":return h==="BNB";case"THOR":return h==="RUNE";default:return h===n}},On=(n)=>{switch(n){case"ARB":case"BASE":case"OP":return{identifier:`${n}.ETH`,decimal:k[n]};case`${"ETH"}.THOR`:return{identifier:"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044",decimal:18};case`${"ETH"}.vTHOR`:return{identifier:"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d",decimal:18};case"GAIA":return{identifier:`${n}.ATOM`,decimal:k[n]};case"THOR":return{identifier:`${n}.RUNE`,decimal:k[n]};case"BSC":return{identifier:`${n}.BNB`,decimal:k[n]};case"MAYA":return{identifier:`${n}.CACAO`,decimal:10};case"XRD":return{identifier:`${"XRD"}.XRD`,decimal:k[n]};case`${"MAYA"}.MAYA`:return{identifier:n,decimal:4};case`${"KUJI"}.USK`:return{identifier:n,decimal:6};default:return{identifier:`${n}.${n}`,decimal:k[n]}}},$n=({chain:n,symbol:h})=>{if(h.includes("/"))return"Synth";switch(n){case"ARB":case"OP":case"BASE":return h==="ETH"?"Native":n;case"GAIA":return h==="ATOM"?"Native":n;case"BSC":return h==="BNB"?"Native":n;case"MAYA":return h==="CACAO"?"Native":n;case"THOR":return h==="RUNE"?"Native":n;default:return h===n?"Native":n}},_H=(n)=>{let[h,...H]=n.split("."),x=n.includes("/"),R=H.join("."),B=R?.split("-"),N=B?.length?B.length===1?B[0]:B.slice(0,-1).join("-"):void 0;return{chain:h,symbol:R,ticker:N,synth:x}},En=new RegExp(/(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/,"gmi"),vn=(n)=>{let[h,H]=n.split(".");if(!K.includes(h))return!0;let x=H.split("-"),R=x.length===1?void 0:x[x.length-1];return r({chain:h,symbol:H})||!!R},GH=(n)=>n.filter(({chain:h,value:H,symbol:x})=>{let R=`${h}.${x}`;return!En.test(R)&&vn(R)&&H!=="0"});async function LH(n){let h=await import("@swapkit/tokens");for(let H of Object.values(h))for(let{identifier:x,chain:R,...B}of H.tokens){if("identifier"in n&&x===n.identifier)return x;if("address"in B&&"chain"in n&&R===n.chain&&B.address.toLowerCase()===n.contract.toLowerCase())return x}return}var e=(n,h)=>{return[...n.slice(0,n.length-1),h]};function XH([n,h,H,x,R]){return`m/${n}'/${h}'/${H}'/${x}${typeof R!=="number"?"":`/${R}`}`}function JH({chain:n,index:h,addressIndex:H=0,type:x}){if(K.includes(n)){if(x&&["legacy","account"].includes(x))return[44,60,0,h];if(x==="ledgerLive")return[44,60,h,0,H];return e(b[n],h)}if(n==="SOL"){if(x==="account")return[44,501,0,h];return e(b[n],h)}let R=n==="LTC"?2:0;switch(x){case"nativeSegwitMiddleAccount":return[84,R,h,0,H];case"segwit":return[49,R,0,0,h];case"legacy":return[44,R,0,0,h];default:return e(b[n],h)}}function IH(n){let[h,H,x]=n.split("/").map((R)=>Number.parseInt(R,10));switch(H){case 44:return"legacy";case 49:return"p2sh";default:return"bech32"}}function mn({liquidityUnits:n,poolUnits:h,runeDepth:H}){let x=J(n),R=J(h),B=J(H),N=x.mul(B),o=R.mul(R).mul(2),O=R.mul(x).mul(2),A=x.mul(x),T=R.mul(R).mul(R);return N.mul(o.sub(O).add(A)).div(T)}function dn({liquidityUnits:n,poolUnits:h,assetDepth:H}){let x=J(n),R=J(h),B=J(H),N=x.mul(B),o=R.mul(R).mul(2),O=R.mul(x).mul(2),A=x.mul(x),T=N.mul(o.sub(O).add(A)),j=R.mul(R).mul(R);return T.div(j)}function ZH({percent:n,runeDepth:h,liquidityUnits:H,poolUnits:x}){return mn({runeDepth:h,liquidityUnits:H,poolUnits:x}).mul(n)}function YH({percent:n,assetDepth:h,liquidityUnits:H,poolUnits:x}){return dn({assetDepth:h,liquidityUnits:H,poolUnits:x}).mul(n)}function J(n){return S.fromBigInt(BigInt(n),k.THOR)}function an({liquidityUnits:n,poolUnits:h,runeDepth:H,assetDepth:x}){return{assetAmount:J(x).mul(n).div(h),runeAmount:J(H).mul(n).div(h)}}function PH({liquidityUnits:n,poolUnits:h,runeDepth:H,assetDepth:x,percent:R}){return Object.fromEntries(Object.entries(an({liquidityUnits:n,poolUnits:h,runeDepth:H,assetDepth:x})).map(([B,N])=>[B,N.mul(R)]))}function wH({runeDepth:n,poolUnits:h,assetDepth:H,liquidityUnits:x,runeAmount:R,assetAmount:B}){let N=new S({value:n,decimal:8}),o=new S({value:H,decimal:8}),O=new S({value:h,decimal:8}),A=new S({value:R,decimal:8}),T=new S({value:B,decimal:8}),j=A.mul(o),I=T.mul(N),G=A.mul(T),Z=N.mul(o),g=O.mul(j.add(I.add(G.mul(2)))),t=j.add(I.add(Z.mul(2))),M=g.div(t),Y=J(x).add(M);if(M.getBaseValue("number")===0)return Y.div(O).getBaseValue("number");let nn=O.add(Y);return Y.div(nn).getBaseValue("number")}function qH({runeAmount:n,assetAmount:h,runeDepth:H,assetDepth:x}){if(n==="0"||h==="0"||H==="0"||x==="0")return 0;let R=J(H),B=J(x),N=J(h),o=J(n),O=N.mul(R).sub(B.mul(o)),A=B.mul(o).add(R.mul(B));return Math.abs(O.div(A).getBaseValue("number"))}function ln({type:n,address:h}){return`${n}:${h}`}function rn({address:n,unbondAmount:h}){return`${"UNBOND"}:${n}:${h}`}function uH(n){return u("POOL+",n)}function en({chain:n,symbol:h,...H}){return u(`${"+"}:${n}/${h}`,H)}function nh({chain:n,symbol:h,address:H,...x}){let R=Fh({chain:n,symbol:h}),B=H?`:${H}:`:":";return u(`${"+"}:${R}${B}`,x)}function hh({chain:n,symbol:h,basisPoints:H}){return`${"-"}:${n}/${h}:${H}`}function Hh({chain:n,symbol:h,ticker:H,basisPoints:x,targetAsset:R}){let B=n==="ETH"&&H!=="ETH"?`${H}-${h.slice(-3)}`:h,N=R?`:${R}`:"";return`${"-"}:${n}.${B}:${x}${N}`}function MH({basisPoints:n,...h}){return u(`${"POOL-"}:${n}`,h)}function xh({name:n,chain:h,address:H,owner:x}){let R=`${"~"}:${n}:${h}:${H}`,B=x?`:${x}`:"";return`${R}${B}`}function pH({name:n,chain:h,asset:H,payout:x,owner:R}){return`${"~"}:${n}:${h}:${x}:${R}:${H}`}function Rh(n,{asset:h,address:H,minAmount:x,...R}){let B=`${n}:${h}:${H}`,N=x?`:${x}`:"";return u(`${B}${N}`,R)}function u(n,{affiliateAddress:h,affiliateBasisPoints:H}={}){let x=`${n}${h?`:${h}:${H||0}`:""}`;return x.endsWith(":")?x.slice(0,-1):x}function Fh({chain:n,symbol:h}){switch(n){case"BTC":case"DOGE":case"LTC":return n.slice(0,1).toLowerCase();case"BCH":return"c";default:return`${n}.${h}`}}var KH=(n,h)=>{switch(n){case"LEAVE":case"BOND":return ln({type:n,address:h?.address});case"UNBOND":return rn({address:h?.address,unbondAmount:h?.unbondAmount});case"~":return xh(h);case"$+":case"$-":return Rh(n,h);case"+":{let{chain:H,symbol:x,address:R,singleSide:B}=h;if(B)return en({chain:H,symbol:x});return nh({chain:H,symbol:x,address:R})}case"-":{let{chain:H,ticker:x,symbol:R,basisPoints:B,targetAssetString:N,singleSide:o}=h;if(o)return hh({chain:H,symbol:R,basisPoints:B});return Hh({chain:H,ticker:x,symbol:R,basisPoints:B,targetAsset:N})}default:throw new s({errorKey:"helpers_invalid_memo_type",info:{memoType:n}})}};var Bh=["approve","approvedAmount","call","sendTransaction","transfer","isApproved","approvedAmount","EIP1193SendTransaction","getFeeData","broadcastTransaction","estimateCall","estimateGasLimit","estimateGasPrices","createContractTxObject"],Nh=(n,h,H)=>async(...x)=>{try{await Ch(h,H)}catch(R){throw new s({errorKey:"helpers_failed_to_switch_network",info:{error:R}})}return n(...x)},_n=({provider:n,params:h,method:H})=>{if(!n?.send)throw new s("helpers_not_found_provider");let x=h?Array.isArray(h)?h:[h]:[];return n.send(H,x)},DH=({toolbox:n,chainId:h,provider:H=window.ethereum})=>{let x=Bh.reduce((R,B)=>{if(!n[B])return R;let N=n[B];if(typeof N!=="function")return R;return{...R,[B]:Nh(N,H,h)}},{});return{...n,...x}},EH=(n,h)=>_n({provider:n,method:"wallet_addEthereumChain",params:[h]}),Ch=(n,h="0x1")=>_n({provider:n,method:"wallet_switchEthereumChain",params:[{chainId:h}]}),vH=(n)=>{window.ethereum?.on("accountsChanged",()=>n()),window.xfi?.ethereum.on("accountsChanged",()=>n())},mH=()=>{let{isTrust:n,isBraveWallet:h,__XDEFI:H,overrideIsMetaMask:x,selectedProvider:R}=window?.ethereum||{};if(n)return"TRUSTWALLET_WEB";if(h)return"BRAVE";if(x&&R?.isCoinbaseWallet)return"COINBASE_WEB";if(H)"XDEFI";return"METAMASK"},dH=(n)=>{return oh().includes(n)},oh=()=>{let n=window?.ethereum&&!window.ethereum?.isBraveWallet,h=window?.xfi||window?.ethereum?.__XDEFI,H=window?.ethereum?.isBraveWallet,x=window?.ethereum?.isTrust||window?.trustwallet,R=window?.ethereum?.overrideIsMetaMask&&window?.ethereum?.selectedProvider?.isCoinbaseWallet||window?.coinbaseWalletExtension,B=[];if(n)B.push("METAMASK");if(h)B.push("XDEFI");if(H)B.push("BRAVE");if(x)B.push("TRUSTWALLET_WEB");if(R)B.push("COINBASE_WEB");if(Ah())B.push("OKX_MOBILE");return B};function aH({chain:n,covalentApiKey:h,ethplorerApiKey:H}){let x=n!=="ETH"&&!h?"covalentApiKey":H?void 0:"ethplorerApiKey";if(x)throw new s({errorKey:"wallet_missing_api_key",info:{missingKey:x}});return{covalentApiKey:h,ethplorerApiKey:H}}function iH(){let n=[];function h(x){if(n.map((R)=>R.info.uuid).includes(x.detail.info.uuid))return;n.push(x.detail)}window.addEventListener("eip6963:announceProvider",h),window.dispatchEvent(new Event("eip6963:requestProvider"));function H(){window.removeEventListener("eip6963:announceProvider",h)}return{providers:n,removeEIP6963EventListener:H}}var Ah=()=>{let n=navigator.userAgent,h=/iphone|ipad|ipod|ios/i.test(n),H=/android|XiaoMi|MiuiBrowser/i.test(n),x=h||H,R=/OKApp/i.test(n);return x&&R},lH=()=>typeof window.ethereum!=="undefined";class S extends z{eq(n){return this.eqValue(n)}static fromBigInt(n,h){return new S({decimal:h,value:q({value:n,bigIntDecimal:h,decimal:h})})}}export{ah as wrapWithThrow,Nh as wrapMethodWithNetworkSwitch,Cn as warnOnce,hH as validateTNS,An as validateIdentifier,e as updatedLastIndex,Ch as switchEVMWalletNetwork,fh as setRequestClientConfig,DH as prepareNetworkSwitch,Ah as okxMobileEnabled,oh as listWeb3EVMWallets,lH as isWeb3Detected,r as isGasAsset,dH as isDetected,IH as getWalletFormatFor,mh as getTHORNameCost,PH as getSymmetricWithdraw,an as getSymmetricPoolShare,cH as getMinAmountByChain,Hh as getMemoForWithdraw,rn as getMemoForUnbond,hh as getMemoForSaverWithdraw,en as getMemoForSaverDeposit,MH as getMemoForRunePoolWithdraw,uH as getMemoForRunePoolDeposit,xh as getMemoForNameRegister,pH as getMemoForNamePreferredAssetRegister,Rh as getMemoForLoan,ln as getMemoForLeaveAndBond,nh as getMemoForDeposit,KH as getMemoFor,dh as getMAYANameCost,qH as getLiquiditySlippage,tH as getGasAsset,wH as getEstimatedPoolShare,mH as getETHDefaultWallet,iH as getEIP6963Wallets,lh as getDynamicChainId,JH as getDerivationPathFor,kn as getDecimal,On as getCommonAssetInfo,ih as getChainIdentifier,ZH as getAsymmetricRuneWithdrawAmount,mn as getAsymmetricRuneShare,YH as getAsymmetricAssetWithdrawAmount,dn as getAsymmetricAssetShare,$n as getAssetType,q as formatBigIntToSafeValue,LH as findAssetBy,GH as filterAssets,aH as ensureEVMApiKeys,XH as derivationPathToString,Qn as defaultRequestHeaders,_H as assetFromString,EH as addEVMWalletNetwork,vH as addAccountsChangedCallback,Pn as WarningCodeEnum,Fn as WalletOption,th as UTXOChains,Gh as TCSupportedChains,S as SwapKitNumber,s as SwapKitError,$h as SubstrateChains,Sh as SWAP_OUT,Ih as SWAP_IN,w as RequestClient,p as RPCUrl,Jn as QuoteMode,wn as ProviderName,b as NetworkDerivationPath,Bn as MemoType,Lh as MAYASupportedChains,gn as LedgerErrorCode,qn as FeeTypeEnum,zn as FeeOption,m as ExplorerUrl,Yn as ErrorCode,K as EVMChains,Sn as DerivationPath,_h as CosmosChains,In as ContractAddress,Tn as CommonAssetStrings,d as ChainToRPC,sh as ChainToHexChainId,jh as ChainToExplorerUrl,Rn as ChainToChainId,Oh as ChainIdToChain,Q as ChainId,X as Chain,z as BigIntArithmetics,k as BaseDecimal,L as AssetValue,Zn as ApproveMode,Jh as AGG_SWAP};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
6
|
+
//# debugId=8CA4B547D605105F64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
"const errorCodes = {\n /**\n * Core\n */\n core_estimated_max_spendable_chain_not_supported: 10002,\n core_extend_error: 10003,\n core_inbound_data_not_found: 10004,\n core_approve_asset_address_or_from_not_found: 10005,\n core_plugin_not_found: 10006,\n core_plugin_swap_not_found: 10007,\n core_approve_asset_target_invalid: 10008,\n core_explorer_unsupported_chain: 10009,\n core_verify_message_not_supported: 10010,\n core_chain_halted: 10099,\n /**\n * Core - Wallet\n */\n core_wallet_connection_not_found: 10100,\n core_wallet_xdefi_not_installed: 10101,\n core_wallet_evmwallet_not_installed: 10102,\n core_wallet_walletconnect_not_installed: 10103,\n core_wallet_keystore_not_installed: 10104,\n core_wallet_ledger_not_installed: 10105,\n core_wallet_trezor_not_installed: 10106,\n core_wallet_keplr_not_installed: 10107,\n core_wallet_okx_not_installed: 10108,\n core_wallet_keepkey_not_installed: 10109,\n core_wallet_talisman_not_installed: 10110,\n core_wallet_not_keypair_wallet: 10111,\n core_wallet_sign_message_not_supported: 10110,\n /**\n * Core - Swap\n */\n core_swap_invalid_params: 10200,\n core_swap_route_not_complete: 10201,\n core_swap_asset_not_recognized: 10202,\n core_swap_contract_not_found: 10203,\n core_swap_route_transaction_not_found: 10204,\n core_swap_contract_not_supported: 10205,\n core_swap_transaction_error: 10206,\n core_swap_quote_mode_not_supported: 10207,\n /**\n * Core - Transaction\n */\n core_transaction_deposit_error: 10301,\n core_transaction_create_liquidity_base_error: 10302,\n core_transaction_create_liquidity_asset_error: 10303,\n core_transaction_create_liquidity_invalid_params: 10304,\n core_transaction_add_liquidity_invalid_params: 10305,\n core_transaction_add_liquidity_base_address: 10306,\n core_transaction_add_liquidity_base_error: 10307,\n core_transaction_add_liquidity_asset_error: 10308,\n core_transaction_withdraw_error: 10309,\n core_transaction_deposit_to_pool_error: 10310,\n core_transaction_deposit_insufficient_funds_error: 10311,\n core_transaction_deposit_gas_error: 10312,\n core_transaction_invalid_sender_address: 10313,\n core_transaction_deposit_server_error: 10314,\n core_transaction_user_rejected: 10315,\n core_transaction_failed: 10316,\n core_transaction_invalid_recipient_address: 10317,\n /**\n * Wallets\n */\n wallet_connection_rejected_by_user: 20000,\n wallet_missing_api_key: 20001,\n wallet_chain_not_supported: 20002,\n wallet_missing_params: 20003,\n wallet_provider_not_found: 20004,\n wallet_failed_to_add_or_switch_network: 20005,\n wallet_ledger_connection_error: 20101,\n wallet_ledger_connection_claimed: 20102,\n wallet_ledger_get_address_error: 20103,\n wallet_ledger_device_not_found: 20104,\n wallet_ledger_device_locked: 20105,\n wallet_phantom_not_found: 20201,\n wallet_xdefi_not_found: 20301,\n wallet_xdefi_send_transaction_no_address: 20302,\n wallet_xdefi_contract_address_not_provided: 20303,\n wallet_xdefi_asset_not_defined: 20304,\n wallet_walletconnect_project_id_not_specified: 20401,\n wallet_walletconnect_connection_not_established: 20402,\n wallet_walletconnect_namespace_not_supported: 20403,\n wallet_trezor_failed_to_sign_transaction: 20501,\n wallet_trezor_derivation_path_not_supported: 20502,\n wallet_trezor_failed_to_get_address: 20503,\n wallet_talisman_not_enabled: 20601,\n wallet_talisman_not_found: 20602,\n wallet_polkadot_not_found: 20701,\n wallet_radix_not_found: 20801,\n wallet_radix_transaction_failed: 20802,\n wallet_keepkey_not_found: 20900,\n wallet_keepkey_asset_not_defined: 20901,\n wallet_keepkey_contract_address_not_provided: 20902,\n wallet_keepkey_send_transaction_no_address: 20903,\n /**\n * Chainflip\n */\n chainflip_channel_error: 30001,\n chainflip_unknown_asset: 30002,\n chainflip_broker_invalid_params: 30100,\n chainflip_broker_recipient_error: 30101,\n chainflip_broker_register: 30102,\n chainflip_broker_tx_error: 30103,\n chainflip_broker_withdraw: 30104,\n chainflip_broker_fund_only_flip_supported: 30105,\n chainflip_broker_fund_invalid_address: 30106,\n /**\n * THORChain\n */\n thorchain_chain_halted: 40001,\n thorchain_trading_halted: 40002,\n thorchain_swapin_router_required: 40100,\n thorchain_swapin_vault_required: 40101,\n thorchain_swapin_memo_required: 40102,\n thorchain_swapin_token_required: 40103,\n thorchain_preferred_asset_payout_required: 40104,\n /**\n * SwapKit API\n */\n api_v2_invalid_response: 50001,\n api_v2_server_error: 50002,\n /**\n * Toolboxes\n */\n toolbox_cosmos_signer_not_defined: 90101,\n toolbox_cosmos_no_accounts_found: 90102,\n toolbox_cosmos_verify_signature_no_pubkey: 90103,\n toolbox_evm_no_abi_fragment: 90201,\n toolbox_evm_no_signer: 90202,\n toolbox_evm_no_signer_address: 90203,\n toolbox_evm_no_from_address: 90204,\n toolbox_evm_no_contract_address: 90205,\n toolbox_evm_no_fee_data: 90206,\n toolbox_evm_no_gas_price: 90207,\n toolbox_evm_no_to_address: 90208,\n toolbox_evm_invalid_gas_asset_address: 90209,\n toolbox_evm_provider_not_eip1193_compatible: 90210,\n toolbox_evm_error_estimating_gas_limit: 90211,\n toolbox_evm_error_sending_transaction: 90212,\n toolbox_radix_signer_not_defined: 90301,\n /**\n * Helpers\n */\n helpers_invalid_number_different_decimals: 99000,\n helpers_invalid_number_of_years: 99001,\n helpers_invalid_identifier: 99002,\n helpers_invalid_asset_url: 99003,\n helpers_invalid_asset_identifier: 99004,\n helpers_invalid_memo_type: 99005,\n helpers_failed_to_switch_network: 99103,\n helpers_not_found_provider: 99200,\n /**\n * Anything else\n */\n not_implemented: 99999,\n} as const;\n\nexport type ErrorKeys = keyof typeof errorCodes;\n\nexport class SwapKitError extends Error {\n static ErrorCode = errorCodes;\n\n constructor(\n errorOrErrorKey: ErrorKeys | { errorKey: ErrorKeys; info?: Record<string, any> },\n sourceError?: any,\n ) {\n const isErrorString = typeof errorOrErrorKey === \"string\";\n\n const errorKey = isErrorString ? errorOrErrorKey : errorOrErrorKey.errorKey;\n\n if (sourceError) {\n console.error(sourceError, {\n stack: sourceError?.stack,\n message: sourceError?.message,\n });\n }\n\n super(errorKey, {\n cause: {\n code: SwapKitError.ErrorCode[errorKey],\n message: `${errorKey}${isErrorString ? \"\" : `: ${JSON.stringify(errorOrErrorKey.info)}`}`,\n },\n });\n\n Object.setPrototypeOf(this, SwapKitError.prototype);\n }\n}\n",
|
|
15
15
|
"import { RequestClient } from \"../modules/requestClient\";\nimport { type ErrorKeys, SwapKitError } from \"../modules/swapKitError\";\nimport { Chain, ChainId, RPCUrl } from \"../types\";\n\n// 10 rune for register, 1 rune per year\n// MINIMUM_REGISTRATION_FEE = 11\nexport function getTHORNameCost(numberOfYears: number) {\n if (numberOfYears < 0)\n throw new SwapKitError({\n errorKey: \"helpers_invalid_number_of_years\",\n info: { numberOfYears },\n });\n return 10 + numberOfYears;\n}\n\n// 10 CACAO for register\n// 1.0512 CACAO per year\nexport function getMAYANameCost(numberOfYears: number) {\n if (numberOfYears < 0)\n throw new SwapKitError({\n errorKey: \"helpers_invalid_number_of_years\",\n info: { numberOfYears },\n });\n // round to max 10 decimals\n return Math.round((10 + numberOfYears * 1.0512) * 1e10) / 1e10;\n}\n\nexport function wrapWithThrow<T>(fn: () => T, errorKey?: ErrorKeys) {\n try {\n return fn();\n } catch (error) {\n if (errorKey) {\n throw new SwapKitError(errorKey, error);\n }\n\n return console.error(error);\n }\n}\n\nexport function getChainIdentifier<T extends Chain>(chain: T) {\n switch (chain) {\n case Chain.THORChain:\n return `${chain}.RUNE`;\n\n case Chain.Cosmos:\n return `${chain}.ATOM`;\n\n case Chain.BinanceSmartChain:\n return `${chain}`;\n\n default:\n return `${chain}.${chain}`;\n }\n}\n\nconst skipWarnings = [\"production\", \"test\"].includes(process.env.NODE_ENV || \"\");\nconst warnings = new Set();\nexport function warnOnce(condition: boolean, warning: string) {\n if (!skipWarnings && condition) {\n if (warnings.has(warning)) {\n return;\n }\n\n warnings.add(warning);\n console.warn(warning);\n }\n}\n\nexport async function getDynamicChainId(chainId: ChainId = ChainId.THORChain) {\n if (![ChainId.THORChainStagenet, ChainId.THORChain, \"thorchain-mainnet-v1\"].includes(chainId))\n return chainId;\n try {\n const response = await RequestClient.get<{ result: { node_info: { network: string } } }>(\n `${chainId !== ChainId.THORChain ? RPCUrl.THORChainStagenet : RPCUrl.THORChain}/status`,\n );\n return response.result.node_info.network as ChainId;\n } catch (_error) {\n return chainId;\n }\n}\n",
|
|
16
16
|
"import { SwapKitError } from \"../modules/swapKitError\";\nimport { Chain } from \"../types/chains\";\n\n// Backward compatibility\nconst supportedChains = [...Object.values(Chain), \"TERRA\"];\n\nexport function validateIdentifier(identifier = \"\") {\n const uppercasedIdentifier = identifier.toUpperCase();\n\n const [chain] = uppercasedIdentifier.split(\".\") as [Chain, string];\n if (supportedChains.includes(chain)) return true;\n\n const [synthChain] = uppercasedIdentifier.split(\"/\") as [Chain, string];\n if (supportedChains.includes(synthChain)) return true;\n\n throw new SwapKitError({\n errorKey: \"helpers_invalid_identifier\",\n info: {\n message: `Invalid identifier: ${identifier}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`,\n identifier,\n },\n });\n}\n\nexport function validateTNS(name: string) {\n if (name.length > 30) return false;\n\n const regex = /^[a-zA-Z0-9+_-]+$/g;\n\n return !!name.match(regex);\n}\n",
|
|
17
|
-
"import { BaseDecimal } from \"../types/chains\";\nimport type { SwapKitNumber } from \"./swapKitNumber\";\n\ntype NumberPrimitivesType = {\n bigint: bigint;\n number: number;\n string: string;\n};\nexport type NumberPrimitives = bigint | number | string;\ntype InitialisationValueType = NumberPrimitives | BigIntArithmetics | SwapKitNumber;\n\ntype SKBigIntParams = InitialisationValueType | { decimal?: number; value: number | string };\ntype AllowedNumberTypes = \"bigint\" | \"number\" | \"string\";\n\nconst DEFAULT_DECIMAL = 8;\nconst toMultiplier = (decimal: number) => 10n ** BigInt(decimal);\nconst decimalFromMultiplier = (multiplier: bigint) =>\n Math.log10(Number.parseFloat(multiplier.toString()));\n\nexport function formatBigIntToSafeValue({\n value,\n bigIntDecimal = DEFAULT_DECIMAL,\n decimal = DEFAULT_DECIMAL,\n}: {\n value: bigint;\n bigIntDecimal?: number;\n decimal?: number;\n}) {\n if (decimal === 0) return value.toString();\n const isNegative = value < 0n;\n let valueString = value.toString().substring(isNegative ? 1 : 0);\n\n const padLength = decimal - (valueString.length - 1);\n\n if (padLength > 0) {\n valueString = \"0\".repeat(padLength) + valueString;\n }\n\n const decimalIndex = valueString.length - decimal;\n let decimalString = valueString.slice(-decimal);\n\n // Check if we need to round up\n if (Number.parseInt(decimalString[bigIntDecimal] || \"0\") >= 5) {\n // Increment the last decimal place and slice off the rest\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${(Number.parseInt(decimalString[bigIntDecimal - 1] || \"0\") + 1).toString()}`;\n } else {\n // Just slice off the extra digits\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${valueString.slice(0, decimalIndex)}.${decimalString}`.replace(\n /\\.?0*$/,\n \"\",\n );\n}\n\nexport class BigIntArithmetics {\n decimalMultiplier: bigint = 10n ** 8n;\n bigIntValue = 0n;\n decimal?: number;\n\n static fromBigInt(value: bigint, decimal?: number) {\n return new BigIntArithmetics({\n decimal,\n value: formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal }),\n });\n }\n\n static shiftDecimals({\n value,\n from,\n to,\n }: {\n value: InstanceType<typeof SwapKitNumber>;\n from: number;\n to: number;\n }) {\n return BigIntArithmetics.fromBigInt(\n (value.getBaseValue(\"bigint\") * toMultiplier(to)) / toMultiplier(from),\n to,\n );\n }\n\n constructor(params: SKBigIntParams) {\n const value = getStringValue(params);\n const isComplex = typeof params === \"object\";\n this.decimal = isComplex ? params.decimal : undefined;\n\n // use the multiplier to keep track of decimal point - defaults to 8 if lower than 8\n this.decimalMultiplier =\n isComplex && \"decimalMultiplier\" in params\n ? params.decimalMultiplier\n : toMultiplier(Math.max(getFloatDecimals(toSafeValue(value)), this.decimal || 0));\n this.#setValue(value);\n }\n\n set(value: SKBigIntParams): this {\n // @ts-expect-error False positive\n return new this.constructor({\n decimal: this.decimal,\n value,\n // @ts-expect-error False positive\n identifier: this.toString({ includeSynthProtocol: true }),\n });\n }\n add(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"add\", ...args);\n }\n sub(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"sub\", ...args);\n }\n mul(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"mul\", ...args);\n }\n div(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"div\", ...args);\n }\n gt(value: InitialisationValueType) {\n return this.#comparison(\"gt\", value);\n }\n gte(value: InitialisationValueType) {\n return this.#comparison(\"gte\", value);\n }\n lt(value: InitialisationValueType) {\n return this.#comparison(\"lt\", value);\n }\n lte(value: InitialisationValueType) {\n return this.#comparison(\"lte\", value);\n }\n eqValue(value: InitialisationValueType) {\n return this.#comparison(\"eqValue\", value);\n }\n\n // @ts-expect-error False positive\n getValue<T extends AllowedNumberTypes>(type: T): NumberPrimitivesType[T] {\n const value = this.formatBigIntToSafeValue(\n this.bigIntValue,\n this.decimal || decimalFromMultiplier(this.decimalMultiplier),\n );\n\n switch (type) {\n case \"number\":\n return Number(value) as NumberPrimitivesType[T];\n case \"string\":\n return value as NumberPrimitivesType[T];\n case \"bigint\":\n return ((this.bigIntValue * 10n ** BigInt(this.decimal || 8n)) /\n this.decimalMultiplier) as NumberPrimitivesType[T];\n }\n }\n\n // @ts-expect-error\n getBaseValue<T extends AllowedNumberTypes>(type: T): NumberPrimitivesType[T] {\n const divisor = this.decimalMultiplier / toMultiplier(this.decimal || BaseDecimal.THOR);\n const baseValue = this.bigIntValue / divisor;\n\n switch (type) {\n case \"number\":\n return Number(baseValue) as NumberPrimitivesType[T];\n case \"string\":\n return baseValue.toString() as NumberPrimitivesType[T];\n case \"bigint\":\n return baseValue as NumberPrimitivesType[T];\n }\n }\n\n getBigIntValue(value: InitialisationValueType, decimal?: number) {\n if (!decimal && typeof value === \"object\") return value.bigIntValue;\n\n const stringValue = getStringValue(value);\n const safeValue = toSafeValue(stringValue);\n\n if (safeValue === \"0\" || safeValue === \"undefined\") return 0n;\n return this.#toBigInt(safeValue, decimal);\n }\n\n toSignificant(significantDigits = 6) {\n const [int, dec] = this.getValue(\"string\").split(\".\");\n const integer = int || \"\";\n const decimal = dec || \"\";\n const valueLength = Number.parseInt(integer) ? integer.length + decimal.length : decimal.length;\n\n if (valueLength <= significantDigits) {\n return this.getValue(\"string\");\n }\n\n if (integer.length >= significantDigits) {\n return integer.slice(0, significantDigits).padEnd(integer.length, \"0\");\n }\n\n if (Number.parseInt(integer)) {\n return `${integer}.${decimal.slice(0, significantDigits - integer.length)}`.padEnd(\n significantDigits - integer.length,\n \"0\",\n );\n }\n\n const trimmedDecimal = Number.parseInt(decimal);\n const slicedDecimal = `${trimmedDecimal}`.slice(0, significantDigits);\n\n return `0.${slicedDecimal.padStart(\n decimal.length - `${trimmedDecimal}`.length + slicedDecimal.length,\n \"0\",\n )}`;\n }\n\n toFixed(fixedDigits = 6) {\n const [int, dec] = this.getValue(\"string\").split(\".\");\n const integer = int || \"\";\n const decimal = dec || \"\";\n\n if (Number.parseInt(integer)) {\n return `${integer}.${decimal.slice(0, fixedDigits)}`.padEnd(fixedDigits, \"0\");\n }\n\n const trimmedDecimal = Number.parseInt(decimal);\n const slicedDecimal = `${trimmedDecimal}`.slice(0, fixedDigits);\n\n return `0.${slicedDecimal.padStart(\n decimal.length - `${trimmedDecimal}`.length + slicedDecimal.length,\n \"0\",\n )}`;\n }\n\n toAbbreviation(digits = 2) {\n const value = this.getValue(\"number\");\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\", \"Q\", \"Qi\", \"S\"];\n const tier = Math.floor(Math.log10(Math.abs(value)) / 3);\n const suffix = abbreviations[tier];\n\n if (!suffix) return this.getValue(\"string\");\n\n const scale = 10 ** (tier * 3);\n const scaled = value / scale;\n\n return `${scaled.toFixed(digits)}${suffix}`;\n }\n\n toCurrency(\n currency = \"$\",\n {\n currencyPosition = \"start\",\n decimal = 2,\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n } = {},\n ) {\n const value = this.getValue(\"number\");\n const [int = \"\", dec = \"\"] = value.toFixed(6).split(\".\");\n const integer = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\n\n const parsedValue =\n int || dec\n ? int === \"0\"\n ? `${Number.parseFloat(`0.${dec}`)}`.replace(\".\", decimalSeparator)\n : `${integer}${Number.parseInt(dec) ? `${decimalSeparator}${dec.slice(0, decimal)}` : \"\"}`\n : \"0.00\";\n\n return `${currencyPosition === \"start\" ? currency : \"\"}${parsedValue}${\n currencyPosition === \"end\" ? currency : \"\"\n }`;\n }\n\n formatBigIntToSafeValue(value: bigint, decimal?: number) {\n const bigIntDecimal = decimal || this.decimal || DEFAULT_DECIMAL;\n const decimalToUseForConversion = Math.max(\n bigIntDecimal,\n decimalFromMultiplier(this.decimalMultiplier),\n );\n const isNegative = value < 0n;\n\n const valueString = value.toString().substring(isNegative ? 1 : 0);\n const padLength = decimalToUseForConversion - (valueString.length - 1);\n\n const parsedValueString = padLength > 0 ? \"0\".repeat(padLength) + valueString : valueString;\n\n const decimalIndex = parsedValueString.length - decimalToUseForConversion;\n let decimalString = parsedValueString.slice(-decimalToUseForConversion);\n\n // Check if we need to round up\n if (Number.parseInt(decimalString[bigIntDecimal] || \"0\") >= 5) {\n // Increment the last decimal place and slice off the rest\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${(Number.parseInt(decimalString[bigIntDecimal - 1] || \"0\") + 1).toString()}`;\n } else {\n // Just slice off the extra digits\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${parsedValueString.slice(\n 0,\n decimalIndex,\n )}.${decimalString}`.replace(/\\.?0*$/, \"\");\n }\n\n #arithmetics(method: \"add\" | \"sub\" | \"mul\" | \"div\", ...args: InitialisationValueType[]): this {\n const precisionDecimal = this.#retrievePrecisionDecimal(this, ...args);\n const decimal = Math.max(precisionDecimal, decimalFromMultiplier(this.decimalMultiplier));\n const precisionDecimalMultiplier = toMultiplier(decimal);\n\n const result = args.reduce(\n (acc: bigint, arg) => {\n const value = this.getBigIntValue(arg, decimal);\n\n switch (method) {\n case \"add\":\n return acc + value;\n case \"sub\":\n return acc - value;\n /**\n * Multiplication & division would end up with wrong result if we don't adjust the value\n * 200000000n * 200000000n => 40000000000000000n\n * 200000000n / 200000000n => 1n\n * So we do the following:\n * 200000000n * 200000000n = 40000000000000000n / 100000000n (decimals) => 400000000n\n * (200000000n * 100000000n (decimals)) / 200000000n => 100000000n\n */\n case \"mul\":\n return (acc * value) / precisionDecimalMultiplier;\n case \"div\": {\n if (value === 0n) throw new RangeError(\"Division by zero\");\n return (acc * precisionDecimalMultiplier) / value;\n }\n default:\n return acc;\n }\n },\n //normalize is to precision multiplier base\n (this.bigIntValue * precisionDecimalMultiplier) / this.decimalMultiplier,\n );\n\n const value = formatBigIntToSafeValue({\n bigIntDecimal: decimal,\n decimal,\n value: result,\n });\n\n // @ts-expect-error False positive\n return new this.constructor({\n decimalMultiplier: toMultiplier(decimal),\n decimal: this.decimal,\n value,\n identifier: this.toString(),\n });\n }\n\n #comparison(method: \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"eqValue\", ...args: InitialisationValueType[]) {\n const decimal = this.#retrievePrecisionDecimal(this, ...args);\n const value = this.getBigIntValue(args[0] || \"0\", decimal);\n const compareToValue = this.getBigIntValue(this, decimal);\n\n switch (method) {\n case \"gt\":\n return compareToValue > value;\n case \"gte\":\n return compareToValue >= value;\n case \"lt\":\n return compareToValue < value;\n case \"lte\":\n return compareToValue <= value;\n case \"eqValue\":\n return compareToValue === value;\n }\n }\n\n #setValue(value: InitialisationValueType) {\n const safeValue = toSafeValue(value) || \"0\";\n this.bigIntValue = this.#toBigInt(safeValue);\n }\n\n #retrievePrecisionDecimal(...args: InitialisationValueType[]) {\n const decimals = args\n .map((arg) => {\n const isObject = typeof arg === \"object\";\n const value = isObject\n ? arg.decimal || decimalFromMultiplier(arg.decimalMultiplier)\n : getFloatDecimals(toSafeValue(arg));\n\n return value;\n })\n .filter(Boolean) as number[];\n\n return Math.max(...decimals, DEFAULT_DECIMAL);\n }\n\n #toBigInt(value: string, decimal?: number) {\n const multiplier = decimal ? toMultiplier(decimal) : this.decimalMultiplier;\n const padDecimal = decimalFromMultiplier(multiplier);\n const [integerPart = \"\", decimalPart = \"\"] = value.split(\".\");\n\n return BigInt(`${integerPart}${decimalPart.padEnd(padDecimal, \"0\")}`);\n }\n}\n\nconst numberFormatter = Intl.NumberFormat(\"fullwide\", {\n useGrouping: false,\n maximumFractionDigits: 20,\n});\n\nfunction toSafeValue(value: InitialisationValueType) {\n const parsedValue =\n typeof value === \"number\" ? numberFormatter.format(value) : getStringValue(value);\n const splitValue = `${parsedValue}`.replaceAll(\",\", \".\").split(\".\");\n\n return splitValue.length > 1\n ? `${splitValue.slice(0, -1).join(\"\")}.${splitValue.at(-1)}`\n : splitValue[0] || \"0\";\n}\n\nfunction getFloatDecimals(value: string) {\n const decimals = value.split(\".\")[1]?.length || 0;\n return Math.max(decimals, DEFAULT_DECIMAL);\n}\n\nfunction getStringValue(param: SKBigIntParams) {\n return typeof param === \"object\"\n ? \"getValue\" in param\n ? param.getValue(\"string\")\n : param.value\n : param;\n}\n",
|
|
17
|
+
"import { BaseDecimal } from \"../types/chains\";\nimport type { SwapKitNumber } from \"./swapKitNumber\";\n\ntype NumberPrimitivesType = {\n bigint: bigint;\n number: number;\n string: string;\n};\nexport type NumberPrimitives = bigint | number | string;\ntype InitialisationValueType = NumberPrimitives | BigIntArithmetics | SwapKitNumber;\n\ntype SKBigIntParams = InitialisationValueType | { decimal?: number; value: number | string };\ntype AllowedNumberTypes = \"bigint\" | \"number\" | \"string\";\n\nconst DEFAULT_DECIMAL = 8;\nconst toMultiplier = (decimal: number) => 10n ** BigInt(decimal);\nconst decimalFromMultiplier = (multiplier: bigint) =>\n Math.log10(Number.parseFloat(multiplier.toString()));\n\nexport function formatBigIntToSafeValue({\n value,\n bigIntDecimal = DEFAULT_DECIMAL,\n decimal = DEFAULT_DECIMAL,\n}: {\n value: bigint;\n bigIntDecimal?: number;\n decimal?: number;\n}) {\n if (decimal === 0) return value.toString();\n const isNegative = value < 0n;\n let valueString = value.toString().substring(isNegative ? 1 : 0);\n\n const padLength = decimal - (valueString.length - 1);\n\n if (padLength > 0) {\n valueString = \"0\".repeat(padLength) + valueString;\n }\n\n const decimalIndex = valueString.length - decimal;\n let decimalString = valueString.slice(-decimal);\n\n // Check if we need to round up\n if (Number.parseInt(decimalString[bigIntDecimal] || \"0\") >= 5) {\n // Increment the last decimal place and slice off the rest\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${(Number.parseInt(decimalString[bigIntDecimal - 1] || \"0\") + 1).toString()}`;\n } else {\n // Just slice off the extra digits\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${valueString.slice(0, decimalIndex)}.${decimalString}`.replace(\n /\\.?0*$/,\n \"\",\n );\n}\n\nexport class BigIntArithmetics {\n decimalMultiplier: bigint = 10n ** 8n;\n bigIntValue = 0n;\n decimal?: number;\n\n static fromBigInt(value: bigint, decimal?: number) {\n return new BigIntArithmetics({\n decimal,\n value: formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal }),\n });\n }\n\n static shiftDecimals({\n value,\n from,\n to,\n }: {\n value: InstanceType<typeof SwapKitNumber>;\n from: number;\n to: number;\n }) {\n return BigIntArithmetics.fromBigInt(\n (value.getBaseValue(\"bigint\") * toMultiplier(to)) / toMultiplier(from),\n to,\n );\n }\n\n constructor(params: SKBigIntParams) {\n const value = getStringValue(params);\n const isComplex = typeof params === \"object\";\n this.decimal = isComplex ? params.decimal : undefined;\n\n // use the multiplier to keep track of decimal point - defaults to 8 if lower than 8\n this.decimalMultiplier =\n isComplex && \"decimalMultiplier\" in params\n ? params.decimalMultiplier\n : toMultiplier(Math.max(getFloatDecimals(toSafeValue(value)), this.decimal || 0));\n this.#setValue(value);\n }\n\n set(value: SKBigIntParams): this {\n // @ts-expect-error False positive\n return new this.constructor({\n decimal: this.decimal,\n value,\n // @ts-expect-error False positive\n identifier: this.toString({ includeSynthProtocol: true }),\n });\n }\n add(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"add\", ...args);\n }\n sub(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"sub\", ...args);\n }\n mul(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"mul\", ...args);\n }\n div(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"div\", ...args);\n }\n gt(value: InitialisationValueType) {\n return this.#comparison(\"gt\", value);\n }\n gte(value: InitialisationValueType) {\n return this.#comparison(\"gte\", value);\n }\n lt(value: InitialisationValueType) {\n return this.#comparison(\"lt\", value);\n }\n lte(value: InitialisationValueType) {\n return this.#comparison(\"lte\", value);\n }\n eqValue(value: InitialisationValueType) {\n return this.#comparison(\"eqValue\", value);\n }\n\n // @ts-expect-error False positive\n getValue<T extends AllowedNumberTypes>(type: T, decimal?: number): NumberPrimitivesType[T] {\n const value = this.formatBigIntToSafeValue(\n this.bigIntValue,\n decimal || this.decimal || decimalFromMultiplier(this.decimalMultiplier),\n );\n\n switch (type) {\n case \"number\":\n return Number(value) as NumberPrimitivesType[T];\n case \"string\":\n return value as NumberPrimitivesType[T];\n case \"bigint\":\n return ((this.bigIntValue * 10n ** BigInt(this.decimal || 8n)) /\n this.decimalMultiplier) as NumberPrimitivesType[T];\n }\n }\n\n // @ts-expect-error\n getBaseValue<T extends AllowedNumberTypes>(type: T, decimal?: number): NumberPrimitivesType[T] {\n const divisor =\n this.decimalMultiplier / toMultiplier(decimal || this.decimal || BaseDecimal.THOR);\n const baseValue = this.bigIntValue / divisor;\n\n switch (type) {\n case \"number\":\n return Number(baseValue) as NumberPrimitivesType[T];\n case \"string\":\n return baseValue.toString() as NumberPrimitivesType[T];\n case \"bigint\":\n return baseValue as NumberPrimitivesType[T];\n }\n }\n\n getBigIntValue(value: InitialisationValueType, decimal?: number) {\n if (!decimal && typeof value === \"object\") return value.bigIntValue;\n\n const stringValue = getStringValue(value);\n const safeValue = toSafeValue(stringValue);\n\n if (safeValue === \"0\" || safeValue === \"undefined\") return 0n;\n return this.#toBigInt(safeValue, decimal);\n }\n\n toSignificant(significantDigits = 6) {\n const [int, dec] = this.getValue(\"string\").split(\".\");\n const integer = int || \"\";\n const decimal = dec || \"\";\n const valueLength = Number.parseInt(integer) ? integer.length + decimal.length : decimal.length;\n\n if (valueLength <= significantDigits) {\n return this.getValue(\"string\");\n }\n\n if (integer.length >= significantDigits) {\n return integer.slice(0, significantDigits).padEnd(integer.length, \"0\");\n }\n\n if (Number.parseInt(integer)) {\n return `${integer}.${decimal.slice(0, significantDigits - integer.length)}`.padEnd(\n significantDigits - integer.length,\n \"0\",\n );\n }\n\n const trimmedDecimal = Number.parseInt(decimal);\n const slicedDecimal = `${trimmedDecimal}`.slice(0, significantDigits);\n\n return `0.${slicedDecimal.padStart(\n decimal.length - `${trimmedDecimal}`.length + slicedDecimal.length,\n \"0\",\n )}`;\n }\n\n toFixed(fixedDigits = 6) {\n const [int, dec] = this.getValue(\"string\").split(\".\");\n const integer = int || \"\";\n const decimal = dec || \"\";\n\n if (Number.parseInt(integer)) {\n return `${integer}.${decimal.slice(0, fixedDigits)}`.padEnd(fixedDigits, \"0\");\n }\n\n const trimmedDecimal = Number.parseInt(decimal);\n const slicedDecimal = `${trimmedDecimal}`.slice(0, fixedDigits);\n\n return `0.${slicedDecimal.padStart(\n decimal.length - `${trimmedDecimal}`.length + slicedDecimal.length,\n \"0\",\n )}`;\n }\n\n toAbbreviation(digits = 2) {\n const value = this.getValue(\"number\");\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\", \"Q\", \"Qi\", \"S\"];\n const tier = Math.floor(Math.log10(Math.abs(value)) / 3);\n const suffix = abbreviations[tier];\n\n if (!suffix) return this.getValue(\"string\");\n\n const scale = 10 ** (tier * 3);\n const scaled = value / scale;\n\n return `${scaled.toFixed(digits)}${suffix}`;\n }\n\n toCurrency(\n currency = \"$\",\n {\n currencyPosition = \"start\",\n decimal = 2,\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n } = {},\n ) {\n const value = this.getValue(\"number\");\n const [int = \"\", dec = \"\"] = value.toFixed(6).split(\".\");\n const integer = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\n\n const parsedValue =\n int || dec\n ? int === \"0\"\n ? `${Number.parseFloat(`0.${dec}`)}`.replace(\".\", decimalSeparator)\n : `${integer}${Number.parseInt(dec) ? `${decimalSeparator}${dec.slice(0, decimal)}` : \"\"}`\n : \"0.00\";\n\n return `${currencyPosition === \"start\" ? currency : \"\"}${parsedValue}${\n currencyPosition === \"end\" ? currency : \"\"\n }`;\n }\n\n formatBigIntToSafeValue(value: bigint, decimal?: number) {\n const bigIntDecimal = decimal || this.decimal || DEFAULT_DECIMAL;\n const decimalToUseForConversion = Math.max(\n bigIntDecimal,\n decimalFromMultiplier(this.decimalMultiplier),\n );\n const isNegative = value < 0n;\n\n const valueString = value.toString().substring(isNegative ? 1 : 0);\n const padLength = decimalToUseForConversion - (valueString.length - 1);\n\n const parsedValueString = padLength > 0 ? \"0\".repeat(padLength) + valueString : valueString;\n\n const decimalIndex = parsedValueString.length - decimalToUseForConversion;\n let decimalString = parsedValueString.slice(-decimalToUseForConversion);\n\n // Check if we need to round up\n if (Number.parseInt(decimalString[bigIntDecimal] || \"0\") >= 5) {\n // Increment the last decimal place and slice off the rest\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${(Number.parseInt(decimalString[bigIntDecimal - 1] || \"0\") + 1).toString()}`;\n } else {\n // Just slice off the extra digits\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${parsedValueString.slice(\n 0,\n decimalIndex,\n )}.${decimalString}`.replace(/\\.?0*$/, \"\");\n }\n\n #arithmetics(method: \"add\" | \"sub\" | \"mul\" | \"div\", ...args: InitialisationValueType[]): this {\n const precisionDecimal = this.#retrievePrecisionDecimal(this, ...args);\n const decimal = Math.max(precisionDecimal, decimalFromMultiplier(this.decimalMultiplier));\n const precisionDecimalMultiplier = toMultiplier(decimal);\n\n const result = args.reduce(\n (acc: bigint, arg) => {\n const value = this.getBigIntValue(arg, decimal);\n\n switch (method) {\n case \"add\":\n return acc + value;\n case \"sub\":\n return acc - value;\n /**\n * Multiplication & division would end up with wrong result if we don't adjust the value\n * 200000000n * 200000000n => 40000000000000000n\n * 200000000n / 200000000n => 1n\n * So we do the following:\n * 200000000n * 200000000n = 40000000000000000n / 100000000n (decimals) => 400000000n\n * (200000000n * 100000000n (decimals)) / 200000000n => 100000000n\n */\n case \"mul\":\n return (acc * value) / precisionDecimalMultiplier;\n case \"div\": {\n if (value === 0n) throw new RangeError(\"Division by zero\");\n return (acc * precisionDecimalMultiplier) / value;\n }\n default:\n return acc;\n }\n },\n //normalize is to precision multiplier base\n (this.bigIntValue * precisionDecimalMultiplier) / this.decimalMultiplier,\n );\n\n const value = formatBigIntToSafeValue({\n bigIntDecimal: decimal,\n decimal,\n value: result,\n });\n\n // @ts-expect-error False positive\n return new this.constructor({\n decimalMultiplier: toMultiplier(decimal),\n decimal: this.decimal,\n value,\n identifier: this.toString(),\n });\n }\n\n #comparison(method: \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"eqValue\", ...args: InitialisationValueType[]) {\n const decimal = this.#retrievePrecisionDecimal(this, ...args);\n const value = this.getBigIntValue(args[0] || \"0\", decimal);\n const compareToValue = this.getBigIntValue(this, decimal);\n\n switch (method) {\n case \"gt\":\n return compareToValue > value;\n case \"gte\":\n return compareToValue >= value;\n case \"lt\":\n return compareToValue < value;\n case \"lte\":\n return compareToValue <= value;\n case \"eqValue\":\n return compareToValue === value;\n }\n }\n\n #setValue(value: InitialisationValueType) {\n const safeValue = toSafeValue(value) || \"0\";\n this.bigIntValue = this.#toBigInt(safeValue);\n }\n\n #retrievePrecisionDecimal(...args: InitialisationValueType[]) {\n const decimals = args\n .map((arg) => {\n const isObject = typeof arg === \"object\";\n const value = isObject\n ? arg.decimal || decimalFromMultiplier(arg.decimalMultiplier)\n : getFloatDecimals(toSafeValue(arg));\n\n return value;\n })\n .filter(Boolean) as number[];\n\n return Math.max(...decimals, DEFAULT_DECIMAL);\n }\n\n #toBigInt(value: string, decimal?: number) {\n const multiplier = decimal ? toMultiplier(decimal) : this.decimalMultiplier;\n const padDecimal = decimalFromMultiplier(multiplier);\n const [integerPart = \"\", decimalPart = \"\"] = value.split(\".\");\n\n return BigInt(`${integerPart}${decimalPart.padEnd(padDecimal, \"0\")}`);\n }\n}\n\nconst numberFormatter = Intl.NumberFormat(\"fullwide\", {\n useGrouping: false,\n maximumFractionDigits: 20,\n});\n\nfunction toSafeValue(value: InitialisationValueType) {\n const parsedValue =\n typeof value === \"number\" ? numberFormatter.format(value) : getStringValue(value);\n const splitValue = `${parsedValue}`.replaceAll(\",\", \".\").split(\".\");\n\n return splitValue.length > 1\n ? `${splitValue.slice(0, -1).join(\"\")}.${splitValue.at(-1)}`\n : splitValue[0] || \"0\";\n}\n\nfunction getFloatDecimals(value: string) {\n const decimals = value.split(\".\")[1]?.length || 0;\n return Math.max(decimals, DEFAULT_DECIMAL);\n}\n\nfunction getStringValue(param: SKBigIntParams) {\n return typeof param === \"object\"\n ? \"getValue\" in param\n ? param.getValue(\"string\")\n : param.value\n : param;\n}\n",
|
|
18
18
|
"import {\n type CommonAssetString,\n CommonAssetStrings,\n getAssetType,\n getCommonAssetInfo,\n getDecimal,\n isGasAsset,\n} from \"../helpers/asset\";\nimport { warnOnce } from \"../helpers/others\";\nimport { validateIdentifier } from \"../helpers/validators\";\nimport { BaseDecimal, Chain, type ChainId, ChainToChainId } from \"../types/chains\";\nimport type { TokenNames, TokenTax } from \"../types/tokens\";\n\nimport type { NumberPrimitives } from \"./bigIntArithmetics\";\nimport { BigIntArithmetics, formatBigIntToSafeValue } from \"./bigIntArithmetics\";\nimport { SwapKitError } from \"./swapKitError\";\nimport type { SwapKitValueType } from \"./swapKitNumber\";\n\nconst staticTokensMap = new Map<\n TokenNames,\n { tax?: TokenTax; decimal: number; identifier: string }\n>();\n\ntype ConditionalAssetValueReturn<T extends { asyncTokenLookup?: boolean }> =\n T[\"asyncTokenLookup\"] extends true ? Promise<AssetValue> : AssetValue;\n\ntype AssetIdentifier =\n | { asset: CommonAssetString }\n | { asset: TokenNames }\n | { asset: string }\n | { chain: Chain };\n\ntype AssetValueFromParams = AssetIdentifier & {\n value?: NumberPrimitives | SwapKitValueType;\n fromBaseDecimal?: number;\n asyncTokenLookup?: boolean;\n};\n\nexport class AssetValue extends BigIntArithmetics {\n address?: string;\n chain: Chain;\n isGasAsset = false;\n isSynthetic = false;\n isTradeAsset = false;\n symbol: string;\n tax?: TokenTax;\n ticker: string;\n type: ReturnType<typeof getAssetType>;\n chainId: ChainId;\n\n constructor({\n value,\n decimal,\n tax,\n chain,\n symbol,\n identifier,\n }: { decimal: number; value: SwapKitValueType; tax?: TokenTax } & (\n | { chain: Chain; symbol: string; identifier?: never }\n | { identifier: string; chain?: never; symbol?: never }\n )) {\n super(typeof value === \"object\" ? value : { decimal, value });\n\n const assetInfo = getAssetInfo(identifier || `${chain}.${symbol}`);\n\n this.type = getAssetType(assetInfo);\n this.tax = tax;\n this.chain = assetInfo.chain;\n this.ticker = assetInfo.ticker;\n this.symbol = assetInfo.symbol;\n this.address = assetInfo.address;\n this.isSynthetic = assetInfo.isSynthetic;\n this.isTradeAsset = assetInfo.isTradeAsset;\n this.isGasAsset = assetInfo.isGasAsset;\n this.chainId = ChainToChainId[assetInfo.chain];\n }\n\n toString({ includeSynthProtocol }: { includeSynthProtocol?: boolean } = {}) {\n return (this.isSynthetic || this.isTradeAsset) && !includeSynthProtocol\n ? this.symbol\n : `${this.chain}.${this.symbol}`;\n }\n\n toUrl() {\n return this.isSynthetic\n ? `${this.chain}.${this.symbol.replace(\"/\", \".\")}`\n : this.isTradeAsset\n ? `${this.chain}.${this.symbol.replace(\"~\", \"..\")}`\n : this.toString();\n }\n\n eqAsset({ chain, symbol }: { chain: Chain; symbol: string }) {\n return this.chain === chain && this.symbol === symbol;\n }\n\n eq(assetValue: AssetValue) {\n return this.eqAsset(assetValue) && this.eqValue(assetValue);\n }\n\n // THOR.RUNE\n // THOR.ETH.ETH\n // ETH.THOR-0x1234567890\n static fromUrl(urlAsset: string, value: NumberPrimitives = 0) {\n const [chain, ticker, symbol] = urlAsset.split(\".\");\n if (!(chain && ticker)) {\n throw new SwapKitError({\n errorKey: \"helpers_invalid_asset_url\",\n info: { urlAsset },\n });\n }\n\n const asset = chain === Chain.THORChain && symbol ? `${chain}.${ticker}/${symbol}` : urlAsset;\n\n return AssetValue.from({ asset, value });\n }\n\n static from<T extends {}>({\n value = 0,\n fromBaseDecimal,\n asyncTokenLookup,\n ...fromAssetOrChain\n }: T & AssetValueFromParams): ConditionalAssetValueReturn<T> {\n const parsedValue = value instanceof BigIntArithmetics ? value.getValue(\"string\") : value;\n const isFromChain = \"chain\" in fromAssetOrChain;\n const assetOrChain = isFromChain ? fromAssetOrChain.chain : fromAssetOrChain.asset;\n\n const isFromCommonAssetOrChain =\n isFromChain ||\n CommonAssetStrings.includes(assetOrChain as (typeof CommonAssetStrings)[number]);\n\n const { identifier: unsafeIdentifier, decimal: commonAssetDecimal } = isFromCommonAssetOrChain\n ? getCommonAssetInfo(assetOrChain as CommonAssetString)\n : { identifier: assetOrChain, decimal: undefined };\n\n const { chain, isSynthetic, isTradeAsset } = getAssetInfo(unsafeIdentifier);\n const token = staticTokensMap.get(\n chain === Chain.Solana\n ? (unsafeIdentifier as TokenNames)\n : (unsafeIdentifier.toUpperCase() as TokenNames),\n );\n const tokenDecimal = token?.decimal || commonAssetDecimal;\n\n warnOnce(\n !(asyncTokenLookup || tokenDecimal),\n `Couldn't find static decimal for ${unsafeIdentifier} (Using default ${BaseDecimal[chain]} decimal as fallback).\nThis can result in incorrect calculations and mess with amount sent on transactions.\nYou can load static assets by installing @swapkit/tokens package and calling AssetValue.loadStaticAssets()\nor by passing asyncTokenLookup: true to the from() function, which will make it async and return a promise.`,\n );\n\n const { decimal, identifier, tax } = token || {\n decimal: tokenDecimal || BaseDecimal[chain],\n identifier: unsafeIdentifier,\n };\n\n const adjustedValue = fromBaseDecimal\n ? safeValue(BigInt(parsedValue), fromBaseDecimal)\n : safeValue(parsedValue, decimal);\n\n const assetValue = asyncTokenLookup\n ? createAssetValue(identifier, fromBaseDecimal ? adjustedValue : parsedValue)\n : isSynthetic || isTradeAsset\n ? createSyntheticAssetValue(identifier, adjustedValue)\n : new AssetValue({ tax, decimal, identifier, value: adjustedValue });\n\n return assetValue as ConditionalAssetValueReturn<T>;\n }\n\n static loadStaticAssets() {\n return new Promise<{ ok: true } | { ok: false; message: string; error: any }>(\n (resolve, reject) => {\n try {\n import(\"@swapkit/tokens\").then((tokenPackages) => {\n for (const tokenList of Object.values(tokenPackages)) {\n for (const { identifier, chain, ...rest } of tokenList.tokens) {\n staticTokensMap.set(\n chain !== \"SOL\" ? (identifier.toUpperCase() as TokenNames) : identifier,\n {\n identifier,\n decimal: \"decimals\" in rest ? rest.decimals : BaseDecimal[chain as Chain],\n },\n );\n }\n }\n\n resolve({ ok: true });\n });\n } catch (error) {\n console.error(error);\n reject({\n ok: false,\n error,\n message:\n \"Couldn't load static assets. Ensure you have installed @swapkit/tokens package\",\n });\n }\n },\n );\n }\n\n /**\n * @deprecated use AssetValue.from({ asset, value, asyncTokenLookup: true })\n */\n static fromString(asset: string, value: NumberPrimitives = 0) {\n return AssetValue.from({ asset, value, asyncTokenLookup: true });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value, asyncTokenLookup: true })\n */\n static fromIdentifier(\n asset: `${Chain}.${string}` | `${Chain}/${string}` | TokenNames,\n value: NumberPrimitives = 0,\n ) {\n return AssetValue.from({ asset: asset as TokenNames, value, asyncTokenLookup: true });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value })\n */\n static fromStringSync(asset: string, value: NumberPrimitives = 0) {\n return AssetValue.from({ asset, value });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value, fromBaseDecimal, asyncTokenLookup: true })\n */\n static fromStringWithBase(\n asset: string,\n value: string | bigint = 0n,\n fromBaseDecimal: number = BaseDecimal.THOR,\n ) {\n return AssetValue.from({ asyncTokenLookup: true, asset, value, fromBaseDecimal });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value, fromBaseDecimal, asyncTokenLookup: true })\n */\n static fromStringWithBaseSync(\n asset: string,\n value: string | bigint = 0n,\n fromBaseDecimal: number = BaseDecimal.THOR,\n ) {\n return AssetValue.from({ asset, value, fromBaseDecimal });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value })\n */\n static fromIdentifierSync(asset: TokenNames, value: NumberPrimitives = 0) {\n return AssetValue.from({ asset, value });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value }) or AssetValue.from({ chain, value })\n */\n static fromChainOrSignature(assetOrChain: CommonAssetString, value: NumberPrimitives = 0) {\n if (Object.values(Chain).includes(assetOrChain as Chain)) {\n return AssetValue.from({ chain: assetOrChain as Chain, value });\n }\n return AssetValue.from({ asset: assetOrChain, value });\n }\n}\n\nexport function getMinAmountByChain(chain: Chain) {\n const asset = AssetValue.from({ chain });\n\n switch (chain) {\n case Chain.Bitcoin:\n case Chain.Litecoin:\n case Chain.BitcoinCash:\n case Chain.Dash:\n return asset.set(0.00010001);\n\n case Chain.Dogecoin:\n return asset.set(1.00000001);\n\n case Chain.Avalanche:\n case Chain.Ethereum:\n case Chain.Arbitrum:\n case Chain.BinanceSmartChain:\n return asset.set(0.00000001);\n\n case Chain.THORChain:\n case Chain.Maya:\n return asset.set(0);\n\n case Chain.Cosmos:\n case Chain.Kujira:\n return asset.set(0.000001);\n\n default:\n return asset.set(0.00000001);\n }\n}\n\nasync function createAssetValue(identifier: string, value: NumberPrimitives = 0) {\n validateIdentifier(identifier);\n\n const isCaseSensitiveChain = identifier.includes(\"SOL.\");\n\n const modifiedIdentifier = isCaseSensitiveChain\n ? (identifier as TokenNames)\n : (identifier.toUpperCase() as TokenNames);\n\n const staticToken = staticTokensMap.get(modifiedIdentifier);\n const decimal = staticToken?.decimal || (await getDecimal(getAssetInfo(identifier)));\n if (!staticToken) {\n staticTokensMap.set(modifiedIdentifier, { identifier, decimal });\n }\n\n return new AssetValue({ decimal, value: safeValue(value, decimal), identifier });\n}\n\nfunction createSyntheticAssetValue(identifier: string, value: NumberPrimitives = 0) {\n const chain = identifier.includes(\".\")\n ? (identifier.split(\".\")?.[0]?.toUpperCase() as Chain)\n : undefined;\n const isMayaOrThor = chain ? [Chain.Maya, Chain.THORChain].includes(chain) : false;\n\n const assetSeperator = identifier.slice(0, 14).includes(\"~\") ? \"~\" : \"/\";\n\n const [synthChain, symbol] = isMayaOrThor\n ? identifier.split(\".\").slice(1).join().split(assetSeperator)\n : identifier.split(assetSeperator);\n\n if (!(synthChain && symbol)) {\n throw new SwapKitError({\n errorKey: \"helpers_invalid_asset_identifier\",\n info: { identifier },\n });\n }\n\n return new AssetValue({\n decimal: 8,\n value: safeValue(value, 8),\n identifier: `${chain || Chain.THORChain}.${synthChain}${assetSeperator}${symbol}`,\n });\n}\n\nfunction safeValue(value: NumberPrimitives, decimal: number) {\n return typeof value === \"bigint\"\n ? formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal })\n : value;\n}\n\n// TODO refactor & split into smaller functions\nfunction getAssetInfo(identifier: string) {\n const isSynthetic = identifier.slice(0, 14).includes(\"/\");\n const isTradeAsset = identifier.slice(0, 14).includes(\"~\");\n const assetSeperator = isTradeAsset ? \"~\" : \"/\";\n\n const isThorchain = identifier.split(\".\")?.[0]?.toUpperCase() === Chain.THORChain;\n const isMaya = identifier.split(\".\")?.[0]?.toUpperCase() === Chain.Maya;\n\n const [synthChain, synthSymbol = \"\"] =\n isThorchain || isMaya\n ? identifier.split(\".\").slice(1).join().split(assetSeperator)\n : identifier.split(assetSeperator);\n\n if ((isSynthetic || isTradeAsset) && !(synthChain && synthSymbol)) {\n throw new SwapKitError({\n errorKey: \"helpers_invalid_asset_identifier\",\n info: { identifier },\n });\n }\n\n const adjustedIdentifier =\n identifier.includes(\".\") && !isSynthetic && !isTradeAsset\n ? identifier\n : `${isMaya ? Chain.Maya : Chain.THORChain}.${synthSymbol}`;\n\n const [chain, ...rest] = adjustedIdentifier.split(\".\") as [Chain, string];\n\n const symbol = isSynthetic || isTradeAsset ? synthSymbol : rest.join(\".\");\n const splitSymbol = symbol.split(\"-\");\n const ticker = (\n splitSymbol.length === 1 ? splitSymbol[0] : splitSymbol.slice(0, -1).join(\"-\")\n ) as string;\n const unformattedAddress =\n splitSymbol.length === 1 ? undefined : splitSymbol[splitSymbol.length - 1];\n\n const address = chain === Chain.Solana ? unformattedAddress : unformattedAddress?.toLowerCase();\n\n return {\n address,\n chain,\n isGasAsset: isGasAsset({ chain, symbol }),\n isSynthetic,\n isTradeAsset,\n ticker,\n symbol:\n (isSynthetic || isTradeAsset ? `${synthChain}${assetSeperator}` : \"\") +\n (address ? `${ticker}-${address ?? \"\"}` : symbol),\n };\n}\n",
|
|
19
19
|
"import { AssetValue } from \"../modules/assetValue\";\nimport { RequestClient } from \"../modules/requestClient\";\nimport { BaseDecimal, Chain, ChainToRPC, type EVMChain, EVMChains } from \"../types/chains\";\nimport type { RadixCoreStateResourceDTO } from \"../types/radix\";\nimport type { TokenNames } from \"../types/tokens\";\n\nconst getDecimalMethodHex = \"0x313ce567\";\n\nexport type CommonAssetString = (typeof CommonAssetStrings)[number] | Chain;\n\nexport type ConditionalAssetValueReturn<T extends boolean> = T extends true\n ? Promise<AssetValue[]>\n : AssetValue[];\n\nexport const CommonAssetStrings = [\n `${Chain.Maya}.MAYA`,\n `${Chain.Ethereum}.THOR`,\n `${Chain.Ethereum}.vTHOR`,\n `${Chain.Kujira}.USK`,\n] as const;\n\nconst getContractDecimals = async ({ chain, to }: { chain: EVMChain; to: string }) => {\n try {\n const { result } = await RequestClient.post<{ result: string }>(ChainToRPC[chain], {\n headers: {\n accept: \"*/*\",\n \"content-type\": \"application/json\",\n \"cache-control\": \"no-cache\",\n },\n body: JSON.stringify({\n id: 44,\n jsonrpc: \"2.0\",\n method: \"eth_call\",\n params: [{ to: to.toLowerCase(), data: getDecimalMethodHex }, \"latest\"],\n }),\n });\n\n return Number.parseInt(BigInt(result || BaseDecimal[chain]).toString());\n } catch (error) {\n console.error(error);\n return BaseDecimal[chain];\n }\n};\n\nconst getRadixResourceDecimals = async ({ symbol }: { symbol: string }) => {\n try {\n const resourceAddress = symbol.split(\"-\")[1]?.toLowerCase();\n\n const { manager } = await RequestClient.post<RadixCoreStateResourceDTO>(\n `${ChainToRPC[Chain.Radix]}/state/resource`,\n {\n headers: {\n Accept: \"*/*\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n network: \"mainnet\",\n resource_address: resourceAddress,\n }),\n },\n );\n\n return manager.divisibility.value.divisibility;\n } catch (error) {\n console.error(error);\n return BaseDecimal[Chain.Radix];\n }\n};\n\nconst getETHAssetDecimal = (symbol: string) => {\n if (symbol === Chain.Ethereum) return BaseDecimal.ETH;\n const splitSymbol = symbol.split(\"-\");\n const address =\n splitSymbol.length === 1 ? undefined : splitSymbol[splitSymbol.length - 1]?.toLowerCase();\n\n return address?.startsWith(\"0x\")\n ? getContractDecimals({ chain: Chain.Ethereum, to: address })\n : BaseDecimal.ETH;\n};\n\nconst getAVAXAssetDecimal = (symbol: string) => {\n const splitSymbol = symbol.split(\"-\");\n const address = splitSymbol.length === 1 ? undefined : splitSymbol[splitSymbol.length - 1];\n\n return address?.startsWith(\"0x\")\n ? getContractDecimals({ chain: Chain.Avalanche, to: address.toLowerCase() })\n : BaseDecimal.AVAX;\n};\n\nconst getBSCAssetDecimal = (symbol: string) => {\n if (symbol === Chain.BinanceSmartChain) return BaseDecimal.BSC;\n\n return BaseDecimal.BSC;\n};\n\nconst getRadixAssetDecimal = (symbol: string) => {\n if (symbol === Chain.Radix) return BaseDecimal.XRD;\n\n return getRadixResourceDecimals({ symbol });\n};\n\nexport const getDecimal = ({ chain, symbol }: { chain: Chain; symbol: string }) => {\n switch (chain) {\n case Chain.Ethereum:\n return getETHAssetDecimal(symbol);\n case Chain.Avalanche:\n return getAVAXAssetDecimal(symbol);\n case Chain.BinanceSmartChain:\n return getBSCAssetDecimal(symbol);\n case Chain.Radix:\n return getRadixAssetDecimal(symbol);\n default:\n return BaseDecimal[chain];\n }\n};\n\nexport const getGasAsset = ({ chain }: { chain: Chain }) => {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Base:\n case Chain.Optimism:\n return AssetValue.from({ asset: `${chain}.ETH` });\n case Chain.Maya:\n return AssetValue.from({ asset: `${chain}.CACAO` });\n case Chain.Cosmos:\n return AssetValue.from({ asset: `${chain}.ATOM` });\n case Chain.BinanceSmartChain:\n return AssetValue.from({ asset: `${chain}.BNB` });\n case Chain.THORChain:\n return AssetValue.from({ asset: `${chain}.RUNE` });\n\n default:\n return AssetValue.from({ asset: `${chain}.${chain}` });\n }\n};\n\nexport const isGasAsset = ({ chain, symbol }: { chain: Chain; symbol: string }) => {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Base:\n case Chain.Optimism:\n return symbol === \"ETH\";\n case Chain.Maya:\n return symbol === \"CACAO\";\n case Chain.Cosmos:\n return symbol === \"ATOM\";\n case Chain.BinanceSmartChain:\n return symbol === \"BNB\";\n case Chain.THORChain:\n return symbol === \"RUNE\";\n\n default:\n return symbol === chain;\n }\n};\n\nexport const getCommonAssetInfo = (assetString: CommonAssetString) => {\n switch (assetString) {\n case Chain.Arbitrum:\n case Chain.Base:\n case Chain.Optimism:\n return { identifier: `${assetString}.ETH`, decimal: BaseDecimal[assetString] };\n\n case `${Chain.Ethereum}.THOR`:\n return { identifier: \"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044\", decimal: 18 };\n case `${Chain.Ethereum}.vTHOR`:\n return { identifier: \"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d\", decimal: 18 };\n case Chain.Cosmos:\n return { identifier: `${assetString}.ATOM`, decimal: BaseDecimal[assetString] };\n case Chain.THORChain:\n return { identifier: `${assetString}.RUNE`, decimal: BaseDecimal[assetString] };\n case Chain.BinanceSmartChain:\n return { identifier: `${assetString}.BNB`, decimal: BaseDecimal[assetString] };\n case Chain.Maya:\n return { identifier: `${assetString}.CACAO`, decimal: 10 };\n case Chain.Radix:\n return { identifier: `${Chain.Radix}.XRD`, decimal: BaseDecimal[assetString] };\n\n case `${Chain.Maya}.MAYA`:\n return { identifier: assetString, decimal: 4 };\n case `${Chain.Kujira}.USK`:\n return { identifier: assetString, decimal: 6 };\n\n default:\n return { identifier: `${assetString}.${assetString}`, decimal: BaseDecimal[assetString] };\n }\n};\n\nexport const getAssetType = ({ chain, symbol }: { chain: Chain; symbol: string }) => {\n if (symbol.includes(\"/\")) return \"Synth\";\n\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Optimism:\n case Chain.Base:\n return symbol === Chain.Ethereum ? \"Native\" : chain;\n\n case Chain.Cosmos:\n return symbol === \"ATOM\" ? \"Native\" : chain;\n case Chain.BinanceSmartChain:\n return symbol === \"BNB\" ? \"Native\" : chain;\n case Chain.Maya:\n return symbol === \"CACAO\" ? \"Native\" : chain;\n case Chain.THORChain:\n return symbol === \"RUNE\" ? \"Native\" : chain;\n\n default:\n return symbol === chain ? \"Native\" : chain;\n }\n};\n\nexport const assetFromString = (assetString: string) => {\n const [chain, ...symbolArray] = assetString.split(\".\") as [Chain, ...(string | undefined)[]];\n const synth = assetString.includes(\"/\");\n const symbol = symbolArray.join(\".\");\n const splitSymbol = symbol?.split(\"-\");\n const ticker = splitSymbol?.length\n ? splitSymbol.length === 1\n ? splitSymbol[0]\n : splitSymbol.slice(0, -1).join(\"-\")\n : undefined;\n\n return { chain, symbol, ticker, synth };\n};\n\nconst potentialScamRegex = new RegExp(\n /(.)\\1{6}|\\.ORG|\\.NET|\\.FINANCE|\\.COM|WWW|HTTP|\\\\\\\\|\\/\\/|[\\s$%:[\\]]/,\n \"gmi\",\n);\n\nconst evmAssetHasAddress = (assetString: string) => {\n const [chain, symbol] = assetString.split(\".\") as [EVMChain, string];\n if (!EVMChains.includes(chain as EVMChain)) return true;\n const splitSymbol = symbol.split(\"-\");\n const address = splitSymbol.length === 1 ? undefined : splitSymbol[splitSymbol.length - 1];\n\n return isGasAsset({ chain: chain as Chain, symbol }) || !!address;\n};\n\nexport const filterAssets = (\n tokens: {\n value: string;\n decimal: number;\n chain: Chain;\n symbol: string;\n }[],\n) =>\n tokens.filter(({ chain, value, symbol }) => {\n const assetString = `${chain}.${symbol}`;\n\n return (\n !potentialScamRegex.test(assetString) && evmAssetHasAddress(assetString) && value !== \"0\"\n );\n });\n\nexport async function findAssetBy(\n params:\n | { chain: EVMChain | Chain.Radix; contract: string }\n | { identifier: `${Chain}.${string}` },\n) {\n const tokenPackages = await import(\"@swapkit/tokens\");\n\n for (const tokenList of Object.values(tokenPackages)) {\n for (const { identifier, chain: tokenChain, ...rest } of tokenList.tokens) {\n if (\"identifier\" in params && identifier === params.identifier) {\n return identifier as TokenNames;\n }\n\n if (\n \"address\" in rest &&\n \"chain\" in params &&\n tokenChain === params.chain &&\n rest.address.toLowerCase() === params.contract.toLowerCase()\n )\n return identifier as TokenNames;\n }\n }\n\n return;\n}\n",
|
|
20
|
-
"import {\n Chain,\n type DerivationPathArray,\n type EVMChain,\n EVMChains,\n NetworkDerivationPath,\n} from \"../types\";\n\ntype Params = {\n chain: Chain;\n index: number;\n addressIndex?: number;\n type?: \"legacy\" | \"ledgerLive\" | \"nativeSegwitMiddleAccount\" | \"segwit\";\n};\n\
|
|
20
|
+
"import {\n Chain,\n type DerivationPathArray,\n type EVMChain,\n EVMChains,\n NetworkDerivationPath,\n} from \"../types\";\n\ntype Params = {\n chain: Chain;\n index: number;\n addressIndex?: number;\n type?: \"legacy\" | \"ledgerLive\" | \"nativeSegwitMiddleAccount\" | \"segwit\" | \"account\";\n};\n\nexport const updatedLastIndex = (path: DerivationPathArray, index: number) => {\n const newPath = [...path.slice(0, path.length - 1), index];\n return newPath as DerivationPathArray;\n};\n\nexport function derivationPathToString([network, chainId, account, change, index]:\n | [number, number, number, number, number?]\n | DerivationPathArray) {\n const shortPath = typeof index !== \"number\";\n\n return `m/${network}'/${chainId}'/${account}'/${change}${shortPath ? \"\" : `/${index}`}`;\n}\n\n// TODO @towan - sort this out and make it more readable\nexport function getDerivationPathFor({ chain, index, addressIndex = 0, type }: Params) {\n if (EVMChains.includes(chain as EVMChain)) {\n if (type && [\"legacy\", \"account\"].includes(type))\n return [44, 60, 0, index] as DerivationPathArray;\n if (type === \"ledgerLive\") return [44, 60, index, 0, addressIndex] as DerivationPathArray;\n return updatedLastIndex(NetworkDerivationPath[chain], index);\n }\n\n if (chain === Chain.Solana) {\n if (type === \"account\") return [44, 501, 0, index] as DerivationPathArray;\n return updatedLastIndex(NetworkDerivationPath[chain], index);\n }\n\n const chainId = chain === Chain.Litecoin ? 2 : 0;\n\n switch (type) {\n case \"nativeSegwitMiddleAccount\":\n return [84, chainId, index, 0, addressIndex] as DerivationPathArray;\n case \"segwit\":\n return [49, chainId, 0, 0, index] as DerivationPathArray;\n case \"legacy\":\n return [44, chainId, 0, 0, index] as DerivationPathArray;\n default:\n return updatedLastIndex(NetworkDerivationPath[chain], index);\n }\n}\n\nexport function getWalletFormatFor(path: string) {\n const [_, purpose, chainId] = path.split(\"/\").map((p) => Number.parseInt(p, 10));\n\n if (chainId === 145) \"cashaddr\";\n\n switch (purpose) {\n case 44:\n return \"legacy\";\n case 49:\n return \"p2sh\";\n default:\n return \"bech32\";\n }\n}\n",
|
|
21
21
|
"import { SwapKitNumber } from \"../index\";\nimport { BaseDecimal } from \"../types/chains\";\n\ntype ShareParams<T extends {}> = T & {\n liquidityUnits: string;\n poolUnits: string;\n};\n\ntype PoolParams = {\n runeAmount: string;\n assetAmount: string;\n runeDepth: string;\n assetDepth: string;\n};\n\n/**\n * Ref: https://gitlab.com/thorchain/thornode/-/issues/657\n * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3\n * s = stakeUnits for member (after factoring in withdrawBasisPoints)\n * T = totalPoolUnits for pool\n * A = assetDepth to be withdrawn\n *\n * Formula:\n * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3\n * (part1 * (part2 - part3 + part4)) / part5\n */\nexport function getAsymmetricRuneShare({\n liquidityUnits,\n poolUnits,\n runeDepth,\n}: ShareParams<{ runeDepth: string }>) {\n const s = toTCSwapKitNumber(liquidityUnits);\n const T = toTCSwapKitNumber(poolUnits);\n const A = toTCSwapKitNumber(runeDepth);\n\n const part1 = s.mul(A);\n const part2 = T.mul(T).mul(2);\n const part3 = T.mul(s).mul(2);\n const part4 = s.mul(s);\n const part5 = T.mul(T).mul(T);\n\n const numerator = part1.mul(part2.sub(part3).add(part4));\n\n return numerator.div(part5);\n}\n\nexport function getAsymmetricAssetShare({\n liquidityUnits,\n poolUnits,\n assetDepth,\n}: ShareParams<{ assetDepth: string }>) {\n const s = toTCSwapKitNumber(liquidityUnits);\n const T = toTCSwapKitNumber(poolUnits);\n const A = toTCSwapKitNumber(assetDepth);\n\n const part1 = s.mul(A);\n const part2 = T.mul(T).mul(2);\n const part3 = T.mul(s).mul(2);\n const part4 = s.mul(s);\n const numerator = part1.mul(part2.sub(part3).add(part4));\n const part5 = T.mul(T).mul(T);\n\n return numerator.div(part5);\n}\n\nexport function getAsymmetricRuneWithdrawAmount({\n percent,\n runeDepth,\n liquidityUnits,\n poolUnits,\n}: ShareParams<{ percent: number; runeDepth: string }>) {\n return getAsymmetricRuneShare({ runeDepth, liquidityUnits, poolUnits }).mul(percent);\n}\n\nexport function getAsymmetricAssetWithdrawAmount({\n percent,\n assetDepth,\n liquidityUnits,\n poolUnits,\n}: ShareParams<{ percent: number; assetDepth: string }>) {\n return getAsymmetricAssetShare({ assetDepth, liquidityUnits, poolUnits }).mul(percent);\n}\n\nfunction toTCSwapKitNumber(value: string) {\n return SwapKitNumber.fromBigInt(BigInt(value), BaseDecimal.THOR);\n}\n\nexport function getSymmetricPoolShare({\n liquidityUnits,\n poolUnits,\n runeDepth,\n assetDepth,\n}: ShareParams<{\n runeDepth: string;\n assetDepth: string;\n}>) {\n return {\n assetAmount: toTCSwapKitNumber(assetDepth).mul(liquidityUnits).div(poolUnits),\n runeAmount: toTCSwapKitNumber(runeDepth).mul(liquidityUnits).div(poolUnits),\n };\n}\n\nexport function getSymmetricWithdraw({\n liquidityUnits,\n poolUnits,\n runeDepth,\n assetDepth,\n percent,\n}: ShareParams<{\n runeDepth: string;\n assetDepth: string;\n percent: number;\n}>) {\n return Object.fromEntries(\n Object.entries(getSymmetricPoolShare({ liquidityUnits, poolUnits, runeDepth, assetDepth })).map(\n ([name, value]) => [name, value.mul(percent)],\n ),\n );\n}\n\nexport function getEstimatedPoolShare({\n runeDepth,\n poolUnits,\n assetDepth,\n liquidityUnits,\n runeAmount,\n assetAmount,\n}: ShareParams<{\n runeAmount: string;\n assetAmount: string;\n runeDepth: string;\n assetDepth: string;\n}>) {\n const R = new SwapKitNumber({ value: runeDepth, decimal: 8 });\n const A = new SwapKitNumber({ value: assetDepth, decimal: 8 });\n const P = new SwapKitNumber({ value: poolUnits, decimal: 8 });\n const runeAddAmount = new SwapKitNumber({ value: runeAmount, decimal: 8 });\n const assetAddAmount = new SwapKitNumber({ value: assetAmount, decimal: 8 });\n\n // liquidityUnits = P * (r*A + a*R + 2*r*a) / (r*A + a*R + 2*R*A)\n const rA = runeAddAmount.mul(A);\n const aR = assetAddAmount.mul(R);\n const ra = runeAddAmount.mul(assetAddAmount);\n const RA = R.mul(A);\n const numerator = P.mul(rA.add(aR.add(ra.mul(2))));\n const denominator = rA.add(aR.add(RA.mul(2)));\n const liquidityUnitsAfterAdd = numerator.div(denominator);\n const estimatedLiquidityUnits = toTCSwapKitNumber(liquidityUnits).add(liquidityUnitsAfterAdd);\n\n if (liquidityUnitsAfterAdd.getBaseValue(\"number\") === 0) {\n return estimatedLiquidityUnits.div(P).getBaseValue(\"number\");\n }\n\n // get pool units after add\n const newPoolUnits = P.add(estimatedLiquidityUnits);\n\n return estimatedLiquidityUnits.div(newPoolUnits).getBaseValue(\"number\");\n}\n\nexport function getLiquiditySlippage({\n runeAmount,\n assetAmount,\n runeDepth,\n assetDepth,\n}: PoolParams) {\n if (runeAmount === \"0\" || assetAmount === \"0\" || runeDepth === \"0\" || assetDepth === \"0\")\n return 0;\n // formula: (t * R - T * r)/ (T*r + R*T)\n const R = toTCSwapKitNumber(runeDepth);\n const T = toTCSwapKitNumber(assetDepth);\n const assetAddAmount = toTCSwapKitNumber(assetAmount);\n const runeAddAmount = toTCSwapKitNumber(runeAmount);\n\n const numerator = assetAddAmount.mul(R).sub(T.mul(runeAddAmount));\n const denominator = T.mul(runeAddAmount).add(R.mul(T));\n\n // set absolute value of percent, no negative allowed\n return Math.abs(numerator.div(denominator).getBaseValue(\"number\"));\n}\n",
|
|
22
22
|
"import { SwapKitError } from \"../modules/swapKitError\";\nimport { Chain } from \"../types/chains\";\nimport { MemoType } from \"../types/sdk\";\n\nexport function getMemoForLeaveAndBond({ type, address }: BondOrLeaveParams) {\n return `${type}:${address}`;\n}\n\nexport function getMemoForUnbond({ address, unbondAmount }: UnbondParams) {\n return `${MemoType.UNBOND}:${address}:${unbondAmount}`;\n}\n\n/**\n * Deposit\n */\nexport function getMemoForRunePoolDeposit(affiliate?: WithAffiliate<{}>) {\n return addAffiliate(MemoType.RUNEPOOL_DEPOSIT, affiliate);\n}\n\nexport function getMemoForSaverDeposit({\n chain,\n symbol,\n ...affiliate\n}: WithAffiliate<{ chain: Chain; symbol: string }>) {\n return addAffiliate(`${MemoType.DEPOSIT}:${chain}/${symbol}`, affiliate);\n}\n\nexport function getMemoForDeposit({\n chain,\n symbol,\n address,\n ...affiliate\n}: WithAffiliate<{\n chain: Chain;\n symbol: string;\n address?: string;\n}>) {\n const poolIdentifier = getPoolIdentifier({ chain, symbol });\n const addressPart = address ? `:${address}:` : \":\";\n\n return addAffiliate(`${MemoType.DEPOSIT}:${poolIdentifier}${addressPart}`, affiliate);\n}\n\n/**\n * Withdraw\n */\nexport function getMemoForSaverWithdraw({\n chain,\n symbol,\n basisPoints,\n}: { chain: Chain; symbol: string; basisPoints: number }) {\n return `${MemoType.WITHDRAW}:${chain}/${symbol}:${basisPoints}`;\n}\n\nexport function getMemoForWithdraw({\n chain,\n symbol,\n ticker,\n basisPoints,\n targetAsset,\n}: WithdrawParams) {\n const shortenedSymbol =\n chain === \"ETH\" && ticker !== \"ETH\" ? `${ticker}-${symbol.slice(-3)}` : symbol;\n const targetPart = targetAsset ? `:${targetAsset}` : \"\";\n\n return `${MemoType.WITHDRAW}:${chain}.${shortenedSymbol}:${basisPoints}${targetPart}`;\n}\n\nexport function getMemoForRunePoolWithdraw({\n basisPoints,\n ...affiliate\n}: WithAffiliate<{ basisPoints: number }>) {\n return addAffiliate(`${MemoType.RUNEPOOL_WITHDRAW}:${basisPoints}`, affiliate);\n}\n\n/**\n * TNS\n */\nexport function getMemoForNameRegister({ name, chain, address, owner }: NameRegisterParams) {\n const baseMemo = `${MemoType.NAME_REGISTER}:${name}:${chain}:${address}`;\n const ownerAssignmentOrChangePart = owner ? `:${owner}` : \"\";\n\n return `${baseMemo}${ownerAssignmentOrChangePart}`;\n}\n\nexport function getMemoForNamePreferredAssetRegister({\n name,\n chain,\n asset,\n payout,\n owner,\n}: PreferredAssetRegisterParams) {\n return `${MemoType.NAME_REGISTER}:${name}:${chain}:${payout}:${owner}:${asset}`;\n}\n\nexport function getMemoForLoan(\n memoType: MemoType.OPEN_LOAN | MemoType.CLOSE_LOAN,\n {\n asset,\n address,\n minAmount,\n ...affiliate\n }: WithAffiliate<{ address: string; asset: string; minAmount?: string }>,\n) {\n const baseMemo = `${memoType}:${asset}:${address}`;\n const minAmountPart = minAmount ? `:${minAmount}` : \"\";\n\n return addAffiliate(`${baseMemo}${minAmountPart}`, affiliate);\n}\n\n/**\n * Internal helpers\n */\nfunction addAffiliate(\n memo: string,\n { affiliateAddress, affiliateBasisPoints }: WithAffiliate<{}> = {},\n) {\n const affiliatedMemo = `${memo}${affiliateAddress ? `:${affiliateAddress}:${affiliateBasisPoints || 0}` : \"\"}`;\n\n return affiliatedMemo.endsWith(\":\") ? affiliatedMemo.slice(0, -1) : affiliatedMemo;\n}\n\nfunction getPoolIdentifier({\n chain,\n symbol,\n}: {\n chain: Chain;\n symbol: string;\n}) {\n switch (chain) {\n case Chain.Bitcoin:\n case Chain.Dogecoin:\n case Chain.Litecoin:\n return chain.slice(0, 1).toLowerCase();\n case Chain.BitcoinCash:\n return \"c\";\n\n default:\n return `${chain}.${symbol}`;\n }\n}\n\ntype WithAffiliate<T extends {}> = T & {\n affiliateAddress?: string;\n affiliateBasisPoints?: number;\n};\n\ntype BondOrLeaveParams = { type: MemoType.BOND | MemoType.LEAVE; address: string };\ntype UnbondParams = { address: string; unbondAmount: number };\ntype NameRegisterParams = { name: string; chain: string; address: string; owner?: string };\ntype PreferredAssetRegisterParams = {\n name: string;\n chain: Chain;\n asset: string;\n payout: string;\n owner: string;\n};\ntype WithdrawParams = {\n chain: Chain;\n symbol: string;\n ticker: string;\n basisPoints: number;\n targetAsset?: string;\n};\n\n/**\n * @deprecated - Use separate functions per each memo type like getMemoForDeposit, getMemoForWithdraw, etc.\n */\nexport const getMemoFor = <T extends MemoType>(memoType: T, options: any) => {\n switch (memoType) {\n case MemoType.LEAVE:\n case MemoType.BOND: {\n return getMemoForLeaveAndBond({ type: memoType, address: options?.address });\n }\n\n case MemoType.UNBOND: {\n return getMemoForUnbond({ address: options?.address, unbondAmount: options?.unbondAmount });\n }\n\n case MemoType.NAME_REGISTER: {\n return getMemoForNameRegister(options);\n }\n\n case MemoType.OPEN_LOAN:\n case MemoType.CLOSE_LOAN: {\n return getMemoForLoan(memoType, options);\n }\n\n case MemoType.DEPOSIT: {\n const { chain, symbol, address, singleSide } = options;\n\n if (singleSide) {\n return getMemoForSaverDeposit({ chain, symbol });\n }\n\n return getMemoForDeposit({ chain, symbol, address });\n }\n\n case MemoType.WITHDRAW: {\n const {\n chain,\n ticker,\n symbol,\n basisPoints,\n targetAssetString: targetAsset,\n singleSide,\n } = options;\n\n if (singleSide) {\n return getMemoForSaverWithdraw({ chain, symbol, basisPoints });\n }\n\n return getMemoForWithdraw({\n chain,\n ticker,\n symbol,\n basisPoints,\n targetAsset,\n });\n }\n\n default:\n throw new SwapKitError({\n errorKey: \"helpers_invalid_memo_type\",\n info: { memoType },\n });\n }\n};\n",
|
|
23
23
|
"import type { BrowserProvider } from \"ethers\";\nimport { SwapKitError } from \"../modules/swapKitError\";\nimport {\n Chain,\n ChainId,\n type EIP6963AnnounceProviderEvent,\n type EIP6963Provider,\n WalletOption,\n} from \"../types\";\n\nexport type EthereumWindowProvider = BrowserProvider & {\n __XDEFI?: boolean;\n isBraveWallet?: boolean;\n isCoinbaseWallet?: boolean;\n isMetaMask?: boolean;\n isOkxWallet?: boolean;\n isKeepKeyWallet?: boolean;\n isTrust?: boolean;\n isTalisman?: boolean;\n on: (event: string, callback?: () => void) => void;\n overrideIsMetaMask?: boolean;\n request: <T = unknown>(args: { method: string; params?: unknown[] }) => Promise<T>;\n selectedProvider?: EthereumWindowProvider;\n};\n\ndeclare const window: {\n ethereum: EthereumWindowProvider;\n trustwallet: EthereumWindowProvider;\n coinbaseWalletExtension: EthereumWindowProvider;\n braveSolana: any;\n} & Window;\n\ntype NetworkParams = {\n chainId: ChainId;\n chainName: string;\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrls: string[];\n blockExplorerUrls: string[];\n};\n\ntype ProviderRequestParams = {\n provider?: BrowserProvider;\n params?: any;\n method:\n | \"wallet_addEthereumChain\"\n | \"wallet_switchEthereumChain\"\n | \"eth_requestAccounts\"\n | \"eth_sendTransaction\"\n | \"eth_signTransaction\";\n};\n\nconst methodsToWrap = [\n \"approve\",\n \"approvedAmount\",\n \"call\",\n \"sendTransaction\",\n \"transfer\",\n \"isApproved\",\n \"approvedAmount\",\n \"EIP1193SendTransaction\",\n \"getFeeData\",\n \"broadcastTransaction\",\n \"estimateCall\",\n \"estimateGasLimit\",\n \"estimateGasPrices\",\n \"createContractTxObject\",\n];\n\nexport const wrapMethodWithNetworkSwitch = <T extends (...args: any[]) => any>(\n func: T,\n provider: BrowserProvider,\n chainId: ChainId,\n) =>\n (async (...args: any[]) => {\n try {\n await switchEVMWalletNetwork(provider, chainId);\n } catch (error) {\n throw new SwapKitError({\n errorKey: \"helpers_failed_to_switch_network\",\n info: { error },\n });\n }\n return func(...args);\n }) as unknown as T;\n\nconst providerRequest = ({ provider, params, method }: ProviderRequestParams) => {\n if (!provider?.send) {\n throw new SwapKitError(\"helpers_not_found_provider\");\n }\n\n const providerParams = params ? (Array.isArray(params) ? params : [params]) : [];\n return provider.send(method, providerParams);\n};\n\nexport const prepareNetworkSwitch = <T extends { [key: string]: (...args: any[]) => any }>({\n toolbox,\n chainId,\n provider = window.ethereum,\n}: {\n toolbox: T;\n chainId: ChainId;\n provider?: BrowserProvider;\n}) => {\n const wrappedMethods = methodsToWrap.reduce((object, methodName) => {\n if (!toolbox[methodName]) return object;\n const method = toolbox[methodName];\n\n if (typeof method !== \"function\") return object;\n\n return {\n // biome-ignore lint/performance/noAccumulatingSpread: This is a valid use case\n ...object,\n [methodName]: wrapMethodWithNetworkSwitch<typeof method>(method, provider, chainId),\n };\n }, {});\n\n return { ...toolbox, ...wrappedMethods };\n};\n\nexport const addEVMWalletNetwork = (provider: BrowserProvider, networkParams: NetworkParams) =>\n providerRequest({ provider, method: \"wallet_addEthereumChain\", params: [networkParams] });\n\nexport const switchEVMWalletNetwork = (provider: BrowserProvider, chainId = ChainId.EthereumHex) =>\n providerRequest({ provider, method: \"wallet_switchEthereumChain\", params: [{ chainId }] });\n\nexport const addAccountsChangedCallback = (callback: () => void) => {\n window.ethereum?.on(\"accountsChanged\", () => callback());\n // @ts-expect-error that should be implemented in xdefi and hooked up via swapkit core\n window.xfi?.ethereum.on(\"accountsChanged\", () => callback());\n};\n\nexport const getETHDefaultWallet = () => {\n const { isTrust, isBraveWallet, __XDEFI, overrideIsMetaMask, selectedProvider } =\n window?.ethereum || {};\n if (isTrust) return WalletOption.TRUSTWALLET_WEB;\n if (isBraveWallet) return WalletOption.BRAVE;\n if (overrideIsMetaMask && selectedProvider?.isCoinbaseWallet) return WalletOption.COINBASE_WEB;\n if (__XDEFI) WalletOption.XDEFI;\n return WalletOption.METAMASK;\n};\n\nexport const isDetected = (walletOption: WalletOption) => {\n return listWeb3EVMWallets().includes(walletOption);\n};\n\nexport const listWeb3EVMWallets = () => {\n const metamaskEnabled = window?.ethereum && !window.ethereum?.isBraveWallet;\n // @ts-ignore that should be implemented in xdefi and hooked up via swapkit core\n const xdefiEnabled = window?.xfi || window?.ethereum?.__XDEFI;\n const braveEnabled = window?.ethereum?.isBraveWallet;\n const trustEnabled = window?.ethereum?.isTrust || window?.trustwallet;\n const coinbaseEnabled =\n (window?.ethereum?.overrideIsMetaMask &&\n window?.ethereum?.selectedProvider?.isCoinbaseWallet) ||\n window?.coinbaseWalletExtension;\n\n const wallets = [];\n if (metamaskEnabled) wallets.push(WalletOption.METAMASK);\n if (xdefiEnabled) wallets.push(WalletOption.XDEFI);\n if (braveEnabled) wallets.push(WalletOption.BRAVE);\n if (trustEnabled) wallets.push(WalletOption.TRUSTWALLET_WEB);\n if (coinbaseEnabled) wallets.push(WalletOption.COINBASE_WEB);\n if (okxMobileEnabled()) wallets.push(WalletOption.OKX_MOBILE);\n\n return wallets;\n};\n\nexport function ensureEVMApiKeys({\n chain,\n covalentApiKey,\n ethplorerApiKey,\n}: { chain: Chain; covalentApiKey?: string; ethplorerApiKey?: string }) {\n const missingKey =\n chain !== Chain.Ethereum && !covalentApiKey\n ? \"covalentApiKey\"\n : ethplorerApiKey\n ? undefined\n : \"ethplorerApiKey\";\n\n if (missingKey) {\n throw new SwapKitError({ errorKey: \"wallet_missing_api_key\", info: { missingKey } });\n }\n\n return { covalentApiKey: covalentApiKey as string, ethplorerApiKey: ethplorerApiKey as string };\n}\n\nexport function getEIP6963Wallets() {\n const providers: EIP6963Provider[] = [];\n\n function onAnnouncement(event: EIP6963AnnounceProviderEvent) {\n if (providers.map((p) => p.info.uuid).includes(event.detail.info.uuid)) return;\n providers.push(event.detail);\n }\n\n window.addEventListener(\"eip6963:announceProvider\", onAnnouncement);\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n function removeEIP6963EventListener() {\n window.removeEventListener(\"eip6963:announceProvider\", onAnnouncement);\n }\n\n return { providers, removeEIP6963EventListener };\n}\n\nexport const okxMobileEnabled = () => {\n const ua = navigator.userAgent;\n const isIOS = /iphone|ipad|ipod|ios/i.test(ua);\n const isAndroid = /android|XiaoMi|MiuiBrowser/i.test(ua);\n const isMobile = isIOS || isAndroid;\n const isOKApp = /OKApp/i.test(ua);\n\n return isMobile && isOKApp;\n};\n\nexport const isWeb3Detected = () => typeof window.ethereum !== \"undefined\";\n",
|
|
24
24
|
"import { BigIntArithmetics, formatBigIntToSafeValue } from \"./bigIntArithmetics\";\n\nexport type SwapKitValueType = BigIntArithmetics | string | number;\n\nexport class SwapKitNumber extends BigIntArithmetics {\n eq(value: SwapKitValueType) {\n return this.eqValue(value);\n }\n\n static fromBigInt(value: bigint, decimal?: number) {\n return new SwapKitNumber({\n decimal,\n value: formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal }),\n });\n }\n}\n"
|
|
25
25
|
],
|
|
26
|
-
"mappings": "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",
|
|
27
|
-
"debugId": "
|
|
26
|
+
"mappings": "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",
|
|
27
|
+
"debugId": "8CA4B547D605105F64756E2164756E21",
|
|
28
28
|
"names": []
|
|
29
29
|
}
|
package/package.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"@swapkit/tokens": "1.8.3"
|
|
7
7
|
},
|
|
8
8
|
"devDependencies": {
|
|
9
|
-
"@swapkit/toolbox-cosmos": "1.
|
|
10
|
-
"@swapkit/toolbox-evm": "1.
|
|
11
|
-
"@swapkit/toolbox-radix": "1.2.
|
|
12
|
-
"@swapkit/toolbox-solana": "1.1.
|
|
13
|
-
"@swapkit/toolbox-substrate": "1.2.
|
|
14
|
-
"@swapkit/toolbox-utxo": "1.1.
|
|
9
|
+
"@swapkit/toolbox-cosmos": "1.4.1",
|
|
10
|
+
"@swapkit/toolbox-evm": "1.6.1",
|
|
11
|
+
"@swapkit/toolbox-radix": "1.2.13",
|
|
12
|
+
"@swapkit/toolbox-solana": "1.1.17",
|
|
13
|
+
"@swapkit/toolbox-substrate": "1.2.21",
|
|
14
|
+
"@swapkit/toolbox-utxo": "1.1.26"
|
|
15
15
|
},
|
|
16
16
|
"files": [
|
|
17
17
|
"src/",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
},
|
|
36
36
|
"type": "module",
|
|
37
37
|
"types": "./src/index.ts",
|
|
38
|
-
"version": "1.
|
|
38
|
+
"version": "1.14.0"
|
|
39
39
|
}
|
|
@@ -55,122 +55,101 @@ describe("getDecimal", () => {
|
|
|
55
55
|
|
|
56
56
|
for (const chain of filteredChains) {
|
|
57
57
|
describe(chain, () => {
|
|
58
|
-
test(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
expect(decimal).toBe(BaseDecimal[chain]);
|
|
63
|
-
},
|
|
64
|
-
{ retry: 3 },
|
|
65
|
-
);
|
|
58
|
+
test(`returns proper decimal for native ${chain} asset`, async () => {
|
|
59
|
+
const decimal = await getDecimal({ chain, symbol: chain });
|
|
60
|
+
expect(decimal).toBe(BaseDecimal[chain]);
|
|
61
|
+
});
|
|
66
62
|
});
|
|
67
63
|
}
|
|
68
64
|
|
|
69
65
|
describe("ETH", () => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
// await Bun.sleep(500);
|
|
105
|
-
},
|
|
106
|
-
{ retry: 3 },
|
|
107
|
-
);
|
|
66
|
+
// TODO: if too many requests, this will fail due to timeout
|
|
67
|
+
test.todo("returns proper decimal for eth and it's assets", async () => {
|
|
68
|
+
const ethDecimal = await getDecimal({ chain: Chain.Ethereum, symbol: "ETH" });
|
|
69
|
+
expect(ethDecimal).toBe(BaseDecimal.ETH);
|
|
70
|
+
await Bun.sleep(500);
|
|
71
|
+
|
|
72
|
+
const usdcDecimal = await getDecimal({
|
|
73
|
+
chain: Chain.Ethereum,
|
|
74
|
+
symbol: "USDC-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
75
|
+
});
|
|
76
|
+
expect(usdcDecimal).toBe(6);
|
|
77
|
+
await Bun.sleep(500);
|
|
78
|
+
|
|
79
|
+
const wbtcDecimal = await getDecimal({
|
|
80
|
+
chain: Chain.Ethereum,
|
|
81
|
+
symbol: "WBTC-0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
|
|
82
|
+
});
|
|
83
|
+
expect(wbtcDecimal).toBe(8);
|
|
84
|
+
await Bun.sleep(500);
|
|
85
|
+
|
|
86
|
+
const kindDecimal = await getDecimal({
|
|
87
|
+
chain: Chain.Ethereum,
|
|
88
|
+
symbol: "KIND-0x4618519de4c304f3444ffa7f812dddc2971cc688",
|
|
89
|
+
});
|
|
90
|
+
expect(kindDecimal).toBe(8);
|
|
91
|
+
await Bun.sleep(500);
|
|
92
|
+
|
|
93
|
+
const shitcoinDecimal = await getDecimal({
|
|
94
|
+
chain: Chain.Ethereum,
|
|
95
|
+
symbol: "HOMI-0xCa208BfD69ae6D2667f1FCbE681BAe12767c0078",
|
|
96
|
+
});
|
|
97
|
+
expect(shitcoinDecimal).toBe(0);
|
|
98
|
+
await Bun.sleep(500);
|
|
99
|
+
});
|
|
108
100
|
});
|
|
109
101
|
|
|
110
102
|
describe("AVAX", () => {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
// const usdcDecimal = await getDecimal({
|
|
147
|
-
// chain: Chain.Avalanche,
|
|
148
|
-
// symbol: "USDC-0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
|
|
149
|
-
// });
|
|
150
|
-
// expect(usdcDecimal).toBe(6);
|
|
151
|
-
// await Bun.sleep(500);
|
|
152
|
-
},
|
|
153
|
-
{ retry: 3 },
|
|
154
|
-
);
|
|
103
|
+
// TODO: if too many requests, this will fail due to timeout
|
|
104
|
+
test.todo("returns proper decimal for avax and it's assets", async () => {
|
|
105
|
+
const avaxDecimal = await getDecimal({ chain: Chain.Avalanche, symbol: "AVAX" });
|
|
106
|
+
expect(avaxDecimal).toBe(BaseDecimal.AVAX);
|
|
107
|
+
|
|
108
|
+
const wbtceDecimal = await getDecimal({
|
|
109
|
+
chain: Chain.Avalanche,
|
|
110
|
+
symbol: "WBTC.e-0x50b7545627a5162f82a992c33b87adc75187b218",
|
|
111
|
+
});
|
|
112
|
+
expect(wbtceDecimal).toBe(8);
|
|
113
|
+
|
|
114
|
+
const btcbDecimal = await getDecimal({
|
|
115
|
+
chain: Chain.Avalanche,
|
|
116
|
+
symbol: "BTC.b-0x152b9d0FdC40C096757F570A51E494bd4b943E50",
|
|
117
|
+
});
|
|
118
|
+
expect(btcbDecimal).toBe(8);
|
|
119
|
+
|
|
120
|
+
const timeDecimal = await getDecimal({
|
|
121
|
+
chain: Chain.Avalanche,
|
|
122
|
+
symbol: "TIME-0xb54f16fB19478766A268F172C9480f8da1a7c9C3",
|
|
123
|
+
});
|
|
124
|
+
expect(timeDecimal).toBe(9);
|
|
125
|
+
|
|
126
|
+
const usdtDecimal = await getDecimal({
|
|
127
|
+
chain: Chain.Avalanche,
|
|
128
|
+
symbol: "USDT-0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
|
|
129
|
+
});
|
|
130
|
+
expect(usdtDecimal).toBe(6);
|
|
131
|
+
|
|
132
|
+
const usdcDecimal = await getDecimal({
|
|
133
|
+
chain: Chain.Avalanche,
|
|
134
|
+
symbol: "USDC-0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
|
|
135
|
+
});
|
|
136
|
+
expect(usdcDecimal).toBe(6);
|
|
137
|
+
});
|
|
155
138
|
});
|
|
156
139
|
|
|
157
140
|
describe("Radix", () => {
|
|
158
|
-
test.todo(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
await Bun.sleep(500);
|
|
171
|
-
},
|
|
172
|
-
{ retry: 3 },
|
|
173
|
-
);
|
|
141
|
+
test.todo("returns proper decimal for radix and it's assets", async () => {
|
|
142
|
+
const radixDecimal = await getDecimal({ chain: Chain.Radix, symbol: "XRD" });
|
|
143
|
+
expect(radixDecimal).toBe(BaseDecimal.XRD);
|
|
144
|
+
await Bun.sleep(500);
|
|
145
|
+
|
|
146
|
+
const xwBTCDecimal = await getDecimal({
|
|
147
|
+
chain: Chain.Radix,
|
|
148
|
+
symbol: "xwBTC-resource_rdx1t580qxc7upat7lww4l2c4jckacafjeudxj5wpjrrct0p3e82sq4y75",
|
|
149
|
+
});
|
|
150
|
+
expect(xwBTCDecimal).toBe(8);
|
|
151
|
+
await Bun.sleep(500);
|
|
152
|
+
});
|
|
174
153
|
});
|
|
175
154
|
});
|
|
176
155
|
|
|
@@ -10,10 +10,10 @@ type Params = {
|
|
|
10
10
|
chain: Chain;
|
|
11
11
|
index: number;
|
|
12
12
|
addressIndex?: number;
|
|
13
|
-
type?: "legacy" | "ledgerLive" | "nativeSegwitMiddleAccount" | "segwit";
|
|
13
|
+
type?: "legacy" | "ledgerLive" | "nativeSegwitMiddleAccount" | "segwit" | "account";
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
const updatedLastIndex = (path: DerivationPathArray, index: number) => {
|
|
16
|
+
export const updatedLastIndex = (path: DerivationPathArray, index: number) => {
|
|
17
17
|
const newPath = [...path.slice(0, path.length - 1), index];
|
|
18
18
|
return newPath as DerivationPathArray;
|
|
19
19
|
};
|
|
@@ -26,13 +26,20 @@ export function derivationPathToString([network, chainId, account, change, index
|
|
|
26
26
|
return `m/${network}'/${chainId}'/${account}'/${change}${shortPath ? "" : `/${index}`}`;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
// TODO @towan - sort this out and make it more readable
|
|
29
30
|
export function getDerivationPathFor({ chain, index, addressIndex = 0, type }: Params) {
|
|
30
31
|
if (EVMChains.includes(chain as EVMChain)) {
|
|
31
|
-
if (type
|
|
32
|
+
if (type && ["legacy", "account"].includes(type))
|
|
33
|
+
return [44, 60, 0, index] as DerivationPathArray;
|
|
32
34
|
if (type === "ledgerLive") return [44, 60, index, 0, addressIndex] as DerivationPathArray;
|
|
33
35
|
return updatedLastIndex(NetworkDerivationPath[chain], index);
|
|
34
36
|
}
|
|
35
37
|
|
|
38
|
+
if (chain === Chain.Solana) {
|
|
39
|
+
if (type === "account") return [44, 501, 0, index] as DerivationPathArray;
|
|
40
|
+
return updatedLastIndex(NetworkDerivationPath[chain], index);
|
|
41
|
+
}
|
|
42
|
+
|
|
36
43
|
const chainId = chain === Chain.Litecoin ? 2 : 0;
|
|
37
44
|
|
|
38
45
|
switch (type) {
|
|
@@ -270,7 +270,7 @@ describe("AssetValue", () => {
|
|
|
270
270
|
});
|
|
271
271
|
|
|
272
272
|
describe("from bigint", () => {
|
|
273
|
-
test("returns asset value with correct decimal", async () => {
|
|
273
|
+
test.todo("returns asset value with correct decimal", async () => {
|
|
274
274
|
const avaxUSDCAsset = await AssetValue.from({
|
|
275
275
|
asset: `${Chain.Avalanche}.USDC-0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e`,
|
|
276
276
|
value: 1234567800n,
|
|
@@ -101,6 +101,17 @@ describe("SwapKitNumber", () => {
|
|
|
101
101
|
const skNumber = new SwapKitNumber(0.01);
|
|
102
102
|
expect(skNumber.getValue("string")).toBe("0.01");
|
|
103
103
|
});
|
|
104
|
+
|
|
105
|
+
test("returns string value with adjusted decimals", () => {
|
|
106
|
+
const skNumber = new SwapKitNumber({ value: "1.234567890123456789", decimal: 18 });
|
|
107
|
+
expect(skNumber.getValue("string", 8)).toBe("1.23456789");
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test("returns string base value with adjusted decimals", () => {
|
|
111
|
+
const skNumber = new SwapKitNumber({ value: "1.234567890123456789", decimal: 18 });
|
|
112
|
+
expect(skNumber.getBaseValue("string", 8)).toBe("123456789");
|
|
113
|
+
expect(skNumber.getBaseValue("string", 10)).toBe("12345678901");
|
|
114
|
+
});
|
|
104
115
|
});
|
|
105
116
|
|
|
106
117
|
describe("number", () => {
|
|
@@ -113,6 +124,17 @@ describe("SwapKitNumber", () => {
|
|
|
113
124
|
const skNumber = new SwapKitNumber(0.01);
|
|
114
125
|
expect(skNumber.getValue("number")).toBe(0.01);
|
|
115
126
|
});
|
|
127
|
+
|
|
128
|
+
test("returns number value with adjusted decimals", () => {
|
|
129
|
+
const skNumber = new SwapKitNumber({ value: "1.234567890123456789", decimal: 18 });
|
|
130
|
+
expect(skNumber.getValue("number", 8)).toBe(1.23456789);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test("returns number base value with adjusted decimals", () => {
|
|
134
|
+
const skNumber = new SwapKitNumber({ value: "1.234567890123456789", decimal: 18 });
|
|
135
|
+
expect(skNumber.getBaseValue("number", 8)).toBe(123456789);
|
|
136
|
+
expect(skNumber.getBaseValue("number", 10)).toBe(12345678901);
|
|
137
|
+
});
|
|
116
138
|
});
|
|
117
139
|
|
|
118
140
|
describe("bigint", () => {
|
|
@@ -120,6 +142,12 @@ describe("SwapKitNumber", () => {
|
|
|
120
142
|
const skNumber = new SwapKitNumber(1);
|
|
121
143
|
expect(skNumber.getBaseValue("bigint")).toBe(100000000n);
|
|
122
144
|
});
|
|
145
|
+
|
|
146
|
+
test("returns bigint value with adjusted decimals", () => {
|
|
147
|
+
const skNumber = new SwapKitNumber({ value: "1.234567890123456789", decimal: 18 });
|
|
148
|
+
expect(skNumber.getBaseValue("bigint", 8)).toBe(123456789n);
|
|
149
|
+
expect(skNumber.getBaseValue("bigint", 10)).toBe(12345678901n);
|
|
150
|
+
});
|
|
123
151
|
});
|
|
124
152
|
});
|
|
125
153
|
|
|
@@ -132,10 +132,10 @@ export class BigIntArithmetics {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
// @ts-expect-error False positive
|
|
135
|
-
getValue<T extends AllowedNumberTypes>(type: T): NumberPrimitivesType[T] {
|
|
135
|
+
getValue<T extends AllowedNumberTypes>(type: T, decimal?: number): NumberPrimitivesType[T] {
|
|
136
136
|
const value = this.formatBigIntToSafeValue(
|
|
137
137
|
this.bigIntValue,
|
|
138
|
-
this.decimal || decimalFromMultiplier(this.decimalMultiplier),
|
|
138
|
+
decimal || this.decimal || decimalFromMultiplier(this.decimalMultiplier),
|
|
139
139
|
);
|
|
140
140
|
|
|
141
141
|
switch (type) {
|
|
@@ -150,8 +150,9 @@ export class BigIntArithmetics {
|
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
// @ts-expect-error
|
|
153
|
-
getBaseValue<T extends AllowedNumberTypes>(type: T): NumberPrimitivesType[T] {
|
|
154
|
-
const divisor =
|
|
153
|
+
getBaseValue<T extends AllowedNumberTypes>(type: T, decimal?: number): NumberPrimitivesType[T] {
|
|
154
|
+
const divisor =
|
|
155
|
+
this.decimalMultiplier / toMultiplier(decimal || this.decimal || BaseDecimal.THOR);
|
|
155
156
|
const baseValue = this.bigIntValue / divisor;
|
|
156
157
|
|
|
157
158
|
switch (type) {
|