@scallop-io/scallop-swap-sdk 1.0.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.
- package/LICENSE +202 -0
- package/README.md +3 -0
- package/dist/class/aggregator.d.ts +55 -0
- package/dist/class/base.d.ts +36 -0
- package/dist/class/coinMetadata.d.ts +9 -0
- package/dist/class/index.d.ts +2 -0
- package/dist/const/afAddresses.d.ts +2 -0
- package/dist/const/index.d.ts +1 -0
- package/dist/example/index.d.ts +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +30 -0
- package/dist/index.mjs +14 -0
- package/dist/interface/aggregator.d.ts +18 -0
- package/dist/interface/base.d.ts +73 -0
- package/dist/interface/index.d.ts +2 -0
- package/dist/interface/route.d.ts +29 -0
- package/dist/sdk/7k.d.ts +38 -0
- package/dist/sdk/aftermath.d.ts +19 -0
- package/dist/sdk/cetus.d.ts +30 -0
- package/dist/sdk/flowx.d.ts +19 -0
- package/dist/sdk/index.d.ts +4 -0
- package/dist/utils.d.ts +6 -0
- package/package.json +168 -0
- package/src/class/aggregator.ts +245 -0
- package/src/class/base.ts +164 -0
- package/src/class/coinMetadata.ts +33 -0
- package/src/class/index.ts +2 -0
- package/src/const/afAddresses.ts +230 -0
- package/src/const/index.ts +1 -0
- package/src/example/index.ts +47 -0
- package/src/index.ts +5 -0
- package/src/interface/aggregator.ts +24 -0
- package/src/interface/base.ts +85 -0
- package/src/interface/index.ts +2 -0
- package/src/interface/route.ts +33 -0
- package/src/sdk/7k.ts +231 -0
- package/src/sdk/aftermath.ts +132 -0
- package/src/sdk/cetus.ts +198 -0
- package/src/sdk/flowx.ts +176 -0
- package/src/sdk/index.ts +4 -0
- package/src/utils.ts +114 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';
|
|
2
|
+
import {
|
|
3
|
+
Transaction,
|
|
4
|
+
TransactionObjectArgument,
|
|
5
|
+
} from '@mysten/sui/transactions';
|
|
6
|
+
import { normalizeStructTag } from '@scallop-io/sui-kit';
|
|
7
|
+
import {
|
|
8
|
+
FetchRouteParams,
|
|
9
|
+
SwapParams,
|
|
10
|
+
SwapSdkBaseInterface,
|
|
11
|
+
SwapSdkConstructorParams,
|
|
12
|
+
} from 'src/interface/base';
|
|
13
|
+
import { FetchRouteResult } from 'src/interface/route';
|
|
14
|
+
import { isSuiType, selectCoins } from 'src/utils';
|
|
15
|
+
import { BigNumber } from 'bignumber.js';
|
|
16
|
+
|
|
17
|
+
export abstract class SwapSdkBase<T = string, U = any, V = any>
|
|
18
|
+
implements SwapSdkBaseInterface<T>
|
|
19
|
+
{
|
|
20
|
+
readonly name: string = '';
|
|
21
|
+
readonly fetchTimeoutInMs?: number;
|
|
22
|
+
|
|
23
|
+
protected rawRouteResult?: U;
|
|
24
|
+
|
|
25
|
+
client: SuiClient;
|
|
26
|
+
walletAddress: string;
|
|
27
|
+
pools: T[] = [];
|
|
28
|
+
fetchSettings?: V;
|
|
29
|
+
cacheTimeInMs?: number;
|
|
30
|
+
lastFetchTimestamp?: number;
|
|
31
|
+
|
|
32
|
+
constructor(name: string, params: SwapSdkConstructorParams) {
|
|
33
|
+
this.client =
|
|
34
|
+
params.client ?? new SuiClient({ url: getFullnodeUrl('mainnet') });
|
|
35
|
+
this.fetchTimeoutInMs = params.fetchTimeoutInMs ?? 4_000;
|
|
36
|
+
this.walletAddress = params.walletAddress;
|
|
37
|
+
this.name = name;
|
|
38
|
+
this.cacheTimeInMs = params.cacheTimeInMs ?? 1_000;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
setWalletAddress(address: string) {
|
|
42
|
+
this.walletAddress = address;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
protected validateWalletAddress(): asserts this is typeof SwapSdkBase & {
|
|
46
|
+
walletAddress: string;
|
|
47
|
+
} {
|
|
48
|
+
if (!this.walletAddress || this.walletAddress.length === 0) {
|
|
49
|
+
throw new Error('Wallet address is not set');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
protected validateRawRouteResult(): asserts this is typeof SwapSdkBase & {
|
|
54
|
+
rawRouteResult: U;
|
|
55
|
+
} {
|
|
56
|
+
if (!this.rawRouteResult) {
|
|
57
|
+
throw new Error('Raw route result is not set. Please fetch route first.');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
changeClient(client: SuiClient) {
|
|
62
|
+
this.client = client;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
calcSlippage(slippageInBps: number): number {
|
|
66
|
+
return slippageInBps / 10_000; // Convert basis points to decimal (e.g., 50 bps = 0.005 = 0.5%)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
useRouteCache() {
|
|
70
|
+
if (!this.rawRouteResult) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (
|
|
75
|
+
Date.now() - (this.lastFetchTimestamp ?? 0) <
|
|
76
|
+
(this.cacheTimeInMs ?? 0)
|
|
77
|
+
) {
|
|
78
|
+
return this.rawRouteResult;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
protected normalizeFetchRouteParams(
|
|
85
|
+
params: FetchRouteParams
|
|
86
|
+
): FetchRouteParams {
|
|
87
|
+
return {
|
|
88
|
+
...params,
|
|
89
|
+
coinInType: normalizeStructTag(params.coinInType),
|
|
90
|
+
coinOutType: normalizeStructTag(params.coinOutType),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
protected async withTimeout<T>(fn: Promise<T>): Promise<T> {
|
|
95
|
+
const cache = this.useRouteCache();
|
|
96
|
+
if (cache) {
|
|
97
|
+
return cache as T;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const results = await Promise.race([
|
|
101
|
+
fn,
|
|
102
|
+
new Promise<never>((_, reject) => {
|
|
103
|
+
setTimeout(() => {
|
|
104
|
+
reject(new Error(`${this.name} fetch route timeout`));
|
|
105
|
+
}, this.fetchTimeoutInMs);
|
|
106
|
+
}),
|
|
107
|
+
]);
|
|
108
|
+
|
|
109
|
+
this.lastFetchTimestamp = Date.now();
|
|
110
|
+
return results as T;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
async selectCoinInForSwap(tx: Transaction, amount: bigint, coinType: string) {
|
|
114
|
+
const targetAmount = BigNumber(amount.toString());
|
|
115
|
+
|
|
116
|
+
if (isSuiType(coinType)) {
|
|
117
|
+
const [inputCoin] = tx.splitCoins(tx.gas, [targetAmount.toString()]);
|
|
118
|
+
return inputCoin;
|
|
119
|
+
} else {
|
|
120
|
+
const coins = await this.selectCoins(coinType, targetAmount.toString());
|
|
121
|
+
|
|
122
|
+
const totalSelectedAmount = coins.reduce(
|
|
123
|
+
(acc, coin) => acc.plus(BigNumber(coin.balance)),
|
|
124
|
+
BigNumber(0)
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
const mergeDest = tx.objectRef({
|
|
128
|
+
objectId: coins[0].coinObjectId,
|
|
129
|
+
version: coins[0].version,
|
|
130
|
+
digest: coins[0].digest,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
if (coins.length > 1) {
|
|
134
|
+
tx.mergeCoins(
|
|
135
|
+
mergeDest,
|
|
136
|
+
coins.slice(1).map((coin) =>
|
|
137
|
+
tx!.objectRef({
|
|
138
|
+
objectId: coin.coinObjectId,
|
|
139
|
+
version: coin.version,
|
|
140
|
+
digest: coin.digest,
|
|
141
|
+
})
|
|
142
|
+
)
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (totalSelectedAmount.gt(targetAmount)) {
|
|
147
|
+
const [takeCoin] = tx.splitCoins(mergeDest, [targetAmount.toString()]);
|
|
148
|
+
return takeCoin;
|
|
149
|
+
} else {
|
|
150
|
+
return mergeDest;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
protected async selectCoins(coinType: string, amount: string) {
|
|
156
|
+
this.validateWalletAddress();
|
|
157
|
+
return await selectCoins(this.client, coinType, amount, this.walletAddress);
|
|
158
|
+
}
|
|
159
|
+
abstract setFetchRouteSettings(settings: V): void;
|
|
160
|
+
abstract fetchRoute(params: FetchRouteParams): Promise<FetchRouteResult<U>>;
|
|
161
|
+
abstract buildSwapTransaction(
|
|
162
|
+
params: SwapParams
|
|
163
|
+
): Promise<{ tx: Transaction; coinOut: TransactionObjectArgument }>;
|
|
164
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { CoinMetadata, SuiClient } from '@mysten/sui/client';
|
|
2
|
+
import { normalizeStructTag } from '@mysten/sui/utils';
|
|
3
|
+
|
|
4
|
+
export class CoinMetadataRegistry {
|
|
5
|
+
private cache: Map<string, CoinMetadata> = new Map();
|
|
6
|
+
|
|
7
|
+
constructor(
|
|
8
|
+
public client: SuiClient,
|
|
9
|
+
initialData?: (CoinMetadata & { coinType: string })[]
|
|
10
|
+
) {
|
|
11
|
+
if (initialData) {
|
|
12
|
+
initialData.forEach((data) => this.cache.set(data.coinType, data));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async getCoinMetadata(coinType: string): Promise<CoinMetadata> {
|
|
17
|
+
const normalizedCoinType = normalizeStructTag(coinType);
|
|
18
|
+
if (this.cache.has(normalizedCoinType)) {
|
|
19
|
+
return this.cache.get(normalizedCoinType)!;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const metadata = await this.client.getCoinMetadata({
|
|
23
|
+
coinType: normalizedCoinType,
|
|
24
|
+
});
|
|
25
|
+
if (!metadata) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
`Coin metadata not found for coin type: ${normalizedCoinType}`
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
this.cache.set(normalizedCoinType, metadata);
|
|
31
|
+
return metadata;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import type { ConfigAddresses } from 'aftermath-ts-sdk';
|
|
2
|
+
export const afConfigAddresses: ConfigAddresses = {
|
|
3
|
+
faucet: {
|
|
4
|
+
packages: {
|
|
5
|
+
faucet: '',
|
|
6
|
+
suiFrensGenesisWrapper: '',
|
|
7
|
+
},
|
|
8
|
+
objects: {
|
|
9
|
+
faucet: '',
|
|
10
|
+
faucetRegistry: '',
|
|
11
|
+
suiFrensMint: '',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
staking: {
|
|
15
|
+
packages: {
|
|
16
|
+
lsd: '0x1575034d2729907aefca1ac757d6ccfcd3fc7e9e77927523c06007d8353ad836',
|
|
17
|
+
afsui:
|
|
18
|
+
'0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc',
|
|
19
|
+
events:
|
|
20
|
+
'0x7f6ce7ade63857c4fd16ef7783fed2dfc4d7fb7e40615abdb653030b76aef0c6',
|
|
21
|
+
},
|
|
22
|
+
objects: {
|
|
23
|
+
stakedSuiVault:
|
|
24
|
+
'0x2f8f6d5da7f13ea37daa397724280483ed062769813b6f31e9788e59cc88994d',
|
|
25
|
+
stakedSuiVaultState:
|
|
26
|
+
'0x55486449e41d89cfbdb20e005c1c5c1007858ad5b4d5d7c047d2b3b592fe8791',
|
|
27
|
+
safe: '0xeb685899830dd5837b47007809c76d91a098d52aabbf61e8ac467c59e5cc4610',
|
|
28
|
+
treasury:
|
|
29
|
+
'0xd2b95022244757b0ab9f74e2ee2fb2c3bf29dce5590fa6993a85d64bd219d7e8',
|
|
30
|
+
referralVault:
|
|
31
|
+
'0x4ce9a19b594599536c53edb25d22532f82f18038dc8ef618afd00fbbfb9845ef',
|
|
32
|
+
validatorConfigsTable:
|
|
33
|
+
'0x8536350cfb8a8efdd133a1e087b55416d431f7e8b894f77b55b20c4b799ebad9',
|
|
34
|
+
aftermathValidator:
|
|
35
|
+
'0xd30018ec3f5ff1a3c75656abf927a87d7f0529e6dc89c7ddd1bd27ecb05e3db2',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
pools: {
|
|
39
|
+
packages: {
|
|
40
|
+
amm: '0xc4049b2d1cc0f6e017fda8260e4377cecd236bd7f56a54fee120816e72e2e0dd',
|
|
41
|
+
ammInterface:
|
|
42
|
+
'0x8d8bba50c626753589aa5abbc006c9fa07736f55f4e6fb57481682997c0b0d52',
|
|
43
|
+
events:
|
|
44
|
+
'0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c',
|
|
45
|
+
eventsV2:
|
|
46
|
+
'0xc4049b2d1cc0f6e017fda8260e4377cecd236bd7f56a54fee120816e72e2e0dd',
|
|
47
|
+
},
|
|
48
|
+
objects: {
|
|
49
|
+
poolRegistry:
|
|
50
|
+
'0xfcc774493db2c45c79f688f88d28023a3e7d98e4ee9f48bbf5c7990f651577ae',
|
|
51
|
+
protocolFeeVault:
|
|
52
|
+
'0xf194d9b1bcad972e45a7dd67dd49b3ee1e3357a00a50850c52cd51bb450e13b4',
|
|
53
|
+
treasury:
|
|
54
|
+
'0x28e499dff5e864a2eafe476269a4f5035f1c16f338da7be18b103499abf271ce',
|
|
55
|
+
insuranceFund:
|
|
56
|
+
'0xf0c40d67b078000e18032334c3325c47b9ec9f3d9ae4128be820d54663d14e3b',
|
|
57
|
+
lpCoinsTable:
|
|
58
|
+
'0x7f3bb65251feccacc7f48461239be1008233b85594114f7bf304e5e5b340bf59',
|
|
59
|
+
},
|
|
60
|
+
other: {
|
|
61
|
+
createLpCoinPackageCompilations: {
|
|
62
|
+
'0': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEAAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[167,102,246,194,32,223,3,45,134,147,18,9,59,94,154,58,126,34,119,96,13,193,175,198,63,222,118,4,234,110,46,214]}',
|
|
63
|
+
'1': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEBAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[68,93,25,253,95,37,116,117,115,245,79,81,250,68,193,193,125,175,148,139,217,235,215,33,240,45,78,14,3,86,156,253]}',
|
|
64
|
+
'2': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgECAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[226,124,21,102,7,55,200,164,249,68,13,253,43,195,52,31,88,207,26,30,152,251,208,57,135,126,235,45,23,164,119,82]}',
|
|
65
|
+
'3': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEDAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[1,144,16,189,84,90,47,167,188,222,48,174,25,190,46,185,6,221,67,91,132,40,116,30,179,102,100,127,83,12,109,13]}',
|
|
66
|
+
'4': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEEAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[188,181,24,0,200,201,56,67,47,157,254,230,47,200,183,173,203,125,184,180,21,175,170,42,167,82,194,112,35,226,84,160]}',
|
|
67
|
+
'5': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEFAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[139,229,11,229,58,97,20,164,146,173,45,172,225,131,71,62,84,106,77,218,122,249,243,255,146,34,28,60,77,35,55,138]}',
|
|
68
|
+
'6': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEGAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[57,76,77,44,68,157,60,123,68,75,189,64,53,35,82,187,207,42,126,62,112,57,251,96,190,255,39,160,152,130,157,52]}',
|
|
69
|
+
'7': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEHAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[123,60,245,235,196,138,131,187,192,81,41,5,55,144,176,99,178,245,228,90,186,155,175,11,175,182,127,251,112,69,207,36]}',
|
|
70
|
+
'8': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEIAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[62,140,187,2,13,226,252,216,57,79,25,215,73,0,30,117,240,181,17,67,90,160,116,93,0,185,100,177,98,158,120,249]}',
|
|
71
|
+
'9': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEJAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[224,168,250,132,113,73,22,162,90,31,20,5,146,218,102,211,9,26,235,144,153,60,68,242,99,43,182,103,163,123,70,243]}',
|
|
72
|
+
'10': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEKAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[230,2,103,229,53,229,25,139,165,170,103,184,37,95,22,138,144,54,70,94,84,1,166,69,226,228,2,111,190,177,88,67]}',
|
|
73
|
+
'11': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgELAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[47,22,229,32,128,229,189,95,254,208,76,7,63,57,67,181,242,47,139,87,115,116,187,69,186,231,157,193,217,175,119,251]}',
|
|
74
|
+
'12': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEMAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[84,220,49,85,231,231,205,206,223,231,112,68,34,157,61,115,234,156,6,203,2,158,212,203,215,170,136,228,68,193,188,13]}',
|
|
75
|
+
'13': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgENAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[237,140,135,226,69,221,118,110,149,250,210,127,140,11,253,163,73,64,189,152,115,51,234,40,195,87,188,107,171,233,96,99]}',
|
|
76
|
+
'14': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEOAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[178,202,9,164,149,122,241,165,109,17,64,83,161,86,55,194,230,149,60,174,236,221,205,150,98,176,28,228,122,182,83,85]}',
|
|
77
|
+
'15': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEPAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[162,91,42,1,93,167,63,154,173,142,135,15,249,131,197,24,69,164,212,169,231,169,19,38,42,86,25,84,219,229,233,20]}',
|
|
78
|
+
'16': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgEQAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[79,121,127,12,72,247,127,165,243,18,184,175,76,20,119,251,245,47,31,190,247,87,15,198,47,204,130,99,18,94,161,74]}',
|
|
79
|
+
'17': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgERAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[40,28,55,168,44,135,53,11,9,113,97,54,212,21,163,15,203,241,151,5,117,250,3,22,135,69,113,175,166,166,111,19]}',
|
|
80
|
+
'18': '{"modules":["oRzrCwYAAAAKAQAGAgYIAw4LBBkCBRsRByxPCHtgBtsBAwreAQUM4wEPAAICAwEHAAACAAIBAgAABgABAAEEAwEBAgECAggABwgBAAEIAAMJAAIHCAEFQUZfTFAJVHhDb250ZXh0BWFmX2xwDWFtbV9pbnRlcmZhY2UOY3JlYXRlX2xwX2NvaW4LZHVtbXlfZmllbGQEaW5pdAp0eF9jb250ZXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYl3CzUCu45mKHWYg3oiSlkwVBm4KKF2LVzkQ7Ux11QAgESAAIBBQEAAAAAAQULAAcACwE4AAIA"],"dependencies":["0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c","0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50","0x712579292f80c11a0c9de4ff553d6e5c4757105e83a8a3129823d2b39e65d062","0xa6baab1e668c7868991c1c3c11e144100f5734c407d020f72a01b9d1a8bcb97f","0x0000000000000000000000000000000000000000000000000000000000000001","0x2d9316f1f1a95f6d7c85a4e690ef7c359e6649773ef2c37ad7d9857adb6bef06","0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf","0x0000000000000000000000000000000000000000000000000000000000000002","0x64213b0e4a52bac468d4ac3f140242f70714381653a1919a6d57cd49c628207a","0x73baa782c55003b3a359dec04b189312565d18e7309d4a51f5f112f891e3b2ab"],"digest":[173,252,173,67,1,192,123,156,242,232,253,247,12,147,190,24,152,41,3,166,219,90,110,43,48,139,30,235,10,219,209,58]}',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
suiFrens: {
|
|
85
|
+
packages: {
|
|
86
|
+
suiFrens: '',
|
|
87
|
+
suiFrensBullshark: '',
|
|
88
|
+
accessories: '',
|
|
89
|
+
suiFrensVault: '',
|
|
90
|
+
suiFrensVaultCapyLabsExtension: '',
|
|
91
|
+
},
|
|
92
|
+
objects: {
|
|
93
|
+
capyLabsApp: '',
|
|
94
|
+
suiFrensVault: '',
|
|
95
|
+
suiFrensVaultStateV1: '',
|
|
96
|
+
suiFrensVaultStateV1MetadataTable: '',
|
|
97
|
+
suiFrensVaultCapyLabsExtension: '',
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
nftAmm: {
|
|
101
|
+
packages: {
|
|
102
|
+
nftAmm: '',
|
|
103
|
+
},
|
|
104
|
+
objects: {
|
|
105
|
+
protocolFeeVault: '',
|
|
106
|
+
treasury: '',
|
|
107
|
+
insuranceFund: '',
|
|
108
|
+
referralVault: '',
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
router: {
|
|
112
|
+
packages: {
|
|
113
|
+
utils:
|
|
114
|
+
'0xdc15721baa82ba64822d585a7349a1508f76d94ae80e899b06e48369c257750e',
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
referralVault: {
|
|
118
|
+
packages: {
|
|
119
|
+
referralVault:
|
|
120
|
+
'0xc66fabf1a9253e43c70f1cc02d40a1d18db183140ecaae2a3f58fa6b66c55acf',
|
|
121
|
+
},
|
|
122
|
+
objects: {
|
|
123
|
+
referralVault:
|
|
124
|
+
'0x35d35b0e5b177593d8c3a801462485572fc30861e6ce96a55af6dc4730709278',
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
perpetuals: {
|
|
128
|
+
packages: {
|
|
129
|
+
perpetuals:
|
|
130
|
+
'0xfd6f306bb2f8dce24dd3d4a9bdc51a46e7c932b15007d73ac0cfb38c15de0fea',
|
|
131
|
+
events:
|
|
132
|
+
'0xfd6f306bb2f8dce24dd3d4a9bdc51a46e7c932b15007d73ac0cfb38c15de0fea',
|
|
133
|
+
},
|
|
134
|
+
objects: {
|
|
135
|
+
adminCapability:
|
|
136
|
+
'0x6a99a6701c6aed558f1990260d97cc7f44ae467427f1274a0eb1c25c0fa09530',
|
|
137
|
+
registry:
|
|
138
|
+
'0xbf14a7f4c980c6967026cc8df7d4d70674e5feb04a356edb799916025707e3ef',
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
oracle: {
|
|
142
|
+
packages: {
|
|
143
|
+
oracleReader:
|
|
144
|
+
'0xdfde61a8aa85bffa8708aaac3877e4235174fbea9d973d2edf918e311117a234',
|
|
145
|
+
events:
|
|
146
|
+
'0x241537381737a40df6838bc395fb64f04ff604513c18a2ac3308ac810c805fa6',
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
daoFeePools: {
|
|
150
|
+
packages: {
|
|
151
|
+
amm: '0x5ad6890968efcf3d20899e0cec735214f1067b96e77e77d86408989998468bb2',
|
|
152
|
+
events:
|
|
153
|
+
'0x6f60a091637054e23915b8745c0c0d47b1d49618ee3435b5f68eccf6a44fb53d',
|
|
154
|
+
},
|
|
155
|
+
objects: {
|
|
156
|
+
version:
|
|
157
|
+
'0xb4bfb0f917f12ad2a772bea9b4f22431f6f5f9653162c3ae6fae5b99b21392b7',
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
farms: {
|
|
161
|
+
packages: {
|
|
162
|
+
vaults:
|
|
163
|
+
'0x7ce31301b506b4ed327523061fe95d9c347082fa60da39733f74ffad9a53f8f5',
|
|
164
|
+
vaultsInitial:
|
|
165
|
+
'0x4f0a1a923dd063757fd37e04a9c2cee8980008e94433c9075c390065f98e9e4b',
|
|
166
|
+
vaultsV2:
|
|
167
|
+
'0x2d6755e10132fc1eab5e8a4a3e7ddfdacc31884621592d95fce48ecf1e157db9',
|
|
168
|
+
eventsV2:
|
|
169
|
+
'0x79ee374b9e3c60c00a19fdbeaea25731bbea8f2cab9bb61bb712543e0ba55b7a',
|
|
170
|
+
},
|
|
171
|
+
objects: {
|
|
172
|
+
version:
|
|
173
|
+
'0xdc372fa9b6a538382efc560478a786fcf04e6e34850100020056c98c5c387193',
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
dca: {
|
|
177
|
+
packages: {
|
|
178
|
+
dca: '0x409e2ace51cc5821be41a667e4cb9afa64cde49a7f940c68109db24b39ca93b8',
|
|
179
|
+
events:
|
|
180
|
+
'0x002134246a32eec18e68f1f5aadb8edd34856298ae6d32c145d28f3ca46c7fd1',
|
|
181
|
+
eventsV2:
|
|
182
|
+
'0x409e2ace51cc5821be41a667e4cb9afa64cde49a7f940c68109db24b39ca93b8',
|
|
183
|
+
},
|
|
184
|
+
objects: {
|
|
185
|
+
config:
|
|
186
|
+
'0x1b26465e9c688e3a3d2301f26e25091bc0f91708d953dc220f5697faa8ba9bd6',
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
limitOrders: {
|
|
190
|
+
packages: {
|
|
191
|
+
limitOrders:
|
|
192
|
+
'0xe57ee3613b7dece546f8a2d8a53145cbab41d32b86037b94f9ebfcbcfa66885a',
|
|
193
|
+
events:
|
|
194
|
+
'0xe57ee3613b7dece546f8a2d8a53145cbab41d32b86037b94f9ebfcbcfa66885a',
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
dynamicGas: {
|
|
198
|
+
sponsorAddress:
|
|
199
|
+
'0xae4ba5f592e695a46d58a0579aa5d4f6ebead46be0f2d5bd229d5c292290548c',
|
|
200
|
+
},
|
|
201
|
+
leveragedStaking: {
|
|
202
|
+
packages: {
|
|
203
|
+
leveragedAfSui: '',
|
|
204
|
+
leveragedAfSuiInitial: '',
|
|
205
|
+
},
|
|
206
|
+
objects: {
|
|
207
|
+
leveragedAfSuiState: '',
|
|
208
|
+
afSuiSuiPoolId: '',
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
scallop: {
|
|
212
|
+
objects: {
|
|
213
|
+
version: '',
|
|
214
|
+
afSuiMarket: '',
|
|
215
|
+
coinDecimalsRegistry: '',
|
|
216
|
+
xOracle: '',
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
sharedCustody: {
|
|
220
|
+
address:
|
|
221
|
+
'0xafe2fafac0b048c9c70a61cc1798400a85173df96b30118c40af6f3382b5a777',
|
|
222
|
+
publicKey: 'AMylYwVSuJQmTmDm6KuPlNwLnTtkk63HqOByubxxsVeC',
|
|
223
|
+
},
|
|
224
|
+
nfts: {
|
|
225
|
+
packages: {
|
|
226
|
+
mystenTransferPolicy:
|
|
227
|
+
'0x0cb4bcc0560340eb1a1b929cabe56b33fc6449820ec8c1980d69bb98b649b802',
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './afAddresses';
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Aggregator } from 'src/class';
|
|
2
|
+
import { config } from 'dotenv';
|
|
3
|
+
import { AftermathSwap, CetusSwap } from 'src/sdk';
|
|
4
|
+
config();
|
|
5
|
+
|
|
6
|
+
const main = async () => {
|
|
7
|
+
try {
|
|
8
|
+
const aggregator = new Aggregator({
|
|
9
|
+
secretKey: process.env.SECRET_KEY as string,
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
aggregator.setSlippage(10); // 0.1%
|
|
13
|
+
|
|
14
|
+
const cetusSwap = new CetusSwap({
|
|
15
|
+
walletAddress: aggregator.walletAddress,
|
|
16
|
+
client: aggregator.client,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const afSwap = new AftermathSwap({
|
|
20
|
+
walletAddress: aggregator.walletAddress,
|
|
21
|
+
client: aggregator.client,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
aggregator.addAggregator([cetusSwap, afSwap]);
|
|
25
|
+
|
|
26
|
+
const coinInType = '0x2::sui::SUI';
|
|
27
|
+
const coinOutType =
|
|
28
|
+
'0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA';
|
|
29
|
+
|
|
30
|
+
// Fetch routes and sort by best output amount
|
|
31
|
+
await aggregator.fetchRoute({
|
|
32
|
+
coinInType,
|
|
33
|
+
coinOutType,
|
|
34
|
+
swapAmount: BigInt(1e8), // 0.1 SUI
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
await aggregator.buildBestRouteTransaction();
|
|
38
|
+
const { effects, digest } = await aggregator.executeBestRoute();
|
|
39
|
+
console.log(`${effects?.status.status}: ${digest}`);
|
|
40
|
+
} catch (e) {
|
|
41
|
+
console.error(e);
|
|
42
|
+
} finally {
|
|
43
|
+
process.exit(0);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
main();
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AccountManagerParams, SuiKitParams } from '@scallop-io/sui-kit';
|
|
2
|
+
|
|
3
|
+
type SecretKeyOrMnemonicsOrWalletAddress =
|
|
4
|
+
| {
|
|
5
|
+
mnemonics: string;
|
|
6
|
+
secretKey?: never;
|
|
7
|
+
walletAddress?: never;
|
|
8
|
+
}
|
|
9
|
+
| {
|
|
10
|
+
secretKey: string;
|
|
11
|
+
mnemonics?: never;
|
|
12
|
+
walletAddress?: never;
|
|
13
|
+
}
|
|
14
|
+
| {
|
|
15
|
+
walletAddress: string;
|
|
16
|
+
mnemonics?: never;
|
|
17
|
+
secretKey?: never;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type AggregatorConstructorParams = Omit<
|
|
21
|
+
SuiKitParams,
|
|
22
|
+
keyof AccountManagerParams
|
|
23
|
+
> &
|
|
24
|
+
SecretKeyOrMnemonicsOrWalletAddress & { fullnodeUrl?: string };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Transaction,
|
|
3
|
+
TransactionObjectArgument,
|
|
4
|
+
} from '@mysten/sui/transactions';
|
|
5
|
+
import { FetchRouteResult } from './route';
|
|
6
|
+
import { SuiClient } from '@mysten/sui/client';
|
|
7
|
+
|
|
8
|
+
export type FetchRouteParams = {
|
|
9
|
+
coinInType: string;
|
|
10
|
+
coinOutType: string;
|
|
11
|
+
swapAmount: bigint;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type SwapParams = {
|
|
15
|
+
slippage: number; // in bps, 1bps = 0.01% = 0.0001
|
|
16
|
+
minAmountOut?: bigint; // For slippage calculation
|
|
17
|
+
// swapFee?: number;
|
|
18
|
+
txExtensionParams?: {
|
|
19
|
+
initTx: Transaction;
|
|
20
|
+
coinIn: TransactionObjectArgument;
|
|
21
|
+
};
|
|
22
|
+
mergeOutputCoin?: boolean; // whether to merge the output coin with existing coin in wallet
|
|
23
|
+
};
|
|
24
|
+
export interface SwapBuildResult {
|
|
25
|
+
tx: Transaction;
|
|
26
|
+
coinOut: TransactionObjectArgument;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface SwapSdkConstructorParams {
|
|
30
|
+
client?: SuiClient;
|
|
31
|
+
fetchTimeoutInMs?: number;
|
|
32
|
+
cacheTimeInMs?: number;
|
|
33
|
+
walletAddress: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Base interface for Swap SDK
|
|
38
|
+
*/
|
|
39
|
+
export interface SwapSdkBaseInterface<T = string, U = any, V = any> {
|
|
40
|
+
/**
|
|
41
|
+
* How long the route result is cached (in milliseconds)
|
|
42
|
+
*/
|
|
43
|
+
cacheTimeInMs?: number;
|
|
44
|
+
lastFetchTimestamp?: number;
|
|
45
|
+
/**
|
|
46
|
+
* How long the route fetch request should wait before timing out (in milliseconds)
|
|
47
|
+
*/
|
|
48
|
+
fetchTimeoutInMs?: number; // Timeout for fetching route
|
|
49
|
+
/**
|
|
50
|
+
* Pools or DEXes available in the SDK
|
|
51
|
+
*/
|
|
52
|
+
pools?: T[];
|
|
53
|
+
/**
|
|
54
|
+
* Fetch route settings based on SDK-specific settings
|
|
55
|
+
*/
|
|
56
|
+
fetchSettings?: V;
|
|
57
|
+
/**
|
|
58
|
+
* Set fetch route settings based on SDK-specific settings
|
|
59
|
+
* @param settings
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
setFetchRouteSettings: (settings: V) => void;
|
|
63
|
+
changeClient: (client: SuiClient) => void;
|
|
64
|
+
setWalletAddress: (address: string) => void;
|
|
65
|
+
/**
|
|
66
|
+
* Calculate slippage based on basis points (bps) input.
|
|
67
|
+
* @param slippageInBps
|
|
68
|
+
* @returns slippage in required format or notation
|
|
69
|
+
*/
|
|
70
|
+
calcSlippage: (slippageInBps: number) => number; // 1bps = 0.01% = 0.0001
|
|
71
|
+
fetchRoute: (params: FetchRouteParams) => Promise<FetchRouteResult<U>>;
|
|
72
|
+
/**
|
|
73
|
+
* Select coinIn for swap transaction
|
|
74
|
+
* @param tx
|
|
75
|
+
* @param amount
|
|
76
|
+
* @param coinType
|
|
77
|
+
* @returns Promise<TransactionObjectArgument>
|
|
78
|
+
*/
|
|
79
|
+
selectCoinInForSwap: (
|
|
80
|
+
tx: Transaction,
|
|
81
|
+
amount: bigint,
|
|
82
|
+
coinType: string
|
|
83
|
+
) => Promise<TransactionObjectArgument>;
|
|
84
|
+
buildSwapTransaction: (params: SwapParams) => Promise<SwapBuildResult>;
|
|
85
|
+
}
|