@atomiqlabs/sdk 1.3.19 → 2.1.0-beta.0

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 (49) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +545 -501
  3. package/dist/SmartChainAssets.d.ts +73 -59
  4. package/dist/SmartChainAssets.js +75 -55
  5. package/dist/SwapperFactory.d.ts +49 -0
  6. package/dist/SwapperFactory.js +84 -0
  7. package/dist/Utils.d.ts +11 -0
  8. package/dist/Utils.js +37 -0
  9. package/dist/fs-storage/FileSystemStorageManager.d.ts +15 -0
  10. package/dist/fs-storage/FileSystemStorageManager.js +60 -0
  11. package/dist/fs-storage/index.d.ts +1 -0
  12. package/dist/fs-storage/index.js +17 -0
  13. package/dist/index.d.ts +5 -4
  14. package/dist/index.js +21 -20
  15. package/dist/storage/LocalStorageManager.d.ts +24 -0
  16. package/dist/storage/LocalStorageManager.js +68 -0
  17. package/package.json +31 -32
  18. package/src/SmartChainAssets.js +75 -0
  19. package/src/SmartChainAssets.ts +76 -62
  20. package/src/SwapperFactory.js +96 -0
  21. package/src/SwapperFactory.ts +171 -0
  22. package/src/Utils.js +37 -0
  23. package/src/Utils.ts +31 -0
  24. package/src/example/BrowserExample.js +199 -0
  25. package/src/example/BrowserExample.ts +141 -120
  26. package/src/example/NodeJSExample.js +206 -0
  27. package/src/example/NodeJSExample.ts +150 -120
  28. package/src/fs-storage/FileSystemStorageManager.ts +71 -0
  29. package/src/fs-storage/index.ts +1 -0
  30. package/src/index.js +21 -0
  31. package/src/index.ts +5 -4
  32. package/src/storage/LocalStorageManager.js +72 -0
  33. package/src/storage/LocalStorageManager.ts +81 -0
  34. package/dist/MultichainSwapper.d.ts +0 -46
  35. package/dist/MultichainSwapper.js +0 -83
  36. package/dist/chains/ChainInitializer.d.ts +0 -13
  37. package/dist/chains/ChainInitializer.js +0 -2
  38. package/dist/chains/solana/SolanaChainInitializer.d.ts +0 -41
  39. package/dist/chains/solana/SolanaChainInitializer.js +0 -60
  40. package/dist/chains/solana/SolanaChains.d.ts +0 -14
  41. package/dist/chains/solana/SolanaChains.js +0 -18
  42. package/dist/example/BrowserExample.d.ts +0 -1
  43. package/dist/example/BrowserExample.js +0 -104
  44. package/dist/example/NodeJSExample.d.ts +0 -1
  45. package/dist/example/NodeJSExample.js +0 -104
  46. package/src/MultichainSwapper.ts +0 -156
  47. package/src/chains/ChainInitializer.ts +0 -16
  48. package/src/chains/solana/SolanaChainInitializer.ts +0 -99
  49. package/src/chains/solana/SolanaChains.ts +0 -16
