@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(commitHash);
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
- const blockheight = Number(vaultState.openBlockheight);
129
- const events = await this.Events.getContractBlockEvents(["Opened"], [
130
- "0x" + owner.substring(2).padStart(64, "0"),
131
- (0, ethers_1.hexlify)(base_1.BigIntBufferUtils.toBuffer(vaultId, "be", 32))
132
- ], blockheight);
133
- const foundEvent = events.find(event => (0, EVMSpvVaultData_1.getVaultParamsCommitment)(event.args.params) === vaultState.spvVaultParametersCommitment);
134
- if (foundEvent == null)
135
- throw new Error("Valid open event not found!");
136
- const vaultParams = foundEvent.args.params;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atomiqlabs/chain-evm",
3
- "version": "1.0.0-dev.71",
3
+ "version": "1.0.0-dev.73",
4
4
  "description": "EVM specific base implementation",
5
5
  "main": "./dist/index.js",
6
6
  "types:": "./dist/index.d.ts",
@@ -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(commitHash);
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
- const foundEvent = events.find(
225
- event => getVaultParamsCommitment(event.args.params)===vaultState.spvVaultParametersCommitment
226
- );
227
- if(foundEvent==null) throw new Error("Valid open event not found!");
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);