@atomiqlabs/chain-starknet 2.0.0-beta.1 → 2.0.0-beta.10
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/starknet/StarknetInitializer.js +2 -2
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +2 -2
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +4 -3
- package/dist/starknet/chain/modules/StarknetFees.js +1 -3
- package/dist/starknet/chain/modules/StarknetTransactions.js +1 -1
- package/dist/starknet/events/StarknetChainEventsBrowser.js +6 -8
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +5 -1
- package/dist/starknet/wallet/StarknetKeypairWallet.d.ts +1 -0
- package/dist/starknet/wallet/StarknetKeypairWallet.js +4 -0
- package/package.json +2 -2
- package/src/starknet/StarknetInitializer.ts +3 -3
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +7 -5
- package/src/starknet/chain/modules/StarknetFees.ts +1 -4
- package/src/starknet/chain/modules/StarknetTransactions.ts +1 -1
- package/src/starknet/events/StarknetChainEventsBrowser.ts +6 -8
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +3 -1
- package/src/starknet/wallet/StarknetKeypairWallet.ts +5 -0
|
@@ -33,11 +33,11 @@ function initializeStarknet(options, bitcoinRpc, network) {
|
|
|
33
33
|
const provider = typeof (options.rpcUrl) === "string" ?
|
|
34
34
|
new RpcProviderWithRetries_1.RpcProviderWithRetries({ nodeUrl: options.rpcUrl }) :
|
|
35
35
|
options.rpcUrl;
|
|
36
|
-
const Fees = options.fees ?? new StarknetFees_1.StarknetFees(provider, "
|
|
36
|
+
const Fees = options.fees ?? new StarknetFees_1.StarknetFees(provider, "STRK");
|
|
37
37
|
const chainId = options.chainId ??
|
|
38
38
|
(network === base_1.BitcoinNetwork.MAINNET ? starknet_1.constants.StarknetChainId.SN_MAIN : starknet_1.constants.StarknetChainId.SN_SEPOLIA);
|
|
39
39
|
const chainInterface = new StarknetChainInterface_1.StarknetChainInterface(chainId, provider, options.retryPolicy, Fees);
|
|
40
|
-
const btcRelay = new StarknetBtcRelay_1.StarknetBtcRelay(chainInterface, bitcoinRpc, options.btcRelayContract);
|
|
40
|
+
const btcRelay = new StarknetBtcRelay_1.StarknetBtcRelay(chainInterface, bitcoinRpc, network, options.btcRelayContract);
|
|
41
41
|
const swapContract = new StarknetSwapContract_1.StarknetSwapContract(chainInterface, btcRelay, options.swapContract);
|
|
42
42
|
const spvVaultContract = new StarknetSpvVaultContract_1.StarknetSpvVaultContract(chainInterface, btcRelay, bitcoinRpc, options.spvVaultContract);
|
|
43
43
|
const chainEvents = new StarknetChainEventsBrowser_1.StarknetChainEventsBrowser(chainInterface, swapContract, spvVaultContract);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Buffer } from "buffer";
|
|
2
2
|
import { StarknetBtcHeader } from "./headers/StarknetBtcHeader";
|
|
3
|
-
import { BitcoinRpc, BtcBlock, BtcRelay, RelaySynchronizer } from "@atomiqlabs/base";
|
|
3
|
+
import { BitcoinNetwork, BitcoinRpc, BtcBlock, BtcRelay, RelaySynchronizer } from "@atomiqlabs/base";
|
|
4
4
|
import { StarknetContractBase } from "../contract/StarknetContractBase";
|
|
5
5
|
import { StarknetBtcStoredHeader } from "./headers/StarknetBtcStoredHeader";
|
|
6
6
|
import { StarknetTx } from "../chain/modules/StarknetTransactions";
|
|
@@ -16,7 +16,7 @@ export declare class StarknetBtcRelay<B extends BtcBlock> extends StarknetContra
|
|
|
16
16
|
readonly maxHeadersPerTx: number;
|
|
17
17
|
readonly maxForkHeadersPerTx: number;
|
|
18
18
|
readonly maxShortForkHeadersPerTx: number;
|
|
19
|
-
constructor(chainInterface: StarknetChainInterface, bitcoinRpc: BitcoinRpc<B>, contractAddress?: string);
|
|
19
|
+
constructor(chainInterface: StarknetChainInterface, bitcoinRpc: BitcoinRpc<B>, bitcoinNetwork: BitcoinNetwork, contractAddress?: string);
|
|
20
20
|
/**
|
|
21
21
|
* Computes subsequent commited headers as they will appear on the blockchain when transactions
|
|
22
22
|
* are submitted & confirmed
|
|
@@ -25,8 +25,9 @@ function serializeBlockHeader(e) {
|
|
|
25
25
|
const GAS_PER_BLOCKHEADER = 850;
|
|
26
26
|
const GAS_PER_BLOCKHEADER_FORK = 1000;
|
|
27
27
|
const btcRelayAddreses = {
|
|
28
|
-
[
|
|
29
|
-
[
|
|
28
|
+
[base_1.BitcoinNetwork.TESTNET4]: "0x0099b63f39f0cabb767361de3d8d3e97212351a51540e2687c2571f4da490dbe",
|
|
29
|
+
[base_1.BitcoinNetwork.TESTNET]: "0x068601c79da2231d21e015ccfd59c243861156fa523a12c9f987ec28eb8dbc8c",
|
|
30
|
+
[base_1.BitcoinNetwork.MAINNET]: "0x057b14a4231b82f1e525ff35a722d893ca3dd2bde0baa6cee97937c5be861dbc"
|
|
30
31
|
};
|
|
31
32
|
function serializeCalldata(headers, storedHeader, span) {
|
|
32
33
|
span.push((0, Utils_1.toHex)(headers.length));
|
|
@@ -59,7 +60,7 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
|
|
|
59
60
|
calldata: serializeCalldata(forkHeaders, storedHeader, [(0, Utils_1.toHex)(forkId)])
|
|
60
61
|
}, { l1: (GAS_PER_BLOCKHEADER * forkHeaders.length) + (GAS_PER_BLOCKHEADER_FORK * totalForkHeaders), l2: 0 });
|
|
61
62
|
}
|
|
62
|
-
constructor(chainInterface, bitcoinRpc, contractAddress = btcRelayAddreses[
|
|
63
|
+
constructor(chainInterface, bitcoinRpc, bitcoinNetwork, contractAddress = btcRelayAddreses[bitcoinNetwork]) {
|
|
63
64
|
super(chainInterface, contractAddress, BtcRelayAbi_1.BtcRelayAbi);
|
|
64
65
|
this.maxHeadersPerTx = 100;
|
|
65
66
|
this.maxForkHeadersPerTx = 100;
|
|
@@ -4,10 +4,8 @@ exports.StarknetFees = void 0;
|
|
|
4
4
|
const Utils_1 = require("../../../utils/Utils");
|
|
5
5
|
const StarknetTokens_1 = require("./StarknetTokens");
|
|
6
6
|
const MAX_FEE_AGE = 5000;
|
|
7
|
-
const ERC20_ADDRESS_ETH = "";
|
|
8
|
-
const ERC20_ADDRESS_STRK = "";
|
|
9
7
|
class StarknetFees {
|
|
10
|
-
constructor(provider, gasToken = "
|
|
8
|
+
constructor(provider, gasToken = "STRK", maxFeeRate = gasToken === "ETH" ? 100000000000 /*100 GWei*/ : 1000000000000000 /*100 * 10000 GWei*/, feeMultiplier = 1.25, da) {
|
|
11
9
|
this.logger = (0, Utils_1.getLogger)("StarknetFees: ");
|
|
12
10
|
this.blockFeeCache = null;
|
|
13
11
|
this.provider = provider;
|
|
@@ -85,7 +85,7 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
|
|
|
85
85
|
async sendSignedTransaction(tx, onBeforePublish, signer) {
|
|
86
86
|
if (onBeforePublish != null)
|
|
87
87
|
await onBeforePublish(tx.txId, await this.serializeTx(tx));
|
|
88
|
-
this.logger.debug("sendSignedTransaction(): sending transaction: ", tx);
|
|
88
|
+
this.logger.debug("sendSignedTransaction(): sending transaction: ", tx.txId);
|
|
89
89
|
if (tx.signed == null) {
|
|
90
90
|
let txHash;
|
|
91
91
|
switch (tx.type) {
|
|
@@ -202,14 +202,13 @@ class StarknetChainEventsBrowser {
|
|
|
202
202
|
async checkEventsEcrowManager(lastTxHash, lastBlockNumber, currentBlock) {
|
|
203
203
|
const currentBlockNumber = currentBlock.block_number;
|
|
204
204
|
lastBlockNumber ?? (lastBlockNumber = currentBlockNumber);
|
|
205
|
-
|
|
206
|
-
this.
|
|
207
|
-
let events = await this.starknetSwapContract.Events.getContractBlockEvents(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [], logStartHeight, null);
|
|
205
|
+
// this.logger.debug("checkEvents(EscrowManager): Requesting logs: "+logStartHeight+"...pending");
|
|
206
|
+
let events = await this.starknetSwapContract.Events.getContractBlockEvents(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [], lastBlockNumber, null);
|
|
208
207
|
if (lastTxHash != null) {
|
|
209
208
|
const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
|
|
210
209
|
if (latestProcessedEventIndex !== -1) {
|
|
211
210
|
events.splice(0, latestProcessedEventIndex + 1);
|
|
212
|
-
this.logger.debug("checkEvents(EscrowManager): Splicing processed events, resulting size: "
|
|
211
|
+
// this.logger.debug("checkEvents(EscrowManager): Splicing processed events, resulting size: "+events.length);
|
|
213
212
|
}
|
|
214
213
|
}
|
|
215
214
|
if (events.length > 0) {
|
|
@@ -221,14 +220,13 @@ class StarknetChainEventsBrowser {
|
|
|
221
220
|
async checkEventsSpvVaults(lastTxHash, lastBlockNumber, currentBlock) {
|
|
222
221
|
const currentBlockNumber = currentBlock.block_number;
|
|
223
222
|
lastBlockNumber ?? (lastBlockNumber = currentBlockNumber);
|
|
224
|
-
|
|
225
|
-
this.
|
|
226
|
-
let events = await this.starknetSpvVaultContract.Events.getContractBlockEvents(["spv_swap_vault::events::Opened", "spv_swap_vault::events::Deposited", "spv_swap_vault::events::Closed", "spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed"], [], logStartHeight, null);
|
|
223
|
+
// this.logger.debug("checkEvents(SpvVaults): Requesting logs: "+logStartHeight+"...pending");
|
|
224
|
+
let events = await this.starknetSpvVaultContract.Events.getContractBlockEvents(["spv_swap_vault::events::Opened", "spv_swap_vault::events::Deposited", "spv_swap_vault::events::Closed", "spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed"], [], lastBlockNumber, null);
|
|
227
225
|
if (lastTxHash != null) {
|
|
228
226
|
const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
|
|
229
227
|
if (latestProcessedEventIndex !== -1) {
|
|
230
228
|
events.splice(0, latestProcessedEventIndex + 1);
|
|
231
|
-
this.logger.debug("checkEvents(SpvVaults): Splicing processed events, resulting size: "
|
|
229
|
+
// this.logger.debug("checkEvents(SpvVaults): Splicing processed events, resulting size: "+events.length);
|
|
232
230
|
}
|
|
233
231
|
}
|
|
234
232
|
if (events.length > 0) {
|
|
@@ -93,6 +93,8 @@ class StarknetSpvVaultContract extends StarknetContractBase_1.StarknetContractBa
|
|
|
93
93
|
//Getters
|
|
94
94
|
async getVaultData(owner, vaultId) {
|
|
95
95
|
const struct = await this.contract.get_vault(owner, vaultId);
|
|
96
|
+
if ((0, Utils_1.toHex)(struct.relay_contract) !== (0, Utils_1.toHex)(this.btcRelay.contract.address))
|
|
97
|
+
return null;
|
|
96
98
|
return new StarknetSpvVaultData_1.StarknetSpvVaultData(owner, vaultId, struct);
|
|
97
99
|
}
|
|
98
100
|
async getAllVaults(owner) {
|
|
@@ -112,7 +114,9 @@ class StarknetSpvVaultContract extends StarknetContractBase_1.StarknetContractBa
|
|
|
112
114
|
const vaults = [];
|
|
113
115
|
for (let identifier of openedVaults.keys()) {
|
|
114
116
|
const [owner, vaultIdStr] = identifier.split(":");
|
|
115
|
-
|
|
117
|
+
const vaultData = await this.getVaultData(owner, BigInt(vaultIdStr));
|
|
118
|
+
if (vaultData != null)
|
|
119
|
+
vaults.push(vaultData);
|
|
116
120
|
}
|
|
117
121
|
return vaults;
|
|
118
122
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.StarknetKeypairWallet = void 0;
|
|
4
4
|
const starknet_1 = require("starknet");
|
|
5
5
|
const Utils_1 = require("../../utils/Utils");
|
|
6
|
+
const buffer_1 = require("buffer");
|
|
6
7
|
const OZaccountClassHash = '0x00261c293c8084cd79086214176b33e5911677cec55104fddc8d25b0b736dcad';
|
|
7
8
|
//Openzeppelin Account wallet
|
|
8
9
|
class StarknetKeypairWallet extends starknet_1.Account {
|
|
@@ -22,5 +23,8 @@ class StarknetKeypairWallet extends starknet_1.Account {
|
|
|
22
23
|
contractAddress: this.address
|
|
23
24
|
};
|
|
24
25
|
}
|
|
26
|
+
static generateRandomPrivateKey() {
|
|
27
|
+
return "0x" + buffer_1.Buffer.from(starknet_1.ec.starkCurve.utils.randomPrivateKey()).toString("hex");
|
|
28
|
+
}
|
|
25
29
|
}
|
|
26
30
|
exports.StarknetKeypairWallet = StarknetKeypairWallet;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atomiqlabs/chain-starknet",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.10",
|
|
4
4
|
"description": "Starknet specific base implementation",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types:": "./dist/index.d.ts",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"author": "adambor",
|
|
23
23
|
"license": "ISC",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@atomiqlabs/base": "^9.0.0-beta.
|
|
25
|
+
"@atomiqlabs/base": "^9.0.0-beta.2",
|
|
26
26
|
"@noble/hashes": "^1.7.1",
|
|
27
27
|
"@scure/btc-signer": "1.6.0",
|
|
28
28
|
"abi-wan-kanabi": "2.2.4",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {constants, Provider
|
|
1
|
+
import {constants, Provider} from "starknet";
|
|
2
2
|
import {StarknetFees} from "./chain/modules/StarknetFees";
|
|
3
3
|
import {StarknetChainInterface, StarknetRetryPolicy} from "./chain/StarknetChainInterface";
|
|
4
4
|
import {StarknetBtcRelay} from "./btcrelay/StarknetBtcRelay";
|
|
@@ -51,7 +51,7 @@ export function initializeStarknet(
|
|
|
51
51
|
new RpcProviderWithRetries({nodeUrl: options.rpcUrl}) :
|
|
52
52
|
options.rpcUrl;
|
|
53
53
|
|
|
54
|
-
const Fees = options.fees ?? new StarknetFees(provider, "
|
|
54
|
+
const Fees = options.fees ?? new StarknetFees(provider, "STRK");
|
|
55
55
|
|
|
56
56
|
const chainId = options.chainId ??
|
|
57
57
|
(network===BitcoinNetwork.MAINNET ? constants.StarknetChainId.SN_MAIN : constants.StarknetChainId.SN_SEPOLIA);
|
|
@@ -59,7 +59,7 @@ export function initializeStarknet(
|
|
|
59
59
|
const chainInterface = new StarknetChainInterface(chainId, provider, options.retryPolicy, Fees);
|
|
60
60
|
|
|
61
61
|
const btcRelay = new StarknetBtcRelay(
|
|
62
|
-
chainInterface, bitcoinRpc, options.btcRelayContract
|
|
62
|
+
chainInterface, bitcoinRpc, network, options.btcRelayContract
|
|
63
63
|
);
|
|
64
64
|
|
|
65
65
|
const swapContract = new StarknetSwapContract(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {Buffer} from "buffer";
|
|
2
2
|
import {StarknetBtcHeader} from "./headers/StarknetBtcHeader";
|
|
3
|
-
import {BitcoinRpc, BtcBlock, BtcRelay, RelaySynchronizer, StatePredictorUtils} from "@atomiqlabs/base";
|
|
3
|
+
import {BitcoinNetwork, BitcoinRpc, BtcBlock, BtcRelay, RelaySynchronizer, StatePredictorUtils} from "@atomiqlabs/base";
|
|
4
4
|
import {
|
|
5
5
|
bigNumberishToBuffer,
|
|
6
6
|
bufferToU32Array, getLogger,
|
|
@@ -12,7 +12,7 @@ import {StarknetBtcStoredHeader} from "./headers/StarknetBtcStoredHeader";
|
|
|
12
12
|
import {StarknetTx} from "../chain/modules/StarknetTransactions";
|
|
13
13
|
import {StarknetSigner} from "../wallet/StarknetSigner";
|
|
14
14
|
import {BtcRelayAbi} from "./BtcRelayAbi";
|
|
15
|
-
import {BigNumberish,
|
|
15
|
+
import {BigNumberish, hash} from "starknet";
|
|
16
16
|
import {StarknetFees} from "../chain/modules/StarknetFees";
|
|
17
17
|
import {StarknetChainInterface} from "../chain/StarknetChainInterface";
|
|
18
18
|
import {StarknetAction} from "../chain/StarknetAction";
|
|
@@ -33,8 +33,9 @@ const GAS_PER_BLOCKHEADER = 850;
|
|
|
33
33
|
const GAS_PER_BLOCKHEADER_FORK = 1000;
|
|
34
34
|
|
|
35
35
|
const btcRelayAddreses = {
|
|
36
|
-
[
|
|
37
|
-
[
|
|
36
|
+
[BitcoinNetwork.TESTNET4]: "0x0099b63f39f0cabb767361de3d8d3e97212351a51540e2687c2571f4da490dbe",
|
|
37
|
+
[BitcoinNetwork.TESTNET]: "0x068601c79da2231d21e015ccfd59c243861156fa523a12c9f987ec28eb8dbc8c",
|
|
38
|
+
[BitcoinNetwork.MAINNET]: "0x057b14a4231b82f1e525ff35a722d893ca3dd2bde0baa6cee97937c5be861dbc"
|
|
38
39
|
};
|
|
39
40
|
|
|
40
41
|
function serializeCalldata(headers: StarknetBtcHeader[], storedHeader: StarknetBtcStoredHeader, span: BigNumberish[]) {
|
|
@@ -96,7 +97,8 @@ export class StarknetBtcRelay<B extends BtcBlock>
|
|
|
96
97
|
constructor(
|
|
97
98
|
chainInterface: StarknetChainInterface,
|
|
98
99
|
bitcoinRpc: BitcoinRpc<B>,
|
|
99
|
-
|
|
100
|
+
bitcoinNetwork: BitcoinNetwork,
|
|
101
|
+
contractAddress: string = btcRelayAddreses[bitcoinNetwork],
|
|
100
102
|
) {
|
|
101
103
|
super(chainInterface, contractAddress, BtcRelayAbi);
|
|
102
104
|
this.bitcoinRpc = bitcoinRpc;
|
|
@@ -4,9 +4,6 @@ import {StarknetTokens} from "./StarknetTokens";
|
|
|
4
4
|
|
|
5
5
|
const MAX_FEE_AGE = 5000;
|
|
6
6
|
|
|
7
|
-
const ERC20_ADDRESS_ETH = "";
|
|
8
|
-
const ERC20_ADDRESS_STRK = "";
|
|
9
|
-
|
|
10
7
|
export class StarknetFees {
|
|
11
8
|
|
|
12
9
|
private readonly logger = getLogger("StarknetFees: ");
|
|
@@ -25,7 +22,7 @@ export class StarknetFees {
|
|
|
25
22
|
|
|
26
23
|
constructor(
|
|
27
24
|
provider: Provider,
|
|
28
|
-
gasToken: "ETH" | "STRK" = "
|
|
25
|
+
gasToken: "ETH" | "STRK" = "STRK",
|
|
29
26
|
maxFeeRate: number = gasToken==="ETH" ? 100_000_000_000 /*100 GWei*/ : 1_000_000_000_000_000 /*100 * 10000 GWei*/,
|
|
30
27
|
feeMultiplier: number = 1.25,
|
|
31
28
|
da?: {fee?: "L1" | "L2", nonce?: "L1" | "L2"}
|
|
@@ -106,7 +106,7 @@ export class StarknetTransactions extends StarknetModule {
|
|
|
106
106
|
signer?: StarknetSigner
|
|
107
107
|
): Promise<string> {
|
|
108
108
|
if(onBeforePublish!=null) await onBeforePublish(tx.txId, await this.serializeTx(tx));
|
|
109
|
-
this.logger.debug("sendSignedTransaction(): sending transaction: ", tx);
|
|
109
|
+
this.logger.debug("sendSignedTransaction(): sending transaction: ", tx.txId);
|
|
110
110
|
|
|
111
111
|
if(tx.signed==null) {
|
|
112
112
|
let txHash: string;
|
|
@@ -300,19 +300,18 @@ export class StarknetChainEventsBrowser implements ChainEvents<StarknetSwapData>
|
|
|
300
300
|
protected async checkEventsEcrowManager(lastTxHash: string, lastBlockNumber?: number, currentBlock?: {timestamp: number, block_number: number}): Promise<string> {
|
|
301
301
|
const currentBlockNumber: number = (currentBlock as any).block_number;
|
|
302
302
|
lastBlockNumber ??= currentBlockNumber;
|
|
303
|
-
|
|
304
|
-
this.logger.debug("checkEvents(EscrowManager): Requesting logs: "+logStartHeight+"...pending");
|
|
303
|
+
// this.logger.debug("checkEvents(EscrowManager): Requesting logs: "+logStartHeight+"...pending");
|
|
305
304
|
let events = await this.starknetSwapContract.Events.getContractBlockEvents(
|
|
306
305
|
["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"],
|
|
307
306
|
[],
|
|
308
|
-
|
|
307
|
+
lastBlockNumber,
|
|
309
308
|
null
|
|
310
309
|
);
|
|
311
310
|
if(lastTxHash!=null) {
|
|
312
311
|
const latestProcessedEventIndex = findLastIndex(events, val => val.txHash===lastTxHash);
|
|
313
312
|
if(latestProcessedEventIndex!==-1) {
|
|
314
313
|
events.splice(0, latestProcessedEventIndex+1);
|
|
315
|
-
this.logger.debug("checkEvents(EscrowManager): Splicing processed events, resulting size: "+events.length);
|
|
314
|
+
// this.logger.debug("checkEvents(EscrowManager): Splicing processed events, resulting size: "+events.length);
|
|
316
315
|
}
|
|
317
316
|
}
|
|
318
317
|
if(events.length>0) {
|
|
@@ -325,19 +324,18 @@ export class StarknetChainEventsBrowser implements ChainEvents<StarknetSwapData>
|
|
|
325
324
|
protected async checkEventsSpvVaults(lastTxHash: string, lastBlockNumber?: number, currentBlock?: {timestamp: number, block_number: number}): Promise<string> {
|
|
326
325
|
const currentBlockNumber: number = (currentBlock as any).block_number;
|
|
327
326
|
lastBlockNumber ??= currentBlockNumber;
|
|
328
|
-
|
|
329
|
-
this.logger.debug("checkEvents(SpvVaults): Requesting logs: "+logStartHeight+"...pending");
|
|
327
|
+
// this.logger.debug("checkEvents(SpvVaults): Requesting logs: "+logStartHeight+"...pending");
|
|
330
328
|
let events = await this.starknetSpvVaultContract.Events.getContractBlockEvents(
|
|
331
329
|
["spv_swap_vault::events::Opened", "spv_swap_vault::events::Deposited", "spv_swap_vault::events::Closed", "spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed"],
|
|
332
330
|
[],
|
|
333
|
-
|
|
331
|
+
lastBlockNumber,
|
|
334
332
|
null
|
|
335
333
|
);
|
|
336
334
|
if(lastTxHash!=null) {
|
|
337
335
|
const latestProcessedEventIndex = findLastIndex(events, val => val.txHash===lastTxHash);
|
|
338
336
|
if(latestProcessedEventIndex!==-1) {
|
|
339
337
|
events.splice(0, latestProcessedEventIndex+1);
|
|
340
|
-
this.logger.debug("checkEvents(SpvVaults): Splicing processed events, resulting size: "+events.length);
|
|
338
|
+
// this.logger.debug("checkEvents(SpvVaults): Splicing processed events, resulting size: "+events.length);
|
|
341
339
|
}
|
|
342
340
|
}
|
|
343
341
|
if(events.length>0) {
|
|
@@ -162,6 +162,7 @@ export class StarknetSpvVaultContract
|
|
|
162
162
|
//Getters
|
|
163
163
|
async getVaultData(owner: string, vaultId: bigint): Promise<StarknetSpvVaultData> {
|
|
164
164
|
const struct = await this.contract.get_vault(owner, vaultId);
|
|
165
|
+
if(toHex(struct.relay_contract)!==toHex(this.btcRelay.contract.address)) return null;
|
|
165
166
|
return new StarknetSpvVaultData(owner, vaultId, struct);
|
|
166
167
|
}
|
|
167
168
|
|
|
@@ -185,7 +186,8 @@ export class StarknetSpvVaultContract
|
|
|
185
186
|
const vaults: StarknetSpvVaultData[] = [];
|
|
186
187
|
for(let identifier of openedVaults.keys()) {
|
|
187
188
|
const [owner, vaultIdStr] = identifier.split(":");
|
|
188
|
-
|
|
189
|
+
const vaultData = await this.getVaultData(owner, BigInt(vaultIdStr));
|
|
190
|
+
if(vaultData!=null) vaults.push(vaultData);
|
|
189
191
|
}
|
|
190
192
|
return vaults;
|
|
191
193
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {Account, CallData, DeployAccountContractPayload, ec, hash, Provider} from "starknet";
|
|
2
2
|
import {toHex} from "../../utils/Utils";
|
|
3
|
+
import {Buffer} from "buffer";
|
|
3
4
|
|
|
4
5
|
const OZaccountClassHash = '0x00261c293c8084cd79086214176b33e5911677cec55104fddc8d25b0b736dcad';
|
|
5
6
|
|
|
@@ -31,4 +32,8 @@ export class StarknetKeypairWallet extends Account {
|
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
|
|
35
|
+
public static generateRandomPrivateKey(): string {
|
|
36
|
+
return "0x"+Buffer.from(ec.starkCurve.utils.randomPrivateKey()).toString("hex");
|
|
37
|
+
}
|
|
38
|
+
|
|
34
39
|
}
|