@swapkit/toolboxes 1.0.0-beta.0 → 1.0.0-beta.2

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 (103) hide show
  1. package/dist/chunk-0f0249b1.js +3 -0
  2. package/dist/chunk-0f0249b1.js.map +10 -0
  3. package/dist/chunk-0h4xdrwz.js +4 -0
  4. package/dist/chunk-0h4xdrwz.js.map +10 -0
  5. package/dist/chunk-4yap1fvd.js +3 -0
  6. package/dist/chunk-4yap1fvd.js.map +10 -0
  7. package/dist/chunk-fjfxga2v.js +3 -0
  8. package/dist/chunk-fjfxga2v.js.map +10 -0
  9. package/dist/{chunk-tvrdndbw.js → chunk-p1kdg37m.js} +2 -2
  10. package/dist/{chunk-tvrdndbw.js.map → chunk-p1kdg37m.js.map} +1 -1
  11. package/dist/cosmos/index.cjs +2 -2
  12. package/dist/cosmos/index.cjs.map +10 -13
  13. package/dist/cosmos/index.js +2 -2
  14. package/dist/cosmos/index.js.map +10 -13
  15. package/dist/evm/index.cjs +2 -2
  16. package/dist/evm/index.cjs.map +10 -16
  17. package/dist/evm/index.js +2 -2
  18. package/dist/evm/index.js.map +10 -16
  19. package/dist/index.cjs +2 -2
  20. package/dist/index.cjs.map +4 -3
  21. package/dist/index.js +2 -2
  22. package/dist/index.js.map +4 -3
  23. package/dist/radix/index.cjs +2 -2
  24. package/dist/radix/index.cjs.map +3 -3
  25. package/dist/radix/index.js +2 -2
  26. package/dist/radix/index.js.map +3 -3
  27. package/dist/ripple/index.cjs +3 -0
  28. package/dist/ripple/index.cjs.map +10 -0
  29. package/dist/ripple/index.js +3 -0
  30. package/dist/ripple/index.js.map +10 -0
  31. package/dist/solana/index.cjs +2 -2
  32. package/dist/solana/index.cjs.map +3 -3
  33. package/dist/solana/index.js +2 -2
  34. package/dist/solana/index.js.map +3 -3
  35. package/dist/substrate/index.cjs +2 -2
  36. package/dist/substrate/index.cjs.map +5 -6
  37. package/dist/substrate/index.js +2 -2
  38. package/dist/substrate/index.js.map +5 -6
  39. package/dist/utxo/index.cjs +2 -2
  40. package/dist/utxo/index.cjs.map +9 -11
  41. package/dist/utxo/index.js +2 -2
  42. package/dist/utxo/index.js.map +9 -11
  43. package/package.json +30 -24
  44. package/src/cosmos/index.ts +2 -9
  45. package/src/cosmos/thorchainUtils/addressFormat.ts +1 -2
  46. package/src/cosmos/thorchainUtils/index.ts +1 -1
  47. package/src/cosmos/thorchainUtils/messages.ts +74 -56
  48. package/src/cosmos/thorchainUtils/registry.ts +16 -23
  49. package/src/cosmos/thorchainUtils/types/{proto/MsgCompiled.ts → MsgCompiled.ts} +1 -3
  50. package/src/cosmos/thorchainUtils/types/client-types.ts +16 -23
  51. package/src/cosmos/toolbox/cosmos.ts +334 -0
  52. package/src/cosmos/toolbox/index.ts +33 -0
  53. package/src/cosmos/toolbox/thorchain.ts +118 -131
  54. package/src/cosmos/types.ts +37 -18
  55. package/src/cosmos/util.ts +21 -71
  56. package/src/evm/__tests__/ethereum.test.ts +110 -116
  57. package/src/evm/api.ts +11 -147
  58. package/src/evm/helpers.ts +111 -83
  59. package/src/evm/index.ts +1 -17
  60. package/src/evm/toolbox/baseEVMToolbox.ts +742 -0
  61. package/src/evm/toolbox/evm.ts +69 -0
  62. package/src/evm/toolbox/index.ts +36 -0
  63. package/src/evm/toolbox/op.ts +97 -143
  64. package/src/evm/types.ts +50 -28
  65. package/src/index.ts +235 -0
  66. package/src/radix/index.ts +18 -19
  67. package/src/ripple/index.ts +203 -0
  68. package/src/solana/index.ts +11 -5
  69. package/src/solana/toolbox.ts +223 -133
  70. package/src/substrate/index.ts +2 -3
  71. package/src/substrate/{toolbox/baseSubstrateToolbox.ts → substrate.ts} +104 -72
  72. package/src/substrate/types.ts +120 -0
  73. package/src/utils.ts +27 -0
  74. package/src/utxo/helpers/api.ts +27 -23
  75. package/src/utxo/helpers/bchaddrjs.ts +21 -21
  76. package/src/utxo/helpers/index.ts +0 -1
  77. package/src/utxo/helpers/txSize.ts +3 -4
  78. package/src/utxo/index.ts +3 -7
  79. package/src/utxo/toolbox/bitcoinCash.ts +164 -154
  80. package/src/utxo/toolbox/index.ts +63 -24
  81. package/src/utxo/toolbox/utxo.ts +376 -229
  82. package/src/utxo/types.ts +24 -39
  83. package/src/cosmos/thorchainUtils/types/proto/MsgCompiled.js +0 -2806
  84. package/src/cosmos/thorchainUtils/util.ts +0 -46
  85. package/src/cosmos/toolbox/BaseCosmosToolbox.ts +0 -254
  86. package/src/cosmos/toolbox/gaia.ts +0 -39
  87. package/src/cosmos/toolbox/getToolboxByChain.ts +0 -29
  88. package/src/cosmos/toolbox/kujira.ts +0 -61
  89. package/src/evm/provider.ts +0 -6
  90. package/src/evm/toolbox/EVMToolbox.ts +0 -662
  91. package/src/evm/toolbox/arb.ts +0 -61
  92. package/src/evm/toolbox/avax.ts +0 -36
  93. package/src/evm/toolbox/base.ts +0 -42
  94. package/src/evm/toolbox/bsc.ts +0 -34
  95. package/src/evm/toolbox/eth.ts +0 -44
  96. package/src/evm/toolbox/getToolboxByChain.ts +0 -42
  97. package/src/evm/toolbox/matic.ts +0 -42
  98. package/src/radix/toolbox.ts +0 -693
  99. package/src/substrate/toolbox/index.ts +0 -40
  100. package/src/substrate/types/index.ts +0 -2
  101. package/src/substrate/types/network.ts +0 -42
  102. package/src/substrate/types/wallet.ts +0 -78
  103. package/src/utxo/helpers/utils.ts +0 -45
