@swapkit/toolboxes 1.0.0-beta.19 → 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.
Files changed (54) hide show
  1. package/dist/{chunk-vhc011em.js → chunk-12xtvbsp.js} +3 -3
  2. package/dist/{chunk-vhc011em.js.map → chunk-12xtvbsp.js.map} +1 -1
  3. package/dist/{chunk-cv69ewns.js → chunk-9bqegm61.js} +1 -1
  4. package/dist/chunk-kbnwrc5b.js +4 -0
  5. package/dist/chunk-kbnwrc5b.js.map +10 -0
  6. package/dist/{chunk-38ztynv0.js → chunk-s47y8512.js} +2 -2
  7. package/dist/{chunk-38ztynv0.js.map → chunk-s47y8512.js.map} +1 -1
  8. package/dist/chunk-vtd17cje.js +3 -0
  9. package/dist/chunk-vtd17cje.js.map +10 -0
  10. package/dist/src/cosmos/index.cjs +2 -2
  11. package/dist/src/cosmos/index.cjs.map +3 -3
  12. package/dist/src/cosmos/index.js +2 -2
  13. package/dist/src/cosmos/index.js.map +3 -3
  14. package/dist/src/evm/index.cjs +2 -2
  15. package/dist/src/evm/index.cjs.map +3 -3
  16. package/dist/src/evm/index.js +2 -2
  17. package/dist/src/evm/index.js.map +3 -3
  18. package/dist/src/index.cjs +2 -2
  19. package/dist/src/index.cjs.map +3 -3
  20. package/dist/src/index.js +2 -2
  21. package/dist/src/index.js.map +3 -3
  22. package/dist/src/near/index.cjs +3 -0
  23. package/dist/src/near/index.cjs.map +13 -0
  24. package/dist/src/near/index.js +3 -0
  25. package/dist/src/near/index.js.map +13 -0
  26. package/dist/src/radix/index.js +2 -2
  27. package/dist/src/radix/index.js.map +1 -1
  28. package/dist/src/ripple/index.js +1 -1
  29. package/dist/src/solana/index.js +2 -2
  30. package/dist/src/solana/index.js.map +1 -1
  31. package/dist/src/substrate/index.js +2 -2
  32. package/dist/src/substrate/index.js.map +1 -1
  33. package/dist/src/tron/index.js +2 -2
  34. package/dist/src/tron/index.js.map +1 -1
  35. package/dist/src/utxo/index.cjs +2 -2
  36. package/dist/src/utxo/index.cjs.map +3 -3
  37. package/dist/src/utxo/index.js +2 -2
  38. package/dist/src/utxo/index.js.map +3 -3
  39. package/package.json +10 -2
  40. package/src/cosmos/toolbox/cosmos.ts +9 -2
  41. package/src/evm/toolbox/baseEVMToolbox.ts +19 -12
  42. package/src/index.ts +12 -0
  43. package/src/near/helpers/contractFactory.ts +22 -0
  44. package/src/near/helpers/core.ts +86 -0
  45. package/src/near/helpers/gasEstimation.ts +110 -0
  46. package/src/near/helpers/index.ts +5 -0
  47. package/src/near/helpers/nep141.ts +110 -0
  48. package/src/near/index.ts +24 -0
  49. package/src/near/toolbox.ts +497 -0
  50. package/src/near/types/contract.ts +48 -0
  51. package/src/near/types/nep141.ts +66 -0
  52. package/src/near/types.ts +58 -0
  53. package/src/utxo/toolbox/utxo.ts +3 -2
  54. /package/dist/{chunk-cv69ewns.js.map → chunk-9bqegm61.js.map} +0 -0
@@ -8,9 +8,9 @@
8
8
  "import { SwapKitError } from \"@swapkit/helpers\";\nimport base58check from \"bs58check\";\n// @ts-ignore\nimport cashaddr from \"cashaddrjs\";\n\nenum Format {\n Legacy = \"legacy\",\n Bitpay = \"bitpay\",\n Cashaddr = \"cashaddr\",\n}\nenum UtxoNetwork {\n Mainnet = \"mainnet\",\n Testnet = \"testnet\",\n}\nenum Type {\n P2PKH = \"p2pkh\",\n P2SH = \"p2sh\",\n}\n\nconst VERSION_BYTE = {\n [Format.Legacy]: {\n [UtxoNetwork.Mainnet]: {\n [Type.P2PKH]: 0,\n [Type.P2SH]: 5,\n },\n [UtxoNetwork.Testnet]: {\n [Type.P2PKH]: 111,\n [Type.P2SH]: 196,\n },\n },\n [Format.Bitpay]: {\n [UtxoNetwork.Mainnet]: {\n [Type.P2PKH]: 28,\n [Type.P2SH]: 40,\n },\n [UtxoNetwork.Testnet]: {\n [Type.P2PKH]: 111,\n [Type.P2SH]: 196,\n },\n },\n};\n\ntype DecodedType = {\n format: Format;\n network: UtxoNetwork;\n type: Type;\n hash: any;\n};\n\nfunction isValidAddress(input: any) {\n try {\n decodeAddress(input);\n return true;\n } catch (_error) {\n return false;\n }\n}\n\nfunction detectAddressNetwork(address: string) {\n return decodeAddress(address)?.network;\n}\n\nfunction toLegacyAddress(address: string): string {\n const decoded = decodeAddress(address);\n if (decoded?.format === Format.Legacy) {\n return address;\n }\n return encodeAsLegacy(decoded);\n}\n\nfunction toCashAddress(address: string): string {\n const decoded = decodeAddress(address);\n return encodeAsCashaddr(decoded);\n}\n\nfunction decodeAddress(address: string) {\n try {\n return decodeBase58Address(address);\n } catch (_error) {\n // Try to decode as cashaddr if base58 decoding fails.\n }\n try {\n return decodeCashAddress(address);\n } catch (_error) {\n // Try to decode as bitpay if cashaddr decoding fails.\n }\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n}\n\nfunction decodeBase58Address(address: string) {\n try {\n const payload = base58check.decode(address);\n\n // BASE_58_CHECK_PAYLOAD_LENGTH\n if (payload.length !== 21) throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n const versionByte = payload[0];\n const hash = Array.prototype.slice.call(payload, 1);\n\n switch (versionByte) {\n case VERSION_BYTE[Format.Legacy][UtxoNetwork.Mainnet][Type.P2PKH]:\n return { hash, format: Format.Legacy, network: UtxoNetwork.Mainnet, type: Type.P2PKH };\n\n case VERSION_BYTE[Format.Legacy][UtxoNetwork.Mainnet][Type.P2SH]:\n return { hash, format: Format.Legacy, network: UtxoNetwork.Mainnet, type: Type.P2SH };\n\n case VERSION_BYTE[Format.Legacy][UtxoNetwork.Testnet][Type.P2PKH]:\n return { hash, format: Format.Legacy, network: UtxoNetwork.Testnet, type: Type.P2PKH };\n\n case VERSION_BYTE[Format.Legacy][UtxoNetwork.Testnet][Type.P2SH]:\n return { hash, format: Format.Legacy, network: UtxoNetwork.Testnet, type: Type.P2SH };\n\n case VERSION_BYTE[Format.Bitpay][UtxoNetwork.Mainnet][Type.P2PKH]:\n return { hash, format: Format.Bitpay, network: UtxoNetwork.Mainnet, type: Type.P2PKH };\n\n case VERSION_BYTE[Format.Bitpay][UtxoNetwork.Mainnet][Type.P2SH]:\n return { hash, format: Format.Bitpay, network: UtxoNetwork.Mainnet, type: Type.P2SH };\n\n default:\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n }\n } catch (_error) {\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n }\n}\n\nfunction decodeCashAddress(address: string) {\n if (address.indexOf(\":\") !== -1) {\n try {\n return decodeCashAddressWithPrefix(address);\n } catch (_error) {\n // Try to decode as legacy if cashaddr decoding fails.\n }\n } else {\n const prefixes = [\"bitcoincash\", \"bchtest\", \"bchreg\"];\n for (const prefix of prefixes) {\n try {\n return decodeCashAddressWithPrefix(`${prefix}:${address}`);\n } catch (_error) {\n // Try next prefix if decoding fails.\n }\n }\n }\n\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n}\n\nfunction decodeCashAddressWithPrefix(address: string): DecodedType {\n try {\n const { hash, prefix, type } = cashaddr.decode(address);\n\n return {\n format: Format.Cashaddr,\n hash: Array.prototype.slice.call(hash, 0),\n network: prefix === \"bitcoincash\" ? UtxoNetwork.Mainnet : UtxoNetwork.Testnet,\n type: type === \"P2PKH\" ? Type.P2PKH : Type.P2SH,\n };\n } catch (_error) {\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n }\n}\n\nfunction encodeAsLegacy(decoded: DecodedType) {\n const versionByte = VERSION_BYTE[Format.Legacy][decoded.network][decoded.type];\n const buffer = Buffer.alloc(1 + decoded.hash.length);\n buffer[0] = versionByte;\n buffer.set(decoded.hash, 1);\n return base58check.encode(buffer);\n}\n\nfunction encodeAsCashaddr(decoded: DecodedType) {\n const prefix = decoded.network === UtxoNetwork.Mainnet ? \"bitcoincash\" : \"bchtest\";\n const type = decoded.type === Type.P2PKH ? \"P2PKH\" : \"P2SH\";\n const hash = new Uint8Array(decoded.hash);\n return cashaddr.encode(prefix, type, hash);\n}\n\nexport { detectAddressNetwork, isValidAddress, UtxoNetwork, toCashAddress, toLegacyAddress };\n",
