@atomiqlabs/chain-starknet 4.0.0-dev.12 → 4.0.0-dev.13
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 +38 -38
- package/dist/index.js +54 -54
- package/dist/starknet/StarknetChainType.d.ts +13 -13
- package/dist/starknet/StarknetChainType.js +2 -2
- package/dist/starknet/StarknetInitializer.d.ts +27 -27
- package/dist/starknet/StarknetInitializer.js +69 -69
- package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
- package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +186 -186
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +379 -379
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +31 -31
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +74 -74
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +51 -51
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +113 -113
- package/dist/starknet/chain/StarknetAction.d.ts +19 -19
- package/dist/starknet/chain/StarknetAction.js +73 -73
- package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -52
- package/dist/starknet/chain/StarknetChainInterface.js +91 -91
- package/dist/starknet/chain/StarknetModule.d.ts +14 -14
- package/dist/starknet/chain/StarknetModule.js +13 -13
- package/dist/starknet/chain/modules/ERC20Abi.d.ts +755 -755
- package/dist/starknet/chain/modules/ERC20Abi.js +1032 -1032
- package/dist/starknet/chain/modules/StarknetAccounts.d.ts +6 -6
- package/dist/starknet/chain/modules/StarknetAccounts.js +24 -24
- package/dist/starknet/chain/modules/StarknetAddresses.d.ts +9 -9
- package/dist/starknet/chain/modules/StarknetAddresses.js +26 -26
- package/dist/starknet/chain/modules/StarknetBlocks.d.ts +20 -20
- package/dist/starknet/chain/modules/StarknetBlocks.js +64 -64
- package/dist/starknet/chain/modules/StarknetEvents.d.ts +44 -44
- package/dist/starknet/chain/modules/StarknetEvents.js +88 -88
- package/dist/starknet/chain/modules/StarknetFees.d.ts +77 -77
- package/dist/starknet/chain/modules/StarknetFees.js +114 -114
- package/dist/starknet/chain/modules/StarknetSignatures.d.ts +29 -29
- package/dist/starknet/chain/modules/StarknetSignatures.js +72 -72
- package/dist/starknet/chain/modules/StarknetTokens.d.ts +69 -69
- package/dist/starknet/chain/modules/StarknetTokens.js +102 -98
- package/dist/starknet/chain/modules/StarknetTransactions.d.ts +93 -93
- package/dist/starknet/chain/modules/StarknetTransactions.js +261 -260
- package/dist/starknet/contract/StarknetContractBase.d.ts +13 -13
- package/dist/starknet/contract/StarknetContractBase.js +20 -16
- package/dist/starknet/contract/StarknetContractModule.d.ts +8 -8
- package/dist/starknet/contract/StarknetContractModule.js +11 -11
- package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +51 -51
- package/dist/starknet/contract/modules/StarknetContractEvents.js +97 -97
- package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
- package/dist/starknet/events/StarknetChainEvents.js +52 -52
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +89 -90
- package/dist/starknet/events/StarknetChainEventsBrowser.js +296 -294
- package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -21
- package/dist/starknet/provider/RpcProviderWithRetries.js +32 -32
- package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -488
- package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -656
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +66 -66
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +382 -382
- package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -49
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +145 -145
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +25 -25
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +72 -72
- package/dist/starknet/swaps/EscrowManagerAbi.d.ts +431 -431
- package/dist/starknet/swaps/EscrowManagerAbi.js +583 -583
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +191 -191
- package/dist/starknet/swaps/StarknetSwapContract.js +424 -424
- package/dist/starknet/swaps/StarknetSwapData.d.ts +74 -74
- package/dist/starknet/swaps/StarknetSwapData.js +325 -325
- package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
- package/dist/starknet/swaps/StarknetSwapModule.js +11 -11
- package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -13
- package/dist/starknet/swaps/handlers/IHandler.js +2 -2
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -13
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -13
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +21 -21
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -44
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -48
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -40
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -20
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +30 -30
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +45 -45
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +52 -52
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -27
- package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +69 -69
- package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
- package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +53 -53
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +100 -100
- package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +94 -87
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +235 -225
- package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +62 -62
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +128 -128
- package/dist/starknet/wallet/StarknetKeypairWallet.d.ts +7 -7
- package/dist/starknet/wallet/StarknetKeypairWallet.js +35 -30
- package/dist/starknet/wallet/StarknetSigner.d.ts +12 -12
- package/dist/starknet/wallet/StarknetSigner.js +47 -46
- package/dist/utils/Utils.d.ts +37 -37
- package/dist/utils/Utils.js +260 -261
- package/package.json +43 -37
- package/src/index.ts +47 -47
- package/src/starknet/StarknetChainType.ts +28 -28
- package/src/starknet/StarknetInitializer.ts +108 -108
- package/src/starknet/btcrelay/BtcRelayAbi.ts +338 -338
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +494 -494
- package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +100 -100
- package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +141 -141
- package/src/starknet/chain/StarknetAction.ts +85 -85
- package/src/starknet/chain/StarknetChainInterface.ts +149 -149
- package/src/starknet/chain/StarknetModule.ts +19 -19
- package/src/starknet/chain/modules/ERC20Abi.ts +1029 -1029
- package/src/starknet/chain/modules/StarknetAccounts.ts +25 -25
- package/src/starknet/chain/modules/StarknetAddresses.ts +22 -22
- package/src/starknet/chain/modules/StarknetBlocks.ts +75 -74
- package/src/starknet/chain/modules/StarknetEvents.ts +104 -104
- package/src/starknet/chain/modules/StarknetFees.ts +154 -154
- package/src/starknet/chain/modules/StarknetSignatures.ts +91 -91
- package/src/starknet/chain/modules/StarknetTokens.ts +120 -116
- package/src/starknet/chain/modules/StarknetTransactions.ts +285 -283
- package/src/starknet/contract/StarknetContractBase.ts +30 -26
- package/src/starknet/contract/StarknetContractModule.ts +16 -16
- package/src/starknet/contract/modules/StarknetContractEvents.ts +134 -134
- package/src/starknet/events/StarknetChainEvents.ts +67 -67
- package/src/starknet/events/StarknetChainEventsBrowser.ts +411 -411
- package/src/starknet/provider/RpcProviderWithRetries.ts +43 -43
- package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -656
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +483 -483
- package/src/starknet/spv_swap/StarknetSpvVaultData.ts +195 -195
- package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +79 -79
- package/src/starknet/swaps/EscrowManagerAbi.ts +582 -582
- package/src/starknet/swaps/StarknetSwapContract.ts +647 -647
- package/src/starknet/swaps/StarknetSwapData.ts +455 -455
- package/src/starknet/swaps/StarknetSwapModule.ts +17 -17
- package/src/starknet/swaps/handlers/IHandler.ts +20 -20
- package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +23 -23
- package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +53 -53
- package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +73 -73
- package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +67 -67
- package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +50 -50
- package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +102 -102
- package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +38 -38
- package/src/starknet/swaps/modules/StarknetLpVault.ts +147 -147
- package/src/starknet/swaps/modules/StarknetSwapClaim.ts +141 -141
- package/src/starknet/swaps/modules/StarknetSwapInit.ts +300 -287
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +196 -196
- package/src/starknet/wallet/StarknetKeypairWallet.ts +44 -39
- package/src/starknet/wallet/StarknetSigner.ts +55 -55
- package/src/utils/Utils.ts +251 -252
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import {StarknetModule} from "../StarknetModule";
|
|
2
|
-
import {StarknetTx} from "./StarknetTransactions";
|
|
3
|
-
import {DeployAccountContractPayload} from "starknet";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export class StarknetAccounts extends StarknetModule {
|
|
7
|
-
|
|
8
|
-
public async getAccountDeployTransaction(deploymentData: DeployAccountContractPayload): Promise<StarknetTx> {
|
|
9
|
-
const feeDetails = this.root.Fees.getFeeDetails({l1DataGas: 500, l2Gas: 5_000*40_000, l1Gas: 0}, await this.root.Fees.getFeeRate());
|
|
10
|
-
const details = {
|
|
11
|
-
...feeDetails,
|
|
12
|
-
walletAddress: deploymentData.contractAddress,
|
|
13
|
-
cairoVersion: "1" as const,
|
|
14
|
-
chainId: this.root.starknetChainId,
|
|
15
|
-
nonce: 0,
|
|
16
|
-
accountDeploymentData: [],
|
|
17
|
-
skipValidate: false
|
|
18
|
-
};
|
|
19
|
-
return {
|
|
20
|
-
type: "DEPLOY_ACCOUNT",
|
|
21
|
-
tx: deploymentData,
|
|
22
|
-
details
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
|
|
1
|
+
import {StarknetModule} from "../StarknetModule";
|
|
2
|
+
import {StarknetTx} from "./StarknetTransactions";
|
|
3
|
+
import {DeployAccountContractPayload} from "starknet";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export class StarknetAccounts extends StarknetModule {
|
|
7
|
+
|
|
8
|
+
public async getAccountDeployTransaction(deploymentData: DeployAccountContractPayload): Promise<StarknetTx> {
|
|
9
|
+
const feeDetails = this.root.Fees.getFeeDetails({l1DataGas: 500, l2Gas: 5_000*40_000, l1Gas: 0}, await this.root.Fees.getFeeRate());
|
|
10
|
+
const details = {
|
|
11
|
+
...feeDetails,
|
|
12
|
+
walletAddress: deploymentData.contractAddress,
|
|
13
|
+
cairoVersion: "1" as const,
|
|
14
|
+
chainId: this.root.starknetChainId,
|
|
15
|
+
nonce: 0,
|
|
16
|
+
accountDeploymentData: [],
|
|
17
|
+
skipValidate: false
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
type: "DEPLOY_ACCOUNT",
|
|
21
|
+
tx: deploymentData,
|
|
22
|
+
details
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
26
|
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import {StarknetModule} from "../StarknetModule";
|
|
2
|
-
import {validateAndParseAddress} from "starknet";
|
|
3
|
-
|
|
4
|
-
export class StarknetAddresses extends StarknetModule {
|
|
5
|
-
|
|
6
|
-
///////////////////
|
|
7
|
-
//// Address utils
|
|
8
|
-
/**
|
|
9
|
-
* Checks whether an address is a valid starknet address
|
|
10
|
-
*
|
|
11
|
-
* @param value
|
|
12
|
-
*/
|
|
13
|
-
static isValidAddress(value: string): boolean {
|
|
14
|
-
if(value.length!==66) return false;
|
|
15
|
-
try {
|
|
16
|
-
validateAndParseAddress(value);
|
|
17
|
-
return true;
|
|
18
|
-
} catch (e) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
1
|
+
import {StarknetModule} from "../StarknetModule";
|
|
2
|
+
import {validateAndParseAddress} from "starknet";
|
|
3
|
+
|
|
4
|
+
export class StarknetAddresses extends StarknetModule {
|
|
5
|
+
|
|
6
|
+
///////////////////
|
|
7
|
+
//// Address utils
|
|
8
|
+
/**
|
|
9
|
+
* Checks whether an address is a valid starknet address
|
|
10
|
+
*
|
|
11
|
+
* @param value
|
|
12
|
+
*/
|
|
13
|
+
static isValidAddress(value: string): boolean {
|
|
14
|
+
if(value.length!==66) return false;
|
|
15
|
+
try {
|
|
16
|
+
validateAndParseAddress(value);
|
|
17
|
+
return true;
|
|
18
|
+
} catch (e) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
23
|
}
|
|
@@ -1,75 +1,76 @@
|
|
|
1
|
-
import {StarknetModule} from "../StarknetModule";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* @
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
1
|
+
import {StarknetModule} from "../StarknetModule";
|
|
2
|
+
|
|
3
|
+
// https://github.com/starkware-libs/starknet-specs/blob/c2e93098b9c2ca0423b7f4d15b201f52f22d8c36/api/starknet_api_openrpc.json#L1234
|
|
4
|
+
export type StarknetBlockTag = "pre_confirmed" | "latest";
|
|
5
|
+
|
|
6
|
+
export class StarknetBlocks extends StarknetModule {
|
|
7
|
+
|
|
8
|
+
private BLOCK_CACHE_TIME = 5*1000;
|
|
9
|
+
|
|
10
|
+
private blockCache: {
|
|
11
|
+
[key: string]: {
|
|
12
|
+
blockTime: Promise<number>,
|
|
13
|
+
timestamp: number
|
|
14
|
+
}
|
|
15
|
+
} = {};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Initiates fetch of a given block & saves it to cache
|
|
19
|
+
*
|
|
20
|
+
* @private
|
|
21
|
+
* @param blockTag
|
|
22
|
+
*/
|
|
23
|
+
private fetchAndSaveBlockTime(blockTag: StarknetBlockTag | number): {
|
|
24
|
+
blockTime: Promise<number>,
|
|
25
|
+
timestamp: number
|
|
26
|
+
} {
|
|
27
|
+
const blockTagStr = blockTag.toString(10);
|
|
28
|
+
|
|
29
|
+
const blockTimePromise = this.provider.getBlockWithTxHashes(blockTag).then(result => result.timestamp);
|
|
30
|
+
const timestamp = Date.now();
|
|
31
|
+
this.blockCache[blockTagStr] = {
|
|
32
|
+
blockTime: blockTimePromise,
|
|
33
|
+
timestamp
|
|
34
|
+
};
|
|
35
|
+
blockTimePromise.catch(e => {
|
|
36
|
+
if(this.blockCache[blockTagStr]!=null && this.blockCache[blockTagStr].blockTime===blockTimePromise) delete this.blockCache[blockTagStr];
|
|
37
|
+
throw e;
|
|
38
|
+
})
|
|
39
|
+
return {
|
|
40
|
+
blockTime: blockTimePromise,
|
|
41
|
+
timestamp
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private cleanupBlocks() {
|
|
46
|
+
const currentTime = Date.now();
|
|
47
|
+
//Keys are in order that they were added, so we can stop at the first non-expired block
|
|
48
|
+
for(let key in this.blockCache) {
|
|
49
|
+
const block = this.blockCache[key];
|
|
50
|
+
if(currentTime - block.timestamp > this.BLOCK_CACHE_TIME) {
|
|
51
|
+
delete this.blockCache[key];
|
|
52
|
+
} else {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
///////////////////
|
|
59
|
+
//// Blocks
|
|
60
|
+
/**
|
|
61
|
+
* Gets the block for a given blocktag, with caching
|
|
62
|
+
*
|
|
63
|
+
* @param blockTag
|
|
64
|
+
*/
|
|
65
|
+
public getBlockTime(blockTag: StarknetBlockTag | number): Promise<number> {
|
|
66
|
+
this.cleanupBlocks();
|
|
67
|
+
let cachedBlockData = this.blockCache[blockTag.toString(10)];
|
|
68
|
+
|
|
69
|
+
if(cachedBlockData==null || Date.now()-cachedBlockData.timestamp>this.BLOCK_CACHE_TIME) {
|
|
70
|
+
cachedBlockData = this.fetchAndSaveBlockTime(blockTag);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return cachedBlockData.blockTime;
|
|
74
|
+
}
|
|
75
|
+
|
|
75
76
|
}
|
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
import {StarknetModule} from "../StarknetModule";
|
|
2
|
-
|
|
3
|
-
export type StarknetEvent = {
|
|
4
|
-
block_hash: string;
|
|
5
|
-
block_number: number;
|
|
6
|
-
transaction_hash: string;
|
|
7
|
-
from_address: string;
|
|
8
|
-
keys: string[];
|
|
9
|
-
data: string[];
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export class StarknetEvents extends StarknetModule {
|
|
13
|
-
|
|
14
|
-
public readonly EVENTS_LIMIT = 100;
|
|
15
|
-
public readonly FORWARD_BLOCK_RANGE = 2000;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Returns the all the events occuring in a block range as identified by the contract and keys
|
|
19
|
-
*
|
|
20
|
-
* @param contract
|
|
21
|
-
* @param keys
|
|
22
|
-
* @param startBlock
|
|
23
|
-
* @param endBlock
|
|
24
|
-
* @param abortSignal
|
|
25
|
-
*/
|
|
26
|
-
public async getBlockEvents(contract: string, keys: string[][], startBlock?: number, endBlock: number = startBlock, abortSignal?: AbortSignal): Promise<StarknetEvent[]> {
|
|
27
|
-
const events: StarknetEvent[] = [];
|
|
28
|
-
let result = null;
|
|
29
|
-
while(result==null || result?.continuation_token!=null) {
|
|
30
|
-
result = await this.root.provider.getEvents({
|
|
31
|
-
address: contract,
|
|
32
|
-
from_block: startBlock==null ? "
|
|
33
|
-
to_block: endBlock==null ? "
|
|
34
|
-
keys,
|
|
35
|
-
chunk_size: this.EVENTS_LIMIT,
|
|
36
|
-
continuation_token: result?.continuation_token
|
|
37
|
-
});
|
|
38
|
-
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
39
|
-
events.push(...result.events);
|
|
40
|
-
}
|
|
41
|
-
return events;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Runs a search backwards in time, processing events from a specific contract and keys
|
|
46
|
-
*
|
|
47
|
-
* @param contract
|
|
48
|
-
* @param keys
|
|
49
|
-
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
50
|
-
* was found, or null if the search should continue
|
|
51
|
-
* @param abortSignal
|
|
52
|
-
*/
|
|
53
|
-
public async findInEvents<T>(
|
|
54
|
-
contract: string, keys: string[][],
|
|
55
|
-
processor: (signatures: StarknetEvent[]) => Promise<T>,
|
|
56
|
-
abortSignal?: AbortSignal
|
|
57
|
-
): Promise<T> {
|
|
58
|
-
const latestBlockNumber = await this.provider.getBlockNumber();
|
|
59
|
-
|
|
60
|
-
for(let blockNumber = latestBlockNumber; blockNumber >= 0; blockNumber-=this.FORWARD_BLOCK_RANGE) {
|
|
61
|
-
const eventsResult = await this.getBlockEvents(
|
|
62
|
-
contract, keys,
|
|
63
|
-
Math.max(blockNumber-this.FORWARD_BLOCK_RANGE, 0), blockNumber===latestBlockNumber ? null : blockNumber,
|
|
64
|
-
abortSignal
|
|
65
|
-
);
|
|
66
|
-
const result: T = await processor(eventsResult.reverse());
|
|
67
|
-
if(result!=null) return result;
|
|
68
|
-
}
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Runs a search forwards in time, processing events from a specific contract and keys
|
|
74
|
-
*
|
|
75
|
-
* @param contract
|
|
76
|
-
* @param keys
|
|
77
|
-
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
78
|
-
* was found, or null if the search should continue
|
|
79
|
-
* @param abortSignal
|
|
80
|
-
* @param logFetchLimit
|
|
81
|
-
*/
|
|
82
|
-
public async findInEventsForward<T>(
|
|
83
|
-
contract: string, keys: string[][],
|
|
84
|
-
processor: (signatures: StarknetEvent[]) => Promise<T>,
|
|
85
|
-
abortSignal?: AbortSignal,
|
|
86
|
-
logFetchLimit?: number
|
|
87
|
-
): Promise<T> {
|
|
88
|
-
if(logFetchLimit==null || logFetchLimit>this.EVENTS_LIMIT) logFetchLimit = this.EVENTS_LIMIT;
|
|
89
|
-
let eventsResult = null;
|
|
90
|
-
while(eventsResult==null || eventsResult?.continuation_token!=null) {
|
|
91
|
-
eventsResult = await this.root.provider.getEvents({
|
|
92
|
-
address: contract,
|
|
93
|
-
to_block: "latest",
|
|
94
|
-
keys,
|
|
95
|
-
chunk_size: logFetchLimit ?? this.EVENTS_LIMIT,
|
|
96
|
-
continuation_token: eventsResult?.continuation_token
|
|
97
|
-
});
|
|
98
|
-
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
99
|
-
const result: T = await processor(eventsResult.events);
|
|
100
|
-
if(result!=null) return result;
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
|
|
1
|
+
import {StarknetModule} from "../StarknetModule";
|
|
2
|
+
|
|
3
|
+
export type StarknetEvent = {
|
|
4
|
+
block_hash: string;
|
|
5
|
+
block_number: number;
|
|
6
|
+
transaction_hash: string;
|
|
7
|
+
from_address: string;
|
|
8
|
+
keys: string[];
|
|
9
|
+
data: string[];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export class StarknetEvents extends StarknetModule {
|
|
13
|
+
|
|
14
|
+
public readonly EVENTS_LIMIT = 100;
|
|
15
|
+
public readonly FORWARD_BLOCK_RANGE = 2000;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Returns the all the events occuring in a block range as identified by the contract and keys
|
|
19
|
+
*
|
|
20
|
+
* @param contract
|
|
21
|
+
* @param keys
|
|
22
|
+
* @param startBlock
|
|
23
|
+
* @param endBlock
|
|
24
|
+
* @param abortSignal
|
|
25
|
+
*/
|
|
26
|
+
public async getBlockEvents(contract: string, keys: string[][], startBlock?: number, endBlock: number = startBlock, abortSignal?: AbortSignal): Promise<StarknetEvent[]> {
|
|
27
|
+
const events: StarknetEvent[] = [];
|
|
28
|
+
let result = null;
|
|
29
|
+
while(result==null || result?.continuation_token!=null) {
|
|
30
|
+
result = await this.root.provider.getEvents({
|
|
31
|
+
address: contract,
|
|
32
|
+
from_block: startBlock==null ? "latest" : {block_number: startBlock},
|
|
33
|
+
to_block: endBlock==null ? "latest" : {block_number: endBlock},
|
|
34
|
+
keys,
|
|
35
|
+
chunk_size: this.EVENTS_LIMIT,
|
|
36
|
+
continuation_token: result?.continuation_token
|
|
37
|
+
});
|
|
38
|
+
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
39
|
+
events.push(...result.events);
|
|
40
|
+
}
|
|
41
|
+
return events;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Runs a search backwards in time, processing events from a specific contract and keys
|
|
46
|
+
*
|
|
47
|
+
* @param contract
|
|
48
|
+
* @param keys
|
|
49
|
+
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
50
|
+
* was found, or null if the search should continue
|
|
51
|
+
* @param abortSignal
|
|
52
|
+
*/
|
|
53
|
+
public async findInEvents<T>(
|
|
54
|
+
contract: string, keys: string[][],
|
|
55
|
+
processor: (signatures: StarknetEvent[]) => Promise<T>,
|
|
56
|
+
abortSignal?: AbortSignal
|
|
57
|
+
): Promise<T> {
|
|
58
|
+
const latestBlockNumber = await this.provider.getBlockNumber();
|
|
59
|
+
|
|
60
|
+
for(let blockNumber = latestBlockNumber; blockNumber >= 0; blockNumber-=this.FORWARD_BLOCK_RANGE) {
|
|
61
|
+
const eventsResult = await this.getBlockEvents(
|
|
62
|
+
contract, keys,
|
|
63
|
+
Math.max(blockNumber-this.FORWARD_BLOCK_RANGE, 0), blockNumber===latestBlockNumber ? null : blockNumber,
|
|
64
|
+
abortSignal
|
|
65
|
+
);
|
|
66
|
+
const result: T = await processor(eventsResult.reverse());
|
|
67
|
+
if(result!=null) return result;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Runs a search forwards in time, processing events from a specific contract and keys
|
|
74
|
+
*
|
|
75
|
+
* @param contract
|
|
76
|
+
* @param keys
|
|
77
|
+
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
78
|
+
* was found, or null if the search should continue
|
|
79
|
+
* @param abortSignal
|
|
80
|
+
* @param logFetchLimit
|
|
81
|
+
*/
|
|
82
|
+
public async findInEventsForward<T>(
|
|
83
|
+
contract: string, keys: string[][],
|
|
84
|
+
processor: (signatures: StarknetEvent[]) => Promise<T>,
|
|
85
|
+
abortSignal?: AbortSignal,
|
|
86
|
+
logFetchLimit?: number
|
|
87
|
+
): Promise<T> {
|
|
88
|
+
if(logFetchLimit==null || logFetchLimit>this.EVENTS_LIMIT) logFetchLimit = this.EVENTS_LIMIT;
|
|
89
|
+
let eventsResult = null;
|
|
90
|
+
while(eventsResult==null || eventsResult?.continuation_token!=null) {
|
|
91
|
+
eventsResult = await this.root.provider.getEvents({
|
|
92
|
+
address: contract,
|
|
93
|
+
to_block: "latest",
|
|
94
|
+
keys,
|
|
95
|
+
chunk_size: logFetchLimit ?? this.EVENTS_LIMIT,
|
|
96
|
+
continuation_token: eventsResult?.continuation_token
|
|
97
|
+
});
|
|
98
|
+
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
99
|
+
const result: T = await processor(eventsResult.events);
|
|
100
|
+
if(result!=null) return result;
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
105
|
}
|