@swapkit/toolboxes 1.0.0-beta.3 → 1.0.0-beta.31

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.
Files changed (131) hide show
  1. package/dist/{chunk-fjfxga2v.js → chunk-5yxc1e69.js} +1 -1
  2. package/dist/{chunk-fjfxga2v.js.map → chunk-5yxc1e69.js.map} +1 -1
  3. package/dist/chunk-6f98phv2.js +4 -0
  4. package/dist/{chunk-0h4xdrwz.js.map → chunk-6f98phv2.js.map} +2 -2
  5. package/dist/{chunk-0f0249b1.js → chunk-9bqegm61.js} +1 -1
  6. package/dist/{chunk-p1kdg37m.js → chunk-s47y8512.js} +2 -2
  7. package/dist/{chunk-p1kdg37m.js.map → chunk-s47y8512.js.map} +1 -1
  8. package/dist/chunk-vtd17cje.js +3 -0
  9. package/dist/chunk-vtd17cje.js.map +10 -0
  10. package/dist/chunk-zcdeg6h9.js +4 -0
  11. package/dist/chunk-zcdeg6h9.js.map +10 -0
  12. package/dist/src/cosmos/index.cjs +3 -0
  13. package/dist/src/cosmos/index.cjs.map +16 -0
  14. package/dist/src/cosmos/index.js +3 -0
  15. package/dist/src/cosmos/index.js.map +16 -0
  16. package/dist/src/evm/index.cjs +3 -0
  17. package/dist/src/evm/index.cjs.map +18 -0
  18. package/dist/src/evm/index.js +3 -0
  19. package/dist/src/evm/index.js.map +18 -0
  20. package/dist/src/index.cjs +3 -0
  21. package/dist/src/index.cjs.map +10 -0
  22. package/dist/src/index.js +3 -0
  23. package/dist/src/index.js.map +10 -0
  24. package/dist/src/near/index.cjs +3 -0
  25. package/dist/src/near/index.cjs.map +13 -0
  26. package/dist/src/near/index.js +3 -0
  27. package/dist/src/near/index.js.map +13 -0
  28. package/dist/{radix → src/radix}/index.cjs +2 -2
  29. package/dist/src/radix/index.cjs.map +10 -0
  30. package/dist/src/radix/index.js +3 -0
  31. package/dist/src/radix/index.js.map +10 -0
  32. package/dist/src/ripple/index.cjs +3 -0
  33. package/dist/src/ripple/index.cjs.map +10 -0
  34. package/dist/src/ripple/index.js +3 -0
  35. package/dist/src/ripple/index.js.map +10 -0
  36. package/dist/src/solana/index.cjs +3 -0
  37. package/dist/src/solana/index.cjs.map +10 -0
  38. package/dist/src/solana/index.js +3 -0
  39. package/dist/src/solana/index.js.map +10 -0
  40. package/dist/src/substrate/index.cjs +3 -0
  41. package/dist/src/substrate/index.cjs.map +12 -0
  42. package/dist/src/substrate/index.js +3 -0
  43. package/dist/src/substrate/index.js.map +12 -0
  44. package/dist/src/tron/index.cjs +3 -0
  45. package/dist/src/tron/index.cjs.map +11 -0
  46. package/dist/src/tron/index.js +3 -0
  47. package/dist/src/tron/index.js.map +11 -0
  48. package/dist/src/utxo/index.cjs +5 -0
  49. package/dist/src/utxo/index.cjs.map +17 -0
  50. package/dist/src/utxo/index.js +5 -0
  51. package/dist/src/utxo/index.js.map +17 -0
  52. package/package.json +49 -37
  53. package/src/cosmos/thorchainUtils/addressFormat.ts +4 -1
  54. package/src/cosmos/thorchainUtils/messages.ts +2 -2
  55. package/src/cosmos/thorchainUtils/registry.ts +3 -3
  56. package/src/cosmos/toolbox/cosmos.ts +35 -16
  57. package/src/cosmos/toolbox/index.ts +2 -2
  58. package/src/cosmos/toolbox/thorchain.ts +11 -9
  59. package/src/cosmos/util.ts +76 -6
  60. package/src/evm/__tests__/address-validation.test.ts +86 -0
  61. package/src/evm/__tests__/ethereum.test.ts +1 -1
  62. package/src/evm/helpers.ts +4 -3
  63. package/src/evm/toolbox/baseEVMToolbox.ts +37 -25
  64. package/src/evm/toolbox/index.ts +2 -2
  65. package/src/evm/toolbox/op.ts +21 -7
  66. package/src/index.ts +118 -100
  67. package/src/near/__tests__/core.test.ts +80 -0
  68. package/src/near/helpers/contractFactory.ts +22 -0
  69. package/src/near/helpers/core.ts +89 -0
  70. package/src/near/helpers/gasEstimation.ts +110 -0
  71. package/src/near/helpers/index.ts +5 -0
  72. package/src/near/helpers/nep141.ts +110 -0
  73. package/src/near/index.ts +24 -0
  74. package/src/near/toolbox.ts +498 -0
  75. package/src/near/types/contract.ts +48 -0
  76. package/src/near/types/nep141.ts +66 -0
  77. package/src/near/types.ts +57 -0
  78. package/src/radix/index.ts +8 -2
  79. package/src/ripple/index.ts +15 -26
  80. package/src/solana/toolbox.ts +73 -2
  81. package/src/substrate/balance.ts +92 -0
  82. package/src/substrate/substrate.ts +7 -5
  83. package/src/tron/__tests__/toolbox.test.ts +147 -0
  84. package/src/tron/helpers/trc20.abi.ts +40 -0
  85. package/src/tron/index.ts +16 -0
  86. package/src/tron/toolbox.ts +336 -0
  87. package/src/tron/types.ts +31 -0
  88. package/src/utxo/__tests__/zcash-integration.test.ts +114 -0
  89. package/src/utxo/helpers/api.ts +66 -16
  90. package/src/utxo/helpers/bchaddrjs.ts +8 -8
  91. package/src/utxo/helpers/coinselect.ts +4 -2
  92. package/src/utxo/helpers/txSize.ts +4 -3
  93. package/src/utxo/index.ts +1 -0
  94. package/src/utxo/toolbox/bitcoinCash.ts +22 -14
  95. package/src/utxo/toolbox/index.ts +16 -4
  96. package/src/utxo/toolbox/utxo.ts +42 -27
  97. package/src/utxo/toolbox/zcash.ts +208 -0
  98. package/src/utxo/types.ts +2 -0
  99. package/dist/chunk-0h4xdrwz.js +0 -4
  100. package/dist/cosmos/index.cjs +0 -3
  101. package/dist/cosmos/index.cjs.map +0 -16
  102. package/dist/cosmos/index.js +0 -3
  103. package/dist/cosmos/index.js.map +0 -16
  104. package/dist/evm/index.cjs +0 -3
  105. package/dist/evm/index.cjs.map +0 -18
  106. package/dist/evm/index.js +0 -3
  107. package/dist/evm/index.js.map +0 -18
  108. package/dist/index.cjs +0 -3
  109. package/dist/index.cjs.map +0 -10
  110. package/dist/index.js +0 -3
  111. package/dist/index.js.map +0 -10
  112. package/dist/radix/index.cjs.map +0 -10
  113. package/dist/radix/index.js +0 -3
  114. package/dist/radix/index.js.map +0 -10
  115. package/dist/ripple/index.cjs +0 -3
  116. package/dist/ripple/index.cjs.map +0 -10
  117. package/dist/ripple/index.js +0 -3
  118. package/dist/ripple/index.js.map +0 -10
  119. package/dist/solana/index.cjs +0 -3
  120. package/dist/solana/index.cjs.map +0 -10
  121. package/dist/solana/index.js +0 -3
  122. package/dist/solana/index.js.map +0 -10
  123. package/dist/substrate/index.cjs +0 -3
  124. package/dist/substrate/index.cjs.map +0 -11
  125. package/dist/substrate/index.js +0 -3
  126. package/dist/substrate/index.js.map +0 -11
  127. package/dist/utxo/index.cjs +0 -3
  128. package/dist/utxo/index.cjs.map +0 -16
  129. package/dist/utxo/index.js +0 -3
  130. package/dist/utxo/index.js.map +0 -16
  131. /package/dist/{chunk-0f0249b1.js.map → chunk-9bqegm61.js.map} +0 -0
