@atomiqlabs/sdk 1.0.0-beta3 → 1.0.0-beta31
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/dist/MultichainSwapper.d.ts +41 -45
- package/dist/MultichainSwapper.js +70 -73
- package/dist/SmartChainAssets.d.ts +54 -54
- package/dist/SmartChainAssets.js +50 -50
- package/dist/chains/ChainInitializer.d.ts +13 -13
- package/dist/chains/ChainInitializer.js +2 -2
- package/dist/chains/solana/SolanaChainInitializer.d.ts +42 -40
- package/dist/chains/solana/SolanaChainInitializer.js +60 -58
- package/dist/chains/solana/SolanaChains.d.ts +16 -16
- package/dist/chains/solana/SolanaChains.js +20 -20
- package/dist/index.d.ts +4 -4
- package/dist/index.js +20 -20
- package/package.json +2 -2
- package/src/MultichainSwapper.ts +134 -127
- package/src/SmartChainAssets.ts +57 -57
- package/src/chains/ChainInitializer.ts +16 -16
- package/src/chains/solana/SolanaChainInitializer.ts +101 -97
- package/src/chains/solana/SolanaChains.ts +18 -18
- package/src/index.ts +4 -4
- package/dist/chains/solana/ChainInitializer.d.ts +0 -22
- package/dist/chains/solana/ChainInitializer.js +0 -2
- package/src/MultichainSwapper.js +0 -101
- package/src/SmartChainAssets.js +0 -50
- package/src/chains/ChainInitializer.js +0 -2
- package/src/chains/solana/SolanaChainInitializer.js +0 -57
- package/src/chains/solana/SolanaChains.js +0 -21
- package/src/index.js +0 -17
|
@@ -1,58 +1,60 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SdkSolana = void 0;
|
|
4
|
-
const crosslightning_solana_1 = require("crosslightning-solana");
|
|
5
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
-
const SolanaChains_1 = require("./SolanaChains");
|
|
7
|
-
const SolanaChainEventsBrowser_1 = require("crosslightning-solana/dist/solana/events/SolanaChainEventsBrowser");
|
|
8
|
-
const chainId = "SOLANA";
|
|
9
|
-
function getSolanaCtorData(options, bitcoinRpc, network) {
|
|
10
|
-
var _a, _b, _c, _d;
|
|
11
|
-
const connection =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SdkSolana = void 0;
|
|
4
|
+
const crosslightning_solana_1 = require("crosslightning-solana");
|
|
5
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
+
const SolanaChains_1 = require("./SolanaChains");
|
|
7
|
+
const SolanaChainEventsBrowser_1 = require("crosslightning-solana/dist/solana/events/SolanaChainEventsBrowser");
|
|
8
|
+
const chainId = "SOLANA";
|
|
9
|
+
function getSolanaCtorData(options, bitcoinRpc, network) {
|
|
10
|
+
var _a, _b, _c, _d, _e;
|
|
11
|
+
const connection = typeof (options.chains.SOLANA.rpcUrl) === "string" ?
|
|
12
|
+
new web3_js_1.Connection(options.chains.SOLANA.rpcUrl) :
|
|
13
|
+
options.chains.SOLANA.rpcUrl;
|
|
14
|
+
const Fees = (_a = options.chains.SOLANA.fees) !== null && _a !== void 0 ? _a : new crosslightning_solana_1.SolanaFees(connection, 200000, 4, 100);
|
|
15
|
+
const btcRelay = new crosslightning_solana_1.SolanaBtcRelay(connection, bitcoinRpc, (_b = options.chains.SOLANA.btcRelayContract) !== null && _b !== void 0 ? _b : SolanaChains_1.SolanaChains[network].addresses.btcRelayContract, Fees);
|
|
16
|
+
const swapContract = new crosslightning_solana_1.SolanaSwapProgram(connection, btcRelay, options.chains.SOLANA.dataAccountStorage || options.storageCtor("solAccounts"), (_c = options.chains.SOLANA.swapContract) !== null && _c !== void 0 ? _c : SolanaChains_1.SolanaChains[network].addresses.swapContract, (_d = options.chains.SOLANA.retryPolicy) !== null && _d !== void 0 ? _d : { transactionResendInterval: 1000 }, Fees);
|
|
17
|
+
const chainEvents = new SolanaChainEventsBrowser_1.SolanaChainEventsBrowser(connection, swapContract);
|
|
18
|
+
return {
|
|
19
|
+
btcRelay,
|
|
20
|
+
swapContract,
|
|
21
|
+
chainEvents,
|
|
22
|
+
swapDataConstructor: crosslightning_solana_1.SolanaSwapData,
|
|
23
|
+
defaultTrustedIntermediaryUrl: (_e = options.chains.SOLANA.trustedIntermediary) !== null && _e !== void 0 ? _e : SolanaChains_1.SolanaChains[network].trustedSwapForGasUrl,
|
|
24
|
+
//These are defined here to keep the data from old SolLightning-sdk, not needed for other chains
|
|
25
|
+
storage: {
|
|
26
|
+
toBtc: options.storageCtor("SOLv4-" + options.bitcoinNetwork + "-Swaps-ToBTC"),
|
|
27
|
+
toBtcLn: options.storageCtor("SOLv4-" + options.bitcoinNetwork + "-Swaps-ToBTCLN"),
|
|
28
|
+
fromBtc: options.storageCtor("SOLv4-" + options.bitcoinNetwork + "-Swaps-FromBTC"),
|
|
29
|
+
fromBtcLn: options.storageCtor("SOLv4-" + options.bitcoinNetwork + "-Swaps-FromBTCLN"),
|
|
30
|
+
lnForGas: options.storageCtor("SOLv4-" + options.bitcoinNetwork + "-Swaps-LnForGas")
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const SolanaAssets = {
|
|
35
|
+
WBTC: {
|
|
36
|
+
address: "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh",
|
|
37
|
+
decimals: 8
|
|
38
|
+
},
|
|
39
|
+
USDC: {
|
|
40
|
+
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
|
41
|
+
decimals: 6
|
|
42
|
+
},
|
|
43
|
+
USDT: {
|
|
44
|
+
address: "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
|
|
45
|
+
decimals: 6
|
|
46
|
+
},
|
|
47
|
+
SOL: {
|
|
48
|
+
address: "So11111111111111111111111111111111111111112",
|
|
49
|
+
decimals: 9
|
|
50
|
+
},
|
|
51
|
+
BONK: {
|
|
52
|
+
address: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
|
|
53
|
+
decimals: 5
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
exports.SdkSolana = {
|
|
57
|
+
getCtorData: getSolanaCtorData,
|
|
58
|
+
assets: SolanaAssets,
|
|
59
|
+
chainIdentifier: chainId
|
|
60
|
+
};
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
export declare const SolanaChains: {
|
|
2
|
-
readonly 1: {
|
|
3
|
-
readonly addresses: {
|
|
4
|
-
readonly swapContract: "4hfUykhqmD7ZRvNh1HuzVKEY7ToENixtdUKZspNDCrEM";
|
|
5
|
-
readonly btcRelayContract: "3KHSHFpEK6bsjg3bqcxQ9qssJYtRCMi2S9TYVe4q6CQc";
|
|
6
|
-
};
|
|
7
|
-
readonly trustedSwapForGasUrl: "https://node3.gethopa.com:24100";
|
|
8
|
-
};
|
|
9
|
-
readonly 0: {
|
|
10
|
-
readonly addresses: {
|
|
11
|
-
readonly swapContract: "4hfUykhqmD7ZRvNh1HuzVKEY7ToENixtdUKZspNDCrEM";
|
|
12
|
-
readonly btcRelayContract: "3KHSHFpEK6bsjg3bqcxQ9qssJYtRCMi2S9TYVe4q6CQc";
|
|
13
|
-
};
|
|
14
|
-
readonly trustedSwapForGasUrl: "https://node3.gethopa.com:34100";
|
|
15
|
-
};
|
|
16
|
-
};
|
|
1
|
+
export declare const SolanaChains: {
|
|
2
|
+
readonly 1: {
|
|
3
|
+
readonly addresses: {
|
|
4
|
+
readonly swapContract: "4hfUykhqmD7ZRvNh1HuzVKEY7ToENixtdUKZspNDCrEM";
|
|
5
|
+
readonly btcRelayContract: "3KHSHFpEK6bsjg3bqcxQ9qssJYtRCMi2S9TYVe4q6CQc";
|
|
6
|
+
};
|
|
7
|
+
readonly trustedSwapForGasUrl: "https://node3.gethopa.com:24100";
|
|
8
|
+
};
|
|
9
|
+
readonly 0: {
|
|
10
|
+
readonly addresses: {
|
|
11
|
+
readonly swapContract: "4hfUykhqmD7ZRvNh1HuzVKEY7ToENixtdUKZspNDCrEM";
|
|
12
|
+
readonly btcRelayContract: "3KHSHFpEK6bsjg3bqcxQ9qssJYtRCMi2S9TYVe4q6CQc";
|
|
13
|
+
};
|
|
14
|
+
readonly trustedSwapForGasUrl: "https://node3.gethopa.com:34100";
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SolanaChains = void 0;
|
|
4
|
-
const crosslightning_sdk_base_1 = require("crosslightning-sdk-base");
|
|
5
|
-
exports.SolanaChains = {
|
|
6
|
-
[crosslightning_sdk_base_1.BitcoinNetwork.TESTNET]: {
|
|
7
|
-
addresses: {
|
|
8
|
-
swapContract: "4hfUykhqmD7ZRvNh1HuzVKEY7ToENixtdUKZspNDCrEM",
|
|
9
|
-
btcRelayContract: "3KHSHFpEK6bsjg3bqcxQ9qssJYtRCMi2S9TYVe4q6CQc"
|
|
10
|
-
},
|
|
11
|
-
trustedSwapForGasUrl: "https://node3.gethopa.com:24100"
|
|
12
|
-
},
|
|
13
|
-
[crosslightning_sdk_base_1.BitcoinNetwork.MAINNET]: {
|
|
14
|
-
addresses: {
|
|
15
|
-
swapContract: "4hfUykhqmD7ZRvNh1HuzVKEY7ToENixtdUKZspNDCrEM",
|
|
16
|
-
btcRelayContract: "3KHSHFpEK6bsjg3bqcxQ9qssJYtRCMi2S9TYVe4q6CQc"
|
|
17
|
-
},
|
|
18
|
-
trustedSwapForGasUrl: "https://node3.gethopa.com:34100"
|
|
19
|
-
}
|
|
20
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SolanaChains = void 0;
|
|
4
|
+
const crosslightning_sdk_base_1 = require("crosslightning-sdk-base");
|
|
5
|
+
exports.SolanaChains = {
|
|
6
|
+
[crosslightning_sdk_base_1.BitcoinNetwork.TESTNET]: {
|
|
7
|
+
addresses: {
|
|
8
|
+
swapContract: "4hfUykhqmD7ZRvNh1HuzVKEY7ToENixtdUKZspNDCrEM",
|
|
9
|
+
btcRelayContract: "3KHSHFpEK6bsjg3bqcxQ9qssJYtRCMi2S9TYVe4q6CQc"
|
|
10
|
+
},
|
|
11
|
+
trustedSwapForGasUrl: "https://node3.gethopa.com:24100"
|
|
12
|
+
},
|
|
13
|
+
[crosslightning_sdk_base_1.BitcoinNetwork.MAINNET]: {
|
|
14
|
+
addresses: {
|
|
15
|
+
swapContract: "4hfUykhqmD7ZRvNh1HuzVKEY7ToENixtdUKZspNDCrEM",
|
|
16
|
+
btcRelayContract: "3KHSHFpEK6bsjg3bqcxQ9qssJYtRCMi2S9TYVe4q6CQc"
|
|
17
|
+
},
|
|
18
|
+
trustedSwapForGasUrl: "https://node3.gethopa.com:34100"
|
|
19
|
+
}
|
|
20
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from "./MultichainSwapper";
|
|
2
|
-
export * from "crosslightning-base";
|
|
3
|
-
export * from "crosslightning-sdk-base";
|
|
4
|
-
export * from "crosslightning-solana";
|
|
1
|
+
export * from "./MultichainSwapper";
|
|
2
|
+
export * from "crosslightning-base";
|
|
3
|
+
export * from "crosslightning-sdk-base";
|
|
4
|
+
export * from "crosslightning-solana";
|
package/dist/index.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./MultichainSwapper"), exports);
|
|
18
|
-
__exportStar(require("crosslightning-base"), exports);
|
|
19
|
-
__exportStar(require("crosslightning-sdk-base"), exports);
|
|
20
|
-
__exportStar(require("crosslightning-solana"), exports);
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./MultichainSwapper"), exports);
|
|
18
|
+
__exportStar(require("crosslightning-base"), exports);
|
|
19
|
+
__exportStar(require("crosslightning-sdk-base"), exports);
|
|
20
|
+
__exportStar(require("crosslightning-solana"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atomiqlabs/sdk",
|
|
3
|
-
"version": "1.0.0-
|
|
3
|
+
"version": "1.0.0-beta31",
|
|
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-
|
|
25
|
+
"crosslightning-sdk-base": "10.0.5-beta33",
|
|
26
26
|
"crosslightning-solana": "7.0.0-beta4"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
package/src/MultichainSwapper.ts
CHANGED
|
@@ -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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
options.
|
|
44
|
-
options.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"https://api.github.com/repos/adambor/SolLightning-registry/contents/registry.json?ref=main"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
"https://mempool.space/api/"
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
+
};
|
package/src/SmartChainAssets.ts
CHANGED
|
@@ -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
|
+
};
|