9
9
  "import { Chain, SwapKitError, type UTXOChain } from \"@swapkit/helpers\";\n\nimport {\n TX_OVERHEAD,\n UTXOScriptType,\n calculateTxSize,\n getInputSize,\n getOutputSize,\n getScriptTypeForAddress,\n} from \"../helpers\";\nimport type { TargetOutput, UTXOCalculateTxSizeParams, UTXOType } from \"../types\";\n\nexport const getDustThreshold = (chain: UTXOChain) => {\n switch (chain) {\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n return 550;\n case Chain.Dash:\n case Chain.Litecoin:\n return 5500;\n case Chain.Dogecoin:\n return 100000;\n default:\n throw new SwapKitError(\"toolbox_utxo_not_supported\", { chain });\n }\n};\n\nexport const accumulative = ({\n inputs,\n outputs,\n feeRate: initialFeeRate = 1,\n chain = Chain.Bitcoin,\n}: UTXOCalculateTxSizeParams & { outputs: TargetOutput[]; chain: UTXOChain }) => {\n const feeRate = Math.ceil(initialFeeRate);\n\n const newTxType =\n inputs[0] && \"address\" in inputs[0] && inputs[0].address\n ? getScriptTypeForAddress(inputs[0].address)\n : UTXOScriptType.P2PKH;\n // skip input if adding it would cost more than input is worth\n const filteredInputs = inputs.filter((input) => getInputSize(input) * feeRate <= input.value);\n\n const txSizeWithoutInputs =\n TX_OVERHEAD + outputs.reduce((total, output) => total + getOutputSize(output, newTxType), 0);\n\n const amountToSend = outputs.reduce((total, output) => total + output.value, 0);\n\n let fees = txSizeWithoutInputs * feeRate;\n let inputsValue = 0;\n const inputsToUse: typeof inputs = [];\n\n for (const input of filteredInputs) {\n const inputSize = getInputSize(input);\n const inputFee = feeRate * inputSize;\n\n fees += inputFee;\n inputsValue += input.value;\n\n inputsToUse.push(input);\n\n const totalCost = fees + amountToSend;\n\n // we need more inputs\n if (inputsValue < totalCost) continue;\n\n const remainder = inputsValue - totalCost;\n\n const feeForExtraOutput = feeRate * getOutputSize({ address: \"\", value: 0 }, newTxType);\n\n // potential change address\n if (remainder > feeForExtraOutput) {\n const feeAfterExtraOutput = feeForExtraOutput + fees;\n const remainderAfterExtraOutput = inputsValue - (amountToSend + feeAfterExtraOutput);\n\n // is it worth a change output aka can we send it in the future?\n if (\n remainderAfterExtraOutput >\n Math.max(getInputSize({} as UTXOType) * feeRate, getDustThreshold(chain))\n ) {\n return {\n inputs: inputsToUse,\n outputs: outputs.concat({ value: remainderAfterExtraOutput, address: \"\" }),\n fee: feeAfterExtraOutput,\n };\n }\n }\n return {\n inputs: inputsToUse,\n outputs,\n fee: fees,\n };\n }\n\n // We don't have enough inputs, let's calculate transaction fee accrude to the last input\n return { fee: feeRate * calculateTxSize({ inputs, outputs, feeRate }) };\n};\n",
10
10
  "import { SwapKitError } from \"@swapkit/helpers\";\nimport { opcodes, script } from \"bitcoinjs-lib\";\nimport type {\n TargetOutput,\n UTXOCalculateTxSizeParams,\n UTXOInputWithScriptType,\n UTXOType,\n} from \"../types\";\n\n/**\n * Minimum transaction fee\n * 1000 satoshi/kB (similar to current `minrelaytxfee`)\n * @see https://github.com/bitcoin/bitcoin/blob/db88db47278d2e7208c50d16ab10cb355067d071/src/validation.h#L56\n */\nexport const MIN_TX_FEE = 1000;\nexport const TX_OVERHEAD = 4 + 1 + 1 + 4; //10\nexport const OP_RETURN_OVERHEAD = 1 + 8 + 1; //10\nconst TX_INPUT_BASE = 32 + 4 + 1 + 4; // 41\nconst TX_INPUT_PUBKEYHASH = 107;\n\nexport function compileMemo(memo: string) {\n const data = Buffer.from(memo, \"utf8\"); // converts MEMO to buffer\n return script.compile([opcodes.OP_RETURN as number, data]); // Compile OP_RETURN script\n}\n\nexport enum UTXOScriptType {\n P2PKH = \"P2PKH\", // legacy\n // P2SH = 'P2SH', // multisig\n P2WPKH = \"P2WPKH\", // bech32 - native segwit\n // P2TR = \"P2TR\", // taproot\n}\n\nexport const InputSizes: Record<UTXOScriptType, number> = {\n [UTXOScriptType.P2PKH]: 148,\n // [UTXOScriptType.P2SH]: 91,\n [UTXOScriptType.P2WPKH]: 68,\n};\n\nexport const OutputSizes: Record<UTXOScriptType, number> = {\n [UTXOScriptType.P2PKH]: 34,\n // [UTXOScriptType.P2SH]: 91,\n [UTXOScriptType.P2WPKH]: 31,\n};\n\nexport const getScriptTypeForAddress = (address: string) => {\n if (address.startsWith(\"bc1\") || address.startsWith(\"ltc1\")) {\n return UTXOScriptType.P2WPKH;\n }\n // if (address.startsWith('3') || address.startsWith('M')) {\n // return UTXOScriptType.P2SH;\n // }\n if (\n address.startsWith(\"1\") ||\n address.startsWith(\"3\") ||\n address.startsWith(\"L\") ||\n address.startsWith(\"M\") ||\n address.startsWith(\"X\") ||\n address.startsWith(\"D\") ||\n address.startsWith(\"bitcoincash:q\") ||\n address.startsWith(\"q\")\n ) {\n return UTXOScriptType.P2PKH;\n }\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n};\n\nexport const calculateTxSize = ({ inputs, outputs, feeRate }: UTXOCalculateTxSizeParams) => {\n const newTxType =\n inputs[0] && \"address\" in inputs[0] && inputs[0].address\n ? getScriptTypeForAddress(inputs[0].address)\n : UTXOScriptType.P2PKH;\n const inputSize = inputs\n .filter(\n (utxo) =>\n utxo.value >=\n InputSizes[\"type\" in utxo ? utxo.type : UTXOScriptType.P2PKH] * Math.ceil(feeRate),\n )\n .reduce((total, utxo) => total + getInputSize(utxo), 0);\n\n const outputSize =\n outputs?.reduce((total, output) => total + getOutputSize(output), 0) || OutputSizes[newTxType];\n\n return TX_OVERHEAD + inputSize + outputSize;\n};\n\nexport const getInputSize = (input: UTXOInputWithScriptType | UTXOType) => {\n if (\"type\" in input) {\n return InputSizes[input.type];\n }\n if (\"address\" in input && input.address) {\n return InputSizes[getScriptTypeForAddress(input.address as string)];\n }\n return TX_INPUT_BASE + TX_INPUT_PUBKEYHASH;\n};\n\nexport const getOutputSize = (output: TargetOutput, scriptType?: UTXOScriptType) => {\n if (output?.script) {\n return OP_RETURN_OVERHEAD + output.script.length + (output.script.length >= 74 ? 2 : 1);\n }\n if (scriptType) {\n return OutputSizes[scriptType];\n }\n return OutputSizes[UTXOScriptType.P2PKH];\n};\n",