@@ -0,0 +1,16 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cosmos/thorchainUtils/addressFormat.ts", "../src/cosmos/thorchainUtils/messages.ts", "../src/cosmos/util.ts", "../src/cosmos/thorchainUtils/registry.ts", "../src/cosmos/toolbox/index.ts", "../src/cosmos/toolbox/cosmos.ts", "../src/cosmos/toolbox/thorchain.ts"],
4
+ "sourcesContent": [
5
+ "import { base64, bech32 } from \"@scure/base\";\nimport { SwapKitError } from \"@swapkit/helpers\";\nimport { fromByteArray, toByteArray } from \"base64-js\";\n\nexport function bech32ToBase64(address: string) {\n return base64.encode(\n Uint8Array.from(bech32.fromWords(bech32.decode(address as `${string}1${string}`).words)),\n );\n}\n\nexport function base64ToBech32(address: string, prefix = \"thor\") {\n return bech32.encode(prefix, bech32.toWords(base64.decode(address)));\n}\n\nexport function toBase64(data: Uint8Array) {\n return fromByteArray(data);\n}\n\nexport function fromBase64(base64String: string) {\n if (!base64String.match(/^[a-zA-Z0-9+/]*={0,2}$/)) {\n throw new SwapKitError(\"toolbox_cosmos_invalid_params\", {\n error: \"Invalid base64 string format\",\n });\n }\n return toByteArray(base64String);\n}\n",
6
+ "import type { TxBodyEncodeObject } from \"@cosmjs/proto-signing\";\nimport { AssetValue, Chain, ChainToChainId, SwapKitError } from \"@swapkit/helpers\";\n\nimport {\n createStargateClient,\n getDefaultChainFee,\n getDenomWithChain,\n getMsgSendDenom,\n} from \"../util\";\n\nimport { createDefaultAminoTypes, createDefaultRegistry } from \"./registry\";\nimport type { ThorchainCreateTransactionParams } from \"./types\";\n\ntype MsgSend = ReturnType<typeof transferMsgAmino>;\ntype MsgDeposit = ReturnType<typeof depositMsgAmino>;\ntype DirectMsgSendForBroadcast = ReturnType<typeof parseAminoMessageForDirectSigning<MsgSend>>;\ntype DirectMsgDepositForBroadcast = ReturnType<\n typeof parseAminoMessageForDirectSigning<MsgDeposit>\n>;\n\nexport const THORCHAIN_GAS_VALUE = getDefaultChainFee(Chain.THORChain).gas;\nexport const MAYA_GAS_VALUE = getDefaultChainFee(Chain.Maya).gas;\n\nexport const transferMsgAmino = ({\n sender,\n recipient,\n assetValue,\n}: {\n sender: string;\n recipient?: string;\n assetValue: AssetValue;\n}) => {\n const chain = assetValue.chain as Chain.THORChain | Chain.Maya;\n return {\n type: `${chain === Chain.Maya ? \"mayachain\" : \"thorchain\"}/MsgSend` as const,\n value: {\n from_address: sender,\n to_address: recipient,\n amount: [\n {\n amount: assetValue.getBaseValue(\"string\"),\n denom: getMsgSendDenom(assetValue.symbol, true),\n },\n ],\n },\n };\n};\n\nexport const depositMsgAmino = ({\n sender,\n assetValue,\n memo = \"\",\n}: {\n sender: string;\n assetValue: AssetValue;\n memo?: string;\n}) => {\n const chain = assetValue.chain as Chain.THORChain | Chain.Maya;\n return {\n type: `${chain === Chain.Maya ? \"mayachain\" : \"thorchain\"}/MsgDeposit` as const,\n value: {\n coins: [\n {\n amount: assetValue.getBaseValue(\"string\"),\n asset: getDenomWithChain(assetValue),\n },\n ],\n signer: sender,\n memo,\n },\n };\n};\n\nexport const buildAminoMsg = ({\n sender,\n recipient,\n assetValue,\n memo,\n}: {\n sender: string;\n recipient?: string;\n assetValue: AssetValue;\n memo?: string;\n}) => {\n const isDeposit = !recipient;\n const msg = isDeposit\n ? depositMsgAmino({ sender, assetValue, memo })\n : transferMsgAmino({ sender, recipient, assetValue });\n\n return msg;\n};\n\nexport const convertToSignable = async (\n msg: MsgSend | MsgDeposit,\n chain: Chain.THORChain | Chain.Maya,\n) => {\n const aminoTypes = await createDefaultAminoTypes(chain);\n\n return aminoTypes.fromAmino(msg);\n};\n\nconst getAccount = async ({ rpcUrl, sender }: { sender: string; rpcUrl: string }) => {\n const client = await createStargateClient(rpcUrl);\n const account = await client.getAccount(sender);\n\n if (!account) {\n throw new SwapKitError(\"toolbox_cosmos_account_not_found\", { sender });\n }\n\n return account;\n};\n\nexport function getCreateTransaction(rpcUrl: string) {\n return function createTransaction(params: ThorchainCreateTransactionParams) {\n const { assetValue, recipient, memo, sender, asSignable, asAminoMessage } = params;\n\n if (recipient) {\n return buildTransferTx(rpcUrl)({\n sender,\n recipient,\n assetValue,\n memo,\n asSignable,\n asAminoMessage,\n });\n }\n\n return buildDepositTx(rpcUrl)({\n sender,\n assetValue,\n memo,\n asSignable,\n asAminoMessage,\n });\n };\n}\n\nexport const buildTransferTx =\n (rpcUrl: string) =>\n async ({\n sender,\n recipient,\n assetValue,\n memo = \"\",\n asSignable = true,\n asAminoMessage = false,\n sequence,\n accountNumber,\n }: ThorchainCreateTransactionParams) => {\n const account = await getAccount({ rpcUrl, sender });\n const chain = assetValue.chain as Chain.THORChain | Chain.Maya;\n\n const transferMsg = transferMsgAmino({\n sender,\n recipient,\n assetValue,\n });\n\n const msg = asSignable\n ? await convertToSignable(\n asAminoMessage ? transferMsg : parseAminoMessageForDirectSigning(transferMsg),\n chain,\n )\n : transferMsg;\n\n const transaction = {\n chainId: ChainToChainId[chain],\n accountNumber: accountNumber || account.accountNumber,\n sequence: sequence || account.sequence,\n msgs: [msg],\n fee: getDefaultChainFee(assetValue.chain as Chain.THORChain | Chain.Maya),\n memo,\n };\n\n return transaction;\n };\n\nexport const buildDepositTx =\n (rpcUrl: string) =>\n async ({\n sender,\n assetValue,\n memo = \"\",\n asSignable = true,\n asAminoMessage = false,\n sequence,\n accountNumber,\n }: ThorchainCreateTransactionParams) => {\n const account = await getAccount({ rpcUrl, sender });\n const chain = assetValue.chain as Chain.THORChain | Chain.Maya;\n\n const depositMsg = depositMsgAmino({ sender, assetValue, memo });\n\n const msg = asSignable\n ? await convertToSignable(\n asAminoMessage ? depositMsg : parseAminoMessageForDirectSigning<MsgDeposit>(depositMsg),\n chain,\n )\n : depositMsg;\n\n const transaction = {\n chainId: ChainToChainId[chain],\n accountNumber: accountNumber || account.accountNumber,\n sequence: sequence || account.sequence,\n msgs: [msg],\n fee: getDefaultChainFee(assetValue.chain as Chain.THORChain | Chain.Maya),\n memo,\n };\n\n return transaction;\n };\n\nexport function parseAminoMessageForDirectSigning<T extends MsgDeposit | MsgSend>(msg: T) {\n if (msg.type === \"thorchain/MsgSend\" || msg.type === \"mayachain/MsgSend\") return msg as MsgSend;\n\n return {\n ...msg,\n value: {\n ...msg.value,\n coins: (msg as MsgDeposit).value.coins.map((coin: { asset: string; amount: string }) => {\n const assetValue = AssetValue.from({ asset: coin.asset });\n\n const symbol = (\n assetValue.isSynthetic ? assetValue.symbol.split(\"/\")?.[1] : assetValue.symbol\n )?.toUpperCase();\n const chain = (\n assetValue.isSynthetic ? assetValue.symbol.split(\"/\")?.[0] : assetValue.chain\n )?.toUpperCase();\n\n return {\n ...coin,\n asset: {\n chain,\n symbol,\n ticker: assetValue.ticker,\n synth: assetValue.isSynthetic,\n },\n };\n }),\n },\n };\n}\n\nexport async function buildEncodedTxBody({\n chain,\n memo,\n msgs,\n}: {\n msgs: DirectMsgDepositForBroadcast[] | DirectMsgSendForBroadcast[];\n memo: string;\n chain: Chain.THORChain | Chain.Maya;\n}) {\n const registry = await createDefaultRegistry();\n const aminoTypes = await createDefaultAminoTypes(chain);\n\n const signedTxBody: TxBodyEncodeObject = {\n typeUrl: \"/cosmos.tx.v1beta1.TxBody\",\n value: { memo, messages: msgs.map((msg) => aminoTypes.fromAmino(msg)) },\n };\n\n return registry.encode(signedTxBody);\n}\n",
7
+ "import type { OfflineSigner } from \"@cosmjs/proto-signing\";\nimport type { SigningStargateClientOptions } from \"@cosmjs/stargate\";\nimport {\n AssetValue,\n BaseDecimal,\n Chain,\n ChainId,\n type CosmosChain,\n SKConfig,\n SwapKitError,\n} from \"@swapkit/helpers\";\n\nimport type { CosmosCreateTransactionParams } from \"./thorchainUtils\";\n\nexport const USK_KUJIRA_FACTORY_DENOM =\n \"FACTORY/KUJIRA1QK00H5ATUTPSV900X202PXX42NPJR9THG58DNQPA72F2P7M2LUASE444A7/UUSK\";\n\nexport const YUM_KUJIRA_FACTORY_DENOM =\n \"FACTORY/KUJIRA1YGFXN0ER40KLCNCK8THLTUPRDXLCK6WVNPKF2K/UYUM\";\n\nexport const DEFAULT_COSMOS_FEE_MAINNET = {\n amount: [{ denom: \"uatom\", amount: \"500\" }],\n gas: \"200000\",\n};\n\nexport const DEFAULT_KUJI_FEE_MAINNET = {\n amount: [{ denom: \"ukuji\", amount: \"1000\" }],\n gas: \"200000\",\n};\n\nexport function getDefaultChainFee(chain: CosmosChain) {\n switch (chain) {\n case Chain.Maya:\n return { amount: [], gas: \"10000000000\" };\n case Chain.THORChain:\n return { amount: [], gas: \"500000000\" };\n case Chain.Kujira:\n return DEFAULT_KUJI_FEE_MAINNET;\n default:\n return DEFAULT_COSMOS_FEE_MAINNET;\n }\n}\n\nexport const getMsgSendDenom = (symbol: string, isThorchain = false) => {\n if (isThorchain) {\n return symbol.toLowerCase();\n }\n\n switch (symbol) {\n case \"uUSK\":\n case \"USK\":\n return USK_KUJIRA_FACTORY_DENOM;\n case \"uYUM\":\n case \"YUM\":\n return YUM_KUJIRA_FACTORY_DENOM;\n case \"uKUJI\":\n case \"KUJI\":\n return \"ukuji\";\n case \"ATOM\":\n case \"uATOM\":\n return \"uatom\";\n default:\n return symbol;\n }\n};\n\nexport const getDenomWithChain = ({ symbol, chain }: AssetValue) => {\n if (chain === Chain.Maya) {\n return (symbol.toUpperCase() !== \"CACAO\" ? symbol : `${Chain.Maya}.${symbol}`).toUpperCase();\n }\n if (chain === Chain.THORChain) {\n return (\n symbol.toUpperCase() !== \"RUNE\" ? symbol : `${Chain.THORChain}.${symbol}`\n ).toUpperCase();\n }\n return getMsgSendDenom(symbol, false);\n};\n\nexport async function createStargateClient(url: string) {\n const { StargateClient } = (await import(\"@cosmjs/stargate\")).default;\n\n return StargateClient.connect(url);\n}\n\nexport async function createSigningStargateClient(\n url: string,\n signer: any,\n optionsOrBaseGas: string | SigningStargateClientOptions = {},\n) {\n const { SigningStargateClient, GasPrice } = (await import(\"@cosmjs/stargate\")).default;\n const gasPrice = typeof optionsOrBaseGas === \"string\" ? optionsOrBaseGas : \"0.0003uatom\";\n const options = typeof optionsOrBaseGas === \"string\" ? {} : optionsOrBaseGas;\n\n return SigningStargateClient.connectWithSigner(url, signer, {\n gasPrice: GasPrice.fromString(gasPrice),\n ...options,\n });\n}\n\nexport async function createOfflineStargateClient(\n wallet: OfflineSigner,\n registry?: SigningStargateClientOptions,\n) {\n const { SigningStargateClient } = (await import(\"@cosmjs/stargate\")).default;\n\n return SigningStargateClient.offline(wallet, registry);\n}\n\nexport const getRPC = (chainId: ChainId) => {\n const { isStagenet } = SKConfig.get(\"envs\");\n const rpcUrls = SKConfig.get(\"rpcUrls\");\n\n switch (chainId) {\n case ChainId.Kujira:\n return rpcUrls.KUJI;\n\n case ChainId.THORChain:\n case \"thorchain-mainnet-v1\" as ChainId:\n return isStagenet ? rpcUrls.THOR_STAGENET : rpcUrls.THOR;\n case ChainId.Maya:\n return isStagenet ? rpcUrls.MAYA_STAGENET : rpcUrls.MAYA;\n\n default:\n return rpcUrls.GAIA;\n }\n};\n\nconst getTransferMsgTypeByChain = (chain: CosmosChain) => {\n switch (chain) {\n case Chain.Maya:\n case Chain.THORChain:\n return \"/types.MsgSend\";\n case Chain.Cosmos:\n case Chain.Kujira:\n return \"/cosmos.bank.v1beta1.MsgSend\";\n default:\n throw new SwapKitError(\"toolbox_cosmos_not_supported\", { chain });\n }\n};\n\n/**\n * Used to build tx for Cosmos and Kujira\n */\nexport const cosmosCreateTransaction = async ({\n sender,\n recipient,\n assetValue,\n memo = \"\",\n feeRate,\n sequence,\n accountNumber,\n}: CosmosCreateTransactionParams) => {\n const { chain, chainId } = assetValue;\n\n const url = getRPC(chainId);\n const client = await createStargateClient(url);\n const accountOnChain = await client.getAccount(sender);\n\n if (!accountOnChain) {\n throw new SwapKitError(\"toolbox_cosmos_account_not_found\", { sender });\n }\n\n const gasAsset = AssetValue.from({ chain });\n const feeAsset = getMsgSendDenom(gasAsset.symbol);\n const defaultFee = getDefaultChainFee(chain as CosmosChain);\n\n const txFee =\n feeAsset && feeRate\n ? { amount: [{ denom: feeAsset, amount: feeRate.toString() }], gas: defaultFee.gas }\n : defaultFee;\n\n const msgSend = {\n fromAddress: sender,\n toAddress: recipient,\n amount: [\n { amount: assetValue.getBaseValue(\"string\"), denom: getMsgSendDenom(assetValue.symbol) },\n ],\n };\n\n return {\n accountNumber: accountNumber ?? accountOnChain.accountNumber,\n chainId,\n fee: txFee,\n memo,\n sequence: sequence ?? accountOnChain.sequence,\n msgs: [{ typeUrl: getTransferMsgTypeByChain(chain as CosmosChain), value: msgSend }],\n };\n};\n\n// Map of known denoms to their asset configurations\nconst DENOM_MAP = {\n // THORChain denoms\n rune: { chain: Chain.THORChain, decimals: BaseDecimal[Chain.THORChain] },\n tcy: { asset: \"THOR.TCY\", decimals: BaseDecimal[Chain.THORChain] },\n \"x/kuji\": { asset: \"THOR.KUJI\", decimals: BaseDecimal[Chain.THORChain] },\n\n // Cosmos denoms\n uatom: { chain: Chain.Cosmos, decimals: BaseDecimal[Chain.Cosmos] },\n atom: { chain: Chain.Cosmos, decimals: BaseDecimal[Chain.Cosmos] },\n\n // Maya denoms\n cacao: { chain: Chain.Maya, decimals: 10 }, // Maya uses 10 decimals for CACAO\n maya: { asset: `${Chain.Maya}.${Chain.Maya}`, decimals: 4 }, // MAYA token uses 4 decimals\n\n // Kujira denoms\n ukuji: { chain: Chain.Kujira, decimals: BaseDecimal[Chain.Kujira] },\n kuji: { chain: Chain.Kujira, decimals: BaseDecimal[Chain.Kujira] },\n\n // USK on Kujira (lowercase version of the factory denom)\n [USK_KUJIRA_FACTORY_DENOM.toLowerCase()]: {\n asset: `${Chain.Kujira}.USK`,\n decimals: BaseDecimal[Chain.Kujira],\n },\n};\n\n/**\n * Converts a Cosmos denom and amount to an AssetValue with proper decimal handling\n * @param denom - The denomination string\n * @param amount - The amount in base units as a string\n * @returns AssetValue with the correct decimal conversion\n */\nexport const getAssetFromDenom = (denom: string, amount: string) => {\n const config = DENOM_MAP[denom.toLowerCase()];\n\n if (!config) {\n // For unknown denoms, default to 8 decimals (common for many Cosmos chains)\n // This preserves the original behavior while using fromBaseDecimal\n return AssetValue.from({\n asset: denom,\n value: amount,\n fromBaseDecimal: 8,\n });\n }\n\n const { chain, asset, decimals } = config;\n\n const assetOrChain = (\n chain\n ? {\n chain,\n }\n : { asset }\n ) as { asset: string } | { chain: CosmosChain };\n\n return AssetValue.from({\n ...assetOrChain,\n value: amount,\n fromBaseDecimal: decimals,\n });\n};\n",
8
+ "import { Chain } from \"@swapkit/helpers\";\nimport { base64ToBech32, bech32ToBase64 } from \"./addressFormat\";\n\nexport async function createDefaultRegistry() {\n const { $root } = await import(\"./types/MsgCompiled\");\n const { Registry } = (await import(\"@cosmjs/proto-signing\")).default;\n const { defaultRegistryTypes } = (await import(\"@cosmjs/stargate\")).default;\n\n return new Registry([\n ...defaultRegistryTypes,\n [\"/types.MsgSend\", $root.types.MsgSend],\n [\"/types.MsgDeposit\", $root.types.MsgDeposit],\n ]);\n}\n\nexport async function createDefaultAminoTypes(chain: Chain.THORChain | Chain.Maya) {\n const { AminoTypes } = (await import(\"@cosmjs/stargate\")).default;\n const aminoTypePrefix = chain === Chain.THORChain ? \"thorchain\" : \"mayachain\";\n\n return new AminoTypes({\n \"/types.MsgSend\": {\n aminoType: `${aminoTypePrefix}/MsgSend`,\n toAmino: ({ fromAddress, toAddress, ...rest }: any) => ({\n ...rest,\n from_address: base64ToBech32(fromAddress),\n to_address: base64ToBech32(toAddress),\n }),\n fromAmino: ({ from_address, to_address, ...rest }: any) => ({\n ...rest,\n fromAddress: bech32ToBase64(from_address),\n toAddress: bech32ToBase64(to_address),\n }),\n },\n \"/types.MsgDeposit\": {\n aminoType: `${aminoTypePrefix}/MsgDeposit`,\n toAmino: ({ signer, ...rest }: any) => ({ ...rest, signer: base64ToBech32(signer) }),\n fromAmino: ({ signer, ...rest }: any) => ({ ...rest, signer: bech32ToBase64(signer) }),\n },\n });\n}\n",
9
+ "import { Chain, type CosmosChain, SwapKitError } from \"@swapkit/helpers\";\n\nimport type { CosmosToolboxParams } from \"../types\";\nimport { createCosmosToolbox } from \"./cosmos\";\nimport { createThorchainToolbox } from \"./thorchain\";\n\nexport type CosmosToolboxes = {\n GAIA: ReturnType<typeof createCosmosToolbox>;\n KUJI: ReturnType<typeof createCosmosToolbox>;\n MAYA: ReturnType<typeof createThorchainToolbox>;\n THOR: ReturnType<typeof createThorchainToolbox>;\n};\n\nexport const getCosmosToolbox = <T extends CosmosChain>(\n chain: T,\n params?: Omit<CosmosToolboxParams, \"chain\">,\n): CosmosToolboxes[T] => {\n switch (chain) {\n case Chain.Cosmos:\n case Chain.Kujira:\n return createCosmosToolbox({ chain, ...params }) as CosmosToolboxes[T];\n\n case Chain.Maya:\n case Chain.THORChain:\n return createThorchainToolbox({ chain, ...params }) as CosmosToolboxes[T];\n\n default:\n throw new SwapKitError(\"toolbox_cosmos_not_supported\", { chain });\n }\n};\n\nexport * from \"./cosmos\";\nexport * from \"./thorchain\";\n",
10
+ "import type { StdFee } from \"@cosmjs/amino\";\nimport type { Account } from \"@cosmjs/stargate\";\nimport { base64, bech32 } from \"@scure/base\";\nimport {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainId,\n ChainToChainId,\n type CosmosChain,\n CosmosChainPrefixes,\n DerivationPath,\n type DerivationPathArray,\n FeeOption,\n type GenericTransferParams,\n NetworkDerivationPath,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\n applyFeeMultiplier,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { SwapKitApi } from \"@swapkit/helpers/api\";\nimport { P, match } from \"ts-pattern\";\nimport type { CosmosToolboxParams } from \"../types\";\nimport {\n cosmosCreateTransaction,\n createSigningStargateClient,\n createStargateClient,\n getAssetFromDenom,\n getDenomWithChain,\n getMsgSendDenom,\n} from \"../util\";\n\nexport async function fetchFeeRateFromSwapKit(chainId: ChainId, safeDefault: number) {\n try {\n const response = await SwapKitApi.getGasRate();\n const responseGasRate = response.find((gas) => gas.chainId === chainId)?.value;\n\n return responseGasRate ? Number.parseFloat(responseGasRate) : safeDefault;\n } catch (_e) {\n return safeDefault;\n }\n}\n\nexport async function getSignerFromPhrase({\n phrase,\n prefix,\n ...derivationParams\n}: { phrase: string; prefix?: string } & (\n | { chain: Chain; index?: number }\n | { derivationPath: string }\n)) {\n const { DirectSecp256k1HdWallet } = (await import(\"@cosmjs/proto-signing\")).default;\n const { stringToPath } = (await import(\"@cosmjs/crypto\")).default;\n\n const derivationPath =\n \"derivationPath\" in derivationParams\n ? derivationParams.derivationPath\n : `${DerivationPath[derivationParams.chain]}/${derivationParams.index}`;\n\n return DirectSecp256k1HdWallet.fromMnemonic(phrase, {\n prefix,\n hdPaths: [stringToPath(derivationPath)],\n });\n}\n\nexport async function getSignerFromPrivateKey({\n privateKey,\n prefix,\n}: {\n privateKey: Uint8Array;\n prefix: string;\n}) {\n const { DirectSecp256k1Wallet } = (await import(\"@cosmjs/proto-signing\")).default;\n\n return DirectSecp256k1Wallet.fromKey(privateKey, prefix);\n}\n\nconst SafeDefaultFeeValues = {\n [Chain.Cosmos]: 500,\n [Chain.Kujira]: 1000,\n [Chain.THORChain]: 5000000,\n [Chain.Maya]: 5000000,\n};\n\nexport function verifySignature(getAccount: (address: string) => Promise<Account | null>) {\n return async function verifySignature({\n signature,\n message,\n address,\n }: {\n signature: string;\n message: string;\n address: string;\n }) {\n const account = await getAccount(address);\n if (!account?.pubkey) throw new SwapKitError(\"toolbox_cosmos_verify_signature_no_pubkey\");\n const { Secp256k1Signature, Secp256k1 } = (await import(\"@cosmjs/crypto\")).default;\n\n const secpSignature = Secp256k1Signature.fromFixedLength(base64.decode(signature));\n return Secp256k1.verifySignature(secpSignature, base64.decode(message), account.pubkey.value);\n };\n}\n\nexport async function createCosmosToolbox({ chain, ...toolboxParams }: CosmosToolboxParams) {\n const rpcUrl = SKConfig.get(\"rpcUrls\")[chain];\n const chainPrefix = CosmosChainPrefixes[chain];\n\n const index = \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n const derivationPath = derivationPathToString(\n \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[chain], { index }),\n );\n\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, ({ phrase }) =>\n getSignerFromPhrase({ phrase, prefix: chainPrefix, derivationPath }),\n )\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n async function getAccount(address: string) {\n const client = await createStargateClient(rpcUrl);\n return client.getAccount(address);\n }\n\n async function getAddress() {\n const [account] = (await signer?.getAccounts()) || [];\n return account?.address;\n }\n\n async function getPubKey() {\n const [account] = (await signer?.getAccounts()) || [];\n if (!account?.pubkey) {\n throw new SwapKitError(\"toolbox_cosmos_signer_not_defined\");\n }\n return base64.encode(account?.pubkey);\n }\n\n async function transfer({\n recipient,\n assetValue,\n memo = \"\",\n feeRate,\n feeOptionKey = FeeOption.Fast,\n }: GenericTransferParams) {\n const from = await getAddress();\n\n if (!(signer && from)) {\n throw new SwapKitError(\"toolbox_cosmos_signer_not_defined\");\n }\n\n const feeAssetValue = AssetValue.from({\n chain,\n });\n const assetDenom = getDenomWithChain(feeAssetValue);\n\n const txFee =\n feeRate ||\n feeToStdFee((await getFees(chain, SafeDefaultFeeValues[chain]))[feeOptionKey], assetDenom);\n\n const signingClient = await createSigningStargateClient(rpcUrl, signer);\n const message = [\n {\n denom: getMsgSendDenom(`u${assetValue.symbol}`).toLowerCase(),\n amount: assetValue.getBaseValue(\"string\"),\n },\n ];\n\n const { transactionHash } = await signingClient.sendTokens(\n from,\n recipient,\n message,\n txFee,\n memo,\n );\n\n return transactionHash;\n }\n\n return {\n transfer,\n getAddress,\n getAccount,\n getBalance: async (address: string, _potentialScamFilter?: boolean) => {\n const denomBalances = await cosmosBalanceDenomsGetter(rpcUrl)(address);\n return await Promise.all(\n denomBalances\n .filter(({ denom }) => denom && !denom.includes(\"IBC/\"))\n .map(({ denom, amount }) => {\n const fullDenom =\n [Chain.THORChain, Chain.Maya].includes(chain) &&\n (denom.includes(\"/\") || denom.includes(\"˜\"))\n ? `${chain}.${denom}`\n : denom;\n return getAssetFromDenom(fullDenom, amount);\n }),\n );\n },\n getSignerFromPhrase: async ({\n phrase,\n derivationPath,\n }: { phrase: string; derivationPath: DerivationPathArray }) =>\n getSignerFromPhrase({\n phrase,\n prefix: chainPrefix,\n derivationPath: derivationPathToString(derivationPath),\n index,\n }),\n getSignerFromPrivateKey: async (privateKey: Uint8Array) => {\n const { DirectSecp256k1Wallet } = (await import(\"@cosmjs/proto-signing\")).default;\n return DirectSecp256k1Wallet.fromKey(privateKey, chainPrefix);\n },\n createPrivateKeyFromPhrase: createPrivateKeyFromPhrase(derivationPath),\n validateAddress: getCosmosValidateAddress(chainPrefix),\n getPubKey,\n getFees: () => getFees(chain, SafeDefaultFeeValues[chain]),\n fetchFeeRateFromSwapKit,\n getBalanceAsDenoms: cosmosBalanceDenomsGetter(rpcUrl),\n createTransaction: cosmosCreateTransaction,\n verifySignature: verifySignature(getAccount),\n };\n}\n\nexport async function getFeeRateFromThorswap(chainId: ChainId, safeDefault: number) {\n try {\n const response = await SwapKitApi.getGasRate();\n const responseGasRate = response.find((gas) => gas.chainId === chainId)?.value;\n\n return responseGasRate ? Number.parseFloat(responseGasRate) : safeDefault;\n } catch (_e) {\n return safeDefault;\n }\n}\n\nexport function cosmosValidateAddress({\n address,\n chain,\n prefix: chainPrefix,\n}: { address: string } & (\n | { prefix: string; chain?: undefined }\n | { chain: CosmosChain; prefix?: undefined }\n)) {\n const prefix = chainPrefix || getPrefix(chain);\n\n if (!(prefix && address)) {\n throw new SwapKitError(\"toolbox_cosmos_validate_address_prefix_not_found\");\n }\n\n return getCosmosValidateAddress(prefix)(address);\n}\n\nexport function estimateTransactionFee({\n assetValue: { chain },\n}: {\n assetValue: AssetValue;\n}) {\n return AssetValue.from({ chain, value: getMinTransactionFee(chain) });\n}\n\nfunction getPrefix<C extends CosmosChain>(chain?: C) {\n const { isStagenet } = SKConfig.get(\"envs\");\n const useStagenetPrefix = chain\n ? [Chain.THORChain, Chain.Maya].includes(chain) && isStagenet\n : false;\n const basePrefix = chain ? CosmosChainPrefixes[chain] : undefined;\n\n return useStagenetPrefix ? `s${basePrefix}` : basePrefix;\n}\n\nasync function getFees(chain: Chain, safeDefault: number) {\n const baseFee = await fetchFeeRateFromSwapKit(ChainToChainId[chain], safeDefault);\n return {\n average: SwapKitNumber.fromBigInt(BigInt(baseFee), BaseDecimal[chain]),\n fast: SwapKitNumber.fromBigInt(\n BigInt(applyFeeMultiplier(baseFee, FeeOption.Fast, true)),\n BaseDecimal[chain],\n ),\n fastest: SwapKitNumber.fromBigInt(\n BigInt(applyFeeMultiplier(baseFee, FeeOption.Fastest, true)),\n BaseDecimal[chain],\n ),\n } as { [key in FeeOption]: SwapKitNumber };\n}\n\nfunction feeToStdFee(fee: SwapKitNumber, denom: string): StdFee {\n return {\n amount: [{ denom, amount: fee.getBaseValue(\"string\") }],\n gas: \"200000\",\n };\n}\n\nfunction getMinTransactionFee(chain: Chain) {\n return (\n {\n [Chain.Cosmos]: 0.007,\n [Chain.Kujira]: 0.02,\n [Chain.THORChain]: 0.02,\n [Chain.Maya]: 0.02,\n }[chain as CosmosChain] || 0\n );\n}\n\nfunction getCosmosValidateAddress(prefix: string) {\n return function validateAddress(address: string) {\n if (!address.startsWith(prefix)) return false;\n\n try {\n const { prefix, words } = bech32.decode(address as `${string}1${string}`);\n const normalized = bech32.encode(prefix, words);\n\n return normalized === address.toLocaleLowerCase();\n } catch (_error) {\n return false;\n }\n };\n}\n\nfunction cosmosBalanceDenomsGetter(rpcUrl: string) {\n return async function getCosmosBalanceDenoms(address: string) {\n const client = await createStargateClient(rpcUrl);\n const allBalances = await client.getAllBalances(address);\n\n const balances = allBalances.map((balance) => ({\n ...balance,\n denom: balance.denom.includes(\"/\") ? balance.denom.toUpperCase() : balance.denom,\n }));\n\n return balances;\n };\n}\n\nfunction createPrivateKeyFromPhrase(derivationPath: string) {\n return async function createPrivateKeyFromPhrase(phrase: string) {\n const { Bip39, EnglishMnemonic, Slip10, Slip10Curve, stringToPath } = (\n await import(\"@cosmjs/crypto\")\n ).default;\n\n const mnemonicChecked = new EnglishMnemonic(phrase);\n const seed = await Bip39.mnemonicToSeed(mnemonicChecked);\n\n const { privkey } = Slip10.derivePath(\n Slip10Curve.Secp256k1,\n seed,\n stringToPath(derivationPath),\n );\n\n return privkey;\n };\n}\n",
11
+ "import type { Pubkey, Secp256k1HdWallet } from \"@cosmjs/amino\";\nimport { base64 } from \"@scure/base\";\nimport {\n BaseDecimal,\n Chain,\n CosmosChainPrefixes,\n FeeOption,\n type GenericTransferParams,\n NetworkDerivationPath,\n RequestClient,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\n\nimport { P, match } from \"ts-pattern\";\nimport {\n buildAminoMsg,\n buildEncodedTxBody,\n convertToSignable,\n createDefaultAminoTypes,\n createDefaultRegistry,\n getCreateTransaction,\n parseAminoMessageForDirectSigning,\n} from \"../thorchainUtils\";\nimport type { ThorchainConstantsResponse } from \"../thorchainUtils/types/client-types\";\nimport type { MultisigTx } from \"../types\";\nimport type { CosmosToolboxParams, MultiSigSigner } from \"../types\";\nimport {\n createOfflineStargateClient,\n createSigningStargateClient,\n createStargateClient,\n getDefaultChainFee,\n} from \"../util\";\nimport { createCosmosToolbox } from \"./cosmos\";\n\nfunction secp256k1HdWalletFromMnemonic({\n prefix,\n derivationPath,\n}: {\n prefix: string;\n derivationPath?: string;\n}) {\n return async function secp256k1HdWalletFromMnemonic(mnemonic: string, index = 0) {\n const { Secp256k1HdWallet } = (await import(\"@cosmjs/amino\")).default;\n const { stringToPath } = (await import(\"@cosmjs/crypto\")).default;\n\n return Secp256k1HdWallet.fromMnemonic(mnemonic, {\n hdPaths: [stringToPath(`${derivationPath}/${index}`)],\n prefix,\n });\n };\n}\n\nfunction exportSignature(signature: Uint8Array) {\n return base64.encode(signature);\n}\n\nfunction signMultisigTx(chain: Chain.THORChain | Chain.Maya) {\n return async function signMultisigTx({\n wallet,\n tx,\n }: {\n wallet: Secp256k1HdWallet;\n tx: string | MultisigTx;\n }) {\n const { msgs, accountNumber, sequence, chainId, fee, memo } =\n typeof tx === \"string\" ? JSON.parse(tx) : tx;\n\n const address = (await wallet.getAccounts())?.[0]?.address || \"\";\n const aminoTypes = await createDefaultAminoTypes(chain);\n const registry = await createDefaultRegistry();\n const signingClient = await createOfflineStargateClient(wallet, {\n registry,\n aminoTypes,\n });\n const msgForSigning = [];\n\n for (const msg of msgs) {\n const signMsg = await convertToSignable(msg, chain);\n msgForSigning.push(signMsg);\n }\n\n const {\n signatures: [signature],\n } = await signingClient.sign(address, msgForSigning, fee, memo, {\n accountNumber,\n sequence,\n chainId,\n });\n\n const bodyBytes = await buildEncodedTxBody({\n chain,\n memo,\n msgs: msgs.map(parseAminoMessageForDirectSigning),\n });\n\n return { signature: exportSignature(signature as Uint8Array), bodyBytes };\n };\n}\n\nfunction broadcastMultisigTx({\n prefix,\n rpcUrl,\n}: {\n prefix: string;\n rpcUrl: string;\n}) {\n return async function broadcastMultisigTx(\n tx: string,\n signers: MultiSigSigner[],\n membersPubKeys: string[],\n threshold: number,\n bodyBytes: Uint8Array,\n ) {\n const { encodeSecp256k1Pubkey, pubkeyToAddress } = (await import(\"@cosmjs/amino\")).default;\n const { makeMultisignedTxBytes } = (await import(\"@cosmjs/stargate\")).default;\n\n const { sequence, fee } = JSON.parse(tx);\n const multisigPubkey = await createMultisig(membersPubKeys, threshold);\n\n const addressesAndSignatures: [string, Uint8Array][] = signers.map((signer) => [\n pubkeyToAddress(encodeSecp256k1Pubkey(base64.decode(signer.pubKey)), prefix),\n base64.decode(signer.signature),\n ]);\n\n const broadcaster = await createStargateClient(rpcUrl);\n\n const { transactionHash } = await broadcaster.broadcastTx(\n makeMultisignedTxBytes(\n multisigPubkey,\n sequence,\n fee,\n bodyBytes,\n new Map<string, Uint8Array>(addressesAndSignatures),\n ),\n );\n\n return transactionHash;\n };\n}\n\nasync function createMultisig(pubKeys: string[], threshold: number, noSortPubKeys = true) {\n const { createMultisigThresholdPubkey, encodeSecp256k1Pubkey } = (await import(\"@cosmjs/amino\"))\n .default;\n return createMultisigThresholdPubkey(\n pubKeys.map((pubKey) => encodeSecp256k1Pubkey(base64.decode(pubKey))),\n threshold,\n noSortPubKeys,\n );\n}\n\nfunction importSignature(signature: string) {\n return base64.decode(signature);\n}\n\nasync function signWithPrivateKey({\n privateKey,\n message,\n}: {\n privateKey: Uint8Array;\n message: string;\n}) {\n const { Secp256k1 } = (await import(\"@cosmjs/crypto\")).default;\n\n const signature = await Secp256k1.createSignature(base64.decode(message), privateKey);\n return base64.encode(Buffer.concat([signature.r(32), signature.s(32)]));\n}\n\nexport async function createThorchainToolbox({\n chain,\n ...toolboxParams\n}: CosmosToolboxParams<Chain.THORChain | Chain.Maya>) {\n const nodeUrl = SKConfig.get(\"nodeUrls\")[chain];\n const rpcUrl = SKConfig.get(\"rpcUrls\")[chain];\n const { isStagenet } = SKConfig.get(\"envs\");\n const isThorchain = chain === Chain.THORChain;\n const chainPrefix = `${isStagenet ? \"s\" : \"\"}${CosmosChainPrefixes[chain]}`;\n\n const index = \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n\n const derivationPath =\n \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[chain], { index });\n\n const cosmosToolbox = await createCosmosToolbox({\n chain,\n ...toolboxParams,\n });\n\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, ({ phrase }) =>\n cosmosToolbox.getSignerFromPhrase({ phrase, derivationPath }),\n )\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n const defaultFee = getDefaultChainFee(chain);\n\n async function getFees() {\n let fee: SwapKitNumber;\n\n const constantsUrl = `${nodeUrl}/${isThorchain ? \"thorchain\" : \"mayachain\"}/constants`;\n\n try {\n const {\n int_64_values: { NativeTransactionFee: nativeFee },\n } = await RequestClient.get<ThorchainConstantsResponse>(constantsUrl);\n\n if (!nativeFee || Number.isNaN(nativeFee) || nativeFee < 0) {\n throw new SwapKitError(\"toolbox_cosmos_invalid_fee\", { nativeFee: nativeFee.toString() });\n }\n\n fee = new SwapKitNumber(nativeFee);\n } catch {\n fee = new SwapKitNumber({\n value: isThorchain ? 0.02 : 1,\n decimal: BaseDecimal[chain],\n });\n }\n\n return { [FeeOption.Average]: fee, [FeeOption.Fast]: fee, [FeeOption.Fastest]: fee };\n }\n\n async function transfer({\n assetValue,\n memo = \"\",\n recipient,\n }: Omit<GenericTransferParams, \"recipient\"> & { recipient?: string }) {\n const { TxRaw } = await import(\"cosmjs-types/cosmos/tx/v1beta1/tx\");\n const sender = (await signer?.getAccounts())?.[0]?.address;\n if (!(sender && signer)) throw new SwapKitError(\"toolbox_cosmos_no_signer\");\n\n const isAminoSigner = \"signAmino\" in signer;\n const registry = await createDefaultRegistry();\n const aminoTypes = await createDefaultAminoTypes(chain);\n const signingClient = await createSigningStargateClient(rpcUrl, signer, {\n registry,\n aminoTypes,\n });\n\n const aminoMessage = buildAminoMsg({\n assetValue,\n sender,\n recipient,\n memo,\n });\n\n if (isAminoSigner) {\n const msgSign = await convertToSignable(aminoMessage, chain);\n\n const { signatures, authInfoBytes } = await signingClient.sign(\n sender,\n [msgSign],\n defaultFee,\n memo,\n );\n\n const tx = TxRaw.encode({\n signatures,\n authInfoBytes,\n bodyBytes: await buildEncodedTxBody({\n chain,\n msgs: [aminoMessage].map(parseAminoMessageForDirectSigning),\n memo,\n }),\n }).finish();\n\n const txResponse = await signingClient.broadcastTx(tx);\n\n return txResponse.transactionHash;\n }\n\n const preparedMessage = parseAminoMessageForDirectSigning(aminoMessage);\n const msgSign = await convertToSignable(preparedMessage, chain);\n const txResponse = await signingClient.signAndBroadcast(sender, [msgSign], defaultFee, memo);\n\n return txResponse.transactionHash;\n }\n\n return {\n ...cosmosToolbox,\n broadcastMultisigTx: broadcastMultisigTx({ prefix: chainPrefix, rpcUrl }),\n buildAminoMsg,\n buildEncodedTxBody,\n convertToSignable,\n createDefaultAminoTypes: () => createDefaultAminoTypes(chain),\n createDefaultRegistry,\n createMultisig,\n createTransaction: getCreateTransaction(rpcUrl),\n deposit: transfer,\n getFees,\n importSignature,\n parseAminoMessageForDirectSigning,\n secp256k1HdWalletFromMnemonic: secp256k1HdWalletFromMnemonic({\n derivationPath: derivationPathToString(derivationPath),\n prefix: chainPrefix,\n }),\n signMultisigTx: signMultisigTx(chain),\n signWithPrivateKey,\n transfer,\n pubkeyToAddress: async (pubkey: Pubkey) => {\n const { pubkeyToAddress } = (await import(\"@cosmjs/amino\")).default;\n return pubkeyToAddress(pubkey, chainPrefix);\n },\n };\n}\n"
12
+ ],
13
+ "mappings": "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",
14
+ "debugId": "C26BC9474180C69F64756E2164756E21",
15
+ "names": []
16
+ }
@@ -0,0 +1,3 @@
1
+ var Kt={};jt(Kt,{toHexString:()=>Z,toChecksumAddress:()=>qt,isStateChangingCall:()=>Tt,isBrowserProvider:()=>V,getTokenAddress:()=>S,getProvider:()=>k,getNetworkParams:()=>v,getL1GasPriceFetcher:()=>g,getIsEIP1559Compatible:()=>d,getEvmToolbox:()=>ht,getEvmApi:()=>Y,getEstimateTransactionFee:()=>O,getEstimateGasPrices:()=>J,getEIP1193SendTransaction:()=>N,getCreateContractTxObject:()=>W,getCreateContract:()=>bt,getChecksumAddressFromAsset:()=>Jt,evmValidateAddress:()=>pt,estimateMaxSendableAmount:()=>Zt,estimateL1Gas:()=>xt,createCustomEvmApi:()=>Ht,createContract:()=>P,OPToolbox:()=>at,MAX_APPROVAL:()=>K,MATICToolbox:()=>ot,EthNetwork:()=>ct,ETHToolbox:()=>r,BaseEVMToolbox:()=>X,BSCToolbox:()=>yt,BASEToolbox:()=>ut,AVAXToolbox:()=>nt,ARBToolbox:()=>tt});module.exports=_t(Kt);var j=require("@swapkit/helpers");function Y(t){let u=j.SKConfig.get("apis")[t];if(u)return j.warnOnce(!0,"Using custom EVM API. Be sure to implement all methods to avoid issues."),u;return zt(t)}function Ht(t){return t}function zt(t){return{getBalance:mt(t)}}var m=require("@swapkit/helpers");var y=require("@swapkit/helpers"),G=require("@swapkit/helpers/contracts"),x=require("ethers");var K=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");function X({chain:t=y.Chain.Ethereum,provider:u,signer:n,isEIP1559Compatible:o=!0}){return{getAddress:()=>{return n?n.getAddress():void 0},call:F({provider:u,signer:n,isEIP1559Compatible:o,chain:t}),estimateCall:st({provider:u,signer:n}),EIP1193SendTransaction:N(u),approve:Gt({provider:u,signer:n,isEIP1559Compatible:o,chain:t}),approvedAmount:it({provider:u,chain:t}),broadcastTransaction:u.broadcastTransaction,createApprovalTx:Yt({provider:u,signer:n,chain:t}),createContract:bt({provider:u,chain:t}),createContractTxObject:W({provider:u,chain:t}),createTransferTx:A({provider:u,signer:n,chain:t}),createTransaction:A({provider:u,signer:n,chain:t}),estimateGasLimit:$t({provider:u,signer:n,chain:t}),estimateGasPrices:J({chain:t,provider:u,isEIP1559Compatible:o}),isApproved:Ct({provider:u,chain:t}),sendTransaction:wt({provider:u,signer:n,isEIP1559Compatible:o,chain:t}),signMessage:n?.signMessage,transfer:Wt({provider:u,signer:n,isEIP1559Compatible:o,chain:t}),validateAddress:(e)=>pt({address:e})}}function pt({address:t}){try{return x.getAddress(t),!0}catch(u){return!1}}function V(t){return t instanceof x.BrowserProvider}function P(t,u,n){return new x.Contract(t,x.Interface.from(u),n)}function bt({provider:t}){return function u(n,o){return new x.Contract(n,x.Interface.from(o),t)}}var Et=["payable","nonpayable"];function Tt({abi:t,funcName:u}){let n=t.find((o)=>o.name===u);if(!n)throw new y.SwapKitError("toolbox_evm_no_abi_fragment",{funcName:u});return n.stateMutability&&Et.includes(n.stateMutability)}function qt(t){return x.getAddress(t)}function N(t){return function u({value:n,...o}){if(!V(t))throw new y.SwapKitError("toolbox_evm_provider_not_eip1193_compatible");return t.send("eth_sendTransaction",[{value:Z(BigInt(n||0)),...o}])}}function Jt(t,u){let n=S(t,u);if(n)return x.getAddress(n.toLowerCase());throw new y.SwapKitError("toolbox_evm_invalid_gas_asset_address")}var kt={[y.Chain.Arbitrum]:y.ContractAddress.ARB,[y.Chain.Avalanche]:y.ContractAddress.AVAX,[y.Chain.Base]:y.ContractAddress.BASE,[y.Chain.BinanceSmartChain]:y.ContractAddress.BSC,[y.Chain.Ethereum]:y.ContractAddress.ETH,[y.Chain.Optimism]:y.ContractAddress.OP,[y.Chain.Polygon]:y.ContractAddress.MATIC};function S({chain:t,symbol:u,ticker:n},o){try{let e=t===y.Chain.BinanceSmartChain&&u==="BNB"&&n==="BNB",l=t===o&&u===o&&n===o,a=[y.Chain.Arbitrum,y.Chain.Base].includes(t)&&u==="ETH"&&n==="ETH";if(l||e||a)return kt[o];return x.getAddress(u.slice(n.length+1).replace(/^0X/,""))}catch(e){return null}}function W({provider:t}){return async({contractAddress:u,abi:n,funcName:o,funcParams:e=[],txOverrides:l})=>P(u,n,t).getFunction(o).populateTransaction(...e.concat(l).filter((a)=>typeof a!=="undefined"))}function J({chain:t,provider:u,isEIP1559Compatible:n=!0}){if(t===y.Chain.Arbitrum)return async function o(){try{let{gasPrice:e}=await u.getFeeData();if(!e)throw new y.SwapKitError("toolbox_evm_no_fee_data");return{[y.FeeOption.Average]:{gasPrice:e},[y.FeeOption.Fast]:{gasPrice:e},[y.FeeOption.Fastest]:{gasPrice:e}}}catch(e){throw new y.SwapKitError("toolbox_evm_gas_estimation_error",{error:e.msg??e.toString()})}};if(t===y.Chain.Optimism)return async function o(){try{let{maxFeePerGas:e,maxPriorityFeePerGas:l,gasPrice:a}=await u.getFeeData(),b=g(u)(),p=a;if(!(e&&l))throw new y.SwapKitError("toolbox_evm_no_fee_data");return{[y.FeeOption.Average]:{l1GasPrice:b,gasPrice:p,maxFeePerGas:e,maxPriorityFeePerGas:l},[y.FeeOption.Fast]:{l1GasPrice:y.applyFeeMultiplierToBigInt(b||0n,y.FeeOption.Fast),gasPrice:y.applyFeeMultiplierToBigInt(p,y.FeeOption.Fast),maxFeePerGas:e,maxPriorityFeePerGas:y.applyFeeMultiplierToBigInt(l,y.FeeOption.Fast)},[y.FeeOption.Fastest]:{l1GasPrice:y.applyFeeMultiplierToBigInt(b||0n,y.FeeOption.Fastest),gasPrice:y.applyFeeMultiplierToBigInt(p,y.FeeOption.Fastest),maxFeePerGas:e,maxPriorityFeePerGas:y.applyFeeMultiplierToBigInt(l,y.FeeOption.Fastest)}}}catch(e){throw new y.SwapKitError("toolbox_evm_gas_estimation_error",{error:e.msg??e.toString()})}};return async function o(){try{let{maxFeePerGas:e,maxPriorityFeePerGas:l,gasPrice:a}=await u.getFeeData();if(n){if(e===null||l===null)throw new y.SwapKitError("toolbox_evm_no_fee_data");return{[y.FeeOption.Average]:{maxFeePerGas:e,maxPriorityFeePerGas:l},[y.FeeOption.Fast]:{maxFeePerGas:y.applyFeeMultiplierToBigInt(e,y.FeeOption.Fast),maxPriorityFeePerGas:y.applyFeeMultiplierToBigInt(l,y.FeeOption.Fast)},[y.FeeOption.Fastest]:{maxFeePerGas:y.applyFeeMultiplierToBigInt(e,y.FeeOption.Fastest),maxPriorityFeePerGas:y.applyFeeMultiplierToBigInt(l,y.FeeOption.Fastest)}}}if(!a)throw new y.SwapKitError("toolbox_evm_no_gas_price");return{[y.FeeOption.Average]:{gasPrice:a},[y.FeeOption.Fast]:{gasPrice:y.applyFeeMultiplierToBigInt(a,y.FeeOption.Fast)},[y.FeeOption.Fastest]:{gasPrice:y.applyFeeMultiplierToBigInt(a,y.FeeOption.Fastest)}}}catch(e){throw new y.SwapKitError("toolbox_evm_gas_estimation_error",{error:e.msg??e.toString()})}}}function F({provider:t,isEIP1559Compatible:u,signer:n,chain:o}){return async function e({callProvider:l,contractAddress:a,abi:b,funcName:p,funcParams:i=[],txOverrides:s={},feeOption:M=y.FeeOption.Fast}){let T=l||t;if(!a)throw new y.SwapKitError("toolbox_evm_invalid_params",{error:"contractAddress must be provided"});let w=Tt({abi:b,funcName:p});if(w&&V(T)&&n){let D=W({provider:T,chain:o}),U=s?.from||await n?.getAddress(),L=await D({contractAddress:a,abi:b,funcName:p,funcParams:i,txOverrides:{...s,from:U}});return N(T)(L)}let c=P(a,b,T);if(w){if(!n)throw new y.SwapKitError("toolbox_evm_no_signer");let D=s?.from||await n.getAddress();if(!D)throw new y.SwapKitError("toolbox_evm_no_signer_address");let U=c.connect(n),L=J({provider:t,isEIP1559Compatible:u,chain:o}),{maxFeePerGas:E,maxPriorityFeePerGas:R,gasPrice:q}=(await L())[M],Q=await c.getFunction(p).estimateGas(...i,s),_=await U[p](...i,{...s,gasLimit:Q,maxFeePerGas:E,maxPriorityFeePerGas:R,gasPrice:q,nonce:s?.nonce||await T.getTransactionCount(D)});return typeof _?.hash==="string"?_?.hash:_}let B=await c[p]?.(...i);return typeof B?.hash==="string"?B?.hash:B}}function it({provider:t,chain:u}){return function n({assetAddress:o,spenderAddress:e,from:l}){return F({provider:t,isEIP1559Compatible:!0,chain:u})({contractAddress:o,abi:G.erc20ABI,funcName:"allowance",funcParams:[l,e]})}}function Ct({provider:t,chain:u}){return async function n({assetAddress:o,spenderAddress:e,from:l,amount:a=K}){let b=await it({provider:t,chain:u})({assetAddress:o,spenderAddress:e,from:l});return y.SwapKitNumber.fromBigInt(b).gte(y.SwapKitNumber.fromBigInt(BigInt(a)))}}function Gt({signer:t,isEIP1559Compatible:u=!0,provider:n,chain:o}){return async function e({assetAddress:l,spenderAddress:a,feeOptionKey:b=y.FeeOption.Fast,amount:p,gasLimitFallback:i,from:s,nonce:M}){let T=[a,BigInt(p||K)],w=await t?.getAddress()||s,c={contractAddress:l,abi:G.erc20ABI,funcName:"approve",funcParams:T,signer:t,txOverrides:{from:w}};if(V(n)){let D=W({provider:n,chain:o}),U=N(n),L=await D(c);return U(L)}return F({provider:n,isEIP1559Compatible:u,signer:t,chain:o})({...c,funcParams:T,txOverrides:{from:w,nonce:M,gasLimit:i?BigInt(i.toString()):void 0},feeOption:b})}}function Wt({signer:t,isEIP1559Compatible:u=!0,provider:n}){return async function o({assetValue:e,memo:l,recipient:a,feeOptionKey:b=y.FeeOption.Fast,sender:p,...i}){let{hexlify:s,toUtf8Bytes:M}=await import("ethers"),T=e.getBaseValue("bigint"),w=e.chain,c=p||await t?.getAddress(),B=wt({provider:n,signer:t,isEIP1559Compatible:u,chain:w});if(!c)throw new y.SwapKitError("toolbox_evm_no_from_address");if(e.isGasAsset){let q={...i,from:c,to:a,value:T,data:s(M(l||"")),feeOptionKey:b};return B(q)}if(!S(e,w))throw new y.SwapKitError("toolbox_evm_no_contract_address");let{maxFeePerGas:U,maxPriorityFeePerGas:L,gasPrice:E}=(await J({provider:n,isEIP1559Compatible:u,chain:w})())[b],R=await A({provider:n,signer:t,chain:w})({assetValue:e,memo:l,recipient:a,data:s(M(l||"")),sender:c,maxFeePerGas:U,maxPriorityFeePerGas:L,gasPrice:E});return B(R)}}function st({provider:t,signer:u}){return function n({contractAddress:o,abi:e,funcName:l,funcParams:a=[],txOverrides:b}){if(!o)throw new y.SwapKitError("toolbox_evm_no_contract_address");let p=P(o,e,t);return u?p.connect(u).getFunction(l).estimateGas(...a,b):p.getFunction(l).estimateGas(...a,b)}}function $t({provider:t,signer:u}){return async function n({assetValue:o,recipient:e,memo:l,data:a,sender:b,funcName:p,funcParams:i,txOverrides:s}){let M=o.bigIntValue,T=o.isGasAsset?null:S(o,o.chain);if(T&&p)return st({provider:t,signer:u})({contractAddress:T,abi:G.erc20ABI,funcName:p,funcParams:i,txOverrides:s});let{hexlify:w,toUtf8Bytes:c}=await import("ethers");return t.estimateGas({from:b,to:e,value:M,data:a?a:l?w(c(l)):void 0})}}var Qt=(t)=>t.type===2||!!t.maxFeePerGas||!!t.maxPriorityFeePerGas;function wt({provider:t,signer:u,isEIP1559Compatible:n=!0,chain:o}){return async function e({feeOptionKey:l=y.FeeOption.Fast,...a}){let{from:b,to:p,data:i,value:s,...M}=a;if(!u)throw new y.SwapKitError("toolbox_evm_no_signer");if(!p)throw new y.SwapKitError("toolbox_evm_no_to_address");let T={...M,data:i||"0x",to:p,from:b,value:BigInt(s||0)};if(V(t))return N(t)(T);let w=b||await u.getAddress(),c=a.nonce||await t.getTransactionCount(w),B=(await t.getNetwork()).chainId,D=Qt(T)||n,U=J({provider:t,isEIP1559Compatible:n,chain:o}),L=D&&!(T.maxFeePerGas&&T.maxPriorityFeePerGas)||!T.gasPrice?Object.entries((await U())[l]).reduce((R,[q,Q])=>({...R,[q]:Z(BigInt(Q))}),{}):{},E;try{E=Z(T.gasLimit||await t.estimateGas(T)*11n/10n)}catch(R){throw new y.SwapKitError("toolbox_evm_error_estimating_gas_limit",{error:R})}try{let R={...T,chainId:B,type:D?2:0,gasLimit:E,nonce:c,...L};try{return(await u.sendTransaction(R)).hash}catch(q){let Q=await u.signTransaction({...R,from:w});return(await t.broadcastTransaction(Q)).hash}}catch(R){throw new y.SwapKitError("toolbox_evm_error_sending_transaction",{error:R})}}}function A({provider:t,signer:u}){return async function n({assetValue:o,memo:e,recipient:l,data:a,sender:b,maxFeePerGas:p,maxPriorityFeePerGas:i,gasPrice:s,...M}){let T=o.getBaseValue("bigint"),w=o.chain,c=b||await u?.getAddress();if(!c)throw new y.SwapKitError("toolbox_evm_no_from_address");if(y.isGasAsset(o)){let{hexlify:U,toUtf8Bytes:L}=await import("ethers");return{...M,from:c,to:l,value:T,data:a||U(L(e||""))}}let B=S(o,w);if(!B)throw new y.SwapKitError("toolbox_evm_no_contract_address");return W({provider:t,chain:o.chain})({contractAddress:B,abi:G.erc20ABI,funcName:"transfer",funcParams:[l,T],txOverrides:{from:c,maxFeePerGas:p,maxPriorityFeePerGas:i,gasPrice:s}})}}function Yt({provider:t,signer:u,chain:n}){return async function o({assetAddress:e,spenderAddress:l,amount:a,from:b}){let p=await u?.getAddress()||b,i=W({provider:t,chain:n}),s=[l,BigInt(a||K)];return await i({contractAddress:e,abi:G.erc20ABI,funcName:"approve",funcParams:s,txOverrides:{from:p}})}}async function k(t,u){let{JsonRpcProvider:n}=await import("ethers");return new n(u||m.SKConfig.get("rpcUrls")[t])}var Zt=async({from:t,memo:u="",feeOptionKey:n=m.FeeOption.Fastest,assetValue:o,abi:e,funcName:l,funcParams:a,contractAddress:b,txOverrides:p})=>{let{getEvmToolbox:i}=await import("@swapkit/toolboxes/evm"),s=await i(o.chain),T=(await s.getBalance(t)).find(({symbol:R,chain:q})=>o?R===o.symbol:R===m.AssetValue.from({chain:q})?.symbol),w=(await s.estimateGasPrices())[n];if(!T)return m.AssetValue.from({chain:o.chain});if(o&&(T.chain!==o.chain||T.symbol!==o?.symbol))return T;let c=e&&l&&a&&b?await s.estimateCall({contractAddress:b,abi:e,funcName:l,funcParams:a,txOverrides:p}):await s.estimateGasLimit({sender:t,recipient:t,memo:u,assetValue:o}),B="maxFeePerGas"in w,D="gasPrice"in w&&w.gasPrice!==void 0;if(!(w&&(D||B)))throw new m.SwapKitError("toolbox_evm_no_fee_data");let U=B?(w.maxFeePerGas||1n)+(w.maxPriorityFeePerGas||1n):w.gasPrice||1n,L=c*U,E=m.SwapKitNumber.fromBigInt(T.getBaseValue("bigint")).sub(L.toString());return m.AssetValue.from({chain:T.chain,value:E.getValue("string")})};function Z(t){return t>0n?`0x${t.toString(16)}`:"0x0"}function O({provider:t,isEIP1559Compatible:u=!0}){return async function n({feeOption:o=m.FeeOption.Fast,chain:e,...l}){let b=await J({provider:t,isEIP1559Compatible:u,chain:e})(),p=await t.estimateGas(l),i=m.AssetValue.from({chain:e}),{gasPrice:s,maxFeePerGas:M,maxPriorityFeePerGas:T}=b[o];if(!u&&s)return i.set(m.SwapKitNumber.fromBigInt(s*p,i.decimal));if(M&&T){let w=(M+T)*p;return i.set(m.SwapKitNumber.fromBigInt(w,i.decimal))}throw new m.SwapKitError("toolbox_evm_no_gas_price")}}function v(t){return()=>m.Chain.Ethereum===t?void 0:{...Xt({chain:t}),chainId:m.ChainToHexChainId[t],rpcUrls:[m.SKConfig.get("rpcUrls")[t]],blockExplorerUrls:[m.ChainToExplorerUrl[t]]}}function d(t){return![m.Chain.Arbitrum,m.Chain.BinanceSmartChain].includes(t)}function Xt({chain:t}){let u=m.BaseDecimal[t];switch(t){case m.Chain.Arbitrum:return{chainName:"Arbitrum One",nativeCurrency:{name:"Ethereum",symbol:m.Chain.Ethereum,decimals:u}};case m.Chain.Avalanche:return{chainName:"Avalanche Network",nativeCurrency:{name:"Avalanche",symbol:t,decimals:u}};case m.Chain.Base:return{chainName:"Base Mainnet",nativeCurrency:{name:"Ethereum",symbol:m.Chain.Ethereum,decimals:u}};case m.Chain.BinanceSmartChain:return{chainName:"BNB Chain",nativeCurrency:{name:"Binance Coin",symbol:"BNB",decimals:u}};case m.Chain.Polygon:return{chainName:"Polygon Mainnet",nativeCurrency:{name:"Polygon",symbol:m.Chain.Polygon,decimals:u}};default:throw new m.SwapKitError("toolbox_evm_not_supported",{chain:t})}}var ct;((n)=>{n.Test="goerli";n.Main="homestead"})(ct||={});var z=require("@swapkit/helpers");var H=require("@swapkit/helpers"),ft=require("ethers"),h=require("ts-pattern");var Mt=[{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes[]",name:"returnData",type:"bytes[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"blockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall2.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBlockNumber",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockCoinbase",outputs:[{internalType:"address",name:"coinbase",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockDifficulty",outputs:[{internalType:"uint256",name:"difficulty",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockGasLimit",outputs:[{internalType:"uint256",name:"gaslimit",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockTimestamp",outputs:[{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"addr",type:"address"}],name:"getEthBalance",outputs:[{internalType:"uint256",name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"tryAggregate",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall2.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"tryBlockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall2.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"nonpayable",type:"function"}];async function r({provider:t,...u}){let n=await $(H.Chain.Ethereum)({provider:t,...u});async function o(e,l="0x5ba1e12693dc8f9c48aad8770482f4739beed696",a="aggregate",b=H.FeeOption.Fast){let p=await n.createContractTxObject({contractAddress:l,abi:Mt,funcName:a,funcParams:[e]});return n.sendTransaction({...p,feeOptionKey:b})}return{...n,multicall:o}}var tt=$(H.Chain.Arbitrum),nt=$(H.Chain.Avalanche),ut=$(H.Chain.Base),yt=$(H.Chain.BinanceSmartChain),ot=$(H.Chain.Polygon);function $(t){return async function u({provider:n,...o}){let e=H.SKConfig.get("rpcUrls")[t],l=n||await k(t,e),a=d(t),b=h.match(o).with({phrase:h.P.string},({phrase:i})=>ft.HDNodeWallet.fromPhrase(i).connect(l)).with({signer:h.P.any},({signer:i})=>i).otherwise(()=>{return});return{...X({provider:l,signer:b,isEIP1559Compatible:a,chain:t}),estimateTransactionFee:O({provider:l,isEIP1559Compatible:a,chain:t}),getNetworkParams:v(t),getBalance:Y(t).getBalance}}}var f=require("@swapkit/helpers"),I=require("ethers"),et=require("ts-pattern"),Rt=require("ts-pattern");var Bt=[{inputs:[{internalType:"address",name:"_owner",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"DecimalsUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"GasPriceUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"L1BaseFeeUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"OverheadUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"ScalarUpdated",type:"event"},{inputs:[],name:"decimals",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"gasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_data",type:"bytes"}],name:"getL1Fee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_data",type:"bytes"}],name:"getL1GasUsed",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"l1BaseFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"overhead",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"scalar",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_decimals",type:"uint256"}],name:"setDecimals",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_gasPrice",type:"uint256"}],name:"setGasPrice",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_baseFee",type:"uint256"}],name:"setL1BaseFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_overhead",type:"uint256"}],name:"setOverhead",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_scalar",type:"uint256"}],name:"setScalar",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"}];var Vt="0x420000000000000000000000000000000000000f";function lt(t){return new I.Contract(Vt,Bt,t)}function g(t){return function u(){let n=lt(t);if(n&&"l1BaseFee"in n)return n?.l1BaseFee();return}}function Dt(t){return async function u({from:n,to:o,nonce:e,...l}){let{Transaction:a}=await import("ethers");if(!o)throw new f.SwapKitError("toolbox_evm_invalid_transaction",{error:"Missing to address"});return a.from({...l,authorizationList:l.authorizationList,to:o,nonce:e?e:n?await t.getTransactionCount(n):0}).serialized}}function Ut(t){return async function u(n){let o=lt(t),e=await Dt(t)(n);if(o&&"getL1Fee"in o)return o.getL1Fee(e)}}function Lt(t){return async function u(n){let o=await t.send("eth_gasPrice",[]),e=await t.estimateGas(n);return o.mul(e)}}function Nt(t){return async function u(n){let o=await Ut(t)(n),e=await Lt(t)(n);return o.add(e)}}function xt(t){return async function u(n){let o=lt(t),e=await Dt(t)(n);if(o&&"getL1GasUsed"in o)return o.getL1GasUsed(e)}}var St=()=>({chainId:f.ChainId.OptimismHex,chainName:"Optimism",nativeCurrency:{name:"Ethereum",symbol:f.Chain.Ethereum,decimals:f.BaseDecimal.ETH},rpcUrls:[f.SKConfig.get("rpcUrls")[f.Chain.Optimism]],blockExplorerUrls:[f.ChainToExplorerUrl[f.Chain.Optimism]]});async function at({provider:t,...u}){let n=f.Chain.Optimism,o=f.SKConfig.get("rpcUrls")[n],e=t||await k(n,o),l=Rt.match(u).with({phrase:et.P.string},({phrase:p})=>I.HDNodeWallet.fromPhrase(p).connect(e)).with({signer:et.P.any},({signer:p})=>p).otherwise(()=>{return}),a=X({provider:e,signer:l}),b=g(e);return{...a,estimateL1Gas:xt(e),estimateL1GasCost:Ut(e),estimateL2GasCost:Lt(e),estimateTotalGasCost:Nt(e),getBalance:Y(f.Chain.Optimism).getBalance,getL1GasPrice:b,getNetworkParams:St}}async function ht(t,u){let n={...u,provider:u?.provider||await k(t)};switch(t){case z.Chain.Avalanche:return nt(n);case z.Chain.Arbitrum:return tt(n);case z.Chain.Base:return ut(n);case z.Chain.Optimism:return at(n);case z.Chain.Polygon:return ot(n);case z.Chain.BinanceSmartChain:return yt(n);case z.Chain.Ethereum:return r(n);default:throw new z.SwapKitError("toolbox_evm_not_supported",{chain:t})}}
2
+
3
+ //# debugId=2FAA048700C229CE64756E2164756E21
@@ -0,0 +1,18 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/evm/api.ts", "../src/evm/helpers.ts", "../src/evm/toolbox/baseEVMToolbox.ts", "../src/evm/types.ts", "../src/evm/toolbox/index.ts", "../src/evm/toolbox/evm.ts", "../src/evm/contracts/eth/multicall.ts", "../src/evm/toolbox/op.ts", "../src/evm/contracts/op/gasOracle.ts"],
4
+ "sourcesContent": [
5
+ "import { type EVMChain, SKConfig, warnOnce } from \"@swapkit/helpers\";\nimport { getBalance } from \"../utils\";\n\nexport function getEvmApi(chain: EVMChain) {\n const customEvmApi = SKConfig.get(\"apis\")[chain];\n\n if (customEvmApi) {\n warnOnce(true, \"Using custom EVM API. Be sure to implement all methods to avoid issues.\");\n return customEvmApi as ReturnType<typeof evmApi>;\n }\n\n return evmApi(chain);\n}\n\nexport function createCustomEvmApi(methods: ReturnType<typeof getEvmApi>) {\n return methods;\n}\n\nfunction evmApi(chain: EVMChain) {\n return { getBalance: getBalance(chain) };\n}\n",
6
+ "import {\n AssetValue,\n BaseDecimal,\n Chain,\n ChainToExplorerUrl,\n ChainToHexChainId,\n type EVMChain,\n FeeOption,\n type NetworkParams,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\nimport type { BrowserProvider, Provider } from \"ethers\";\n\nimport { getEstimateGasPrices } from \"./toolbox/baseEVMToolbox\";\nimport type { EIP1559TxParams, EVMMaxSendableAmountsParams } from \"./types\";\n\nexport async function getProvider(chain: EVMChain, customUrl?: string) {\n const { JsonRpcProvider } = await import(\"ethers\");\n\n return new JsonRpcProvider(customUrl || SKConfig.get(\"rpcUrls\")[chain]);\n}\n\n/**\n * @deprecated\n */\nexport const estimateMaxSendableAmount = async ({\n from,\n memo = \"\",\n feeOptionKey = FeeOption.Fastest,\n assetValue,\n abi,\n funcName,\n funcParams,\n contractAddress,\n txOverrides,\n}: EVMMaxSendableAmountsParams): Promise<AssetValue> => {\n const { getEvmToolbox } = await import(\"@swapkit/toolboxes/evm\");\n const toolbox = await getEvmToolbox(assetValue.chain as EVMChain);\n\n const balances = await toolbox.getBalance(from);\n const balance = balances.find(({ symbol, chain }) =>\n assetValue ? symbol === assetValue.symbol : symbol === AssetValue.from({ chain })?.symbol,\n );\n\n const gasRate = (await toolbox.estimateGasPrices())[feeOptionKey];\n\n if (!balance) return AssetValue.from({ chain: assetValue.chain });\n\n if (assetValue && (balance.chain !== assetValue.chain || balance.symbol !== assetValue?.symbol)) {\n return balance;\n }\n\n const gasLimit =\n abi && funcName && funcParams && contractAddress\n ? await toolbox.estimateCall({\n contractAddress,\n abi,\n funcName,\n funcParams,\n txOverrides,\n })\n : await toolbox.estimateGasLimit({\n sender: from,\n recipient: from,\n memo,\n assetValue,\n });\n\n const isFeeEIP1559Compatible = \"maxFeePerGas\" in gasRate;\n const isFeeEVMLegacyCompatible = \"gasPrice\" in gasRate && gasRate.gasPrice !== undefined;\n\n if (!(gasRate && (isFeeEVMLegacyCompatible || isFeeEIP1559Compatible))) {\n throw new SwapKitError(\"toolbox_evm_no_fee_data\");\n }\n\n const gasPrice = isFeeEIP1559Compatible\n ? (gasRate.maxFeePerGas || 1n) + (gasRate.maxPriorityFeePerGas || 1n)\n : gasRate.gasPrice || 1n;\n\n const fee = gasLimit * gasPrice;\n const maxSendableAmount = SwapKitNumber.fromBigInt(balance.getBaseValue(\"bigint\")).sub(\n fee.toString(),\n );\n\n return AssetValue.from({ chain: balance.chain, value: maxSendableAmount.getValue(\"string\") });\n};\n\nexport function toHexString(value: bigint) {\n return value > 0n ? `0x${value.toString(16)}` : \"0x0\";\n}\n\nexport function getEstimateTransactionFee({\n provider,\n isEIP1559Compatible = true,\n}: { provider: Provider | BrowserProvider; isEIP1559Compatible?: boolean; chain: EVMChain }) {\n return async function estimateTransactionFee({\n feeOption = FeeOption.Fast,\n chain,\n ...txObject\n }: EIP1559TxParams & { feeOption: FeeOption; chain: EVMChain }) {\n const estimateGasPrices = getEstimateGasPrices({ provider, isEIP1559Compatible, chain });\n const gasPrices = await estimateGasPrices();\n const gasLimit = await provider.estimateGas(txObject);\n\n const assetValue = AssetValue.from({ chain });\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = gasPrices[feeOption];\n\n if (!isEIP1559Compatible && gasPrice) {\n return assetValue.set(SwapKitNumber.fromBigInt(gasPrice * gasLimit, assetValue.decimal));\n }\n\n if (maxFeePerGas && maxPriorityFeePerGas) {\n const fee = (maxFeePerGas + maxPriorityFeePerGas) * gasLimit;\n\n return assetValue.set(SwapKitNumber.fromBigInt(fee, assetValue.decimal));\n }\n\n throw new SwapKitError(\"toolbox_evm_no_gas_price\");\n };\n}\n\nexport function getNetworkParams<C extends EVMChain>(chain: C) {\n return () =>\n (Chain.Ethereum === chain\n ? undefined\n : {\n ...getNetworkInfo({ chain }),\n chainId: ChainToHexChainId[chain],\n rpcUrls: [SKConfig.get(\"rpcUrls\")[chain]],\n blockExplorerUrls: [ChainToExplorerUrl[chain]],\n }) as C extends Chain.Ethereum ? undefined : NetworkParams;\n}\n\nexport function getIsEIP1559Compatible<C extends EVMChain>(chain: C) {\n const notCompatible = [Chain.Arbitrum, Chain.BinanceSmartChain];\n\n return !notCompatible.includes(chain);\n}\n\nfunction getNetworkInfo<C extends EVMChain>({ chain }: { chain: C }) {\n const decimals = BaseDecimal[chain];\n\n switch (chain) {\n case Chain.Arbitrum:\n return {\n chainName: \"Arbitrum One\",\n nativeCurrency: { name: \"Ethereum\", symbol: Chain.Ethereum, decimals },\n };\n case Chain.Avalanche:\n return {\n chainName: \"Avalanche Network\",\n nativeCurrency: { name: \"Avalanche\", symbol: chain, decimals },\n };\n case Chain.Base:\n return {\n chainName: \"Base Mainnet\",\n nativeCurrency: { name: \"Ethereum\", symbol: Chain.Ethereum, decimals },\n };\n case Chain.BinanceSmartChain:\n return {\n chainName: \"BNB Chain\",\n nativeCurrency: { name: \"Binance Coin\", symbol: \"BNB\", decimals },\n };\n case Chain.Polygon:\n return {\n chainName: \"Polygon Mainnet\",\n nativeCurrency: { name: \"Polygon\", symbol: Chain.Polygon, decimals },\n };\n default:\n throw new SwapKitError(\"toolbox_evm_not_supported\", { chain });\n }\n}\n",
7
+ "import {\n type Asset,\n type AssetValue,\n Chain,\n type ChainSigner,\n ContractAddress,\n type EVMChain,\n FeeOption,\n SwapKitError,\n SwapKitNumber,\n applyFeeMultiplierToBigInt,\n isGasAsset,\n} from \"@swapkit/helpers\";\nimport { erc20ABI } from \"@swapkit/helpers/contracts\";\nimport {\n BrowserProvider,\n Contract,\n type ContractTransaction,\n type Fragment,\n type HDNodeWallet,\n Interface,\n type JsonFragment,\n type JsonRpcSigner,\n type Provider,\n type Signer,\n getAddress,\n} from \"ethers\";\n\nimport { getL1GasPriceFetcher, toHexString } from \"../index\";\nimport type {\n ApproveParams,\n CallParams,\n EIP1559TxParams,\n EVMCreateTransactionParams,\n EVMTransferParams,\n EVMTxParams,\n EstimateCallParams,\n IsApprovedParams,\n LegacyEVMTxParams,\n} from \"../types\";\n\ntype ToolboxWrapParams<P = Provider | BrowserProvider, T = {}> = T & {\n isEIP1559Compatible?: boolean;\n provider: P;\n signer?: Signer;\n chain: EVMChain;\n};\n\nexport const MAX_APPROVAL = BigInt(\n \"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",\n);\n\nexport function BaseEVMToolbox<\n P extends Provider | BrowserProvider,\n S extends\n | (ChainSigner<EVMTransferParams, string> & Signer)\n | JsonRpcSigner\n | HDNodeWallet\n | undefined,\n>({\n chain = Chain.Ethereum,\n provider,\n signer,\n isEIP1559Compatible = true,\n}: { signer: S; provider: P; isEIP1559Compatible?: boolean; chain?: EVMChain }) {\n return {\n getAddress: () => {\n return signer ? signer.getAddress() : undefined;\n },\n call: getCall({ provider, signer, isEIP1559Compatible, chain }),\n estimateCall: getEstimateCall({ provider, signer }),\n EIP1193SendTransaction: getEIP1193SendTransaction(provider),\n approve: getApprove({ provider, signer, isEIP1559Compatible, chain }),\n approvedAmount: getApprovedAmount({ provider, chain }),\n broadcastTransaction: provider.broadcastTransaction,\n createApprovalTx: getCreateApprovalTx({ provider, signer, chain }),\n createContract: getCreateContract({ provider, chain }),\n createContractTxObject: getCreateContractTxObject({ provider, chain }),\n createTransferTx: getCreateTransferTx({ provider, signer, chain }),\n createTransaction: getCreateTransferTx({ provider, signer, chain }),\n estimateGasLimit: getEstimateGasLimit({ provider, signer, chain }),\n estimateGasPrices: getEstimateGasPrices({ chain, provider, isEIP1559Compatible }),\n isApproved: getIsApproved({ provider, chain }),\n sendTransaction: getSendTransaction({ provider, signer, isEIP1559Compatible, chain }),\n signMessage: signer?.signMessage,\n transfer: getTransfer({ provider, signer, isEIP1559Compatible, chain }),\n validateAddress: (address: string) => evmValidateAddress({ address }),\n };\n}\n\nexport function evmValidateAddress({ address }: { address: string }) {\n try {\n getAddress(address);\n return true;\n } catch (_error) {\n return false;\n }\n}\n\nexport function isBrowserProvider(provider: any) {\n return provider instanceof BrowserProvider;\n}\n\nexport function createContract(\n address: string,\n abi: readonly (JsonFragment | Fragment)[],\n provider: Provider,\n) {\n return new Contract(address, Interface.from(abi), provider);\n}\n\nexport function getCreateContract({ provider }: ToolboxWrapParams) {\n return function createContract(address: string, abi: readonly (JsonFragment | Fragment)[]) {\n return new Contract(address, Interface.from(abi), provider);\n };\n}\n\nconst stateMutable = [\"payable\", \"nonpayable\"];\n// const nonStateMutable = ['view', 'pure'];\nexport function isStateChangingCall({\n abi,\n funcName,\n}: { abi: readonly JsonFragment[]; funcName: string }) {\n const abiFragment = abi.find((fragment: any) => fragment.name === funcName) as any;\n if (!abiFragment) throw new SwapKitError(\"toolbox_evm_no_abi_fragment\", { funcName });\n return abiFragment.stateMutability && stateMutable.includes(abiFragment.stateMutability);\n}\n\nexport function toChecksumAddress(address: string) {\n return getAddress(address);\n}\n\nexport function getEIP1193SendTransaction(provider: Provider | BrowserProvider) {\n return function EIP1193SendTransaction({\n value,\n ...params\n }: EVMTxParams | ContractTransaction): Promise<string> {\n if (!isBrowserProvider(provider)) {\n throw new SwapKitError(\"toolbox_evm_provider_not_eip1193_compatible\");\n }\n\n return (provider as BrowserProvider).send(\"eth_sendTransaction\", [\n { value: toHexString(BigInt(value || 0)), ...params } as any,\n ]);\n };\n}\n\nexport function getChecksumAddressFromAsset(asset: Asset, chain: EVMChain) {\n const assetAddress = getTokenAddress(asset, chain);\n\n if (assetAddress) {\n return getAddress(assetAddress.toLowerCase());\n }\n\n throw new SwapKitError(\"toolbox_evm_invalid_gas_asset_address\");\n}\n\nconst baseAssetAddress: Record<EVMChain, string> = {\n [Chain.Arbitrum]: ContractAddress.ARB,\n [Chain.Avalanche]: ContractAddress.AVAX,\n [Chain.Base]: ContractAddress.BASE,\n [Chain.BinanceSmartChain]: ContractAddress.BSC,\n [Chain.Ethereum]: ContractAddress.ETH,\n [Chain.Optimism]: ContractAddress.OP,\n [Chain.Polygon]: ContractAddress.MATIC,\n};\nexport function getTokenAddress({ chain, symbol, ticker }: Asset, baseAssetChain: EVMChain) {\n try {\n const isBSCBNB = chain === Chain.BinanceSmartChain && symbol === \"BNB\" && ticker === \"BNB\";\n const isBaseAsset =\n chain === baseAssetChain && symbol === baseAssetChain && ticker === baseAssetChain;\n const isEVMAsset =\n [Chain.Arbitrum, Chain.Base].includes(chain) && symbol === \"ETH\" && ticker === \"ETH\";\n\n if (isBaseAsset || isBSCBNB || isEVMAsset) {\n return baseAssetAddress[baseAssetChain];\n }\n\n // strip 0X only - 0x is still valid\n return getAddress(symbol.slice(ticker.length + 1).replace(/^0X/, \"\"));\n } catch (_error) {\n return null;\n }\n}\n\nexport function getCreateContractTxObject({ provider }: ToolboxWrapParams) {\n return async ({ contractAddress, abi, funcName, funcParams = [], txOverrides }: CallParams) =>\n createContract(contractAddress, abi, provider)\n .getFunction(funcName)\n .populateTransaction(\n ...funcParams.concat(txOverrides).filter((p) => typeof p !== \"undefined\"),\n );\n}\n\nexport function getEstimateGasPrices({\n chain,\n provider,\n isEIP1559Compatible = true,\n}: { provider: Provider; isEIP1559Compatible?: boolean; chain: EVMChain }): () => Promise<{\n [key in FeeOption]: {\n l1GasPrice?: bigint;\n gasPrice?: bigint;\n maxFeePerGas?: bigint;\n maxPriorityFeePerGas?: bigint;\n };\n}> {\n if (chain === Chain.Arbitrum) {\n return async function estimateGasPrices() {\n try {\n const { gasPrice } = await provider.getFeeData();\n\n if (!gasPrice) throw new SwapKitError(\"toolbox_evm_no_fee_data\");\n\n return {\n [FeeOption.Average]: { gasPrice },\n [FeeOption.Fast]: { gasPrice },\n [FeeOption.Fastest]: { gasPrice },\n };\n } catch (error) {\n throw new SwapKitError(\"toolbox_evm_gas_estimation_error\", {\n error: (error as any).msg ?? (error as any).toString(),\n });\n }\n };\n }\n\n if (chain === Chain.Optimism) {\n return async function estimateGasPrices() {\n try {\n const { maxFeePerGas, maxPriorityFeePerGas, gasPrice } = await provider.getFeeData();\n const l1GasPrice = getL1GasPriceFetcher(provider)();\n const price = gasPrice as bigint;\n\n if (!(maxFeePerGas && maxPriorityFeePerGas)) {\n throw new SwapKitError(\"toolbox_evm_no_fee_data\");\n }\n\n return {\n [FeeOption.Average]: {\n l1GasPrice,\n gasPrice: price,\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n [FeeOption.Fast]: {\n l1GasPrice: applyFeeMultiplierToBigInt(l1GasPrice || 0n, FeeOption.Fast),\n gasPrice: applyFeeMultiplierToBigInt(price, FeeOption.Fast),\n maxFeePerGas,\n maxPriorityFeePerGas: applyFeeMultiplierToBigInt(maxPriorityFeePerGas, FeeOption.Fast),\n },\n [FeeOption.Fastest]: {\n l1GasPrice: applyFeeMultiplierToBigInt(l1GasPrice || 0n, FeeOption.Fastest),\n gasPrice: applyFeeMultiplierToBigInt(price, FeeOption.Fastest),\n maxFeePerGas,\n maxPriorityFeePerGas: applyFeeMultiplierToBigInt(\n maxPriorityFeePerGas,\n FeeOption.Fastest,\n ),\n },\n };\n } catch (error) {\n throw new SwapKitError(\"toolbox_evm_gas_estimation_error\", {\n error: (error as any).msg ?? (error as any).toString(),\n });\n }\n };\n }\n\n return async function estimateGasPrices() {\n try {\n const { maxFeePerGas, maxPriorityFeePerGas, gasPrice } = await provider.getFeeData();\n\n if (isEIP1559Compatible) {\n if (maxFeePerGas === null || maxPriorityFeePerGas === null)\n throw new SwapKitError(\"toolbox_evm_no_fee_data\");\n\n return {\n [FeeOption.Average]: { maxFeePerGas, maxPriorityFeePerGas },\n [FeeOption.Fast]: {\n maxFeePerGas: applyFeeMultiplierToBigInt(maxFeePerGas, FeeOption.Fast),\n maxPriorityFeePerGas: applyFeeMultiplierToBigInt(maxPriorityFeePerGas, FeeOption.Fast),\n },\n [FeeOption.Fastest]: {\n maxFeePerGas: applyFeeMultiplierToBigInt(maxFeePerGas, FeeOption.Fastest),\n maxPriorityFeePerGas: applyFeeMultiplierToBigInt(\n maxPriorityFeePerGas,\n FeeOption.Fastest,\n ),\n },\n };\n }\n if (!gasPrice) throw new SwapKitError(\"toolbox_evm_no_gas_price\");\n\n return {\n [FeeOption.Average]: { gasPrice },\n [FeeOption.Fast]: { gasPrice: applyFeeMultiplierToBigInt(gasPrice, FeeOption.Fast) },\n [FeeOption.Fastest]: { gasPrice: applyFeeMultiplierToBigInt(gasPrice, FeeOption.Fastest) },\n };\n } catch (error) {\n throw new SwapKitError(\"toolbox_evm_gas_estimation_error\", {\n error: (error as any).msg ?? (error as any).toString(),\n });\n }\n };\n}\n\nfunction getCall({ provider, isEIP1559Compatible, signer, chain }: ToolboxWrapParams) {\n /**\n * @info call contract function\n * When using this method to make a non state changing call to the blockchain, like a isApproved call,\n * the signer needs to be set to undefined\n */\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO reduce complexity\n return async function call<T>({\n callProvider,\n contractAddress,\n abi,\n funcName,\n funcParams = [],\n txOverrides = {},\n feeOption = FeeOption.Fast,\n }: CallParams): Promise<T> {\n const contractProvider = callProvider || provider;\n if (!contractAddress)\n throw new SwapKitError(\"toolbox_evm_invalid_params\", {\n error: \"contractAddress must be provided\",\n });\n\n const isStateChanging = isStateChangingCall({ abi, funcName });\n\n if (isStateChanging && isBrowserProvider(contractProvider) && signer) {\n const createTx = getCreateContractTxObject({ provider: contractProvider, chain });\n const from = txOverrides?.from || (await signer?.getAddress());\n const txObject = await createTx({\n contractAddress,\n abi,\n funcName,\n funcParams,\n txOverrides: { ...txOverrides, from },\n });\n const sendTx = getEIP1193SendTransaction(contractProvider);\n\n return sendTx(txObject) as Promise<T>;\n }\n const contract = createContract(contractAddress, abi, contractProvider);\n\n // only use signer if the contract function is state changing\n if (isStateChanging) {\n if (!signer) throw new SwapKitError(\"toolbox_evm_no_signer\");\n\n const from = txOverrides?.from || (await signer.getAddress());\n if (!from) throw new SwapKitError(\"toolbox_evm_no_signer_address\");\n\n const connectedContract = contract.connect(signer);\n const estimateGasPrices = getEstimateGasPrices({\n provider,\n isEIP1559Compatible,\n chain: chain as Chain.Ethereum,\n });\n const { maxFeePerGas, maxPriorityFeePerGas, gasPrice } = (await estimateGasPrices())[\n feeOption\n ];\n\n const gasLimit = await contract.getFunction(funcName).estimateGas(...funcParams, txOverrides);\n\n // @ts-expect-error\n const result = await connectedContract[funcName](...funcParams, {\n ...txOverrides,\n gasLimit,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n /**\n * nonce must be set due to a possible bug with ethers.js,\n * expecting a synchronous nonce while the JsonRpcProvider delivers Promise\n */\n nonce: txOverrides?.nonce || (await contractProvider.getTransactionCount(from)),\n });\n\n return typeof result?.hash === \"string\" ? result?.hash : result;\n }\n\n const result = await contract[funcName]?.(...funcParams);\n\n return typeof result?.hash === \"string\" ? result?.hash : result;\n };\n}\n\nfunction getApprovedAmount({ provider, chain }: ToolboxWrapParams) {\n return function approveAmount({ assetAddress, spenderAddress, from }: IsApprovedParams) {\n const call = getCall({ provider, isEIP1559Compatible: true, chain });\n\n return call<bigint>({\n contractAddress: assetAddress,\n abi: erc20ABI,\n funcName: \"allowance\",\n funcParams: [from, spenderAddress],\n });\n };\n}\n\nfunction getIsApproved({ provider, chain }: ToolboxWrapParams) {\n return async function isApproved({\n assetAddress,\n spenderAddress,\n from,\n amount = MAX_APPROVAL,\n }: IsApprovedParams) {\n const approvedAmount = await getApprovedAmount({ provider, chain })({\n assetAddress,\n spenderAddress,\n from,\n });\n\n return SwapKitNumber.fromBigInt(approvedAmount).gte(SwapKitNumber.fromBigInt(BigInt(amount)));\n };\n}\n\nfunction getApprove({ signer, isEIP1559Compatible = true, provider, chain }: ToolboxWrapParams) {\n return async function approve({\n assetAddress,\n spenderAddress,\n feeOptionKey = FeeOption.Fast,\n amount,\n gasLimitFallback,\n from: fromParam,\n nonce,\n }: ApproveParams) {\n const funcParams = [spenderAddress, BigInt(amount || MAX_APPROVAL)];\n const from = (await signer?.getAddress()) || fromParam;\n\n const functionCallParams = {\n contractAddress: assetAddress,\n abi: erc20ABI,\n funcName: \"approve\",\n funcParams,\n signer,\n txOverrides: { from },\n };\n\n if (isBrowserProvider(provider)) {\n const createTx = getCreateContractTxObject({ provider, chain });\n const sendTx = getEIP1193SendTransaction(provider);\n const txObject = await createTx(functionCallParams);\n\n return sendTx(txObject);\n }\n\n const call = getCall({ provider, isEIP1559Compatible, signer, chain });\n\n return call<string>({\n ...functionCallParams,\n funcParams,\n txOverrides: {\n from,\n nonce,\n gasLimit: gasLimitFallback ? BigInt(gasLimitFallback.toString()) : undefined,\n },\n feeOption: feeOptionKey,\n });\n };\n}\n\nfunction getTransfer({ signer, isEIP1559Compatible = true, provider }: ToolboxWrapParams) {\n return async function transfer({\n assetValue,\n memo,\n recipient,\n feeOptionKey = FeeOption.Fast,\n sender,\n // data,\n // from: fromOverride,\n // maxFeePerGas,\n // maxPriorityFeePerGas,\n // gasPrice,\n ...tx\n }: EVMTransferParams) {\n const { hexlify, toUtf8Bytes } = await import(\"ethers\");\n const txAmount = assetValue.getBaseValue(\"bigint\");\n const chain = assetValue.chain as EVMChain;\n const from = sender || (await signer?.getAddress());\n const sendTx = getSendTransaction({ provider, signer, isEIP1559Compatible, chain });\n\n if (!from) throw new SwapKitError(\"toolbox_evm_no_from_address\");\n\n if (assetValue.isGasAsset) {\n const transaction = {\n ...tx,\n from,\n to: recipient,\n value: txAmount,\n data: hexlify(toUtf8Bytes(memo || \"\")),\n feeOptionKey,\n };\n\n return sendTx(transaction);\n }\n\n // const call = getCall({ signer, provider, isEIP1559Compatible });\n const contractAddress = getTokenAddress(assetValue, chain);\n if (!contractAddress) throw new SwapKitError(\"toolbox_evm_no_contract_address\");\n\n const { maxFeePerGas, maxPriorityFeePerGas, gasPrice } = (\n await getEstimateGasPrices({\n provider,\n isEIP1559Compatible,\n chain,\n })()\n )[feeOptionKey];\n\n const transaction = await getCreateTransferTx({ provider, signer, chain })({\n assetValue,\n memo,\n recipient,\n data: hexlify(toUtf8Bytes(memo || \"\")),\n sender: from,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n });\n\n return sendTx(transaction);\n };\n}\n\nfunction getEstimateCall({ provider, signer }: { signer?: Signer; provider: Provider }) {\n return function estimateCall({\n contractAddress,\n abi,\n funcName,\n funcParams = [],\n txOverrides,\n }: EstimateCallParams) {\n if (!contractAddress) throw new SwapKitError(\"toolbox_evm_no_contract_address\");\n\n const contract = createContract(contractAddress, abi, provider);\n return signer\n ? contract\n .connect(signer)\n .getFunction(funcName)\n .estimateGas(...funcParams, txOverrides)\n : contract.getFunction(funcName).estimateGas(...funcParams, txOverrides);\n };\n}\n\nfunction getEstimateGasLimit({ provider, signer }: ToolboxWrapParams) {\n return async function estimateGasLimit({\n assetValue,\n recipient,\n memo,\n data,\n sender,\n funcName,\n funcParams,\n txOverrides,\n }: EVMTransferParams & {\n assetValue: AssetValue;\n funcName?: string;\n funcParams?: unknown[];\n txOverrides?: EVMTxParams;\n data?: string;\n }) {\n // const value = assetValue.getBaseValue(\"bigint\");\n const value = assetValue.bigIntValue;\n\n const assetAddress = assetValue.isGasAsset\n ? null\n : getTokenAddress(assetValue, assetValue.chain as EVMChain);\n\n if (assetAddress && funcName) {\n const estimateCall = getEstimateCall({ provider, signer });\n // ERC20 gas estimate\n return estimateCall({\n contractAddress: assetAddress,\n abi: erc20ABI,\n funcName,\n funcParams,\n txOverrides,\n });\n }\n\n const { hexlify, toUtf8Bytes } = await import(\"ethers\");\n\n return provider.estimateGas({\n from: sender,\n to: recipient,\n value,\n data: data ? data : memo ? hexlify(toUtf8Bytes(memo)) : undefined,\n });\n };\n}\n\nconst isEIP1559Transaction = (tx: EVMTxParams) =>\n (tx as EIP1559TxParams).type === 2 ||\n !!(tx as EIP1559TxParams).maxFeePerGas ||\n !!(tx as EIP1559TxParams).maxPriorityFeePerGas;\n\nfunction getSendTransaction({\n provider,\n signer,\n isEIP1559Compatible = true,\n chain,\n}: ToolboxWrapParams) {\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO reduce complexity\n return async function sendTransaction({\n feeOptionKey = FeeOption.Fast,\n ...tx\n }: EVMTxParams & { feeOptionKey?: FeeOption }) {\n const { from, to, data, value, ...transaction } = tx;\n\n if (!signer) throw new SwapKitError(\"toolbox_evm_no_signer\");\n if (!to) throw new SwapKitError(\"toolbox_evm_no_to_address\");\n\n const parsedTxObject = {\n ...transaction,\n data: data || \"0x\",\n to,\n from,\n value: BigInt(value || 0),\n };\n\n // early return to skip gas estimation if provider is EIP-1193\n if (isBrowserProvider(provider)) {\n const sendTx = getEIP1193SendTransaction(provider);\n return sendTx(parsedTxObject);\n }\n\n const address = from || (await signer.getAddress());\n const nonce = tx.nonce || (await provider.getTransactionCount(address));\n const chainId = (await provider.getNetwork()).chainId;\n\n const isEIP1559 = isEIP1559Transaction(parsedTxObject) || isEIP1559Compatible;\n const estimateGasPrices = getEstimateGasPrices({ provider, isEIP1559Compatible, chain });\n\n const feeData =\n (isEIP1559 &&\n !(\n (parsedTxObject as EIP1559TxParams).maxFeePerGas &&\n (parsedTxObject as EIP1559TxParams).maxPriorityFeePerGas\n )) ||\n !(parsedTxObject as LegacyEVMTxParams).gasPrice\n ? Object.entries((await estimateGasPrices())[feeOptionKey]).reduce(\n // biome-ignore lint/performance/noAccumulatingSpread: this is a small object\n (acc, [k, v]) => ({ ...acc, [k]: toHexString(BigInt(v)) }),\n {} as {\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n gasPrice?: string;\n },\n )\n : {};\n let gasLimit: string;\n try {\n gasLimit = toHexString(\n parsedTxObject.gasLimit || ((await provider.estimateGas(parsedTxObject)) * 11n) / 10n,\n );\n } catch (error) {\n throw new SwapKitError(\"toolbox_evm_error_estimating_gas_limit\", { error });\n }\n\n try {\n const txObject = {\n ...parsedTxObject,\n chainId,\n type: isEIP1559 ? 2 : 0,\n gasLimit,\n nonce,\n ...feeData,\n };\n\n try {\n const response = await signer.sendTransaction(txObject);\n return response.hash;\n } catch (_error) {\n const txHex = await signer.signTransaction({\n ...txObject,\n from: address,\n });\n const response = await provider.broadcastTransaction(txHex);\n return response.hash;\n }\n } catch (error) {\n throw new SwapKitError(\"toolbox_evm_error_sending_transaction\", { error });\n }\n };\n}\n\nfunction getCreateTransferTx({ provider, signer }: ToolboxWrapParams) {\n return async function createTransferTx({\n assetValue,\n memo,\n recipient,\n data,\n sender: fromOverride,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n ...tx\n }: EVMCreateTransactionParams) {\n const txAmount = assetValue.getBaseValue(\"bigint\");\n const chain = assetValue.chain as EVMChain;\n const from = fromOverride || (await signer?.getAddress());\n\n if (!from) throw new SwapKitError(\"toolbox_evm_no_from_address\");\n\n if (isGasAsset(assetValue)) {\n const { hexlify, toUtf8Bytes } = await import(\"ethers\");\n\n return {\n ...tx,\n from,\n to: recipient,\n value: txAmount,\n data: data || hexlify(toUtf8Bytes(memo || \"\")),\n };\n }\n\n const contractAddress = getTokenAddress(assetValue, chain);\n if (!contractAddress) throw new SwapKitError(\"toolbox_evm_no_contract_address\");\n const createTx = getCreateContractTxObject({ provider, chain: assetValue.chain as EVMChain });\n\n return createTx({\n contractAddress,\n abi: erc20ABI,\n funcName: \"transfer\",\n funcParams: [recipient, txAmount],\n txOverrides: { from, maxFeePerGas, maxPriorityFeePerGas, gasPrice },\n });\n };\n}\n\nfunction getCreateApprovalTx({ provider, signer, chain }: ToolboxWrapParams) {\n return async function createApprovalTx({\n assetAddress,\n spenderAddress,\n amount,\n from: fromParam,\n }: ApproveParams) {\n const from = (await signer?.getAddress()) || fromParam;\n\n const createTx = getCreateContractTxObject({ provider, chain });\n const funcParams = [spenderAddress, BigInt(amount || MAX_APPROVAL)];\n\n const txObject = await createTx({\n contractAddress: assetAddress,\n abi: erc20ABI,\n funcName: \"approve\",\n funcParams,\n txOverrides: { from },\n });\n\n return txObject;\n };\n}\n",
8
+ "import type {\n AssetValue,\n ChainSigner,\n DerivationPathArray,\n FeeOption,\n GenericCreateTransactionParams,\n GenericTransferParams,\n} from \"@swapkit/helpers\";\nimport { Chain } from \"@swapkit/helpers\";\nimport type {\n BigNumberish,\n BrowserProvider,\n JsonFragment,\n JsonRpcProvider,\n JsonRpcSigner,\n Signer,\n Transaction,\n} from \"ethers\";\nimport type {\n ARBToolbox,\n AVAXToolbox,\n BASEToolbox,\n BSCToolbox,\n ETHToolbox,\n MATICToolbox,\n OPToolbox,\n} from \"./toolbox\";\n\nimport type { getProvider } from \"./index\";\n\nexport enum EthNetwork {\n Test = \"goerli\",\n Main = \"homestead\",\n}\n\nexport type ApproveParams = {\n assetAddress: string;\n spenderAddress: string;\n feeOptionKey?: FeeOption;\n amount?: BigNumberish;\n from?: string;\n // Optional fallback in case estimation for gas limit fails\n gasLimitFallback?: BigNumberish;\n nonce?: number;\n};\n\nexport type ApprovedParams = {\n assetAddress: string;\n spenderAddress: string;\n from: string;\n};\n\nexport type IsApprovedParams = ApprovedParams & {\n amount?: BigNumberish;\n};\n\nexport type CallParams = {\n callProvider?: Awaited<ReturnType<typeof getProvider>>;\n contractAddress: string;\n abi: readonly JsonFragment[];\n funcName: string;\n funcParams?: unknown[];\n txOverrides?: Partial<Transaction>;\n feeOption?: FeeOption;\n};\n\nexport type EstimateCallParams = Pick<\n CallParams,\n \"contractAddress\" | \"abi\" | \"funcName\" | \"funcParams\" | \"txOverrides\"\n>;\n\nexport type EVMTransferParams = GenericTransferParams & {\n sender?: string;\n};\n\nexport type EVMCreateTransactionParams = Omit<GenericCreateTransactionParams, \"feeRate\"> & {\n gasLimit?: bigint;\n gasPrice?: bigint;\n maxFeePerGas?: bigint;\n maxPriorityFeePerGas?: bigint;\n data?: string;\n nonce?: number;\n};\n\nexport type EVMMaxSendableAmountsParams = {\n from: string;\n assetValue: AssetValue;\n feeOptionKey?: FeeOption;\n memo?: string;\n abi?: readonly JsonFragment[];\n funcName?: string;\n contractAddress?: string;\n funcParams?: unknown[];\n txOverrides?: Partial<Transaction>;\n};\n\nexport type EVMTxBaseParams<T = bigint> = {\n to?: string;\n from?: string;\n nonce?: number;\n gasLimit?: T;\n data?: string;\n value?: T;\n chainId?: T;\n};\n\nexport type EIP1559TxParams<T = bigint> = EVMTxBaseParams<T> & {\n type?: number;\n maxFeePerGas?: T;\n maxPriorityFeePerGas?: T;\n};\n\nexport type LegacyEVMTxParams<T = bigint> = EVMTxBaseParams<T> & {\n gasPrice?: T;\n};\n\nexport type EVMTxParams = EIP1559TxParams | LegacyEVMTxParams;\n\nexport type EVMToolboxParams = {\n provider?: BrowserProvider | JsonRpcProvider;\n} & (\n | {\n signer?: (ChainSigner<EVMTransferParams, string> & Signer) | JsonRpcSigner;\n }\n | {\n phrase?: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n }\n);\n\nexport type EVMToolboxes = {\n [Chain.Arbitrum]: Awaited<ReturnType<typeof ARBToolbox>>;\n [Chain.Avalanche]: Awaited<ReturnType<typeof AVAXToolbox>>;\n [Chain.Base]: Awaited<ReturnType<typeof BASEToolbox>>;\n [Chain.BinanceSmartChain]: Awaited<ReturnType<typeof BSCToolbox>>;\n [Chain.Ethereum]: Awaited<ReturnType<typeof ETHToolbox>>;\n [Chain.Optimism]: Awaited<ReturnType<typeof OPToolbox>>;\n [Chain.Polygon]: Awaited<ReturnType<typeof MATICToolbox>>;\n};\n",
9
+ "import { Chain, type EVMChain, SwapKitError } from \"@swapkit/helpers\";\n\nimport { getProvider } from \"../helpers\";\nimport type { EVMToolboxParams } from \"../types\";\nimport { ARBToolbox, AVAXToolbox, BASEToolbox, BSCToolbox, ETHToolbox, MATICToolbox } from \"./evm\";\nimport { OPToolbox } from \"./op\";\n\nexport async function getEvmToolbox<T extends EVMChain>(chain: T, params?: EVMToolboxParams) {\n const toolboxParams = {\n ...params,\n provider: params?.provider || (await getProvider(chain)),\n };\n\n switch (chain) {\n case Chain.Avalanche:\n return AVAXToolbox(toolboxParams);\n case Chain.Arbitrum:\n return ARBToolbox(toolboxParams);\n case Chain.Base:\n return BASEToolbox(toolboxParams);\n case Chain.Optimism:\n return OPToolbox(toolboxParams);\n case Chain.Polygon:\n return MATICToolbox(toolboxParams);\n case Chain.BinanceSmartChain:\n return BSCToolbox(toolboxParams);\n case Chain.Ethereum:\n return ETHToolbox(toolboxParams);\n default:\n throw new SwapKitError(\"toolbox_evm_not_supported\", { chain });\n }\n}\n\nexport * from \"./baseEVMToolbox\";\nexport * from \"./evm\";\nexport * from \"./op\";\n",
10
+ "import { Chain, type EVMChain, FeeOption, SKConfig } from \"@swapkit/helpers\";\nimport { HDNodeWallet } from \"ethers\";\nimport { P, match } from \"ts-pattern\";\nimport { getEvmApi } from \"../api\";\nimport { multicallAbi } from \"../contracts/eth/multicall\";\nimport {\n getEstimateTransactionFee,\n getIsEIP1559Compatible,\n getNetworkParams,\n getProvider,\n} from \"../helpers\";\nimport type { EVMToolboxParams } from \"../types\";\nimport { BaseEVMToolbox } from \"./baseEVMToolbox\";\n\nexport async function ETHToolbox({ provider, ...signer }: EVMToolboxParams) {\n const evmToolbox = await createEvmToolbox(Chain.Ethereum)({\n provider,\n ...signer,\n });\n async function multicall(\n callTuples: { address: string; data: string }[],\n multicallAddress = \"0x5ba1e12693dc8f9c48aad8770482f4739beed696\",\n funcName = \"aggregate\",\n feeOptionKey: FeeOption = FeeOption.Fast,\n ) {\n const txObject = await evmToolbox.createContractTxObject({\n contractAddress: multicallAddress,\n abi: multicallAbi,\n funcName,\n funcParams: [callTuples],\n });\n\n return evmToolbox.sendTransaction({ ...txObject, feeOptionKey });\n }\n\n return { ...evmToolbox, multicall };\n}\n\nexport const ARBToolbox = createEvmToolbox(Chain.Arbitrum);\nexport const AVAXToolbox = createEvmToolbox(Chain.Avalanche);\nexport const BASEToolbox = createEvmToolbox(Chain.Base);\nexport const BSCToolbox = createEvmToolbox(Chain.BinanceSmartChain);\nexport const MATICToolbox = createEvmToolbox(Chain.Polygon);\n\nfunction createEvmToolbox<C extends EVMChain>(chain: C) {\n return async function createEvmToolbox({\n provider: providerParam,\n ...toolboxSignerParams\n }: EVMToolboxParams) {\n const rpcUrl = SKConfig.get(\"rpcUrls\")[chain];\n\n const provider = providerParam || (await getProvider(chain, rpcUrl));\n\n const isEIP1559Compatible = getIsEIP1559Compatible(chain);\n const signer = match(toolboxSignerParams)\n .with({ phrase: P.string }, ({ phrase }) => HDNodeWallet.fromPhrase(phrase).connect(provider))\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n const evmToolbox = BaseEVMToolbox({ provider, signer, isEIP1559Compatible, chain });\n\n return {\n ...evmToolbox,\n estimateTransactionFee: getEstimateTransactionFee({ provider, isEIP1559Compatible, chain }),\n getNetworkParams: getNetworkParams(chain),\n getBalance: getEvmApi(chain).getBalance,\n };\n };\n}\n",
11
+ "export const multicallAbi = [\n {\n inputs: [\n {\n components: [\n { internalType: \"address\", name: \"target\", type: \"address\" },\n { internalType: \"bytes\", name: \"callData\", type: \"bytes\" },\n ],\n internalType: \"struct Multicall2.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate\",\n outputs: [\n { internalType: \"uint256\", name: \"blockNumber\", type: \"uint256\" },\n { internalType: \"bytes[]\", name: \"returnData\", type: \"bytes[]\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"address\", name: \"target\", type: \"address\" },\n { internalType: \"bytes\", name: \"callData\", type: \"bytes\" },\n ],\n internalType: \"struct Multicall2.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"blockAndAggregate\",\n outputs: [\n { internalType: \"uint256\", name: \"blockNumber\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"blockHash\", type: \"bytes32\" },\n {\n components: [\n { internalType: \"bool\", name: \"success\", type: \"bool\" },\n { internalType: \"bytes\", name: \"returnData\", type: \"bytes\" },\n ],\n internalType: \"struct Multicall2.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"blockNumber\", type: \"uint256\" }],\n name: \"getBlockHash\",\n outputs: [{ internalType: \"bytes32\", name: \"blockHash\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBlockNumber\",\n outputs: [{ internalType: \"uint256\", name: \"blockNumber\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockCoinbase\",\n outputs: [{ internalType: \"address\", name: \"coinbase\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockDifficulty\",\n outputs: [{ internalType: \"uint256\", name: \"difficulty\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockGasLimit\",\n outputs: [{ internalType: \"uint256\", name: \"gaslimit\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockTimestamp\",\n outputs: [{ internalType: \"uint256\", name: \"timestamp\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"addr\", type: \"address\" }],\n name: \"getEthBalance\",\n outputs: [{ internalType: \"uint256\", name: \"balance\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastBlockHash\",\n outputs: [{ internalType: \"bytes32\", name: \"blockHash\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bool\", name: \"requireSuccess\", type: \"bool\" },\n {\n components: [\n { internalType: \"address\", name: \"target\", type: \"address\" },\n { internalType: \"bytes\", name: \"callData\", type: \"bytes\" },\n ],\n internalType: \"struct Multicall2.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryAggregate\",\n outputs: [\n {\n components: [\n { internalType: \"bool\", name: \"success\", type: \"bool\" },\n { internalType: \"bytes\", name: \"returnData\", type: \"bytes\" },\n ],\n internalType: \"struct Multicall2.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bool\", name: \"requireSuccess\", type: \"bool\" },\n {\n components: [\n { internalType: \"address\", name: \"target\", type: \"address\" },\n { internalType: \"bytes\", name: \"callData\", type: \"bytes\" },\n ],\n internalType: \"struct Multicall2.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryBlockAndAggregate\",\n outputs: [\n { internalType: \"uint256\", name: \"blockNumber\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"blockHash\", type: \"bytes32\" },\n {\n components: [\n { internalType: \"bool\", name: \"success\", type: \"bool\" },\n { internalType: \"bytes\", name: \"returnData\", type: \"bytes\" },\n ],\n internalType: \"struct Multicall2.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n];\n",
12
+ "import {\n BaseDecimal,\n Chain,\n ChainId,\n ChainToExplorerUrl,\n SKConfig,\n SwapKitError,\n} from \"@swapkit/helpers\";\nimport type {\n Authorization,\n BrowserProvider,\n JsonRpcProvider,\n Provider,\n TransactionRequest,\n} from \"ethers\";\nimport { Contract, HDNodeWallet } from \"ethers\";\n\nimport { P } from \"ts-pattern\";\nimport { match } from \"ts-pattern\";\nimport { getEvmApi } from \"../api\";\nimport { gasOracleAbi } from \"../contracts/op/gasOracle\";\nimport { getProvider } from \"../helpers\";\nimport type { EVMToolboxParams } from \"../types\";\nimport { BaseEVMToolbox } from \"./baseEVMToolbox\";\n\nconst GAS_PRICE_ORACLE_ADDRESS = \"0x420000000000000000000000000000000000000f\";\n\nfunction connectGasPriceOracle<P extends Provider>(provider: P) {\n return new Contract(GAS_PRICE_ORACLE_ADDRESS, gasOracleAbi, provider);\n}\n\nexport function getL1GasPriceFetcher<P extends Provider>(provider: P) {\n return function getL1GasPrice() {\n const gasPriceOracle = connectGasPriceOracle(provider);\n\n if (gasPriceOracle && \"l1BaseFee\" in gasPriceOracle) {\n return gasPriceOracle?.l1BaseFee() as unknown as bigint;\n }\n\n return undefined;\n };\n}\n\nfunction serializeTx<P extends JsonRpcProvider | BrowserProvider>(provider: P) {\n return async function serializeTx({ from, to, nonce, ...tx }: TransactionRequest) {\n const { Transaction } = await import(\"ethers\");\n\n if (!to)\n throw new SwapKitError(\"toolbox_evm_invalid_transaction\", { error: \"Missing to address\" });\n\n return Transaction.from({\n ...tx,\n authorizationList: tx.authorizationList as Authorization[],\n to: to as string,\n nonce: nonce ? nonce : from ? await provider.getTransactionCount(from) : 0,\n }).serialized;\n };\n}\n\nfunction estimateL1GasCost<P extends JsonRpcProvider | BrowserProvider>(provider: P) {\n return async function estimateL1GasCost(tx: TransactionRequest) {\n const gasPriceOracle = connectGasPriceOracle(provider);\n const serializedTx = await serializeTx(provider)(tx);\n\n if (gasPriceOracle && \"getL1Fee\" in gasPriceOracle) {\n return gasPriceOracle.getL1Fee(serializedTx);\n }\n };\n}\n\nfunction estimateL2GasCost<P extends JsonRpcProvider | BrowserProvider>(provider: P) {\n return async function estimateL2GasCost(tx: TransactionRequest) {\n const l2GasPrice = await provider.send(\"eth_gasPrice\", []);\n const l2GasCost = await provider.estimateGas(tx);\n return l2GasPrice.mul(l2GasCost);\n };\n}\n\nfunction estimateTotalGasCost<P extends JsonRpcProvider | BrowserProvider>(provider: P) {\n return async function estimateTotalGasCost(tx: TransactionRequest) {\n const l1GasCost = await estimateL1GasCost(provider)(tx);\n const l2GasCost = await estimateL2GasCost(provider)(tx);\n return l1GasCost.add(l2GasCost);\n };\n}\n\nexport function estimateL1Gas<P extends JsonRpcProvider | BrowserProvider>(provider: P) {\n return async function estimateL1Gas(tx: TransactionRequest) {\n const gasPriceOracle = connectGasPriceOracle(provider);\n const serializedTx = await serializeTx(provider)(tx);\n\n if (gasPriceOracle && \"getL1GasUsed\" in gasPriceOracle) {\n return gasPriceOracle.getL1GasUsed(serializedTx);\n }\n };\n}\n\nconst getNetworkParams = () => ({\n chainId: ChainId.OptimismHex,\n chainName: \"Optimism\",\n nativeCurrency: { name: \"Ethereum\", symbol: Chain.Ethereum, decimals: BaseDecimal.ETH },\n rpcUrls: [SKConfig.get(\"rpcUrls\")[Chain.Optimism]],\n blockExplorerUrls: [ChainToExplorerUrl[Chain.Optimism]],\n});\n\nexport async function OPToolbox({\n provider: providerParam,\n ...toolboxSignerParams\n}: EVMToolboxParams) {\n const chain = Chain.Optimism;\n const rpcUrl = SKConfig.get(\"rpcUrls\")[chain];\n const provider = providerParam || (await getProvider(chain, rpcUrl));\n const signer = match(toolboxSignerParams)\n .with({ phrase: P.string }, ({ phrase }) => HDNodeWallet.fromPhrase(phrase).connect(provider))\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n const evmToolbox = BaseEVMToolbox({ provider, signer });\n const getL1GasPrice = getL1GasPriceFetcher(provider);\n\n return {\n ...evmToolbox,\n estimateL1Gas: estimateL1Gas(provider),\n estimateL1GasCost: estimateL1GasCost(provider),\n estimateL2GasCost: estimateL2GasCost(provider),\n estimateTotalGasCost: estimateTotalGasCost(provider),\n getBalance: getEvmApi(Chain.Optimism).getBalance,\n getL1GasPrice,\n getNetworkParams,\n };\n}\n",
13
+ "export const gasOracleAbi = [\n {\n inputs: [{ internalType: \"address\", name: \"_owner\", type: \"address\" }],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"DecimalsUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"GasPriceUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"L1BaseFeeUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"OverheadUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"previousOwner\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newOwner\", type: \"address\" },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"ScalarUpdated\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"gasPrice\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes\", name: \"_data\", type: \"bytes\" }],\n name: \"getL1Fee\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes\", name: \"_data\", type: \"bytes\" }],\n name: \"getL1GasUsed\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"l1BaseFee\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"overhead\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"scalar\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"_decimals\", type: \"uint256\" }],\n name: \"setDecimals\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"_gasPrice\", type: \"uint256\" }],\n name: \"setGasPrice\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"_baseFee\", type: \"uint256\" }],\n name: \"setL1BaseFee\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"_overhead\", type: \"uint256\" }],\n name: \"setOverhead\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"_scalar\", type: \"uint256\" }],\n name: \"setScalar\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n];\n"
14
+ ],
15
+ "mappings": "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",
16
+ "debugId": "2FAA048700C229CE64756E2164756E21",
17
+ "names": []
18
+ }
@@ -0,0 +1,3 @@
1
+ import{b as ut}from"../../chunk-6f98phv2.js";import{d as k,e as C}from"../../chunk-s47y8512.js";import{SKConfig as kt,warnOnce as Ct}from"@swapkit/helpers";function S(t){let u=kt.get("apis")[t];if(u)return Ct(!0,"Using custom EVM API. Be sure to implement all methods to avoid issues."),u;return Gt(t)}function cn(t){return t}function Gt(t){return{getBalance:ut(t)}}import{AssetValue as I,BaseDecimal as Pt,Chain as x,ChainToExplorerUrl as gt,ChainToHexChainId as It,FeeOption as pt,SKConfig as bt,SwapKitError as tt,SwapKitNumber as r}from"@swapkit/helpers";import{Chain as L,ContractAddress as q,FeeOption as T,SwapKitError as w,SwapKitNumber as yt,applyFeeMultiplierToBigInt as H,isGasAsset as Wt}from"@swapkit/helpers";import{erc20ABI as Z}from"@swapkit/helpers/contracts";import{BrowserProvider as $t,Contract as ot,Interface as et,getAddress as _}from"ethers";var F=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");function j({chain:t=L.Ethereum,provider:u,signer:n,isEIP1559Compatible:y=!0}){return{getAddress:()=>{return n?n.getAddress():void 0},call:v({provider:u,signer:n,isEIP1559Compatible:y,chain:t}),estimateCall:at({provider:u,signer:n}),EIP1193SendTransaction:P(u),approve:St({provider:u,signer:n,isEIP1559Compatible:y,chain:t}),approvedAmount:lt({provider:u,chain:t}),broadcastTransaction:u.broadcastTransaction,createApprovalTx:Kt({provider:u,signer:n,chain:t}),createContract:Yt({provider:u,chain:t}),createContractTxObject:X({provider:u,chain:t}),createTransferTx:A({provider:u,signer:n,chain:t}),createTransaction:A({provider:u,signer:n,chain:t}),estimateGasLimit:_t({provider:u,signer:n,chain:t}),estimateGasPrices:G({chain:t,provider:u,isEIP1559Compatible:y}),isApproved:Nt({provider:u,chain:t}),sendTransaction:mt({provider:u,signer:n,isEIP1559Compatible:y,chain:t}),signMessage:n?.signMessage,transfer:ht({provider:u,signer:n,isEIP1559Compatible:y,chain:t}),validateAddress:(o)=>Qt({address:o})}}function Qt({address:t}){try{return _(t),!0}catch(u){return!1}}function K(t){return t instanceof $t}function O(t,u,n){return new ot(t,et.from(u),n)}function Yt({provider:t}){return function u(n,y){return new ot(n,et.from(y),t)}}var Zt=["payable","nonpayable"];function Xt({abi:t,funcName:u}){let n=t.find((y)=>y.name===u);if(!n)throw new w("toolbox_evm_no_abi_fragment",{funcName:u});return n.stateMutability&&Zt.includes(n.stateMutability)}function Un(t){return _(t)}function P(t){return function u({value:n,...y}){if(!K(t))throw new w("toolbox_evm_provider_not_eip1193_compatible");return t.send("eth_sendTransaction",[{value:h(BigInt(n||0)),...y}])}}function Ln(t,u){let n=g(t,u);if(n)return _(n.toLowerCase());throw new w("toolbox_evm_invalid_gas_asset_address")}var Vt={[L.Arbitrum]:q.ARB,[L.Avalanche]:q.AVAX,[L.Base]:q.BASE,[L.BinanceSmartChain]:q.BSC,[L.Ethereum]:q.ETH,[L.Optimism]:q.OP,[L.Polygon]:q.MATIC};function g({chain:t,symbol:u,ticker:n},y){try{let o=t===L.BinanceSmartChain&&u==="BNB"&&n==="BNB",e=t===y&&u===y&&n===y,l=[L.Arbitrum,L.Base].includes(t)&&u==="ETH"&&n==="ETH";if(e||o||l)return Vt[y];return _(u.slice(n.length+1).replace(/^0X/,""))}catch(o){return null}}function X({provider:t}){return async({contractAddress:u,abi:n,funcName:y,funcParams:o=[],txOverrides:e})=>O(u,n,t).getFunction(y).populateTransaction(...o.concat(e).filter((l)=>typeof l!=="undefined"))}function G({chain:t,provider:u,isEIP1559Compatible:n=!0}){if(t===L.Arbitrum)return async function y(){try{let{gasPrice:o}=await u.getFeeData();if(!o)throw new w("toolbox_evm_no_fee_data");return{[T.Average]:{gasPrice:o},[T.Fast]:{gasPrice:o},[T.Fastest]:{gasPrice:o}}}catch(o){throw new w("toolbox_evm_gas_estimation_error",{error:o.msg??o.toString()})}};if(t===L.Optimism)return async function y(){try{let{maxFeePerGas:o,maxPriorityFeePerGas:e,gasPrice:l}=await u.getFeeData(),m=d(u)(),a=l;if(!(o&&e))throw new w("toolbox_evm_no_fee_data");return{[T.Average]:{l1GasPrice:m,gasPrice:a,maxFeePerGas:o,maxPriorityFeePerGas:e},[T.Fast]:{l1GasPrice:H(m||0n,T.Fast),gasPrice:H(a,T.Fast),maxFeePerGas:o,maxPriorityFeePerGas:H(e,T.Fast)},[T.Fastest]:{l1GasPrice:H(m||0n,T.Fastest),gasPrice:H(a,T.Fastest),maxFeePerGas:o,maxPriorityFeePerGas:H(e,T.Fastest)}}}catch(o){throw new w("toolbox_evm_gas_estimation_error",{error:o.msg??o.toString()})}};return async function y(){try{let{maxFeePerGas:o,maxPriorityFeePerGas:e,gasPrice:l}=await u.getFeeData();if(n){if(o===null||e===null)throw new w("toolbox_evm_no_fee_data");return{[T.Average]:{maxFeePerGas:o,maxPriorityFeePerGas:e},[T.Fast]:{maxFeePerGas:H(o,T.Fast),maxPriorityFeePerGas:H(e,T.Fast)},[T.Fastest]:{maxFeePerGas:H(o,T.Fastest),maxPriorityFeePerGas:H(e,T.Fastest)}}}if(!l)throw new w("toolbox_evm_no_gas_price");return{[T.Average]:{gasPrice:l},[T.Fast]:{gasPrice:H(l,T.Fast)},[T.Fastest]:{gasPrice:H(l,T.Fastest)}}}catch(o){throw new w("toolbox_evm_gas_estimation_error",{error:o.msg??o.toString()})}}}function v({provider:t,isEIP1559Compatible:u,signer:n,chain:y}){return async function o({callProvider:e,contractAddress:l,abi:m,funcName:a,funcParams:b=[],txOverrides:i={},feeOption:M=T.Fast}){let p=e||t;if(!l)throw new w("toolbox_evm_invalid_params",{error:"contractAddress must be provided"});let s=Xt({abi:m,funcName:a});if(s&&K(p)&&n){let R=X({provider:p,chain:y}),D=i?.from||await n?.getAddress(),U=await R({contractAddress:l,abi:m,funcName:a,funcParams:b,txOverrides:{...i,from:D}});return P(p)(U)}let c=O(l,m,p);if(s){if(!n)throw new w("toolbox_evm_no_signer");let R=i?.from||await n.getAddress();if(!R)throw new w("toolbox_evm_no_signer_address");let D=c.connect(n),U=G({provider:t,isEIP1559Compatible:u,chain:y}),{maxFeePerGas:z,maxPriorityFeePerGas:B,gasPrice:E}=(await U())[M],Y=await c.getFunction(a).estimateGas(...b,i),N=await D[a](...b,{...i,gasLimit:Y,maxFeePerGas:z,maxPriorityFeePerGas:B,gasPrice:E,nonce:i?.nonce||await p.getTransactionCount(R)});return typeof N?.hash==="string"?N?.hash:N}let f=await c[a]?.(...b);return typeof f?.hash==="string"?f?.hash:f}}function lt({provider:t,chain:u}){return function n({assetAddress:y,spenderAddress:o,from:e}){return v({provider:t,isEIP1559Compatible:!0,chain:u})({contractAddress:y,abi:Z,funcName:"allowance",funcParams:[e,o]})}}function Nt({provider:t,chain:u}){return async function n({assetAddress:y,spenderAddress:o,from:e,amount:l=F}){let m=await lt({provider:t,chain:u})({assetAddress:y,spenderAddress:o,from:e});return yt.fromBigInt(m).gte(yt.fromBigInt(BigInt(l)))}}function St({signer:t,isEIP1559Compatible:u=!0,provider:n,chain:y}){return async function o({assetAddress:e,spenderAddress:l,feeOptionKey:m=T.Fast,amount:a,gasLimitFallback:b,from:i,nonce:M}){let p=[l,BigInt(a||F)],s=await t?.getAddress()||i,c={contractAddress:e,abi:Z,funcName:"approve",funcParams:p,signer:t,txOverrides:{from:s}};if(K(n)){let R=X({provider:n,chain:y}),D=P(n),U=await R(c);return D(U)}return v({provider:n,isEIP1559Compatible:u,signer:t,chain:y})({...c,funcParams:p,txOverrides:{from:s,nonce:M,gasLimit:b?BigInt(b.toString()):void 0},feeOption:m})}}function ht({signer:t,isEIP1559Compatible:u=!0,provider:n}){return async function y({assetValue:o,memo:e,recipient:l,feeOptionKey:m=T.Fast,sender:a,...b}){let{hexlify:i,toUtf8Bytes:M}=await import("ethers"),p=o.getBaseValue("bigint"),s=o.chain,c=a||await t?.getAddress(),f=mt({provider:n,signer:t,isEIP1559Compatible:u,chain:s});if(!c)throw new w("toolbox_evm_no_from_address");if(o.isGasAsset){let E={...b,from:c,to:l,value:p,data:i(M(e||"")),feeOptionKey:m};return f(E)}if(!g(o,s))throw new w("toolbox_evm_no_contract_address");let{maxFeePerGas:D,maxPriorityFeePerGas:U,gasPrice:z}=(await G({provider:n,isEIP1559Compatible:u,chain:s})())[m],B=await A({provider:n,signer:t,chain:s})({assetValue:o,memo:e,recipient:l,data:i(M(e||"")),sender:c,maxFeePerGas:D,maxPriorityFeePerGas:U,gasPrice:z});return f(B)}}function at({provider:t,signer:u}){return function n({contractAddress:y,abi:o,funcName:e,funcParams:l=[],txOverrides:m}){if(!y)throw new w("toolbox_evm_no_contract_address");let a=O(y,o,t);return u?a.connect(u).getFunction(e).estimateGas(...l,m):a.getFunction(e).estimateGas(...l,m)}}function _t({provider:t,signer:u}){return async function n({assetValue:y,recipient:o,memo:e,data:l,sender:m,funcName:a,funcParams:b,txOverrides:i}){let M=y.bigIntValue,p=y.isGasAsset?null:g(y,y.chain);if(p&&a)return at({provider:t,signer:u})({contractAddress:p,abi:Z,funcName:a,funcParams:b,txOverrides:i});let{hexlify:s,toUtf8Bytes:c}=await import("ethers");return t.estimateGas({from:m,to:o,value:M,data:l?l:e?s(c(e)):void 0})}}var jt=(t)=>t.type===2||!!t.maxFeePerGas||!!t.maxPriorityFeePerGas;function mt({provider:t,signer:u,isEIP1559Compatible:n=!0,chain:y}){return async function o({feeOptionKey:e=T.Fast,...l}){let{from:m,to:a,data:b,value:i,...M}=l;if(!u)throw new w("toolbox_evm_no_signer");if(!a)throw new w("toolbox_evm_no_to_address");let p={...M,data:b||"0x",to:a,from:m,value:BigInt(i||0)};if(K(t))return P(t)(p);let s=m||await u.getAddress(),c=l.nonce||await t.getTransactionCount(s),f=(await t.getNetwork()).chainId,R=jt(p)||n,D=G({provider:t,isEIP1559Compatible:n,chain:y}),U=R&&!(p.maxFeePerGas&&p.maxPriorityFeePerGas)||!p.gasPrice?Object.entries((await D())[e]).reduce((B,[E,Y])=>({...B,[E]:h(BigInt(Y))}),{}):{},z;try{z=h(p.gasLimit||await t.estimateGas(p)*11n/10n)}catch(B){throw new w("toolbox_evm_error_estimating_gas_limit",{error:B})}try{let B={...p,chainId:f,type:R?2:0,gasLimit:z,nonce:c,...U};try{return(await u.sendTransaction(B)).hash}catch(E){let Y=await u.signTransaction({...B,from:s});return(await t.broadcastTransaction(Y)).hash}}catch(B){throw new w("toolbox_evm_error_sending_transaction",{error:B})}}}function A({provider:t,signer:u}){return async function n({assetValue:y,memo:o,recipient:e,data:l,sender:m,maxFeePerGas:a,maxPriorityFeePerGas:b,gasPrice:i,...M}){let p=y.getBaseValue("bigint"),s=y.chain,c=m||await u?.getAddress();if(!c)throw new w("toolbox_evm_no_from_address");if(Wt(y)){let{hexlify:D,toUtf8Bytes:U}=await import("ethers");return{...M,from:c,to:e,value:p,data:l||D(U(o||""))}}let f=g(y,s);if(!f)throw new w("toolbox_evm_no_contract_address");return X({provider:t,chain:y.chain})({contractAddress:f,abi:Z,funcName:"transfer",funcParams:[e,p],txOverrides:{from:c,maxFeePerGas:a,maxPriorityFeePerGas:b,gasPrice:i}})}}function Kt({provider:t,signer:u,chain:n}){return async function y({assetAddress:o,spenderAddress:e,amount:l,from:m}){let a=await u?.getAddress()||m,b=X({provider:t,chain:n}),i=[e,BigInt(l||F)];return await b({contractAddress:o,abi:Z,funcName:"approve",funcParams:i,txOverrides:{from:a}})}}async function W(t,u){let{JsonRpcProvider:n}=await import("ethers");return new n(u||bt.get("rpcUrls")[t])}var En=async({from:t,memo:u="",feeOptionKey:n=pt.Fastest,assetValue:y,abi:o,funcName:e,funcParams:l,contractAddress:m,txOverrides:a})=>{let{getEvmToolbox:b}=await import("@swapkit/toolboxes/evm"),i=await b(y.chain),p=(await i.getBalance(t)).find(({symbol:B,chain:E})=>y?B===y.symbol:B===I.from({chain:E})?.symbol),s=(await i.estimateGasPrices())[n];if(!p)return I.from({chain:y.chain});if(y&&(p.chain!==y.chain||p.symbol!==y?.symbol))return p;let c=o&&e&&l&&m?await i.estimateCall({contractAddress:m,abi:o,funcName:e,funcParams:l,txOverrides:a}):await i.estimateGasLimit({sender:t,recipient:t,memo:u,assetValue:y}),f="maxFeePerGas"in s,R="gasPrice"in s&&s.gasPrice!==void 0;if(!(s&&(R||f)))throw new tt("toolbox_evm_no_fee_data");let D=f?(s.maxFeePerGas||1n)+(s.maxPriorityFeePerGas||1n):s.gasPrice||1n,U=c*D,z=r.fromBigInt(p.getBaseValue("bigint")).sub(U.toString());return I.from({chain:p.chain,value:z.getValue("string")})};function h(t){return t>0n?`0x${t.toString(16)}`:"0x0"}function Tt({provider:t,isEIP1559Compatible:u=!0}){return async function n({feeOption:y=pt.Fast,chain:o,...e}){let m=await G({provider:t,isEIP1559Compatible:u,chain:o})(),a=await t.estimateGas(e),b=I.from({chain:o}),{gasPrice:i,maxFeePerGas:M,maxPriorityFeePerGas:p}=m[y];if(!u&&i)return b.set(r.fromBigInt(i*a,b.decimal));if(M&&p){let s=(M+p)*a;return b.set(r.fromBigInt(s,b.decimal))}throw new tt("toolbox_evm_no_gas_price")}}function it(t){return()=>x.Ethereum===t?void 0:{...At({chain:t}),chainId:It[t],rpcUrls:[bt.get("rpcUrls")[t]],blockExplorerUrls:[gt[t]]}}function st(t){return![x.Arbitrum,x.BinanceSmartChain].includes(t)}function At({chain:t}){let u=Pt[t];switch(t){case x.Arbitrum:return{chainName:"Arbitrum One",nativeCurrency:{name:"Ethereum",symbol:x.Ethereum,decimals:u}};case x.Avalanche:return{chainName:"Avalanche Network",nativeCurrency:{name:"Avalanche",symbol:t,decimals:u}};case x.Base:return{chainName:"Base Mainnet",nativeCurrency:{name:"Ethereum",symbol:x.Ethereum,decimals:u}};case x.BinanceSmartChain:return{chainName:"BNB Chain",nativeCurrency:{name:"Binance Coin",symbol:"BNB",decimals:u}};case x.Polygon:return{chainName:"Polygon Mainnet",nativeCurrency:{name:"Polygon",symbol:x.Polygon,decimals:u}};default:throw new tt("toolbox_evm_not_supported",{chain:t})}}var Ft;((n)=>{n.Test="goerli";n.Main="homestead"})(Ft||={});import{Chain as J,SwapKitError as Tn}from"@swapkit/helpers";import{Chain as $,FeeOption as Ot,SKConfig as vt}from"@swapkit/helpers";import{HDNodeWallet as dt}from"ethers";import{P as ct,match as rt}from"ts-pattern";var wt=[{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes[]",name:"returnData",type:"bytes[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"blockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall2.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBlockNumber",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockCoinbase",outputs:[{internalType:"address",name:"coinbase",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockDifficulty",outputs:[{internalType:"uint256",name:"difficulty",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockGasLimit",outputs:[{internalType:"uint256",name:"gaslimit",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockTimestamp",outputs:[{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"addr",type:"address"}],name:"getEthBalance",outputs:[{internalType:"uint256",name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"tryAggregate",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall2.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"tryBlockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall2.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"nonpayable",type:"function"}];async function Mt({provider:t,...u}){let n=await Q($.Ethereum)({provider:t,...u});async function y(o,e="0x5ba1e12693dc8f9c48aad8770482f4739beed696",l="aggregate",m=Ot.Fast){let a=await n.createContractTxObject({contractAddress:e,abi:wt,funcName:l,funcParams:[o]});return n.sendTransaction({...a,feeOptionKey:m})}return{...n,multicall:y}}var ft=Q($.Arbitrum),Bt=Q($.Avalanche),Rt=Q($.Base),Dt=Q($.BinanceSmartChain),Ut=Q($.Polygon);function Q(t){return async function u({provider:n,...y}){let o=vt.get("rpcUrls")[t],e=n||await W(t,o),l=st(t),m=rt(y).with({phrase:ct.string},({phrase:b})=>dt.fromPhrase(b).connect(e)).with({signer:ct.any},({signer:b})=>b).otherwise(()=>{return});return{...j({provider:e,signer:m,isEIP1559Compatible:l,chain:t}),estimateTransactionFee:Tt({provider:e,isEIP1559Compatible:l,chain:t}),getNetworkParams:it(t),getBalance:S(t).getBalance}}}import{BaseDecimal as tn,Chain as V,ChainId as nn,ChainToExplorerUrl as un,SKConfig as Ht,SwapKitError as yn}from"@swapkit/helpers";import{Contract as on,HDNodeWallet as en}from"ethers";import{P as xt}from"ts-pattern";import{match as ln}from"ts-pattern";var Lt=[{inputs:[{internalType:"address",name:"_owner",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"DecimalsUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"GasPriceUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"L1BaseFeeUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"OverheadUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"ScalarUpdated",type:"event"},{inputs:[],name:"decimals",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"gasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_data",type:"bytes"}],name:"getL1Fee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_data",type:"bytes"}],name:"getL1GasUsed",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"l1BaseFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"overhead",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"scalar",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_decimals",type:"uint256"}],name:"setDecimals",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_gasPrice",type:"uint256"}],name:"setGasPrice",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_baseFee",type:"uint256"}],name:"setL1BaseFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_overhead",type:"uint256"}],name:"setOverhead",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_scalar",type:"uint256"}],name:"setScalar",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"}];var an="0x420000000000000000000000000000000000000f";function nt(t){return new on(an,Lt,t)}function d(t){return function u(){let n=nt(t);if(n&&"l1BaseFee"in n)return n?.l1BaseFee();return}}function zt(t){return async function u({from:n,to:y,nonce:o,...e}){let{Transaction:l}=await import("ethers");if(!y)throw new yn("toolbox_evm_invalid_transaction",{error:"Missing to address"});return l.from({...e,authorizationList:e.authorizationList,to:y,nonce:o?o:n?await t.getTransactionCount(n):0}).serialized}}function Et(t){return async function u(n){let y=nt(t),o=await zt(t)(n);if(y&&"getL1Fee"in y)return y.getL1Fee(o)}}function qt(t){return async function u(n){let y=await t.send("eth_gasPrice",[]),o=await t.estimateGas(n);return y.mul(o)}}function mn(t){return async function u(n){let y=await Et(t)(n),o=await qt(t)(n);return y.add(o)}}function pn(t){return async function u(n){let y=nt(t),o=await zt(t)(n);if(y&&"getL1GasUsed"in y)return y.getL1GasUsed(o)}}var bn=()=>({chainId:nn.OptimismHex,chainName:"Optimism",nativeCurrency:{name:"Ethereum",symbol:V.Ethereum,decimals:tn.ETH},rpcUrls:[Ht.get("rpcUrls")[V.Optimism]],blockExplorerUrls:[un[V.Optimism]]});async function Jt({provider:t,...u}){let n=V.Optimism,y=Ht.get("rpcUrls")[n],o=t||await W(n,y),e=ln(u).with({phrase:xt.string},({phrase:a})=>en.fromPhrase(a).connect(o)).with({signer:xt.any},({signer:a})=>a).otherwise(()=>{return}),l=j({provider:o,signer:e}),m=d(o);return{...l,estimateL1Gas:pn(o),estimateL1GasCost:Et(o),estimateL2GasCost:qt(o),estimateTotalGasCost:mn(o),getBalance:S(V.Optimism).getBalance,getL1GasPrice:m,getNetworkParams:bn}}async function dn(t,u){let n={...u,provider:u?.provider||await W(t)};switch(t){case J.Avalanche:return Bt(n);case J.Arbitrum:return ft(n);case J.Base:return Rt(n);case J.Optimism:return Jt(n);case J.Polygon:return Ut(n);case J.BinanceSmartChain:return Dt(n);case J.Ethereum:return Mt(n);default:throw new Tn("toolbox_evm_not_supported",{chain:t})}}export{h as toHexString,Un as toChecksumAddress,Xt as isStateChangingCall,K as isBrowserProvider,g as getTokenAddress,W as getProvider,it as getNetworkParams,d as getL1GasPriceFetcher,st as getIsEIP1559Compatible,dn as getEvmToolbox,S as getEvmApi,Tt as getEstimateTransactionFee,G as getEstimateGasPrices,P as getEIP1193SendTransaction,X as getCreateContractTxObject,Yt as getCreateContract,Ln as getChecksumAddressFromAsset,Qt as evmValidateAddress,En as estimateMaxSendableAmount,pn as estimateL1Gas,cn as createCustomEvmApi,O as createContract,Jt as OPToolbox,F as MAX_APPROVAL,Ut as MATICToolbox,Ft as EthNetwork,Mt as ETHToolbox,j as BaseEVMToolbox,Dt as BSCToolbox,Rt as BASEToolbox,Bt as AVAXToolbox,ft as ARBToolbox};
2
+
3
+ //# debugId=4FF5D94E59789B6C64756E2164756E21