@atomiqlabs/chain-evm 1.0.0-dev.35 → 1.0.0-dev.37
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/chains/citrea/CitreaBtcRelay.d.ts +21 -21
- package/dist/chains/citrea/CitreaBtcRelay.js +43 -43
- package/dist/chains/citrea/CitreaChainType.d.ts +13 -13
- package/dist/chains/citrea/CitreaChainType.js +2 -2
- package/dist/chains/citrea/CitreaFees.d.ts +29 -29
- package/dist/chains/citrea/CitreaFees.js +67 -67
- package/dist/chains/citrea/CitreaInitializer.d.ts +30 -30
- package/dist/chains/citrea/CitreaInitializer.js +127 -127
- package/dist/chains/citrea/CitreaSpvVaultContract.d.ts +15 -15
- package/dist/chains/citrea/CitreaSpvVaultContract.js +74 -74
- package/dist/chains/citrea/CitreaSwapContract.d.ts +22 -22
- package/dist/chains/citrea/CitreaSwapContract.js +96 -96
- package/dist/chains/citrea/CitreaTokens.d.ts +9 -9
- package/dist/chains/citrea/CitreaTokens.js +20 -20
- package/dist/evm/btcrelay/BtcRelayAbi.d.ts +198 -198
- package/dist/evm/btcrelay/BtcRelayAbi.js +261 -261
- package/dist/evm/btcrelay/BtcRelayTypechain.d.ts +172 -172
- package/dist/evm/btcrelay/BtcRelayTypechain.js +2 -2
- package/dist/evm/btcrelay/EVMBtcRelay.d.ts +195 -195
- package/dist/evm/btcrelay/EVMBtcRelay.js +423 -423
- package/dist/evm/btcrelay/headers/EVMBtcHeader.d.ts +33 -33
- package/dist/evm/btcrelay/headers/EVMBtcHeader.js +84 -84
- package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.d.ts +56 -56
- package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.js +123 -123
- package/dist/evm/chain/EVMChainInterface.d.ts +51 -51
- package/dist/evm/chain/EVMChainInterface.js +89 -89
- package/dist/evm/chain/EVMModule.d.ts +9 -9
- package/dist/evm/chain/EVMModule.js +13 -13
- package/dist/evm/chain/modules/ERC20Abi.d.ts +168 -168
- package/dist/evm/chain/modules/ERC20Abi.js +225 -225
- package/dist/evm/chain/modules/EVMAddresses.d.ts +10 -10
- package/dist/evm/chain/modules/EVMAddresses.js +30 -30
- package/dist/evm/chain/modules/EVMBlocks.d.ts +20 -20
- package/dist/evm/chain/modules/EVMBlocks.js +64 -64
- package/dist/evm/chain/modules/EVMEvents.d.ts +36 -36
- package/dist/evm/chain/modules/EVMEvents.js +122 -122
- package/dist/evm/chain/modules/EVMFees.d.ts +36 -36
- package/dist/evm/chain/modules/EVMFees.js +73 -73
- package/dist/evm/chain/modules/EVMSignatures.d.ts +29 -29
- package/dist/evm/chain/modules/EVMSignatures.js +68 -68
- package/dist/evm/chain/modules/EVMTokens.d.ts +70 -51
- package/dist/evm/chain/modules/EVMTokens.js +142 -113
- package/dist/evm/chain/modules/EVMTransactions.d.ts +89 -89
- package/dist/evm/chain/modules/EVMTransactions.js +230 -216
- package/dist/evm/contract/EVMContractBase.d.ts +22 -22
- package/dist/evm/contract/EVMContractBase.js +34 -34
- package/dist/evm/contract/EVMContractModule.d.ts +8 -8
- package/dist/evm/contract/EVMContractModule.js +11 -11
- package/dist/evm/contract/modules/EVMContractEvents.d.ts +42 -42
- package/dist/evm/contract/modules/EVMContractEvents.js +75 -75
- package/dist/evm/events/EVMChainEvents.d.ts +22 -22
- package/dist/evm/events/EVMChainEvents.js +67 -67
- package/dist/evm/events/EVMChainEventsBrowser.d.ts +86 -86
- package/dist/evm/events/EVMChainEventsBrowser.js +294 -294
- package/dist/evm/spv_swap/EVMSpvVaultContract.d.ts +78 -78
- package/dist/evm/spv_swap/EVMSpvVaultContract.js +478 -480
- package/dist/evm/spv_swap/EVMSpvVaultData.d.ts +39 -39
- package/dist/evm/spv_swap/EVMSpvVaultData.js +180 -180
- package/dist/evm/spv_swap/EVMSpvWithdrawalData.d.ts +19 -19
- package/dist/evm/spv_swap/EVMSpvWithdrawalData.js +55 -55
- package/dist/evm/spv_swap/SpvVaultContractAbi.d.ts +91 -91
- package/dist/evm/spv_swap/SpvVaultContractAbi.js +849 -849
- package/dist/evm/spv_swap/SpvVaultContractTypechain.d.ts +450 -450
- package/dist/evm/spv_swap/SpvVaultContractTypechain.js +2 -2
- package/dist/evm/swaps/EVMSwapContract.d.ts +193 -193
- package/dist/evm/swaps/EVMSwapContract.js +374 -374
- package/dist/evm/swaps/EVMSwapData.d.ts +66 -66
- package/dist/evm/swaps/EVMSwapData.js +260 -260
- package/dist/evm/swaps/EVMSwapModule.d.ts +9 -9
- package/dist/evm/swaps/EVMSwapModule.js +11 -11
- package/dist/evm/swaps/EscrowManagerAbi.d.ts +120 -120
- package/dist/evm/swaps/EscrowManagerAbi.js +985 -985
- package/dist/evm/swaps/EscrowManagerTypechain.d.ts +475 -475
- package/dist/evm/swaps/EscrowManagerTypechain.js +2 -2
- package/dist/evm/swaps/handlers/IHandler.d.ts +13 -13
- package/dist/evm/swaps/handlers/IHandler.js +2 -2
- package/dist/evm/swaps/handlers/claim/ClaimHandlers.d.ts +10 -10
- package/dist/evm/swaps/handlers/claim/ClaimHandlers.js +13 -13
- package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.d.ts +20 -20
- package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.js +39 -39
- package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
- package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +59 -59
- package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
- package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +51 -51
- package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +21 -21
- package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +28 -28
- package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +48 -48
- package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +63 -63
- package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
- package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.js +28 -28
- package/dist/evm/swaps/modules/EVMLpVault.d.ts +69 -69
- package/dist/evm/swaps/modules/EVMLpVault.js +134 -131
- package/dist/evm/swaps/modules/EVMSwapClaim.d.ts +54 -54
- package/dist/evm/swaps/modules/EVMSwapClaim.js +137 -137
- package/dist/evm/swaps/modules/EVMSwapInit.d.ts +88 -88
- package/dist/evm/swaps/modules/EVMSwapInit.js +274 -275
- package/dist/evm/swaps/modules/EVMSwapRefund.d.ts +62 -62
- package/dist/evm/swaps/modules/EVMSwapRefund.js +167 -167
- package/dist/evm/typechain/common.d.ts +50 -50
- package/dist/evm/typechain/common.js +2 -2
- package/dist/evm/wallet/EVMSigner.d.ts +10 -9
- package/dist/evm/wallet/EVMSigner.js +17 -16
- package/dist/index.d.ts +38 -38
- package/dist/index.js +54 -54
- package/dist/utils/Utils.d.ts +15 -15
- package/dist/utils/Utils.js +71 -71
- package/package.json +37 -37
- package/src/chains/citrea/CitreaBtcRelay.ts +57 -57
- package/src/chains/citrea/CitreaChainType.ts +28 -28
- package/src/chains/citrea/CitreaFees.ts +77 -77
- package/src/chains/citrea/CitreaInitializer.ts +178 -178
- package/src/chains/citrea/CitreaSpvVaultContract.ts +75 -75
- package/src/chains/citrea/CitreaSwapContract.ts +102 -102
- package/src/chains/citrea/CitreaTokens.ts +21 -21
- package/src/evm/btcrelay/BtcRelayAbi.ts +258 -258
- package/src/evm/btcrelay/BtcRelayTypechain.ts +371 -371
- package/src/evm/btcrelay/EVMBtcRelay.ts +522 -522
- package/src/evm/btcrelay/headers/EVMBtcHeader.ts +109 -109
- package/src/evm/btcrelay/headers/EVMBtcStoredHeader.ts +152 -152
- package/src/evm/chain/EVMChainInterface.ts +155 -155
- package/src/evm/chain/EVMModule.ts +21 -21
- package/src/evm/chain/modules/ERC20Abi.ts +222 -222
- package/src/evm/chain/modules/EVMAddresses.ts +28 -28
- package/src/evm/chain/modules/EVMBlocks.ts +75 -75
- package/src/evm/chain/modules/EVMEvents.ts +139 -139
- package/src/evm/chain/modules/EVMFees.ts +104 -104
- package/src/evm/chain/modules/EVMSignatures.ts +76 -76
- package/src/evm/chain/modules/EVMTokens.ts +155 -126
- package/src/evm/chain/modules/EVMTransactions.ts +257 -246
- package/src/evm/contract/EVMContractBase.ts +63 -63
- package/src/evm/contract/EVMContractModule.ts +16 -16
- package/src/evm/contract/modules/EVMContractEvents.ts +102 -102
- package/src/evm/events/EVMChainEvents.ts +81 -81
- package/src/evm/events/EVMChainEventsBrowser.ts +390 -390
- package/src/evm/spv_swap/EVMSpvVaultContract.ts +608 -603
- package/src/evm/spv_swap/EVMSpvVaultData.ts +224 -224
- package/src/evm/spv_swap/EVMSpvWithdrawalData.ts +70 -70
- package/src/evm/spv_swap/SpvVaultContractAbi.ts +846 -846
- package/src/evm/spv_swap/SpvVaultContractTypechain.ts +685 -685
- package/src/evm/swaps/EVMSwapContract.ts +592 -592
- package/src/evm/swaps/EVMSwapData.ts +378 -378
- package/src/evm/swaps/EVMSwapModule.ts +16 -16
- package/src/evm/swaps/EscrowManagerAbi.ts +982 -982
- package/src/evm/swaps/EscrowManagerTypechain.ts +723 -723
- package/src/evm/swaps/handlers/IHandler.ts +17 -17
- package/src/evm/swaps/handlers/claim/ClaimHandlers.ts +20 -20
- package/src/evm/swaps/handlers/claim/HashlockClaimHandler.ts +46 -46
- package/src/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +82 -82
- package/src/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +76 -76
- package/src/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +46 -46
- package/src/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +115 -115
- package/src/evm/swaps/handlers/refund/TimelockRefundHandler.ts +37 -37
- package/src/evm/swaps/modules/EVMLpVault.ts +154 -152
- package/src/evm/swaps/modules/EVMSwapClaim.ts +172 -172
- package/src/evm/swaps/modules/EVMSwapInit.ts +328 -325
- package/src/evm/swaps/modules/EVMSwapRefund.ts +229 -229
- package/src/evm/typechain/common.ts +131 -131
- package/src/evm/wallet/EVMSigner.ts +25 -23
- package/src/index.ts +45 -45
- package/src/utils/Utils.ts +81 -81
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {BaseContract} from "ethers";
|
|
2
|
-
import {EVMModule} from "../chain/EVMModule";
|
|
3
|
-
import {EVMChainInterface} from "../chain/EVMChainInterface";
|
|
4
|
-
import {EVMContractBase} from "./EVMContractBase";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export class EVMContractModule<T extends BaseContract> extends EVMModule<any> {
|
|
8
|
-
|
|
9
|
-
readonly contract: EVMContractBase<T>;
|
|
10
|
-
|
|
11
|
-
constructor(chainInterface: EVMChainInterface<any>, contract: EVMContractBase<T>) {
|
|
12
|
-
super(chainInterface)
|
|
13
|
-
this.contract = contract;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
}
|
|
1
|
+
import {BaseContract} from "ethers";
|
|
2
|
+
import {EVMModule} from "../chain/EVMModule";
|
|
3
|
+
import {EVMChainInterface} from "../chain/EVMChainInterface";
|
|
4
|
+
import {EVMContractBase} from "./EVMContractBase";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export class EVMContractModule<T extends BaseContract> extends EVMModule<any> {
|
|
8
|
+
|
|
9
|
+
readonly contract: EVMContractBase<T>;
|
|
10
|
+
|
|
11
|
+
constructor(chainInterface: EVMChainInterface<any>, contract: EVMContractBase<T>) {
|
|
12
|
+
super(chainInterface)
|
|
13
|
+
this.contract = contract;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
}
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import {BaseContract, Log} from "ethers";
|
|
2
|
-
import {EVMEvents} from "../../chain/modules/EVMEvents";
|
|
3
|
-
import {EVMContractBase} from "../EVMContractBase";
|
|
4
|
-
import {EVMChainInterface} from "../../chain/EVMChainInterface";
|
|
5
|
-
import {TypedEventLog} from "../../typechain/common";
|
|
6
|
-
|
|
7
|
-
export class EVMContractEvents<T extends BaseContract> extends EVMEvents {
|
|
8
|
-
|
|
9
|
-
readonly contract: EVMContractBase<T>;
|
|
10
|
-
readonly baseContract: T;
|
|
11
|
-
|
|
12
|
-
constructor(chainInterface: EVMChainInterface<any>, contract: EVMContractBase<T>) {
|
|
13
|
-
super(chainInterface);
|
|
14
|
-
this.contract = contract;
|
|
15
|
-
this.baseContract = contract.contract;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
private toTypedEvents<TEventName extends keyof T["filters"]>(blockEvents: Log[]): TypedEventLog<T["filters"][TEventName]>[] {
|
|
19
|
-
return blockEvents.map(log => this.contract.toTypedEvent<TEventName>(log));
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
private toFilter<TEventName extends keyof T["filters"]>(
|
|
23
|
-
events: TEventName[],
|
|
24
|
-
keys: string[],
|
|
25
|
-
): (string | string[])[] {
|
|
26
|
-
const filterArray: (string | string[])[] = [];
|
|
27
|
-
filterArray.push(events.map(name => {
|
|
28
|
-
return this.baseContract.getEvent(name as string).fragment.topicHash;
|
|
29
|
-
}));
|
|
30
|
-
if(keys!=null) keys.forEach(key => filterArray.push(key));
|
|
31
|
-
return filterArray;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Returns the events occuring in a range of EVM blocks as identified by the contract and keys,
|
|
36
|
-
* returns pending events if no startHeight & endHeight is passed
|
|
37
|
-
*
|
|
38
|
-
* @param events
|
|
39
|
-
* @param keys
|
|
40
|
-
* @param startBlockHeight
|
|
41
|
-
* @param endBlockHeight
|
|
42
|
-
*/
|
|
43
|
-
public async getContractBlockEvents<TEventName extends keyof T["filters"]>(
|
|
44
|
-
events: TEventName[],
|
|
45
|
-
keys: string[],
|
|
46
|
-
startBlockHeight?: number,
|
|
47
|
-
endBlockHeight: number = startBlockHeight
|
|
48
|
-
): Promise<TypedEventLog<T["filters"][TEventName]>[]> {
|
|
49
|
-
const blockEvents = await super.getBlockEvents(await this.baseContract.getAddress(), this.toFilter(events, keys), startBlockHeight, endBlockHeight);
|
|
50
|
-
return this.toTypedEvents<TEventName>(blockEvents);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Runs a search backwards in time, processing the events for a specific topic public key
|
|
55
|
-
*
|
|
56
|
-
* @param events
|
|
57
|
-
* @param keys
|
|
58
|
-
* @param processor called for every event, should return a value if the correct event was found, or null
|
|
59
|
-
* if the search should continue
|
|
60
|
-
* @param abortSignal
|
|
61
|
-
*/
|
|
62
|
-
public async findInContractEvents<TResult, TEventName extends keyof T["filters"]>(
|
|
63
|
-
events: TEventName[],
|
|
64
|
-
keys: string[],
|
|
65
|
-
processor: (event: TypedEventLog<T["filters"][TEventName]>) => Promise<TResult>,
|
|
66
|
-
abortSignal?: AbortSignal
|
|
67
|
-
): Promise<TResult> {
|
|
68
|
-
return this.findInEvents<TResult>(await this.baseContract.getAddress(), this.toFilter(events, keys), async (events: Log[]) => {
|
|
69
|
-
const parsedEvents = this.toTypedEvents<TEventName>(events);
|
|
70
|
-
for(let event of parsedEvents) {
|
|
71
|
-
const result: TResult = await processor(event);
|
|
72
|
-
if(result!=null) return result;
|
|
73
|
-
}
|
|
74
|
-
}, abortSignal, this.contract.contractDeploymentHeight);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Runs a search forwards in time, processing the events for a specific topic
|
|
79
|
-
*
|
|
80
|
-
* @param events
|
|
81
|
-
* @param keys
|
|
82
|
-
* @param processor called for every event, should return a value if the correct event was found, or null
|
|
83
|
-
* if the search should continue
|
|
84
|
-
* @param abortSignal
|
|
85
|
-
*/
|
|
86
|
-
public async findInContractEventsForward<TResult, TEventName extends keyof T["filters"]>(
|
|
87
|
-
events: TEventName[],
|
|
88
|
-
keys: string[],
|
|
89
|
-
processor: (event: TypedEventLog<T["filters"][TEventName]>) => Promise<TResult>,
|
|
90
|
-
abortSignal?: AbortSignal
|
|
91
|
-
): Promise<TResult> {
|
|
92
|
-
return this.findInEventsForward<TResult>(await this.baseContract.getAddress(), this.toFilter(events, keys), async (events: Log[]) => {
|
|
93
|
-
const parsedEvents = this.toTypedEvents<TEventName>(events);
|
|
94
|
-
for(let event of parsedEvents) {
|
|
95
|
-
const result: TResult = await processor(event);
|
|
96
|
-
if(result!=null) return result;
|
|
97
|
-
}
|
|
98
|
-
}, abortSignal, this.contract.contractDeploymentHeight);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
1
|
+
import {BaseContract, Log} from "ethers";
|
|
2
|
+
import {EVMEvents} from "../../chain/modules/EVMEvents";
|
|
3
|
+
import {EVMContractBase} from "../EVMContractBase";
|
|
4
|
+
import {EVMChainInterface} from "../../chain/EVMChainInterface";
|
|
5
|
+
import {TypedEventLog} from "../../typechain/common";
|
|
6
|
+
|
|
7
|
+
export class EVMContractEvents<T extends BaseContract> extends EVMEvents {
|
|
8
|
+
|
|
9
|
+
readonly contract: EVMContractBase<T>;
|
|
10
|
+
readonly baseContract: T;
|
|
11
|
+
|
|
12
|
+
constructor(chainInterface: EVMChainInterface<any>, contract: EVMContractBase<T>) {
|
|
13
|
+
super(chainInterface);
|
|
14
|
+
this.contract = contract;
|
|
15
|
+
this.baseContract = contract.contract;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
private toTypedEvents<TEventName extends keyof T["filters"]>(blockEvents: Log[]): TypedEventLog<T["filters"][TEventName]>[] {
|
|
19
|
+
return blockEvents.map(log => this.contract.toTypedEvent<TEventName>(log));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
private toFilter<TEventName extends keyof T["filters"]>(
|
|
23
|
+
events: TEventName[],
|
|
24
|
+
keys: string[],
|
|
25
|
+
): (string | string[])[] {
|
|
26
|
+
const filterArray: (string | string[])[] = [];
|
|
27
|
+
filterArray.push(events.map(name => {
|
|
28
|
+
return this.baseContract.getEvent(name as string).fragment.topicHash;
|
|
29
|
+
}));
|
|
30
|
+
if(keys!=null) keys.forEach(key => filterArray.push(key));
|
|
31
|
+
return filterArray;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Returns the events occuring in a range of EVM blocks as identified by the contract and keys,
|
|
36
|
+
* returns pending events if no startHeight & endHeight is passed
|
|
37
|
+
*
|
|
38
|
+
* @param events
|
|
39
|
+
* @param keys
|
|
40
|
+
* @param startBlockHeight
|
|
41
|
+
* @param endBlockHeight
|
|
42
|
+
*/
|
|
43
|
+
public async getContractBlockEvents<TEventName extends keyof T["filters"]>(
|
|
44
|
+
events: TEventName[],
|
|
45
|
+
keys: string[],
|
|
46
|
+
startBlockHeight?: number,
|
|
47
|
+
endBlockHeight: number = startBlockHeight
|
|
48
|
+
): Promise<TypedEventLog<T["filters"][TEventName]>[]> {
|
|
49
|
+
const blockEvents = await super.getBlockEvents(await this.baseContract.getAddress(), this.toFilter(events, keys), startBlockHeight, endBlockHeight);
|
|
50
|
+
return this.toTypedEvents<TEventName>(blockEvents);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Runs a search backwards in time, processing the events for a specific topic public key
|
|
55
|
+
*
|
|
56
|
+
* @param events
|
|
57
|
+
* @param keys
|
|
58
|
+
* @param processor called for every event, should return a value if the correct event was found, or null
|
|
59
|
+
* if the search should continue
|
|
60
|
+
* @param abortSignal
|
|
61
|
+
*/
|
|
62
|
+
public async findInContractEvents<TResult, TEventName extends keyof T["filters"]>(
|
|
63
|
+
events: TEventName[],
|
|
64
|
+
keys: string[],
|
|
65
|
+
processor: (event: TypedEventLog<T["filters"][TEventName]>) => Promise<TResult>,
|
|
66
|
+
abortSignal?: AbortSignal
|
|
67
|
+
): Promise<TResult> {
|
|
68
|
+
return this.findInEvents<TResult>(await this.baseContract.getAddress(), this.toFilter(events, keys), async (events: Log[]) => {
|
|
69
|
+
const parsedEvents = this.toTypedEvents<TEventName>(events);
|
|
70
|
+
for(let event of parsedEvents) {
|
|
71
|
+
const result: TResult = await processor(event);
|
|
72
|
+
if(result!=null) return result;
|
|
73
|
+
}
|
|
74
|
+
}, abortSignal, this.contract.contractDeploymentHeight);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Runs a search forwards in time, processing the events for a specific topic
|
|
79
|
+
*
|
|
80
|
+
* @param events
|
|
81
|
+
* @param keys
|
|
82
|
+
* @param processor called for every event, should return a value if the correct event was found, or null
|
|
83
|
+
* if the search should continue
|
|
84
|
+
* @param abortSignal
|
|
85
|
+
*/
|
|
86
|
+
public async findInContractEventsForward<TResult, TEventName extends keyof T["filters"]>(
|
|
87
|
+
events: TEventName[],
|
|
88
|
+
keys: string[],
|
|
89
|
+
processor: (event: TypedEventLog<T["filters"][TEventName]>) => Promise<TResult>,
|
|
90
|
+
abortSignal?: AbortSignal
|
|
91
|
+
): Promise<TResult> {
|
|
92
|
+
return this.findInEventsForward<TResult>(await this.baseContract.getAddress(), this.toFilter(events, keys), async (events: Log[]) => {
|
|
93
|
+
const parsedEvents = this.toTypedEvents<TEventName>(events);
|
|
94
|
+
for(let event of parsedEvents) {
|
|
95
|
+
const result: TResult = await processor(event);
|
|
96
|
+
if(result!=null) return result;
|
|
97
|
+
}
|
|
98
|
+
}, abortSignal, this.contract.contractDeploymentHeight);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
//@ts-ignore
|
|
2
|
-
import * as fs from "fs/promises";
|
|
3
|
-
import {EVMChainEventsBrowser, EVMEventListenerState} from "./EVMChainEventsBrowser";
|
|
4
|
-
import {EVMChainInterface} from "../chain/EVMChainInterface";
|
|
5
|
-
import {EVMSwapContract} from "../swaps/EVMSwapContract";
|
|
6
|
-
import {EVMSpvVaultContract} from "../spv_swap/EVMSpvVaultContract";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export class EVMChainEvents extends EVMChainEventsBrowser {
|
|
10
|
-
|
|
11
|
-
private readonly directory: string;
|
|
12
|
-
private readonly BLOCKHEIGHT_FILENAME: string;
|
|
13
|
-
|
|
14
|
-
constructor(
|
|
15
|
-
directory: string,
|
|
16
|
-
chainInterface: EVMChainInterface,
|
|
17
|
-
evmSwapContract: EVMSwapContract,
|
|
18
|
-
evmSpvVaultContract: EVMSpvVaultContract<any>,
|
|
19
|
-
pollIntervalSeconds?: number
|
|
20
|
-
) {
|
|
21
|
-
super(chainInterface, evmSwapContract, evmSpvVaultContract, pollIntervalSeconds);
|
|
22
|
-
this.BLOCKHEIGHT_FILENAME = "/"+chainInterface.chainId+"-blockheight.txt";
|
|
23
|
-
this.directory = directory;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Retrieves last signature & slot from filesystem
|
|
28
|
-
*
|
|
29
|
-
* @private
|
|
30
|
-
*/
|
|
31
|
-
private async getLastEventData(): Promise<EVMEventListenerState[]> {
|
|
32
|
-
try {
|
|
33
|
-
const txt: string = (await fs.readFile(this.directory+this.BLOCKHEIGHT_FILENAME)).toString();
|
|
34
|
-
const arr = txt.split(";");
|
|
35
|
-
return arr.map(val => {
|
|
36
|
-
const stateResult = val.split(",");
|
|
37
|
-
if(stateResult.length>=3) {
|
|
38
|
-
return {
|
|
39
|
-
lastBlockNumber: parseInt(stateResult[0]),
|
|
40
|
-
lastEvent: {
|
|
41
|
-
blockHash: stateResult[1],
|
|
42
|
-
logIndex: parseInt(stateResult[2])
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
} else if(stateResult.length>=1) {
|
|
46
|
-
return {
|
|
47
|
-
lastBlockNumber: parseInt(stateResult[0])
|
|
48
|
-
}
|
|
49
|
-
} else {
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
} catch (e) {
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Saves last signature & slot to the filesystem
|
|
60
|
-
*
|
|
61
|
-
* @private
|
|
62
|
-
*/
|
|
63
|
-
private saveLastEventData(newState: EVMEventListenerState[]): Promise<void> {
|
|
64
|
-
return fs.writeFile(this.directory+this.BLOCKHEIGHT_FILENAME, newState.map(val => {
|
|
65
|
-
if(val.lastEvent==null) {
|
|
66
|
-
return val.lastBlockNumber.toString(10);
|
|
67
|
-
} else {
|
|
68
|
-
return val.lastBlockNumber.toString(10)+","+val.lastEvent.blockHash+","+val.lastEvent.logIndex.toString(10);
|
|
69
|
-
}
|
|
70
|
-
}).join(";"));
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
async init(): Promise<void> {
|
|
74
|
-
const lastState = await this.getLastEventData();
|
|
75
|
-
await this.setupPoll(
|
|
76
|
-
lastState,
|
|
77
|
-
(newState: EVMEventListenerState[]) => this.saveLastEventData(newState)
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
}
|
|
1
|
+
//@ts-ignore
|
|
2
|
+
import * as fs from "fs/promises";
|
|
3
|
+
import {EVMChainEventsBrowser, EVMEventListenerState} from "./EVMChainEventsBrowser";
|
|
4
|
+
import {EVMChainInterface} from "../chain/EVMChainInterface";
|
|
5
|
+
import {EVMSwapContract} from "../swaps/EVMSwapContract";
|
|
6
|
+
import {EVMSpvVaultContract} from "../spv_swap/EVMSpvVaultContract";
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
export class EVMChainEvents extends EVMChainEventsBrowser {
|
|
10
|
+
|
|
11
|
+
private readonly directory: string;
|
|
12
|
+
private readonly BLOCKHEIGHT_FILENAME: string;
|
|
13
|
+
|
|
14
|
+
constructor(
|
|
15
|
+
directory: string,
|
|
16
|
+
chainInterface: EVMChainInterface,
|
|
17
|
+
evmSwapContract: EVMSwapContract,
|
|
18
|
+
evmSpvVaultContract: EVMSpvVaultContract<any>,
|
|
19
|
+
pollIntervalSeconds?: number
|
|
20
|
+
) {
|
|
21
|
+
super(chainInterface, evmSwapContract, evmSpvVaultContract, pollIntervalSeconds);
|
|
22
|
+
this.BLOCKHEIGHT_FILENAME = "/"+chainInterface.chainId+"-blockheight.txt";
|
|
23
|
+
this.directory = directory;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Retrieves last signature & slot from filesystem
|
|
28
|
+
*
|
|
29
|
+
* @private
|
|
30
|
+
*/
|
|
31
|
+
private async getLastEventData(): Promise<EVMEventListenerState[]> {
|
|
32
|
+
try {
|
|
33
|
+
const txt: string = (await fs.readFile(this.directory+this.BLOCKHEIGHT_FILENAME)).toString();
|
|
34
|
+
const arr = txt.split(";");
|
|
35
|
+
return arr.map(val => {
|
|
36
|
+
const stateResult = val.split(",");
|
|
37
|
+
if(stateResult.length>=3) {
|
|
38
|
+
return {
|
|
39
|
+
lastBlockNumber: parseInt(stateResult[0]),
|
|
40
|
+
lastEvent: {
|
|
41
|
+
blockHash: stateResult[1],
|
|
42
|
+
logIndex: parseInt(stateResult[2])
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
} else if(stateResult.length>=1) {
|
|
46
|
+
return {
|
|
47
|
+
lastBlockNumber: parseInt(stateResult[0])
|
|
48
|
+
}
|
|
49
|
+
} else {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
} catch (e) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Saves last signature & slot to the filesystem
|
|
60
|
+
*
|
|
61
|
+
* @private
|
|
62
|
+
*/
|
|
63
|
+
private saveLastEventData(newState: EVMEventListenerState[]): Promise<void> {
|
|
64
|
+
return fs.writeFile(this.directory+this.BLOCKHEIGHT_FILENAME, newState.map(val => {
|
|
65
|
+
if(val.lastEvent==null) {
|
|
66
|
+
return val.lastBlockNumber.toString(10);
|
|
67
|
+
} else {
|
|
68
|
+
return val.lastBlockNumber.toString(10)+","+val.lastEvent.blockHash+","+val.lastEvent.logIndex.toString(10);
|
|
69
|
+
}
|
|
70
|
+
}).join(";"));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async init(): Promise<void> {
|
|
74
|
+
const lastState = await this.getLastEventData();
|
|
75
|
+
await this.setupPoll(
|
|
76
|
+
lastState,
|
|
77
|
+
(newState: EVMEventListenerState[]) => this.saveLastEventData(newState)
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
}
|