11
- "import {\n AssetValue,\n Chain,\n type ChainSigner,\n DerivationPath,\n type DerivationPathArray,\n FeeOption,\n NetworkDerivationPath,\n SwapKitError,\n SwapKitNumber,\n type UTXOChain,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { Psbt, address as btcLibAddress, initEccLib, payments } from \"bitcoinjs-lib\";\nimport type { ECPairInterface } from \"ecpair\";\nimport ECPairFactory from \"ecpair\";\nimport type { UtxoToolboxParams } from \".\";\nimport { getBalance } from \"../../utils\";\nimport {\n UTXOScriptType,\n accumulative,\n calculateTxSize,\n compileMemo,\n getDustThreshold,\n getInputSize,\n getUtxoApi,\n getUtxoNetwork,\n} from \"../helpers\";\nimport type {\n BchECPair,\n TargetOutput,\n UTXOBuildTxParams,\n UTXOTransferParams,\n UTXOType,\n} from \"../types\";\nimport { bchValidateAddress } from \"./bitcoinCash\";\n\nimport secp256k1 from \"@bitcoinerlab/secp256k1\";\n// @ts-ignore\nimport { ECPair, HDNode } from \"@psf/bitcoincashjs-lib\";\nimport { HDKey } from \"@scure/bip32\";\nimport { mnemonicToSeedSync } from \"@scure/bip39\";\n\nexport const nonSegwitChains = [Chain.Dash, Chain.Dogecoin];\n\nfunction addInputsAndOutputs({\n inputs,\n outputs,\n chain,\n psbt,\n sender,\n compiledMemo,\n}: {\n inputs: UTXOType[];\n outputs: TargetOutput[];\n chain: UTXOChain;\n psbt: Psbt;\n sender: string;\n compiledMemo: Buffer<ArrayBufferLike> | null;\n}) {\n for (const utxo of inputs) {\n const witnessInfo = !!utxo.witnessUtxo &&\n !nonSegwitChains.includes(chain) && { witnessUtxo: utxo.witnessUtxo };\n\n const nonWitnessInfo = nonSegwitChains.includes(chain) && {\n nonWitnessUtxo: utxo.txHex ? Buffer.from(utxo.txHex, \"hex\") : undefined,\n };\n\n psbt.addInput({ hash: utxo.hash, index: utxo.index, ...witnessInfo, ...nonWitnessInfo });\n }\n\n for (const output of outputs) {\n const address = \"address\" in output && output.address ? output.address : sender;\n const hasOutputScript = output.script;\n\n if (hasOutputScript && !compiledMemo) {\n continue;\n }\n\n const mappedOutput = hasOutputScript\n ? {\n script: compiledMemo as Buffer<ArrayBufferLike>,\n value: 0,\n }\n : {\n address,\n value: output.value,\n };\n\n initEccLib(secp256k1);\n psbt.addOutput(mappedOutput);\n }\n\n return { psbt, inputs };\n}\n\nasync function createTransaction({\n assetValue,\n recipient,\n memo,\n feeRate,\n sender,\n fetchTxHex = false,\n}: UTXOBuildTxParams): Promise<{\n psbt: Psbt;\n utxos: UTXOType[];\n inputs: UTXOType[];\n}> {\n const chain = assetValue.chain as UTXOChain;\n const compiledMemo = memo ? await compileMemo(memo) : null;\n\n const inputsAndOutputs = await getInputsAndTargetOutputs({\n assetValue,\n recipient,\n memo,\n sender,\n fetchTxHex,\n });\n\n const { inputs, outputs } = accumulative({ ...inputsAndOutputs, feeRate, chain });\n\n // .inputs and .outputs will be undefined if no solution was found\n if (!(inputs && outputs))\n throw new SwapKitError(\"toolbox_utxo_insufficient_balance\", { sender, assetValue });\n const getNetwork = await getUtxoNetwork();\n const psbt = new Psbt({ network: getNetwork(chain) });\n\n if (chain === Chain.Dogecoin) psbt.setMaximumFeeRate(650000000);\n\n const { psbt: mappedPsbt, inputs: mappedInputs } = await addInputsAndOutputs({\n inputs,\n outputs,\n chain,\n psbt,\n sender,\n compiledMemo,\n });\n\n return {\n psbt: mappedPsbt,\n utxos: inputsAndOutputs.inputs,\n inputs: mappedInputs,\n };\n}\n\nexport async function getUTXOAddressValidator() {\n const getNetwork = await getUtxoNetwork();\n\n return function validateAddress({ address, chain }: { address: string; chain: UTXOChain }) {\n if (chain === Chain.BitcoinCash) {\n return bchValidateAddress(address);\n }\n\n try {\n initEccLib(secp256k1);\n btcLibAddress.toOutputScript(address, getNetwork(chain));\n return true;\n } catch (_error) {\n return false;\n }\n };\n}\n\nasync function createSignerWithKeys({\n chain,\n phrase,\n derivationPath,\n}: { chain: UTXOChain; phrase: string; derivationPath: string }) {\n const keyPair = (await getCreateKeysForPath(chain as Chain.Bitcoin))({ phrase, derivationPath });\n\n async function signTransaction(psbt: Psbt) {\n await psbt.signAllInputs(keyPair);\n return psbt;\n }\n\n async function getAddress() {\n const addressGetter = await addressFromKeysGetter(chain);\n return addressGetter(keyPair);\n }\n\n return {\n getAddress,\n signTransaction,\n };\n}\n\nexport async function createUTXOToolbox<T extends UTXOChain>({\n chain,\n ...toolboxParams\n}: (\n | UtxoToolboxParams[T]\n | {\n phrase?: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n }\n) & { chain: T }) {\n const phrase = \"phrase\" in toolboxParams ? toolboxParams.phrase : undefined;\n\n const index = \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n\n const derivationPath = derivationPathToString(\n \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[chain], { index }),\n );\n\n const signer = phrase\n ? await createSignerWithKeys({ chain, phrase, derivationPath })\n : \"signer\" in toolboxParams\n ? toolboxParams.signer\n : undefined;\n\n function getAddress() {\n return Promise.resolve(signer?.getAddress());\n }\n\n // const { signer } = params || {};\n const getAddressFromKeys = await addressFromKeysGetter(chain);\n const validateAddress = await getUTXOAddressValidator();\n const createKeysForPath = await getCreateKeysForPath(chain);\n\n return {\n accumulative,\n calculateTxSize,\n getAddressFromKeys,\n getAddress,\n validateAddress: (address: string) => validateAddress({ address, chain }),\n broadcastTx: (txHash: string) => getUtxoApi(chain).broadcastTx(txHash),\n createTransaction,\n createKeysForPath,\n getFeeRates: () => getFeeRates(chain),\n getInputsOutputsFee,\n transfer: transfer(signer as UtxoToolboxParams[\"BTC\"][\"signer\"]),\n getPrivateKeyFromMnemonic: (params: { phrase: string; derivationPath: string }) => {\n const keys = createKeysForPath(params);\n return keys.toWIF();\n },\n\n getBalance: getBalance(chain),\n estimateTransactionFee: estimateTransactionFee(chain),\n estimateMaxSendableAmount: estimateMaxSendableAmount(chain),\n };\n}\n\nasync function getInputsOutputsFee({\n assetValue,\n feeOptionKey = FeeOption.Fast,\n feeRate,\n memo,\n sender,\n recipient,\n}: Omit<UTXOBuildTxParams, \"feeRate\"> & {\n feeOptionKey?: FeeOption;\n feeRate?: number;\n}) {\n const chain = assetValue.chain as UTXOChain;\n\n const inputsAndOutputs = await getInputsAndTargetOutputs({\n assetValue,\n sender,\n memo,\n recipient,\n });\n\n const feeRateWhole = feeRate ? Math.floor(feeRate) : (await getFeeRates(chain))[feeOptionKey];\n\n return accumulative({ ...inputsAndOutputs, feeRate: feeRateWhole, chain });\n}\n\nfunction estimateMaxSendableAmount(chain: UTXOChain) {\n return async function estimateMaxSendableAmount({\n from,\n memo,\n feeRate,\n feeOptionKey = FeeOption.Fast,\n recipients = 1,\n }: {\n from: string;\n memo?: string;\n feeRate?: number;\n feeOptionKey?: FeeOption;\n recipients?: number | TargetOutput[];\n }) {\n const addressData = await getUtxoApi(chain).getAddressData(from);\n const feeRateWhole = feeRate ? Math.ceil(feeRate) : (await getFeeRates(chain))[feeOptionKey];\n\n const inputs = addressData?.utxo\n .map((utxo) => ({\n ...utxo,\n // type: utxo.witnessUtxo ? UTXOScriptType.P2WPKH : UTXOScriptType.P2PKH,\n type: UTXOScriptType.P2PKH,\n hash: \"\",\n }))\n .filter(\n (utxo) => utxo.value > Math.max(getDustThreshold(chain), getInputSize(utxo) * feeRateWhole),\n );\n\n if (!inputs?.length) return AssetValue.from({ chain });\n\n const balance = AssetValue.from({\n chain,\n value: inputs.reduce((sum, utxo) => sum + utxo.value, 0),\n });\n\n const outputs =\n typeof recipients === \"number\"\n ? (Array.from({ length: recipients }, () => ({\n address: from,\n value: 0,\n })) as TargetOutput[])\n : recipients;\n\n if (memo) {\n const script = await compileMemo(memo);\n outputs.push({ address: from, script, value: 0 });\n }\n\n const txSize = calculateTxSize({ inputs, outputs, feeRate: feeRateWhole });\n\n const fee = txSize * feeRateWhole;\n\n return balance.sub(fee);\n };\n}\n\nfunction estimateTransactionFee(chain: UTXOChain) {\n return async (params: {\n assetValue: AssetValue;\n recipient: string;\n sender: string;\n memo?: string;\n feeOptionKey?: FeeOption;\n feeRate?: number;\n fetchTxHex?: boolean;\n }) => {\n const inputFees = await getInputsOutputsFee(params);\n\n return AssetValue.from({\n chain,\n value: SwapKitNumber.fromBigInt(BigInt(inputFees.fee), 8).getValue(\"string\"),\n });\n };\n}\n\ntype CreateKeysForPathReturnType = {\n [Chain.BitcoinCash]: BchECPair;\n [Chain.Bitcoin]: ECPairInterface;\n [Chain.Dash]: ECPairInterface;\n [Chain.Dogecoin]: ECPairInterface;\n [Chain.Litecoin]: ECPairInterface;\n};\n\nexport async function getCreateKeysForPath<T extends keyof CreateKeysForPathReturnType>(\n chain: T,\n): Promise<\n (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T]\n> {\n const getNetwork = await getUtxoNetwork();\n\n switch (chain) {\n case Chain.BitcoinCash: {\n return function createKeysForPath({\n phrase,\n derivationPath = `${DerivationPath.BCH}/0`,\n wif,\n }: { wif?: string; phrase?: string; derivationPath?: string }) {\n const network = getNetwork(chain);\n\n if (wif) {\n return ECPair.fromWIF(wif, network) as BchECPair;\n }\n if (!phrase)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", { error: \"No phrase provided\" });\n\n const masterHDNode = HDNode.fromSeedBuffer(\n Buffer.from(mnemonicToSeedSync(phrase)),\n network,\n );\n const keyPair = masterHDNode.derivePath(derivationPath).keyPair;\n\n return keyPair as BchECPair;\n } as (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T];\n }\n case Chain.Bitcoin:\n case Chain.Dogecoin:\n case Chain.Litecoin:\n case Chain.Dash: {\n return function createKeysForPath({\n phrase,\n wif,\n derivationPath,\n }: { phrase?: string; wif?: string; derivationPath: string }) {\n if (!(wif || phrase))\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Either phrase or wif must be provided\",\n });\n\n const factory = ECPairFactory(secp256k1);\n const network = getNetwork(chain);\n\n if (wif) return factory.fromWIF(wif, network);\n\n const seed = mnemonicToSeedSync(phrase as string);\n const master = HDKey.fromMasterSeed(seed, network).derive(derivationPath);\n if (!master.privateKey)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Could not get private key from phrase\",\n });\n\n return factory.fromPrivateKey(Buffer.from(master.privateKey), { network });\n } as (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T];\n }\n default:\n throw new SwapKitError(\"toolbox_utxo_not_supported\", { chain });\n }\n}\n\nexport async function addressFromKeysGetter(chain: UTXOChain) {\n const getNetwork = await getUtxoNetwork();\n\n return function getAddressFromKeys(keys: ECPairInterface | BchECPair) {\n if (!keys)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", { error: \"Keys must be provided\" });\n\n const method = nonSegwitChains.includes(chain) ? payments.p2pkh : payments.p2wpkh;\n const { address } = method({ pubkey: keys.publicKey as Buffer, network: getNetwork(chain) });\n if (!address)\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { error: \"Address not defined\" });\n\n return address;\n };\n}\n\nfunction transfer(signer?: ChainSigner<Psbt, Psbt>) {\n return async function transfer({\n memo,\n recipient,\n feeOptionKey,\n feeRate,\n assetValue,\n }: UTXOTransferParams) {\n const from = await signer?.getAddress();\n\n const chain = assetValue.chain as UTXOChain;\n\n if (!(signer && from)) throw new SwapKitError(\"toolbox_utxo_no_signer\");\n if (!recipient)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Recipient address must be provided\",\n });\n const txFeeRate = feeRate || (await getFeeRates(chain))[feeOptionKey || FeeOption.Fast];\n\n const { psbt } = await createTransaction({\n recipient,\n feeRate: txFeeRate,\n sender: from,\n assetValue,\n memo,\n });\n const signedPsbt = await signer.signTransaction(psbt);\n signedPsbt.finalizeAllInputs(); // Finalise inputs\n // TX extracted and formatted to hex\n return getUtxoApi(chain).broadcastTx(signedPsbt.extractTransaction().toHex());\n };\n}\n\nasync function getFeeRates(chain: UTXOChain) {\n const suggestedFeeRate = await getUtxoApi(chain).getSuggestedTxFee();\n\n return {\n [FeeOption.Average]: suggestedFeeRate,\n [FeeOption.Fast]: suggestedFeeRate * 1.5,\n [FeeOption.Fastest]: suggestedFeeRate * 2.0,\n };\n}\n\nasync function getInputsAndTargetOutputs({\n assetValue,\n recipient,\n memo,\n sender,\n fetchTxHex: fetchTxOverwrite = false,\n}: Omit<UTXOBuildTxParams, \"feeRate\">) {\n const chain = assetValue.chain as UTXOChain;\n\n const fetchTxHex = fetchTxOverwrite || nonSegwitChains.includes(chain);\n\n const inputs = await getUtxoApi(chain).scanUTXOs({ address: sender, fetchTxHex });\n\n //1. add output amount and recipient to targets\n //2. add output memo to targets (optional)\n\n return {\n inputs,\n outputs: [\n { address: recipient, value: Number(assetValue.bigIntValue) },\n ...(memo ? [{ address: \"\", script: await compileMemo(memo), value: 0 }] : []),\n ],\n };\n}\n"
11
+ "import {\n AssetValue,\n Chain,\n type ChainSigner,\n DerivationPath,\n type DerivationPathArray,\n FeeOption,\n NetworkDerivationPath,\n SwapKitError,\n SwapKitNumber,\n type UTXOChain,\n applyFeeMultiplier,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { Psbt, address as btcLibAddress, initEccLib, payments } from \"bitcoinjs-lib\";\nimport type { ECPairInterface } from \"ecpair\";\nimport ECPairFactory from \"ecpair\";\nimport type { UtxoToolboxParams } from \".\";\nimport { getBalance } from \"../../utils\";\nimport {\n UTXOScriptType,\n accumulative,\n calculateTxSize,\n compileMemo,\n getDustThreshold,\n getInputSize,\n getUtxoApi,\n getUtxoNetwork,\n} from \"../helpers\";\nimport type {\n BchECPair,\n TargetOutput,\n UTXOBuildTxParams,\n UTXOTransferParams,\n UTXOType,\n} from \"../types\";\nimport { bchValidateAddress } from \"./bitcoinCash\";\n\nimport secp256k1 from \"@bitcoinerlab/secp256k1\";\n// @ts-ignore\nimport { ECPair, HDNode } from \"@psf/bitcoincashjs-lib\";\nimport { HDKey } from \"@scure/bip32\";\nimport { mnemonicToSeedSync } from \"@scure/bip39\";\n\nexport const nonSegwitChains = [Chain.Dash, Chain.Dogecoin];\n\nfunction addInputsAndOutputs({\n inputs,\n outputs,\n chain,\n psbt,\n sender,\n compiledMemo,\n}: {\n inputs: UTXOType[];\n outputs: TargetOutput[];\n chain: UTXOChain;\n psbt: Psbt;\n sender: string;\n compiledMemo: Buffer<ArrayBufferLike> | null;\n}) {\n for (const utxo of inputs) {\n const witnessInfo = !!utxo.witnessUtxo &&\n !nonSegwitChains.includes(chain) && { witnessUtxo: utxo.witnessUtxo };\n\n const nonWitnessInfo = nonSegwitChains.includes(chain) && {\n nonWitnessUtxo: utxo.txHex ? Buffer.from(utxo.txHex, \"hex\") : undefined,\n };\n\n psbt.addInput({ hash: utxo.hash, index: utxo.index, ...witnessInfo, ...nonWitnessInfo });\n }\n\n for (const output of outputs) {\n const address = \"address\" in output && output.address ? output.address : sender;\n const hasOutputScript = output.script;\n\n if (hasOutputScript && !compiledMemo) {\n continue;\n }\n\n const mappedOutput = hasOutputScript\n ? {\n script: compiledMemo as Buffer<ArrayBufferLike>,\n value: 0,\n }\n : {\n address,\n value: output.value,\n };\n\n initEccLib(secp256k1);\n psbt.addOutput(mappedOutput);\n }\n\n return { psbt, inputs };\n}\n\nasync function createTransaction({\n assetValue,\n recipient,\n memo,\n feeRate,\n sender,\n fetchTxHex = false,\n}: UTXOBuildTxParams): Promise<{\n psbt: Psbt;\n utxos: UTXOType[];\n inputs: UTXOType[];\n}> {\n const chain = assetValue.chain as UTXOChain;\n const compiledMemo = memo ? await compileMemo(memo) : null;\n\n const inputsAndOutputs = await getInputsAndTargetOutputs({\n assetValue,\n recipient,\n memo,\n sender,\n fetchTxHex,\n });\n\n const { inputs, outputs } = accumulative({ ...inputsAndOutputs, feeRate, chain });\n\n // .inputs and .outputs will be undefined if no solution was found\n if (!(inputs && outputs))\n throw new SwapKitError(\"toolbox_utxo_insufficient_balance\", { sender, assetValue });\n const getNetwork = await getUtxoNetwork();\n const psbt = new Psbt({ network: getNetwork(chain) });\n\n if (chain === Chain.Dogecoin) psbt.setMaximumFeeRate(650000000);\n\n const { psbt: mappedPsbt, inputs: mappedInputs } = await addInputsAndOutputs({\n inputs,\n outputs,\n chain,\n psbt,\n sender,\n compiledMemo,\n });\n\n return {\n psbt: mappedPsbt,\n utxos: inputsAndOutputs.inputs,\n inputs: mappedInputs,\n };\n}\n\nexport async function getUTXOAddressValidator() {\n const getNetwork = await getUtxoNetwork();\n\n return function validateAddress({ address, chain }: { address: string; chain: UTXOChain }) {\n if (chain === Chain.BitcoinCash) {\n return bchValidateAddress(address);\n }\n\n try {\n initEccLib(secp256k1);\n btcLibAddress.toOutputScript(address, getNetwork(chain));\n return true;\n } catch (_error) {\n return false;\n }\n };\n}\n\nasync function createSignerWithKeys({\n chain,\n phrase,\n derivationPath,\n}: { chain: UTXOChain; phrase: string; derivationPath: string }) {\n const keyPair = (await getCreateKeysForPath(chain as Chain.Bitcoin))({ phrase, derivationPath });\n\n async function signTransaction(psbt: Psbt) {\n await psbt.signAllInputs(keyPair);\n return psbt;\n }\n\n async function getAddress() {\n const addressGetter = await addressFromKeysGetter(chain);\n return addressGetter(keyPair);\n }\n\n return {\n getAddress,\n signTransaction,\n };\n}\n\nexport async function createUTXOToolbox<T extends UTXOChain>({\n chain,\n ...toolboxParams\n}: (\n | UtxoToolboxParams[T]\n | {\n phrase?: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n }\n) & { chain: T }) {\n const phrase = \"phrase\" in toolboxParams ? toolboxParams.phrase : undefined;\n\n const index = \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n\n const derivationPath = derivationPathToString(\n \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[chain], { index }),\n );\n\n const signer = phrase\n ? await createSignerWithKeys({ chain, phrase, derivationPath })\n : \"signer\" in toolboxParams\n ? toolboxParams.signer\n : undefined;\n\n function getAddress() {\n return Promise.resolve(signer?.getAddress());\n }\n\n // const { signer } = params || {};\n const getAddressFromKeys = await addressFromKeysGetter(chain);\n const validateAddress = await getUTXOAddressValidator();\n const createKeysForPath = await getCreateKeysForPath(chain);\n\n return {\n accumulative,\n calculateTxSize,\n getAddressFromKeys,\n getAddress,\n validateAddress: (address: string) => validateAddress({ address, chain }),\n broadcastTx: (txHash: string) => getUtxoApi(chain).broadcastTx(txHash),\n createTransaction,\n createKeysForPath,\n getFeeRates: () => getFeeRates(chain),\n getInputsOutputsFee,\n transfer: transfer(signer as UtxoToolboxParams[\"BTC\"][\"signer\"]),\n getPrivateKeyFromMnemonic: (params: { phrase: string; derivationPath: string }) => {\n const keys = createKeysForPath(params);\n return keys.toWIF();\n },\n\n getBalance: getBalance(chain),\n estimateTransactionFee: estimateTransactionFee(chain),\n estimateMaxSendableAmount: estimateMaxSendableAmount(chain),\n };\n}\n\nasync function getInputsOutputsFee({\n assetValue,\n feeOptionKey = FeeOption.Fast,\n feeRate,\n memo,\n sender,\n recipient,\n}: Omit<UTXOBuildTxParams, \"feeRate\"> & {\n feeOptionKey?: FeeOption;\n feeRate?: number;\n}) {\n const chain = assetValue.chain as UTXOChain;\n\n const inputsAndOutputs = await getInputsAndTargetOutputs({\n assetValue,\n sender,\n memo,\n recipient,\n });\n\n const feeRateWhole = feeRate ? Math.floor(feeRate) : (await getFeeRates(chain))[feeOptionKey];\n\n return accumulative({ ...inputsAndOutputs, feeRate: feeRateWhole, chain });\n}\n\nfunction estimateMaxSendableAmount(chain: UTXOChain) {\n return async function estimateMaxSendableAmount({\n from,\n memo,\n feeRate,\n feeOptionKey = FeeOption.Fast,\n recipients = 1,\n }: {\n from: string;\n memo?: string;\n feeRate?: number;\n feeOptionKey?: FeeOption;\n recipients?: number | TargetOutput[];\n }) {\n const addressData = await getUtxoApi(chain).getAddressData(from);\n const feeRateWhole = feeRate ? Math.ceil(feeRate) : (await getFeeRates(chain))[feeOptionKey];\n\n const inputs = addressData?.utxo\n .map((utxo) => ({\n ...utxo,\n // type: utxo.witnessUtxo ? UTXOScriptType.P2WPKH : UTXOScriptType.P2PKH,\n type: UTXOScriptType.P2PKH,\n hash: \"\",\n }))\n .filter(\n (utxo) => utxo.value > Math.max(getDustThreshold(chain), getInputSize(utxo) * feeRateWhole),\n );\n\n if (!inputs?.length) return AssetValue.from({ chain });\n\n const balance = AssetValue.from({\n chain,\n value: inputs.reduce((sum, utxo) => sum + utxo.value, 0),\n });\n\n const outputs =\n typeof recipients === \"number\"\n ? (Array.from({ length: recipients }, () => ({\n address: from,\n value: 0,\n })) as TargetOutput[])\n : recipients;\n\n if (memo) {\n const script = await compileMemo(memo);\n outputs.push({ address: from, script, value: 0 });\n }\n\n const txSize = calculateTxSize({ inputs, outputs, feeRate: feeRateWhole });\n\n const fee = txSize * feeRateWhole;\n\n return balance.sub(fee);\n };\n}\n\nfunction estimateTransactionFee(chain: UTXOChain) {\n return async (params: {\n assetValue: AssetValue;\n recipient: string;\n sender: string;\n memo?: string;\n feeOptionKey?: FeeOption;\n feeRate?: number;\n fetchTxHex?: boolean;\n }) => {\n const inputFees = await getInputsOutputsFee(params);\n\n return AssetValue.from({\n chain,\n value: SwapKitNumber.fromBigInt(BigInt(inputFees.fee), 8).getValue(\"string\"),\n });\n };\n}\n\ntype CreateKeysForPathReturnType = {\n [Chain.BitcoinCash]: BchECPair;\n [Chain.Bitcoin]: ECPairInterface;\n [Chain.Dash]: ECPairInterface;\n [Chain.Dogecoin]: ECPairInterface;\n [Chain.Litecoin]: ECPairInterface;\n};\n\nexport async function getCreateKeysForPath<T extends keyof CreateKeysForPathReturnType>(\n chain: T,\n): Promise<\n (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T]\n> {\n const getNetwork = await getUtxoNetwork();\n\n switch (chain) {\n case Chain.BitcoinCash: {\n return function createKeysForPath({\n phrase,\n derivationPath = `${DerivationPath.BCH}/0`,\n wif,\n }: { wif?: string; phrase?: string; derivationPath?: string }) {\n const network = getNetwork(chain);\n\n if (wif) {\n return ECPair.fromWIF(wif, network) as BchECPair;\n }\n if (!phrase)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", { error: \"No phrase provided\" });\n\n const masterHDNode = HDNode.fromSeedBuffer(\n Buffer.from(mnemonicToSeedSync(phrase)),\n network,\n );\n const keyPair = masterHDNode.derivePath(derivationPath).keyPair;\n\n return keyPair as BchECPair;\n } as (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T];\n }\n case Chain.Bitcoin:\n case Chain.Dogecoin:\n case Chain.Litecoin:\n case Chain.Dash: {\n return function createKeysForPath({\n phrase,\n wif,\n derivationPath,\n }: { phrase?: string; wif?: string; derivationPath: string }) {\n if (!(wif || phrase))\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Either phrase or wif must be provided\",\n });\n\n const factory = ECPairFactory(secp256k1);\n const network = getNetwork(chain);\n\n if (wif) return factory.fromWIF(wif, network);\n\n const seed = mnemonicToSeedSync(phrase as string);\n const master = HDKey.fromMasterSeed(seed, network).derive(derivationPath);\n if (!master.privateKey)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Could not get private key from phrase\",\n });\n\n return factory.fromPrivateKey(Buffer.from(master.privateKey), { network });\n } as (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T];\n }\n default:\n throw new SwapKitError(\"toolbox_utxo_not_supported\", { chain });\n }\n}\n\nexport async function addressFromKeysGetter(chain: UTXOChain) {\n const getNetwork = await getUtxoNetwork();\n\n return function getAddressFromKeys(keys: ECPairInterface | BchECPair) {\n if (!keys)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", { error: \"Keys must be provided\" });\n\n const method = nonSegwitChains.includes(chain) ? payments.p2pkh : payments.p2wpkh;\n const { address } = method({ pubkey: keys.publicKey as Buffer, network: getNetwork(chain) });\n if (!address)\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { error: \"Address not defined\" });\n\n return address;\n };\n}\n\nfunction transfer(signer?: ChainSigner<Psbt, Psbt>) {\n return async function transfer({\n memo,\n recipient,\n feeOptionKey,\n feeRate,\n assetValue,\n }: UTXOTransferParams) {\n const from = await signer?.getAddress();\n\n const chain = assetValue.chain as UTXOChain;\n\n if (!(signer && from)) throw new SwapKitError(\"toolbox_utxo_no_signer\");\n if (!recipient)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Recipient address must be provided\",\n });\n const txFeeRate = feeRate || (await getFeeRates(chain))[feeOptionKey || FeeOption.Fast];\n\n const { psbt } = await createTransaction({\n recipient,\n feeRate: txFeeRate,\n sender: from,\n assetValue,\n memo,\n });\n const signedPsbt = await signer.signTransaction(psbt);\n signedPsbt.finalizeAllInputs(); // Finalise inputs\n // TX extracted and formatted to hex\n return getUtxoApi(chain).broadcastTx(signedPsbt.extractTransaction().toHex());\n };\n}\n\nasync function getFeeRates(chain: UTXOChain) {\n const suggestedFeeRate = await getUtxoApi(chain).getSuggestedTxFee();\n\n return {\n [FeeOption.Average]: suggestedFeeRate,\n [FeeOption.Fast]: applyFeeMultiplier(suggestedFeeRate, FeeOption.Fast),\n [FeeOption.Fastest]: applyFeeMultiplier(suggestedFeeRate, FeeOption.Fastest),\n };\n}\n\nasync function getInputsAndTargetOutputs({\n assetValue,\n recipient,\n memo,\n sender,\n fetchTxHex: fetchTxOverwrite = false,\n}: Omit<UTXOBuildTxParams, \"feeRate\">) {\n const chain = assetValue.chain as UTXOChain;\n\n const fetchTxHex = fetchTxOverwrite || nonSegwitChains.includes(chain);\n\n const inputs = await getUtxoApi(chain).scanUTXOs({ address: sender, fetchTxHex });\n\n //1. add output amount and recipient to targets\n //2. add output memo to targets (optional)\n\n return {\n inputs,\n outputs: [\n { address: recipient, value: Number(assetValue.bigIntValue) },\n ...(memo ? [{ address: \"\", script: await compileMemo(memo), value: 0 }] : []),\n ],\n };\n}\n"
12
12
  ],
13
- "mappings": "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",
14
- "debugId": "A3DD28B1B9CE223364756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "6BEC65B4771F1DD464756E2164756E21",
15
15
  "names": []
16
16
  }
package/package.json CHANGED
@@ -23,7 +23,7 @@
23
23
  "@solana/spl-memo": "0.2.5",
24
24
  "@solana/spl-token": "0.4.13",
25
25
  "@solana/web3.js": "1.98.2",
26
- "@swapkit/helpers": "3.0.0-beta.14",
26
+ "@swapkit/helpers": "3.0.0-beta.15",
27
27
  "base64-js": "1.5.1",
28
28
  "bitcoinjs-lib": "6.1.7",
29
29
  "bs58check": "4.0.0",
@@ -33,6 +33,9 @@
33
33
  "ecpair": "2.1.0",
34
34
  "ethers": "6.14.3",
35
35
  "micro-key-producer": "0.7.6",
36
+ "near-api-js": "^6.1.0",
37
+ "near-sdk-js": "^2.0.0",
38
+ "near-seed-phrase": "^0.2.0",
36
39
  "protobufjs": "7.5.3",
37
40
  "tronweb": "6.0.3",
38
41
  "ts-pattern": "5.7.1",
@@ -63,6 +66,11 @@
63
66
  "require": "./dist/src/evm/index.cjs",
64
67
  "types": "./src/evm/index.ts"
65
68
  },
69
+ "./near": {
70
+ "default": "./dist/near/index.js",
71
+ "require": "./dist/near/index.cjs",
72
+ "types": "./src/near/index.ts"
73
+ },
66
74
  "./radix": {
67
75
  "default": "./dist/src/radix/index.js",
68
76
  "require": "./dist/src/radix/index.cjs",
@@ -111,5 +119,5 @@
111
119
  "type-check:go": "tsgo"
112
120
  },
113
121
  "type": "module",
114
- "version": "1.0.0-beta.19"
122
+ "version": "1.0.0-beta.20"
115
123
  }
