@atomiqlabs/chain-solana 10.0.0-dev.3 → 11.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 +201 -201
- package/dist/index.d.ts +29 -29
- package/dist/index.js +45 -45
- package/dist/solana/SolanaChainType.d.ts +10 -10
- package/dist/solana/SolanaChainType.js +2 -2
- package/dist/solana/SolanaChains.d.ts +20 -20
- package/dist/solana/SolanaChains.js +25 -25
- package/dist/solana/SolanaInitializer.d.ts +18 -18
- package/dist/solana/SolanaInitializer.js +63 -63
- package/dist/solana/btcrelay/SolanaBtcRelay.d.ts +228 -228
- package/dist/solana/btcrelay/SolanaBtcRelay.js +441 -441
- package/dist/solana/btcrelay/headers/SolanaBtcHeader.d.ts +29 -29
- package/dist/solana/btcrelay/headers/SolanaBtcHeader.js +34 -34
- package/dist/solana/btcrelay/headers/SolanaBtcStoredHeader.d.ts +46 -46
- package/dist/solana/btcrelay/headers/SolanaBtcStoredHeader.js +78 -78
- package/dist/solana/btcrelay/program/programIdl.json +671 -671
- package/dist/solana/chain/SolanaAction.d.ts +26 -26
- package/dist/solana/chain/SolanaAction.js +86 -86
- package/dist/solana/chain/SolanaChainInterface.d.ts +58 -58
- package/dist/solana/chain/SolanaChainInterface.js +112 -112
- package/dist/solana/chain/SolanaModule.d.ts +14 -14
- package/dist/solana/chain/SolanaModule.js +13 -13
- package/dist/solana/chain/modules/SolanaAddresses.d.ts +8 -8
- package/dist/solana/chain/modules/SolanaAddresses.js +22 -22
- package/dist/solana/chain/modules/SolanaBlocks.d.ts +28 -28
- package/dist/solana/chain/modules/SolanaBlocks.js +72 -72
- package/dist/solana/chain/modules/SolanaEvents.d.ts +25 -25
- package/dist/solana/chain/modules/SolanaEvents.js +58 -58
- package/dist/solana/chain/modules/SolanaFees.d.ts +121 -121
- package/dist/solana/chain/modules/SolanaFees.js +379 -379
- package/dist/solana/chain/modules/SolanaSignatures.d.ts +23 -23
- package/dist/solana/chain/modules/SolanaSignatures.js +39 -39
- package/dist/solana/chain/modules/SolanaSlots.d.ts +31 -31
- package/dist/solana/chain/modules/SolanaSlots.js +68 -68
- package/dist/solana/chain/modules/SolanaTokens.d.ts +136 -136
- package/dist/solana/chain/modules/SolanaTokens.js +248 -248
- package/dist/solana/chain/modules/SolanaTransactions.d.ts +124 -124
- package/dist/solana/chain/modules/SolanaTransactions.js +332 -332
- package/dist/solana/events/SolanaChainEvents.d.ts +88 -88
- package/dist/solana/events/SolanaChainEvents.js +256 -256
- package/dist/solana/events/SolanaChainEventsBrowser.d.ts +85 -85
- package/dist/solana/events/SolanaChainEventsBrowser.js +194 -194
- package/dist/solana/program/SolanaProgramBase.d.ts +40 -40
- package/dist/solana/program/SolanaProgramBase.js +43 -43
- package/dist/solana/program/SolanaProgramModule.d.ts +8 -8
- package/dist/solana/program/SolanaProgramModule.js +11 -11
- package/dist/solana/program/modules/SolanaProgramEvents.d.ts +59 -59
- package/dist/solana/program/modules/SolanaProgramEvents.js +103 -103
- package/dist/solana/swaps/SolanaSwapData.d.ts +59 -59
- package/dist/solana/swaps/SolanaSwapData.js +267 -267
- package/dist/solana/swaps/SolanaSwapModule.d.ts +10 -10
- package/dist/solana/swaps/SolanaSwapModule.js +11 -11
- package/dist/solana/swaps/SolanaSwapProgram.d.ts +202 -202
- package/dist/solana/swaps/SolanaSwapProgram.js +470 -463
- package/dist/solana/swaps/SwapTypeEnum.d.ts +11 -11
- package/dist/solana/swaps/SwapTypeEnum.js +42 -42
- package/dist/solana/swaps/modules/SolanaDataAccount.d.ts +94 -94
- package/dist/solana/swaps/modules/SolanaDataAccount.js +231 -231
- package/dist/solana/swaps/modules/SolanaLpVault.d.ts +71 -71
- package/dist/solana/swaps/modules/SolanaLpVault.js +173 -173
- package/dist/solana/swaps/modules/SwapClaim.d.ts +129 -129
- package/dist/solana/swaps/modules/SwapClaim.js +291 -291
- package/dist/solana/swaps/modules/SwapInit.d.ts +217 -217
- package/dist/solana/swaps/modules/SwapInit.js +519 -519
- package/dist/solana/swaps/modules/SwapRefund.d.ts +82 -82
- package/dist/solana/swaps/modules/SwapRefund.js +252 -252
- package/dist/solana/swaps/programIdl.json +945 -945
- package/dist/solana/swaps/programTypes.d.ts +943 -943
- package/dist/solana/swaps/programTypes.js +945 -945
- package/dist/solana/wallet/SolanaKeypairWallet.d.ts +9 -9
- package/dist/solana/wallet/SolanaKeypairWallet.js +33 -33
- package/dist/solana/wallet/SolanaSigner.d.ts +10 -10
- package/dist/solana/wallet/SolanaSigner.js +16 -16
- package/dist/utils/Utils.d.ts +53 -53
- package/dist/utils/Utils.js +170 -170
- package/package.json +41 -41
- package/src/index.ts +36 -36
- package/src/solana/SolanaChainType.ts +25 -25
- package/src/solana/SolanaChains.ts +23 -23
- package/src/solana/SolanaInitializer.ts +102 -102
- package/src/solana/btcrelay/SolanaBtcRelay.ts +589 -588
- package/src/solana/btcrelay/headers/SolanaBtcHeader.ts +57 -57
- package/src/solana/btcrelay/headers/SolanaBtcStoredHeader.ts +102 -102
- package/src/solana/btcrelay/program/programIdl.json +670 -670
- package/src/solana/chain/SolanaAction.ts +108 -108
- package/src/solana/chain/SolanaChainInterface.ts +174 -174
- package/src/solana/chain/SolanaModule.ts +20 -20
- package/src/solana/chain/modules/SolanaAddresses.ts +20 -20
- package/src/solana/chain/modules/SolanaBlocks.ts +78 -78
- package/src/solana/chain/modules/SolanaEvents.ts +56 -56
- package/src/solana/chain/modules/SolanaFees.ts +450 -450
- package/src/solana/chain/modules/SolanaSignatures.ts +39 -39
- package/src/solana/chain/modules/SolanaSlots.ts +82 -82
- package/src/solana/chain/modules/SolanaTokens.ts +307 -307
- package/src/solana/chain/modules/SolanaTransactions.ts +370 -370
- package/src/solana/events/SolanaChainEvents.ts +299 -299
- package/src/solana/events/SolanaChainEventsBrowser.ts +256 -256
- package/src/solana/program/SolanaProgramBase.ts +79 -79
- package/src/solana/program/SolanaProgramModule.ts +15 -15
- package/src/solana/program/modules/SolanaProgramEvents.ts +140 -140
- package/src/solana/swaps/SolanaSwapData.ts +379 -379
- package/src/solana/swaps/SolanaSwapModule.ts +16 -16
- package/src/solana/swaps/SolanaSwapProgram.ts +697 -692
- package/src/solana/swaps/SwapTypeEnum.ts +29 -29
- package/src/solana/swaps/modules/SolanaDataAccount.ts +307 -307
- package/src/solana/swaps/modules/SolanaLpVault.ts +215 -215
- package/src/solana/swaps/modules/SwapClaim.ts +389 -389
- package/src/solana/swaps/modules/SwapInit.ts +663 -663
- package/src/solana/swaps/modules/SwapRefund.ts +312 -312
- package/src/solana/swaps/programIdl.json +944 -944
- package/src/solana/swaps/programTypes.ts +1885 -1885
- package/src/solana/wallet/SolanaKeypairWallet.ts +36 -36
- package/src/solana/wallet/SolanaSigner.ts +23 -23
- package/src/utils/Utils.ts +180 -180
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
import {SolanaModule} from "../SolanaModule";
|
|
2
|
-
import {Commitment, ParsedAccountsModeBlockResponse} from "@solana/web3.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export class SolanaBlocks extends SolanaModule {
|
|
6
|
-
|
|
7
|
-
private blockCache: Map<number, Promise<ParsedAccountsModeBlockResponse>> = new Map<number, Promise<ParsedAccountsModeBlockResponse>>();
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Initiates a fetch of the block at specified slot & saves the fetch promise into a block cache
|
|
11
|
-
*
|
|
12
|
-
* @param slot
|
|
13
|
-
* @private
|
|
14
|
-
*/
|
|
15
|
-
private fetchAndSaveParsedBlock(slot: number): Promise<ParsedAccountsModeBlockResponse> {
|
|
16
|
-
const blockCacheData = this.connection.getParsedBlock(slot, {
|
|
17
|
-
transactionDetails: "none",
|
|
18
|
-
commitment: "confirmed",
|
|
19
|
-
rewards: false
|
|
20
|
-
});
|
|
21
|
-
this.blockCache.set(slot, blockCacheData);
|
|
22
|
-
blockCacheData.catch(e => {
|
|
23
|
-
if(this.blockCache.get(slot)==blockCacheData) this.blockCache.delete(slot);
|
|
24
|
-
throw e;
|
|
25
|
-
});
|
|
26
|
-
return blockCacheData;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
///////////////////
|
|
30
|
-
//// Blocks
|
|
31
|
-
/**
|
|
32
|
-
* Tries to find the latest existing block for a given commitment, skipping blocks that are not available, runs a
|
|
33
|
-
* search backwards from the latest slot for the given commitment and fails after 10 tries
|
|
34
|
-
*
|
|
35
|
-
* @param commitment
|
|
36
|
-
*/
|
|
37
|
-
public async findLatestParsedBlock(commitment: Commitment): Promise<{
|
|
38
|
-
block: ParsedAccountsModeBlockResponse,
|
|
39
|
-
slot: number
|
|
40
|
-
}> {
|
|
41
|
-
let slot = await this.root.Slots.getSlot(commitment);
|
|
42
|
-
|
|
43
|
-
for(let i=0;i<10;i++) {
|
|
44
|
-
const block = await this.getParsedBlock(slot).catch(e => {
|
|
45
|
-
if(e.toString().startsWith("SolanaJSONRPCError: failed to get block: Block not available for slot")) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
throw e;
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
if(block!=null) {
|
|
52
|
-
this.logger.debug("findLatestParsedBlock(): Found valid block, slot: "+slot+
|
|
53
|
-
" blockhash: "+block.blockhash+" tries: "+i);
|
|
54
|
-
return {
|
|
55
|
-
block,
|
|
56
|
-
slot
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
slot--;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
throw new Error("Ran out of tries trying to find a parsedBlock");
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Gets parsed block for a given slot, uses block cache if the block was already fetched before
|
|
68
|
-
*
|
|
69
|
-
* @param slot
|
|
70
|
-
*/
|
|
71
|
-
public getParsedBlock(slot: number): Promise<ParsedAccountsModeBlockResponse> {
|
|
72
|
-
let blockCacheData = this.blockCache.get(slot);
|
|
73
|
-
if(blockCacheData==null) {
|
|
74
|
-
blockCacheData = this.fetchAndSaveParsedBlock(slot);
|
|
75
|
-
}
|
|
76
|
-
return blockCacheData;
|
|
77
|
-
}
|
|
78
|
-
|
|
1
|
+
import {SolanaModule} from "../SolanaModule";
|
|
2
|
+
import {Commitment, ParsedAccountsModeBlockResponse} from "@solana/web3.js";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export class SolanaBlocks extends SolanaModule {
|
|
6
|
+
|
|
7
|
+
private blockCache: Map<number, Promise<ParsedAccountsModeBlockResponse>> = new Map<number, Promise<ParsedAccountsModeBlockResponse>>();
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Initiates a fetch of the block at specified slot & saves the fetch promise into a block cache
|
|
11
|
+
*
|
|
12
|
+
* @param slot
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
private fetchAndSaveParsedBlock(slot: number): Promise<ParsedAccountsModeBlockResponse> {
|
|
16
|
+
const blockCacheData = this.connection.getParsedBlock(slot, {
|
|
17
|
+
transactionDetails: "none",
|
|
18
|
+
commitment: "confirmed",
|
|
19
|
+
rewards: false
|
|
20
|
+
});
|
|
21
|
+
this.blockCache.set(slot, blockCacheData);
|
|
22
|
+
blockCacheData.catch(e => {
|
|
23
|
+
if(this.blockCache.get(slot)==blockCacheData) this.blockCache.delete(slot);
|
|
24
|
+
throw e;
|
|
25
|
+
});
|
|
26
|
+
return blockCacheData;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
///////////////////
|
|
30
|
+
//// Blocks
|
|
31
|
+
/**
|
|
32
|
+
* Tries to find the latest existing block for a given commitment, skipping blocks that are not available, runs a
|
|
33
|
+
* search backwards from the latest slot for the given commitment and fails after 10 tries
|
|
34
|
+
*
|
|
35
|
+
* @param commitment
|
|
36
|
+
*/
|
|
37
|
+
public async findLatestParsedBlock(commitment: Commitment): Promise<{
|
|
38
|
+
block: ParsedAccountsModeBlockResponse,
|
|
39
|
+
slot: number
|
|
40
|
+
}> {
|
|
41
|
+
let slot = await this.root.Slots.getSlot(commitment);
|
|
42
|
+
|
|
43
|
+
for(let i=0;i<10;i++) {
|
|
44
|
+
const block = await this.getParsedBlock(slot).catch(e => {
|
|
45
|
+
if(e.toString().startsWith("SolanaJSONRPCError: failed to get block: Block not available for slot")) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
throw e;
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
if(block!=null) {
|
|
52
|
+
this.logger.debug("findLatestParsedBlock(): Found valid block, slot: "+slot+
|
|
53
|
+
" blockhash: "+block.blockhash+" tries: "+i);
|
|
54
|
+
return {
|
|
55
|
+
block,
|
|
56
|
+
slot
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
slot--;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
throw new Error("Ran out of tries trying to find a parsedBlock");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Gets parsed block for a given slot, uses block cache if the block was already fetched before
|
|
68
|
+
*
|
|
69
|
+
* @param slot
|
|
70
|
+
*/
|
|
71
|
+
public getParsedBlock(slot: number): Promise<ParsedAccountsModeBlockResponse> {
|
|
72
|
+
let blockCacheData = this.blockCache.get(slot);
|
|
73
|
+
if(blockCacheData==null) {
|
|
74
|
+
blockCacheData = this.fetchAndSaveParsedBlock(slot);
|
|
75
|
+
}
|
|
76
|
+
return blockCacheData;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
79
|
}
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import {SolanaModule} from "../SolanaModule";
|
|
2
|
-
import {ConfirmedSignatureInfo, PublicKey} from "@solana/web3.js";
|
|
3
|
-
|
|
4
|
-
export class SolanaEvents extends SolanaModule {
|
|
5
|
-
|
|
6
|
-
public readonly LOG_FETCH_LIMIT = 500;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Gets the signatures for a given topicKey public key, if lastProcessedSignature is specified, it fetches only
|
|
10
|
-
* the signatures before this signature
|
|
11
|
-
*
|
|
12
|
-
* @param topicKey
|
|
13
|
-
* @param logFetchLimit
|
|
14
|
-
* @param lastProcessedSignature
|
|
15
|
-
* @private
|
|
16
|
-
*/
|
|
17
|
-
private getSignatures(topicKey: PublicKey, logFetchLimit: number, lastProcessedSignature?: string): Promise<ConfirmedSignatureInfo[]> {
|
|
18
|
-
if(lastProcessedSignature==null) {
|
|
19
|
-
return this.connection.getSignaturesForAddress(topicKey, {
|
|
20
|
-
limit: logFetchLimit,
|
|
21
|
-
}, "confirmed");
|
|
22
|
-
} else {
|
|
23
|
-
return this.connection.getSignaturesForAddress(topicKey, {
|
|
24
|
-
before: lastProcessedSignature,
|
|
25
|
-
limit: logFetchLimit
|
|
26
|
-
}, "confirmed");
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Runs a search backwards in time, processing transaction signatures for a specific topic public key
|
|
32
|
-
*
|
|
33
|
-
* @param topicKey
|
|
34
|
-
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
35
|
-
* was found, or null if the search should continue
|
|
36
|
-
* @param abortSignal
|
|
37
|
-
* @param logFetchLimit
|
|
38
|
-
*/
|
|
39
|
-
public async findInSignatures<T>(
|
|
40
|
-
topicKey: PublicKey,
|
|
41
|
-
processor: (signatures: ConfirmedSignatureInfo[]) => Promise<T>,
|
|
42
|
-
abortSignal?: AbortSignal,
|
|
43
|
-
logFetchLimit?: number
|
|
44
|
-
): Promise<T> {
|
|
45
|
-
if(logFetchLimit==null || logFetchLimit>this.LOG_FETCH_LIMIT) logFetchLimit = this.LOG_FETCH_LIMIT;
|
|
46
|
-
let signatures: ConfirmedSignatureInfo[] = null;
|
|
47
|
-
while(signatures==null || signatures.length>0) {
|
|
48
|
-
signatures = await this.getSignatures(topicKey, logFetchLimit, signatures!=null ? signatures[signatures.length-1].signature : null);
|
|
49
|
-
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
50
|
-
const result: T = await processor(signatures);
|
|
51
|
-
if(result!=null) return result;
|
|
52
|
-
if(signatures.length<logFetchLimit) break;
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
|
|
1
|
+
import {SolanaModule} from "../SolanaModule";
|
|
2
|
+
import {ConfirmedSignatureInfo, PublicKey} from "@solana/web3.js";
|
|
3
|
+
|
|
4
|
+
export class SolanaEvents extends SolanaModule {
|
|
5
|
+
|
|
6
|
+
public readonly LOG_FETCH_LIMIT = 500;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Gets the signatures for a given topicKey public key, if lastProcessedSignature is specified, it fetches only
|
|
10
|
+
* the signatures before this signature
|
|
11
|
+
*
|
|
12
|
+
* @param topicKey
|
|
13
|
+
* @param logFetchLimit
|
|
14
|
+
* @param lastProcessedSignature
|
|
15
|
+
* @private
|
|
16
|
+
*/
|
|
17
|
+
private getSignatures(topicKey: PublicKey, logFetchLimit: number, lastProcessedSignature?: string): Promise<ConfirmedSignatureInfo[]> {
|
|
18
|
+
if(lastProcessedSignature==null) {
|
|
19
|
+
return this.connection.getSignaturesForAddress(topicKey, {
|
|
20
|
+
limit: logFetchLimit,
|
|
21
|
+
}, "confirmed");
|
|
22
|
+
} else {
|
|
23
|
+
return this.connection.getSignaturesForAddress(topicKey, {
|
|
24
|
+
before: lastProcessedSignature,
|
|
25
|
+
limit: logFetchLimit
|
|
26
|
+
}, "confirmed");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Runs a search backwards in time, processing transaction signatures for a specific topic public key
|
|
32
|
+
*
|
|
33
|
+
* @param topicKey
|
|
34
|
+
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
35
|
+
* was found, or null if the search should continue
|
|
36
|
+
* @param abortSignal
|
|
37
|
+
* @param logFetchLimit
|
|
38
|
+
*/
|
|
39
|
+
public async findInSignatures<T>(
|
|
40
|
+
topicKey: PublicKey,
|
|
41
|
+
processor: (signatures: ConfirmedSignatureInfo[]) => Promise<T>,
|
|
42
|
+
abortSignal?: AbortSignal,
|
|
43
|
+
logFetchLimit?: number
|
|
44
|
+
): Promise<T> {
|
|
45
|
+
if(logFetchLimit==null || logFetchLimit>this.LOG_FETCH_LIMIT) logFetchLimit = this.LOG_FETCH_LIMIT;
|
|
46
|
+
let signatures: ConfirmedSignatureInfo[] = null;
|
|
47
|
+
while(signatures==null || signatures.length>0) {
|
|
48
|
+
signatures = await this.getSignatures(topicKey, logFetchLimit, signatures!=null ? signatures[signatures.length-1].signature : null);
|
|
49
|
+
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
50
|
+
const result: T = await processor(signatures);
|
|
51
|
+
if(result!=null) return result;
|
|
52
|
+
if(signatures.length<logFetchLimit) break;
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
57
|
}
|