@atomiqlabs/chain-evm 1.0.0-dev.71 → 1.0.0-dev.73
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.
|
@@ -160,7 +160,7 @@ class EVMBtcRelay extends EVMContractBase_1.EVMContractBase {
|
|
|
160
160
|
const blockHashString = blockHash == null ? null : "0x" + Buffer.from([...blockHash]).reverse().toString("hex");
|
|
161
161
|
if (blockHashString != null && this.blockHashCache.has(blockHashString)) {
|
|
162
162
|
logger.debug("getBlock(): Returning block from block hash cache: ", blockHashString);
|
|
163
|
-
const storedBlockheader = this.blockHashCache.get(
|
|
163
|
+
const storedBlockheader = this.blockHashCache.get(blockHashString);
|
|
164
164
|
return Promise.resolve([storedBlockheader, storedBlockheader.getCommitHash()]);
|
|
165
165
|
}
|
|
166
166
|
return this.Events.findInContractEvents(["StoreHeader", "StoreForkHeader"], [
|
|
@@ -41,6 +41,7 @@ export declare class EVMSpvVaultContract<ChainId extends string> extends EVMCont
|
|
|
41
41
|
checkWithdrawalTx(tx: SpvWithdrawalTransactionData): Promise<void>;
|
|
42
42
|
createVaultData(owner: string, vaultId: bigint, utxo: string, confirmations: number, tokenData: SpvVaultTokenData[]): Promise<EVMSpvVaultData>;
|
|
43
43
|
getFronterAddress(owner: string, vaultId: bigint, withdrawal: EVMSpvWithdrawalData): Promise<string>;
|
|
44
|
+
private vaultParamsCache;
|
|
44
45
|
getVaultData(owner: string, vaultId: bigint): Promise<EVMSpvVaultData>;
|
|
45
46
|
getAllVaults(owner?: string): Promise<EVMSpvVaultData[]>;
|
|
46
47
|
getWithdrawalState(btcTxId: string): Promise<SpvWithdrawalState>;
|
|
@@ -34,6 +34,7 @@ class EVMSpvVaultContract extends EVMContractBase_1.EVMContractBase {
|
|
|
34
34
|
super(chainInterface, contractAddress, SpvVaultContractAbi_1.SpvVaultContractAbi, contractDeploymentHeight);
|
|
35
35
|
this.claimTimeout = 180;
|
|
36
36
|
this.logger = (0, Utils_1.getLogger)("EVMSpvVaultContract: ");
|
|
37
|
+
this.vaultParamsCache = new Map();
|
|
37
38
|
this.btcRelay = btcRelay;
|
|
38
39
|
this.bitcoinRpc = bitcoinRpc;
|
|
39
40
|
}
|
|
@@ -125,15 +126,19 @@ class EVMSpvVaultContract extends EVMContractBase_1.EVMContractBase {
|
|
|
125
126
|
}
|
|
126
127
|
async getVaultData(owner, vaultId) {
|
|
127
128
|
const vaultState = await this.contract.getVault(owner, vaultId);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
129
|
+
let vaultParams = this.vaultParamsCache.get(vaultState.spvVaultParametersCommitment);
|
|
130
|
+
if (vaultParams == null) {
|
|
131
|
+
const blockheight = Number(vaultState.openBlockheight);
|
|
132
|
+
const events = await this.Events.getContractBlockEvents(["Opened"], [
|
|
133
|
+
"0x" + owner.substring(2).padStart(64, "0"),
|
|
134
|
+
(0, ethers_1.hexlify)(base_1.BigIntBufferUtils.toBuffer(vaultId, "be", 32))
|
|
135
|
+
], blockheight);
|
|
136
|
+
const foundEvent = events.find(event => (0, EVMSpvVaultData_1.getVaultParamsCommitment)(event.args.params) === vaultState.spvVaultParametersCommitment);
|
|
137
|
+
if (foundEvent == null)
|
|
138
|
+
throw new Error("Valid open event not found!");
|
|
139
|
+
vaultParams = foundEvent.args.params;
|
|
140
|
+
this.vaultParamsCache.set(vaultState.spvVaultParametersCommitment, vaultParams);
|
|
141
|
+
}
|
|
137
142
|
if (vaultParams.btcRelayContract.toLowerCase() !== this.btcRelay.contractAddress.toLowerCase())
|
|
138
143
|
return null;
|
|
139
144
|
return new EVMSpvVaultData_1.EVMSpvVaultData(owner, vaultId, vaultState, vaultParams);
|
package/package.json
CHANGED
|
@@ -202,7 +202,7 @@ export class EVMBtcRelay<B extends BtcBlock>
|
|
|
202
202
|
const blockHashString = blockHash==null ? null : "0x"+Buffer.from([...blockHash]).reverse().toString("hex");
|
|
203
203
|
if(blockHashString!=null && this.blockHashCache.has(blockHashString)) {
|
|
204
204
|
logger.debug("getBlock(): Returning block from block hash cache: ", blockHashString);
|
|
205
|
-
const storedBlockheader = this.blockHashCache.get(
|
|
205
|
+
const storedBlockheader = this.blockHashCache.get(blockHashString);
|
|
206
206
|
return Promise.resolve([storedBlockheader, storedBlockheader.getCommitHash()]);
|
|
207
207
|
}
|
|
208
208
|
|
|
@@ -209,24 +209,32 @@ export class EVMSpvVaultContract<ChainId extends string>
|
|
|
209
209
|
return frontingAddress;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
+
private vaultParamsCache: Map<string, SpvVaultParametersStructOutput> = new Map();
|
|
213
|
+
|
|
212
214
|
async getVaultData(owner: string, vaultId: bigint): Promise<EVMSpvVaultData> {
|
|
213
215
|
const vaultState = await this.contract.getVault(owner, vaultId);
|
|
214
|
-
const blockheight = Number(vaultState.openBlockheight);
|
|
215
|
-
const events = await this.Events.getContractBlockEvents(
|
|
216
|
-
["Opened"],
|
|
217
|
-
[
|
|
218
|
-
"0x"+owner.substring(2).padStart(64, "0"),
|
|
219
|
-
hexlify(BigIntBufferUtils.toBuffer(vaultId, "be", 32))
|
|
220
|
-
],
|
|
221
|
-
blockheight
|
|
222
|
-
);
|
|
223
216
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
217
|
+
let vaultParams = this.vaultParamsCache.get(vaultState.spvVaultParametersCommitment);
|
|
218
|
+
if(vaultParams==null) {
|
|
219
|
+
const blockheight = Number(vaultState.openBlockheight);
|
|
220
|
+
const events = await this.Events.getContractBlockEvents(
|
|
221
|
+
["Opened"],
|
|
222
|
+
[
|
|
223
|
+
"0x"+owner.substring(2).padStart(64, "0"),
|
|
224
|
+
hexlify(BigIntBufferUtils.toBuffer(vaultId, "be", 32))
|
|
225
|
+
],
|
|
226
|
+
blockheight
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
const foundEvent = events.find(
|
|
230
|
+
event => getVaultParamsCommitment(event.args.params)===vaultState.spvVaultParametersCommitment
|
|
231
|
+
);
|
|
232
|
+
if(foundEvent==null) throw new Error("Valid open event not found!");
|
|
233
|
+
|
|
234
|
+
vaultParams = foundEvent.args.params;
|
|
235
|
+
this.vaultParamsCache.set(vaultState.spvVaultParametersCommitment, vaultParams);
|
|
236
|
+
}
|
|
228
237
|
|
|
229
|
-
const vaultParams = foundEvent.args.params;
|
|
230
238
|
if(vaultParams.btcRelayContract.toLowerCase()!==this.btcRelay.contractAddress.toLowerCase()) return null;
|
|
231
239
|
|
|
232
240
|
return new EVMSpvVaultData(owner, vaultId, vaultState, vaultParams);
|