@@ -17,6 +17,7 @@ import {
17
17
  SKConfig,
18
18
  SwapKitError,
19
19
  SwapKitNumber,
20
+ applyFeeMultiplier,
20
21
  derivationPathToString,
21
22
  updateDerivationPath,
22
23
  } from "@swapkit/helpers";
@@ -260,8 +261,14 @@ async function getFees(chain: Chain, safeDefault: number) {
260
261
  const baseFee = await fetchFeeRateFromSwapKit(ChainToChainId[chain], safeDefault);
261
262
  return {
262
263
  average: SwapKitNumber.fromBigInt(BigInt(baseFee), BaseDecimal[chain]),
263
- fast: SwapKitNumber.fromBigInt(BigInt(Math.floor(baseFee * 1.5)), BaseDecimal[chain]),
264
- fastest: SwapKitNumber.fromBigInt(BigInt(Math.floor(baseFee * 2)), BaseDecimal[chain]),
264
+ fast: SwapKitNumber.fromBigInt(
265
+ BigInt(applyFeeMultiplier(baseFee, FeeOption.Fast, true)),
266
+ BaseDecimal[chain],
267
+ ),
268
+ fastest: SwapKitNumber.fromBigInt(
269
+ BigInt(applyFeeMultiplier(baseFee, FeeOption.Fastest, true)),
270
+ BaseDecimal[chain],
271
+ ),
265
272
  } as { [key in FeeOption]: SwapKitNumber };
266
273
  }
