@atomiqlabs/chain-evm 1.0.0-dev.72 → 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.
|
@@ -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
|
@@ -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);
|