@atomiqlabs/chain-solana 12.0.13 → 12.0.15
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 +11 -11
- 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 +65 -65
- package/dist/solana/chain/SolanaChainInterface.js +125 -125
- 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 +68 -68
- package/dist/solana/chain/modules/SolanaEvents.js +238 -225
- 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 +323 -323
- package/dist/solana/events/SolanaChainEvents.d.ts +88 -88
- package/dist/solana/events/SolanaChainEvents.js +256 -256
- package/dist/solana/events/SolanaChainEventsBrowser.d.ts +75 -75
- package/dist/solana/events/SolanaChainEventsBrowser.js +172 -172
- 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 +53 -53
- package/dist/solana/program/modules/SolanaProgramEvents.js +114 -114
- package/dist/solana/swaps/SolanaSwapData.d.ts +71 -71
- package/dist/solana/swaps/SolanaSwapData.js +292 -292
- package/dist/solana/swaps/SolanaSwapModule.d.ts +10 -10
- package/dist/solana/swaps/SolanaSwapModule.js +11 -11
- package/dist/solana/swaps/SolanaSwapProgram.d.ts +224 -224
- package/dist/solana/swaps/SolanaSwapProgram.js +570 -570
- 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 +262 -262
- 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 +11 -11
- package/dist/solana/wallet/SolanaSigner.js +17 -17
- 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 +27 -27
- package/src/solana/SolanaChains.ts +23 -23
- package/src/solana/SolanaInitializer.ts +102 -102
- package/src/solana/btcrelay/SolanaBtcRelay.ts +589 -589
- 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 +192 -192
- 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 +270 -256
- 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 +365 -365
- package/src/solana/events/SolanaChainEvents.ts +299 -299
- package/src/solana/events/SolanaChainEventsBrowser.ts +209 -209
- package/src/solana/program/SolanaProgramBase.ts +79 -79
- package/src/solana/program/SolanaProgramModule.ts +15 -15
- package/src/solana/program/modules/SolanaProgramEvents.ts +155 -155
- package/src/solana/swaps/SolanaSwapData.ts +430 -430
- package/src/solana/swaps/SolanaSwapModule.ts +16 -16
- package/src/solana/swaps/SolanaSwapProgram.ts +854 -854
- 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 +323 -323
- 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 +24 -24
- package/src/utils/Utils.ts +180 -180
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import {SolanaModule} from "../SolanaModule";
|
|
2
|
-
import {sign} from "tweetnacl";
|
|
3
|
-
import {PublicKey} from "@solana/web3.js";
|
|
4
|
-
import {Buffer} from "buffer";
|
|
5
|
-
import {SolanaSigner} from "../../wallet/SolanaSigner";
|
|
6
|
-
import {sha256} from "@noble/hashes/sha2";
|
|
7
|
-
|
|
8
|
-
export class SolanaSignatures extends SolanaModule {
|
|
9
|
-
|
|
10
|
-
///////////////////
|
|
11
|
-
//// Data signatures
|
|
12
|
-
/**
|
|
13
|
-
* Produces an ed25519 signature over the sha256 of a specified data Buffer, only works with providers which
|
|
14
|
-
* expose their private key (i.e. backend based, not browser wallet based)
|
|
15
|
-
*
|
|
16
|
-
* @param signer
|
|
17
|
-
* @param data data to sign
|
|
18
|
-
*/
|
|
19
|
-
getDataSignature(signer: SolanaSigner, data: Buffer): Promise<string> {
|
|
20
|
-
if(signer.keypair==null) throw new Error("Unsupported");
|
|
21
|
-
const buff = sha256(data);
|
|
22
|
-
const signature = sign.detached(buff, signer.keypair.secretKey);
|
|
23
|
-
|
|
24
|
-
return Promise.resolve(Buffer.from(signature).toString("hex"));
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Checks whether a signature is a valid Ed25519 signature produced by publicKey over a data message (computes
|
|
29
|
-
* sha256 hash of the message)
|
|
30
|
-
*
|
|
31
|
-
* @param data signed data
|
|
32
|
-
* @param signature data signature
|
|
33
|
-
* @param publicKey public key of the signer
|
|
34
|
-
*/
|
|
35
|
-
isValidDataSignature(data: Buffer, signature: string, publicKey: string): Promise<boolean> {
|
|
36
|
-
const hash = sha256(data);
|
|
37
|
-
return Promise.resolve(sign.detached.verify(hash, Buffer.from(signature, "hex"), new PublicKey(publicKey).toBuffer()));
|
|
38
|
-
}
|
|
39
|
-
|
|
1
|
+
import {SolanaModule} from "../SolanaModule";
|
|
2
|
+
import {sign} from "tweetnacl";
|
|
3
|
+
import {PublicKey} from "@solana/web3.js";
|
|
4
|
+
import {Buffer} from "buffer";
|
|
5
|
+
import {SolanaSigner} from "../../wallet/SolanaSigner";
|
|
6
|
+
import {sha256} from "@noble/hashes/sha2";
|
|
7
|
+
|
|
8
|
+
export class SolanaSignatures extends SolanaModule {
|
|
9
|
+
|
|
10
|
+
///////////////////
|
|
11
|
+
//// Data signatures
|
|
12
|
+
/**
|
|
13
|
+
* Produces an ed25519 signature over the sha256 of a specified data Buffer, only works with providers which
|
|
14
|
+
* expose their private key (i.e. backend based, not browser wallet based)
|
|
15
|
+
*
|
|
16
|
+
* @param signer
|
|
17
|
+
* @param data data to sign
|
|
18
|
+
*/
|
|
19
|
+
getDataSignature(signer: SolanaSigner, data: Buffer): Promise<string> {
|
|
20
|
+
if(signer.keypair==null) throw new Error("Unsupported");
|
|
21
|
+
const buff = sha256(data);
|
|
22
|
+
const signature = sign.detached(buff, signer.keypair.secretKey);
|
|
23
|
+
|
|
24
|
+
return Promise.resolve(Buffer.from(signature).toString("hex"));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Checks whether a signature is a valid Ed25519 signature produced by publicKey over a data message (computes
|
|
29
|
+
* sha256 hash of the message)
|
|
30
|
+
*
|
|
31
|
+
* @param data signed data
|
|
32
|
+
* @param signature data signature
|
|
33
|
+
* @param publicKey public key of the signer
|
|
34
|
+
*/
|
|
35
|
+
isValidDataSignature(data: Buffer, signature: string, publicKey: string): Promise<boolean> {
|
|
36
|
+
const hash = sha256(data);
|
|
37
|
+
return Promise.resolve(sign.detached.verify(hash, Buffer.from(signature, "hex"), new PublicKey(publicKey).toBuffer()));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
40
|
}
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
import {SolanaModule} from "../SolanaModule";
|
|
2
|
-
import {Commitment} from "@solana/web3.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export class SolanaSlots extends SolanaModule {
|
|
6
|
-
|
|
7
|
-
public readonly SLOT_CACHE_SLOTS = 12;
|
|
8
|
-
public readonly SLOT_CACHE_TIME = this.SLOT_CACHE_SLOTS*this.root.SLOT_TIME;
|
|
9
|
-
|
|
10
|
-
private slotCache: {
|
|
11
|
-
[key in Commitment]?: {
|
|
12
|
-
slot: Promise<number>,
|
|
13
|
-
timestamp: number
|
|
14
|
-
}
|
|
15
|
-
} = {};
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Initiates fetch of a given slot & saves it to cache
|
|
19
|
-
*
|
|
20
|
-
* @param commitment
|
|
21
|
-
* @private
|
|
22
|
-
*/
|
|
23
|
-
private fetchAndSaveSlot(commitment: Commitment): {slot: Promise<number>, timestamp: number} {
|
|
24
|
-
const slotPromise = this.connection.getSlot(commitment);
|
|
25
|
-
const timestamp = Date.now();
|
|
26
|
-
this.slotCache[commitment] = {
|
|
27
|
-
slot: slotPromise,
|
|
28
|
-
timestamp
|
|
29
|
-
}
|
|
30
|
-
slotPromise.catch(e => {
|
|
31
|
-
if(this.slotCache[commitment]!=null && this.slotCache[commitment].slot===slotPromise) delete this.slotCache[commitment];
|
|
32
|
-
throw e;
|
|
33
|
-
})
|
|
34
|
-
return {
|
|
35
|
-
slot: slotPromise,
|
|
36
|
-
timestamp
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
///////////////////
|
|
41
|
-
//// Slots
|
|
42
|
-
/**
|
|
43
|
-
* Gets the latest slot for a given commitment, with the timestamp of when that slot was actually retrieved from
|
|
44
|
-
* the RPC (useful for when slots are cached), does no estimation on the current slot number based on cached value
|
|
45
|
-
*
|
|
46
|
-
* @param commitment
|
|
47
|
-
*/
|
|
48
|
-
public async getSlotAndTimestamp(commitment: Commitment): Promise<{
|
|
49
|
-
slot: number,
|
|
50
|
-
timestamp: number
|
|
51
|
-
}> {
|
|
52
|
-
let cachedSlotData = this.slotCache[commitment];
|
|
53
|
-
|
|
54
|
-
if(cachedSlotData==null || Date.now()-cachedSlotData.timestamp>this.SLOT_CACHE_TIME) {
|
|
55
|
-
cachedSlotData = this.fetchAndSaveSlot(commitment);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return {
|
|
59
|
-
slot: await cachedSlotData.slot,
|
|
60
|
-
timestamp: cachedSlotData.timestamp
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Gets the slot for a given commitment, uses slot cache & tries to estimate current slot based on the cached
|
|
66
|
-
* value, cache has relatively short expiry of just 12 slots (4.8 seconds)
|
|
67
|
-
*
|
|
68
|
-
* @param commitment
|
|
69
|
-
*/
|
|
70
|
-
public async getSlot(commitment: Commitment): Promise<number> {
|
|
71
|
-
let cachedSlotData = this.slotCache[commitment];
|
|
72
|
-
|
|
73
|
-
if(cachedSlotData!=null && Date.now()-cachedSlotData.timestamp<this.SLOT_CACHE_TIME) {
|
|
74
|
-
return (await cachedSlotData.slot) + Math.floor((Date.now()-cachedSlotData.timestamp)/this.root.SLOT_TIME);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
cachedSlotData = this.fetchAndSaveSlot(commitment);
|
|
78
|
-
|
|
79
|
-
return await cachedSlotData.slot;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
1
|
+
import {SolanaModule} from "../SolanaModule";
|
|
2
|
+
import {Commitment} from "@solana/web3.js";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export class SolanaSlots extends SolanaModule {
|
|
6
|
+
|
|
7
|
+
public readonly SLOT_CACHE_SLOTS = 12;
|
|
8
|
+
public readonly SLOT_CACHE_TIME = this.SLOT_CACHE_SLOTS*this.root.SLOT_TIME;
|
|
9
|
+
|
|
10
|
+
private slotCache: {
|
|
11
|
+
[key in Commitment]?: {
|
|
12
|
+
slot: Promise<number>,
|
|
13
|
+
timestamp: number
|
|
14
|
+
}
|
|
15
|
+
} = {};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Initiates fetch of a given slot & saves it to cache
|
|
19
|
+
*
|
|
20
|
+
* @param commitment
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
private fetchAndSaveSlot(commitment: Commitment): {slot: Promise<number>, timestamp: number} {
|
|
24
|
+
const slotPromise = this.connection.getSlot(commitment);
|
|
25
|
+
const timestamp = Date.now();
|
|
26
|
+
this.slotCache[commitment] = {
|
|
27
|
+
slot: slotPromise,
|
|
28
|
+
timestamp
|
|
29
|
+
}
|
|
30
|
+
slotPromise.catch(e => {
|
|
31
|
+
if(this.slotCache[commitment]!=null && this.slotCache[commitment].slot===slotPromise) delete this.slotCache[commitment];
|
|
32
|
+
throw e;
|
|
33
|
+
})
|
|
34
|
+
return {
|
|
35
|
+
slot: slotPromise,
|
|
36
|
+
timestamp
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
///////////////////
|
|
41
|
+
//// Slots
|
|
42
|
+
/**
|
|
43
|
+
* Gets the latest slot for a given commitment, with the timestamp of when that slot was actually retrieved from
|
|
44
|
+
* the RPC (useful for when slots are cached), does no estimation on the current slot number based on cached value
|
|
45
|
+
*
|
|
46
|
+
* @param commitment
|
|
47
|
+
*/
|
|
48
|
+
public async getSlotAndTimestamp(commitment: Commitment): Promise<{
|
|
49
|
+
slot: number,
|
|
50
|
+
timestamp: number
|
|
51
|
+
}> {
|
|
52
|
+
let cachedSlotData = this.slotCache[commitment];
|
|
53
|
+
|
|
54
|
+
if(cachedSlotData==null || Date.now()-cachedSlotData.timestamp>this.SLOT_CACHE_TIME) {
|
|
55
|
+
cachedSlotData = this.fetchAndSaveSlot(commitment);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
slot: await cachedSlotData.slot,
|
|
60
|
+
timestamp: cachedSlotData.timestamp
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Gets the slot for a given commitment, uses slot cache & tries to estimate current slot based on the cached
|
|
66
|
+
* value, cache has relatively short expiry of just 12 slots (4.8 seconds)
|
|
67
|
+
*
|
|
68
|
+
* @param commitment
|
|
69
|
+
*/
|
|
70
|
+
public async getSlot(commitment: Commitment): Promise<number> {
|
|
71
|
+
let cachedSlotData = this.slotCache[commitment];
|
|
72
|
+
|
|
73
|
+
if(cachedSlotData!=null && Date.now()-cachedSlotData.timestamp<this.SLOT_CACHE_TIME) {
|
|
74
|
+
return (await cachedSlotData.slot) + Math.floor((Date.now()-cachedSlotData.timestamp)/this.root.SLOT_TIME);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
cachedSlotData = this.fetchAndSaveSlot(commitment);
|
|
78
|
+
|
|
79
|
+
return await cachedSlotData.slot;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
83
|
}
|