267
274
 
@@ -8,6 +8,7 @@ import {
8
8
  FeeOption,
9
9
  SwapKitError,
10
10
  SwapKitNumber,
11
+ applyFeeMultiplierToBigInt,
11
12
  isGasAsset,
12
13
  } from "@swapkit/helpers";
13
14
  import { erc20ABI } from "@swapkit/helpers/contracts";
@@ -242,16 +243,19 @@ export function getEstimateGasPrices({
242
243
  maxPriorityFeePerGas,
243
244
  },
244
245
  [FeeOption.Fast]: {
245
- l1GasPrice: ((l1GasPrice || 0n) * 15n) / 10n,
246
- gasPrice: (price * 15n) / 10n,
246
+ l1GasPrice: applyFeeMultiplierToBigInt(l1GasPrice || 0n, FeeOption.Fast),
247
+ gasPrice: applyFeeMultiplierToBigInt(price, FeeOption.Fast),
247
248
  maxFeePerGas,
248
- maxPriorityFeePerGas: (maxPriorityFeePerGas * 15n) / 10n,
249
+ maxPriorityFeePerGas: applyFeeMultiplierToBigInt(maxPriorityFeePerGas, FeeOption.Fast),
249
250
  },
250
251
  [FeeOption.Fastest]: {
251
- l1GasPrice: (l1GasPrice || 0n) * 2n,
252
- gasPrice: price * 2n,
252
+ l1GasPrice: applyFeeMultiplierToBigInt(l1GasPrice || 0n, FeeOption.Fastest),
253
+ gasPrice: applyFeeMultiplierToBigInt(price, FeeOption.Fastest),
253
254
  maxFeePerGas,
254
- maxPriorityFeePerGas: maxPriorityFeePerGas * 2n,
255
+ maxPriorityFeePerGas: applyFeeMultiplierToBigInt(
256
+ maxPriorityFeePerGas,
257
+ FeeOption.Fastest,
258
+ ),
255
259
  },
256
260
  };
