@atomiqlabs/chain-starknet 1.0.9 → 2.0.0-beta.1
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/dist/index.d.ts +13 -9
- package/dist/index.js +13 -9
- package/dist/starknet/StarknetChainType.d.ts +6 -2
- package/dist/starknet/StarknetInitializer.d.ts +3 -2
- package/dist/starknet/StarknetInitializer.js +17 -6
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +28 -7
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +75 -20
- package/dist/starknet/{base → chain}/StarknetAction.d.ts +2 -2
- package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -0
- package/dist/starknet/chain/StarknetChainInterface.js +91 -0
- package/dist/starknet/{base → chain}/StarknetModule.d.ts +3 -3
- package/dist/starknet/{base → chain}/modules/StarknetAddresses.d.ts +1 -1
- package/dist/starknet/{base → chain}/modules/StarknetAddresses.js +1 -1
- package/dist/starknet/{base → chain}/modules/StarknetSignatures.d.ts +2 -2
- package/dist/starknet/{base → chain}/modules/StarknetTokens.js +2 -1
- package/dist/starknet/{base → chain}/modules/StarknetTransactions.d.ts +7 -1
- package/dist/starknet/{base → chain}/modules/StarknetTransactions.js +45 -16
- package/dist/starknet/contract/StarknetContractBase.d.ts +5 -5
- package/dist/starknet/contract/StarknetContractBase.js +5 -7
- package/dist/starknet/contract/StarknetContractModule.d.ts +8 -0
- package/dist/starknet/contract/StarknetContractModule.js +11 -0
- package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +15 -4
- package/dist/starknet/contract/modules/StarknetContractEvents.js +26 -6
- package/dist/starknet/events/StarknetChainEvents.d.ts +3 -1
- package/dist/starknet/events/StarknetChainEvents.js +9 -9
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +23 -6
- package/dist/starknet/events/StarknetChainEventsBrowser.js +104 -13
- package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -0
- package/dist/starknet/provider/RpcProviderWithRetries.js +32 -0
- package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -0
- package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +65 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +372 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +144 -0
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +24 -0
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +61 -0
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +4 -22
- package/dist/starknet/swaps/StarknetSwapContract.js +23 -80
- package/dist/starknet/swaps/StarknetSwapModule.d.ts +6 -5
- package/dist/starknet/swaps/StarknetSwapModule.js +5 -6
- package/dist/starknet/swaps/handlers/IHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +2 -21
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +7 -41
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +2 -2
- package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetLpVault.js +9 -9
- package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +8 -8
- package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +9 -9
- package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +1 -3
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +8 -11
- package/dist/starknet/wallet/StarknetSigner.js +1 -1
- package/dist/utils/Utils.d.ts +2 -2
- package/dist/utils/Utils.js +3 -1
- package/package.json +2 -2
- package/src/index.ts +15 -9
- package/src/starknet/StarknetChainType.ts +10 -2
- package/src/starknet/StarknetInitializer.ts +23 -7
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +104 -30
- package/src/starknet/{base → chain}/StarknetAction.ts +3 -3
- package/src/starknet/chain/StarknetChainInterface.ts +149 -0
- package/src/starknet/{base → chain}/StarknetModule.ts +3 -3
- package/src/starknet/{base → chain}/modules/StarknetAddresses.ts +1 -1
- package/src/starknet/{base → chain}/modules/StarknetSignatures.ts +2 -2
- package/src/starknet/{base → chain}/modules/StarknetTokens.ts +2 -1
- package/src/starknet/{base → chain}/modules/StarknetTransactions.ts +43 -18
- package/src/starknet/contract/StarknetContractBase.ts +9 -12
- package/src/starknet/contract/StarknetContractModule.ts +16 -0
- package/src/starknet/contract/modules/StarknetContractEvents.ts +33 -7
- package/src/starknet/events/StarknetChainEvents.ts +15 -11
- package/src/starknet/events/StarknetChainEventsBrowser.ts +157 -26
- package/src/starknet/provider/RpcProviderWithRetries.ts +43 -0
- package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -0
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +475 -0
- package/src/starknet/spv_swap/StarknetSpvVaultData.ts +194 -0
- package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +68 -0
- package/src/starknet/swaps/StarknetSwapContract.ts +28 -116
- package/src/starknet/swaps/StarknetSwapModule.ts +8 -8
- package/src/starknet/swaps/handlers/IHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +1 -1
- package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +12 -61
- package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +2 -2
- package/src/starknet/swaps/modules/StarknetLpVault.ts +10 -10
- package/src/starknet/swaps/modules/StarknetSwapClaim.ts +9 -9
- package/src/starknet/swaps/modules/StarknetSwapInit.ts +10 -10
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +9 -13
- package/src/starknet/wallet/StarknetSigner.ts +1 -1
- package/src/utils/Utils.ts +4 -3
- package/dist/starknet/base/StarknetBase.d.ts +0 -34
- package/dist/starknet/base/StarknetBase.js +0 -29
- package/src/starknet/base/StarknetBase.ts +0 -56
- /package/dist/starknet/{base → chain}/StarknetAction.js +0 -0
- /package/dist/starknet/{base → chain}/StarknetModule.js +0 -0
- /package/dist/starknet/{base → chain}/modules/ERC20Abi.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/ERC20Abi.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetAccounts.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetAccounts.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetBlocks.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetBlocks.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetEvents.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetEvents.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetFees.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetFees.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetSignatures.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetTokens.d.ts +0 -0
- /package/src/starknet/{base → chain}/modules/ERC20Abi.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetAccounts.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetBlocks.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetEvents.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetFees.ts +0 -0
|
@@ -6,6 +6,7 @@ const StarknetAction_1 = require("../StarknetAction");
|
|
|
6
6
|
const ERC20Abi_1 = require("./ERC20Abi");
|
|
7
7
|
const starknet_1 = require("starknet");
|
|
8
8
|
const Utils_1 = require("../../../utils/Utils");
|
|
9
|
+
const StarknetAddresses_1 = require("./StarknetAddresses");
|
|
9
10
|
class StarknetTokens extends StarknetModule_1.StarknetModule {
|
|
10
11
|
getContract(address) {
|
|
11
12
|
return new starknet_1.Contract(ERC20Abi_1.ERC20Abi, address, this.root.provider).typedv2(ERC20Abi_1.ERC20Abi);
|
|
@@ -46,7 +47,7 @@ class StarknetTokens extends StarknetModule_1.StarknetModule {
|
|
|
46
47
|
* @param token
|
|
47
48
|
*/
|
|
48
49
|
isValidToken(token) {
|
|
49
|
-
return
|
|
50
|
+
return StarknetAddresses_1.StarknetAddresses.isValidAddress(token);
|
|
50
51
|
}
|
|
51
52
|
/**
|
|
52
53
|
* Returns the token balance of the address
|
|
@@ -16,6 +16,7 @@ export type StarknetTx = ({
|
|
|
16
16
|
txId?: string;
|
|
17
17
|
};
|
|
18
18
|
export declare class StarknetTransactions extends StarknetModule {
|
|
19
|
+
private readonly latestConfirmedNonces;
|
|
19
20
|
private cbkBeforeTxSigned;
|
|
20
21
|
/**
|
|
21
22
|
* Waits for transaction confirmation using WS subscription and occasional HTTP polling, also re-sends
|
|
@@ -40,7 +41,6 @@ export declare class StarknetTransactions extends StarknetModule {
|
|
|
40
41
|
* @param tx Starknet tx to send
|
|
41
42
|
* @param onBeforePublish a callback called before every transaction is published
|
|
42
43
|
* @param signer
|
|
43
|
-
* @param retryOnSubmissionFailure
|
|
44
44
|
* @private
|
|
45
45
|
*/
|
|
46
46
|
private sendSignedTransaction;
|
|
@@ -76,6 +76,12 @@ export declare class StarknetTransactions extends StarknetModule {
|
|
|
76
76
|
* @param tx
|
|
77
77
|
*/
|
|
78
78
|
getTxStatus(tx: string): Promise<"pending" | "success" | "not_found" | "reverted">;
|
|
79
|
+
/**
|
|
80
|
+
* Gets the status of the starknet transaction with a specific txId
|
|
81
|
+
*
|
|
82
|
+
* @param txId
|
|
83
|
+
*/
|
|
84
|
+
_getTxIdStatus(txId: string): Promise<"pending" | "success" | "not_found" | "reverted" | "rejected">;
|
|
79
85
|
/**
|
|
80
86
|
* Gets the status of the starknet transaction with a specific txId
|
|
81
87
|
*
|
|
@@ -4,6 +4,10 @@ exports.StarknetTransactions = void 0;
|
|
|
4
4
|
const StarknetModule_1 = require("../StarknetModule");
|
|
5
5
|
const Utils_1 = require("../../../utils/Utils");
|
|
6
6
|
class StarknetTransactions extends StarknetModule_1.StarknetModule {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.latestConfirmedNonces = {};
|
|
10
|
+
}
|
|
7
11
|
/**
|
|
8
12
|
* Waits for transaction confirmation using WS subscription and occasional HTTP polling, also re-sends
|
|
9
13
|
* the transaction at regular interval
|
|
@@ -16,14 +20,21 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
|
|
|
16
20
|
let state = "pending";
|
|
17
21
|
while (state === "pending" || state === "not_found") {
|
|
18
22
|
await (0, Utils_1.timeoutPromise)(3000, abortSignal);
|
|
19
|
-
state = await this.
|
|
23
|
+
state = await this._getTxIdStatus(tx.txId);
|
|
20
24
|
if (state === "not_found" && tx.signed != null)
|
|
21
|
-
await this.sendSignedTransaction(tx
|
|
25
|
+
await this.sendSignedTransaction(tx).catch(e => {
|
|
22
26
|
if (e.baseError?.code === 59)
|
|
23
27
|
return; //Transaction already in the mempool
|
|
24
28
|
console.error("Error on transaction re-send: ", e);
|
|
25
29
|
});
|
|
26
30
|
}
|
|
31
|
+
if (state !== "rejected") {
|
|
32
|
+
const nextAccountNonce = (0, Utils_1.toBigInt)(tx.details.nonce) + 1n;
|
|
33
|
+
const currentNonce = this.latestConfirmedNonces[tx.details.walletAddress];
|
|
34
|
+
if (currentNonce == null || nextAccountNonce > currentNonce) {
|
|
35
|
+
this.latestConfirmedNonces[tx.details.walletAddress] = nextAccountNonce;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
27
38
|
if (state === "reverted")
|
|
28
39
|
throw new Error("Transaction reverted!");
|
|
29
40
|
}
|
|
@@ -36,6 +47,11 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
|
|
|
36
47
|
*/
|
|
37
48
|
async prepareTransactions(signer, txs) {
|
|
38
49
|
let nonce = await signer.getNonce();
|
|
50
|
+
const latestConfirmedNonce = this.latestConfirmedNonces[signer.getAddress()];
|
|
51
|
+
if (latestConfirmedNonce != null && latestConfirmedNonce > nonce) {
|
|
52
|
+
console.debug("StarknetTransactions: prepareTransactions(): Using nonce from local cache!");
|
|
53
|
+
nonce = latestConfirmedNonce;
|
|
54
|
+
}
|
|
39
55
|
if (nonce === BigInt(0) && signer.isWalletAccount()) {
|
|
40
56
|
//Just increment the nonce by one and hope the wallet is smart enough to deploy account first
|
|
41
57
|
nonce = BigInt(1);
|
|
@@ -64,10 +80,9 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
|
|
|
64
80
|
* @param tx Starknet tx to send
|
|
65
81
|
* @param onBeforePublish a callback called before every transaction is published
|
|
66
82
|
* @param signer
|
|
67
|
-
* @param retryOnSubmissionFailure
|
|
68
83
|
* @private
|
|
69
84
|
*/
|
|
70
|
-
async sendSignedTransaction(tx, onBeforePublish, signer
|
|
85
|
+
async sendSignedTransaction(tx, onBeforePublish, signer) {
|
|
71
86
|
if (onBeforePublish != null)
|
|
72
87
|
await onBeforePublish(tx.txId, await this.serializeTx(tx));
|
|
73
88
|
this.logger.debug("sendSignedTransaction(): sending transaction: ", tx);
|
|
@@ -86,16 +101,17 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
|
|
|
86
101
|
tx.txId = txHash;
|
|
87
102
|
return txHash;
|
|
88
103
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
104
|
+
let txResult;
|
|
105
|
+
switch (tx.type) {
|
|
106
|
+
case "INVOKE":
|
|
107
|
+
txResult = await this.provider.channel.invoke(tx.signed, tx.details).then(res => res.transaction_hash);
|
|
108
|
+
break;
|
|
109
|
+
case "DEPLOY_ACCOUNT":
|
|
110
|
+
txResult = await this.provider.channel.deployAccount(tx.signed, tx.details).then((res) => res.transaction_hash);
|
|
111
|
+
break;
|
|
112
|
+
default:
|
|
113
|
+
throw new Error("Unsupported tx type!");
|
|
114
|
+
}
|
|
99
115
|
if (tx.txId !== txResult)
|
|
100
116
|
this.logger.warn("sendSignedTransaction(): sent tx hash not matching the precomputed hash!");
|
|
101
117
|
this.logger.info("sendSignedTransaction(): tx sent, expected txHash: " + tx.txId + ", txHash: " + txResult);
|
|
@@ -200,7 +216,7 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
|
|
|
200
216
|
*
|
|
201
217
|
* @param txId
|
|
202
218
|
*/
|
|
203
|
-
async
|
|
219
|
+
async _getTxIdStatus(txId) {
|
|
204
220
|
const status = await this.provider.getTransactionStatus(txId).catch(e => {
|
|
205
221
|
if (e.message != null && e.message.includes("29: Transaction hash not found"))
|
|
206
222
|
return null;
|
|
@@ -210,11 +226,24 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
|
|
|
210
226
|
return "not_found";
|
|
211
227
|
if (status.finality_status === "RECEIVED")
|
|
212
228
|
return "pending";
|
|
213
|
-
if (status.finality_status
|
|
229
|
+
if (status.finality_status === "REJECTED")
|
|
230
|
+
return "rejected";
|
|
231
|
+
if (status.execution_status === "SUCCEEDED") {
|
|
214
232
|
return "success";
|
|
215
233
|
}
|
|
216
234
|
return "reverted";
|
|
217
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Gets the status of the starknet transaction with a specific txId
|
|
238
|
+
*
|
|
239
|
+
* @param txId
|
|
240
|
+
*/
|
|
241
|
+
async getTxIdStatus(txId) {
|
|
242
|
+
const status = await this._getTxIdStatus(txId);
|
|
243
|
+
if (status === "rejected")
|
|
244
|
+
return "reverted";
|
|
245
|
+
return status;
|
|
246
|
+
}
|
|
218
247
|
onBeforeTxSigned(callback) {
|
|
219
248
|
this.cbkBeforeTxSigned = callback;
|
|
220
249
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { StarknetFees } from "../base/modules/StarknetFees";
|
|
1
|
+
import { StarknetChainInterface } from "../chain/StarknetChainInterface";
|
|
2
|
+
import { TypedContractV2 } from "starknet";
|
|
4
3
|
import { Abi } from "abi-wan-kanabi";
|
|
5
4
|
import { StarknetContractEvents } from "./modules/StarknetContractEvents";
|
|
6
5
|
/**
|
|
7
6
|
* Base class providing program specific utilities
|
|
8
7
|
*/
|
|
9
|
-
export declare class StarknetContractBase<T extends Abi>
|
|
8
|
+
export declare class StarknetContractBase<T extends Abi> {
|
|
10
9
|
contract: TypedContractV2<T>;
|
|
11
10
|
readonly Events: StarknetContractEvents<T>;
|
|
12
|
-
|
|
11
|
+
readonly Chain: StarknetChainInterface;
|
|
12
|
+
constructor(chainInterface: StarknetChainInterface, contractAddress: string, contractAbi: T);
|
|
13
13
|
}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StarknetContractBase = void 0;
|
|
4
|
-
const StarknetBase_1 = require("../base/StarknetBase");
|
|
5
4
|
const starknet_1 = require("starknet");
|
|
6
|
-
const StarknetFees_1 = require("../base/modules/StarknetFees");
|
|
7
5
|
const StarknetContractEvents_1 = require("./modules/StarknetContractEvents");
|
|
8
6
|
/**
|
|
9
7
|
* Base class providing program specific utilities
|
|
10
8
|
*/
|
|
11
|
-
class StarknetContractBase
|
|
12
|
-
constructor(
|
|
13
|
-
|
|
14
|
-
this.contract = new starknet_1.Contract(contractAbi, contractAddress, provider).typedv2(contractAbi);
|
|
15
|
-
this.Events = new StarknetContractEvents_1.StarknetContractEvents(this, contractAbi);
|
|
9
|
+
class StarknetContractBase {
|
|
10
|
+
constructor(chainInterface, contractAddress, contractAbi) {
|
|
11
|
+
this.Chain = chainInterface;
|
|
12
|
+
this.contract = new starknet_1.Contract(contractAbi, contractAddress, chainInterface.provider).typedv2(contractAbi);
|
|
13
|
+
this.Events = new StarknetContractEvents_1.StarknetContractEvents(chainInterface, this, contractAbi);
|
|
16
14
|
}
|
|
17
15
|
}
|
|
18
16
|
exports.StarknetContractBase = StarknetContractBase;
|
|
@@ -0,0 +1,8 @@
|
|
|
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
|
+
export declare class StarknetContractModule<TAbi extends Abi> extends StarknetModule {
|
|
6
|
+
readonly contract: StarknetContractBase<TAbi>;
|
|
7
|
+
constructor(chainInterface: StarknetChainInterface, contract: StarknetContractBase<TAbi>);
|
|
8
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StarknetContractModule = void 0;
|
|
4
|
+
const StarknetModule_1 = require("../chain/StarknetModule");
|
|
5
|
+
class StarknetContractModule extends StarknetModule_1.StarknetModule {
|
|
6
|
+
constructor(chainInterface, contract) {
|
|
7
|
+
super(chainInterface);
|
|
8
|
+
this.contract = contract;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.StarknetContractModule = StarknetContractModule;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Abi } from "abi-wan-kanabi";
|
|
2
2
|
import { EventToPrimitiveType, ExtractAbiEventNames } from "abi-wan-kanabi/dist/kanabi";
|
|
3
|
-
import { StarknetEvents } from "../../
|
|
3
|
+
import { StarknetEvents } from "../../chain/modules/StarknetEvents";
|
|
4
4
|
import { StarknetContractBase } from "../StarknetContractBase";
|
|
5
|
+
import { StarknetChainInterface } from "../../chain/StarknetChainInterface";
|
|
5
6
|
export type StarknetAbiEvent<TAbi extends Abi, TEventName extends ExtractAbiEventNames<TAbi>> = {
|
|
6
7
|
name: TEventName;
|
|
7
8
|
params: EventToPrimitiveType<TAbi, TEventName>;
|
|
@@ -12,9 +13,9 @@ export type StarknetAbiEvent<TAbi extends Abi, TEventName extends ExtractAbiEven
|
|
|
12
13
|
data: string[];
|
|
13
14
|
};
|
|
14
15
|
export declare class StarknetContractEvents<TAbi extends Abi> extends StarknetEvents {
|
|
15
|
-
readonly
|
|
16
|
+
readonly contract: StarknetContractBase<TAbi>;
|
|
16
17
|
readonly abi: TAbi;
|
|
17
|
-
constructor(
|
|
18
|
+
constructor(chainInterface: StarknetChainInterface, contract: StarknetContractBase<TAbi>, abi: TAbi);
|
|
18
19
|
private toStarknetAbiEvents;
|
|
19
20
|
private toFilter;
|
|
20
21
|
/**
|
|
@@ -28,7 +29,7 @@ export declare class StarknetContractEvents<TAbi extends Abi> extends StarknetEv
|
|
|
28
29
|
*/
|
|
29
30
|
getContractBlockEvents<T extends ExtractAbiEventNames<TAbi>>(events: T[], keys: string[], startBlockHeight?: number, endBlockHeight?: number): Promise<StarknetAbiEvent<TAbi, T>[]>;
|
|
30
31
|
/**
|
|
31
|
-
* Runs a search
|
|
32
|
+
* Runs a search backwards in time, processing the events for a specific topic public key
|
|
32
33
|
*
|
|
33
34
|
* @param events
|
|
34
35
|
* @param keys
|
|
@@ -37,4 +38,14 @@ export declare class StarknetContractEvents<TAbi extends Abi> extends StarknetEv
|
|
|
37
38
|
* @param abortSignal
|
|
38
39
|
*/
|
|
39
40
|
findInContractEvents<T, TEvent extends ExtractAbiEventNames<TAbi>>(events: TEvent[], keys: string[], processor: (event: StarknetAbiEvent<TAbi, TEvent>) => Promise<T>, abortSignal?: AbortSignal): Promise<T>;
|
|
41
|
+
/**
|
|
42
|
+
* Runs a search forwards in time, processing the events for a specific topic public key
|
|
43
|
+
*
|
|
44
|
+
* @param events
|
|
45
|
+
* @param keys
|
|
46
|
+
* @param processor called for every event, should return a value if the correct event was found, or null
|
|
47
|
+
* if the search should continue
|
|
48
|
+
* @param abortSignal
|
|
49
|
+
*/
|
|
50
|
+
findInContractEventsForward<T, TEvent extends ExtractAbiEventNames<TAbi>>(events: TEvent[], keys: string[], processor: (event: StarknetAbiEvent<TAbi, TEvent>) => Promise<T>, abortSignal?: AbortSignal): Promise<T>;
|
|
40
51
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StarknetContractEvents = void 0;
|
|
4
|
-
const StarknetEvents_1 = require("../../
|
|
4
|
+
const StarknetEvents_1 = require("../../chain/modules/StarknetEvents");
|
|
5
5
|
const starknet_1 = require("starknet");
|
|
6
6
|
const Utils_1 = require("../../../utils/Utils");
|
|
7
7
|
class StarknetContractEvents extends StarknetEvents_1.StarknetEvents {
|
|
8
|
-
constructor(
|
|
9
|
-
super(
|
|
8
|
+
constructor(chainInterface, contract, abi) {
|
|
9
|
+
super(chainInterface);
|
|
10
|
+
this.contract = contract;
|
|
10
11
|
this.abi = abi;
|
|
11
12
|
}
|
|
12
13
|
toStarknetAbiEvents(blockEvents) {
|
|
@@ -51,11 +52,11 @@ class StarknetContractEvents extends StarknetEvents_1.StarknetEvents {
|
|
|
51
52
|
* @param endBlockHeight
|
|
52
53
|
*/
|
|
53
54
|
async getContractBlockEvents(events, keys, startBlockHeight, endBlockHeight = startBlockHeight) {
|
|
54
|
-
const blockEvents = await super.getBlockEvents(this.
|
|
55
|
+
const blockEvents = await super.getBlockEvents(this.contract.contract.address, this.toFilter(events, keys), startBlockHeight, endBlockHeight);
|
|
55
56
|
return this.toStarknetAbiEvents(blockEvents);
|
|
56
57
|
}
|
|
57
58
|
/**
|
|
58
|
-
* Runs a search
|
|
59
|
+
* Runs a search backwards in time, processing the events for a specific topic public key
|
|
59
60
|
*
|
|
60
61
|
* @param events
|
|
61
62
|
* @param keys
|
|
@@ -64,7 +65,26 @@ class StarknetContractEvents extends StarknetEvents_1.StarknetEvents {
|
|
|
64
65
|
* @param abortSignal
|
|
65
66
|
*/
|
|
66
67
|
async findInContractEvents(events, keys, processor, abortSignal) {
|
|
67
|
-
return this.findInEvents(this.
|
|
68
|
+
return this.findInEvents(this.contract.contract.address, this.toFilter(events, keys), async (events) => {
|
|
69
|
+
const parsedEvents = this.toStarknetAbiEvents(events);
|
|
70
|
+
for (let event of parsedEvents) {
|
|
71
|
+
const result = await processor(event);
|
|
72
|
+
if (result != null)
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
}, abortSignal);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Runs a search forwards in time, processing the events for a specific topic public key
|
|
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
|
+
async findInContractEventsForward(events, keys, processor, abortSignal) {
|
|
87
|
+
return this.findInEventsForward(this.contract.contract.address, this.toFilter(events, keys), async (events) => {
|
|
68
88
|
const parsedEvents = this.toStarknetAbiEvents(events);
|
|
69
89
|
for (let event of parsedEvents) {
|
|
70
90
|
const result = await processor(event);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { StarknetChainEventsBrowser } from "./StarknetChainEventsBrowser";
|
|
2
2
|
import { StarknetSwapContract } from "../swaps/StarknetSwapContract";
|
|
3
|
+
import { StarknetChainInterface } from "../chain/StarknetChainInterface";
|
|
4
|
+
import { StarknetSpvVaultContract } from "../spv_swap/StarknetSpvVaultContract";
|
|
3
5
|
export declare class StarknetChainEvents extends StarknetChainEventsBrowser {
|
|
4
6
|
private readonly directory;
|
|
5
|
-
constructor(directory: string, starknetSwapContract: StarknetSwapContract, pollIntervalSeconds?: number);
|
|
7
|
+
constructor(directory: string, chainInterface: StarknetChainInterface, starknetSwapContract: StarknetSwapContract, starknetSpvVaultContract: StarknetSpvVaultContract, pollIntervalSeconds?: number);
|
|
6
8
|
/**
|
|
7
9
|
* Retrieves last signature & slot from filesystem
|
|
8
10
|
*
|
|
@@ -6,8 +6,8 @@ const StarknetChainEventsBrowser_1 = require("./StarknetChainEventsBrowser");
|
|
|
6
6
|
const fs = require("fs/promises");
|
|
7
7
|
const BLOCKHEIGHT_FILENAME = "/strk-blockheight.txt";
|
|
8
8
|
class StarknetChainEvents extends StarknetChainEventsBrowser_1.StarknetChainEventsBrowser {
|
|
9
|
-
constructor(directory, starknetSwapContract, pollIntervalSeconds) {
|
|
10
|
-
super(starknetSwapContract, pollIntervalSeconds);
|
|
9
|
+
constructor(directory, chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds) {
|
|
10
|
+
super(chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds);
|
|
11
11
|
this.directory = directory;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
@@ -22,17 +22,17 @@ class StarknetChainEvents extends StarknetChainEventsBrowser_1.StarknetChainEven
|
|
|
22
22
|
if (arr.length < 2)
|
|
23
23
|
return {
|
|
24
24
|
blockNumber: parseInt(arr[0]),
|
|
25
|
-
|
|
25
|
+
txHashes: null
|
|
26
26
|
};
|
|
27
27
|
return {
|
|
28
28
|
blockNumber: parseInt(arr[0]),
|
|
29
|
-
|
|
29
|
+
txHashes: arr.slice(1)
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
catch (e) {
|
|
33
33
|
return {
|
|
34
34
|
blockNumber: null,
|
|
35
|
-
|
|
35
|
+
txHashes: null
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -41,12 +41,12 @@ class StarknetChainEvents extends StarknetChainEventsBrowser_1.StarknetChainEven
|
|
|
41
41
|
*
|
|
42
42
|
* @private
|
|
43
43
|
*/
|
|
44
|
-
saveLastEventData(blockNumber,
|
|
45
|
-
return fs.writeFile(this.directory + BLOCKHEIGHT_FILENAME, blockNumber.toString() + ";" +
|
|
44
|
+
saveLastEventData(blockNumber, txHashes) {
|
|
45
|
+
return fs.writeFile(this.directory + BLOCKHEIGHT_FILENAME, blockNumber.toString() + ";" + txHashes.join(";"));
|
|
46
46
|
}
|
|
47
47
|
async init() {
|
|
48
|
-
const { blockNumber,
|
|
49
|
-
await this.setupPoll(blockNumber,
|
|
48
|
+
const { blockNumber, txHashes } = await this.getLastEventData();
|
|
49
|
+
await this.setupPoll(blockNumber, txHashes, (blockNumber, txHashes) => this.saveLastEventData(blockNumber, txHashes));
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
exports.StarknetChainEvents = StarknetChainEvents;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChainEvents, ClaimEvent, EventListener, InitializeEvent, RefundEvent } from "@atomiqlabs/base";
|
|
1
|
+
import { ChainEvents, ClaimEvent, EventListener, InitializeEvent, RefundEvent, SpvVaultClaimEvent, SpvVaultCloseEvent, SpvVaultDepositEvent, SpvVaultFrontEvent, SpvVaultOpenEvent } from "@atomiqlabs/base";
|
|
2
2
|
import { StarknetSwapData } from "../swaps/StarknetSwapData";
|
|
3
3
|
import { StarknetSwapContract } from "../swaps/StarknetSwapContract";
|
|
4
4
|
import { BigNumberish, Provider } from "starknet";
|
|
@@ -6,6 +6,9 @@ import { StarknetAbiEvent } from "../contract/modules/StarknetContractEvents";
|
|
|
6
6
|
import { EscrowManagerAbiType } from "../swaps/EscrowManagerAbi";
|
|
7
7
|
import { ExtractAbiFunctionNames } from "abi-wan-kanabi/dist/kanabi";
|
|
8
8
|
import { IClaimHandler } from "../swaps/handlers/claim/ClaimHandlers";
|
|
9
|
+
import { StarknetSpvVaultContract } from "../spv_swap/StarknetSpvVaultContract";
|
|
10
|
+
import { StarknetChainInterface } from "../chain/StarknetChainInterface";
|
|
11
|
+
import { SpvVaultContractAbiType } from "../spv_swap/SpvVaultContractAbi";
|
|
9
12
|
export type StarknetTraceCall = {
|
|
10
13
|
calldata: string[];
|
|
11
14
|
contract_address: string;
|
|
@@ -21,6 +24,7 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
|
|
|
21
24
|
protected readonly listeners: EventListener<StarknetSwapData>[];
|
|
22
25
|
protected readonly provider: Provider;
|
|
23
26
|
protected readonly starknetSwapContract: StarknetSwapContract;
|
|
27
|
+
protected readonly starknetSpvVaultContract: StarknetSpvVaultContract;
|
|
24
28
|
protected eventListeners: number[];
|
|
25
29
|
protected readonly logger: {
|
|
26
30
|
debug: (msg: any, ...args: any[]) => void;
|
|
@@ -33,7 +37,7 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
|
|
|
33
37
|
protected stopped: boolean;
|
|
34
38
|
protected pollIntervalSeconds: number;
|
|
35
39
|
private timeout;
|
|
36
|
-
constructor(starknetSwapContract: StarknetSwapContract, pollIntervalSeconds?: number);
|
|
40
|
+
constructor(chainInterface: StarknetChainInterface, starknetSwapContract: StarknetSwapContract, starknetSpvVaultContract: StarknetSpvVaultContract, pollIntervalSeconds?: number);
|
|
37
41
|
findInitSwapData(call: StarknetTraceCall, escrowHash: BigNumberish, claimHandler: IClaimHandler<any, any>): StarknetSwapData;
|
|
38
42
|
/**
|
|
39
43
|
* Returns async getter for fetching on-demand initialize event swap data
|
|
@@ -47,6 +51,11 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
|
|
|
47
51
|
protected parseInitializeEvent(event: StarknetAbiEvent<EscrowManagerAbiType, "escrow_manager::events::Initialize">): InitializeEvent<StarknetSwapData>;
|
|
48
52
|
protected parseRefundEvent(event: StarknetAbiEvent<EscrowManagerAbiType, "escrow_manager::events::Refund">): RefundEvent<StarknetSwapData>;
|
|
49
53
|
protected parseClaimEvent(event: StarknetAbiEvent<EscrowManagerAbiType, "escrow_manager::events::Claim">): ClaimEvent<StarknetSwapData>;
|
|
54
|
+
protected parseSpvOpenEvent(event: StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Opened">): SpvVaultOpenEvent;
|
|
55
|
+
protected parseSpvDepositEvent(event: StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Deposited">): SpvVaultDepositEvent;
|
|
56
|
+
protected parseSpvFrontEvent(event: StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Fronted">): SpvVaultFrontEvent;
|
|
57
|
+
protected parseSpvClaimEvent(event: StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Claimed">): SpvVaultClaimEvent;
|
|
58
|
+
protected parseSpvCloseEvent(event: StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Closed">): SpvVaultCloseEvent;
|
|
50
59
|
/**
|
|
51
60
|
* Processes event as received from the chain, parses it & calls event listeners
|
|
52
61
|
*
|
|
@@ -56,9 +65,17 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
|
|
|
56
65
|
* @param pendingEventTime
|
|
57
66
|
* @protected
|
|
58
67
|
*/
|
|
59
|
-
protected processEvents(events: StarknetAbiEvent<EscrowManagerAbiType, "escrow_manager::events::Initialize" | "escrow_manager::events::Refund" | "escrow_manager::events::Claim">[], currentBlockNumber: number, currentBlockTimestamp: number, pendingEventTime: number): Promise<void>;
|
|
60
|
-
protected
|
|
61
|
-
|
|
68
|
+
protected processEvents(events: (StarknetAbiEvent<EscrowManagerAbiType, "escrow_manager::events::Initialize" | "escrow_manager::events::Refund" | "escrow_manager::events::Claim"> | StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Opened" | "spv_swap_vault::events::Deposited" | "spv_swap_vault::events::Fronted" | "spv_swap_vault::events::Claimed" | "spv_swap_vault::events::Closed">)[], currentBlockNumber: number, currentBlockTimestamp: number, pendingEventTime: number): Promise<void>;
|
|
69
|
+
protected checkEventsEcrowManager(lastTxHash: string, lastBlockNumber?: number, currentBlock?: {
|
|
70
|
+
timestamp: number;
|
|
71
|
+
block_number: number;
|
|
72
|
+
}): Promise<string>;
|
|
73
|
+
protected checkEventsSpvVaults(lastTxHash: string, lastBlockNumber?: number, currentBlock?: {
|
|
74
|
+
timestamp: number;
|
|
75
|
+
block_number: number;
|
|
76
|
+
}): Promise<string>;
|
|
77
|
+
protected checkEvents(lastBlockNumber: number, lastTxHashes: string[]): Promise<{
|
|
78
|
+
txHashes: string[];
|
|
62
79
|
blockNumber: number;
|
|
63
80
|
}>;
|
|
64
81
|
/**
|
|
@@ -66,7 +83,7 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
|
|
|
66
83
|
*
|
|
67
84
|
* @protected
|
|
68
85
|
*/
|
|
69
|
-
protected setupPoll(lastBlockNumber?: number,
|
|
86
|
+
protected setupPoll(lastBlockNumber?: number, lastTxHashes?: string[], saveLatestProcessedBlockNumber?: (blockNumber: number, lastTxHashes: string[]) => Promise<void>): Promise<void>;
|
|
70
87
|
init(): Promise<void>;
|
|
71
88
|
stop(): Promise<void>;
|
|
72
89
|
registerListener(cbk: EventListener<StarknetSwapData>): void;
|