@swapkit/toolboxes 1.0.0-beta.2 → 1.0.0-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-12xtvbsp.js +4 -0
- package/dist/{chunk-0h4xdrwz.js.map → chunk-12xtvbsp.js.map} +2 -2
- package/dist/{chunk-fjfxga2v.js → chunk-5yxc1e69.js} +1 -1
- package/dist/{chunk-fjfxga2v.js.map → chunk-5yxc1e69.js.map} +1 -1
- package/dist/{chunk-0f0249b1.js → chunk-9bqegm61.js} +1 -1
- package/dist/chunk-kbnwrc5b.js +4 -0
- package/dist/chunk-kbnwrc5b.js.map +10 -0
- package/dist/{chunk-p1kdg37m.js → chunk-s47y8512.js} +2 -2
- package/dist/{chunk-p1kdg37m.js.map → chunk-s47y8512.js.map} +1 -1
- package/dist/chunk-vtd17cje.js +3 -0
- package/dist/chunk-vtd17cje.js.map +10 -0
- package/dist/src/cosmos/index.cjs +3 -0
- package/dist/src/cosmos/index.cjs.map +16 -0
- package/dist/src/cosmos/index.js +3 -0
- package/dist/src/cosmos/index.js.map +16 -0
- package/dist/src/evm/index.cjs +3 -0
- package/dist/src/evm/index.cjs.map +18 -0
- package/dist/src/evm/index.js +3 -0
- package/dist/src/evm/index.js.map +18 -0
- package/dist/src/index.cjs +3 -0
- package/dist/src/index.cjs.map +10 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +10 -0
- package/dist/src/near/index.cjs +3 -0
- package/dist/src/near/index.cjs.map +13 -0
- package/dist/src/near/index.js +3 -0
- package/dist/src/near/index.js.map +13 -0
- package/dist/{radix → src/radix}/index.cjs +2 -2
- package/dist/src/radix/index.cjs.map +10 -0
- package/dist/src/radix/index.js +3 -0
- package/dist/src/radix/index.js.map +10 -0
- package/dist/src/ripple/index.cjs +3 -0
- package/dist/src/ripple/index.cjs.map +10 -0
- package/dist/src/ripple/index.js +3 -0
- package/dist/src/ripple/index.js.map +10 -0
- package/dist/src/solana/index.cjs +3 -0
- package/dist/src/solana/index.cjs.map +10 -0
- package/dist/src/solana/index.js +3 -0
- package/dist/src/solana/index.js.map +10 -0
- package/dist/src/substrate/index.cjs +3 -0
- package/dist/src/substrate/index.cjs.map +11 -0
- package/dist/src/substrate/index.js +3 -0
- package/dist/src/substrate/index.js.map +11 -0
- package/dist/src/tron/index.cjs +3 -0
- package/dist/src/tron/index.cjs.map +11 -0
- package/dist/src/tron/index.js +3 -0
- package/dist/src/tron/index.js.map +11 -0
- package/dist/src/utxo/index.cjs +3 -0
- package/dist/src/utxo/index.cjs.map +16 -0
- package/dist/src/utxo/index.js +3 -0
- package/dist/src/utxo/index.js.map +16 -0
- package/package.json +49 -37
- package/src/cosmos/thorchainUtils/addressFormat.ts +4 -1
- package/src/cosmos/thorchainUtils/messages.ts +2 -2
- package/src/cosmos/thorchainUtils/registry.ts +3 -3
- package/src/cosmos/toolbox/cosmos.ts +16 -11
- package/src/cosmos/toolbox/index.ts +2 -2
- package/src/cosmos/toolbox/thorchain.ts +11 -9
- package/src/cosmos/util.ts +13 -6
- package/src/evm/__tests__/ethereum.test.ts +1 -1
- package/src/evm/helpers.ts +4 -3
- package/src/evm/toolbox/baseEVMToolbox.ts +37 -25
- package/src/evm/toolbox/index.ts +2 -2
- package/src/evm/toolbox/op.ts +21 -7
- package/src/index.ts +117 -100
- package/src/near/helpers/contractFactory.ts +22 -0
- package/src/near/helpers/core.ts +86 -0
- package/src/near/helpers/gasEstimation.ts +110 -0
- package/src/near/helpers/index.ts +5 -0
- package/src/near/helpers/nep141.ts +110 -0
- package/src/near/index.ts +24 -0
- package/src/near/toolbox.ts +497 -0
- package/src/near/types/contract.ts +48 -0
- package/src/near/types/nep141.ts +66 -0
- package/src/near/types.ts +58 -0
- package/src/radix/index.ts +8 -2
- package/src/ripple/index.ts +15 -26
- package/src/solana/toolbox.ts +75 -2
- package/src/substrate/substrate.ts +1 -1
- package/src/tron/helpers/trc20.abi.ts +40 -0
- package/src/tron/index.ts +16 -0
- package/src/tron/toolbox.ts +328 -0
- package/src/tron/types.ts +22 -0
- package/src/utxo/helpers/api.ts +30 -16
- package/src/utxo/helpers/bchaddrjs.ts +8 -8
- package/src/utxo/helpers/coinselect.ts +2 -2
- package/src/utxo/helpers/txSize.ts +4 -3
- package/src/utxo/toolbox/bitcoinCash.ts +22 -14
- package/src/utxo/toolbox/index.ts +2 -1
- package/src/utxo/toolbox/utxo.ts +35 -27
- package/src/utxo/types.ts +2 -0
- package/dist/chunk-0h4xdrwz.js +0 -4
- package/dist/cosmos/index.cjs +0 -3
- package/dist/cosmos/index.cjs.map +0 -16
- package/dist/cosmos/index.js +0 -3
- package/dist/cosmos/index.js.map +0 -16
- package/dist/evm/index.cjs +0 -3
- package/dist/evm/index.cjs.map +0 -18
- package/dist/evm/index.js +0 -3
- package/dist/evm/index.js.map +0 -18
- package/dist/index.cjs +0 -3
- package/dist/index.cjs.map +0 -10
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -10
- package/dist/radix/index.cjs.map +0 -10
- package/dist/radix/index.js +0 -3
- package/dist/radix/index.js.map +0 -10
- package/dist/ripple/index.cjs +0 -3
- package/dist/ripple/index.cjs.map +0 -10
- package/dist/ripple/index.js +0 -3
- package/dist/ripple/index.js.map +0 -10
- package/dist/solana/index.cjs +0 -3
- package/dist/solana/index.cjs.map +0 -10
- package/dist/solana/index.js +0 -3
- package/dist/solana/index.js.map +0 -10
- package/dist/substrate/index.cjs +0 -3
- package/dist/substrate/index.cjs.map +0 -11
- package/dist/substrate/index.js +0 -3
- package/dist/substrate/index.js.map +0 -11
- package/dist/utxo/index.cjs +0 -3
- package/dist/utxo/index.cjs.map +0 -16
- package/dist/utxo/index.js +0 -3
- package/dist/utxo/index.js.map +0 -16
- /package/dist/{chunk-0f0249b1.js.map → chunk-9bqegm61.js.map} +0 -0
|
@@ -1,16 +0,0 @@
|
|
|
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 { 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 Error(\"Invalid base64 string format\");\n }\n return toByteArray(base64String);\n}\n",
|
|
6
|
-
"import type { TxBodyEncodeObject } from \"@cosmjs/proto-signing\";\nimport { AssetValue, Chain, ChainToChainId } 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 Error(\"Account does not exist\");\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 { AssetValue, Chain, ChainId, type CosmosChain, SKConfig } 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\");\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\");\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\");\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 Error(\"Unsupported 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 Error(\"Account does not exist\");\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",
|
|
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\");\n const { defaultRegistryTypes } = await import(\"@cosmjs/stargate\");\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\");\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 } 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 Error(`Chain ${chain} is not supported`);\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 derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { SwapKitApi } from \"@swapkit/helpers/api\";\nimport { P, match } from \"ts-pattern\";\nimport { getBalance } from \"../../utils\";\nimport type { CosmosToolboxParams } from \"../types\";\nimport {\n cosmosCreateTransaction,\n createSigningStargateClient,\n createStargateClient,\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 console.error(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\");\n const { stringToPath } = await import(\"@cosmjs/crypto\");\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\");\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\");\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: getBalance(chain),\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\");\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 console.error(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(BigInt(Math.floor(baseFee * 1.5)), BaseDecimal[chain]),\n fastest: SwapKitNumber.fromBigInt(BigInt(Math.floor(baseFee * 2)), BaseDecimal[chain]),\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 } = await import(\n \"@cosmjs/crypto\"\n );\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 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\");\n const { stringToPath } = await import(\"@cosmjs/crypto\");\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\");\n const { makeMultisignedTxBytes } = await import(\"@cosmjs/stargate\");\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 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\");\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 Error(`Invalid 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 Error(\"Signer not defined\");\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\");\n return pubkeyToAddress(pubkey, chainPrefix);\n },\n };\n}\n"
|
|
12
|
-
],
|
|
13
|
-
"mappings": "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",
|
|
14
|
-
"debugId": "8D24779E21FD884964756E2164756E21",
|
|
15
|
-
"names": []
|
|
16
|
-
}
|
package/dist/cosmos/index.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{b as vo}from"../chunk-0h4xdrwz.js";import{c as T,d as m}from"../chunk-p1kdg37m.js";import{base64 as oo,bech32 as Q}from"@scure/base";import{fromByteArray as Qo,toByteArray as Xo}from"base64-js";function X(o){return oo.encode(Uint8Array.from(Q.fromWords(Q.decode(o).words)))}function G(o,r="thor"){return Q.encode(r,Q.toWords(oo.decode(o)))}function _t(o){return Qo(o)}function At(o){if(!o.match(/^[a-zA-Z0-9+/]*={0,2}$/))throw new Error("Invalid base64 string format");return Xo(o)}import{AssetValue as Eo,Chain as Y,ChainToChainId as fo}from"@swapkit/helpers";import{AssetValue as Go,Chain as R,ChainId as U,SKConfig as to}from"@swapkit/helpers";var Do="FACTORY/KUJIRA1QK00H5ATUTPSV900X202PXX42NPJR9THG58DNQPA72F2P7M2LUASE444A7/UUSK",Jo="FACTORY/KUJIRA1YGFXN0ER40KLCNCK8THLTUPRDXLCK6WVNPKF2K/UYUM",Yo={amount:[{denom:"uatom",amount:"500"}],gas:"200000"},ho={amount:[{denom:"ukuji",amount:"1000"}],gas:"200000"};function u(o){switch(o){case R.Maya:return{amount:[],gas:"10000000000"};case R.THORChain:return{amount:[],gas:"500000000"};case R.Kujira:return ho;default:return Yo}}var I=(o,r=!1)=>{if(r)return o.toLowerCase();switch(o){case"uUSK":case"USK":return Do;case"uYUM":case"YUM":return Jo;case"uKUJI":case"KUJI":return"ukuji";case"ATOM":case"uATOM":return"uatom";default:return o}},D=({symbol:o,chain:r})=>{if(r===R.Maya)return(o.toUpperCase()!=="CACAO"?o:`${R.Maya}.${o}`).toUpperCase();if(r===R.THORChain)return(o.toUpperCase()!=="RUNE"?o:`${R.THORChain}.${o}`).toUpperCase();return I(o,!1)};async function j(o){let{StargateClient:r}=await import("@cosmjs/stargate");return r.connect(o)}async function J(o,r,t={}){let{SigningStargateClient:n,GasPrice:f}=await import("@cosmjs/stargate"),p=typeof t==="string"?t:"0.0003uatom",y=typeof t==="string"?{}:t;return n.connectWithSigner(o,r,{gasPrice:f.fromString(p),...y})}async function ro(o,r){let{SigningStargateClient:t}=await import("@cosmjs/stargate");return t.offline(o,r)}var Oo=(o)=>{let{isStagenet:r}=to.get("envs"),t=to.get("rpcUrls");switch(o){case U.Kujira:return t.KUJI;case U.THORChain:case"thorchain-mainnet-v1":return r?t.THOR_STAGENET:t.THOR;case U.Maya:return r?t.MAYA_STAGENET:t.MAYA;default:return t.GAIA}},Fo=(o)=>{switch(o){case R.Maya:case R.THORChain:return"/types.MsgSend";case R.Cosmos:case R.Kujira:return"/cosmos.bank.v1beta1.MsgSend";default:throw new Error("Unsupported chain")}},no=async({sender:o,recipient:r,assetValue:t,memo:n="",feeRate:f,sequence:p,accountNumber:y})=>{let{chain:x,chainId:i}=t,v=Oo(i),w=await(await j(v)).getAccount(o);if(!w)throw new Error("Account does not exist");let $=Go.from({chain:x}),B=I($.symbol),C=u(x),d=B&&f?{amount:[{denom:B,amount:f.toString()}],gas:C.gas}:C,W={fromAddress:o,toAddress:r,amount:[{amount:t.getBaseValue("string"),denom:I(t.symbol)}]};return{accountNumber:y??w.accountNumber,chainId:i,fee:d,memo:n,sequence:p??w.sequence,msgs:[{typeUrl:Fo(x),value:W}]}};import{Chain as qo}from"@swapkit/helpers";async function Z(){let{$root:o}=await import("../chunk-0f0249b1.js"),{Registry:r}=await import("@cosmjs/proto-signing"),{defaultRegistryTypes:t}=await import("@cosmjs/stargate");return new r([...t,["/types.MsgSend",o.types.MsgSend],["/types.MsgDeposit",o.types.MsgDeposit]])}async function z(o){let{AminoTypes:r}=await import("@cosmjs/stargate"),t=o===qo.THORChain?"thorchain":"mayachain";return new r({"/types.MsgSend":{aminoType:`${t}/MsgSend`,toAmino:({fromAddress:n,toAddress:f,...p})=>({...p,from_address:G(n),to_address:G(f)}),fromAmino:({from_address:n,to_address:f,...p})=>({...p,fromAddress:X(n),toAddress:X(f)})},"/types.MsgDeposit":{aminoType:`${t}/MsgDeposit`,toAmino:({signer:n,...f})=>({...f,signer:G(n)}),fromAmino:({signer:n,...f})=>({...f,signer:X(n)})}})}var Qt=u(Y.THORChain).gas,Xt=u(Y.Maya).gas,po=({sender:o,recipient:r,assetValue:t})=>{return{type:`${t.chain===Y.Maya?"mayachain":"thorchain"}/MsgSend`,value:{from_address:o,to_address:r,amount:[{amount:t.getBaseValue("string"),denom:I(t.symbol,!0)}]}}},yo=({sender:o,assetValue:r,memo:t=""})=>{return{type:`${r.chain===Y.Maya?"mayachain":"thorchain"}/MsgDeposit`,value:{coins:[{amount:r.getBaseValue("string"),asset:D(r)}],signer:o,memo:t}}},e=({sender:o,recipient:r,assetValue:t,memo:n})=>{return!r?yo({sender:o,assetValue:t,memo:n}):po({sender:o,recipient:r,assetValue:t})},L=async(o,r)=>{return(await z(r)).fromAmino(o)},wo=async({rpcUrl:o,sender:r})=>{let n=await(await j(o)).getAccount(r);if(!n)throw new Error("Account does not exist");return n};function io(o){return function r(t){let{assetValue:n,recipient:f,memo:p,sender:y,asSignable:x,asAminoMessage:i}=t;if(f)return No(o)({sender:y,recipient:f,assetValue:n,memo:p,asSignable:x,asAminoMessage:i});return So(o)({sender:y,assetValue:n,memo:p,asSignable:x,asAminoMessage:i})}}var No=(o)=>async({sender:r,recipient:t,assetValue:n,memo:f="",asSignable:p=!0,asAminoMessage:y=!1,sequence:x,accountNumber:i})=>{let v=await wo({rpcUrl:o,sender:r}),c=n.chain,w=po({sender:r,recipient:t,assetValue:n}),$=p?await L(y?w:P(w),c):w;return{chainId:fo[c],accountNumber:i||v.accountNumber,sequence:x||v.sequence,msgs:[$],fee:u(n.chain),memo:f}},So=(o)=>async({sender:r,assetValue:t,memo:n="",asSignable:f=!0,asAminoMessage:p=!1,sequence:y,accountNumber:x})=>{let i=await wo({rpcUrl:o,sender:r}),v=t.chain,c=yo({sender:r,assetValue:t,memo:n}),w=f?await L(p?c:P(c),v):c;return{chainId:fo[v],accountNumber:x||i.accountNumber,sequence:y||i.sequence,msgs:[w],fee:u(t.chain),memo:n}};function P(o){if(o.type==="thorchain/MsgSend"||o.type==="mayachain/MsgSend")return o;return{...o,value:{...o.value,coins:o.value.coins.map((r)=>{let t=Eo.from({asset:r.asset}),n=(t.isSynthetic?t.symbol.split("/")?.[1]:t.symbol)?.toUpperCase(),f=(t.isSynthetic?t.symbol.split("/")?.[0]:t.chain)?.toUpperCase();return{...r,asset:{chain:f,symbol:n,ticker:t.ticker,synth:t.isSynthetic}}})}}}async function h({chain:o,memo:r,msgs:t}){let n=await Z(),f=await z(o),p={typeUrl:"/cosmos.tx.v1beta1.TxBody",value:{memo:r,messages:t.map((y)=>f.fromAmino(y))}};return n.encode(p)}import{Chain as q}from"@swapkit/helpers";import{base64 as s,bech32 as V}from"@scure/base";import{AssetValue as $o,BaseDecimal as b,Chain as H,ChainToChainId as Mo,CosmosChainPrefixes as Wo,DerivationPath as Uo,FeeOption as eo,NetworkDerivationPath as Vo,SKConfig as Bo,SwapKitError as O,SwapKitNumber as g,derivationPathToString as xo,updateDerivationPath as bo}from"@swapkit/helpers";import{SwapKitApi as Ro}from"@swapkit/helpers/api";import{P as Co,match as go}from"ts-pattern";async function Ho(o,r){try{let n=(await Ro.getGasRate()).find((f)=>f.chainId===o)?.value;return n?Number.parseFloat(n):r}catch(t){return console.error(t),r}}async function To({phrase:o,prefix:r,...t}){let{DirectSecp256k1HdWallet:n}=await import("@cosmjs/proto-signing"),{stringToPath:f}=await import("@cosmjs/crypto"),p="derivationPath"in t?t.derivationPath:`${Uo[t.chain]}/${t.index}`;return n.fromMnemonic(o,{prefix:r,hdPaths:[f(p)]})}async function et({privateKey:o,prefix:r}){let{DirectSecp256k1Wallet:t}=await import("@cosmjs/proto-signing");return t.fromKey(o,r)}var mo={[H.Cosmos]:500,[H.Kujira]:1000,[H.THORChain]:5000000,[H.Maya]:5000000};function so(o){return async function r({signature:t,message:n,address:f}){let p=await o(f);if(!p?.pubkey)throw new O("toolbox_cosmos_verify_signature_no_pubkey");let{Secp256k1Signature:y,Secp256k1:x}=await import("@cosmjs/crypto"),i=y.fromFixedLength(s.decode(t));return x.verifySignature(i,s.decode(n),p.pubkey.value)}}async function F({chain:o,...r}){let t=Bo.get("rpcUrls")[o],n=Wo[o],f="index"in r?r.index||0:0,p=xo("derivationPath"in r&&r.derivationPath?r.derivationPath:bo(Vo[o],{index:f})),y=await go(r).with({phrase:Co.string},({phrase:w})=>To({phrase:w,prefix:n,derivationPath:p})).with({signer:Co.any},({signer:w})=>w).otherwise(()=>{return});async function x(w){return(await j(t)).getAccount(w)}async function i(){let[w]=await y?.getAccounts()||[];return w?.address}async function v(){let[w]=await y?.getAccounts()||[];if(!w?.pubkey)throw new O("toolbox_cosmos_signer_not_defined");return s.encode(w?.pubkey)}async function c({recipient:w,assetValue:$,memo:B="",feeRate:C,feeOptionKey:d=eo.Fast}){let W=await i();if(!(y&&W))throw new O("toolbox_cosmos_signer_not_defined");let _=$o.from({chain:o}),A=D(_),E=C||lo((await co(o,mo[o]))[d],A),N=await J(t,y),S=[{denom:I(`u${$.symbol}`).toLowerCase(),amount:$.getBaseValue("string")}],{transactionHash:K}=await N.sendTokens(W,w,S,E,B);return K}return{transfer:c,getAddress:i,getAccount:x,getBalance:vo(o),getSignerFromPhrase:async({phrase:w,derivationPath:$})=>To({phrase:w,prefix:n,derivationPath:xo($),index:f}),getSignerFromPrivateKey:async(w)=>{let{DirectSecp256k1Wallet:$}=await import("@cosmjs/proto-signing");return $.fromKey(w,n)},createPrivateKeyFromPhrase:rt(p),validateAddress:_o(n),getPubKey:v,getFees:()=>co(o,mo[o]),fetchFeeRateFromSwapKit:Ho,getBalanceAsDenoms:tt(t),createTransaction:no,verifySignature:so(x)}}async function Vt(o,r){try{let n=(await Ro.getGasRate()).find((f)=>f.chainId===o)?.value;return n?Number.parseFloat(n):r}catch(t){return console.error(t),r}}function bt({address:o,chain:r,prefix:t}){let n=t||ao(r);if(!(n&&o))throw new O("toolbox_cosmos_validate_address_prefix_not_found");return _o(n)(o)}function gt({assetValue:{chain:o}}){return $o.from({chain:o,value:ot(o)})}function ao(o){let{isStagenet:r}=Bo.get("envs"),t=o?[H.THORChain,H.Maya].includes(o)&&r:!1,n=o?Wo[o]:void 0;return t?`s${n}`:n}async function co(o,r){let t=await Ho(Mo[o],r);return{average:g.fromBigInt(BigInt(t),b[o]),fast:g.fromBigInt(BigInt(Math.floor(t*1.5)),b[o]),fastest:g.fromBigInt(BigInt(Math.floor(t*2)),b[o])}}function lo(o,r){return{amount:[{denom:r,amount:o.getBaseValue("string")}],gas:"200000"}}function ot(o){return{[H.Cosmos]:0.007,[H.Kujira]:0.02,[H.THORChain]:0.02,[H.Maya]:0.02}[o]||0}function _o(o){return function r(t){if(!t.startsWith(o))return!1;try{let{prefix:n,words:f}=V.decode(t);return V.encode(n,f)===t.toLocaleLowerCase()}catch(n){return!1}}}function tt(o){return async function r(t){return(await(await j(o)).getAllBalances(t)).map((y)=>({...y,denom:y.denom.includes("/")?y.denom.toUpperCase():y.denom}))}}function rt(o){return async function r(t){let{Bip39:n,EnglishMnemonic:f,Slip10:p,Slip10Curve:y,stringToPath:x}=await import("@cosmjs/crypto"),i=new f(t),v=await n.mnemonicToSeed(i),{privkey:c}=p.derivePath(y.Secp256k1,v,x(o));return c}}import{base64 as k}from"@scure/base";import{BaseDecimal as nt,Chain as ft,CosmosChainPrefixes as pt,FeeOption as a,NetworkDerivationPath as yt,RequestClient as wt,SKConfig as l,SwapKitNumber as Ao,derivationPathToString as it,updateDerivationPath as xt}from"@swapkit/helpers";import{P as uo,match as Ct}from"ts-pattern";function Tt({prefix:o,derivationPath:r}){return async function t(n,f=0){let{Secp256k1HdWallet:p}=await import("@cosmjs/amino"),{stringToPath:y}=await import("@cosmjs/crypto");return p.fromMnemonic(n,{hdPaths:[y(`${r}/${f}`)],prefix:o})}}function mt(o){return k.encode(o)}function ct(o){return async function r({wallet:t,tx:n}){let{msgs:f,accountNumber:p,sequence:y,chainId:x,fee:i,memo:v}=typeof n==="string"?JSON.parse(n):n,c=(await t.getAccounts())?.[0]?.address||"",w=await z(o),$=await Z(),B=await ro(t,{registry:$,aminoTypes:w}),C=[];for(let _ of f){let A=await L(_,o);C.push(A)}let{signatures:[d]}=await B.sign(c,C,i,v,{accountNumber:p,sequence:y,chainId:x}),W=await h({chain:o,memo:v,msgs:f.map(P)});return{signature:mt(d),bodyBytes:W}}}function vt({prefix:o,rpcUrl:r}){return async function t(n,f,p,y,x){let{encodeSecp256k1Pubkey:i,pubkeyToAddress:v}=await import("@cosmjs/amino"),{makeMultisignedTxBytes:c}=await import("@cosmjs/stargate"),{sequence:w,fee:$}=JSON.parse(n),B=await jo(p,y),C=f.map((_)=>[v(i(k.decode(_.pubKey)),o),k.decode(_.signature)]),d=await j(r),{transactionHash:W}=await d.broadcastTx(c(B,w,$,x,new Map(C)));return W}}async function jo(o,r,t=!0){let{createMultisigThresholdPubkey:n,encodeSecp256k1Pubkey:f}=await import("@cosmjs/amino");return n(o.map((p)=>f(k.decode(p))),r,t)}function $t(o){return k.decode(o)}async function dt({privateKey:o,message:r}){let{Secp256k1:t}=await import("@cosmjs/crypto"),n=await t.createSignature(k.decode(r),o);return k.encode(Buffer.concat([n.r(32),n.s(32)]))}async function Io({chain:o,...r}){let t=l.get("nodeUrls")[o],n=l.get("rpcUrls")[o],{isStagenet:f}=l.get("envs"),p=o===ft.THORChain,y=`${f?"s":""}${pt[o]}`,x="index"in r?r.index||0:0,i="derivationPath"in r&&r.derivationPath?r.derivationPath:xt(yt[o],{index:x}),v=await F({chain:o,...r}),c=await Ct(r).with({phrase:uo.string},({phrase:C})=>v.getSignerFromPhrase({phrase:C,derivationPath:i})).with({signer:uo.any},({signer:C})=>C).otherwise(()=>{return}),w=u(o);async function $(){let C,d=`${t}/${p?"thorchain":"mayachain"}/constants`;try{let{int_64_values:{NativeTransactionFee:W}}=await wt.get(d);if(!W||Number.isNaN(W)||W<0)throw new Error(`Invalid nativeFee: ${W.toString()}`);C=new Ao(W)}catch{C=new Ao({value:p?0.02:1,decimal:nt[o]})}return{[a.Average]:C,[a.Fast]:C,[a.Fastest]:C}}async function B({assetValue:C,memo:d="",recipient:W}){let{TxRaw:_}=await import("cosmjs-types/cosmos/tx/v1beta1/tx"),A=(await c?.getAccounts())?.[0]?.address;if(!(A&&c))throw new Error("Signer not defined");let E="signAmino"in c,N=await Z(),S=await z(o),K=await J(n,c,{registry:N,aminoTypes:S}),M=e({assetValue:C,sender:A,recipient:W,memo:d});if(E){let Po=await L(M,o),{signatures:ko,authInfoBytes:Zo}=await K.sign(A,[Po],w,d),Ko=_.encode({signatures:ko,authInfoBytes:Zo,bodyBytes:await h({chain:o,msgs:[M].map(P),memo:d})}).finish();return(await K.broadcastTx(Ko)).transactionHash}let zo=P(M),Lo=await L(zo,o);return(await K.signAndBroadcast(A,[Lo],w,d)).transactionHash}return{...v,broadcastMultisigTx:vt({prefix:y,rpcUrl:n}),buildAminoMsg:e,buildEncodedTxBody:h,convertToSignable:L,createDefaultAminoTypes:()=>z(o),createDefaultRegistry:Z,createMultisig:jo,createTransaction:io(n),deposit:B,getFees:$,importSignature:$t,parseAminoMessageForDirectSigning:P,secp256k1HdWalletFromMnemonic:Tt({derivationPath:it(i),prefix:y}),signMultisigTx:ct(o),signWithPrivateKey:dt,transfer:B,pubkeyToAddress:async(C)=>{let{pubkeyToAddress:d}=await import("@cosmjs/amino");return d(C,y)}}}var ir=(o,r)=>{switch(o){case q.Cosmos:case q.Kujira:return F({chain:o,...r});case q.Maya:case q.THORChain:return Io({chain:o,...r});default:throw new Error(`Chain ${o} is not supported`)}};export{so as verifySignature,po as transferMsgAmino,_t as toBase64,P as parseAminoMessageForDirectSigning,et as getSignerFromPrivateKey,To as getSignerFromPhrase,Oo as getRPC,I as getMsgSendDenom,Vt as getFeeRateFromThorswap,D as getDenomWithChain,u as getDefaultChainFee,io as getCreateTransaction,ir as getCosmosToolbox,At as fromBase64,Ho as fetchFeeRateFromSwapKit,gt as estimateTransactionFee,yo as depositMsgAmino,Io as createThorchainToolbox,j as createStargateClient,J as createSigningStargateClient,ro as createOfflineStargateClient,Z as createDefaultRegistry,z as createDefaultAminoTypes,F as createCosmosToolbox,bt as cosmosValidateAddress,no as cosmosCreateTransaction,L as convertToSignable,No as buildTransferTx,h as buildEncodedTxBody,So as buildDepositTx,e as buildAminoMsg,X as bech32ToBase64,G as base64ToBech32,Jo as YUM_KUJIRA_FACTORY_DENOM,Do as USK_KUJIRA_FACTORY_DENOM,Qt as THORCHAIN_GAS_VALUE,Xt as MAYA_GAS_VALUE,ho as DEFAULT_KUJI_FEE_MAINNET,Yo as DEFAULT_COSMOS_FEE_MAINNET};
|
|
2
|
-
|
|
3
|
-
//# debugId=620315376484B60C64756E2164756E21
|
package/dist/cosmos/index.js.map
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
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 { 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 Error(\"Invalid base64 string format\");\n }\n return toByteArray(base64String);\n}\n",
|
|
6
|
-
"import type { TxBodyEncodeObject } from \"@cosmjs/proto-signing\";\nimport { AssetValue, Chain, ChainToChainId } 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 Error(\"Account does not exist\");\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 { AssetValue, Chain, ChainId, type CosmosChain, SKConfig } 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\");\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\");\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\");\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 Error(\"Unsupported 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 Error(\"Account does not exist\");\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",
|
|
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\");\n const { defaultRegistryTypes } = await import(\"@cosmjs/stargate\");\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\");\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 } 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 Error(`Chain ${chain} is not supported`);\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 derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { SwapKitApi } from \"@swapkit/helpers/api\";\nimport { P, match } from \"ts-pattern\";\nimport { getBalance } from \"../../utils\";\nimport type { CosmosToolboxParams } from \"../types\";\nimport {\n cosmosCreateTransaction,\n createSigningStargateClient,\n createStargateClient,\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 console.error(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\");\n const { stringToPath } = await import(\"@cosmjs/crypto\");\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\");\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\");\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: getBalance(chain),\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\");\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 console.error(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(BigInt(Math.floor(baseFee * 1.5)), BaseDecimal[chain]),\n fastest: SwapKitNumber.fromBigInt(BigInt(Math.floor(baseFee * 2)), BaseDecimal[chain]),\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 } = await import(\n \"@cosmjs/crypto\"\n );\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 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\");\n const { stringToPath } = await import(\"@cosmjs/crypto\");\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\");\n const { makeMultisignedTxBytes } = await import(\"@cosmjs/stargate\");\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 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\");\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 Error(`Invalid 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 Error(\"Signer not defined\");\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\");\n return pubkeyToAddress(pubkey, chainPrefix);\n },\n };\n}\n"
|
|
12
|
-
],
|
|
13
|
-
"mappings": "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",
|
|
14
|
-
"debugId": "620315376484B60C64756E2164756E21",
|
|
15
|
-
"names": []
|
|
16
|
-
}
|
package/dist/evm/index.cjs
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
var Ft={};gt(Ft,{toHexString:()=>Z,toChecksumAddress:()=>Jt,isStateChangingCall:()=>Tt,isBrowserProvider:()=>N,getTokenAddress:()=>V,getProvider:()=>z,getNetworkParams:()=>v,getL1GasPriceFetcher:()=>K,getIsEIP1559Compatible:()=>d,getEvmToolbox:()=>ht,getEvmApi:()=>Y,getEstimateTransactionFee:()=>A,getEstimateGasPrices:()=>C,getEIP1193SendTransaction:()=>S,getCreateContractTxObject:()=>$,getCreateContract:()=>it,getChecksumAddressFromAsset:()=>Ct,evmValidateAddress:()=>mt,estimateMaxSendableAmount:()=>Zt,estimateL1Gas:()=>Lt,createCustomEvmApi:()=>xt,createContract:()=>I,OPToolbox:()=>at,MAX_APPROVAL:()=>F,MATICToolbox:()=>yt,EthNetwork:()=>wt,ETHToolbox:()=>r,BaseEVMToolbox:()=>X,BSCToolbox:()=>et,BASEToolbox:()=>ut,AVAXToolbox:()=>nt,ARBToolbox:()=>tt});module.exports=jt(Ft);var g=require("@swapkit/helpers");function Y(t){let u=g.SKConfig.get("apis")[t];if(u)return g.warnOnce(!0,"Using custom EVM API. Be sure to implement all methods to avoid issues."),u;return Ht(t)}function xt(t){return t}function Ht(t){return{getBalance:pt(t)}}var i=require("@swapkit/helpers");var o=require("@swapkit/helpers"),G=require("@swapkit/helpers/contracts"),L=require("ethers");var F=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");function X({chain:t=o.Chain.Ethereum,provider:u,signer:n,isEIP1559Compatible:e=!0}){return{getAddress:()=>{return n?n.getAddress():void 0},call:O({provider:u,signer:n,isEIP1559Compatible:e,chain:t}),estimateCall:Mt({provider:u,signer:n}),EIP1193SendTransaction:S(u),approve:Gt({provider:u,signer:n,isEIP1559Compatible:e,chain:t}),approvedAmount:bt({provider:u,chain:t}),broadcastTransaction:u.broadcastTransaction,createApprovalTx:Yt({provider:u,signer:n,chain:t}),createContract:it({provider:u,chain:t}),createContractTxObject:$({provider:u,chain:t}),createTransferTx:_({provider:u,signer:n,chain:t}),createTransaction:_({provider:u,signer:n,chain:t}),estimateGasLimit:Wt({provider:u,signer:n,chain:t}),estimateGasPrices:C({chain:t,provider:u,isEIP1559Compatible:e}),isApproved:kt({provider:u,chain:t}),sendTransaction:st({provider:u,signer:n,isEIP1559Compatible:e,chain:t}),signMessage:n?.signMessage,transfer:$t({provider:u,signer:n,isEIP1559Compatible:e,chain:t}),validateAddress:(y)=>mt({address:y})}}function mt({address:t}){try{return L.getAddress(t),!0}catch(u){return!1}}function N(t){return t instanceof L.BrowserProvider}function I(t,u,n){return new L.Contract(t,L.Interface.from(u),n)}function it({provider:t}){return function u(n,e){return new L.Contract(n,L.Interface.from(e),t)}}var qt=["payable","nonpayable"];function Tt({abi:t,funcName:u}){let n=t.find((e)=>e.name===u);if(!n)throw new o.SwapKitError("toolbox_evm_no_abi_fragment",{funcName:u});return n.stateMutability&&qt.includes(n.stateMutability)}function Jt(t){return L.getAddress(t)}function S(t){return function u({value:n,...e}){if(!N(t))throw new o.SwapKitError("toolbox_evm_provider_not_eip1193_compatible");return t.send("eth_sendTransaction",[{value:Z(BigInt(n||0)),...e}])}}function Ct(t,u){let n=V(t,u);if(n)return L.getAddress(n.toLowerCase());throw new o.SwapKitError("toolbox_evm_invalid_gas_asset_address")}var zt={[o.Chain.Arbitrum]:o.ContractAddress.ARB,[o.Chain.Avalanche]:o.ContractAddress.AVAX,[o.Chain.Base]:o.ContractAddress.BASE,[o.Chain.BinanceSmartChain]:o.ContractAddress.BSC,[o.Chain.Ethereum]:o.ContractAddress.ETH,[o.Chain.Optimism]:o.ContractAddress.OP,[o.Chain.Polygon]:o.ContractAddress.MATIC};function V({chain:t,symbol:u,ticker:n},e){try{let y=t===o.Chain.BinanceSmartChain&&u==="BNB"&&n==="BNB",l=t===e&&u===e&&n===e,a=[o.Chain.Arbitrum,o.Chain.Base].includes(t)&&u==="ETH"&&n==="ETH";if(l||y||a)return zt[e];return L.getAddress(u.slice(n.length+1).replace(/^0X/,""))}catch(y){return null}}function $({provider:t}){return async({contractAddress:u,abi:n,funcName:e,funcParams:y=[],txOverrides:l})=>I(u,n,t).getFunction(e).populateTransaction(...y.concat(l).filter((a)=>typeof a!=="undefined"))}function C({chain:t,provider:u,isEIP1559Compatible:n=!0}){if(t===o.Chain.Arbitrum)return async function e(){try{let{gasPrice:y}=await u.getFeeData();if(!y)throw new Error("No fee data available");return{[o.FeeOption.Average]:{gasPrice:y},[o.FeeOption.Fast]:{gasPrice:y},[o.FeeOption.Fastest]:{gasPrice:y}}}catch(y){throw new Error(`Failed to estimate gas price: ${y.msg??y.toString()}`)}};if(t===o.Chain.Optimism)return async function e(){try{let{maxFeePerGas:y,maxPriorityFeePerGas:l,gasPrice:a}=await u.getFeeData(),p=K(u)(),m=a;if(!(y&&l))throw new Error("No fee data available");return{[o.FeeOption.Average]:{l1GasPrice:p,gasPrice:m,maxFeePerGas:y,maxPriorityFeePerGas:l},[o.FeeOption.Fast]:{l1GasPrice:(p||0n)*15n/10n,gasPrice:m*15n/10n,maxFeePerGas:y,maxPriorityFeePerGas:l*15n/10n},[o.FeeOption.Fastest]:{l1GasPrice:(p||0n)*2n,gasPrice:m*2n,maxFeePerGas:y,maxPriorityFeePerGas:l*2n}}}catch(y){throw new Error(`Failed to estimate gas price: ${y.msg??y.toString()}`)}};return async function e(){try{let{maxFeePerGas:y,maxPriorityFeePerGas:l,gasPrice:a}=await u.getFeeData();if(n){if(y===null||l===null)throw new o.SwapKitError("toolbox_evm_no_fee_data");return{[o.FeeOption.Average]:{maxFeePerGas:y,maxPriorityFeePerGas:l},[o.FeeOption.Fast]:{maxFeePerGas:y*15n/10n,maxPriorityFeePerGas:l*15n/10n},[o.FeeOption.Fastest]:{maxFeePerGas:y*2n,maxPriorityFeePerGas:l*2n}}}if(!a)throw new o.SwapKitError("toolbox_evm_no_gas_price");return{[o.FeeOption.Average]:{gasPrice:a},[o.FeeOption.Fast]:{gasPrice:a*15n/10n},[o.FeeOption.Fastest]:{gasPrice:a*2n}}}catch(y){throw new Error(`Failed to estimate gas price: ${y.msg??y.toString()}`)}}}function O({provider:t,isEIP1559Compatible:u,signer:n,chain:e}){return async function y({callProvider:l,contractAddress:a,abi:p,funcName:m,funcParams:b=[],txOverrides:M={},feeOption:c=o.FeeOption.Fast}){let T=l||t;if(!a)throw new Error("contractAddress must be provided");let s=Tt({abi:p,funcName:m});if(s&&N(T)&&n){let D=$({provider:T,chain:e}),U=M?.from||await n?.getAddress(),E=await D({contractAddress:a,abi:p,funcName:m,funcParams:b,txOverrides:{...M,from:U}});return S(T)(E)}let w=I(a,p,T);if(s){if(!n)throw new o.SwapKitError("toolbox_evm_no_signer");let D=M?.from||await n.getAddress();if(!D)throw new o.SwapKitError("toolbox_evm_no_signer_address");let U=w.connect(n),E=C({provider:t,isEIP1559Compatible:u,chain:e}),{maxFeePerGas:H,maxPriorityFeePerGas:f,gasPrice:q}=(await E())[c],Q=await w.getFunction(m).estimateGas(...b,M),j=await U[m](...b,{...M,gasLimit:Q,maxFeePerGas:H,maxPriorityFeePerGas:f,gasPrice:q,nonce:M?.nonce||await T.getTransactionCount(D)});return typeof j?.hash==="string"?j?.hash:j}let B=await w[m]?.(...b);return typeof B?.hash==="string"?B?.hash:B}}function bt({provider:t,chain:u}){return function n({assetAddress:e,spenderAddress:y,from:l}){return O({provider:t,isEIP1559Compatible:!0,chain:u})({contractAddress:e,abi:G.erc20ABI,funcName:"allowance",funcParams:[l,y]})}}function kt({provider:t,chain:u}){return async function n({assetAddress:e,spenderAddress:y,from:l,amount:a=F}){let p=await bt({provider:t,chain:u})({assetAddress:e,spenderAddress:y,from:l});return o.SwapKitNumber.fromBigInt(p).gte(o.SwapKitNumber.fromBigInt(BigInt(a)))}}function Gt({signer:t,isEIP1559Compatible:u=!0,provider:n,chain:e}){return async function y({assetAddress:l,spenderAddress:a,feeOptionKey:p=o.FeeOption.Fast,amount:m,gasLimitFallback:b,from:M,nonce:c}){let T=[a,BigInt(m||F)],s=await t?.getAddress()||M,w={contractAddress:l,abi:G.erc20ABI,funcName:"approve",funcParams:T,signer:t,txOverrides:{from:s}};if(N(n)){let D=$({provider:n,chain:e}),U=S(n),E=await D(w);return U(E)}return O({provider:n,isEIP1559Compatible:u,signer:t,chain:e})({...w,funcParams:T,txOverrides:{from:s,nonce:c,gasLimit:b?BigInt(b.toString()):void 0},feeOption:p})}}function $t({signer:t,isEIP1559Compatible:u=!0,provider:n}){return async function e({assetValue:y,memo:l,recipient:a,feeOptionKey:p=o.FeeOption.Fast,sender:m,...b}){let{hexlify:M,toUtf8Bytes:c}=await import("ethers"),T=y.getBaseValue("bigint"),s=y.chain,w=m||await t?.getAddress(),B=st({provider:n,signer:t,isEIP1559Compatible:u,chain:s});if(!w)throw new o.SwapKitError("toolbox_evm_no_from_address");if(y.isGasAsset){let q={...b,from:w,to:a,value:T,data:M(c(l||"")),feeOptionKey:p};return B(q)}if(!V(y,s))throw new o.SwapKitError("toolbox_evm_no_contract_address");let{maxFeePerGas:U,maxPriorityFeePerGas:E,gasPrice:H}=(await C({provider:n,isEIP1559Compatible:u,chain:s})())[p],f=await _({provider:n,signer:t,chain:s})({assetValue:y,memo:l,recipient:a,data:M(c(l||"")),sender:w,maxFeePerGas:U,maxPriorityFeePerGas:E,gasPrice:H});return B(f)}}function Mt({provider:t,signer:u}){return function n({contractAddress:e,abi:y,funcName:l,funcParams:a=[],txOverrides:p}){if(!e)throw new o.SwapKitError("toolbox_evm_no_contract_address");let m=I(e,y,t);return u?m.connect(u).getFunction(l).estimateGas(...a,p):m.getFunction(l).estimateGas(...a,p)}}function Wt({provider:t,signer:u}){return async function n({assetValue:e,recipient:y,memo:l,sender:a,funcName:p,funcParams:m,txOverrides:b}){let M=e.bigIntValue,c=e.isGasAsset?null:V(e,e.chain);if(c&&p)return Mt({provider:t,signer:u})({contractAddress:c,abi:G.erc20ABI,funcName:p,funcParams:m,txOverrides:b});let{hexlify:T,toUtf8Bytes:s}=await import("ethers");return t.estimateGas({from:a,to:y,value:M,data:l?T(s(l)):void 0})}}var Qt=(t)=>t.type===2||!!t.maxFeePerGas||!!t.maxPriorityFeePerGas;function st({provider:t,signer:u,isEIP1559Compatible:n=!0,chain:e}){return async function y({feeOptionKey:l=o.FeeOption.Fast,...a}){let{from:p,to:m,data:b,value:M,...c}=a;if(!u)throw new o.SwapKitError("toolbox_evm_no_signer");if(!m)throw new o.SwapKitError("toolbox_evm_no_to_address");let T={...c,data:b||"0x",to:m,from:p,value:BigInt(M||0)};if(N(t))return S(t)(T);let s=p||await u.getAddress(),w=a.nonce||await t.getTransactionCount(s),B=(await t.getNetwork()).chainId,D=Qt(T)||n,U=C({provider:t,isEIP1559Compatible:n,chain:e}),E=D&&!(T.maxFeePerGas&&T.maxPriorityFeePerGas)||!T.gasPrice?Object.entries((await U())[l]).reduce((f,[q,Q])=>({...f,[q]:Z(BigInt(Q))}),{}):{},H;try{H=Z(T.gasLimit||await t.estimateGas(T)*11n/10n)}catch(f){throw new o.SwapKitError("toolbox_evm_error_estimating_gas_limit",{error:f})}try{let f={...T,chainId:B,type:D?2:0,gasLimit:H,nonce:w,...E};try{return(await u.sendTransaction(f)).hash}catch(q){let Q=await u.signTransaction({...f,from:s});return(await t.broadcastTransaction(Q)).hash}}catch(f){throw new o.SwapKitError("toolbox_evm_error_sending_transaction",{error:f})}}}function _({provider:t,signer:u}){return async function n({assetValue:e,memo:y,recipient:l,data:a,sender:p,maxFeePerGas:m,maxPriorityFeePerGas:b,gasPrice:M,...c}){let T=e.getBaseValue("bigint"),s=e.chain,w=p||await u?.getAddress();if(!w)throw new o.SwapKitError("toolbox_evm_no_from_address");if(o.isGasAsset(e)){let{hexlify:U,toUtf8Bytes:E}=await import("ethers");return{...c,from:w,to:l,value:T,data:a||U(E(y||""))}}let B=V(e,s);if(!B)throw new o.SwapKitError("toolbox_evm_no_contract_address");return $({provider:t,chain:e.chain})({contractAddress:B,abi:G.erc20ABI,funcName:"transfer",funcParams:[l,T],txOverrides:{from:w,maxFeePerGas:m,maxPriorityFeePerGas:b,gasPrice:M}})}}function Yt({provider:t,signer:u,chain:n}){return async function e({assetAddress:y,spenderAddress:l,amount:a,from:p}){let m=await u?.getAddress()||p,b=$({provider:t,chain:n}),M=[l,BigInt(a||F)];return await b({contractAddress:y,abi:G.erc20ABI,funcName:"approve",funcParams:M,txOverrides:{from:m}})}}async function z(t,u){let{JsonRpcProvider:n}=await import("ethers");return new n(u||i.SKConfig.get("rpcUrls")[t])}var Zt=async({from:t,memo:u="",feeOptionKey:n=i.FeeOption.Fastest,assetValue:e,abi:y,funcName:l,funcParams:a,contractAddress:p,txOverrides:m})=>{let{getEvmToolbox:b}=await import("@swapkit/toolboxes/evm"),M=await b(e.chain),T=(await M.getBalance(t)).find(({symbol:f,chain:q})=>e?f===e.symbol:f===i.AssetValue.from({chain:q})?.symbol),s=(await M.estimateGasPrices())[n];if(!T)return i.AssetValue.from({chain:e.chain});if(e&&(T.chain!==e.chain||T.symbol!==e?.symbol))return T;let w=y&&l&&a&&p?await M.estimateCall({contractAddress:p,abi:y,funcName:l,funcParams:a,txOverrides:m}):await M.estimateGasLimit({sender:t,recipient:t,memo:u,assetValue:e}),B="maxFeePerGas"in s,D="gasPrice"in s&&s.gasPrice!==void 0;if(!(s&&(D||B)))throw new Error("Could not fetch fee data");let U=B?(s.maxFeePerGas||1n)+(s.maxPriorityFeePerGas||1n):s.gasPrice||1n,E=w*U,H=i.SwapKitNumber.fromBigInt(T.getBaseValue("bigint")).sub(E.toString());return i.AssetValue.from({chain:T.chain,value:H.getValue("string")})};function Z(t){return t>0n?`0x${t.toString(16)}`:"0x0"}function A({provider:t,isEIP1559Compatible:u=!0}){return async function n({feeOption:e=i.FeeOption.Fast,chain:y,...l}){let p=await C({provider:t,isEIP1559Compatible:u,chain:y})(),m=await t.estimateGas(l),b=i.AssetValue.from({chain:y}),{gasPrice:M,maxFeePerGas:c,maxPriorityFeePerGas:T}=p[e];if(!u&&M)return b.set(i.SwapKitNumber.fromBigInt(M*m,b.decimal));if(c&&T){let s=(c+T)*m;return b.set(i.SwapKitNumber.fromBigInt(s,b.decimal))}throw new Error("No gas price found")}}function v(t){return()=>i.Chain.Ethereum===t?void 0:{...Xt({chain:t}),chainId:i.ChainToHexChainId[t],rpcUrls:[i.SKConfig.get("rpcUrls")[t]],blockExplorerUrls:[i.ChainToExplorerUrl[t]]}}function d(t){return![i.Chain.Arbitrum,i.Chain.BinanceSmartChain].includes(t)}function Xt({chain:t}){let u=i.BaseDecimal[t];switch(t){case i.Chain.Arbitrum:return{chainName:"Arbitrum One",nativeCurrency:{name:"Ethereum",symbol:i.Chain.Ethereum,decimals:u}};case i.Chain.Avalanche:return{chainName:"Avalanche Network",nativeCurrency:{name:"Avalanche",symbol:t,decimals:u}};case i.Chain.Base:return{chainName:"Base Mainnet",nativeCurrency:{name:"Ethereum",symbol:i.Chain.Ethereum,decimals:u}};case i.Chain.BinanceSmartChain:return{chainName:"BNB Chain",nativeCurrency:{name:"Binance Coin",symbol:"BNB",decimals:u}};case i.Chain.Polygon:return{chainName:"Polygon Mainnet",nativeCurrency:{name:"Polygon",symbol:i.Chain.Polygon,decimals:u}};default:throw new Error(`Chain ${t} is not supported`)}}var wt;((n)=>{n.Test="goerli";n.Main="homestead"})(wt||={});var J=require("@swapkit/helpers");var x=require("@swapkit/helpers"),ft=require("ethers"),h=require("ts-pattern");var ct=[{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 W(x.Chain.Ethereum)({provider:t,...u});async function e(y,l="0x5ba1e12693dc8f9c48aad8770482f4739beed696",a="aggregate",p=x.FeeOption.Fast){let m=await n.createContractTxObject({contractAddress:l,abi:ct,funcName:a,funcParams:[y]});return n.sendTransaction({...m,feeOptionKey:p})}return{...n,multicall:e}}var tt=W(x.Chain.Arbitrum),nt=W(x.Chain.Avalanche),ut=W(x.Chain.Base),et=W(x.Chain.BinanceSmartChain),yt=W(x.Chain.Polygon);function W(t){return async function u({provider:n,...e}){let y=x.SKConfig.get("rpcUrls")[t],l=n||await z(t,y),a=d(t),p=h.match(e).with({phrase:h.P.string},({phrase:b})=>ft.HDNodeWallet.fromPhrase(b).connect(l)).with({signer:h.P.any},({signer:b})=>b).otherwise(()=>{return});return{...X({provider:l,signer:p,isEIP1559Compatible:a,chain:t}),estimateTransactionFee:A({provider:l,isEIP1559Compatible:a,chain:t}),getNetworkParams:v(t),getBalance:Y(t).getBalance}}}var R=require("@swapkit/helpers"),P=require("ethers"),ot=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 Nt="0x420000000000000000000000000000000000000f";function lt(t){return new P.Contract(Nt,Bt,t)}function K(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:e,nonce:y,...l}){let{Transaction:a}=await import("ethers");if(!e)throw new Error("Missing to address");let p={...l,to:e,nonce:y?y:n?await t.getTransactionCount(n):0};return a.from(p).serialized}}function Ut(t){return async function u(n){let e=lt(t),y=await Dt(t)(n);if(e&&"getL1Fee"in e)return e.getL1Fee(y)}}function Et(t){return async function u(n){let e=await t.send("eth_gasPrice",[]),y=await t.estimateGas(n);return e.mul(y)}}function St(t){return async function u(n){let e=await Ut(t)(n),y=await Et(t)(n);return e.add(y)}}function Lt(t){return async function u(n){let e=lt(t),y=await Dt(t)(n);if(e&&"getL1GasUsed"in e)return e.getL1GasUsed(y)}}var Vt=()=>({chainId:R.ChainId.OptimismHex,chainName:"Optimism",nativeCurrency:{name:"Ethereum",symbol:R.Chain.Ethereum,decimals:R.BaseDecimal.ETH},rpcUrls:[R.SKConfig.get("rpcUrls")[R.Chain.Optimism]],blockExplorerUrls:[R.ChainToExplorerUrl[R.Chain.Optimism]]});async function at({provider:t,...u}){let n=R.Chain.Optimism,e=R.SKConfig.get("rpcUrls")[n],y=t||await z(n,e),l=Rt.match(u).with({phrase:ot.P.string},({phrase:m})=>P.HDNodeWallet.fromPhrase(m).connect(y)).with({signer:ot.P.any},({signer:m})=>m).otherwise(()=>{return}),a=X({provider:y,signer:l}),p=K(y);return{...a,estimateL1Gas:Lt(y),estimateL1GasCost:Ut(y),estimateL2GasCost:Et(y),estimateTotalGasCost:St(y),getBalance:Y(R.Chain.Optimism).getBalance,getL1GasPrice:p,getNetworkParams:Vt}}async function ht(t,u){let n={...u,provider:u?.provider||await z(t)};switch(t){case J.Chain.Avalanche:return nt(n);case J.Chain.Arbitrum:return tt(n);case J.Chain.Base:return ut(n);case J.Chain.Optimism:return at(n);case J.Chain.Polygon:return yt(n);case J.Chain.BinanceSmartChain:return et(n);case J.Chain.Ethereum:return r(n);default:throw new Error(`Chain ${t} is not supported`)}}
|
|
2
|
-
|
|
3
|
-
//# debugId=7F873545BB6188BE64756E2164756E21
|
package/dist/evm/index.cjs.map
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
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 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 Error(\"Could not fetch 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 Error(\"No gas price found\");\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 Error(`Chain ${chain} is not supported`);\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 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 Error(\"No fee data available\");\n\n return {\n [FeeOption.Average]: { gasPrice },\n [FeeOption.Fast]: { gasPrice },\n [FeeOption.Fastest]: { gasPrice },\n };\n } catch (error) {\n throw new Error(\n `Failed to estimate gas price: ${(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 Error(\"No fee data available\");\n }\n\n return {\n [FeeOption.Average]: {\n l1GasPrice,\n gasPrice: price,\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n [FeeOption.Fast]: {\n l1GasPrice: ((l1GasPrice || 0n) * 15n) / 10n,\n gasPrice: (price * 15n) / 10n,\n maxFeePerGas,\n maxPriorityFeePerGas: (maxPriorityFeePerGas * 15n) / 10n,\n },\n [FeeOption.Fastest]: {\n l1GasPrice: (l1GasPrice || 0n) * 2n,\n gasPrice: price * 2n,\n maxFeePerGas,\n maxPriorityFeePerGas: maxPriorityFeePerGas * 2n,\n },\n };\n } catch (error) {\n throw new Error(\n `Failed to estimate gas price: ${(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: (maxFeePerGas * 15n) / 10n,\n maxPriorityFeePerGas: (maxPriorityFeePerGas * 15n) / 10n,\n },\n [FeeOption.Fastest]: {\n maxFeePerGas: maxFeePerGas * 2n,\n maxPriorityFeePerGas: maxPriorityFeePerGas * 2n,\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: (gasPrice * 15n) / 10n },\n [FeeOption.Fastest]: { gasPrice: gasPrice * 2n },\n };\n } catch (error) {\n throw new Error(\n `Failed to estimate gas price: ${(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) throw new Error(\"contractAddress must be provided\");\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 sender,\n funcName,\n funcParams,\n txOverrides,\n }: EVMTransferParams & {\n assetValue: AssetValue;\n funcName?: string;\n funcParams?: unknown[];\n txOverrides?: EVMTxParams;\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: 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 } 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 Error(`Chain ${chain} is not supported`);\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 { BaseDecimal, Chain, ChainId, ChainToExplorerUrl, SKConfig } from \"@swapkit/helpers\";\nimport type { BrowserProvider, JsonRpcProvider, Provider, TransactionRequest } 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) throw new Error(\"Missing to address\");\n const txParams = {\n ...tx,\n to: to as string,\n nonce: nonce ? nonce : from ? await provider.getTransactionCount(from) : 0,\n };\n\n return Transaction.from(txParams).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": "7F873545BB6188BE64756E2164756E21",
|
|
17
|
-
"names": []
|
|
18
|
-
}
|