257
261
  } catch (error) {
@@ -273,12 +277,15 @@ export function getEstimateGasPrices({
273
277
  return {
274
278
  [FeeOption.Average]: { maxFeePerGas, maxPriorityFeePerGas },
275
279
  [FeeOption.Fast]: {
276
- maxFeePerGas: (maxFeePerGas * 15n) / 10n,
277
- maxPriorityFeePerGas: (maxPriorityFeePerGas * 15n) / 10n,
280
+ maxFeePerGas: applyFeeMultiplierToBigInt(maxFeePerGas, FeeOption.Fast),
281
+ maxPriorityFeePerGas: applyFeeMultiplierToBigInt(maxPriorityFeePerGas, FeeOption.Fast),
278
282
  },
279
283
  [FeeOption.Fastest]: {
280
- maxFeePerGas: maxFeePerGas * 2n,
281
- maxPriorityFeePerGas: maxPriorityFeePerGas * 2n,
284
+ maxFeePerGas: applyFeeMultiplierToBigInt(maxFeePerGas, FeeOption.Fastest),
285
+ maxPriorityFeePerGas: applyFeeMultiplierToBigInt(
286
+ maxPriorityFeePerGas,
287
+ FeeOption.Fastest,
288
+ ),
282
289
  },
283
290
  };
284
291
  }
@@ -286,8 +293,8 @@ export function getEstimateGasPrices({
286
293
 
287
294
  return {
288
295
  [FeeOption.Average]: { gasPrice },
289
- [FeeOption.Fast]: { gasPrice: (gasPrice * 15n) / 10n },
290
- [FeeOption.Fastest]: { gasPrice: gasPrice * 2n },
296
+ [FeeOption.Fast]: { gasPrice: applyFeeMultiplierToBigInt(gasPrice, FeeOption.Fast) },
297
+ [FeeOption.Fastest]: { gasPrice: applyFeeMultiplierToBigInt(gasPrice, FeeOption.Fastest) },
291
298
  };
292
299
  } catch (error) {
293
300
  throw new SwapKitError("toolbox_evm_gas_estimation_error", {
package/src/index.ts CHANGED
@@ -12,6 +12,7 @@ import {
12
12
  import type { getCosmosToolbox } from "@swapkit/toolboxes/cosmos";
13
13
 
14
14
  import type { ETHToolbox, EVMCreateTransactionParams, getEvmToolbox } from "@swapkit/toolboxes/evm";
15
+ import type { getNearToolbox } from "@swapkit/toolboxes/near";
15
16
  import type { RadixToolbox } from "@swapkit/toolboxes/radix";
16
17
  import type { getRippleToolbox } from "@swapkit/toolboxes/ripple";
17
18
  import type { SolanaCreateTransactionParams, getSolanaToolbox } from "@swapkit/toolboxes/solana";
@@ -26,6 +27,7 @@ export async function getAddressValidator() {
26
27
  const { substrateValidateAddress } = await import("@swapkit/toolboxes/substrate");
27
28
  const { getUTXOAddressValidator } = await import("@swapkit/toolboxes/utxo");
28
29
  const { getSolanaAddressValidator } = await import("@swapkit/toolboxes/solana");
30
+ const { validateNearAddress } = await import("@swapkit/toolboxes/near");
29
31
  const { rippleValidateAddress } = await import("@swapkit/toolboxes/ripple");
30
32
  const { radixValidateAddress } = await import("@swapkit/toolboxes/radix");
31
33
  const { getTronAddressValidator } = await import("@swapkit/toolboxes/tron");
@@ -56,6 +58,7 @@ export async function getAddressValidator() {
56
58
  substrateValidateAddress({ address, chain: chain as SubstrateChain }),
57
59
  )
58
60
  .with(Chain.Radix, () => radixValidateAddress(address))
61
+ .with(Chain.Near, () => validateNearAddress(address))
59
62
  .with(Chain.Ripple, () => rippleValidateAddress(address))
60
63
  .with(Chain.Solana, () => solanaValidateAddress(address))
61
64
  .with(Chain.Tron, () => tronValidateAddress(address))
@@ -100,6 +103,7 @@ export function getFeeEstimator<T extends keyof CreateTransactionParams>(chain:
100
103
  Chain.Solana,
101
104
  Chain.Ripple,
102
105
  Chain.Tron,
106
+ Chain.Near,
103
107
  async (chain) => {
104
108
  const toolbox = await getToolbox(chain);
105
109
  return toolbox.estimateTransactionFee(params) as Promise<AssetValue>;
@@ -123,6 +127,7 @@ type Toolboxes = {
123
127
  [key in SubstrateChain]: Awaited<ReturnType<typeof getSubstrateToolbox>>;
124
128
  } & {
125
129
  [Chain.Radix]: Awaited<ReturnType<typeof RadixToolbox>>;
130
+ [Chain.Near]: Awaited<ReturnType<typeof getNearToolbox>>;
126
131
  [Chain.Ripple]: Awaited<ReturnType<typeof getRippleToolbox>>;
127
132
  [Chain.Solana]: Awaited<ReturnType<typeof getSolanaToolbox>>;
128
133
  [Chain.Tron]: Awaited<ReturnType<typeof createTronToolbox>>;
@@ -136,6 +141,7 @@ type ToolboxParams = { [key in EVMChain]: Parameters<typeof getEvmToolbox>[1] }
136
141
  [key in SubstrateChain]: Parameters<typeof getSubstrateToolbox>[1];
137
142
  } & {
138
143
  [Chain.Radix]: Parameters<typeof RadixToolbox>[0];
144
+ [Chain.Near]: Parameters<typeof getNearToolbox>[0];
139
145
  [Chain.Ripple]: Parameters<typeof getRippleToolbox>[0];
140
146
  [Chain.Solana]: Parameters<typeof getSolanaToolbox>[0];
141
147
  [Chain.Tron]: Parameters<typeof createTronToolbox>[0];
@@ -150,6 +156,7 @@ type CreateTransactionParams = { [key in EVMChain]: EVMCreateTransactionParams }
150
156
  } & {
151
157
  [Chain.Radix]: GenericCreateTransactionParams;
152
158
  [Chain.Ripple]: GenericCreateTransactionParams;
159
+ [Chain.Near]: GenericCreateTransactionParams;
153
160
  [Chain.Solana]: SolanaCreateTransactionParams;
154
161
  [Chain.Tron]: GenericCreateTransactionParams;
155
162
  };
@@ -234,6 +241,11 @@ export async function getToolbox<T extends keyof Toolboxes>(
234
241
  const tronToolbox = await createTronToolbox(params);
235
242
  return tronToolbox as Toolboxes[T];
236
243
  })
244
+ .with(Chain.Near, async () => {
245
+ const { getNearToolbox } = await import("@swapkit/toolboxes/near");
246
+ const nearToolbox = await getNearToolbox(params as Parameters<typeof getNearToolbox>[0]);
247
+ return nearToolbox as Toolboxes[T];
248
+ })
237
249
  .otherwise(() => {
238
250
  throw new SwapKitError("toolbox_not_supported", { chain });
239
251
  });
@@ -0,0 +1,22 @@
1
+ import type { Account, Contract } from "near-api-js";
2
+
3
+ // Create a Near contract instance
4
+ export async function createNearContract<T extends Contract>({
5
+ account,
6
+ contractId,
7
+ viewMethods,
8
+ changeMethods,
9
+ }: {
10
+ account: Account;
11
+ contractId: string;
12
+ viewMethods: string[];
13
+ changeMethods: string[];
14
+ }): Promise<T> {
15
+ const { Contract } = await import("near-api-js");
16
+
17
+ return new Contract(account, contractId, {
18
+ viewMethods,
19
+ changeMethods,
20
+ useLocalViewExecution: true, // Enable local view execution for efficiency
21
+ }) as T;
22
+ }
@@ -0,0 +1,86 @@
1
+ import type { Provider } from "@near-js/providers";
2
+ import { type DerivationPathArray, SwapKitError, derivationPathToString } from "@swapkit/helpers";
3
+ import { type KeyPair, KeyPairSigner } from "near-api-js";
4
+ import type { NearSigner } from "../types";
5
+
6
+ export async function validateNearAddress(address: string) {
7
+ // Use the official NEAR SDK validation function if available
8
+ try {
9
+ const { validateAccountId } = await import("near-sdk-js");
10
+ return validateAccountId(address);
11
+ } catch {
12
+ const ACCOUNT_ID_REGEX = /^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/;
13
+
14
+ return address.length >= 2 && address.length <= 64 && ACCOUNT_ID_REGEX.test(address);
15
+ }
16
+ }
17
+
18
+ export async function getNearSignerFromPhrase(params: {
19
+ phrase: string;
20
+ derivationPath?: DerivationPathArray;
21
+ index?: number;
22
+ }) {
23
+ const { parseSeedPhrase } = await import("near-seed-phrase");
24
+ const { KeyPair } = await import("near-api-js");
25
+
26
+ // Handle derivation path logic here
27
+ // NEAR uses a 3-level derivation path: m/44'/397'/index'
28
+ const index = params.index || 0;
29
+ const derivationPath = params.derivationPath
30
+ ? derivationPathToString(params.derivationPath.slice(0, 3) as [number, number, number])
31
+ : `m/44'/397'/${index}'`;
32
+
33
+ const { secretKey } = parseSeedPhrase(params.phrase, derivationPath);
34
+ const keyPair = KeyPair.fromString(secretKey as any);
35
+
36
+ return createNearSignerFromKeyPair(keyPair);
37
+ }
38
+
39
+ export async function getNearSignerFromPrivateKey(privateKey: string) {
40
+ const { KeyPair } = await import("near-api-js/lib/utils");
41
+ const keyPair = KeyPair.fromString(privateKey as any);
42
+ return createNearSignerFromKeyPair(keyPair);
43
+ }
44
+
45
+ class SKKeyPairSigner extends KeyPairSigner {
46
+ #keyPair: KeyPair;
47
+
48
+ constructor(keyPair: KeyPair) {
49
+ super(keyPair);
50
+ this.#keyPair = keyPair;
51
+ }
52
+
53
+ getAddress(): Promise<string> {
54
+ // For implicit accounts, derive account ID from public key
55
+ // NEAR implicit accounts use hex representation of the public key
56
+ const publicKey = this.#keyPair.getPublicKey();
57
+ const hexAddress = Buffer.from(publicKey.data).toString("hex");
58
+ return Promise.resolve(hexAddress);
59
+ }
60
+ }
61
+
62
+ function createNearSignerFromKeyPair(keyPair: KeyPair): NearSigner {
63
+ const keyPairSigner = new SKKeyPairSigner(keyPair);
64
+
65
+ return keyPairSigner;
66
+ }
67
+
68
+ export async function getFullAccessPublicKey(provider: Provider, accountId: string) {
69
+ // Get the first full access key for the account
70
+ const response = await provider.query({
71
+ request_type: "view_access_key_list",
72
+ finality: "final",
73
+ account_id: accountId,
74
+ });
75
+
76
+ const fullAccessKey = (response as any).keys.find(
77
+ (key: any) => key.access_key.permission === "FullAccess",
78
+ );
79
+
80
+ if (!fullAccessKey) {
81
+ throw new SwapKitError("toolbox_near_invalid_address");
82
+ }
83
+
84
+ const { utils } = await import("near-api-js");
85
+ return utils.PublicKey.fromString(fullAccessKey.public_key);
86
+ }
@@ -0,0 +1,110 @@
1
+ import type { Account } from "near-api-js";
2
+ import type { NearGasEstimateParams } from "../types/contract";
3
+
4
+ // Gas constants (in TGas - 10^12 gas units)
5
+ export const GAS_COSTS = {
6
+ SIMPLE_TRANSFER: "1", // 1 TGas
7
+ TOKEN_TRANSFER: "100", // 100 TGas
8
+ CONTRACT_CALL: "100", // 100 TGas base
9
+ ACCOUNT_CREATION: "30", // 30 TGas
10
+ CONTRACT_DEPLOYMENT: "200", // 200 TGas
11
+ ACCESS_KEY_ADDITION: "5", // 5 TGas
12
+ ACCESS_KEY_DELETION: "5", // 5 TGas
13
+ STAKE: "10", // 10 TGas
14
+ STORAGE_DEPOSIT: "100", // 100 TGas
15
+ } as const;
16
+
17
+ // Type guards for discriminated union
18
+ export function isSimpleTransfer(
19
+ params: NearGasEstimateParams,
20
+ ): params is { recipient: string; amount: string } {
21
+ return "recipient" in params && "amount" in params && !("contractId" in params);
22
+ }
23
+
24
+ export function isContractCall(params: NearGasEstimateParams): params is {
25
+ contractId: string;
26
+ methodName: string;
27
+ args?: Record<string, any>;
28
+ attachedDeposit?: string;
29
+ } {
30
+ return "contractId" in params && "methodName" in params;
31
+ }
32
+
33
+ export function isBatchTransaction(params: NearGasEstimateParams): params is { actions: any[] } {
34
+ return "actions" in params;
35
+ }
36
+
37
+ export function isAccountCreation(params: NearGasEstimateParams): params is {
38
+ newAccountId: string;
39
+ publicKey?: string;
40
+ } {
41
+ return "newAccountId" in params;
42
+ }
43
+
44
+ export function isContractDeployment(
45
+ params: NearGasEstimateParams,
46
+ ): params is { contractCode: Uint8Array } {
47
+ return "contractCode" in params;
48
+ }
49
+
50
+ export function isCustomEstimator(params: NearGasEstimateParams): params is {
51
+ customEstimator: (account: Account) => Promise<string>;
52
+ } {
53
+ return "customEstimator" in params;
54
+ }
55
+
56
+ // Helper function to estimate gas for batch actions
57
+ export function estimateBatchGas(actions: any[]) {
58
+ let totalGas = 0;
59
+
60
+ for (const action of actions) {
61
+ switch (action.enum) {
62
+ case "transfer":
63
+ totalGas += Number(GAS_COSTS.SIMPLE_TRANSFER);
64
+ break;
65
+ case "functionCall":
66
+ totalGas += Number(GAS_COSTS.CONTRACT_CALL);
67
+ break;
68
+ case "createAccount":
69
+ totalGas += Number(GAS_COSTS.ACCOUNT_CREATION);
70
+ break;
71
+ case "deployContract":
72
+ totalGas += Number(GAS_COSTS.CONTRACT_DEPLOYMENT);
73
+ break;
74
+ case "addKey":
75
+ totalGas += Number(GAS_COSTS.ACCESS_KEY_ADDITION);
76
+ break;
77
+ case "deleteKey":
78
+ totalGas += Number(GAS_COSTS.ACCESS_KEY_DELETION);
79
+ break;
80
+ case "stake":
81
+ totalGas += Number(GAS_COSTS.STAKE);
82
+ break;
83
+ default:
84
+ totalGas += Number(GAS_COSTS.CONTRACT_CALL);
85
+ }
86
+ }
87
+
88
+ return totalGas.toString();
89
+ }
90
+
91
+ // Helper function to get gas cost for contract methods
92
+ export function getContractMethodGas(methodName: string) {
93
+ if (methodName === "ft_transfer" || methodName === "ft_transfer_call") {
94
+ return GAS_COSTS.TOKEN_TRANSFER;
95
+ }
96
+ if (methodName === "storage_deposit") {
97
+ return GAS_COSTS.STORAGE_DEPOSIT;
98
+ }
99
+ return GAS_COSTS.CONTRACT_CALL;
100
+ }
101
+
102
+ // Convert TGas string to gas units
103
+ export function tgasToGas(tgas: string): string {
104
+ return (BigInt(tgas) * BigInt(10 ** 12)).toString();
105
+ }
106
+
107
+ // Convert gas units to TGas
108
+ export function gasToTGas(gas: string): string {
109
+ return (BigInt(gas) / BigInt(10 ** 12)).toString();
110
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./core";
2
+
3
+ export { createNearContract } from "./contractFactory";
4
+ export * from "./gasEstimation";
5
+ export { createNEP141Token } from "./nep141";