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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/{chunk-fjfxga2v.js → chunk-5yxc1e69.js} +1 -1
  2. package/dist/{chunk-fjfxga2v.js.map → chunk-5yxc1e69.js.map} +1 -1
  3. package/dist/chunk-6f98phv2.js +4 -0
  4. package/dist/{chunk-0h4xdrwz.js.map → chunk-6f98phv2.js.map} +2 -2
  5. package/dist/{chunk-0f0249b1.js → chunk-9bqegm61.js} +1 -1
  6. package/dist/{chunk-p1kdg37m.js → chunk-s47y8512.js} +2 -2
  7. package/dist/{chunk-p1kdg37m.js.map → chunk-s47y8512.js.map} +1 -1
  8. package/dist/chunk-vtd17cje.js +3 -0
  9. package/dist/chunk-vtd17cje.js.map +10 -0
  10. package/dist/chunk-zcdeg6h9.js +4 -0
  11. package/dist/chunk-zcdeg6h9.js.map +10 -0
  12. package/dist/src/cosmos/index.cjs +3 -0
  13. package/dist/src/cosmos/index.cjs.map +16 -0
  14. package/dist/src/cosmos/index.js +3 -0
  15. package/dist/src/cosmos/index.js.map +16 -0
  16. package/dist/src/evm/index.cjs +3 -0
  17. package/dist/src/evm/index.cjs.map +18 -0
  18. package/dist/src/evm/index.js +3 -0
  19. package/dist/src/evm/index.js.map +18 -0
  20. package/dist/src/index.cjs +3 -0
  21. package/dist/src/index.cjs.map +10 -0
  22. package/dist/src/index.js +3 -0
  23. package/dist/src/index.js.map +10 -0
  24. package/dist/src/near/index.cjs +3 -0
  25. package/dist/src/near/index.cjs.map +13 -0
  26. package/dist/src/near/index.js +3 -0
  27. package/dist/src/near/index.js.map +13 -0
  28. package/dist/{radix → src/radix}/index.cjs +2 -2
  29. package/dist/src/radix/index.cjs.map +10 -0
  30. package/dist/src/radix/index.js +3 -0
  31. package/dist/src/radix/index.js.map +10 -0
  32. package/dist/src/ripple/index.cjs +3 -0
  33. package/dist/src/ripple/index.cjs.map +10 -0
  34. package/dist/src/ripple/index.js +3 -0
  35. package/dist/src/ripple/index.js.map +10 -0
  36. package/dist/src/solana/index.cjs +3 -0
  37. package/dist/src/solana/index.cjs.map +10 -0
  38. package/dist/src/solana/index.js +3 -0
  39. package/dist/src/solana/index.js.map +10 -0
  40. package/dist/src/substrate/index.cjs +3 -0
  41. package/dist/src/substrate/index.cjs.map +12 -0
  42. package/dist/src/substrate/index.js +3 -0
  43. package/dist/src/substrate/index.js.map +12 -0
  44. package/dist/src/tron/index.cjs +3 -0
  45. package/dist/src/tron/index.cjs.map +11 -0
  46. package/dist/src/tron/index.js +3 -0
  47. package/dist/src/tron/index.js.map +11 -0
  48. package/dist/src/utxo/index.cjs +5 -0
  49. package/dist/src/utxo/index.cjs.map +17 -0
  50. package/dist/src/utxo/index.js +5 -0
  51. package/dist/src/utxo/index.js.map +17 -0
  52. package/package.json +49 -37
  53. package/src/cosmos/thorchainUtils/addressFormat.ts +4 -1
  54. package/src/cosmos/thorchainUtils/messages.ts +2 -2
  55. package/src/cosmos/thorchainUtils/registry.ts +3 -3
  56. package/src/cosmos/toolbox/cosmos.ts +35 -16
  57. package/src/cosmos/toolbox/index.ts +2 -2
  58. package/src/cosmos/toolbox/thorchain.ts +11 -9
  59. package/src/cosmos/util.ts +76 -6
  60. package/src/evm/__tests__/address-validation.test.ts +86 -0
  61. package/src/evm/__tests__/ethereum.test.ts +1 -1
  62. package/src/evm/helpers.ts +4 -3
  63. package/src/evm/toolbox/baseEVMToolbox.ts +37 -25
  64. package/src/evm/toolbox/index.ts +2 -2
  65. package/src/evm/toolbox/op.ts +21 -7
  66. package/src/index.ts +118 -100
  67. package/src/near/__tests__/core.test.ts +80 -0
  68. package/src/near/helpers/contractFactory.ts +22 -0
  69. package/src/near/helpers/core.ts +89 -0
  70. package/src/near/helpers/gasEstimation.ts +110 -0
  71. package/src/near/helpers/index.ts +5 -0
  72. package/src/near/helpers/nep141.ts +110 -0
  73. package/src/near/index.ts +24 -0
  74. package/src/near/toolbox.ts +498 -0
  75. package/src/near/types/contract.ts +48 -0
  76. package/src/near/types/nep141.ts +66 -0
  77. package/src/near/types.ts +57 -0
  78. package/src/radix/index.ts +8 -2
  79. package/src/ripple/index.ts +15 -26
  80. package/src/solana/toolbox.ts +73 -2
  81. package/src/substrate/balance.ts +92 -0
  82. package/src/substrate/substrate.ts +7 -5
  83. package/src/tron/__tests__/toolbox.test.ts +147 -0
  84. package/src/tron/helpers/trc20.abi.ts +40 -0
  85. package/src/tron/index.ts +16 -0
  86. package/src/tron/toolbox.ts +336 -0
  87. package/src/tron/types.ts +31 -0
  88. package/src/utxo/__tests__/zcash-integration.test.ts +114 -0
  89. package/src/utxo/helpers/api.ts +66 -16
  90. package/src/utxo/helpers/bchaddrjs.ts +8 -8
  91. package/src/utxo/helpers/coinselect.ts +4 -2
  92. package/src/utxo/helpers/txSize.ts +4 -3
  93. package/src/utxo/index.ts +1 -0
  94. package/src/utxo/toolbox/bitcoinCash.ts +22 -14
  95. package/src/utxo/toolbox/index.ts +16 -4
  96. package/src/utxo/toolbox/utxo.ts +42 -27
  97. package/src/utxo/toolbox/zcash.ts +208 -0
  98. package/src/utxo/types.ts +2 -0
  99. package/dist/chunk-0h4xdrwz.js +0 -4
  100. package/dist/cosmos/index.cjs +0 -3
  101. package/dist/cosmos/index.cjs.map +0 -16
  102. package/dist/cosmos/index.js +0 -3
  103. package/dist/cosmos/index.js.map +0 -16
  104. package/dist/evm/index.cjs +0 -3
  105. package/dist/evm/index.cjs.map +0 -18
  106. package/dist/evm/index.js +0 -3
  107. package/dist/evm/index.js.map +0 -18
  108. package/dist/index.cjs +0 -3
  109. package/dist/index.cjs.map +0 -10
  110. package/dist/index.js +0 -3
  111. package/dist/index.js.map +0 -10
  112. package/dist/radix/index.cjs.map +0 -10
  113. package/dist/radix/index.js +0 -3
  114. package/dist/radix/index.js.map +0 -10
  115. package/dist/ripple/index.cjs +0 -3
  116. package/dist/ripple/index.cjs.map +0 -10
  117. package/dist/ripple/index.js +0 -3
  118. package/dist/ripple/index.js.map +0 -10
  119. package/dist/solana/index.cjs +0 -3
  120. package/dist/solana/index.cjs.map +0 -10
  121. package/dist/solana/index.js +0 -3
  122. package/dist/solana/index.js.map +0 -10
  123. package/dist/substrate/index.cjs +0 -3
  124. package/dist/substrate/index.cjs.map +0 -11
  125. package/dist/substrate/index.js +0 -3
  126. package/dist/substrate/index.js.map +0 -11
  127. package/dist/utxo/index.cjs +0 -3
  128. package/dist/utxo/index.cjs.map +0 -16
  129. package/dist/utxo/index.js +0 -3
  130. package/dist/utxo/index.js.map +0 -16
  131. /package/dist/{chunk-0f0249b1.js.map → chunk-9bqegm61.js.map} +0 -0
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/radix/index.ts"],
4
- "sourcesContent": [
5
- "import type {\n FungibleResourcesCollectionItem,\n GatewayApiClient,\n StateEntityDetailsVaultResponseItem,\n StateEntityFungiblesPageRequest,\n StateEntityFungiblesPageResponse,\n} from \"@radixdlt/babylon-gateway-api-sdk\";\nimport { AssetValue, Chain, SKConfig, type SKConfigIntegrations } from \"@swapkit/helpers\";\n\nexport type RadixWallet = Awaited<ReturnType<typeof RadixToolbox>>;\n\ntype RadixGetBalanceParams = {\n address: string;\n networkApi: GatewayApiClient;\n};\n// Could not find anything sync in SDK, ask Radix team\nexport function radixValidateAddress(address: string) {\n return address.startsWith(\"account_rdx1\") && address.length === 66;\n}\n\nfunction getBalance({ networkApi }: { networkApi: GatewayApiClient }) {\n return async function getBalance(address: string) {\n const fungibleResources = await fetchFungibleResources({ address, networkApi });\n const fungibleBalances = convertResourcesToBalances({\n resources: fungibleResources,\n networkApi,\n });\n return fungibleBalances;\n };\n}\n\nasync function fetchFungibleResources({\n address,\n networkApi,\n}: RadixGetBalanceParams): Promise<FungibleResourcesCollectionItem[]> {\n let hasNextPage = true;\n let nextCursor: string | undefined;\n let fungibleResources: FungibleResourcesCollectionItem[] = [];\n const stateVersion = await currentStateVersion(networkApi);\n while (hasNextPage) {\n const stateEntityFungiblesPageRequest: StateEntityFungiblesPageRequest = {\n address: address,\n limit_per_page: 100,\n cursor: nextCursor,\n at_ledger_state: {\n state_version: stateVersion,\n },\n };\n\n const stateEntityFungiblesPageResponse: StateEntityFungiblesPageResponse =\n await networkApi.state.innerClient.entityFungiblesPage({\n stateEntityFungiblesPageRequest: stateEntityFungiblesPageRequest,\n });\n\n fungibleResources = fungibleResources.concat(stateEntityFungiblesPageResponse.items);\n if (stateEntityFungiblesPageResponse.next_cursor) {\n nextCursor = stateEntityFungiblesPageResponse.next_cursor;\n } else {\n hasNextPage = false;\n }\n }\n return fungibleResources;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\nasync function convertResourcesToBalances({\n resources,\n networkApi,\n}: {\n resources: FungibleResourcesCollectionItem[]; //| NonFungibleResourcesCollectionItem[];\n networkApi: GatewayApiClient;\n}): Promise<AssetValue[]> {\n const balances: AssetValue[] = [];\n const BATCH_SIZE = 50;\n\n // Split resources into batches of up to 50 items\n const resourceBatches: FungibleResourcesCollectionItem[][] = [];\n for (let i = 0; i < resources.length; i += BATCH_SIZE) {\n resourceBatches.push(resources.slice(i, i + BATCH_SIZE));\n }\n\n for (const batch of resourceBatches) {\n const addresses = batch.map((item) => item.resource_address);\n const response: StateEntityDetailsVaultResponseItem[] =\n await networkApi.state.getEntityDetailsVaultAggregated(addresses);\n\n const divisibilities = new Map<string, { decimals: number; symbol: string }>();\n\n for (const result of response) {\n if (result.details !== undefined) {\n const metaDataSymbol = result.metadata?.items.find((item) => item.key === \"symbol\");\n const symbol =\n metaDataSymbol?.value.typed.type === \"String\" ? metaDataSymbol.value.typed.value : \"?\";\n\n if (result.details.type === \"FungibleResource\") {\n divisibilities.set(result.address, {\n decimals: result.details.divisibility,\n symbol,\n });\n }\n }\n }\n\n for (const item of batch) {\n if (item.aggregation_level === \"Global\") {\n const assetInfo = divisibilities.get(item.resource_address) || { decimals: 0, symbol: \"?\" };\n\n const balance = AssetValue.from({\n asset:\n assetInfo.symbol !== Chain.Radix\n ? `${Chain.Radix}.${assetInfo.symbol}-${item.resource_address}`\n : \"XRD.XRD\",\n value: item.amount,\n });\n balances.push(balance);\n }\n }\n }\n\n return balances;\n}\n\nasync function currentStateVersion(networkApi: GatewayApiClient) {\n return networkApi.status.getCurrent().then((status) => status.ledger_state.state_version);\n}\n\nexport const RadixToolbox = async ({\n dappConfig,\n}: { dappConfig?: SKConfigIntegrations[\"radix\"] } = {}) => {\n const { RadixDappToolkit } = await import(\"@radixdlt/radix-dapp-toolkit\");\n const { GatewayApiClient } = await import(\"@radixdlt/babylon-gateway-api-sdk\");\n const config = dappConfig || SKConfig.get(\"integrations\").radix;\n\n const radixToolkit = RadixDappToolkit({\n ...config,\n networkId: config.network?.networkId || 1,\n });\n\n const networkApi = GatewayApiClient.initialize(radixToolkit.gatewayApi.clientConfig);\n\n return {\n getAddress: () => \"\",\n getBalance: getBalance({ networkApi }),\n networkApi,\n validateAddress: radixValidateAddress,\n signAndBroadcast: (() => {\n throw new Error(\"Not implemented\");\n }) as (params: any) => Promise<string>,\n };\n};\n"
6
- ],
7
- "mappings": "gDAOA,qBAAS,WAAY,cAAO,yBASrB,SAAS,CAAoB,CAAC,EAAiB,CACpD,OAAO,EAAQ,WAAW,cAAc,GAAK,EAAQ,SAAW,GAGlE,SAAS,CAAU,EAAG,cAAgD,CACpE,OAAO,eAAe,CAAU,CAAC,EAAiB,CAChD,IAAM,EAAoB,MAAM,EAAuB,CAAE,UAAS,YAAW,CAAC,EAK9E,OAJyB,EAA2B,CAClD,UAAW,EACX,YACF,CAAC,GAKL,eAAe,CAAsB,EACnC,UACA,cACoE,CACpE,IAAI,EAAc,GACd,EACA,EAAuD,CAAC,EACtD,EAAe,MAAM,EAAoB,CAAU,EACzD,MAAO,EAAa,CAClB,IAAM,EAAmE,CACvE,QAAS,EACT,eAAgB,IAChB,OAAQ,EACR,gBAAiB,CACf,cAAe,CACjB,CACF,EAEM,EACJ,MAAM,EAAW,MAAM,YAAY,oBAAoB,CACrD,gCAAiC,CACnC,CAAC,EAGH,GADA,EAAoB,EAAkB,OAAO,EAAiC,KAAK,EAC/E,EAAiC,YACnC,EAAa,EAAiC,YAE9C,OAAc,GAGlB,OAAO,EAIT,eAAe,CAA0B,EACvC,YACA,cAIwB,CACxB,IAAM,EAAyB,CAAC,EAC1B,EAAa,GAGb,EAAuD,CAAC,EAC9D,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,GAJnB,GAKjB,EAAgB,KAAK,EAAU,MAAM,EAAG,EALvB,EAKqC,CAAC,EAGzD,QAAW,KAAS,EAAiB,CACnC,IAAM,EAAY,EAAM,IAAI,CAAC,IAAS,EAAK,gBAAgB,EACrD,EACJ,MAAM,EAAW,MAAM,gCAAgC,CAAS,EAE5D,EAAiB,IAAI,IAE3B,QAAW,KAAU,EACnB,GAAI,EAAO,UAAY,OAAW,CAChC,IAAM,EAAiB,EAAO,UAAU,MAAM,KAAK,CAAC,IAAS,EAAK,MAAQ,QAAQ,EAC5E,EACJ,GAAgB,MAAM,MAAM,OAAS,SAAW,EAAe,MAAM,MAAM,MAAQ,IAErF,GAAI,EAAO,QAAQ,OAAS,mBAC1B,EAAe,IAAI,EAAO,QAAS,CACjC,SAAU,EAAO,QAAQ,aACzB,QACF,CAAC,EAKP,QAAW,KAAQ,EACjB,GAAI,EAAK,oBAAsB,SAAU,CACvC,IAAM,EAAY,EAAe,IAAI,EAAK,gBAAgB,GAAK,CAAE,SAAU,EAAG,OAAQ,GAAI,EAEpF,EAAU,EAAW,KAAK,CAC9B,MACE,EAAU,SAAW,EAAM,MACvB,GAAG,EAAM,SAAS,EAAU,UAAU,EAAK,mBAC3C,UACN,MAAO,EAAK,MACd,CAAC,EACD,EAAS,KAAK,CAAO,GAK3B,OAAO,EAGT,eAAe,CAAmB,CAAC,EAA8B,CAC/D,OAAO,EAAW,OAAO,WAAW,EAAE,KAAK,CAAC,IAAW,EAAO,aAAa,aAAa,EAGnF,IAAM,EAAe,OAC1B,cACkD,CAAC,IAAM,CACzD,IAAQ,oBAAqB,KAAa,yCAClC,oBAAqB,KAAa,6CACpC,EAAS,GAAc,EAAS,IAAI,cAAc,EAAE,MAEpD,EAAe,EAAiB,IACjC,EACH,UAAW,EAAO,SAAS,WAAa,CAC1C,CAAC,EAEK,EAAa,EAAiB,WAAW,EAAa,WAAW,YAAY,EAEnF,MAAO,CACL,WAAY,IAAM,GAClB,WAAY,EAAW,CAAE,YAAW,CAAC,EACrC,aACA,gBAAiB,EACjB,iBAAmB,IAAM,CACvB,MAAM,IAAI,MAAM,iBAAiB,EAErC",
8
- "debugId": "DD879EEE96AA5EA464756E2164756E21",
9
- "names": []
10
- }
@@ -1,3 +0,0 @@
1
- var f={};O(f,{rippleValidateAddress:()=>R,getRippleToolbox:()=>W});module.exports=N(f);var j=require("@swapkit/helpers"),I=require("xrpl");function $(z){let y=I.Wallet.fromMnemonic(z);return{getAddress:()=>Promise.resolve(y.address),signTransaction:(M)=>Promise.resolve(y.sign(M))}}function R(z){return I.isValidAddress(z)}var W=async(z={})=>{let y="signer"in z&&z.signer?z.signer:("phrase"in z)&&z.phrase?$(z.phrase):void 0,M=j.SKConfig.get("rpcUrls")[j.Chain.Ripple];if(!M)throw new j.SwapKitError({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:j.Chain.Ripple}});let L=new I.Client(M);await L.connect();let P=()=>{if(!y)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return y.getAddress()},k=async(v)=>{let G=v||await P();try{await L.connect();let J=(await L.request({command:"account_info",account:G})).result.account_data.Balance;return[j.AssetValue.from({chain:j.Chain.Ripple,value:J,fromBaseDecimal:j.BaseDecimal[j.Chain.Ripple]})]}catch(q){if(q.data.error_code===19)return[j.AssetValue.from({chain:j.Chain.Ripple,value:0})];throw new j.SwapKitError("toolbox_ripple_get_balance_error",{info:{address:G,error:q}})}},F=async()=>{let G=(await L.request({command:"fee"})).result.drops.open_ledger_fee;return j.AssetValue.from({chain:j.Chain.Ripple,value:j.SwapKitNumber.fromBigInt(BigInt(G),j.BaseDecimal[j.Chain.Ripple])})},X=async({assetValue:v,recipient:G,memo:q,sender:J})=>{if(!y)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});if(!R(G))throw new j.SwapKitError({errorKey:"core_transaction_invalid_recipient_address"});let Q=J||await P();if(!v.isGasAsset||v.chain!==j.Chain.Ripple)throw new j.SwapKitError({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:v.toString()}});let _={TransactionType:"Payment",Account:Q,Amount:I.xrpToDrops(v.getValue("string")),Destination:G};if(q)_.Memos=[{Memo:{MemoData:Buffer.from(q).toString("hex")}}];return await L.autofill(_)},Y=(v)=>{if(!y)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return y.signTransaction(v)},Z=async(v)=>{let q=(await L.submitAndWait(v)).result;if(q.engine_result==="tesSUCCESS"||q.engine_result==="terQUEUED")return q.tx_json?.hash||q.hash;let J=q.engine_result_message||"Unknown error",Q=q.engine_result||"Unknown code";throw new j.SwapKitError({errorKey:"toolbox_ripple_broadcast_error",info:{chain:j.Chain.Ripple,message:J,code:Q,result:q}})};return{signer:y,createSigner:$,getAddress:P,validateAddress:R,getBalance:k,createTransaction:X,signTransaction:Y,broadcastTransaction:Z,transfer:async(v)=>{if(!y)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});let G=await y.getAddress(),q=await X({...v,sender:G}),J=await Y(q);return Z(J.tx_blob)},estimateTransactionFee:F}};
2
-
3
- //# debugId=EA25C738F3A7B8B464756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/ripple/index.ts"],
4
- "sourcesContent": [
5
- "import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type GenericCreateTransactionParams,\n type GenericTransferParams,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\nimport type { Transaction } from \"xrpl\";\nimport { Client, type Payment, Wallet, isValidAddress, xrpToDrops } from \"xrpl\";\n\nexport type RippleWallet = Awaited<ReturnType<typeof getRippleToolbox>>;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase: string }\n | { signer: ChainSigner<Transaction, { tx_blob: string; hash: string }> }\n | {};\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = SKConfig.get(\"rpcUrls\")[Chain.Ripple];\n if (!rpcUrl) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_rpc_not_configured\",\n info: { chain: Chain.Ripple },\n });\n }\n\n const client = new Client(rpcUrl);\n await client.connect();\n\n const getAddress = () => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.getAddress();\n };\n\n const getBalance = async (address?: string) => {\n const addr = address || (await getAddress());\n\n try {\n await client.connect();\n const accountInfo = await client.request({\n command: \"account_info\",\n account: addr,\n });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: balance,\n fromBaseDecimal: BaseDecimal[Chain.Ripple],\n }),\n ];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === 19) {\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: 0,\n }),\n ];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", {\n info: { address: addr, error },\n });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n return AssetValue.from({\n chain: Chain.Ripple,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), BaseDecimal[Chain.Ripple]),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: Omit<GenericCreateTransactionParams, \"feeRate\">) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n TransactionType: \"Payment\",\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n // Cast result to any to bypass potential type mismatches in xrpl.js definitions\n const result: any = submitResult.result;\n\n // Check engine_result directly on result\n if (result.engine_result === \"tesSUCCESS\" || result.engine_result === \"terQUEUED\") {\n // Access hash from tx_json if available, otherwise fallback to result.hash\n return result.tx_json?.hash || result.hash;\n }\n\n const message = result.engine_result_message || \"Unknown error\";\n const code = result.engine_result || \"Unknown code\";\n\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_broadcast_error\",\n info: { chain: Chain.Ripple, message, code, result },\n // Remove explicit message when using object format\n });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n // Disconnect client on demand or handle elsewhere?\n // For now, let's assume connection is managed outside or persists.\n // const disconnect = () => client.disconnect();\n\n return {\n // Signer related\n signer, // Expose the signer instance if created/provided\n createSigner, // Expose the helper\n // Core methods\n getAddress,\n validateAddress: rippleValidateAddress,\n getBalance,\n createTransaction,\n signTransaction,\n broadcastTransaction,\n transfer,\n estimateTransactionFee,\n // disconnect, // Optional: expose disconnect\n };\n};\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "EA25C738F3A7B8B464756E2164756E21",
9
- "names": []
10
- }
@@ -1,3 +0,0 @@
1
- import"../chunk-p1kdg37m.js";import{AssetValue as R,BaseDecimal as $,Chain as G,SKConfig as W,SwapKitError as I,SwapKitNumber as f}from"@swapkit/helpers";import{Client as H,Wallet as U,isValidAddress as B,xrpToDrops as b}from"xrpl";function k(y){let v=U.fromMnemonic(y);return{getAddress:()=>Promise.resolve(v.address),signTransaction:(M)=>Promise.resolve(v.sign(M))}}function F(y){return B(y)}var K=async(y={})=>{let v="signer"in y&&y.signer?y.signer:("phrase"in y)&&y.phrase?k(y.phrase):void 0,M=W.get("rpcUrls")[G.Ripple];if(!M)throw new I({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:G.Ripple}});let L=new H(M);await L.connect();let P=()=>{if(!v)throw new I({errorKey:"toolbox_ripple_signer_not_found"});return v.getAddress()},N=async(q)=>{let z=q||await P();try{await L.connect();let J=(await L.request({command:"account_info",account:z})).result.account_data.Balance;return[R.from({chain:G.Ripple,value:J,fromBaseDecimal:$[G.Ripple]})]}catch(j){if(j.data.error_code===19)return[R.from({chain:G.Ripple,value:0})];throw new I("toolbox_ripple_get_balance_error",{info:{address:z,error:j}})}},O=async()=>{let z=(await L.request({command:"fee"})).result.drops.open_ledger_fee;return R.from({chain:G.Ripple,value:f.fromBigInt(BigInt(z),$[G.Ripple])})},X=async({assetValue:q,recipient:z,memo:j,sender:J})=>{if(!v)throw new I({errorKey:"toolbox_ripple_signer_not_found"});if(!F(z))throw new I({errorKey:"core_transaction_invalid_recipient_address"});let Q=J||await P();if(!q.isGasAsset||q.chain!==G.Ripple)throw new I({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:q.toString()}});let _={TransactionType:"Payment",Account:Q,Amount:b(q.getValue("string")),Destination:z};if(j)_.Memos=[{Memo:{MemoData:Buffer.from(j).toString("hex")}}];return await L.autofill(_)},Y=(q)=>{if(!v)throw new I({errorKey:"toolbox_ripple_signer_not_found"});return v.signTransaction(q)},Z=async(q)=>{let j=(await L.submitAndWait(q)).result;if(j.engine_result==="tesSUCCESS"||j.engine_result==="terQUEUED")return j.tx_json?.hash||j.hash;let J=j.engine_result_message||"Unknown error",Q=j.engine_result||"Unknown code";throw new I({errorKey:"toolbox_ripple_broadcast_error",info:{chain:G.Ripple,message:J,code:Q,result:j}})};return{signer:v,createSigner:k,getAddress:P,validateAddress:F,getBalance:N,createTransaction:X,signTransaction:Y,broadcastTransaction:Z,transfer:async(q)=>{if(!v)throw new I({errorKey:"toolbox_ripple_signer_not_found"});let z=await v.getAddress(),j=await X({...q,sender:z}),J=await Y(j);return Z(J.tx_blob)},estimateTransactionFee:O}};export{F as rippleValidateAddress,K as getRippleToolbox};
2
-
3
- //# debugId=56E2ABE0A5F4DFCC64756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/ripple/index.ts"],
4
- "sourcesContent": [
5
- "import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type GenericCreateTransactionParams,\n type GenericTransferParams,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\nimport type { Transaction } from \"xrpl\";\nimport { Client, type Payment, Wallet, isValidAddress, xrpToDrops } from \"xrpl\";\n\nexport type RippleWallet = Awaited<ReturnType<typeof getRippleToolbox>>;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase: string }\n | { signer: ChainSigner<Transaction, { tx_blob: string; hash: string }> }\n | {};\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = SKConfig.get(\"rpcUrls\")[Chain.Ripple];\n if (!rpcUrl) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_rpc_not_configured\",\n info: { chain: Chain.Ripple },\n });\n }\n\n const client = new Client(rpcUrl);\n await client.connect();\n\n const getAddress = () => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.getAddress();\n };\n\n const getBalance = async (address?: string) => {\n const addr = address || (await getAddress());\n\n try {\n await client.connect();\n const accountInfo = await client.request({\n command: \"account_info\",\n account: addr,\n });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: balance,\n fromBaseDecimal: BaseDecimal[Chain.Ripple],\n }),\n ];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === 19) {\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: 0,\n }),\n ];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", {\n info: { address: addr, error },\n });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n return AssetValue.from({\n chain: Chain.Ripple,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), BaseDecimal[Chain.Ripple]),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: Omit<GenericCreateTransactionParams, \"feeRate\">) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n TransactionType: \"Payment\",\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n // Cast result to any to bypass potential type mismatches in xrpl.js definitions\n const result: any = submitResult.result;\n\n // Check engine_result directly on result\n if (result.engine_result === \"tesSUCCESS\" || result.engine_result === \"terQUEUED\") {\n // Access hash from tx_json if available, otherwise fallback to result.hash\n return result.tx_json?.hash || result.hash;\n }\n\n const message = result.engine_result_message || \"Unknown error\";\n const code = result.engine_result || \"Unknown code\";\n\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_broadcast_error\",\n info: { chain: Chain.Ripple, message, code, result },\n // Remove explicit message when using object format\n });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n // Disconnect client on demand or handle elsewhere?\n // For now, let's assume connection is managed outside or persists.\n // const disconnect = () => client.disconnect();\n\n return {\n // Signer related\n signer, // Expose the signer instance if created/provided\n createSigner, // Expose the helper\n // Core methods\n getAddress,\n validateAddress: rippleValidateAddress,\n getBalance,\n createTransaction,\n signTransaction,\n broadcastTransaction,\n transfer,\n estimateTransactionFee,\n // disconnect, // Optional: expose disconnect\n };\n};\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "56E2ABE0A5F4DFCC64756E2164756E21",
9
- "names": []
10
- }
@@ -1,3 +0,0 @@
1
- var I={};v(I,{getSolanaToolbox:()=>J,getSolanaAddressValidator:()=>j,createKeysForPath:()=>W});module.exports=$(I);var p=require("@swapkit/helpers"),M=require("ts-pattern"),B=require("ts-pattern");async function j(){let{PublicKey:a}=await import("@solana/web3.js");return(T)=>{try{let l=new a(T);return a.isOnCurve(l.toBytes())}catch(l){return!1}}}async function J(a){let T=a&&"index"in a?a.index||0:0,l=p.derivationPathToString(a&&"derivationPath"in a&&a.derivationPath?a.derivationPath:p.updateDerivationPath(p.NetworkDerivationPath[p.Chain.Solana],{index:T})),o=await B.match(a).with({phrase:M.P.string},({phrase:y})=>W({phrase:y,derivationPath:l})).with({signer:M.P.any},({signer:y})=>y).otherwise(()=>{return});function P(){return o?.publicKey?d(o.publicKey):""}return{getConnection:h,getAddress:P,createKeysForPath:W,getAddressFromPubKey:d,getPubkeyFromAddress:A,createTransaction:u(h),createTransactionFromInstructions:Y,getBalance:z(p.Chain.Solana),transfer:Z(h,o),broadcastTransaction:E(h),getAddressValidator:j,signTransaction:_(h,o),estimateTransactionFee:N(h)}}function N(a){return async({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:P,sender:y})=>{let S=await a(),b=(await u(a)({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:P,sender:y})).compileMessage(),m=await S.getFeeForMessage(b);if(m.value===null)throw new p.SwapKitError("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");return p.AssetValue.from({chain:p.Chain.Solana,value:m.value,fromBaseDecimal:p.BaseDecimal[p.Chain.Solana]})}}async function h(){let{Connection:a}=await import("@solana/web3.js");return new a(p.SKConfig.get("rpcUrls").SOL,"confirmed")}function Q(a){return async({assetValue:T,recipient:l,sender:o,isProgramDerivedAddress:P})=>{let y=await a(),S=await A(o);if(T.isGasAsset){let{Transaction:x,SystemProgram:b,PublicKey:m}=await import("@solana/web3.js");return new x().add(b.transfer({fromPubkey:S,lamports:T.getBaseValue("number"),toPubkey:new m(l)}))}if(T.address)return X({amount:T.getBaseValue("number"),connection:y,decimals:T.decimal,from:S,recipient:l,tokenAddress:T.address,isProgramDerivedAddress:P});return}}async function X({tokenAddress:a,recipient:T,from:l,connection:o,amount:P,decimals:y,isProgramDerivedAddress:S}){let{getAssociatedTokenAddress:x,getAccount:b,createAssociatedTokenAccountInstruction:m,createTransferCheckedInstruction:O}=await import("@solana/spl-token"),{Transaction:w,PublicKey:L}=await import("@solana/web3.js"),G=new w,R=new L(a),F=await x(R,l),U=new L(T),q=await x(R,U,S),V=!1;try{await b(o,q),V=!0}catch(H){}if(!V)G.add(m(l,q,U,R));return G.add(O(F,R,q,l,P,y)),G}function u(a){return async({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:P,sender:y})=>{let{createMemoInstruction:S}=await import("@solana/spl-memo"),x=await A(y),b=await j();if(!(P||b(T)))throw new p.SwapKitError("core_transaction_invalid_recipient_address");let m=await a(),O=await Q(a)({assetValue:l,recipient:T,sender:y,isProgramDerivedAddress:P});if(!O)throw new p.SwapKitError("core_transaction_invalid_sender_address");if(o)O.add(S(o));let w=await m.getLatestBlockhash();return O.recentBlockhash=w.blockhash,O.feePayer=x,O}}async function Y({instructions:a}){let{Transaction:T}=await import("@solana/web3.js"),l=new T().add(...a);if(!l)throw new p.SwapKitError("core_transaction_invalid_sender_address");return l}function Z(a,T){return async({recipient:l,assetValue:o,memo:P,isProgramDerivedAddress:y})=>{if(!T)throw new p.SwapKitError("core_transaction_invalid_sender_address");let S=T.publicKey?.toString()??(await T.connect()).publicKey.toString(),x=await u(a)({recipient:l,assetValue:o,memo:P,isProgramDerivedAddress:y,sender:S});if("connect"in T){let b=await T.signTransaction(x);return E(a)(b)}return x.sign(T),E(a)(x)}}function E(a){return async(T)=>{return(await a()).sendRawTransaction(T.serialize())}}function _(a,T){return async(l)=>{let{VersionedTransaction:o}=await import("@solana/web3.js");if(!T)throw new p.SwapKitError("toolbox_solana_no_signer");if(!(l instanceof o)){let y=await(await a()).getLatestBlockhash();l.recentBlockhash=y.blockhash,l.feePayer=T.publicKey||void 0}if("connect"in T)return await T.signTransaction(l);return await l.sign([T]),l}}async function W({phrase:a,derivationPath:T=p.DerivationPath.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:o}=await import("@scure/bip39"),{Keypair:P}=await import("@solana/web3.js"),y=o(a),S=l.fromMasterSeed(y);return P.fromSeed(S.derive(T,!0).privateKey)}function d(a){return a.toString()}async function A(a){let{PublicKey:T}=await import("@solana/web3.js");return new T(a)}
2
-
3
- //# debugId=10DF173C02A9BC6564756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/solana/toolbox.ts"],
4
- "sourcesContent": [
5
- "import type {\n Connection,\n PublicKey,\n Signer,\n Transaction,\n TransactionInstruction,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n AssetValue,\n BaseDecimal,\n Chain,\n DerivationPath,\n type DerivationPathArray,\n type GenericCreateTransactionParams,\n NetworkDerivationPath,\n SKConfig,\n SwapKitError,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { P } from \"ts-pattern\";\nimport { match } from \"ts-pattern\";\nimport type { SolanaCreateTransactionParams, SolanaProvider, SolanaTransferParams } from \".\";\nimport { getBalance } from \"../utils\";\n\ntype SolanaSigner = SolanaProvider | Signer;\n\nexport async function getSolanaAddressValidator() {\n const { PublicKey } = await import(\"@solana/web3.js\");\n\n return (address: string) => {\n try {\n const pubkey = new PublicKey(address);\n return PublicKey.isOnCurve(pubkey.toBytes());\n } catch (_) {\n return false;\n }\n };\n}\n\nexport async function getSolanaToolbox(\n toolboxParams?:\n | { signer?: SolanaSigner }\n | { phrase?: string; index?: number; derivationPath?: DerivationPathArray },\n) {\n const index = toolboxParams && \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n const derivationPath = derivationPathToString(\n toolboxParams && \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Solana], { index }),\n );\n\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, ({ phrase }) => createKeysForPath({ phrase, derivationPath }))\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n function getAddress() {\n return signer?.publicKey ? getAddressFromPubKey(signer.publicKey) : \"\";\n }\n\n return {\n getConnection,\n getAddress,\n createKeysForPath,\n getAddressFromPubKey,\n getPubkeyFromAddress,\n createTransaction: createTransaction(getConnection),\n createTransactionFromInstructions,\n getBalance: getBalance(Chain.Solana),\n transfer: transfer(getConnection, signer),\n broadcastTransaction: broadcastTransaction(getConnection),\n getAddressValidator: getSolanaAddressValidator,\n signTransaction: signTransaction(getConnection, signer),\n estimateTransactionFee: estimateTransactionFee(getConnection),\n };\n}\n\nfunction estimateTransactionFee(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n }: Omit<GenericCreateTransactionParams, \"feeRate\"> & {\n isProgramDerivedAddress?: boolean;\n }) => {\n const connection = await getConnection();\n\n const transaction = await createTransaction(getConnection)({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n });\n\n const message = transaction.compileMessage();\n const feeInLamports = await connection.getFeeForMessage(message);\n\n if (feeInLamports.value === null) {\n throw new SwapKitError(\n \"toolbox_solana_fee_estimation_failed\",\n \"Could not estimate Solana fee.\",\n );\n }\n\n return AssetValue.from({\n chain: Chain.Solana,\n value: feeInLamports.value,\n fromBaseDecimal: BaseDecimal[Chain.Solana],\n });\n };\n}\n\nasync function getConnection() {\n const { Connection } = await import(\"@solana/web3.js\");\n return new Connection(SKConfig.get(\"rpcUrls\").SOL, \"confirmed\");\n}\n\nfunction createAssetTransaction(getConnection: () => Promise<Connection>) {\n return async ({\n assetValue,\n recipient,\n sender,\n isProgramDerivedAddress,\n }: SolanaCreateTransactionParams) => {\n const connection = await getConnection();\n const fromPubkey = await getPubkeyFromAddress(sender);\n\n if (assetValue.isGasAsset) {\n const { Transaction, SystemProgram, PublicKey } = await import(\"@solana/web3.js\");\n\n return new Transaction().add(\n SystemProgram.transfer({\n fromPubkey: fromPubkey,\n lamports: assetValue.getBaseValue(\"number\"),\n toPubkey: new PublicKey(recipient),\n }),\n );\n }\n if (assetValue.address) {\n return createSolanaTokenTransaction({\n amount: assetValue.getBaseValue(\"number\"),\n connection,\n decimals: assetValue.decimal as number,\n from: fromPubkey,\n recipient,\n tokenAddress: assetValue.address,\n isProgramDerivedAddress,\n });\n }\n\n return undefined;\n };\n}\n\nasync function createSolanaTokenTransaction({\n tokenAddress,\n recipient,\n from,\n connection,\n amount,\n decimals,\n isProgramDerivedAddress,\n}: {\n tokenAddress: string;\n recipient: string;\n from: PublicKey;\n connection: Connection;\n amount: number;\n decimals: number;\n isProgramDerivedAddress?: boolean;\n}) {\n const {\n getAssociatedTokenAddress,\n getAccount,\n createAssociatedTokenAccountInstruction,\n createTransferCheckedInstruction,\n } = await import(\"@solana/spl-token\");\n const { Transaction, PublicKey } = await import(\"@solana/web3.js\");\n\n const transaction = new Transaction();\n const tokenPublicKey = new PublicKey(tokenAddress);\n const fromSPLAddress = await getAssociatedTokenAddress(tokenPublicKey, from);\n\n const recipientPublicKey = new PublicKey(recipient);\n const recipientSPLAddress = await getAssociatedTokenAddress(\n tokenPublicKey,\n recipientPublicKey,\n isProgramDerivedAddress,\n );\n\n let recipientAccountExists = false;\n try {\n await getAccount(connection, recipientSPLAddress);\n recipientAccountExists = true;\n } catch (_) {\n // Recipient's associated token account doesn't exist\n }\n\n if (!recipientAccountExists) {\n transaction.add(\n createAssociatedTokenAccountInstruction(\n from,\n recipientSPLAddress,\n recipientPublicKey,\n tokenPublicKey,\n ),\n );\n }\n\n transaction.add(\n createTransferCheckedInstruction(\n fromSPLAddress,\n tokenPublicKey,\n recipientSPLAddress,\n from,\n amount,\n decimals,\n ),\n );\n\n return transaction;\n}\n\nfunction createTransaction(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n }: SolanaCreateTransactionParams) => {\n const { createMemoInstruction } = await import(\"@solana/spl-memo\");\n\n const fromPubkey = await getPubkeyFromAddress(sender);\n const validateAddress = await getSolanaAddressValidator();\n\n if (!(isProgramDerivedAddress || validateAddress(recipient))) {\n throw new SwapKitError(\"core_transaction_invalid_recipient_address\");\n }\n\n const connection = await getConnection();\n const transaction = await createAssetTransaction(getConnection)({\n assetValue,\n recipient,\n sender,\n isProgramDerivedAddress,\n });\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n if (memo) transaction.add(createMemoInstruction(memo));\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = fromPubkey;\n\n return transaction;\n };\n}\n\nasync function createTransactionFromInstructions({\n instructions,\n}: { instructions: TransactionInstruction[]; isProgramDerivedAddress?: boolean }) {\n const { Transaction } = await import(\"@solana/web3.js\");\n const transaction = new Transaction().add(...instructions);\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n return transaction;\n}\n\nfunction transfer(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async ({ recipient, assetValue, memo, isProgramDerivedAddress }: SolanaTransferParams) => {\n if (!signer) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n const sender =\n signer.publicKey?.toString() ??\n (await (signer as SolanaProvider).connect()).publicKey.toString();\n\n const transaction = await createTransaction(getConnection)({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n });\n\n if (\"connect\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return broadcastTransaction(getConnection)(signedTransaction);\n }\n\n transaction.sign(signer);\n\n return broadcastTransaction(getConnection)(transaction);\n };\n}\n\nfunction broadcastTransaction(getConnection: () => Promise<Connection>) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const connection = await getConnection();\n return connection.sendRawTransaction(transaction.serialize());\n };\n}\n\nfunction signTransaction(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const { VersionedTransaction } = await import(\"@solana/web3.js\");\n if (!signer) {\n throw new SwapKitError(\"toolbox_solana_no_signer\");\n }\n\n if (!(transaction instanceof VersionedTransaction)) {\n const connection = await getConnection();\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = signer.publicKey || undefined;\n }\n\n if (\"connect\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return signedTransaction;\n }\n\n await transaction.sign([signer] as Signer & Signer[]);\n return transaction;\n };\n}\n\nexport async function createKeysForPath({\n phrase,\n derivationPath = DerivationPath.SOL,\n}: { phrase: string; derivationPath?: string }) {\n const { HDKey } = await import(\"micro-key-producer/slip10.js\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n const { Keypair } = await import(\"@solana/web3.js\");\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n\n return Keypair.fromSeed(hdKey.derive(derivationPath, true).privateKey);\n}\n\nfunction getAddressFromPubKey(publicKey: PublicKey) {\n return publicKey.toString();\n}\n\nasync function getPubkeyFromAddress(address: string) {\n const { PublicKey } = await import(\"@solana/web3.js\");\n return new PublicKey(address);\n}\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "10DF173C02A9BC6564756E2164756E21",
9
- "names": []
10
- }
@@ -1,3 +0,0 @@
1
- import{b as B}from"../chunk-0h4xdrwz.js";import{c as S,d as f}from"../chunk-p1kdg37m.js";import{AssetValue as N,BaseDecimal as Q,Chain as G,DerivationPath as X,NetworkDerivationPath as Y,SKConfig as Z,SwapKitError as R,derivationPathToString as _,updateDerivationPath as $}from"@swapkit/helpers";import{P as V}from"ts-pattern";import{match as v}from"ts-pattern";async function F(){let{PublicKey:a}=await import("@solana/web3.js");return(T)=>{try{let l=new a(T);return a.isOnCurve(l.toBytes())}catch(l){return!1}}}async function g(a){let T=a&&"index"in a?a.index||0:0,l=_(a&&"derivationPath"in a&&a.derivationPath?a.derivationPath:$(Y[G.Solana],{index:T})),p=await v(a).with({phrase:V.string},({phrase:o})=>d({phrase:o,derivationPath:l})).with({signer:V.any},({signer:o})=>o).otherwise(()=>{return});function y(){return p?.publicKey?z(p.publicKey):""}return{getConnection:h,getAddress:y,createKeysForPath:d,getAddressFromPubKey:z,getPubkeyFromAddress:u,createTransaction:j(h),createTransactionFromInstructions:D,getBalance:B(G.Solana),transfer:k(h,p),broadcastTransaction:W(h),getAddressValidator:F,signTransaction:s(h,p),estimateTransactionFee:I(h)}}function I(a){return async({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:y,sender:o})=>{let P=await a(),b=(await j(a)({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:y,sender:o})).compileMessage(),m=await P.getFeeForMessage(b);if(m.value===null)throw new R("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");return N.from({chain:G.Solana,value:m.value,fromBaseDecimal:Q[G.Solana]})}}async function h(){let{Connection:a}=await import("@solana/web3.js");return new a(Z.get("rpcUrls").SOL,"confirmed")}function H(a){return async({assetValue:T,recipient:l,sender:p,isProgramDerivedAddress:y})=>{let o=await a(),P=await u(p);if(T.isGasAsset){let{Transaction:x,SystemProgram:b,PublicKey:m}=await import("@solana/web3.js");return new x().add(b.transfer({fromPubkey:P,lamports:T.getBaseValue("number"),toPubkey:new m(l)}))}if(T.address)return K({amount:T.getBaseValue("number"),connection:o,decimals:T.decimal,from:P,recipient:l,tokenAddress:T.address,isProgramDerivedAddress:y});return}}async function K({tokenAddress:a,recipient:T,from:l,connection:p,amount:y,decimals:o,isProgramDerivedAddress:P}){let{getAssociatedTokenAddress:x,getAccount:b,createAssociatedTokenAccountInstruction:m,createTransferCheckedInstruction:O}=await import("@solana/spl-token"),{Transaction:q,PublicKey:A}=await import("@solana/web3.js"),M=new q,w=new A(a),J=await x(w,l),L=new A(T),E=await x(w,L,P),U=!1;try{await b(p,E),U=!0}catch(C){}if(!U)M.add(m(l,E,L,w));return M.add(O(J,w,E,l,y,o)),M}function j(a){return async({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:y,sender:o})=>{let{createMemoInstruction:P}=await import("@solana/spl-memo"),x=await u(o),b=await F();if(!(y||b(T)))throw new R("core_transaction_invalid_recipient_address");let m=await a(),O=await H(a)({assetValue:l,recipient:T,sender:o,isProgramDerivedAddress:y});if(!O)throw new R("core_transaction_invalid_sender_address");if(p)O.add(P(p));let q=await m.getLatestBlockhash();return O.recentBlockhash=q.blockhash,O.feePayer=x,O}}async function D({instructions:a}){let{Transaction:T}=await import("@solana/web3.js"),l=new T().add(...a);if(!l)throw new R("core_transaction_invalid_sender_address");return l}function k(a,T){return async({recipient:l,assetValue:p,memo:y,isProgramDerivedAddress:o})=>{if(!T)throw new R("core_transaction_invalid_sender_address");let P=T.publicKey?.toString()??(await T.connect()).publicKey.toString(),x=await j(a)({recipient:l,assetValue:p,memo:y,isProgramDerivedAddress:o,sender:P});if("connect"in T){let b=await T.signTransaction(x);return W(a)(b)}return x.sign(T),W(a)(x)}}function W(a){return async(T)=>{return(await a()).sendRawTransaction(T.serialize())}}function s(a,T){return async(l)=>{let{VersionedTransaction:p}=await import("@solana/web3.js");if(!T)throw new R("toolbox_solana_no_signer");if(!(l instanceof p)){let o=await(await a()).getLatestBlockhash();l.recentBlockhash=o.blockhash,l.feePayer=T.publicKey||void 0}if("connect"in T)return await T.signTransaction(l);return await l.sign([T]),l}}async function d({phrase:a,derivationPath:T=X.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:p}=await import("@scure/bip39"),{Keypair:y}=await import("@solana/web3.js"),o=p(a),P=l.fromMasterSeed(o);return y.fromSeed(P.derive(T,!0).privateKey)}function z(a){return a.toString()}async function u(a){let{PublicKey:T}=await import("@solana/web3.js");return new T(a)}export{g as getSolanaToolbox,F as getSolanaAddressValidator,d as createKeysForPath};
2
-
3
- //# debugId=96EDFBAA436A5BDE64756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/solana/toolbox.ts"],
4
- "sourcesContent": [
5
- "import type {\n Connection,\n PublicKey,\n Signer,\n Transaction,\n TransactionInstruction,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n AssetValue,\n BaseDecimal,\n Chain,\n DerivationPath,\n type DerivationPathArray,\n type GenericCreateTransactionParams,\n NetworkDerivationPath,\n SKConfig,\n SwapKitError,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { P } from \"ts-pattern\";\nimport { match } from \"ts-pattern\";\nimport type { SolanaCreateTransactionParams, SolanaProvider, SolanaTransferParams } from \".\";\nimport { getBalance } from \"../utils\";\n\ntype SolanaSigner = SolanaProvider | Signer;\n\nexport async function getSolanaAddressValidator() {\n const { PublicKey } = await import(\"@solana/web3.js\");\n\n return (address: string) => {\n try {\n const pubkey = new PublicKey(address);\n return PublicKey.isOnCurve(pubkey.toBytes());\n } catch (_) {\n return false;\n }\n };\n}\n\nexport async function getSolanaToolbox(\n toolboxParams?:\n | { signer?: SolanaSigner }\n | { phrase?: string; index?: number; derivationPath?: DerivationPathArray },\n) {\n const index = toolboxParams && \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n const derivationPath = derivationPathToString(\n toolboxParams && \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Solana], { index }),\n );\n\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, ({ phrase }) => createKeysForPath({ phrase, derivationPath }))\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n function getAddress() {\n return signer?.publicKey ? getAddressFromPubKey(signer.publicKey) : \"\";\n }\n\n return {\n getConnection,\n getAddress,\n createKeysForPath,\n getAddressFromPubKey,\n getPubkeyFromAddress,\n createTransaction: createTransaction(getConnection),\n createTransactionFromInstructions,\n getBalance: getBalance(Chain.Solana),\n transfer: transfer(getConnection, signer),\n broadcastTransaction: broadcastTransaction(getConnection),\n getAddressValidator: getSolanaAddressValidator,\n signTransaction: signTransaction(getConnection, signer),\n estimateTransactionFee: estimateTransactionFee(getConnection),\n };\n}\n\nfunction estimateTransactionFee(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n }: Omit<GenericCreateTransactionParams, \"feeRate\"> & {\n isProgramDerivedAddress?: boolean;\n }) => {\n const connection = await getConnection();\n\n const transaction = await createTransaction(getConnection)({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n });\n\n const message = transaction.compileMessage();\n const feeInLamports = await connection.getFeeForMessage(message);\n\n if (feeInLamports.value === null) {\n throw new SwapKitError(\n \"toolbox_solana_fee_estimation_failed\",\n \"Could not estimate Solana fee.\",\n );\n }\n\n return AssetValue.from({\n chain: Chain.Solana,\n value: feeInLamports.value,\n fromBaseDecimal: BaseDecimal[Chain.Solana],\n });\n };\n}\n\nasync function getConnection() {\n const { Connection } = await import(\"@solana/web3.js\");\n return new Connection(SKConfig.get(\"rpcUrls\").SOL, \"confirmed\");\n}\n\nfunction createAssetTransaction(getConnection: () => Promise<Connection>) {\n return async ({\n assetValue,\n recipient,\n sender,\n isProgramDerivedAddress,\n }: SolanaCreateTransactionParams) => {\n const connection = await getConnection();\n const fromPubkey = await getPubkeyFromAddress(sender);\n\n if (assetValue.isGasAsset) {\n const { Transaction, SystemProgram, PublicKey } = await import(\"@solana/web3.js\");\n\n return new Transaction().add(\n SystemProgram.transfer({\n fromPubkey: fromPubkey,\n lamports: assetValue.getBaseValue(\"number\"),\n toPubkey: new PublicKey(recipient),\n }),\n );\n }\n if (assetValue.address) {\n return createSolanaTokenTransaction({\n amount: assetValue.getBaseValue(\"number\"),\n connection,\n decimals: assetValue.decimal as number,\n from: fromPubkey,\n recipient,\n tokenAddress: assetValue.address,\n isProgramDerivedAddress,\n });\n }\n\n return undefined;\n };\n}\n\nasync function createSolanaTokenTransaction({\n tokenAddress,\n recipient,\n from,\n connection,\n amount,\n decimals,\n isProgramDerivedAddress,\n}: {\n tokenAddress: string;\n recipient: string;\n from: PublicKey;\n connection: Connection;\n amount: number;\n decimals: number;\n isProgramDerivedAddress?: boolean;\n}) {\n const {\n getAssociatedTokenAddress,\n getAccount,\n createAssociatedTokenAccountInstruction,\n createTransferCheckedInstruction,\n } = await import(\"@solana/spl-token\");\n const { Transaction, PublicKey } = await import(\"@solana/web3.js\");\n\n const transaction = new Transaction();\n const tokenPublicKey = new PublicKey(tokenAddress);\n const fromSPLAddress = await getAssociatedTokenAddress(tokenPublicKey, from);\n\n const recipientPublicKey = new PublicKey(recipient);\n const recipientSPLAddress = await getAssociatedTokenAddress(\n tokenPublicKey,\n recipientPublicKey,\n isProgramDerivedAddress,\n );\n\n let recipientAccountExists = false;\n try {\n await getAccount(connection, recipientSPLAddress);\n recipientAccountExists = true;\n } catch (_) {\n // Recipient's associated token account doesn't exist\n }\n\n if (!recipientAccountExists) {\n transaction.add(\n createAssociatedTokenAccountInstruction(\n from,\n recipientSPLAddress,\n recipientPublicKey,\n tokenPublicKey,\n ),\n );\n }\n\n transaction.add(\n createTransferCheckedInstruction(\n fromSPLAddress,\n tokenPublicKey,\n recipientSPLAddress,\n from,\n amount,\n decimals,\n ),\n );\n\n return transaction;\n}\n\nfunction createTransaction(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n }: SolanaCreateTransactionParams) => {\n const { createMemoInstruction } = await import(\"@solana/spl-memo\");\n\n const fromPubkey = await getPubkeyFromAddress(sender);\n const validateAddress = await getSolanaAddressValidator();\n\n if (!(isProgramDerivedAddress || validateAddress(recipient))) {\n throw new SwapKitError(\"core_transaction_invalid_recipient_address\");\n }\n\n const connection = await getConnection();\n const transaction = await createAssetTransaction(getConnection)({\n assetValue,\n recipient,\n sender,\n isProgramDerivedAddress,\n });\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n if (memo) transaction.add(createMemoInstruction(memo));\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = fromPubkey;\n\n return transaction;\n };\n}\n\nasync function createTransactionFromInstructions({\n instructions,\n}: { instructions: TransactionInstruction[]; isProgramDerivedAddress?: boolean }) {\n const { Transaction } = await import(\"@solana/web3.js\");\n const transaction = new Transaction().add(...instructions);\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n return transaction;\n}\n\nfunction transfer(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async ({ recipient, assetValue, memo, isProgramDerivedAddress }: SolanaTransferParams) => {\n if (!signer) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n const sender =\n signer.publicKey?.toString() ??\n (await (signer as SolanaProvider).connect()).publicKey.toString();\n\n const transaction = await createTransaction(getConnection)({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n });\n\n if (\"connect\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return broadcastTransaction(getConnection)(signedTransaction);\n }\n\n transaction.sign(signer);\n\n return broadcastTransaction(getConnection)(transaction);\n };\n}\n\nfunction broadcastTransaction(getConnection: () => Promise<Connection>) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const connection = await getConnection();\n return connection.sendRawTransaction(transaction.serialize());\n };\n}\n\nfunction signTransaction(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const { VersionedTransaction } = await import(\"@solana/web3.js\");\n if (!signer) {\n throw new SwapKitError(\"toolbox_solana_no_signer\");\n }\n\n if (!(transaction instanceof VersionedTransaction)) {\n const connection = await getConnection();\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = signer.publicKey || undefined;\n }\n\n if (\"connect\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return signedTransaction;\n }\n\n await transaction.sign([signer] as Signer & Signer[]);\n return transaction;\n };\n}\n\nexport async function createKeysForPath({\n phrase,\n derivationPath = DerivationPath.SOL,\n}: { phrase: string; derivationPath?: string }) {\n const { HDKey } = await import(\"micro-key-producer/slip10.js\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n const { Keypair } = await import(\"@solana/web3.js\");\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n\n return Keypair.fromSeed(hdKey.derive(derivationPath, true).privateKey);\n}\n\nfunction getAddressFromPubKey(publicKey: PublicKey) {\n return publicKey.toString();\n}\n\nasync function getPubkeyFromAddress(address: string) {\n const { PublicKey } = await import(\"@solana/web3.js\");\n return new PublicKey(address);\n}\n"
6
- ],
7
- "mappings": "8FAQA,gBACE,iBACA,WACA,oBACA,2BAGA,cACA,kBACA,4BACA,0BACA,yBAEF,YAAS,mBACT,gBAAS,mBAMT,eAAsB,CAAyB,EAAG,CAChD,IAAQ,aAAc,KAAa,2BAEnC,MAAO,CAAC,IAAoB,CAC1B,GAAI,CACF,IAAM,EAAS,IAAI,EAAU,CAAO,EACpC,OAAO,EAAU,UAAU,EAAO,QAAQ,CAAC,EAC3C,MAAO,EAAG,CACV,MAAO,KAKb,eAAsB,CAAgB,CACpC,EAGA,CACA,IAAM,EAAQ,GAAiB,UAAW,EAAgB,EAAc,OAAS,EAAI,EAC/E,EAAiB,EACrB,GAAiB,mBAAoB,GAAiB,EAAc,eAChE,EAAc,eACd,EAAqB,EAAsB,EAAM,QAAS,CAAE,OAAM,CAAC,CACzE,EAEM,EAAS,MAAM,EAAM,CAAa,EACrC,KAAK,CAAE,OAAQ,EAAE,MAAO,EAAG,EAAG,YAAa,EAAkB,CAAE,SAAQ,gBAAe,CAAC,CAAC,EACxF,KAAK,CAAE,OAAQ,EAAE,GAAI,EAAG,EAAG,YAAa,CAAM,EAC9C,UAAU,IAAG,CAAG,OAAS,EAE5B,SAAS,CAAU,EAAG,CACpB,OAAO,GAAQ,UAAY,EAAqB,EAAO,SAAS,EAAI,GAGtE,MAAO,CACL,gBACA,aACA,oBACA,uBACA,uBACA,kBAAmB,EAAkB,CAAa,EAClD,oCACA,WAAY,EAAW,EAAM,MAAM,EACnC,SAAU,EAAS,EAAe,CAAM,EACxC,qBAAsB,EAAqB,CAAa,EACxD,oBAAqB,EACrB,gBAAiB,EAAgB,EAAe,CAAM,EACtD,uBAAwB,EAAuB,CAAa,CAC9D,EAGF,SAAS,CAAsB,CAAC,EAA0C,CACxE,MAAO,QACL,YACA,aACA,OACA,0BACA,YAGI,CACJ,IAAM,EAAa,MAAM,EAAc,EAUjC,GARc,MAAM,EAAkB,CAAa,EAAE,CACzD,YACA,aACA,OACA,0BACA,QACF,CAAC,GAE2B,eAAe,EACrC,EAAgB,MAAM,EAAW,iBAAiB,CAAO,EAE/D,GAAI,EAAc,QAAU,KAC1B,MAAM,IAAI,EACR,uCACA,gCACF,EAGF,OAAO,EAAW,KAAK,CACrB,MAAO,EAAM,OACb,MAAO,EAAc,MACrB,gBAAiB,EAAY,EAAM,OACrC,CAAC,GAIL,eAAe,CAAa,EAAG,CAC7B,IAAQ,cAAe,KAAa,2BACpC,OAAO,IAAI,EAAW,EAAS,IAAI,SAAS,EAAE,IAAK,WAAW,EAGhE,SAAS,CAAsB,CAAC,EAA0C,CACxE,MAAO,QACL,aACA,YACA,SACA,6BACmC,CACnC,IAAM,EAAa,MAAM,EAAc,EACjC,EAAa,MAAM,EAAqB,CAAM,EAEpD,GAAI,EAAW,WAAY,CACzB,IAAQ,cAAa,gBAAe,aAAc,KAAa,2BAE/D,OAAO,IAAI,EAAY,EAAE,IACvB,EAAc,SAAS,CACrB,WAAY,EACZ,SAAU,EAAW,aAAa,QAAQ,EAC1C,SAAU,IAAI,EAAU,CAAS,CACnC,CAAC,CACH,EAEF,GAAI,EAAW,QACb,OAAO,EAA6B,CAClC,OAAQ,EAAW,aAAa,QAAQ,EACxC,aACA,SAAU,EAAW,QACrB,KAAM,EACN,YACA,aAAc,EAAW,QACzB,yBACF,CAAC,EAGH,QAIJ,eAAe,CAA4B,EACzC,eACA,YACA,OACA,aACA,SACA,WACA,2BASC,CACD,IACE,4BACA,aACA,0CACA,oCACE,KAAa,8BACT,cAAa,aAAc,KAAa,2BAE1C,EAAc,IAAI,EAClB,EAAiB,IAAI,EAAU,CAAY,EAC3C,EAAiB,MAAM,EAA0B,EAAgB,CAAI,EAErE,EAAqB,IAAI,EAAU,CAAS,EAC5C,EAAsB,MAAM,EAChC,EACA,EACA,CACF,EAEI,EAAyB,GAC7B,GAAI,CACF,MAAM,EAAW,EAAY,CAAmB,EAChD,EAAyB,GACzB,MAAO,EAAG,EAIZ,IAAK,EACH,EAAY,IACV,EACE,EACA,EACA,EACA,CACF,CACF,EAcF,OAXA,EAAY,IACV,EACE,EACA,EACA,EACA,EACA,EACA,CACF,CACF,EAEO,EAGT,SAAS,CAAiB,CAAC,EAA0C,CACnE,MAAO,QACL,YACA,aACA,OACA,0BACA,YACmC,CACnC,IAAQ,yBAA0B,KAAa,4BAEzC,EAAa,MAAM,EAAqB,CAAM,EAC9C,EAAkB,MAAM,EAA0B,EAExD,KAAM,GAA2B,EAAgB,CAAS,GACxD,MAAM,IAAI,EAAa,4CAA4C,EAGrE,IAAM,EAAa,MAAM,EAAc,EACjC,EAAc,MAAM,EAAuB,CAAa,EAAE,CAC9D,aACA,YACA,SACA,yBACF,CAAC,EAED,IAAK,EACH,MAAM,IAAI,EAAa,yCAAyC,EAGlE,GAAI,EAAM,EAAY,IAAI,EAAsB,CAAI,CAAC,EAErD,IAAM,EAAY,MAAM,EAAW,mBAAmB,EAItD,OAHA,EAAY,gBAAkB,EAAU,UACxC,EAAY,SAAW,EAEhB,GAIX,eAAe,CAAiC,EAC9C,gBACgF,CAChF,IAAQ,eAAgB,KAAa,2BAC/B,EAAc,IAAI,EAAY,EAAE,IAAI,GAAG,CAAY,EAEzD,IAAK,EACH,MAAM,IAAI,EAAa,yCAAyC,EAGlE,OAAO,EAGT,SAAS,CAAQ,CAAC,EAA0C,EAAuB,CACjF,MAAO,QAAS,YAAW,aAAY,OAAM,6BAAoD,CAC/F,IAAK,EACH,MAAM,IAAI,EAAa,yCAAyC,EAGlE,IAAM,EACJ,EAAO,WAAW,SAAS,IAC1B,MAAO,EAA0B,QAAQ,GAAG,UAAU,SAAS,EAE5D,EAAc,MAAM,EAAkB,CAAa,EAAE,CACzD,YACA,aACA,OACA,0BACA,QACF,CAAC,EAED,GAAI,YAAa,EAAQ,CACvB,IAAM,EAAoB,MAAM,EAAO,gBAAgB,CAAW,EAClE,OAAO,EAAqB,CAAa,EAAE,CAAiB,EAK9D,OAFA,EAAY,KAAK,CAAM,EAEhB,EAAqB,CAAa,EAAE,CAAW,GAI1D,SAAS,CAAoB,CAAC,EAA0C,CACtE,MAAO,OAAO,IAAoD,CAEhE,OADmB,MAAM,EAAc,GACrB,mBAAmB,EAAY,UAAU,CAAC,GAIhE,SAAS,CAAe,CAAC,EAA0C,EAAuB,CACxF,MAAO,OAAO,IAAoD,CAChE,IAAQ,wBAAyB,KAAa,2BAC9C,IAAK,EACH,MAAM,IAAI,EAAa,0BAA0B,EAGnD,KAAM,aAAuB,GAAuB,CAGlD,IAAM,EAAY,MAFC,MAAM,EAAc,GAEJ,mBAAmB,EACtD,EAAY,gBAAkB,EAAU,UACxC,EAAY,SAAW,EAAO,WAAa,OAG7C,GAAI,YAAa,EAEf,OAD0B,MAAM,EAAO,gBAAgB,CAAW,EAKpE,OADA,MAAM,EAAY,KAAK,CAAC,CAAM,CAAsB,EAC7C,GAIX,eAAsB,CAAiB,EACrC,SACA,iBAAiB,EAAe,KACc,CAC9C,IAAQ,SAAU,KAAa,yCACvB,sBAAuB,KAAa,yBACpC,WAAY,KAAa,2BAC3B,EAAO,EAAmB,CAAM,EAChC,EAAQ,EAAM,eAAe,CAAI,EAEvC,OAAO,EAAQ,SAAS,EAAM,OAAO,EAAgB,EAAI,EAAE,UAAU,EAGvE,SAAS,CAAoB,CAAC,EAAsB,CAClD,OAAO,EAAU,SAAS,EAG5B,eAAe,CAAoB,CAAC,EAAiB,CACnD,IAAQ,aAAc,KAAa,2BACnC,OAAO,IAAI,EAAU,CAAO",
8
- "debugId": "96EDFBAA436A5BDE64756E2164756E21",
9
- "names": []
10
- }
@@ -1,3 +0,0 @@
1
- var H={};U(H,{substrateValidateAddress:()=>V,isKeyringPair:()=>p,getSubstrateToolbox:()=>N,createSubstrateToolbox:()=>S,createKeyring:()=>P,SubstrateNetwork:()=>d,PolkadotToolbox:()=>I,ChainflipToolbox:()=>A,BaseSubstrateToolbox:()=>v});module.exports=L(H);var l=require("@polkadot/util"),u=require("@polkadot/util-crypto"),i=require("@swapkit/helpers"),f=require("ts-pattern");var C={prefix:0,network:"polkadot",displayName:"Polkadot Relay Chain",symbols:["DOT"],decimals:[10],standardAccount:"*25519",website:"https://polkadot.network"},K={prefix:2112,network:"chainflip",displayName:"Chainflip",symbols:["FLIP"],decimals:[18],standardAccount:"*25519",website:"https://chainflip.io/"},E={prefix:42,network:"substrate",displayName:"Substrate",symbols:[],decimals:[],standardAccount:"*25519",website:"https://substrate.io/"},d={DOT:C,FLIP:K,GENERIC:E};var I=({generic:e=!1,...t}={})=>{return S({chain:i.Chain.Polkadot,generic:e,...t})},A=async({generic:e=!1,...t}={})=>{return{...await S({chain:i.Chain.Chainflip,generic:e,...t}),getBalance:w(i.Chain.Chainflip)}};function N(e,t){switch(e){case i.Chain.Chainflip:return A(t);case i.Chain.Polkadot:return I(t);default:throw new Error(`Chain ${e} is not supported`)}}function p(e){return"address"in e}async function P(e,t){let{Keyring:r}=await import("@polkadot/api"),{cryptoWaitReady:n}=await import("@polkadot/util-crypto");return await n(),new r({type:"sr25519",ss58Format:t}).addFromUri(e)}var h=(e,t)=>e.rpc.system.accountNextIndex(t),b=(e,t)=>{try{let r=T(e,t);return _(r,"ss58",t),!0}catch(r){return!1}},x=(e,{recipient:t,assetValue:r})=>e.tx.balances?.transferAllowDeath?.(t,r.getBaseValue("number")),j=async(e,t,{recipient:r,assetValue:n,sender:a})=>{let o=x(e,{recipient:r,assetValue:n}),s=p(t);if(!o)return;let c=s?t.address:a;if(!c)throw new i.SwapKitError("core_transaction_invalid_sender_address");let m=await h(e,c);return(await o.signAndSend(s?t:c,{signer:s?void 0:t,nonce:m}))?.toString()},R=async(e,t,r,{recipient:n,assetValue:a,sender:o})=>{let s=x(e,{recipient:n,assetValue:a}),c=p(t)?t.address:o;if(!c)return;let m=await s?.paymentInfo(c,{nonce:await h(e,c)})||{partialFee:0};return r.set(i.SwapKitNumber.fromBigInt(BigInt(m.partialFee.toString()),r.decimal).getValue("string"))},D=async(e,t)=>{if(t)return e.send(t);return(await e.send()).toString()},B=async(e,t)=>{return await t.signAsync(e)},F=(e,t,r)=>{if(r)return t.signAndSend(e,r);return t.signAndSend(e).toString()},M=async({signer:e,address:t,tx:r,callback:n,api:a})=>{let o=await h(a,t);if(n)r.signAndSend(t,{nonce:o,signer:e},n);return r.signAndSend(t,{nonce:o,signer:e}).toString()};function G(e,t){let r=u.decodeAddress(e);return u.encodeAddress(r,t)}function T(e,t){return l.isHex(e)?l.hexToU8a(e):u.decodeAddress(e,void 0,t)}function _(e,t="ss58",r){if(t==="hex")return l.u8aToHex(e);return u.encodeAddress(e,r)}var v=({api:e,network:t,gasAsset:r,signer:n})=>({api:e,network:t,gasAsset:r,decodeAddress:T,encodeAddress:_,convertAddress:G,getBalance:w(i.Chain.Polkadot),createKeyring:(a)=>P(a,t.prefix),getAddress:(a)=>{let o=a||n;if(!o)throw new i.SwapKitError("core_wallet_not_keypair_wallet");return p(o)?o.address:void 0},createTransaction:(a)=>x(e,a),validateAddress:(a)=>b(a,t.prefix),transfer:(a)=>{if(!n)throw new i.SwapKitError("core_wallet_not_keypair_wallet");return j(e,n,a)},estimateTransactionFee:(a)=>{if(!n)throw new i.SwapKitError("core_wallet_not_keypair_wallet");return R(e,n,r,a)},sign:(a)=>{if(!n)throw new i.SwapKitError("core_wallet_not_keypair_wallet");if(p(n))return B(n,a);throw new i.SwapKitError("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},broadcast:D,signAndBroadcast:({tx:a,callback:o,address:s})=>{if(!n)throw new i.SwapKitError("core_wallet_not_keypair_wallet");if(p(n))return F(n,a,o);if(s)return M({signer:n,address:s,tx:a,callback:o,api:e});throw new i.SwapKitError("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")}}),V=({address:e,chain:t})=>{let{prefix:r}=t===i.Chain.Polkadot?d.DOT:d.FLIP;return b(e,r)||b(e,d.GENERIC.prefix)};async function S({generic:e,chain:t,...r}){let{ApiPromise:n,WsProvider:a}=await import("@polkadot/api"),o=new a(i.SKConfig.get("rpcUrls")[t]),s=await n.create({provider:o}),c=i.AssetValue.from({chain:t}),m=e?d.GENERIC:d[t],k=await f.match(r).with({phrase:f.P.string},({phrase:g})=>P(g,d[t].prefix)).with({signer:f.P.any},({signer:g})=>g).otherwise(()=>{return});return v({api:s,signer:k,gasAsset:c,network:m})}
2
-
3
- //# debugId=A50FE46AF6A5592C64756E2164756E21
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/substrate/substrate.ts", "../src/substrate/types.ts"],
4
- "sourcesContent": [
5
- "import type { ApiPromise } from \"@polkadot/api\";\nimport type { SubmittableExtrinsic } from \"@polkadot/api/types\";\nimport type { KeyringPair } from \"@polkadot/keyring/types\";\nimport type { Callback, IKeyringPair, ISubmittableResult, Signer } from \"@polkadot/types/types\";\nimport { hexToU8a, isHex, u8aToHex } from \"@polkadot/util\";\nimport {\n decodeAddress as decodePolkadotAddress,\n encodeAddress as encodePolkadotAddress,\n} from \"@polkadot/util-crypto\";\nimport {\n AssetValue,\n Chain,\n type DerivationPathArray,\n type GenericCreateTransactionParams,\n SKConfig,\n type SubstrateChain,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\n\nimport { P, match } from \"ts-pattern\";\nimport { getBalance } from \"../utils\";\nimport { SubstrateNetwork, type SubstrateTransferParams } from \"./types\";\n\nexport const PolkadotToolbox = ({ generic = false, ...signerParams }: ToolboxParams = {}) => {\n return createSubstrateToolbox({ chain: Chain.Polkadot, generic, ...signerParams });\n};\n\nexport const ChainflipToolbox = async ({\n generic = false,\n ...signerParams\n}: ToolboxParams = {}) => {\n const toolbox = await createSubstrateToolbox({\n chain: Chain.Chainflip,\n generic,\n ...signerParams,\n });\n\n return { ...toolbox, getBalance: getBalance(Chain.Chainflip) };\n};\n\nexport type SubstrateToolboxes = {\n DOT: Awaited<ReturnType<typeof PolkadotToolbox>>;\n FLIP: Awaited<ReturnType<typeof ChainflipToolbox>>;\n};\n\nexport function getSubstrateToolbox<T extends SubstrateChain>(chain: T, params?: ToolboxParams) {\n switch (chain) {\n case Chain.Chainflip: {\n return ChainflipToolbox(params);\n }\n case Chain.Polkadot: {\n return PolkadotToolbox(params);\n }\n default:\n throw new Error(`Chain ${chain} is not supported`);\n }\n}\n\nexport function isKeyringPair(account: IKeyringPair | Signer): account is IKeyringPair {\n return \"address\" in account;\n}\n\nexport async function createKeyring(phrase: string, networkPrefix: number) {\n const { Keyring } = await import(\"@polkadot/api\");\n const { cryptoWaitReady } = await import(\"@polkadot/util-crypto\");\n await cryptoWaitReady();\n\n return new Keyring({ type: \"sr25519\", ss58Format: networkPrefix }).addFromUri(phrase);\n}\n\nconst getNonce = (api: ApiPromise, address: string) => api.rpc.system.accountNextIndex(address);\n\nconst validateAddress = (address: string, networkPrefix: number) => {\n try {\n const decodedAddress = decodeAddress(address, networkPrefix);\n\n encodeAddress(decodedAddress, \"ss58\", networkPrefix);\n\n return true;\n } catch (_error) {\n return false;\n }\n};\n\nconst createTransaction = (api: ApiPromise, { recipient, assetValue }: SubstrateTransferParams) =>\n api.tx.balances?.transferAllowDeath?.(recipient, assetValue.getBaseValue(\"number\"));\n\nconst transfer = async (\n api: ApiPromise,\n signer: IKeyringPair | Signer,\n { recipient, assetValue, sender }: SubstrateTransferParams,\n) => {\n const transfer = createTransaction(api, {\n recipient,\n assetValue,\n });\n\n const isKeyring = isKeyringPair(signer);\n\n if (!transfer) return;\n\n const address = isKeyring ? (signer as IKeyringPair).address : sender;\n if (!address) throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n\n const nonce = await getNonce(api, address);\n\n const tx = await transfer.signAndSend(isKeyring ? signer : address, {\n signer: isKeyring ? undefined : signer,\n nonce,\n });\n\n return tx?.toString();\n};\n\nconst estimateTransactionFee = async (\n api: ApiPromise,\n signer: IKeyringPair | Signer,\n gasAsset: AssetValue,\n { recipient, assetValue, sender }: SubstrateTransferParams,\n) => {\n const transfer = createTransaction(api, { recipient, assetValue });\n\n const address = isKeyringPair(signer) ? signer.address : sender;\n if (!address) return;\n\n const paymentInfo = (await transfer?.paymentInfo(address, {\n nonce: await getNonce(api, address),\n })) || { partialFee: 0 };\n return gasAsset.set(\n SwapKitNumber.fromBigInt(BigInt(paymentInfo.partialFee.toString()), gasAsset.decimal).getValue(\n \"string\",\n ),\n );\n};\n\nconst broadcast = async (\n tx: SubmittableExtrinsic<\"promise\">,\n callback?: Callback<ISubmittableResult>,\n) => {\n if (callback) return tx.send(callback);\n const hash = await tx.send();\n return hash.toString();\n};\n\nconst sign = async (signer: IKeyringPair, tx: SubmittableExtrinsic<\"promise\">) => {\n const signedTx = await tx.signAsync(signer);\n return signedTx;\n};\n\nconst signAndBroadcastKeyring = (\n signer: IKeyringPair,\n tx: SubmittableExtrinsic<\"promise\">,\n callback?: Callback<ISubmittableResult>,\n) => {\n if (callback) return tx.signAndSend(signer, callback);\n const hash = tx.signAndSend(signer);\n return hash.toString();\n};\n\nconst signAndBroadcast = async ({\n signer,\n address,\n tx,\n callback,\n api,\n}: {\n signer: Signer;\n address: string;\n tx: SubmittableExtrinsic<\"promise\">;\n api: ApiPromise;\n callback?: Callback<ISubmittableResult>;\n}) => {\n const nonce = await getNonce(api, address);\n if (callback) {\n tx.signAndSend(address, { nonce, signer }, callback);\n }\n const hash = tx.signAndSend(address, { nonce, signer });\n return hash.toString();\n};\n\nfunction convertAddress(address: string, newPrefix: number) {\n const decodedAddress = decodePolkadotAddress(address);\n const convertedAddress = encodePolkadotAddress(decodedAddress, newPrefix);\n return convertedAddress;\n}\n\nfunction decodeAddress(address: string, networkPrefix?: number) {\n return isHex(address)\n ? hexToU8a(address)\n : decodePolkadotAddress(address, undefined, networkPrefix);\n}\n\nfunction encodeAddress(\n address: Uint8Array,\n encoding: \"ss58\" | \"hex\" = \"ss58\",\n networkPrefix?: number,\n) {\n if (encoding === \"hex\") {\n return u8aToHex(address);\n }\n\n return encodePolkadotAddress(address, networkPrefix);\n}\n\nexport const BaseSubstrateToolbox = ({\n api,\n network,\n gasAsset,\n signer,\n}: {\n api: ApiPromise;\n network: SubstrateNetwork;\n gasAsset: AssetValue;\n signer?: IKeyringPair | Signer;\n}) => ({\n api,\n network,\n gasAsset,\n decodeAddress,\n encodeAddress,\n convertAddress,\n getBalance: getBalance(Chain.Polkadot),\n createKeyring: (phrase: string) => createKeyring(phrase, network.prefix),\n getAddress: (keyring?: IKeyringPair | Signer) => {\n const keyringPair = keyring || signer;\n if (!keyringPair) throw new SwapKitError(\"core_wallet_not_keypair_wallet\");\n\n return isKeyringPair(keyringPair) ? keyringPair.address : undefined;\n },\n createTransaction: (params: GenericCreateTransactionParams) => createTransaction(api, params),\n validateAddress: (address: string) => validateAddress(address, network.prefix),\n transfer: (params: SubstrateTransferParams) => {\n if (!signer) throw new SwapKitError(\"core_wallet_not_keypair_wallet\");\n return transfer(api, signer, params);\n },\n estimateTransactionFee: (params: SubstrateTransferParams) => {\n if (!signer) throw new SwapKitError(\"core_wallet_not_keypair_wallet\");\n return estimateTransactionFee(api, signer, gasAsset, params);\n },\n sign: (tx: SubmittableExtrinsic<\"promise\">) => {\n if (!signer) throw new SwapKitError(\"core_wallet_not_keypair_wallet\");\n if (isKeyringPair(signer)) return sign(signer, tx);\n\n throw new SwapKitError(\n \"core_wallet_not_keypair_wallet\",\n \"Signer does not have keyring pair capabilities required for signing.\",\n );\n },\n broadcast,\n signAndBroadcast: ({\n tx,\n callback,\n address,\n }: {\n tx: SubmittableExtrinsic<\"promise\">;\n callback?: Callback<ISubmittableResult>;\n address?: string;\n }) => {\n if (!signer) throw new SwapKitError(\"core_wallet_not_keypair_wallet\");\n if (isKeyringPair(signer)) return signAndBroadcastKeyring(signer, tx, callback);\n\n if (address) {\n return signAndBroadcast({ signer, address, tx, callback, api });\n }\n\n throw new SwapKitError(\n \"core_wallet_not_keypair_wallet\",\n \"Signer does not have keyring pair capabilities required for signing.\",\n );\n },\n});\n\nexport const substrateValidateAddress = ({\n address,\n chain,\n}: { address: string; chain: Chain.Polkadot | Chain.Chainflip }) => {\n const { prefix } = chain === Chain.Polkadot ? SubstrateNetwork.DOT : SubstrateNetwork.FLIP;\n\n return (\n validateAddress(address, prefix) || validateAddress(address, SubstrateNetwork.GENERIC.prefix)\n );\n};\n\nexport async function createSubstrateToolbox({\n generic,\n chain,\n ...signerParams\n}: ToolboxParams & { chain: SubstrateChain }) {\n const { ApiPromise, WsProvider } = await import(\"@polkadot/api\");\n\n const provider = new WsProvider(SKConfig.get(\"rpcUrls\")[chain]);\n const api = await ApiPromise.create({ provider });\n const gasAsset = AssetValue.from({ chain });\n const network = generic ? SubstrateNetwork.GENERIC : SubstrateNetwork[chain];\n\n const signer = await match(signerParams)\n .with({ phrase: P.string }, ({ phrase }) =>\n createKeyring(phrase, SubstrateNetwork[chain].prefix),\n )\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n return BaseSubstrateToolbox({ api, signer, gasAsset, network });\n}\n\nexport type ToolboxParams = {\n generic?: boolean;\n} & (\n | {\n signer?: KeyringPair | Signer;\n }\n | {\n phrase?: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n }\n);\n",
6
- "import type { Signer as InjectedSigner } from \"@polkadot/api/types\";\nimport type { ProviderInterface } from \"@polkadot/rpc-provider/types\";\nimport type { ExtDef } from \"@polkadot/types/extrinsic/signedExtensions/types\";\nimport type { KeypairType } from \"@polkadot/util-crypto/types\";\nimport type { GenericTransferParams, SubstrateChain } from \"@swapkit/helpers\";\n\nconst polkadotNetwork = {\n prefix: 0,\n network: \"polkadot\",\n displayName: \"Polkadot Relay Chain\",\n symbols: [\"DOT\"],\n decimals: [10],\n standardAccount: \"*25519\",\n website: \"https://polkadot.network\",\n};\n\nconst chainflipNetwork = {\n prefix: 2112,\n network: \"chainflip\",\n displayName: \"Chainflip\",\n symbols: [\"FLIP\"],\n decimals: [18],\n standardAccount: \"*25519\",\n website: \"https://chainflip.io/\",\n};\n\nconst subtrateNetwork = {\n prefix: 42,\n network: \"substrate\",\n displayName: \"Substrate\",\n symbols: [],\n decimals: [],\n standardAccount: \"*25519\",\n website: \"https://substrate.io/\",\n};\n\nexport const SubstrateNetwork: Record<SubstrateChain | \"GENERIC\", SubstrateNetwork> = {\n DOT: polkadotNetwork,\n FLIP: chainflipNetwork,\n GENERIC: subtrateNetwork,\n};\n\nexport type SubstrateNetwork =\n | typeof polkadotNetwork\n | typeof chainflipNetwork\n | typeof subtrateNetwork;\n\nexport type SubstrateTransferParams = GenericTransferParams & {\n sender?: string;\n};\n\ntype Unsubcall = () => void;\n\ninterface InjectedAccount {\n address: string;\n genesisHash?: string | null;\n name?: string;\n type?: KeypairType;\n}\n\ninterface InjectedAccounts {\n get: (anyType?: boolean) => Promise<InjectedAccount[]>;\n subscribe: (cb: (accounts: InjectedAccount[]) => void | Promise<void>) => Unsubcall;\n}\ninterface InjectedExtensionInfo {\n name: string;\n version: string;\n}\ninterface ProviderMeta {\n network: string;\n node: \"full\" | \"light\";\n source: string;\n transport: string;\n}\ninterface MetadataDefBase {\n chain: string;\n genesisHash: string;\n icon: string;\n ss58Format: number;\n chainType?: \"substrate\" | \"ethereum\";\n}\ninterface MetadataDef extends MetadataDefBase {\n color?: string;\n specVersion: number;\n tokenDecimals: number;\n tokenSymbol: string;\n types: Record<string, Record<string, string> | string>;\n metaCalls?: string;\n userExtensions?: ExtDef;\n}\ninterface InjectedMetadataKnown {\n genesisHash: string;\n specVersion: number;\n}\ninterface InjectedMetadata {\n get: () => Promise<InjectedMetadataKnown[]>;\n provide: (definition: MetadataDef) => Promise<boolean>;\n}\ntype ProviderList = Record<string, ProviderMeta>;\n\ninterface InjectedProvider extends ProviderInterface {\n listProviders: () => Promise<ProviderList>;\n startProvider: (key: string) => Promise<ProviderMeta>;\n}\n\ntype InjectedWalletData = {\n accounts: InjectedAccounts;\n metadata?: InjectedMetadata;\n provider?: InjectedProvider;\n signer: InjectedSigner;\n};\n\nexport type SubstrateInjectedExtension = Record<\n string,\n {\n connect?: (origin: string) => Promise<InjectedExtensionInfo & InjectedWalletData>;\n enable?: (origin: string) => Promise<InjectedWalletData>;\n version?: string;\n }\n>;\n"
7
- ],
8
- "mappings": "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",
9
- "debugId": "A50FE46AF6A5592C64756E2164756E21",
10
- "names": []
11
- }
@@ -1,3 +0,0 @@
1
- import{b}from"../chunk-0h4xdrwz.js";import{c as f,d as g}from"../chunk-p1kdg37m.js";import{hexToU8a as E,isHex as N,u8aToHex as j}from"@polkadot/util";import{decodeAddress as S,encodeAddress as k}from"@polkadot/util-crypto";import{AssetValue as R,Chain as p,SKConfig as D,SwapKitError as c,SwapKitNumber as B}from"@swapkit/helpers";import{P as x,match as F}from"ts-pattern";var v={prefix:0,network:"polkadot",displayName:"Polkadot Relay Chain",symbols:["DOT"],decimals:[10],standardAccount:"*25519",website:"https://polkadot.network"},C={prefix:2112,network:"chainflip",displayName:"Chainflip",symbols:["FLIP"],decimals:[18],standardAccount:"*25519",website:"https://chainflip.io/"},K={prefix:42,network:"substrate",displayName:"Substrate",symbols:[],decimals:[],standardAccount:"*25519",website:"https://substrate.io/"},d={DOT:v,FLIP:C,GENERIC:K};var M=({generic:e=!1,...t}={})=>{return _({chain:p.Polkadot,generic:e,...t})},G=async({generic:e=!1,...t}={})=>{return{...await _({chain:p.Chainflip,generic:e,...t}),getBalance:b(p.Chainflip)}};function te(e,t){switch(e){case p.Chainflip:return G(t);case p.Polkadot:return M(t);default:throw new Error(`Chain ${e} is not supported`)}}function u(e){return"address"in e}async function I(e,t){let{Keyring:r}=await import("@polkadot/api"),{cryptoWaitReady:n}=await import("@polkadot/util-crypto");return await n(),new r({type:"sr25519",ss58Format:t}).addFromUri(e)}var w=(e,t)=>e.rpc.system.accountNextIndex(t),y=(e,t)=>{try{let r=A(e,t);return T(r,"ss58",t),!0}catch(r){return!1}},P=(e,{recipient:t,assetValue:r})=>e.tx.balances?.transferAllowDeath?.(t,r.getBaseValue("number")),V=async(e,t,{recipient:r,assetValue:n,sender:a})=>{let i=P(e,{recipient:r,assetValue:n}),o=u(t);if(!i)return;let s=o?t.address:a;if(!s)throw new c("core_transaction_invalid_sender_address");let l=await w(e,s);return(await i.signAndSend(o?t:s,{signer:o?void 0:t,nonce:l}))?.toString()},L=async(e,t,r,{recipient:n,assetValue:a,sender:i})=>{let o=P(e,{recipient:n,assetValue:a}),s=u(t)?t.address:i;if(!s)return;let l=await o?.paymentInfo(s,{nonce:await w(e,s)})||{partialFee:0};return r.set(B.fromBigInt(BigInt(l.partialFee.toString()),r.decimal).getValue("string"))},U=async(e,t)=>{if(t)return e.send(t);return(await e.send()).toString()},H=async(e,t)=>{return await t.signAsync(e)},W=(e,t,r)=>{if(r)return t.signAndSend(e,r);return t.signAndSend(e).toString()},O=async({signer:e,address:t,tx:r,callback:n,api:a})=>{let i=await w(a,t);if(n)r.signAndSend(t,{nonce:i,signer:e},n);return r.signAndSend(t,{nonce:i,signer:e}).toString()};function q(e,t){let r=S(e);return k(r,t)}function A(e,t){return N(e)?E(e):S(e,void 0,t)}function T(e,t="ss58",r){if(t==="hex")return j(e);return k(e,r)}var $=({api:e,network:t,gasAsset:r,signer:n})=>({api:e,network:t,gasAsset:r,decodeAddress:A,encodeAddress:T,convertAddress:q,getBalance:b(p.Polkadot),createKeyring:(a)=>I(a,t.prefix),getAddress:(a)=>{let i=a||n;if(!i)throw new c("core_wallet_not_keypair_wallet");return u(i)?i.address:void 0},createTransaction:(a)=>P(e,a),validateAddress:(a)=>y(a,t.prefix),transfer:(a)=>{if(!n)throw new c("core_wallet_not_keypair_wallet");return V(e,n,a)},estimateTransactionFee:(a)=>{if(!n)throw new c("core_wallet_not_keypair_wallet");return L(e,n,r,a)},sign:(a)=>{if(!n)throw new c("core_wallet_not_keypair_wallet");if(u(n))return H(n,a);throw new c("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},broadcast:U,signAndBroadcast:({tx:a,callback:i,address:o})=>{if(!n)throw new c("core_wallet_not_keypair_wallet");if(u(n))return W(n,a,i);if(o)return O({signer:n,address:o,tx:a,callback:i,api:e});throw new c("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")}}),re=({address:e,chain:t})=>{let{prefix:r}=t===p.Polkadot?d.DOT:d.FLIP;return y(e,r)||y(e,d.GENERIC.prefix)};async function _({generic:e,chain:t,...r}){let{ApiPromise:n,WsProvider:a}=await import("@polkadot/api"),i=new a(D.get("rpcUrls")[t]),o=await n.create({provider:i}),s=R.from({chain:t}),l=e?d.GENERIC:d[t],h=await F(r).with({phrase:x.string},({phrase:m})=>I(m,d[t].prefix)).with({signer:x.any},({signer:m})=>m).otherwise(()=>{return});return $({api:o,signer:h,gasAsset:s,network:l})}export{re as substrateValidateAddress,u as isKeyringPair,te as getSubstrateToolbox,_ as createSubstrateToolbox,I as createKeyring,d as SubstrateNetwork,M as PolkadotToolbox,G as ChainflipToolbox,$ as BaseSubstrateToolbox};
2
-
3
- //# debugId=4662675F7CC450C464756E2164756E21
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/substrate/substrate.ts", "../src/substrate/types.ts"],
4
- "sourcesContent": [
5
- "import type { ApiPromise } from \"@polkadot/api\";\nimport type { SubmittableExtrinsic } from \"@polkadot/api/types\";\nimport type { KeyringPair } from \"@polkadot/keyring/types\";\nimport type { Callback, IKeyringPair, ISubmittableResult, Signer } from \"@polkadot/types/types\";\nimport { hexToU8a, isHex, u8aToHex } from \"@polkadot/util\";\nimport {\n decodeAddress as decodePolkadotAddress,\n encodeAddress as encodePolkadotAddress,\n} from \"@polkadot/util-crypto\";\nimport {\n AssetValue,\n Chain,\n type DerivationPathArray,\n type GenericCreateTransactionParams,\n SKConfig,\n type SubstrateChain,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\n\nimport { P, match } from \"ts-pattern\";\nimport { getBalance } from \"../utils\";\nimport { SubstrateNetwork, type SubstrateTransferParams } from \"./types\";\n\nexport const PolkadotToolbox = ({ generic = false, ...signerParams }: ToolboxParams = {}) => {\n return createSubstrateToolbox({ chain: Chain.Polkadot, generic, ...signerParams });\n};\n\nexport const ChainflipToolbox = async ({\n generic = false,\n ...signerParams\n}: ToolboxParams = {}) => {\n const toolbox = await createSubstrateToolbox({\n chain: Chain.Chainflip,\n generic,\n ...signerParams,\n });\n\n return { ...toolbox, getBalance: getBalance(Chain.Chainflip) };\n};\n\nexport type SubstrateToolboxes = {\n DOT: Awaited<ReturnType<typeof PolkadotToolbox>>;\n FLIP: Awaited<ReturnType<typeof ChainflipToolbox>>;\n};\n\nexport function getSubstrateToolbox<T extends SubstrateChain>(chain: T, params?: ToolboxParams) {\n switch (chain) {\n case Chain.Chainflip: {\n return ChainflipToolbox(params);\n }\n case Chain.Polkadot: {\n return PolkadotToolbox(params);\n }\n default:\n throw new Error(`Chain ${chain} is not supported`);\n }\n}\n\nexport function isKeyringPair(account: IKeyringPair | Signer): account is IKeyringPair {\n return \"address\" in account;\n}\n\nexport async function createKeyring(phrase: string, networkPrefix: number) {\n const { Keyring } = await import(\"@polkadot/api\");\n const { cryptoWaitReady } = await import(\"@polkadot/util-crypto\");\n await cryptoWaitReady();\n\n return new Keyring({ type: \"sr25519\", ss58Format: networkPrefix }).addFromUri(phrase);\n}\n\nconst getNonce = (api: ApiPromise, address: string) => api.rpc.system.accountNextIndex(address);\n\nconst validateAddress = (address: string, networkPrefix: number) => {\n try {\n const decodedAddress = decodeAddress(address, networkPrefix);\n\n encodeAddress(decodedAddress, \"ss58\", networkPrefix);\n\n return true;\n } catch (_error) {\n return false;\n }\n};\n\nconst createTransaction = (api: ApiPromise, { recipient, assetValue }: SubstrateTransferParams) =>\n api.tx.balances?.transferAllowDeath?.(recipient, assetValue.getBaseValue(\"number\"));\n\nconst transfer = async (\n api: ApiPromise,\n signer: IKeyringPair | Signer,\n { recipient, assetValue, sender }: SubstrateTransferParams,\n) => {\n const transfer = createTransaction(api, {\n recipient,\n assetValue,\n });\n\n const isKeyring = isKeyringPair(signer);\n\n if (!transfer) return;\n\n const address = isKeyring ? (signer as IKeyringPair).address : sender;\n if (!address) throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n\n const nonce = await getNonce(api, address);\n\n const tx = await transfer.signAndSend(isKeyring ? signer : address, {\n signer: isKeyring ? undefined : signer,\n nonce,\n });\n\n return tx?.toString();\n};\n\nconst estimateTransactionFee = async (\n api: ApiPromise,\n signer: IKeyringPair | Signer,\n gasAsset: AssetValue,\n { recipient, assetValue, sender }: SubstrateTransferParams,\n) => {\n const transfer = createTransaction(api, { recipient, assetValue });\n\n const address = isKeyringPair(signer) ? signer.address : sender;\n if (!address) return;\n\n const paymentInfo = (await transfer?.paymentInfo(address, {\n nonce: await getNonce(api, address),\n })) || { partialFee: 0 };\n return gasAsset.set(\n SwapKitNumber.fromBigInt(BigInt(paymentInfo.partialFee.toString()), gasAsset.decimal).getValue(\n \"string\",\n ),\n );\n};\n\nconst broadcast = async (\n tx: SubmittableExtrinsic<\"promise\">,\n callback?: Callback<ISubmittableResult>,\n) => {\n if (callback) return tx.send(callback);\n const hash = await tx.send();\n return hash.toString();\n};\n\nconst sign = async (signer: IKeyringPair, tx: SubmittableExtrinsic<\"promise\">) => {\n const signedTx = await tx.signAsync(signer);\n return signedTx;\n};\n\nconst signAndBroadcastKeyring = (\n signer: IKeyringPair,\n tx: SubmittableExtrinsic<\"promise\">,\n callback?: Callback<ISubmittableResult>,\n) => {\n if (callback) return tx.signAndSend(signer, callback);\n const hash = tx.signAndSend(signer);\n return hash.toString();\n};\n\nconst signAndBroadcast = async ({\n signer,\n address,\n tx,\n callback,\n api,\n}: {\n signer: Signer;\n address: string;\n tx: SubmittableExtrinsic<\"promise\">;\n api: ApiPromise;\n callback?: Callback<ISubmittableResult>;\n}) => {\n const nonce = await getNonce(api, address);\n if (callback) {\n tx.signAndSend(address, { nonce, signer }, callback);\n }\n const hash = tx.signAndSend(address, { nonce, signer });\n return hash.toString();\n};\n\nfunction convertAddress(address: string, newPrefix: number) {\n const decodedAddress = decodePolkadotAddress(address);\n const convertedAddress = encodePolkadotAddress(decodedAddress, newPrefix);\n return convertedAddress;\n}\n\nfunction decodeAddress(address: string, networkPrefix?: number) {\n return isHex(address)\n ? hexToU8a(address)\n : decodePolkadotAddress(address, undefined, networkPrefix);\n}\n\nfunction encodeAddress(\n address: Uint8Array,\n encoding: \"ss58\" | \"hex\" = \"ss58\",\n networkPrefix?: number,\n) {\n if (encoding === \"hex\") {\n return u8aToHex(address);\n }\n\n return encodePolkadotAddress(address, networkPrefix);\n}\n\nexport const BaseSubstrateToolbox = ({\n api,\n network,\n gasAsset,\n signer,\n}: {\n api: ApiPromise;\n network: SubstrateNetwork;\n gasAsset: AssetValue;\n signer?: IKeyringPair | Signer;\n}) => ({\n api,\n network,\n gasAsset,\n decodeAddress,\n encodeAddress,\n convertAddress,\n getBalance: getBalance(Chain.Polkadot),\n createKeyring: (phrase: string) => createKeyring(phrase, network.prefix),\n getAddress: (keyring?: IKeyringPair | Signer) => {\n const keyringPair = keyring || signer;\n if (!keyringPair) throw new SwapKitError(\"core_wallet_not_keypair_wallet\");\n\n return isKeyringPair(keyringPair) ? keyringPair.address : undefined;\n },\n createTransaction: (params: GenericCreateTransactionParams) => createTransaction(api, params),\n validateAddress: (address: string) => validateAddress(address, network.prefix),\n transfer: (params: SubstrateTransferParams) => {\n if (!signer) throw new SwapKitError(\"core_wallet_not_keypair_wallet\");\n return transfer(api, signer, params);\n },\n estimateTransactionFee: (params: SubstrateTransferParams) => {\n if (!signer) throw new SwapKitError(\"core_wallet_not_keypair_wallet\");\n return estimateTransactionFee(api, signer, gasAsset, params);\n },\n sign: (tx: SubmittableExtrinsic<\"promise\">) => {\n if (!signer) throw new SwapKitError(\"core_wallet_not_keypair_wallet\");\n if (isKeyringPair(signer)) return sign(signer, tx);\n\n throw new SwapKitError(\n \"core_wallet_not_keypair_wallet\",\n \"Signer does not have keyring pair capabilities required for signing.\",\n );\n },\n broadcast,\n signAndBroadcast: ({\n tx,\n callback,\n address,\n }: {\n tx: SubmittableExtrinsic<\"promise\">;\n callback?: Callback<ISubmittableResult>;\n address?: string;\n }) => {\n if (!signer) throw new SwapKitError(\"core_wallet_not_keypair_wallet\");\n if (isKeyringPair(signer)) return signAndBroadcastKeyring(signer, tx, callback);\n\n if (address) {\n return signAndBroadcast({ signer, address, tx, callback, api });\n }\n\n throw new SwapKitError(\n \"core_wallet_not_keypair_wallet\",\n \"Signer does not have keyring pair capabilities required for signing.\",\n );\n },\n});\n\nexport const substrateValidateAddress = ({\n address,\n chain,\n}: { address: string; chain: Chain.Polkadot | Chain.Chainflip }) => {\n const { prefix } = chain === Chain.Polkadot ? SubstrateNetwork.DOT : SubstrateNetwork.FLIP;\n\n return (\n validateAddress(address, prefix) || validateAddress(address, SubstrateNetwork.GENERIC.prefix)\n );\n};\n\nexport async function createSubstrateToolbox({\n generic,\n chain,\n ...signerParams\n}: ToolboxParams & { chain: SubstrateChain }) {\n const { ApiPromise, WsProvider } = await import(\"@polkadot/api\");\n\n const provider = new WsProvider(SKConfig.get(\"rpcUrls\")[chain]);\n const api = await ApiPromise.create({ provider });\n const gasAsset = AssetValue.from({ chain });\n const network = generic ? SubstrateNetwork.GENERIC : SubstrateNetwork[chain];\n\n const signer = await match(signerParams)\n .with({ phrase: P.string }, ({ phrase }) =>\n createKeyring(phrase, SubstrateNetwork[chain].prefix),\n )\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n return BaseSubstrateToolbox({ api, signer, gasAsset, network });\n}\n\nexport type ToolboxParams = {\n generic?: boolean;\n} & (\n | {\n signer?: KeyringPair | Signer;\n }\n | {\n phrase?: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n }\n);\n",
6
- "import type { Signer as InjectedSigner } from \"@polkadot/api/types\";\nimport type { ProviderInterface } from \"@polkadot/rpc-provider/types\";\nimport type { ExtDef } from \"@polkadot/types/extrinsic/signedExtensions/types\";\nimport type { KeypairType } from \"@polkadot/util-crypto/types\";\nimport type { GenericTransferParams, SubstrateChain } from \"@swapkit/helpers\";\n\nconst polkadotNetwork = {\n prefix: 0,\n network: \"polkadot\",\n displayName: \"Polkadot Relay Chain\",\n symbols: [\"DOT\"],\n decimals: [10],\n standardAccount: \"*25519\",\n website: \"https://polkadot.network\",\n};\n\nconst chainflipNetwork = {\n prefix: 2112,\n network: \"chainflip\",\n displayName: \"Chainflip\",\n symbols: [\"FLIP\"],\n decimals: [18],\n standardAccount: \"*25519\",\n website: \"https://chainflip.io/\",\n};\n\nconst subtrateNetwork = {\n prefix: 42,\n network: \"substrate\",\n displayName: \"Substrate\",\n symbols: [],\n decimals: [],\n standardAccount: \"*25519\",\n website: \"https://substrate.io/\",\n};\n\nexport const SubstrateNetwork: Record<SubstrateChain | \"GENERIC\", SubstrateNetwork> = {\n DOT: polkadotNetwork,\n FLIP: chainflipNetwork,\n GENERIC: subtrateNetwork,\n};\n\nexport type SubstrateNetwork =\n | typeof polkadotNetwork\n | typeof chainflipNetwork\n | typeof subtrateNetwork;\n\nexport type SubstrateTransferParams = GenericTransferParams & {\n sender?: string;\n};\n\ntype Unsubcall = () => void;\n\ninterface InjectedAccount {\n address: string;\n genesisHash?: string | null;\n name?: string;\n type?: KeypairType;\n}\n\ninterface InjectedAccounts {\n get: (anyType?: boolean) => Promise<InjectedAccount[]>;\n subscribe: (cb: (accounts: InjectedAccount[]) => void | Promise<void>) => Unsubcall;\n}\ninterface InjectedExtensionInfo {\n name: string;\n version: string;\n}\ninterface ProviderMeta {\n network: string;\n node: \"full\" | \"light\";\n source: string;\n transport: string;\n}\ninterface MetadataDefBase {\n chain: string;\n genesisHash: string;\n icon: string;\n ss58Format: number;\n chainType?: \"substrate\" | \"ethereum\";\n}\ninterface MetadataDef extends MetadataDefBase {\n color?: string;\n specVersion: number;\n tokenDecimals: number;\n tokenSymbol: string;\n types: Record<string, Record<string, string> | string>;\n metaCalls?: string;\n userExtensions?: ExtDef;\n}\ninterface InjectedMetadataKnown {\n genesisHash: string;\n specVersion: number;\n}\ninterface InjectedMetadata {\n get: () => Promise<InjectedMetadataKnown[]>;\n provide: (definition: MetadataDef) => Promise<boolean>;\n}\ntype ProviderList = Record<string, ProviderMeta>;\n\ninterface InjectedProvider extends ProviderInterface {\n listProviders: () => Promise<ProviderList>;\n startProvider: (key: string) => Promise<ProviderMeta>;\n}\n\ntype InjectedWalletData = {\n accounts: InjectedAccounts;\n metadata?: InjectedMetadata;\n provider?: InjectedProvider;\n signer: InjectedSigner;\n};\n\nexport type SubstrateInjectedExtension = Record<\n string,\n {\n connect?: (origin: string) => Promise<InjectedExtensionInfo & InjectedWalletData>;\n enable?: (origin: string) => Promise<InjectedWalletData>;\n version?: string;\n }\n>;\n"
7
- ],
8
- "mappings": "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",
9
- "debugId": "4662675F7CC450C464756E2164756E21",
10
- "names": []
11
- }
@@ -1,3 +0,0 @@
1
- var uX={};pX(uX,{toLegacyAddress:()=>A,toCashAddress:()=>f,stripToCashAddress:()=>V,stripPrefix:()=>R,nonSegwitChains:()=>l,isValidAddress:()=>XX,getUtxoToolbox:()=>hX,getUtxoNetwork:()=>P,getUtxoApi:()=>_,getUTXOAddressValidator:()=>MX,getScriptTypeForAddress:()=>x,getOutputSize:()=>g,getInputSize:()=>y,getDustThreshold:()=>o,getCreateKeysForPath:()=>c,detectAddressNetwork:()=>GX,createUTXOToolbox:()=>h,createCustomUtxoApi:()=>wX,createBCHToolbox:()=>QX,compileMemo:()=>O,calculateTxSize:()=>S,bchValidateAddress:()=>E,addressFromKeysGetter:()=>JX,accumulative:()=>N,UtxoNetwork:()=>e,UTXOScriptType:()=>r,TX_OVERHEAD:()=>$X,OutputSizes:()=>m,OP_RETURN_OVERHEAD:()=>VX,MIN_TX_FEE:()=>EX,InputSizes:()=>n});module.exports=cX(uX);var b=require("@swapkit/helpers");var F=require("@swapkit/helpers");var M=require("@swapkit/helpers");async function vX({chain:X,txHash:G}){let $=M.SKConfig.get("rpcUrls")[X],J=JSON.stringify({jsonrpc:"2.0",method:"sendrawtransaction",params:[G],id:WX()}),Q=await M.RequestClient.post($,{headers:{"Content-Type":"application/json"},body:J});if(Q.error)throw new Error(`failed to broadcast a transaction: ${Q.error?.message}`);if(Q.result.includes('"code":-26'))throw new Error("Invalid transaction: the transaction amount was too low");return Q.result}function i(X){return`https://api.blockchair.com/${YX(X)}`}function LX(X){switch(X){case M.Chain.Bitcoin:return 5;case M.Chain.Dogecoin:return 1e4;case M.Chain.Litecoin:return 1;default:return 2}}function YX(X){switch(X){case M.Chain.BitcoinCash:return"bitcoin-cash";case M.Chain.Litecoin:return"litecoin";case M.Chain.Dash:return"dash";case M.Chain.Dogecoin:return"dogecoin";case M.Chain.Polkadot:return"polkadot";default:return"bitcoin"}}async function _X(X){try{let{feePerKb:G}=await M.RequestClient.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),$=G/1000;return Math.max($,LX(X))}catch(G){return LX(X)}}async function a(X,G){try{let $=await M.RequestClient.get(X);if(!$||$.context.code!==200)throw new Error(`failed to query ${X}`);return $.data}catch($){if(!G)throw $;let J=await M.RequestClient.get(`${X}${G?`&key=${G}`:""}`);if(!J||J.context.code!==200)throw new Error(`failed to query ${X}`);return J.data}}async function DX({address:X,chain:G,apiKey:$}){if(!X)throw new Error("address is required");try{return(await a(`${i(G)}/dashboards/address/${X}?transaction_details=true`,$))[X]}catch(J){return{utxo:[],address:{balance:0,transaction_count:0}}}}async function IX({address:X,chain:G,apiKey:$}){return(await DX({address:X,chain:G,apiKey:$}))?.address.balance||0}async function qX({chain:X,apiKey:G,txHash:$}){if(!$)throw new Error("txHash is required");try{return(await a(`${i(X)}/raw/transaction/${$}`,G))?.[$]?.raw_transaction||""}catch(J){return console.error(J),""}}async function PX({chain:X,address:G,apiKey:$,offset:J=0,limit:Q=100}){return(await a(`${i(X)}/outputs?q=is_spent(false),recipient(${G})&limit=${Q}&offset=${J}`,$)).filter(({is_spent:j})=>!j).map(({script_hex:j,block_id:W,transaction_hash:D,index:q,value:U,spending_signature_hex:T})=>({hash:D,index:q,value:U,txHex:T,script_hex:j,is_confirmed:W!==-1}))}async function jX({chain:X,address:G,apiKey:$,offset:J=0,limit:Q=100}){if(!G)throw new Error("address is required");try{let L=await PX({chain:X,address:G,apiKey:$,offset:J,limit:Q});if(L.length<=Q)return L;let Z=await jX({chain:X,address:G,apiKey:$,offset:J+Q,limit:Q});return[...L,...Z]}catch(L){return console.error(L),[]}}async function FX({address:X,chain:G,apiKey:$,fetchTxHex:J=!0}){let Q=await jX({chain:G,address:X,apiKey:$}),L=[];for(let{hash:Z,index:j,script_hex:W,value:D}of Q){let q;if(J)q=await qX({txHash:Z,chain:G,apiKey:$});L.push({address:X,hash:Z,index:j,txHex:q,value:D,witnessUtxo:{value:D,script:Buffer.from(W,"hex")}})}return L}function KX(X){let G=M.SKConfig.get("apiKeys").blockchair||"";return M.warnOnce(!G,"No Blockchair API key found. Functionality will be limited."),{broadcastTx:($)=>vX({txHash:$,chain:X}),getRawTx:($)=>qX({txHash:$,chain:X,apiKey:G}),getSuggestedTxFee:()=>_X(X),getBalance:($)=>IX({address:$,chain:X,apiKey:G}),getAddressData:($)=>DX({address:$,chain:X,apiKey:G}),scanUTXOs:($)=>FX({...$,chain:X,apiKey:G})}}function wX(X){return X}function _(X){let G=M.SKConfig.get("apis")[X];if(G)return M.warnOnce(!0,"Using custom UTXO API. Be sure to implement all methods to avoid issues."),G;return KX(X)}async function P(){let X=await import("coininfo"),{networks:G}=await import("bitcoinjs-lib");return function $(J){switch(J){case M.Chain.Bitcoin:return G.bitcoin;case M.Chain.BitcoinCash:return X.bitcoincash.main.toBitcoinJS();case M.Chain.Dash:return X.dash.main.toBitcoinJS();case M.Chain.Litecoin:return X.litecoin.main.toBitcoinJS();case M.Chain.Dogecoin:{let Q={private:70615956,public:70617039},L=X.dogecoin.test;return L.versions.bip32=Q,X.dogecoin.main.toBitcoinJS()}default:throw new Error("Invalid chain")}}}var s=Y(require("bs58check")),t=Y(require("cashaddrjs"));var e;(($)=>{$.Mainnet="mainnet";$.Testnet="testnet"})(e||={});var C={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}};function XX(X){try{return u(X),!0}catch(G){return!1}}function GX(X){return u(X)?.network}function A(X){let G=u(X);if(G?.format==="legacy")return X;return OX(G)}function f(X){let G=u(X);return kX(G)}function u(X){try{return yX(X)}catch(G){}try{return NX(X)}catch(G){}throw new Error("Received an invalid Bitcoin Cash address as input.")}function yX(X){try{let G=s.default.decode(X);if(G.length!==21)throw new Error("Received an invalid Bitcoin Cash address as input.");let $=G[0],J=Array.prototype.slice.call(G,1);switch($){case C.legacy.mainnet.p2pkh:return{hash:J,format:"legacy",network:"mainnet",type:"p2pkh"};case C.legacy.mainnet.p2sh:return{hash:J,format:"legacy",network:"mainnet",type:"p2sh"};case C.legacy.testnet.p2pkh:return{hash:J,format:"legacy",network:"testnet",type:"p2pkh"};case C.legacy.testnet.p2sh:return{hash:J,format:"legacy",network:"testnet",type:"p2sh"};case C.bitpay.mainnet.p2pkh:return{hash:J,format:"bitpay",network:"mainnet",type:"p2pkh"};case C.bitpay.mainnet.p2sh:return{hash:J,format:"bitpay",network:"mainnet",type:"p2sh"};default:throw new Error("Received an invalid Bitcoin Cash address as input.")}}catch(G){throw new Error("Received an invalid Bitcoin Cash address as input.")}}function NX(X){if(X.indexOf(":")!==-1)try{return UX(X)}catch(G){}else{let G=["bitcoincash","bchtest","bchreg"];for(let $ of G)try{return UX(`${$}:${X}`)}catch(J){}}throw new Error("Received an invalid Bitcoin Cash address as input.")}function UX(X){try{let{hash:G,prefix:$,type:J}=t.default.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call(G,0),network:$==="bitcoincash"?"mainnet":"testnet",type:J==="P2PKH"?"p2pkh":"p2sh"}}catch(G){throw new Error("Received an invalid Bitcoin Cash address as input.")}}function OX(X){let G=C.legacy[X.network][X.type],$=Buffer.alloc(1+X.hash.length);return $[0]=G,$.set(X.hash,1),s.default.encode($)}function kX(X){let G=X.network==="mainnet"?"bitcoincash":"bchtest",$=X.type==="p2pkh"?"P2PKH":"P2SH",J=new Uint8Array(X.hash);return t.default.encode(G,$,J)}var k=require("@swapkit/helpers");var o=(X)=>{switch(X){case k.Chain.Bitcoin:case k.Chain.BitcoinCash:return 550;case k.Chain.Dash:case k.Chain.Litecoin:return 5500;case k.Chain.Dogecoin:return 1e5;default:throw new Error("Invalid Chain")}},N=({inputs:X,outputs:G,feeRate:$=1,chain:J=k.Chain.Bitcoin})=>{let Q=Math.ceil($),L=X[0]&&"address"in X[0]&&X[0].address?x(X[0].address):"P2PKH",Z=X.filter((T)=>y(T)*Q<=T.value),j=$X+G.reduce((T,v)=>T+g(v,L),0),W=G.reduce((T,v)=>T+v.value,0),D=j*Q,q=0,U=[];for(let T of Z){let v=y(T),z=Q*v;D+=z,q+=T.value,U.push(T);let H=D+W;if(q<H)continue;let K=q-H,w=Q*g({address:"",value:0},L);if(K>w){let p=w+D,ZX=q-(W+p);if(ZX>Math.max(y({})*Q,o(J)))return{inputs:U,outputs:G.concat({value:ZX,address:""}),fee:p}}return{inputs:U,outputs:G,fee:D}}return{fee:Q*S({inputs:X,outputs:G,feeRate:Q})}};var EX=1000,$X=10,VX=10;async function O(X){let{script:G,opcodes:$}=await import("bitcoinjs-lib"),J=Buffer.from(X,"utf8");return G.compile([$.OP_RETURN,J])}var r;(($)=>{$.P2PKH="P2PKH";$.P2WPKH="P2WPKH"})(r||={});var n={["P2PKH"]:148,["P2WPKH"]:68},m={["P2PKH"]:34,["P2WPKH"]:31},x=(X)=>{if(X.startsWith("bc1")||X.startsWith("ltc1"))return"P2WPKH";if(X.startsWith("1")||X.startsWith("3")||X.startsWith("L")||X.startsWith("M")||X.startsWith("X")||X.startsWith("D")||X.startsWith("bitcoincash:q")||X.startsWith("q"))return"P2PKH";throw new Error("Invalid address")},S=({inputs:X,outputs:G,feeRate:$})=>{let J=X[0]&&"address"in X[0]&&X[0].address?x(X[0].address):"P2PKH",Q=X.filter((Z)=>Z.value>=n["type"in Z?Z.type:"P2PKH"]*Math.ceil($)).reduce((Z,j)=>Z+y(j),0),L=G?.reduce((Z,j)=>Z+g(j),0)||m[J];return 10+Q+L},y=(X)=>{if("type"in X)return n[X.type];if("address"in X&&X.address)return n[x(X.address)];return 148},g=(X,G)=>{if(X?.script)return 10+X.script.length+(X.script.length>=74?2:1);if(G)return m[G];return m.P2PKH};var B=require("@swapkit/helpers");var l=[B.Chain.Dash,B.Chain.Dogecoin];async function AX({inputs:X,outputs:G,chain:$,psbt:J,sender:Q,compiledMemo:L}){for(let W of X){let D=!!W.witnessUtxo&&!l.includes($)&&{witnessUtxo:W.witnessUtxo},q=l.includes($)&&{nonWitnessUtxo:W.txHex?Buffer.from(W.txHex,"hex"):void 0};J.addInput({hash:W.hash,index:W.index,...D,...q})}let{initEccLib:Z}=await import("bitcoinjs-lib"),j=await import("@bitcoinerlab/secp256k1");for(let W of G){let D="address"in W&&W.address?W.address:Q,q=W.script;if(q&&!L)continue;let U=q?{script:L,value:0}:{address:D,value:W.value};Z(j),J.addOutput(U)}return{psbt:J,inputs:X}}async function TX({assetValue:X,recipient:G,memo:$,feeRate:J,sender:Q,fetchTxHex:L=!1}){let Z=X.chain,{Psbt:j}=await import("bitcoinjs-lib"),W=$?await O($):null,D=await HX({assetValue:X,recipient:G,memo:$,sender:Q,fetchTxHex:L}),{inputs:q,outputs:U}=N({...D,feeRate:J,chain:Z});if(!(q&&U))throw new Error("Insufficient Balance for transaction");let T=await P(),v=new j({network:T(Z)});if(Z===B.Chain.Dogecoin)v.setMaximumFeeRate(650000000);let{psbt:z,inputs:H}=await AX({inputs:q,outputs:U,chain:Z,psbt:v,sender:Q,compiledMemo:W});return{psbt:z,utxos:D.inputs,inputs:H}}async function MX(){let X=await import("@bitcoinerlab/secp256k1"),{initEccLib:G,address:$}=await import("bitcoinjs-lib"),J=await P();return function Q({address:L,chain:Z}){if(Z===B.Chain.BitcoinCash)return E(L);try{return G(X),$.toOutputScript(L,J(Z)),!0}catch(j){return!1}}}async function SX({chain:X,phrase:G,derivationPath:$}){let J=(await c(X))({phrase:G,derivationPath:$});async function Q(Z){return await Z.signAllInputs(J),Z}async function L(){return(await JX(X))(J)}return{getAddress:L,signTransaction:Q}}async function h({chain:X,...G}){let $="phrase"in G?G.phrase:void 0,J="index"in G?G.index||0:0,Q=B.derivationPathToString("derivationPath"in G&&G.derivationPath?G.derivationPath:B.updateDerivationPath(B.NetworkDerivationPath[X],{index:J})),L=$?await SX({chain:X,phrase:$,derivationPath:Q}):("signer"in G)?G.signer:void 0;function Z(){return Promise.resolve(L?.getAddress())}let j=await JX(X),W=await MX(),D=await c(X);return{accumulative:N,calculateTxSize:S,getAddressFromKeys:j,getAddress:Z,validateAddress:(q)=>W({address:q,chain:X}),broadcastTx:(q)=>_(X).broadcastTx(q),createTransaction:TX,createKeysForPath:D,getFeeRates:()=>d(X),getInputsOutputsFee:CX,transfer:fX(L),getPrivateKeyFromMnemonic:(q)=>{return D(q).toWIF()},getBalance:BX(X),estimateTransactionFee:bX(X),estimateMaxSendableAmount:RX(X)}}async function CX({assetValue:X,feeOptionKey:G=B.FeeOption.Fast,feeRate:$,memo:J,sender:Q,recipient:L}){let Z=X.chain,j=await HX({assetValue:X,sender:Q,memo:J,recipient:L}),W=$?Math.floor($):(await d(Z))[G];return N({...j,feeRate:W,chain:Z})}function RX(X){return async function G({from:$,memo:J,feeRate:Q,feeOptionKey:L=B.FeeOption.Fast,recipients:Z=1}){let j=await _(X).getAddressData($),W=Q?Math.ceil(Q):(await d(X))[L],D=j?.utxo.map((z)=>({...z,type:"P2PKH",hash:""})).filter((z)=>z.value>Math.max(o(X),y(z)*W));if(!D?.length)return B.AssetValue.from({chain:X});let q=B.AssetValue.from({chain:X,value:D.reduce((z,H)=>z+H.value,0)}),U=typeof Z==="number"?Array.from({length:Z},()=>({address:$,value:0})):Z;if(J){let z=await O(J);U.push({address:$,script:z,value:0})}let v=S({inputs:D,outputs:U,feeRate:W})*W;return q.sub(v)}}function bX(X){return async(G)=>{let $=await CX(G);return B.AssetValue.from({chain:X,value:B.SwapKitNumber.fromBigInt(BigInt($.fee),8).getValue("string")})}}async function c(X){let{ECPairFactory:G}=await import("ecpair"),$=await import("@bitcoinerlab/secp256k1"),{HDKey:J}=await import("@scure/bip32"),{mnemonicToSeedSync:Q}=await import("@scure/bip39"),L=await P(),{HDNode:Z,ECPair:j}=await import("@psf/bitcoincashjs-lib");switch(X){case B.Chain.BitcoinCash:return function W({phrase:D,derivationPath:q=`${B.DerivationPath.BCH}/0`,wif:U}){let T=L(X);if(U)return j.fromWIF(U,T);if(!D)throw new Error("No phrase provided");return Z.fromSeedBuffer(Buffer.from(Q(D)),T).derivePath(q).keyPair};case B.Chain.Bitcoin:case B.Chain.Dogecoin:case B.Chain.Litecoin:case B.Chain.Dash:return function W({phrase:D,wif:q,derivationPath:U}){if(!(q||D))throw new Error("Either phrase or wif must be provided");let T=G($),v=L(X);if(q)return T.fromWIF(q,v);let z=Q(D),H=J.fromMasterSeed(z,v).derive(U);if(!H.privateKey)throw new Error("Could not get private key from phrase");return T.fromPrivateKey(Buffer.from(H.privateKey),{network:v})};default:throw new Error(`Chain ${X} is not supported`)}}async function JX(X){let{payments:G}=await import("bitcoinjs-lib"),$=await P();return function J(Q){if(!Q)throw new Error("Keys must be provided");let L=l.includes(X)?G.p2pkh:G.p2wpkh,{address:Z}=L({pubkey:Q.publicKey,network:$(X)});if(!Z)throw new Error("Address not defined");return Z}}function fX(X){return async function G({memo:$,recipient:J,feeOptionKey:Q,feeRate:L,assetValue:Z}){let j=await X?.getAddress(),W=Z.chain;if(!(X&&j))throw new Error("From address must be provided");if(!J)throw new Error("Recipient address must be provided");let D=L||(await d(W))[Q||B.FeeOption.Fast],{psbt:q}=await TX({recipient:J,feeRate:D,sender:j,assetValue:Z,memo:$}),U=await X.signTransaction(q);return U.finalizeAllInputs(),_(W).broadcastTx(U.extractTransaction().toHex())}}async function d(X){let G=await _(X).getSuggestedTxFee();return{[B.FeeOption.Average]:G,[B.FeeOption.Fast]:G*1.5,[B.FeeOption.Fastest]:G*2}}async function HX({assetValue:X,recipient:G,memo:$,sender:J,fetchTxHex:Q=!1}){let L=X.chain,Z=Q||l.includes(L);return{inputs:await _(L).scanUTXOs({address:J,fetchTxHex:Z}),outputs:[{address:G,value:Number(X.bigIntValue)},...$?[{address:"",script:await O($),value:0}]:[]]}}var I=F.Chain.BitcoinCash;function R(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function E(X){let G=R(X);return XX(G)&&GX(G)==="mainnet"}function V(X){return R(f(X))}async function gX(X){async function G({builder:J,utxos:Q}){return Q.forEach((L,Z)=>{J.sign(Z,X,void 0,65,L.witnessUtxo?.value)}),J.build()}return{getAddress:()=>{let J=X.getAddress(0);return Promise.resolve(V(J))},signTransaction:G}}async function QX(X){let G="phrase"in X?X.phrase:void 0,$="index"in X?X.index||0:0,J=F.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:F.updateDerivationPath(F.NetworkDerivationPath[I],{index:$})),Q=(await c(I))({phrase:G,derivationPath:J}),L=Q?await gX(Q):("signer"in X)?X.signer:void 0;function Z(){return Promise.resolve(L?.getAddress())}let{getBalance:j,getFeeRates:W,broadcastTx:D,...q}=await h({chain:I});function U(T,v=!0){return j(R(f(T)))}return{...q,getAddress:Z,broadcastTx:D,createTransaction:zX,buildTx:mX,getAddressFromKeys:lX,getBalance:U,getFeeRates:W,stripPrefix:R,stripToCashAddress:V,validateAddress:E,transfer:xX({getFeeRates:W,broadcastTx:D,signer:L})}}async function zX({assetValue:X,recipient:G,memo:$,feeRate:J,sender:Q}){let{Transaction:L,TransactionBuilder:Z,address:j}=await import("@psf/bitcoincashjs-lib");if(!E(G))throw new Error("Invalid address");let W=await _(I).scanUTXOs({address:V(Q),fetchTxHex:!0}),D=$?await O($):null,q=[];q.push({address:G,value:X.getBaseValue("number")});let{inputs:U,outputs:T}=N({inputs:W,outputs:q,feeRate:J,chain:I});if(!(U&&T))throw new Error("Balance insufficient for transaction");let v=await P(),z=new Z(v(I));await Promise.all(U.map(async(H)=>{let K=await _(I).getRawTx(H.hash);z.addInput(L.fromBuffer(Buffer.from(K,"hex")),H.index)}));for(let H of T){let K="address"in H&&H.address?H.address:A(Q),w=await P(),p=j.toOutputScript(A(K),w(I));z.addOutput(p,H.value)}if(D)z.addOutput(D,0);return{builder:z,utxos:U}}function xX({broadcastTx:X,getFeeRates:G,signer:$}){return async function J({recipient:Q,assetValue:L,feeOptionKey:Z=F.FeeOption.Fast,...j}){let W=await $?.getAddress();if(!($&&W))throw new Error("Signer must provider address");if(!Q)throw new Error("Recipient address must be provided");let D=j.feeRate||(await G())[Z],{builder:q,utxos:U}=await zX({...j,assetValue:L,feeRate:D,recipient:Q,sender:W}),v=(await $.signTransaction({builder:q,utxos:U})).toHex();return X(v)}}async function mX({assetValue:X,recipient:G,memo:$,feeRate:J,sender:Q}){let{Psbt:L}=await import("bitcoinjs-lib"),Z=f(G);if(!E(Z))throw new Error("Invalid address");let j=await _(I).scanUTXOs({address:V(Q),fetchTxHex:!0}),W=Number(J.toFixed(0)),D=$?await O($):null,q=[];if(q.push({address:A(G),value:X.getBaseValue("number")}),D)q.push({script:D,value:0});let{inputs:U,outputs:T}=N({inputs:j,outputs:q,feeRate:W,chain:I});if(!(U&&T))throw new Error("Balance insufficient for transaction");let v=await P(),z=new L({network:v(I)});for(let{hash:H,index:K,witnessUtxo:w}of U)z.addInput({hash:H,index:K,witnessUtxo:w});for(let H of T){let K="address"in H&&H.address?H.address:A(Q),w=H.script?D?{script:D,value:0}:void 0:{address:K,value:H.value};if(w)z.addOutput(w)}return{psbt:z,utxos:j,inputs:U}}function lX(X){let G=X.getAddress(0);return V(G)}async function hX(X,G){switch(X){case b.Chain.BitcoinCash:return await QX(G);case b.Chain.Bitcoin:case b.Chain.Dogecoin:case b.Chain.Litecoin:case b.Chain.Dash:return await h({chain:X,...G});default:throw new Error(`Chain ${X} is not supported`)}}
2
-
3
- //# debugId=6B3FC18B75FFD13F64756E2164756E21