@atomiqlabs/sdk 1.0.0-beta3 → 1.0.0-beta30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atomiqlabs/sdk",
3
- "version": "1.0.0-beta3",
3
+ "version": "1.0.0-beta30",
4
4
  "description": "atomiq labs SDK for cross-chain swaps between smart chains and bitcoin",
5
5
  "main": "./dist/index.js",
6
6
  "types:": "./dist/index.d.ts",
@@ -22,7 +22,7 @@
22
22
  "license": "ISC",
23
23
  "dependencies": {
24
24
  "crosslightning-base": "7.0.0-beta1",
25
- "crosslightning-sdk-base": "10.0.5-beta8",
25
+ "crosslightning-sdk-base": "10.0.5-beta33",
26
26
  "crosslightning-solana": "7.0.0-beta4"
27
27
  },
28
28
  "devDependencies": {
@@ -1,127 +1,134 @@
1
- import {
2
- BitcoinNetwork,
3
- BtcToken, IndexedDBStorageManager,
4
- MempoolApi,
5
- MempoolBitcoinRpc,
6
- RedundantSwapPrice,
7
- RedundantSwapPriceAssets,
8
- SCToken,
9
- Swapper,
10
- SwapperOptions
11
- } from "crosslightning-sdk-base";
12
- import {objectMap} from "crosslightning-sdk-base/dist/utils/Utils";
13
- import {SdkSolana, SdkSolanaType} from "./chains/solana/SolanaChainInitializer";
14
- import {SdkChain} from "./chains/ChainInitializer";
15
- import * as BN from "bn.js";
16
- import {SmartChainAssets} from "./SmartChainAssets";
17
- import {IStorageManager, StorageObject} from "crosslightning-base";
18
-
19
- type Chains = {
20
- "SOLANA": SdkSolanaType
21
- };
22
-
23
- const Chains: {
24
- [C in keyof Chains]: SdkChain<Chains[C]>
25
- } = {
26
- "SOLANA": SdkSolana
27
- } as const;
28
-
29
- type SdkMultichain = { [C in keyof Chains]: Chains[C]["ChainType"] };
30
-
31
- export type MultichainSwapperOptions = SwapperOptions & {
32
- chains: {
33
- [C in keyof Chains]: Chains[C]["Options"]
34
- }
35
- } & {
36
- storageCtor?: <T extends StorageObject>(name: string) => IStorageManager<T>
37
- };
38
-
39
- export class MultichainSwapper extends Swapper<SdkMultichain> {
40
-
41
- constructor(options: MultichainSwapperOptions) {
42
- options.bitcoinNetwork ??= BitcoinNetwork.MAINNET;
43
- options.storagePrefix ??= "atomiqsdk-"+options.bitcoinNetwork;
44
- options.storageCtor ??= (name: string) => new IndexedDBStorageManager(name);
45
-
46
- options.registryUrl ??= options.bitcoinNetwork===BitcoinNetwork.MAINNET ?
47
- "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-mainnet.json?ref=main" :
48
- "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry.json?ref=main";
49
-
50
- const mempoolApi = new MempoolApi(
51
- options.bitcoinNetwork===BitcoinNetwork.TESTNET ?
52
- "https://mempool.space/testnet/api/" :
53
- "https://mempool.space/api/"
54
- );
55
- const bitcoinRpc = new MempoolBitcoinRpc(mempoolApi);
56
-
57
- const pricingAssets: RedundantSwapPriceAssets<SdkMultichain> = [];
58
- Object.keys(SmartChainAssets).forEach((ticker) => {
59
- const chains: any = {};
60
- for(let chainId in Chains) {
61
- if(Chains[chainId].assets[ticker]!=null) chains[chainId] = Chains[chainId].assets[ticker];
62
- }
63
- pricingAssets.push({
64
- ...SmartChainAssets[ticker].pricing,
65
- chains
66
- })
67
- });
68
-
69
- const ctorChainData = objectMap(Chains, (value, key) => {
70
- return value.getCtorData(options, bitcoinRpc, options.bitcoinNetwork);
71
- });
72
-
73
- super(bitcoinRpc, ctorChainData, RedundantSwapPrice.createFromTokenMap<SdkMultichain>(new BN(10000), pricingAssets), options);
74
- }
75
-
76
- }
77
-
78
- export const Tokens: {
79
- [C in keyof Chains]: {
80
- [T in keyof Chains[C]["Assets"]]: SCToken<Chains[C]["ChainType"]["ChainId"]> & {name: string, decimals: number}
81
- }
82
- } & {
83
- BITCOIN: {
84
- BTC: BtcToken<false>,
85
- BTCLN: BtcToken<true>
86
- }
87
- } = {
88
- ...objectMap(Chains, (value, key) => {
89
- return objectMap(value.assets, (assetData, ticker) => {
90
- return {
91
- chain: "SC",
92
- chainId: value.chainIdentifier,
93
- address: assetData.address,
94
- name: SmartChainAssets[ticker].name,
95
- decimals: assetData.decimals
96
- }
97
- });
98
- }),
99
- BITCOIN: {
100
- BTC: {
101
- chain: "BTC",
102
- lightning: false
103
- },
104
- BTCLN: {
105
- chain: "BTC",
106
- lightning: true
107
- }
108
- }
109
- };
110
-
111
- export const TokenResolver: {
112
- [C in keyof Chains]: {
113
- getToken(address: string): {ticker: string, name: string}
114
- }
115
- } = objectMap(Chains, (value, key) => {
116
- const addressMap: {[tokenAddress: string]: {ticker: string, name: string, decimals: number}} = {};
117
- for(let ticker in value.assets) {
118
- addressMap[value.assets[ticker].address] = {
119
- ticker,
120
- name: SmartChainAssets[ticker].name,
121
- decimals: value.assets[ticker].decimals
122
- }
123
- }
124
- return {
125
- getToken: (address: string) => addressMap[address]
126
- };
127
- });
1
+ import {
2
+ BitcoinNetwork, BitcoinTokens,
3
+ BtcToken, IndexedDBStorageManager, isToken,
4
+ MempoolApi,
5
+ MempoolBitcoinRpc,
6
+ RedundantSwapPrice,
7
+ RedundantSwapPriceAssets,
8
+ SCToken,
9
+ Swapper,
10
+ SwapperOptions, Token
11
+ } from "crosslightning-sdk-base";
12
+ import {objectMap} from "crosslightning-sdk-base/dist/utils/Utils";
13
+ import {SdkSolana, SdkSolanaType} from "./chains/solana/SolanaChainInitializer";
14
+ import {SdkChain} from "./chains/ChainInitializer";
15
+ import * as BN from "bn.js";
16
+ import {SmartChainAssets} from "./SmartChainAssets";
17
+ import {IStorageManager, StorageObject} from "crosslightning-base";
18
+
19
+ type Chains = {
20
+ "SOLANA": SdkSolanaType
21
+ };
22
+
23
+ const Chains: {
24
+ [C in keyof Chains]: SdkChain<Chains[C]>
25
+ } = {
26
+ "SOLANA": SdkSolana
27
+ } as const;
28
+
29
+ type SdkMultichain = { [C in keyof Chains]: Chains[C]["ChainType"] };
30
+
31
+ export type MultichainSwapperOptions = SwapperOptions & {
32
+ chains: {
33
+ [C in keyof Chains]: Chains[C]["Options"]
34
+ }
35
+ } & {
36
+ storageCtor?: <T extends StorageObject>(name: string) => IStorageManager<T>,
37
+ pricingFeeDifferencePPM?: BN
38
+ };
39
+
40
+ export class MultichainSwapper extends Swapper<SdkMultichain> {
41
+
42
+ constructor(options: MultichainSwapperOptions) {
43
+ options.bitcoinNetwork ??= BitcoinNetwork.MAINNET;
44
+ options.storagePrefix ??= "atomiqsdk-"+options.bitcoinNetwork;
45
+ options.storageCtor ??= (name: string) => new IndexedDBStorageManager(name);
46
+
47
+ options.registryUrl ??= options.bitcoinNetwork===BitcoinNetwork.MAINNET ?
48
+ "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-mainnet.json?ref=main" :
49
+ "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry.json?ref=main";
50
+
51
+ const mempoolApi = new MempoolApi(
52
+ options.bitcoinNetwork===BitcoinNetwork.TESTNET ?
53
+ "https://mempool.space/testnet/api/" :
54
+ "https://mempool.space/api/"
55
+ );
56
+ const bitcoinRpc = new MempoolBitcoinRpc(mempoolApi);
57
+
58
+ const pricingAssets: (RedundantSwapPriceAssets<SdkMultichain>[number] & {ticker: string, name: string})[] = [];
59
+ Object.keys(SmartChainAssets).forEach((ticker) => {
60
+ const chains: any = {};
61
+ for(let chainId in Chains) {
62
+ if(Chains[chainId].assets[ticker]!=null) chains[chainId] = Chains[chainId].assets[ticker];
63
+ }
64
+ const assetData = SmartChainAssets[ticker];
65
+ pricingAssets.push({
66
+ ...assetData.pricing,
67
+ chains,
68
+ ticker,
69
+ name: assetData.name
70
+ })
71
+ });
72
+
73
+ const ctorChainData = objectMap(Chains, (value, key) => {
74
+ return value.getCtorData(options, bitcoinRpc, options.bitcoinNetwork);
75
+ });
76
+
77
+ super(
78
+ bitcoinRpc,
79
+ ctorChainData,
80
+ RedundantSwapPrice.createFromTokenMap<SdkMultichain>(options.pricingFeeDifferencePPM ?? new BN(10000), pricingAssets),
81
+ pricingAssets,
82
+ options
83
+ );
84
+ }
85
+
86
+ }
87
+
88
+ export const Tokens: {
89
+ [C in keyof Chains]: {
90
+ [T in keyof Chains[C]["Assets"]]: SCToken<C>
91
+ }
92
+ } & {
93
+ BITCOIN: {
94
+ BTC: BtcToken<false>,
95
+ BTCLN: BtcToken<true>
96
+ }
97
+ } = {
98
+ ...objectMap(Chains, (value, key) => {
99
+ return objectMap(value.assets, (assetData, ticker) => {
100
+ return {
101
+ chain: "SC",
102
+ chainId: value.chainIdentifier,
103
+ address: assetData.address,
104
+ name: SmartChainAssets[ticker].name,
105
+ decimals: assetData.decimals,
106
+ ticker
107
+ }
108
+ });
109
+ }),
110
+ BITCOIN: BitcoinTokens
111
+ };
112
+
113
+ export const TokenResolver: {
114
+ [C in keyof Chains]: {
115
+ getToken(address: string): SCToken<C>
116
+ }
117
+ } = {
118
+ ...objectMap(Chains, (value, key) => {
119
+ const addressMap: {[tokenAddress: string]: SCToken} = {};
120
+ for(let ticker in value.assets) {
121
+ addressMap[value.assets[ticker].address] = {
122
+ chain: "SC",
123
+ chainId: value.chainIdentifier,
124
+ address: value.assets[ticker].address,
125
+ ticker,
126
+ name: SmartChainAssets[ticker].name,
127
+ decimals: value.assets[ticker].decimals
128
+ }
129
+ }
130
+ return {
131
+ getToken: (address: string) => addressMap[address]
132
+ };
133
+ })
134
+ };
@@ -1,57 +1,57 @@
1
-
2
- export const SmartChainAssets = {
3
- WBTC: {
4
- pricing: {
5
- binancePair: "WBTCBTC",
6
- okxPair: "$fixed-1",
7
- coinGeckoCoinId: "wrapped-bitcoin",
8
- coinPaprikaCoinId: "wbtc-wrapped-bitcoin"
9
- },
10
- name: "Wrapped BTC"
11
- },
12
- USDC: {
13
- pricing: {
14
- binancePair: "!BTCUSDC",
15
- okxPair: "!BTC-USDC",
16
- coinGeckoCoinId: "usd-coin",
17
- coinPaprikaCoinId: "usdc-usd-coin"
18
- },
19
- name: "USD Circle"
20
- },
21
- USDT: {
22
- pricing: {
23
- binancePair: "!BTCUSDT",
24
- okxPair: "!BTC-USDT",
25
- coinGeckoCoinId: "tether",
26
- coinPaprikaCoinId: "usdt-tether"
27
- },
28
- name: "Tether USD"
29
- },
30
- SOL: {
31
- pricing: {
32
- binancePair: "SOLBTC",
33
- okxPair: "SOL-BTC",
34
- coinGeckoCoinId: "solana",
35
- coinPaprikaCoinId: "sol-solana"
36
- },
37
- name: "Solana"
38
- },
39
- BONK: {
40
- pricing: {
41
- binancePair: "BONKUSDC;!BTCUSDC",
42
- okxPair: null,
43
- coinGeckoCoinId: "bonk",
44
- coinPaprikaCoinId: "bonk-bonk"
45
- },
46
- name: "Bonk"
47
- }
48
- } as const;
49
-
50
- export type SmartChainAssetTickers = keyof typeof SmartChainAssets;
51
-
52
- export type AssetData = {
53
- [ticker in SmartChainAssetTickers]?: {
54
- address: string,
55
- decimals: number
56
- }
57
- };
1
+
2
+ export const SmartChainAssets = {
3
+ WBTC: {
4
+ pricing: {
5
+ binancePair: "WBTCBTC",
6
+ okxPair: "$fixed-1",
7
+ coinGeckoCoinId: "wrapped-bitcoin",
8
+ coinPaprikaCoinId: "wbtc-wrapped-bitcoin"
9
+ },
10
+ name: "Wrapped BTC"
11
+ },
12
+ USDC: {
13
+ pricing: {
14
+ binancePair: "!BTCUSDC",
15
+ okxPair: "!BTC-USDC",
16
+ coinGeckoCoinId: "usd-coin",
17
+ coinPaprikaCoinId: "usdc-usd-coin"
18
+ },
19
+ name: "USD Circle"
20
+ },
21
+ USDT: {
22
+ pricing: {
23
+ binancePair: "!BTCUSDT",
24
+ okxPair: "!BTC-USDT",
25
+ coinGeckoCoinId: "tether",
26
+ coinPaprikaCoinId: "usdt-tether"
27
+ },
28
+ name: "Tether USD"
29
+ },
30
+ SOL: {
31
+ pricing: {
32
+ binancePair: "SOLBTC",
33
+ okxPair: "SOL-BTC",
34
+ coinGeckoCoinId: "solana",
35
+ coinPaprikaCoinId: "sol-solana"
36
+ },
37
+ name: "Solana"
38
+ },
39
+ BONK: {
40
+ pricing: {
41
+ binancePair: "BONKUSDC;!BTCUSDC",
42
+ okxPair: null,
43
+ coinGeckoCoinId: "bonk",
44
+ coinPaprikaCoinId: "bonk-bonk"
45
+ },
46
+ name: "Bonk"
47
+ }
48
+ } as const;
49
+
50
+ export type SmartChainAssetTickers = keyof typeof SmartChainAssets;
51
+
52
+ export type AssetData = {
53
+ [ticker in SmartChainAssetTickers]?: {
54
+ address: string,
55
+ decimals: number
56
+ }
57
+ };
@@ -1,16 +1,16 @@
1
- import {BitcoinRpc, ChainType} from "crosslightning-base";
2
- import {BitcoinNetwork, CtorChainData, SwapperOptions} from "crosslightning-sdk-base";
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
+ import {BitcoinRpc, ChainType} from "crosslightning-base";
2
+ import {BitcoinNetwork, CtorChainData, SwapperOptions} from "crosslightning-sdk-base";
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,97 +1,101 @@
1
- import {
2
- SolanaBtcRelay,
3
- SolanaChainType, SolanaFees, SolanaRetryPolicy,
4
- SolanaSwapData,
5
- SolanaSwapProgram,
6
- StoredDataAccount
7
- } from "crosslightning-solana";
8
- import {
9
- BitcoinNetwork,
10
- CtorChainData
11
- } from "crosslightning-sdk-base";
12
- import {BitcoinRpc, IStorageManager} from "crosslightning-base";
13
- import {Connection} from "@solana/web3.js";
14
- import {SolanaChains} from "./SolanaChains";
15
- import {SolanaChainEventsBrowser} from "crosslightning-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,
23
- dataAccountStorage?: IStorageManager<StoredDataAccount>,
24
- retryPolicy?: SolanaRetryPolicy,
25
-
26
- btcRelayContract?: string,
27
- swapContract?: string,
28
-
29
- trustedIntermediary?: string
30
- };
31
-
32
- function getSolanaCtorData(options: MultichainSwapperOptions, bitcoinRpc: BitcoinRpc<any>, network: BitcoinNetwork): CtorChainData<SolanaChainType> {
33
- const connection = new Connection(options.chains.SOLANA.rpcUrl);
34
-
35
- const Fees = new SolanaFees(connection, 200000, 2, 100);
36
- const btcRelay = new SolanaBtcRelay(connection, bitcoinRpc, options.chains.SOLANA.btcRelayContract ?? SolanaChains[network].addresses.btcRelayContract, Fees);
37
- const swapContract = new SolanaSwapProgram(
38
- connection,
39
- btcRelay,
40
- options.chains.SOLANA.dataAccountStorage || options.storageCtor("solAccounts"),
41
- options.chains.SOLANA.swapContract ?? SolanaChains[network].addresses.swapContract,
42
- options.chains.SOLANA.retryPolicy ?? {transactionResendInterval: 1000},
43
- Fees
44
- )
45
- const chainEvents = new SolanaChainEventsBrowser(connection, swapContract);
46
-
47
- return {
48
- btcRelay,
49
- swapContract,
50
- chainEvents,
51
- swapDataConstructor: SolanaSwapData,
52
- defaultTrustedIntermediaryUrl: options.chains.SOLANA.trustedIntermediary ?? SolanaChains[network].trustedSwapForGasUrl,
53
- //These are defined here to keep the data from old SolLightning-sdk, not needed for other chains
54
- storage: {
55
- toBtc: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-ToBTC"),
56
- toBtcLn: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-ToBTCLN"),
57
- fromBtc: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-FromBTC"),
58
- fromBtcLn: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-FromBTCLN"),
59
- lnForGas: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-LnForGas")
60
- }
61
- }
62
- }
63
-
64
- const SolanaAssets = {
65
- WBTC: {
66
- address: "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh",
67
- decimals: 8
68
- },
69
- USDC: {
70
- address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
71
- decimals: 6
72
- },
73
- USDT: {
74
- address: "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
75
- decimals: 6
76
- },
77
- SOL: {
78
- address: "So11111111111111111111111111111111111111112",
79
- decimals: 9
80
- },
81
- BONK: {
82
- address: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
83
- decimals: 5
84
- }
85
- } as const;
86
-
87
- export type SdkSolanaType = {
88
- ChainType: SolanaChainType,
89
- Options: SolanaSwapperOptions,
90
- Assets: typeof SolanaAssets
91
- };
92
-
93
- export const SdkSolana: SdkChain<SdkSolanaType> = {
94
- getCtorData: getSolanaCtorData,
95
- assets: SolanaAssets,
96
- chainIdentifier: chainId
97
- } as const;
1
+ import {
2
+ SolanaBtcRelay,
3
+ SolanaChainType, SolanaFees, SolanaRetryPolicy,
4
+ SolanaSwapData,
5
+ SolanaSwapProgram,
6
+ StoredDataAccount
7
+ } from "crosslightning-solana";
8
+ import {
9
+ BitcoinNetwork,
10
+ CtorChainData
11
+ } from "crosslightning-sdk-base";
12
+ import {BitcoinRpc, IStorageManager} from "crosslightning-base";
13
+ import {Connection} from "@solana/web3.js";
14
+ import {SolanaChains} from "./SolanaChains";
15
+ import {SolanaChainEventsBrowser} from "crosslightning-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
+ trustedIntermediary?: string,
30
+
31
+ fees?: SolanaFees
32
+ };
33
+
34
+ function getSolanaCtorData(options: MultichainSwapperOptions, bitcoinRpc: BitcoinRpc<any>, network: BitcoinNetwork): CtorChainData<SolanaChainType> {
35
+ const connection = typeof(options.chains.SOLANA.rpcUrl)==="string" ?
36
+ new Connection(options.chains.SOLANA.rpcUrl) :
37
+ options.chains.SOLANA.rpcUrl;
38
+
39
+ const Fees = options.chains.SOLANA.fees ?? new SolanaFees(connection, 200000, 4, 100);
40
+ const btcRelay = new SolanaBtcRelay(connection, bitcoinRpc, options.chains.SOLANA.btcRelayContract ?? SolanaChains[network].addresses.btcRelayContract, Fees);
41
+ const swapContract = new SolanaSwapProgram(
42
+ connection,
43
+ btcRelay,
44
+ options.chains.SOLANA.dataAccountStorage || options.storageCtor("solAccounts"),
45
+ options.chains.SOLANA.swapContract ?? SolanaChains[network].addresses.swapContract,
46
+ options.chains.SOLANA.retryPolicy ?? {transactionResendInterval: 1000},
47
+ Fees
48
+ )
49
+ const chainEvents = new SolanaChainEventsBrowser(connection, swapContract);
50
+
51
+ return {
52
+ btcRelay,
53
+ swapContract,
54
+ chainEvents,
55
+ swapDataConstructor: SolanaSwapData,
56
+ defaultTrustedIntermediaryUrl: options.chains.SOLANA.trustedIntermediary ?? SolanaChains[network].trustedSwapForGasUrl,
57
+ //These are defined here to keep the data from old SolLightning-sdk, not needed for other chains
58
+ storage: {
59
+ toBtc: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-ToBTC"),
60
+ toBtcLn: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-ToBTCLN"),
61
+ fromBtc: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-FromBTC"),
62
+ fromBtcLn: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-FromBTCLN"),
63
+ lnForGas: options.storageCtor("SOLv4-"+options.bitcoinNetwork+"-Swaps-LnForGas")
64
+ }
65
+ }
66
+ }
67
+
68
+ const SolanaAssets = {
69
+ WBTC: {
70
+ address: "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh",
71
+ decimals: 8
72
+ },
73
+ USDC: {
74
+ address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
75
+ decimals: 6
76
+ },
77
+ USDT: {
78
+ address: "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
79
+ decimals: 6
80
+ },
81
+ SOL: {
82
+ address: "So11111111111111111111111111111111111111112",
83
+ decimals: 9
84
+ },
85
+ BONK: {
86
+ address: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
87
+ decimals: 5
88
+ }
89
+ } as const;
90
+
91
+ export type SdkSolanaType = {
92
+ ChainType: SolanaChainType,
93
+ Options: SolanaSwapperOptions,
94
+ Assets: typeof SolanaAssets
95
+ };
96
+
97
+ export const SdkSolana: SdkChain<SdkSolanaType> = {
98
+ getCtorData: getSolanaCtorData,
99
+ assets: SolanaAssets,
100
+ chainIdentifier: chainId
101
+ } as const;