@@ -1,156 +0,0 @@
1
- import {
2
- BitcoinNetwork,
3
- BitcoinTokens,
4
- BtcToken,
5
- IndexedDBStorageManager,
6
- MempoolApi,
7
- MempoolBitcoinRpc,
8
- RedundantSwapPrice,
9
- RedundantSwapPriceAssets,
10
- SCToken,
11
- Swapper,
12
- SwapperOptions
13
- } from "@atomiqlabs/sdk-lib";
14
- import {objectMap} from "@atomiqlabs/sdk-lib/dist/utils/Utils";
15
- import {SdkSolana, SdkSolanaType} from "./chains/solana/SolanaChainInitializer";
16
- import {SdkChain} from "./chains/ChainInitializer";
17
- import * as BN from "bn.js";
18
- import {SmartChainAssets} from "./SmartChainAssets";
19
- import {IStorageManager, StorageObject} from "@atomiqlabs/base";
20
- import {SwapperWithChain} from "@atomiqlabs/sdk-lib/dist/swaps/SwapperWithChain";
21
- import {SwapperWithSigner} from "@atomiqlabs/sdk-lib/dist/swaps/SwapperWithSigner";
22
-
23
- type Chains = {
24
- "SOLANA": SdkSolanaType
25
- };
26
-
27
- const Chains: {
28
- [C in keyof Chains]: SdkChain<Chains[C]>
29
- } = {
30
- "SOLANA": SdkSolana
31
- } as const;
32
-
33
- export type SdkMultichain = { [C in keyof Chains]: Chains[C]["ChainType"] };
34
-
35
- export type MultichainSwapperOptions = SwapperOptions & {
36
- chains: {
37
- [C in keyof Chains]: Chains[C]["Options"]
38
- }
39
- } & {
40
- storageCtor?: <T extends StorageObject>(name: string) => IStorageManager<T>,
41
- pricingFeeDifferencePPM?: BN,
42
- mempoolApi?: MempoolApi
43
- };
44
-
45
- export class MultichainSwapper extends Swapper<SdkMultichain> {
46
-
47
- constructor(options: MultichainSwapperOptions) {
48
- options.bitcoinNetwork ??= BitcoinNetwork.MAINNET;
49
- options.storagePrefix ??= "atomiqsdk-"+options.bitcoinNetwork;
50
- options.storageCtor ??= (name: string) => new IndexedDBStorageManager(name);
51
-
52
- options.defaultTrustedIntermediaryUrl ??= options.bitcoinNetwork===BitcoinNetwork.MAINNET ?
53
- "https://node3.gethopa.com:34100" :
54
- "https://node3.gethopa.com:24100";
55
-
56
- options.registryUrl ??= options.bitcoinNetwork===BitcoinNetwork.MAINNET ?
57
- "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-mainnet.json?ref=main" :
58
- "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry.json?ref=main";
59
-
60
- const mempoolApi = options.mempoolApi ?? new MempoolApi(
61
- options.bitcoinNetwork===BitcoinNetwork.TESTNET ?
62
- [
63
- "https://mempool.space/testnet/api/",
64
- "https://mempool.fra.mempool.space/testnet/api/",
65
- "https://mempool.va1.mempool.space/testnet/api/",
66
- "https://mempool.tk7.mempool.space/testnet/api/"
67
- ] :
68
- [
69
- "https://mempool.space/api/",
70
- "https://mempool.fra.mempool.space/api/",
71
- "https://mempool.va1.mempool.space/api/",
72
- "https://mempool.tk7.mempool.space/api/"
73
- ]
74
- );
75
- const bitcoinRpc = new MempoolBitcoinRpc(mempoolApi);
76
-
77
- const pricingAssets: (RedundantSwapPriceAssets<SdkMultichain>[number] & {ticker: string, name: string})[] = [];
78
- Object.keys(SmartChainAssets).forEach((ticker) => {
79
- const chains: any = {};
80
- for(let chainId in Chains) {
81
- if(Chains[chainId].assets[ticker]!=null) chains[chainId] = Chains[chainId].assets[ticker];
82
- }
83
- const assetData = SmartChainAssets[ticker];
84
- pricingAssets.push({
85
- ...assetData.pricing,
86
- chains,
87
- ticker,
88
- name: assetData.name
89
- })
90
- });
91
-
92
- const ctorChainData = objectMap(Chains, (value, key) => {
93
- return value.getCtorData(options, bitcoinRpc, options.bitcoinNetwork);
94
- });
95
-
96
- super(
97
- bitcoinRpc,
98
- ctorChainData,
99
- RedundantSwapPrice.createFromTokenMap<SdkMultichain>(options.pricingFeeDifferencePPM ?? new BN(10000), pricingAssets),
100
- pricingAssets,
101
- options
102
- );
103
- }
104
-
105
- }
106
-
107
- export const Tokens: {
108
- [C in keyof Chains]: {
109
- [T in keyof Chains[C]["Assets"]]: SCToken<C>
110
- }
111
- } & {
112
- BITCOIN: {
113
- BTC: BtcToken<false>,
114
- BTCLN: BtcToken<true>
115
- }
116
- } = {
117
- ...objectMap(Chains, (value, key) => {
118
- return objectMap(value.assets, (assetData, ticker) => {
119
- return {
120
- chain: "SC",
121
- chainId: value.chainIdentifier,
122
- address: assetData.address,
123
- name: SmartChainAssets[ticker].name,
124
- decimals: assetData.decimals,
125
- ticker
126
- }
127
- });
128
- }),
129
- BITCOIN: BitcoinTokens
130
- };
131
-
132
- export const TokenResolver: {
133
- [C in keyof Chains]: {
134
- getToken(address: string): SCToken<C>
135
- }
136
- } = {
137
- ...objectMap(Chains, (value, key) => {
138
- const addressMap: {[tokenAddress: string]: SCToken} = {};
139
- for(let ticker in value.assets) {
140
- addressMap[value.assets[ticker].address] = {
141
- chain: "SC",
142
- chainId: value.chainIdentifier,
143
- address: value.assets[ticker].address,
144
- ticker,
145
- name: SmartChainAssets[ticker].name,
146
- decimals: value.assets[ticker].decimals
147
- }
148
- }
149
- return {
150
- getToken: (address: string) => addressMap[address]
151
- };
152
- })
153
- };
154
-
155
- export type SolanaSwapper = SwapperWithChain<SdkMultichain, "SOLANA">;
156
- export type SolanaSwapperWithSigner = SwapperWithSigner<SdkMultichain, "SOLANA">;
@@ -1,16 +0,0 @@
1
- import {BitcoinRpc, ChainType} from "@atomiqlabs/base";
2
- import {BitcoinNetwork, CtorChainData, SwapperOptions} from "@atomiqlabs/sdk-lib";
3
- import {AssetData} from "../SmartChainAssets";
4
-
5
-
6
- export type SdkChainType = {
7
- ChainType: ChainType,
8
- Options: {},
9
- Assets: AssetData
10
- }
11
-
12
- export type SdkChain<T extends SdkChainType> = {
13
- getCtorData: (options: SwapperOptions, bitcoinRpc: BitcoinRpc<any>, network: BitcoinNetwork) => CtorChainData<T["ChainType"]>,
14
- assets: AssetData,
15
- chainIdentifier: string
16
- };
@@ -1,99 +0,0 @@
1
- import {
2
- SolanaBtcRelay,
3
- SolanaChainType, SolanaFees, SolanaRetryPolicy,
4
- SolanaSwapData,
5
- SolanaSwapProgram,
6
- StoredDataAccount
7
- } from "@atomiqlabs/chain-solana";
8
- import {
9
- BitcoinNetwork,
10
- CtorChainData
11
- } from "@atomiqlabs/sdk-lib";
12
- import {BitcoinRpc, IStorageManager} from "@atomiqlabs/base";
13
- import {Connection} from "@solana/web3.js";
14
- import {SolanaChains} from "./SolanaChains";
15
- import {SolanaChainEventsBrowser} from "@atomiqlabs/chain-solana/dist/solana/events/SolanaChainEventsBrowser";
16
- import {SdkChain} from "../ChainInitializer";
17
- import {MultichainSwapperOptions} from "../../MultichainSwapper";
18
-
19
- const chainId = "SOLANA" as const;
20
-
21
- type SolanaSwapperOptions = {
22
- rpcUrl: string | Connection,
23
- dataAccountStorage?: IStorageManager<StoredDataAccount>,
24
- retryPolicy?: SolanaRetryPolicy,
25
-
26
- btcRelayContract?: string,
27
- swapContract?: string,
28
-
29
- fees?: SolanaFees
30
- };
31
-
32
- function getSolanaCtorData(options: MultichainSwapperOptions, bitcoinRpc: BitcoinRpc<any>, network: BitcoinNetwork): CtorChainData<SolanaChainType> {
33
- const connection = typeof(options.chains.SOLANA.rpcUrl)==="string" ?
34
- new Connection(options.chains.SOLANA.rpcUrl) :
35
- options.chains.SOLANA.rpcUrl;
36
-
37
- const Fees = options.chains.SOLANA.fees ?? new SolanaFees(connection, 200000, 4, 100);
38
- const btcRelay = new SolanaBtcRelay(connection, bitcoinRpc, options.chains.SOLANA.btcRelayContract ?? SolanaChains[network].addresses.btcRelayContract, Fees);
39
- const swapContract = new SolanaSwapProgram(
40
- connection,
41
- btcRelay,
42
- options.chains.SOLANA.dataAccountStorage || options.storageCtor("solAccounts"),
43
- options.chains.SOLANA.swapContract ?? SolanaChains[network].addresses.swapContract,
44
- options.chains.SOLANA.retryPolicy ?? {transactionResendInterval: 1000},
45
- Fees
46
- )
47
- const chainEvents = new SolanaChainEventsBrowser(connection, swapContract);
48
-
49
- return {
50
- btcRelay,
51
- swapContract,
52
- chainEvents,
53
- swapDataConstructor: SolanaSwapData,
54
- //These are defined here to keep the data from old SolLightning-sdk, not needed for other chains
55
- storage: {
56
- toBtc: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-ToBTC"),
57
- toBtcLn: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-ToBTCLN"),
58
- fromBtc: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-FromBTC"),
59
- fromBtcLn: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-FromBTCLN"),
60
- lnForGas: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-LnForGas"),
61
- onchainForGas: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-OnchainForGas")
62
- }
63
- }
64
- }
65
-
66
- const SolanaAssets = {
67
- WBTC: {
68
- address: "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh",
69
- decimals: 8
70
- },
71
- USDC: {
72
- address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
73
- decimals: 6
74
- },
75
- USDT: {
76
- address: "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
77
- decimals: 6
78
- },
79
- SOL: {
80
- address: "So11111111111111111111111111111111111111112",
81
- decimals: 9
82
- },
83
- BONK: {
84
- address: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
85
- decimals: 5
86
- }
87
- } as const;
88
-
89
- export type SdkSolanaType = {
90
- ChainType: SolanaChainType,
91
- Options: SolanaSwapperOptions,
92
- Assets: typeof SolanaAssets
93
- };
94
-
95
- export const SdkSolana: SdkChain<SdkSolanaType> = {
96
- getCtorData: getSolanaCtorData,
97
- assets: SolanaAssets,
98
- chainIdentifier: chainId
99
- } as const;
@@ -1,16 +0,0 @@
1
- import {BitcoinNetwork} from "@atomiqlabs/sdk-lib";
2
-
3
- export const SolanaChains = {
4
- [BitcoinNetwork.TESTNET]: {
5
- addresses: {
6
- swapContract: "4hfUykhqmD7ZRvNh1HuzVKEY7ToENixtdUKZspNDCrEM",
7
- btcRelayContract: "3KHSHFpEK6bsjg3bqcxQ9qssJYtRCMi2S9TYVe4q6CQc"
8
- }
9
- },
10
- [BitcoinNetwork.MAINNET]: {
11
- addresses: {
12
- swapContract: "4hfUykhqmD7ZRvNh1HuzVKEY7ToENixtdUKZspNDCrEM",
13
- btcRelayContract: "3KHSHFpEK6bsjg3bqcxQ9qssJYtRCMi2S9TYVe4q6CQc"
14
- }
15
- }
16
- } as const;