@@ -1,3 +1,3 @@
1
- var c={};n(c,{subtrateNetwork:()=>q,substrateValidateAddress:()=>T,polkadotNetwork:()=>O,isKeyringPair:()=>E,getToolboxByChain:()=>x,createKeyring:()=>z,chainflipNetwork:()=>S,ToolboxFactory:()=>N,PolkadotToolbox:()=>X,Network:()=>D,ChainflipToolbox:()=>Y,BaseSubstrateToolbox:()=>Q});module.exports=V(c);var R=require("@polkadot/api"),L=require("@polkadot/util"),u=require("@polkadot/util-crypto"),f=require("@swapkit/helpers");var O={prefix:0,network:"polkadot",displayName:"Polkadot Relay Chain",symbols:["DOT"],decimals:[10],standardAccount:"*25519",website:"https://polkadot.network"},S={prefix:2112,network:"chainflip",displayName:"Chainflip",symbols:["FLIP"],decimals:[18],standardAccount:"*25519",website:"https://chainflip.io/"},q={prefix:42,network:"substrate",displayName:"Substrate",symbols:[],decimals:[],standardAccount:"*25519",website:"https://substrate.io/"},D={DOT:O,FLIP:S,GENERIC:q};var E=(t)=>{return"address"in t},z=async(t,o)=>{return await u.cryptoWaitReady(),new R.Keyring({type:"sr25519",ss58Format:o}).addFromUri(t)},G=(t,o)=>t.rpc.system.accountNextIndex(o),Z=async(t,o,I)=>{let m=await t.query.system?.account?.(I);if(!m?.data?.free||m?.data?.isEmpty)return[o.set(0)];return[o.set(f.SwapKitNumber.fromBigInt(BigInt(m.data.free.toString()),o.decimal).getValue("string"))]},W=(t,o)=>{try{let I=F(t,o);return J(I,"ss58",o),!0}catch(I){return!1}},H=(t,{recipient:o,amount:I})=>t.tx.balances?.transferAllowDeath?.(o,I),_=async(t,o,{recipient:I,assetValue:m,from:j})=>{let v=H(t,{recipient:I,amount:m.getBaseValue("number")}),p=E(o);if(!v)return;let y=j||(p?o.address:void 0);if(!y)throw new f.SwapKitError("core_transaction_invalid_sender_address");let P=await G(t,y);return(await v.signAndSend(p?o:y,{signer:p?void 0:o,nonce:P}))?.toString()},$=async(t,o,I,{recipient:m,assetValue:j,from:v})=>{let p=H(t,{recipient:m,amount:j.getBaseValue("number")}),y=v||E(o)&&o.address;if(!y)return;let P=await p?.paymentInfo(y,{nonce:await G(t,y)})||{partialFee:0};return I.set(f.SwapKitNumber.fromBigInt(BigInt(P.partialFee.toString()),I.decimal).getValue("string"))},U=async(t,o)=>{if(o)return t.send(o);return(await t.send()).toString()},C=async(t,o)=>{return await o.signAsync(t)},b=(t,o,I)=>{if(I)return o.signAndSend(t,I);return o.signAndSend(t).toString()},B=async({signer:t,address:o,tx:I,callback:m,api:j})=>{let v=await G(j,o);if(m)I.signAndSend(o,{nonce:v,signer:t},m);return I.signAndSend(o,{nonce:v,signer:t}).toString()};function h(t,o){let I=u.decodeAddress(t);return u.encodeAddress(I,o)}function F(t,o){return L.isHex(t)?L.hexToU8a(t):u.decodeAddress(t,void 0,o)}function J(t,o="ss58",I){if(o==="hex")return L.u8aToHex(t);return u.encodeAddress(t,I)}var Q=({api:t,network:o,gasAsset:I,signer:m})=>({api:t,network:o,gasAsset:I,decodeAddress:F,encodeAddress:J,convertAddress:h,createKeyring:(j)=>z(j,o.prefix),getAddress:(j=m)=>E(j)?j.address:void 0,createTransfer:({recipient:j,assetValue:v})=>H(t,{recipient:j,amount:v.getBaseValue("number")}),getBalance:(j)=>Z(t,I,j),validateAddress:(j)=>W(j,o.prefix),transfer:(j)=>_(t,m,j),estimateTransactionFee:(j)=>$(t,m,I,j),sign:(j)=>{if(E(m))return C(m,j);throw new f.SwapKitError("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},broadcast:(j,v)=>U(j,v),signAndBroadcast:({tx:j,callback:v,address:p})=>{if(E(m))return b(m,j,v);if(p)return B({signer:m,address:p,tx:j,callback:v,api:t});throw new f.SwapKitError("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")}}),T=({address:t,chain:o})=>{let{prefix:I}=o===f.Chain.Polkadot?D.DOT:D.FLIP;return W(t,I)||W(t,D.GENERIC.prefix)};async function N({generic:t,chain:o,signer:I}){let m=f.SKConfig.get("rpcUrls")[o],j=new R.WsProvider(m),v=await R.ApiPromise.create({provider:j}),p=f.AssetValue.from({chain:o}),y=t?D.GENERIC:D[o];return Q({api:v,signer:I,gasAsset:p,network:y})}var M=require("@swapkit/helpers");var X=({signer:t,generic:o=!1})=>{return N({chain:M.Chain.Polkadot,generic:o,signer:t})},Y=async({signer:t,generic:o=!1})=>{let I=await N({chain:M.Chain.Chainflip,generic:o,signer:t});async function m(j){let{balance:v}=await I.api.query.flip?.account?.(j);return[M.AssetValue.from({chain:M.Chain.Chainflip,value:BigInt(v.toString())})]}return{...I,getBalance:m}},x=(t,o)=>{switch(t){case M.Chain.Chainflip:return Y(o);case M.Chain.Polkadot:return X(o);default:throw new Error(`Chain ${t} is not supported`)}};
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
2
 
3
- //# debugId=FAD382FC548F30DD64756E2164756E21
3
+ //# debugId=A50FE46AF6A5592C64756E2164756E21
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/substrate/toolbox/baseSubstrateToolbox.ts", "../src/substrate/types/network.ts", "../src/substrate/toolbox/index.ts"],
3
+ "sources": ["../src/substrate/substrate.ts", "../src/substrate/types.ts"],
4
4
  "sourcesContent": [
5
- "import { ApiPromise, Keyring, WsProvider } 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 cryptoWaitReady,\n decodeAddress as decodePolkadotAddress,\n encodeAddress as encodePolkadotAddress,\n} from \"@polkadot/util-crypto\";\nimport {\n AssetValue,\n Chain,\n SKConfig,\n type SubstrateChain,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\n\nimport { Network, type SubstrateNetwork } from \"../types/network\";\n\n// TODO combine this type with the more general SK type\ntype SubstrateTransferParams = {\n recipient: string;\n assetValue: AssetValue;\n from?: string;\n};\n\nexport const isKeyringPair = (account: IKeyringPair | Signer): account is IKeyringPair => {\n return \"address\" in account;\n};\n\nexport const createKeyring = async (phrase: string, networkPrefix: number) => {\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 getBalance = async (api: ApiPromise, gasAsset: AssetValue, address: string) => {\n const data = await api.query.system?.account?.(address);\n\n // @ts-expect-error @Towan some parts of data missing?\n if (!data?.data?.free || data?.data?.isEmpty) {\n return [gasAsset.set(0)];\n }\n\n return [\n gasAsset.set(\n // @ts-expect-error @Towan some parts of data missing?\n SwapKitNumber.fromBigInt(BigInt(data.data.free.toString()), gasAsset.decimal).getValue(\n \"string\",\n ),\n ),\n ];\n};\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 createTransfer = (\n api: ApiPromise,\n { recipient, amount }: { recipient: string; amount: number },\n) => api.tx.balances?.transferAllowDeath?.(recipient, amount);\n\nconst transfer = async (\n api: ApiPromise,\n signer: IKeyringPair | Signer,\n { recipient, assetValue, from }: SubstrateTransferParams,\n) => {\n const transfer = createTransfer(api, {\n recipient,\n amount: assetValue.getBaseValue(\"number\"),\n });\n\n const isKeyring = isKeyringPair(signer);\n\n if (!transfer) return;\n\n const address = from || (isKeyring ? (signer as IKeyringPair).address : undefined);\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, from }: SubstrateTransferParams,\n) => {\n const transfer = createTransfer(api, { recipient, amount: assetValue.getBaseValue(\"number\") });\n\n const address = from || (isKeyringPair(signer) && signer.address);\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 createKeyring: (phrase: string) => createKeyring(phrase, network.prefix),\n getAddress: (keyring: IKeyringPair | Signer = signer) =>\n isKeyringPair(keyring) ? keyring.address : undefined,\n createTransfer: ({ recipient, assetValue }: { recipient: string; assetValue: AssetValue }) =>\n createTransfer(api, { recipient, amount: assetValue.getBaseValue(\"number\") }),\n getBalance: (address: string) => getBalance(api, gasAsset, address),\n validateAddress: (address: string) => validateAddress(address, network.prefix),\n transfer: (params: SubstrateTransferParams) => transfer(api, signer, params),\n estimateTransactionFee: (params: SubstrateTransferParams) =>\n estimateTransactionFee(api, signer, gasAsset, params),\n sign: (tx: SubmittableExtrinsic<\"promise\">) => {\n if (isKeyringPair(signer)) {\n 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: (tx: SubmittableExtrinsic<\"promise\">, callback?: Callback<ISubmittableResult>) =>\n broadcast(tx, callback),\n signAndBroadcast: ({\n tx,\n callback,\n address,\n }: {\n tx: SubmittableExtrinsic<\"promise\">;\n callback?: Callback<ISubmittableResult>;\n address?: string;\n }) => {\n if (isKeyringPair(signer)) {\n return signAndBroadcastKeyring(signer, tx, callback);\n }\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 ? Network.DOT : Network.FLIP;\n\n return validateAddress(address, prefix) || validateAddress(address, Network.GENERIC.prefix);\n};\n\nexport async function ToolboxFactory({\n generic,\n chain,\n signer,\n}: ToolboxParams & { chain: SubstrateChain }) {\n const rpcUrl = SKConfig.get(\"rpcUrls\")[chain];\n const provider = new WsProvider(rpcUrl);\n const api = await ApiPromise.create({ provider });\n const gasAsset = AssetValue.from({ chain });\n const network = generic ? Network.GENERIC : Network[chain];\n\n return BaseSubstrateToolbox({ api, signer, gasAsset, network });\n}\n\nexport type ToolboxParams = {\n generic?: boolean;\n signer: KeyringPair | Signer;\n};\n\nexport type BaseSubstrateWallet = ReturnType<typeof BaseSubstrateToolbox>;\nexport type SubstrateWallets = {\n [chain in SubstrateChain]: BaseSubstrateWallet;\n};\n",
6
- "import type { SubstrateChain } from \"@swapkit/helpers\";\n\nexport const 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\nexport const 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\nexport const 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 Network: 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",
7
- "import { AssetValue, Chain } from \"@swapkit/helpers\";\n\nimport { ToolboxFactory, type ToolboxParams } from \"./baseSubstrateToolbox\";\n\nexport const PolkadotToolbox = ({ signer, generic = false }: ToolboxParams) => {\n return ToolboxFactory({ chain: Chain.Polkadot, generic, signer });\n};\n\nexport const ChainflipToolbox = async ({ signer, generic = false }: ToolboxParams) => {\n const toolbox = await ToolboxFactory({ chain: Chain.Chainflip, generic, signer });\n\n async function getBalance(address: string) {\n // @ts-expect-error @Towan some parts of data missing?\n // biome-ignore lint/correctness/noUnsafeOptionalChaining: @Towan some parts of data missing?\n const { balance } = await toolbox.api.query.flip?.account?.(address);\n\n return [AssetValue.from({ chain: Chain.Chainflip, value: BigInt(balance.toString()) })];\n }\n\n return { ...toolbox, getBalance };\n};\n\ntype ToolboxType = {\n DOT: ReturnType<typeof PolkadotToolbox>;\n FLIP: ReturnType<typeof ChainflipToolbox>;\n};\n\nexport const getToolboxByChain = <T extends keyof ToolboxType>(\n chain: T,\n params: ToolboxParams,\n): ToolboxType[T] => {\n switch (chain) {\n case Chain.Chainflip:\n return ChainflipToolbox(params);\n case Chain.Polkadot:\n return PolkadotToolbox(params);\n default:\n throw new Error(`Chain ${chain} is not supported`);\n }\n};\n"
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"
8
7
  ],
9
- "mappings": "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",
10
- "debugId": "FAD382FC548F30DD64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "A50FE46AF6A5592C64756E2164756E21",
11
10
  "names": []
12
11
  }
@@ -1,3 +1,3 @@
1
- import"../chunk-tvrdndbw.js";import{ApiPromise as J,Keyring as Q,WsProvider as X}from"@polkadot/api";import{hexToU8a as Y,isHex as Z,u8aToHex as _}from"@polkadot/util";import{cryptoWaitReady as $,decodeAddress as W,encodeAddress as G}from"@polkadot/util-crypto";import{AssetValue as U,Chain as C,SKConfig as b,SwapKitError as E,SwapKitNumber as H}from"@swapkit/helpers";var q={prefix:0,network:"polkadot",displayName:"Polkadot Relay Chain",symbols:["DOT"],decimals:[10],standardAccount:"*25519",website:"https://polkadot.network"},z={prefix:2112,network:"chainflip",displayName:"Chainflip",symbols:["FLIP"],decimals:[18],standardAccount:"*25519",website:"https://chainflip.io/"},F={prefix:42,network:"substrate",displayName:"Substrate",symbols:[],decimals:[],standardAccount:"*25519",website:"https://substrate.io/"},y={DOT:q,FLIP:z,GENERIC:F};var u=(t)=>{return"address"in t},B=async(t,o)=>{return await $(),new Q({type:"sr25519",ss58Format:o}).addFromUri(t)},L=(t,o)=>t.rpc.system.accountNextIndex(o),h=async(t,o,I)=>{let m=await t.query.system?.account?.(I);if(!m?.data?.free||m?.data?.isEmpty)return[o.set(0)];return[o.set(H.fromBigInt(BigInt(m.data.free.toString()),o.decimal).getValue("string"))]},R=(t,o)=>{try{let I=O(t,o);return S(I,"ss58",o),!0}catch(I){return!1}},N=(t,{recipient:o,amount:I})=>t.tx.balances?.transferAllowDeath?.(o,I),T=async(t,o,{recipient:I,assetValue:m,from:j})=>{let v=N(t,{recipient:I,amount:m.getBaseValue("number")}),f=u(o);if(!v)return;let p=j||(f?o.address:void 0);if(!p)throw new E("core_transaction_invalid_sender_address");let D=await L(t,p);return(await v.signAndSend(f?o:p,{signer:f?void 0:o,nonce:D}))?.toString()},x=async(t,o,I,{recipient:m,assetValue:j,from:v})=>{let f=N(t,{recipient:m,amount:j.getBaseValue("number")}),p=v||u(o)&&o.address;if(!p)return;let D=await f?.paymentInfo(p,{nonce:await L(t,p)})||{partialFee:0};return I.set(H.fromBigInt(BigInt(D.partialFee.toString()),I.decimal).getValue("string"))},V=async(t,o)=>{if(o)return t.send(o);return(await t.send()).toString()},n=async(t,o)=>{return await o.signAsync(t)},c=(t,o,I)=>{if(I)return o.signAndSend(t,I);return o.signAndSend(t).toString()},w=async({signer:t,address:o,tx:I,callback:m,api:j})=>{let v=await L(j,o);if(m)I.signAndSend(o,{nonce:v,signer:t},m);return I.signAndSend(o,{nonce:v,signer:t}).toString()};function K(t,o){let I=W(t);return G(I,o)}function O(t,o){return Z(t)?Y(t):W(t,void 0,o)}function S(t,o="ss58",I){if(o==="hex")return _(t);return G(t,I)}var e=({api:t,network:o,gasAsset:I,signer:m})=>({api:t,network:o,gasAsset:I,decodeAddress:O,encodeAddress:S,convertAddress:K,createKeyring:(j)=>B(j,o.prefix),getAddress:(j=m)=>u(j)?j.address:void 0,createTransfer:({recipient:j,assetValue:v})=>N(t,{recipient:j,amount:v.getBaseValue("number")}),getBalance:(j)=>h(t,I,j),validateAddress:(j)=>R(j,o.prefix),transfer:(j)=>T(t,m,j),estimateTransactionFee:(j)=>x(t,m,I,j),sign:(j)=>{if(u(m))return n(m,j);throw new E("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},broadcast:(j,v)=>V(j,v),signAndBroadcast:({tx:j,callback:v,address:f})=>{if(u(m))return c(m,j,v);if(f)return w({signer:m,address:f,tx:j,callback:v,api:t});throw new E("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")}}),ot=({address:t,chain:o})=>{let{prefix:I}=o===C.Polkadot?y.DOT:y.FLIP;return R(t,I)||R(t,y.GENERIC.prefix)};async function P({generic:t,chain:o,signer:I}){let m=b.get("rpcUrls")[o],j=new X(m),v=await J.create({provider:j}),f=U.from({chain:o}),p=t?y.GENERIC:y[o];return e({api:v,signer:I,gasAsset:f,network:p})}import{AssetValue as k,Chain as M}from"@swapkit/helpers";var l=({signer:t,generic:o=!1})=>{return P({chain:M.Polkadot,generic:o,signer:t})},A=async({signer:t,generic:o=!1})=>{let I=await P({chain:M.Chainflip,generic:o,signer:t});async function m(j){let{balance:v}=await I.api.query.flip?.account?.(j);return[k.from({chain:M.Chainflip,value:BigInt(v.toString())})]}return{...I,getBalance:m}},vt=(t,o)=>{switch(t){case M.Chainflip:return A(o);case M.Polkadot:return l(o);default:throw new Error(`Chain ${t} is not supported`)}};export{F as subtrateNetwork,ot as substrateValidateAddress,q as polkadotNetwork,u as isKeyringPair,vt as getToolboxByChain,B as createKeyring,z as chainflipNetwork,P as ToolboxFactory,l as PolkadotToolbox,y as Network,A as ChainflipToolbox,e as BaseSubstrateToolbox};
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
2
 
3
- //# debugId=A5BCCBBFDFBE7EA664756E2164756E21
3
+ //# debugId=4662675F7CC450C464756E2164756E21
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/substrate/toolbox/baseSubstrateToolbox.ts", "../src/substrate/types/network.ts", "../src/substrate/toolbox/index.ts"],
3
+ "sources": ["../src/substrate/substrate.ts", "../src/substrate/types.ts"],
4
4
  "sourcesContent": [
5
- "import { ApiPromise, Keyring, WsProvider } 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 cryptoWaitReady,\n decodeAddress as decodePolkadotAddress,\n encodeAddress as encodePolkadotAddress,\n} from \"@polkadot/util-crypto\";\nimport {\n AssetValue,\n Chain,\n SKConfig,\n type SubstrateChain,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\n\nimport { Network, type SubstrateNetwork } from \"../types/network\";\n\n// TODO combine this type with the more general SK type\ntype SubstrateTransferParams = {\n recipient: string;\n assetValue: AssetValue;\n from?: string;\n};\n\nexport const isKeyringPair = (account: IKeyringPair | Signer): account is IKeyringPair => {\n return \"address\" in account;\n};\n\nexport const createKeyring = async (phrase: string, networkPrefix: number) => {\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 getBalance = async (api: ApiPromise, gasAsset: AssetValue, address: string) => {\n const data = await api.query.system?.account?.(address);\n\n // @ts-expect-error @Towan some parts of data missing?\n if (!data?.data?.free || data?.data?.isEmpty) {\n return [gasAsset.set(0)];\n }\n\n return [\n gasAsset.set(\n // @ts-expect-error @Towan some parts of data missing?\n SwapKitNumber.fromBigInt(BigInt(data.data.free.toString()), gasAsset.decimal).getValue(\n \"string\",\n ),\n ),\n ];\n};\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 createTransfer = (\n api: ApiPromise,\n { recipient, amount }: { recipient: string; amount: number },\n) => api.tx.balances?.transferAllowDeath?.(recipient, amount);\n\nconst transfer = async (\n api: ApiPromise,\n signer: IKeyringPair | Signer,\n { recipient, assetValue, from }: SubstrateTransferParams,\n) => {\n const transfer = createTransfer(api, {\n recipient,\n amount: assetValue.getBaseValue(\"number\"),\n });\n\n const isKeyring = isKeyringPair(signer);\n\n if (!transfer) return;\n\n const address = from || (isKeyring ? (signer as IKeyringPair).address : undefined);\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, from }: SubstrateTransferParams,\n) => {\n const transfer = createTransfer(api, { recipient, amount: assetValue.getBaseValue(\"number\") });\n\n const address = from || (isKeyringPair(signer) && signer.address);\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 createKeyring: (phrase: string) => createKeyring(phrase, network.prefix),\n getAddress: (keyring: IKeyringPair | Signer = signer) =>\n isKeyringPair(keyring) ? keyring.address : undefined,\n createTransfer: ({ recipient, assetValue }: { recipient: string; assetValue: AssetValue }) =>\n createTransfer(api, { recipient, amount: assetValue.getBaseValue(\"number\") }),\n getBalance: (address: string) => getBalance(api, gasAsset, address),\n validateAddress: (address: string) => validateAddress(address, network.prefix),\n transfer: (params: SubstrateTransferParams) => transfer(api, signer, params),\n estimateTransactionFee: (params: SubstrateTransferParams) =>\n estimateTransactionFee(api, signer, gasAsset, params),\n sign: (tx: SubmittableExtrinsic<\"promise\">) => {\n if (isKeyringPair(signer)) {\n 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: (tx: SubmittableExtrinsic<\"promise\">, callback?: Callback<ISubmittableResult>) =>\n broadcast(tx, callback),\n signAndBroadcast: ({\n tx,\n callback,\n address,\n }: {\n tx: SubmittableExtrinsic<\"promise\">;\n callback?: Callback<ISubmittableResult>;\n address?: string;\n }) => {\n if (isKeyringPair(signer)) {\n return signAndBroadcastKeyring(signer, tx, callback);\n }\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 ? Network.DOT : Network.FLIP;\n\n return validateAddress(address, prefix) || validateAddress(address, Network.GENERIC.prefix);\n};\n\nexport async function ToolboxFactory({\n generic,\n chain,\n signer,\n}: ToolboxParams & { chain: SubstrateChain }) {\n const rpcUrl = SKConfig.get(\"rpcUrls\")[chain];\n const provider = new WsProvider(rpcUrl);\n const api = await ApiPromise.create({ provider });\n const gasAsset = AssetValue.from({ chain });\n const network = generic ? Network.GENERIC : Network[chain];\n\n return BaseSubstrateToolbox({ api, signer, gasAsset, network });\n}\n\nexport type ToolboxParams = {\n generic?: boolean;\n signer: KeyringPair | Signer;\n};\n\nexport type BaseSubstrateWallet = ReturnType<typeof BaseSubstrateToolbox>;\nexport type SubstrateWallets = {\n [chain in SubstrateChain]: BaseSubstrateWallet;\n};\n",
6
- "import type { SubstrateChain } from \"@swapkit/helpers\";\n\nexport const 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\nexport const 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\nexport const 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 Network: 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",
7
- "import { AssetValue, Chain } from \"@swapkit/helpers\";\n\nimport { ToolboxFactory, type ToolboxParams } from \"./baseSubstrateToolbox\";\n\nexport const PolkadotToolbox = ({ signer, generic = false }: ToolboxParams) => {\n return ToolboxFactory({ chain: Chain.Polkadot, generic, signer });\n};\n\nexport const ChainflipToolbox = async ({ signer, generic = false }: ToolboxParams) => {\n const toolbox = await ToolboxFactory({ chain: Chain.Chainflip, generic, signer });\n\n async function getBalance(address: string) {\n // @ts-expect-error @Towan some parts of data missing?\n // biome-ignore lint/correctness/noUnsafeOptionalChaining: @Towan some parts of data missing?\n const { balance } = await toolbox.api.query.flip?.account?.(address);\n\n return [AssetValue.from({ chain: Chain.Chainflip, value: BigInt(balance.toString()) })];\n }\n\n return { ...toolbox, getBalance };\n};\n\ntype ToolboxType = {\n DOT: ReturnType<typeof PolkadotToolbox>;\n FLIP: ReturnType<typeof ChainflipToolbox>;\n};\n\nexport const getToolboxByChain = <T extends keyof ToolboxType>(\n chain: T,\n params: ToolboxParams,\n): ToolboxType[T] => {\n switch (chain) {\n case Chain.Chainflip:\n return ChainflipToolbox(params);\n case Chain.Polkadot:\n return PolkadotToolbox(params);\n default:\n throw new Error(`Chain ${chain} is not supported`);\n }\n};\n"
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"
8
7
  ],
9
- "mappings": "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",
10
- "debugId": "A5BCCBBFDFBE7EA664756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "4662675F7CC450C464756E2164756E21",
11
10
  "names": []
12
11
  }
@@ -1,3 +1,3 @@
1
- var z$={};v$(z$,{validateAddress:()=>E,utxoValidateAddress:()=>X$,uniqid:()=>QG,toLegacyAddress:()=>g,toCashAddress:()=>m,stripToCashAddress:()=>f,stripPrefix:()=>R,standardFeeRates:()=>JG,nonSegwitChains:()=>r,networks:()=>l.networks,isValidAddress:()=>DG,getUtxoApi:()=>b,getToolboxByChain:()=>q$,getScriptTypeForAddress:()=>h,getOutputSize:()=>o,getNetwork:()=>Y,getInputSize:()=>N,getDustThreshold:()=>i,detectAddressNetwork:()=>WG,createCustomUtxoApi:()=>cG,compileMemo:()=>_,calculateTxSize:()=>x,buildTx:()=>qG,accumulative:()=>V,UTXOScriptType:()=>a,Transaction:()=>l.Transaction,TX_OVERHEAD:()=>t,Psbt:()=>l.Psbt,OutputSizes:()=>p,OP_RETURN_OVERHEAD:()=>bG,Network:()=>LG,MIN_TX_FEE:()=>aG,LTCToolbox:()=>gG,InputSizes:()=>s,DOGEToolbox:()=>SG,DASHToolbox:()=>AG,BaseUTXOToolbox:()=>k,BTCToolbox:()=>EG,BCHToolbox:()=>OG});module.exports=M$(z$);var l=require("bitcoinjs-lib");var I=require("@swapkit/helpers");var Z$=y(require("@bitcoinerlab/secp256k1")),K=require("@psf/bitcoincashjs-lib"),_G=require("@scure/bip39"),A=require("@swapkit/helpers"),kG=require("bitcoinjs-lib");var B=require("@swapkit/helpers");var C=require("@swapkit/helpers"),PG=require("bitcoinjs-lib"),S=y(require("coininfo")),xG=typeof process!=="undefined"&&process.pid?process.pid.toString(36):"",Y=(G)=>{switch(G){case C.Chain.Bitcoin:return PG.networks.bitcoin;case C.Chain.BitcoinCash:return S.default.bitcoincash.main.toBitcoinJS();case C.Chain.Dash:return S.default.dash.main.toBitcoinJS();case C.Chain.Litecoin:return S.default.litecoin.main.toBitcoinJS();case C.Chain.Dogecoin:{let $={private:70615956,public:70617039},J=S.default.dogecoin.test;return J.versions.bip32=$,S.default.dogecoin.main.toBitcoinJS()}default:throw new Error("Invalid chain")}},JG=(G)=>({[C.FeeOption.Average]:G,[C.FeeOption.Fast]:G*1.5,[C.FeeOption.Fastest]:G*2}),$G=0,RG=()=>{let G=Date.now(),$=$G||G;return $G=$,G>$G?G:$+1},QG=()=>xG+RG().toString(36);async function fG({chain:G,txHash:$}){let J=B.SKConfig.get("rpcUrls")[G],Q=JSON.stringify({jsonrpc:"2.0",method:"sendrawtransaction",params:[$],id:QG()}),X=await B.RequestClient.post(J,{headers:{"Content-Type":"application/json"},body:Q});if(X.error)throw new Error(`failed to broadcast a transaction: ${X.error?.message}`);if(X.result.includes('"code":-26'))throw new Error("Invalid transaction: the transaction amount was too low");return X.result}function c(G){return`https://api.blockchair.com/${lG(G)}`}function UG(G){switch(G){case B.Chain.Bitcoin:return 5;case B.Chain.Dogecoin:return 1e4;case B.Chain.Litecoin:return 1;default:return 2}}function lG(G){switch(G){case B.Chain.BitcoinCash:return"bitcoin-cash";case B.Chain.Litecoin:return"litecoin";case B.Chain.Dash:return"dash";case B.Chain.Dogecoin:return"dogecoin";case B.Chain.Polkadot:return"polkadot";default:return"bitcoin"}}async function mG(G){try{let{feePerKb:$}=await B.RequestClient.get(`https://app.bitgo.com/api/v2/${G.toLowerCase()}/tx/fee`),J=$/1000;return Math.max(J,UG(G))}catch($){return UG(G)}}async function n(G,$){try{let J=await B.RequestClient.get(G);if(!J||J.context.code!==200)throw new Error(`failed to query ${G}`);return J.data}catch(J){if(!$)throw J;let Q=await B.RequestClient.get(`${G}${$?`&key=${$}`:""}`);if(!Q||Q.context.code!==200)throw new Error(`failed to query ${G}`);return Q.data}}async function BG({address:G,chain:$,apiKey:J}){if(!G)throw new Error("address is required");try{return(await n(`${c($)}/dashboards/address/${G}?transaction_details=true`,J))[G]}catch(Q){return{utxo:[],address:{balance:0,transaction_count:0}}}}async function oG({address:G,chain:$,apiKey:J}){return(await BG({address:G,chain:$,apiKey:J}))?.address.balance||0}async function hG({chain:G,address:$,apiKey:J}){if(!$)throw new Error("address is required");try{return(await n(`${c(G)}/addresses/balances?addresses=${$}`,J))[$]||0}catch(Q){return 0}}async function TG({chain:G,apiKey:$,txHash:J}){if(!J)throw new Error("txHash is required");try{return(await n(`${c(G)}/raw/transaction/${J}`,$))?.[J]?.raw_transaction||""}catch(Q){return console.error(Q),""}}async function pG({chain:G,address:$,apiKey:J,offset:Q=0,limit:X=100}){return(await n(`${c(G)}/outputs?q=is_spent(false),recipient(${$})&limit=${X}&offset=${Q}`,J)).filter(({is_spent:W})=>!W).map(({script_hex:W,block_id:D,transaction_hash:z,index:q,value:j,spending_signature_hex:M})=>({hash:z,index:q,value:j,txHex:M,script_hex:W,is_confirmed:D!==-1}))}async function HG({chain:G,address:$,apiKey:J,offset:Q=0,limit:X=100}){if(!$)throw new Error("address is required");try{let L=await pG({chain:G,address:$,apiKey:J,offset:Q,limit:X});if(L.length<=X)return L;let Z=await HG({chain:G,address:$,apiKey:J,offset:Q+X,limit:X});return[...L,...Z]}catch(L){return console.error(L),[]}}async function rG({address:G,chain:$,apiKey:J,fetchTxHex:Q=!0}){let X=await HG({chain:$,address:G,apiKey:J}),L=[];for(let{hash:Z,index:W,script_hex:D,value:z}of X){let q;if(Q)q=await TG({txHash:Z,chain:$,apiKey:J});L.push({address:G,hash:Z,index:W,txHex:q,value:z,witnessUtxo:{value:z,script:Buffer.from(D,"hex")}})}return L}function uG(G){let $=B.SKConfig.get("apiKeys").blockchair||"";return B.warnOnce(!$,"No Blockchair API key found. Functionality will be limited."),{broadcastTx:(J)=>fG({txHash:J,chain:G}),getConfirmedBalance:(J)=>hG({chain:G,address:J,apiKey:$}),getRawTx:(J)=>TG({txHash:J,chain:G,apiKey:$}),getSuggestedTxFee:()=>mG(G),getBalance:(J)=>oG({address:J,chain:G,apiKey:$}),getAddressData:(J)=>BG({address:J,chain:G,apiKey:$}),scanUTXOs:(J)=>rG({...J,chain:G,apiKey:$})}}function cG(G){return G}function b(G){let $=B.SKConfig.get("apis")[G];if($)return B.warnOnce(!0,"Using custom UTXO API. Be sure to implement all methods to avoid issues."),$;return uG(G)}var XG=y(require("bs58check")),ZG=y(require("cashaddrjs"));var LG;((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(LG||={});var P={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}};function DG(G){try{return d(G),!0}catch($){return!1}}function WG(G){return d(G)?.network}function g(G){let $=d(G);if($?.format==="legacy")return G;return iG($)}function m(G){let $=d(G);return tG($)}function d(G){try{return nG(G)}catch($){}try{return dG(G)}catch($){}throw new Error("Received an invalid Bitcoin Cash address as input.")}function nG(G){try{let $=XG.default.decode(G);if($.length!==21)throw new Error("Received an invalid Bitcoin Cash address as input.");let J=$[0],Q=Array.prototype.slice.call($,1);switch(J){case P.legacy.mainnet.p2pkh:return{hash:Q,format:"legacy",network:"mainnet",type:"p2pkh"};case P.legacy.mainnet.p2sh:return{hash:Q,format:"legacy",network:"mainnet",type:"p2sh"};case P.legacy.testnet.p2pkh:return{hash:Q,format:"legacy",network:"testnet",type:"p2pkh"};case P.legacy.testnet.p2sh:return{hash:Q,format:"legacy",network:"testnet",type:"p2sh"};case P.bitpay.mainnet.p2pkh:return{hash:Q,format:"bitpay",network:"mainnet",type:"p2pkh"};case P.bitpay.mainnet.p2sh:return{hash:Q,format:"bitpay",network:"mainnet",type:"p2sh"};default:throw new Error("Received an invalid Bitcoin Cash address as input.")}}catch($){throw new Error("Received an invalid Bitcoin Cash address as input.")}}function dG(G){if(G.indexOf(":")!==-1)try{return YG(G)}catch($){}else{let $=["bitcoincash","bchtest","bchreg"];for(let J of $)try{return YG(`${J}:${G}`)}catch(Q){}}throw new Error("Received an invalid Bitcoin Cash address as input.")}function YG(G){try{let{hash:$,prefix:J,type:Q}=ZG.default.decode(G);return{format:"cashaddr",hash:Array.prototype.slice.call($,0),network:J==="bitcoincash"?"mainnet":"testnet",type:Q==="P2PKH"?"p2pkh":"p2sh"}}catch($){throw new Error("Received an invalid Bitcoin Cash address as input.")}}function iG(G){let $=P.legacy[G.network][G.type],J=Buffer.alloc(1+G.hash.length);return J[0]=$,J.set(G.hash,1),XG.default.encode(J)}function tG(G){let $=G.network==="mainnet"?"bitcoincash":"bchtest",J=G.type==="p2pkh"?"P2PKH":"P2SH",Q=new Uint8Array(G.hash);return ZG.default.encode($,J,Q)}var O=require("@swapkit/helpers");var i=(G)=>{switch(G){case O.Chain.Bitcoin:case O.Chain.BitcoinCash:return 550;case O.Chain.Dash:case O.Chain.Litecoin:return 5500;case O.Chain.Dogecoin:return 1e5;default:throw new Error("Invalid Chain")}},V=({inputs:G,outputs:$,feeRate:J=1,chain:Q=O.Chain.Bitcoin})=>{let X=Math.ceil(J),L=G[0]&&"address"in G[0]&&G[0].address?h(G[0].address):"P2PKH",Z=G.filter((M)=>N(M)*X<=M.value),W=t+$.reduce((M,U)=>M+o(U,L),0),D=$.reduce((M,U)=>M+U.value,0),z=W*X,q=0,j=[];for(let M of Z){let U=N(M),v=X*U;z+=v,q+=M.value,j.push(M);let H=z+D;if(q<H)continue;let u=q-H,MG=X*o({address:"",value:0},L);if(u>MG){let vG=MG+z,zG=q-(D+vG);if(zG>Math.max(N({})*X,i(Q)))return{inputs:j,outputs:$.concat({value:zG,address:""}),fee:vG}}return{inputs:j,outputs:$,fee:z}}return{fee:X*x({inputs:G,outputs:$,feeRate:X})}};var e=require("bitcoinjs-lib"),aG=1000,t=10,bG=10,sG=41,eG=107,_=(G)=>{let $=Buffer.from(G,"utf8");return e.script.compile([e.opcodes.OP_RETURN,$])},a;((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(a||={});var s={["P2PKH"]:148,["P2WPKH"]:68},p={["P2PKH"]:34,["P2WPKH"]:31},h=(G)=>{if(G.startsWith("bc1")||G.startsWith("ltc1"))return"P2WPKH";if(G.startsWith("1")||G.startsWith("3")||G.startsWith("L")||G.startsWith("M")||G.startsWith("X")||G.startsWith("D")||G.startsWith("bitcoincash:q")||G.startsWith("q"))return"P2PKH";throw new Error("Invalid address")},x=({inputs:G,outputs:$,feeRate:J})=>{let Q=G[0]&&"address"in G[0]&&G[0].address?h(G[0].address):"P2PKH",X=G.filter((Z)=>Z.value>=s["type"in Z?Z.type:"P2PKH"]*Math.ceil(J)).reduce((Z,W)=>Z+N(W),0),L=$?.reduce((Z,W)=>Z+o(W),0)||p[Q];return t+X+L},N=(G)=>{if("type"in G)return s[G.type];if("address"in G&&G.address)return s[h(G.address)];return sG+eG},o=(G,$)=>{if(G?.script)return bG+G.script.length+(G.script.length>=74?2:1);if($)return p[$];return p.P2PKH};var jG=y(require("@bitcoinerlab/secp256k1")),IG=require("@scure/bip32"),wG=require("@scure/bip39"),T=require("@swapkit/helpers"),F=require("bitcoinjs-lib");var r=[T.Chain.Dash,T.Chain.Dogecoin];async function CG({phrase:G,wif:$,derivationPath:J,chain:Q}){let{ECPairFactory:X}=await import("ecpair");if(!($||G))throw new Error("Either phrase or wif must be provided");let L=X(jG),Z=Y(Q);if($)return L.fromWIF($,Z);let W=wG.mnemonicToSeedSync(G),D=IG.HDKey.fromMasterSeed(W,Z).derive(J);if(!D.privateKey)throw new Error("Could not get private key from phrase");return L.fromPrivateKey(Buffer.from(D.privateKey),{network:Z})}function NG({address:G,chain:$}){try{return F.initEccLib(jG),F.address.toOutputScript(G,Y($)),!0}catch(J){return!1}}function G$({keys:G,chain:$}){if(!G)throw new Error("Keys must be provided");let J=r.includes($)?F.payments.p2pkh:F.payments.p2wpkh,{address:Q}=J({pubkey:G.publicKey,network:Y($)});if(!Q)throw new Error("Address not defined");return Q}function $$(G){return async function $({signTransaction:J,from:Q,memo:X,recipient:L,feeOptionKey:Z,broadcastTx:W,feeRate:D,assetValue:z}){if(!Q)throw new Error("From address must be provided");if(!L)throw new Error("Recipient address must be provided");if(!J)throw new Error("Sign transaction must be provided");let q=D||(await GG(G))[Z||T.FeeOption.Fast],{psbt:j}=await qG(G)({recipient:L,feeRate:q,sender:Q,fetchTxHex:r.includes(G),assetValue:z,memo:X}),M=await J(j);return M.finalizeAllInputs(),W(M.extractTransaction().toHex())}}var J$=async({address:G,chain:$})=>{let J=await b($).getBalance(G),Q=T.SwapKitNumber.fromBigInt(BigInt(J),T.BaseDecimal[$]).getValue("string");return[T.AssetValue.from({asset:`${$}.${$}`,value:Q})]};async function GG(G){let $=await b(G).getSuggestedTxFee();return JG($)}function VG(G){return async function $({assetValue:J,recipient:Q,memo:X,sender:L,fetchTxHex:Z=!1}){return{inputs:await b(G).scanUTXOs({address:L,fetchTxHex:Z}),outputs:[{address:Q,value:Number(J.bigIntValue)},...X?[{address:"",script:_(X),value:0}]:[]]}}}function qG(G){return async function $({assetValue:J,recipient:Q,memo:X,feeRate:L,sender:Z,fetchTxHex:W=!1}){let D=X?_(X):null,q=await VG(G)({assetValue:J,recipient:Q,memo:X,sender:Z,fetchTxHex:W}),{inputs:j,outputs:M}=V({...q,feeRate:L,chain:G});if(!(j&&M))throw new Error("Insufficient Balance for transaction");let U=new F.Psbt({network:Y(G)});if(G===T.Chain.Dogecoin)U.setMaximumFeeRate(650000000);for(let v of j)U.addInput({hash:v.hash,index:v.index,...!!v.witnessUtxo&&!r.includes(G)&&{witnessUtxo:v.witnessUtxo},...r.includes(G)&&{nonWitnessUtxo:v.txHex?Buffer.from(v.txHex,"hex"):void 0}});for(let v of M){let H="address"in v&&v.address?v.address:Z,u=v.script?D?{script:D,value:0}:void 0:{address:H,value:v.value};if(u)F.initEccLib(jG),U.addOutput(u)}return{psbt:U,utxos:q.inputs,inputs:j}}}function FG(G){return async function $({assetValue:J,feeOptionKey:Q=T.FeeOption.Fast,feeRate:X,fetchTxHex:L=!1,memo:Z,recipient:W,from:D}){let q=await VG(G)({assetValue:J,recipient:W,memo:Z,sender:D,fetchTxHex:L}),j=X?Math.floor(X):(await GG(G))[Q];return V({...q,feeRate:j,chain:G})}}function Q$(G){return async function $({from:J,memo:Q,feeRate:X,feeOptionKey:L=T.FeeOption.Fast,recipients:Z=1}){let W=await b(G).getAddressData(J),D=X?Math.ceil(X):(await GG(G))[L],z=W?.utxo.map((v)=>({...v,type:"P2PKH",hash:""})).filter((v)=>v.value>Math.max(i(G),N(v)*D));if(!z?.length)return T.AssetValue.from({chain:G});let q=T.AssetValue.from({chain:G,value:z.reduce((v,H)=>v+H.value,0)}),j=typeof Z==="number"?Array.from({length:Z},()=>({address:J,value:0})):Z;if(Q){let v=_(Q);j.push({address:J,script:v,value:0})}let U=x({inputs:z,outputs:j,feeRate:D})*D;return q.sub(U)}}var k=(G)=>({accumulative:V,calculateTxSize:x,getFeeRates:()=>GG(G),buildTx:qG(G),transfer:$$(G),getInputsOutputsFee:FG(G),broadcastTx:($)=>b(G).broadcastTx($),getAddressFromKeys:($)=>G$({keys:$,chain:G}),validateAddress:($)=>NG({address:$,chain:G}),createKeysForPath:($)=>CG({...$,chain:G}),getPrivateKeyFromMnemonic:async($)=>{return(await CG({...$,chain:G})).toWIF()},getBalance:async($,J)=>J$({address:$,chain:G}),estimateTransactionFee:async($)=>{let Q=await FG(G)($);return T.AssetValue.from({chain:G,value:T.SwapKitNumber.fromBigInt(BigInt(Q.fee),8).getValue("string")})},estimateMaxSendableAmount:async($)=>Q$({...$,chain:G})});function X$({chain:G,address:$}){return G===T.Chain.BitcoinCash?E($):NG({address:$,chain:G})}var w=A.Chain.BitcoinCash,f=(G)=>R(m(G)),KG=async({assetValue:G,recipient:$,memo:J,feeRate:Q,sender:X})=>{if(!E($))throw new Error("Invalid address");let L=await b(w).scanUTXOs({address:f(X),fetchTxHex:!0}),Z=J?_(J):null,W=[];W.push({address:$,value:G.getBaseValue("number")});let{inputs:D,outputs:z}=V({inputs:L,outputs:W,feeRate:Q,chain:w});if(!(D&&z))throw new Error("Balance insufficient for transaction");let q=new K.TransactionBuilder(Y(w));await Promise.all(D.map(async(j)=>{let M=await b(w).getRawTx(j.hash);q.addInput(K.Transaction.fromBuffer(Buffer.from(M,"hex")),j.index)}));for(let j of z){let M="address"in j&&j.address?j.address:g(X),U=K.address.toOutputScript(g(M),Y(w));q.addOutput(U,j.value)}if(Z)q.addOutput(Z,0);return{builder:q,utxos:D}},L$=async({signTransaction:G,from:$,recipient:J,assetValue:Q,broadcastTx:X,getFeeRates:L,...Z})=>{if(!$)throw new Error("From address must be provided");if(!J)throw new Error("Recipient address must be provided");if(!G)throw new Error("signTransaction must be provided");let W=Z.feeRate||(await L())[A.FeeOption.Fast],{builder:D,utxos:z}=await KG({...Z,assetValue:Q,feeRate:W,recipient:J,sender:$}),j=(await G({builder:D,utxos:z})).toHex();return X(j)},D$=async({assetValue:G,recipient:$,memo:J,feeRate:Q,sender:X})=>{let L=m($);if(!E(L))throw new Error("Invalid address");let Z=await b(w).scanUTXOs({address:f(X),fetchTxHex:!0}),W=Number(Q.toFixed(0)),D=J?_(J):null,z=[];if(z.push({address:g($),value:G.getBaseValue("number")}),D)z.push({script:D,value:0});let{inputs:q,outputs:j}=V({inputs:Z,outputs:z,feeRate:W,chain:w});if(!(q&&j))throw new Error("Balance insufficient for transaction");let M=new kG.Psbt({network:Y(w)});for(let{hash:U,index:v,witnessUtxo:H}of q)M.addInput({hash:U,index:v,witnessUtxo:H});for(let U of j){let v="address"in U&&U.address?U.address:g(X),H=U.script?D?{script:D,value:0}:void 0:{address:v,value:U.value};if(H)M.addOutput(H)}return{psbt:M,utxos:Z,inputs:q}},R=(G)=>G.replace(/(bchtest:|bitcoincash:)/,""),E=(G)=>{let $=R(G);return DG($)&&WG($)==="mainnet"},W$=async({phrase:G,derivationPath:$=`${A.DerivationPath.BCH}/0`,wif:J})=>{let{ECPairFactory:Q}=await import("ecpair"),X=Y(w);if(J)return Q(Z$).fromWIF(J,X);if(!G)throw new Error("No phrase provided");return K.HDNode.fromSeedBuffer(Buffer.from(_G.mnemonicToSeedSync(G)),X).derivePath($).keyPair},j$=(G)=>{let $=G.getAddress(0);return f($)},yG=()=>{let{getBalance:G,...$}=k(A.Chain.BitcoinCash);return{...$,stripPrefix:R,stripToCashAddress:f,validateAddress:E,createKeysForPath:W$,getAddressFromKeys:j$,buildBCHTx:KG,buildTx:D$,getBalance:(J,Q)=>G(R(m(J))),transfer:(J)=>L$({...J,getFeeRates:$.getFeeRates,broadcastTx:$.broadcastTx})}};var OG=yG,EG=()=>k(I.Chain.Bitcoin),AG=()=>k(I.Chain.Dash),SG=()=>k(I.Chain.Dogecoin),gG=()=>k(I.Chain.Litecoin),q$=(G)=>{switch(G){case I.Chain.BitcoinCash:return OG;case I.Chain.Bitcoin:return EG;case I.Chain.Dogecoin:return SG;case I.Chain.Litecoin:return gG;case I.Chain.Dash:return AG;default:throw new Error(`Chain ${G} is not supported`)}};
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
2
 
3
- //# debugId=C5DC7708B6AABAF864756E2164756E21
3
+ //# debugId=6B3FC18B75FFD13F64756E2164756E21