@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.
@@ -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,2 @@
1
+ export * from './base';
2
+ export * from './aggregator';
@@ -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,5 @@
1
+ export * from './class';
2
+ export * from './interface';
3
+ export * from './sdk';
4
+ export * from './const';
5
+ export * from './utils';
@@ -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
+ }
@@ -0,0 +1,2 @@
1
+ export type * from './base';
2
+ export type * from './route';