@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,16 +1,16 @@
|
|
|
1
|
-
import {Abi} from "abi-wan-kanabi";
|
|
2
|
-
import {StarknetContractBase} from "./StarknetContractBase";
|
|
3
|
-
import {StarknetChainInterface} from "../chain/StarknetChainInterface";
|
|
4
|
-
import {StarknetModule} from "../chain/StarknetModule";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export class StarknetContractModule<TAbi extends Abi> extends StarknetModule {
|
|
8
|
-
|
|
9
|
-
readonly contract: StarknetContractBase<TAbi>;
|
|
10
|
-
|
|
11
|
-
constructor(chainInterface: StarknetChainInterface, contract: StarknetContractBase<TAbi>) {
|
|
12
|
-
super(chainInterface)
|
|
13
|
-
this.contract = contract;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
}
|
|
1
|
+
import {Abi} from "abi-wan-kanabi";
|
|
2
|
+
import {StarknetContractBase} from "./StarknetContractBase";
|
|
3
|
+
import {StarknetChainInterface} from "../chain/StarknetChainInterface";
|
|
4
|
+
import {StarknetModule} from "../chain/StarknetModule";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export class StarknetContractModule<TAbi extends Abi> extends StarknetModule {
|
|
8
|
+
|
|
9
|
+
readonly contract: StarknetContractBase<TAbi>;
|
|
10
|
+
|
|
11
|
+
constructor(chainInterface: StarknetChainInterface, contract: StarknetContractBase<TAbi>) {
|
|
12
|
+
super(chainInterface)
|
|
13
|
+
this.contract = contract;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
}
|
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
import {Abi} from "abi-wan-kanabi";
|
|
2
|
-
import {EventToPrimitiveType, ExtractAbiEventNames} from "abi-wan-kanabi/dist/kanabi";
|
|
3
|
-
import {StarknetEvent, StarknetEvents} from "../../chain/modules/StarknetEvents";
|
|
4
|
-
import {CallData, events, hash} from "starknet";
|
|
5
|
-
import {StarknetContractBase} from "../StarknetContractBase";
|
|
6
|
-
import {toHex} from "../../../utils/Utils";
|
|
7
|
-
import {StarknetChainInterface} from "../../chain/StarknetChainInterface";
|
|
8
|
-
|
|
9
|
-
export type StarknetAbiEvent<TAbi extends Abi, TEventName extends ExtractAbiEventNames<TAbi>> = {
|
|
10
|
-
name: TEventName,
|
|
11
|
-
params: EventToPrimitiveType<TAbi, TEventName>,
|
|
12
|
-
txHash: string,
|
|
13
|
-
blockHash: string,
|
|
14
|
-
blockNumber: number,
|
|
15
|
-
keys: string[],
|
|
16
|
-
data: string[]
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export class StarknetContractEvents<TAbi extends Abi> extends StarknetEvents {
|
|
20
|
-
|
|
21
|
-
readonly contract: StarknetContractBase<TAbi>;
|
|
22
|
-
readonly abi: TAbi;
|
|
23
|
-
|
|
24
|
-
constructor(chainInterface: StarknetChainInterface, contract: StarknetContractBase<TAbi>, abi: TAbi) {
|
|
25
|
-
super(chainInterface);
|
|
26
|
-
this.contract = contract;
|
|
27
|
-
this.abi = abi;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
private toStarknetAbiEvents<T extends ExtractAbiEventNames<TAbi>>(blockEvents: StarknetEvent[]): StarknetAbiEvent<TAbi, T>[] {
|
|
31
|
-
const abiEvents = events.getAbiEvents(this.abi);
|
|
32
|
-
const abiStructs = CallData.getAbiStruct(this.abi);
|
|
33
|
-
const abiEnums = CallData.getAbiEnum(this.abi);
|
|
34
|
-
|
|
35
|
-
const result = events.parseEvents(blockEvents, abiEvents, abiStructs, abiEnums);
|
|
36
|
-
if(result.length!==blockEvents.length) throw new Error("Invalid event detected, please check provided ABI");
|
|
37
|
-
return result.map((value, index) => {
|
|
38
|
-
const starknetEvent = blockEvents[index];
|
|
39
|
-
const name = Object.keys(value)[0];
|
|
40
|
-
return {
|
|
41
|
-
name: name as T,
|
|
42
|
-
txHash: starknetEvent.transaction_hash,
|
|
43
|
-
params: value[name] as any,
|
|
44
|
-
blockNumber: starknetEvent.block_number,
|
|
45
|
-
blockHash: starknetEvent.block_hash,
|
|
46
|
-
data: starknetEvent.data,
|
|
47
|
-
keys: starknetEvent.keys
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
private toFilter<T extends ExtractAbiEventNames<TAbi>>(
|
|
53
|
-
events: T[],
|
|
54
|
-
keys: string[],
|
|
55
|
-
): string[][] {
|
|
56
|
-
const filterArray: string[][] = [];
|
|
57
|
-
filterArray.push(events.map(name => {
|
|
58
|
-
const arr = name.split(":");
|
|
59
|
-
const eventName = arr[arr.length-1];
|
|
60
|
-
return toHex(hash.starknetKeccak(eventName))
|
|
61
|
-
}));
|
|
62
|
-
if(keys!=null) keys.forEach(key => filterArray.push(key==null ? [] : [key]));
|
|
63
|
-
return filterArray;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Returns the events occuring in a range of starknet block as identified by the contract and keys,
|
|
68
|
-
* returns pending events if no startHeight & endHeight is passed
|
|
69
|
-
*
|
|
70
|
-
* @param events
|
|
71
|
-
* @param keys
|
|
72
|
-
* @param startBlockHeight
|
|
73
|
-
* @param endBlockHeight
|
|
74
|
-
*/
|
|
75
|
-
public async getContractBlockEvents<T extends ExtractAbiEventNames<TAbi>>(
|
|
76
|
-
events: T[],
|
|
77
|
-
keys: string[],
|
|
78
|
-
startBlockHeight?: number,
|
|
79
|
-
endBlockHeight: number = startBlockHeight
|
|
80
|
-
): Promise<StarknetAbiEvent<TAbi, T>[]> {
|
|
81
|
-
const blockEvents = await super.getBlockEvents(this.contract.contract.address, this.toFilter(events, keys), startBlockHeight, endBlockHeight);
|
|
82
|
-
return this.toStarknetAbiEvents(blockEvents);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Runs a search backwards in time, processing the events for a specific topic public key
|
|
87
|
-
*
|
|
88
|
-
* @param events
|
|
89
|
-
* @param keys
|
|
90
|
-
* @param processor called for every event, should return a value if the correct event was found, or null
|
|
91
|
-
* if the search should continue
|
|
92
|
-
* @param abortSignal
|
|
93
|
-
*/
|
|
94
|
-
public async findInContractEvents<T, TEvent extends ExtractAbiEventNames<TAbi>>(
|
|
95
|
-
events: TEvent[],
|
|
96
|
-
keys: string[],
|
|
97
|
-
processor: (event: StarknetAbiEvent<TAbi, TEvent>) => Promise<T>,
|
|
98
|
-
abortSignal?: AbortSignal
|
|
99
|
-
) {
|
|
100
|
-
return this.findInEvents<T>(this.contract.contract.address, this.toFilter(events, keys), async (events: StarknetEvent[]) => {
|
|
101
|
-
const parsedEvents = this.toStarknetAbiEvents<TEvent>(events);
|
|
102
|
-
for(let event of parsedEvents) {
|
|
103
|
-
const result: T = await processor(event);
|
|
104
|
-
if(result!=null) return result;
|
|
105
|
-
}
|
|
106
|
-
}, abortSignal);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Runs a search forwards in time, processing the events for a specific topic public key
|
|
111
|
-
*
|
|
112
|
-
* @param events
|
|
113
|
-
* @param keys
|
|
114
|
-
* @param processor called for every event, should return a value if the correct event was found, or null
|
|
115
|
-
* if the search should continue
|
|
116
|
-
* @param abortSignal
|
|
117
|
-
*/
|
|
118
|
-
public async findInContractEventsForward<T, TEvent extends ExtractAbiEventNames<TAbi>>(
|
|
119
|
-
events: TEvent[],
|
|
120
|
-
keys: string[],
|
|
121
|
-
processor: (event: StarknetAbiEvent<TAbi, TEvent>) => Promise<T>,
|
|
122
|
-
abortSignal?: AbortSignal
|
|
123
|
-
) {
|
|
124
|
-
return this.findInEventsForward<T>(this.contract.contract.address, this.toFilter(events, keys), async (events: StarknetEvent[]) => {
|
|
125
|
-
const parsedEvents = this.toStarknetAbiEvents<TEvent>(events);
|
|
126
|
-
for(let event of parsedEvents) {
|
|
127
|
-
const result: T = await processor(event);
|
|
128
|
-
if(result!=null) return result;
|
|
129
|
-
}
|
|
130
|
-
}, abortSignal);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
1
|
+
import {Abi} from "abi-wan-kanabi";
|
|
2
|
+
import {EventToPrimitiveType, ExtractAbiEventNames} from "abi-wan-kanabi/dist/kanabi";
|
|
3
|
+
import {StarknetEvent, StarknetEvents} from "../../chain/modules/StarknetEvents";
|
|
4
|
+
import {CallData, events, hash, createAbiParser} from "starknet";
|
|
5
|
+
import {StarknetContractBase} from "../StarknetContractBase";
|
|
6
|
+
import {toHex} from "../../../utils/Utils";
|
|
7
|
+
import {StarknetChainInterface} from "../../chain/StarknetChainInterface";
|
|
8
|
+
|
|
9
|
+
export type StarknetAbiEvent<TAbi extends Abi, TEventName extends ExtractAbiEventNames<TAbi>> = {
|
|
10
|
+
name: TEventName,
|
|
11
|
+
params: EventToPrimitiveType<TAbi, TEventName>,
|
|
12
|
+
txHash: string,
|
|
13
|
+
blockHash: string,
|
|
14
|
+
blockNumber: number,
|
|
15
|
+
keys: string[],
|
|
16
|
+
data: string[]
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export class StarknetContractEvents<TAbi extends Abi> extends StarknetEvents {
|
|
20
|
+
|
|
21
|
+
readonly contract: StarknetContractBase<TAbi>;
|
|
22
|
+
readonly abi: TAbi;
|
|
23
|
+
|
|
24
|
+
constructor(chainInterface: StarknetChainInterface, contract: StarknetContractBase<TAbi>, abi: TAbi) {
|
|
25
|
+
super(chainInterface);
|
|
26
|
+
this.contract = contract;
|
|
27
|
+
this.abi = abi;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
private toStarknetAbiEvents<T extends ExtractAbiEventNames<TAbi>>(blockEvents: StarknetEvent[]): StarknetAbiEvent<TAbi, T>[] {
|
|
31
|
+
const abiEvents = events.getAbiEvents(this.abi);
|
|
32
|
+
const abiStructs = CallData.getAbiStruct(this.abi);
|
|
33
|
+
const abiEnums = CallData.getAbiEnum(this.abi);
|
|
34
|
+
|
|
35
|
+
const result = events.parseEvents(blockEvents, abiEvents, abiStructs, abiEnums, createAbiParser(this.abi));
|
|
36
|
+
if(result.length!==blockEvents.length) throw new Error("Invalid event detected, please check provided ABI");
|
|
37
|
+
return result.map((value, index) => {
|
|
38
|
+
const starknetEvent = blockEvents[index];
|
|
39
|
+
const name = Object.keys(value)[0];
|
|
40
|
+
return {
|
|
41
|
+
name: name as T,
|
|
42
|
+
txHash: starknetEvent.transaction_hash,
|
|
43
|
+
params: value[name] as any,
|
|
44
|
+
blockNumber: starknetEvent.block_number,
|
|
45
|
+
blockHash: starknetEvent.block_hash,
|
|
46
|
+
data: starknetEvent.data,
|
|
47
|
+
keys: starknetEvent.keys
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private toFilter<T extends ExtractAbiEventNames<TAbi>>(
|
|
53
|
+
events: T[],
|
|
54
|
+
keys: string[],
|
|
55
|
+
): string[][] {
|
|
56
|
+
const filterArray: string[][] = [];
|
|
57
|
+
filterArray.push(events.map(name => {
|
|
58
|
+
const arr = name.split(":");
|
|
59
|
+
const eventName = arr[arr.length-1];
|
|
60
|
+
return toHex(hash.starknetKeccak(eventName))
|
|
61
|
+
}));
|
|
62
|
+
if(keys!=null) keys.forEach(key => filterArray.push(key==null ? [] : [key]));
|
|
63
|
+
return filterArray;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Returns the events occuring in a range of starknet block as identified by the contract and keys,
|
|
68
|
+
* returns pending events if no startHeight & endHeight is passed
|
|
69
|
+
*
|
|
70
|
+
* @param events
|
|
71
|
+
* @param keys
|
|
72
|
+
* @param startBlockHeight
|
|
73
|
+
* @param endBlockHeight
|
|
74
|
+
*/
|
|
75
|
+
public async getContractBlockEvents<T extends ExtractAbiEventNames<TAbi>>(
|
|
76
|
+
events: T[],
|
|
77
|
+
keys: string[],
|
|
78
|
+
startBlockHeight?: number,
|
|
79
|
+
endBlockHeight: number = startBlockHeight
|
|
80
|
+
): Promise<StarknetAbiEvent<TAbi, T>[]> {
|
|
81
|
+
const blockEvents = await super.getBlockEvents(this.contract.contract.address, this.toFilter(events, keys), startBlockHeight, endBlockHeight);
|
|
82
|
+
return this.toStarknetAbiEvents(blockEvents);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Runs a search backwards in time, processing the events for a specific topic public key
|
|
87
|
+
*
|
|
88
|
+
* @param events
|
|
89
|
+
* @param keys
|
|
90
|
+
* @param processor called for every event, should return a value if the correct event was found, or null
|
|
91
|
+
* if the search should continue
|
|
92
|
+
* @param abortSignal
|
|
93
|
+
*/
|
|
94
|
+
public async findInContractEvents<T, TEvent extends ExtractAbiEventNames<TAbi>>(
|
|
95
|
+
events: TEvent[],
|
|
96
|
+
keys: string[],
|
|
97
|
+
processor: (event: StarknetAbiEvent<TAbi, TEvent>) => Promise<T>,
|
|
98
|
+
abortSignal?: AbortSignal
|
|
99
|
+
) {
|
|
100
|
+
return this.findInEvents<T>(this.contract.contract.address, this.toFilter(events, keys), async (events: StarknetEvent[]) => {
|
|
101
|
+
const parsedEvents = this.toStarknetAbiEvents<TEvent>(events);
|
|
102
|
+
for(let event of parsedEvents) {
|
|
103
|
+
const result: T = await processor(event);
|
|
104
|
+
if(result!=null) return result;
|
|
105
|
+
}
|
|
106
|
+
}, abortSignal);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Runs a search forwards in time, processing the events for a specific topic public key
|
|
111
|
+
*
|
|
112
|
+
* @param events
|
|
113
|
+
* @param keys
|
|
114
|
+
* @param processor called for every event, should return a value if the correct event was found, or null
|
|
115
|
+
* if the search should continue
|
|
116
|
+
* @param abortSignal
|
|
117
|
+
*/
|
|
118
|
+
public async findInContractEventsForward<T, TEvent extends ExtractAbiEventNames<TAbi>>(
|
|
119
|
+
events: TEvent[],
|
|
120
|
+
keys: string[],
|
|
121
|
+
processor: (event: StarknetAbiEvent<TAbi, TEvent>) => Promise<T>,
|
|
122
|
+
abortSignal?: AbortSignal
|
|
123
|
+
) {
|
|
124
|
+
return this.findInEventsForward<T>(this.contract.contract.address, this.toFilter(events, keys), async (events: StarknetEvent[]) => {
|
|
125
|
+
const parsedEvents = this.toStarknetAbiEvents<TEvent>(events);
|
|
126
|
+
for(let event of parsedEvents) {
|
|
127
|
+
const result: T = await processor(event);
|
|
128
|
+
if(result!=null) return result;
|
|
129
|
+
}
|
|
130
|
+
}, abortSignal);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
import {StarknetChainEventsBrowser} from "./StarknetChainEventsBrowser";
|
|
2
|
-
//@ts-ignore
|
|
3
|
-
import * as fs from "fs/promises";
|
|
4
|
-
import {StarknetSwapContract} from "../swaps/StarknetSwapContract";
|
|
5
|
-
import {StarknetChainInterface} from "../chain/StarknetChainInterface";
|
|
6
|
-
import {StarknetSpvVaultContract} from "../spv_swap/StarknetSpvVaultContract";
|
|
7
|
-
|
|
8
|
-
const BLOCKHEIGHT_FILENAME = "/strk-blockheight.txt";
|
|
9
|
-
|
|
10
|
-
export class StarknetChainEvents extends StarknetChainEventsBrowser {
|
|
11
|
-
|
|
12
|
-
private readonly directory: string;
|
|
13
|
-
|
|
14
|
-
constructor(
|
|
15
|
-
directory: string,
|
|
16
|
-
chainInterface: StarknetChainInterface,
|
|
17
|
-
starknetSwapContract: StarknetSwapContract,
|
|
18
|
-
starknetSpvVaultContract: StarknetSpvVaultContract,
|
|
19
|
-
pollIntervalSeconds?: number
|
|
20
|
-
) {
|
|
21
|
-
super(chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds);
|
|
22
|
-
this.directory = directory;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Retrieves last signature & slot from filesystem
|
|
27
|
-
*
|
|
28
|
-
* @private
|
|
29
|
-
*/
|
|
30
|
-
private async getLastEventData(): Promise<{blockNumber: number, txHashes: string[]}> {
|
|
31
|
-
try {
|
|
32
|
-
const txt: string = (await fs.readFile(this.directory+BLOCKHEIGHT_FILENAME)).toString();
|
|
33
|
-
const arr = txt.split(";");
|
|
34
|
-
if(arr.length<2) return {
|
|
35
|
-
blockNumber: parseInt(arr[0]),
|
|
36
|
-
txHashes: null
|
|
37
|
-
};
|
|
38
|
-
return {
|
|
39
|
-
blockNumber: parseInt(arr[0]),
|
|
40
|
-
txHashes: arr.slice(1)
|
|
41
|
-
};
|
|
42
|
-
} catch (e) {
|
|
43
|
-
return {
|
|
44
|
-
blockNumber: null,
|
|
45
|
-
txHashes: null
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Saves last signature & slot to the filesystem
|
|
52
|
-
*
|
|
53
|
-
* @private
|
|
54
|
-
*/
|
|
55
|
-
private saveLastEventData(blockNumber: number, txHashes: string[]): Promise<void> {
|
|
56
|
-
return fs.writeFile(this.directory+BLOCKHEIGHT_FILENAME, blockNumber.toString()+";"+txHashes.join(";"));
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async init(): Promise<void> {
|
|
60
|
-
const {blockNumber, txHashes} = await this.getLastEventData();
|
|
61
|
-
await this.setupPoll(
|
|
62
|
-
blockNumber,
|
|
63
|
-
txHashes,
|
|
64
|
-
(blockNumber: number, txHashes: string[]) => this.saveLastEventData(blockNumber, txHashes)
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
|
|
1
|
+
import {StarknetChainEventsBrowser} from "./StarknetChainEventsBrowser";
|
|
2
|
+
//@ts-ignore
|
|
3
|
+
import * as fs from "fs/promises";
|
|
4
|
+
import {StarknetSwapContract} from "../swaps/StarknetSwapContract";
|
|
5
|
+
import {StarknetChainInterface} from "../chain/StarknetChainInterface";
|
|
6
|
+
import {StarknetSpvVaultContract} from "../spv_swap/StarknetSpvVaultContract";
|
|
7
|
+
|
|
8
|
+
const BLOCKHEIGHT_FILENAME = "/strk-blockheight.txt";
|
|
9
|
+
|
|
10
|
+
export class StarknetChainEvents extends StarknetChainEventsBrowser {
|
|
11
|
+
|
|
12
|
+
private readonly directory: string;
|
|
13
|
+
|
|
14
|
+
constructor(
|
|
15
|
+
directory: string,
|
|
16
|
+
chainInterface: StarknetChainInterface,
|
|
17
|
+
starknetSwapContract: StarknetSwapContract,
|
|
18
|
+
starknetSpvVaultContract: StarknetSpvVaultContract,
|
|
19
|
+
pollIntervalSeconds?: number
|
|
20
|
+
) {
|
|
21
|
+
super(chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds);
|
|
22
|
+
this.directory = directory;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Retrieves last signature & slot from filesystem
|
|
27
|
+
*
|
|
28
|
+
* @private
|
|
29
|
+
*/
|
|
30
|
+
private async getLastEventData(): Promise<{blockNumber: number, txHashes: string[]}> {
|
|
31
|
+
try {
|
|
32
|
+
const txt: string = (await fs.readFile(this.directory+BLOCKHEIGHT_FILENAME)).toString();
|
|
33
|
+
const arr = txt.split(";");
|
|
34
|
+
if(arr.length<2) return {
|
|
35
|
+
blockNumber: parseInt(arr[0]),
|
|
36
|
+
txHashes: null
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
blockNumber: parseInt(arr[0]),
|
|
40
|
+
txHashes: arr.slice(1)
|
|
41
|
+
};
|
|
42
|
+
} catch (e) {
|
|
43
|
+
return {
|
|
44
|
+
blockNumber: null,
|
|
45
|
+
txHashes: null
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Saves last signature & slot to the filesystem
|
|
52
|
+
*
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
private saveLastEventData(blockNumber: number, txHashes: string[]): Promise<void> {
|
|
56
|
+
return fs.writeFile(this.directory+BLOCKHEIGHT_FILENAME, blockNumber.toString()+";"+txHashes.join(";"));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async init(): Promise<void> {
|
|
60
|
+
const {blockNumber, txHashes} = await this.getLastEventData();
|
|
61
|
+
await this.setupPoll(
|
|
62
|
+
blockNumber,
|
|
63
|
+
txHashes,
|
|
64
|
+
(blockNumber: number, txHashes: string[]) => this.saveLastEventData(blockNumber, txHashes)
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
68
|
}
|