@atomiqlabs/lp-lib 14.0.0-dev.32 → 14.0.0-dev.33

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.
@@ -177,32 +177,36 @@ class SpvVaults {
177
177
  amount: 0n,
178
178
  script: opReturnScript
179
179
  });
180
- psbt = await this.bitcoin.fundPsbt(psbt, feeRate);
181
- if (psbt.inputsLength < 2)
182
- throw new Error("PSBT needs at least 2 inputs!");
183
- psbt.updateInput(0, { sequence: 0x80000000 });
184
- psbt.updateInput(1, { sequence: 0x80000000 });
185
- psbt = await this.vaultSigner.signPsbt(vault.chainId, vault.data.getVaultId(), psbt, [0]);
186
- const res = await this.bitcoin.signPsbt(psbt);
187
- const parsedTransaction = await this.bitcoinRpc.parseTransaction(res.raw);
188
- const withdrawalData = await spvVaultContract.getWithdrawalData(parsedTransaction);
189
- if (withdrawalData.getSpentVaultUtxo() !== vault.getLatestUtxo()) {
190
- throw new Error("Latest vault UTXO already spent! Please try again later.");
191
- }
192
- withdrawalData.sending = true;
193
- vault.addWithdrawal(withdrawalData);
194
- await this.saveVault(vault);
195
- try {
196
- await this.bitcoin.sendRawTransaction(res.raw);
197
- withdrawalData.sending = false;
198
- }
199
- catch (e) {
200
- withdrawalData.sending = false;
201
- vault.removeWithdrawal(withdrawalData);
180
+ let withdrawalTxId = null;
181
+ await this.bitcoin.execute(async () => {
182
+ psbt = await this.bitcoin.fundPsbt(psbt, feeRate);
183
+ if (psbt.inputsLength < 2)
184
+ throw new Error("PSBT needs at least 2 inputs!");
185
+ psbt.updateInput(0, { sequence: 0x80000000 });
186
+ psbt.updateInput(1, { sequence: 0x80000000 });
187
+ psbt = await this.vaultSigner.signPsbt(vault.chainId, vault.data.getVaultId(), psbt, [0]);
188
+ const res = await this.bitcoin.signPsbt(psbt);
189
+ withdrawalTxId = res.txId;
190
+ const parsedTransaction = await this.bitcoinRpc.parseTransaction(res.raw);
191
+ const withdrawalData = await spvVaultContract.getWithdrawalData(parsedTransaction);
192
+ if (withdrawalData.getSpentVaultUtxo() !== vault.getLatestUtxo()) {
193
+ throw new Error("Latest vault UTXO already spent! Please try again later.");
194
+ }
195
+ withdrawalData.sending = true;
196
+ vault.addWithdrawal(withdrawalData);
202
197
  await this.saveVault(vault);
203
- throw e;
204
- }
205
- return res.txId;
198
+ try {
199
+ await this.bitcoin.sendRawTransaction(res.raw);
200
+ withdrawalData.sending = false;
201
+ }
202
+ catch (e) {
203
+ withdrawalData.sending = false;
204
+ vault.removeWithdrawal(withdrawalData);
205
+ await this.saveVault(vault);
206
+ throw e;
207
+ }
208
+ });
209
+ return withdrawalTxId;
206
210
  }
207
211
  async checkVaults() {
208
212
  const vaults = Object.keys(this.vaultStorage.data).map(key => this.vaultStorage.data[key]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atomiqlabs/lp-lib",
3
- "version": "14.0.0-dev.32",
3
+ "version": "14.0.0-dev.33",
4
4
  "description": "Main functionality implementation for atomiq LP node",
5
5
  "main": "./dist/index.js",
6
6
  "types:": "./dist/index.d.ts",
@@ -227,34 +227,38 @@ export class SpvVaults {
227
227
  script: opReturnScript
228
228
  });
229
229
 
230
- psbt = await this.bitcoin.fundPsbt(psbt, feeRate);
231
- if(psbt.inputsLength<2) throw new Error("PSBT needs at least 2 inputs!");
232
- psbt.updateInput(0, {sequence: 0x80000000});
233
- psbt.updateInput(1, {sequence: 0x80000000});
234
- psbt = await this.vaultSigner.signPsbt(vault.chainId, vault.data.getVaultId(), psbt, [0]);
235
- const res = await this.bitcoin.signPsbt(psbt);
236
-
237
- const parsedTransaction = await this.bitcoinRpc.parseTransaction(res.raw);
238
- const withdrawalData = await spvVaultContract.getWithdrawalData(parsedTransaction);
239
-
240
- if(withdrawalData.getSpentVaultUtxo()!==vault.getLatestUtxo()) {
241
- throw new Error("Latest vault UTXO already spent! Please try again later.");
242
- }
243
- (withdrawalData as any).sending = true;
244
- vault.addWithdrawal(withdrawalData);
245
- await this.saveVault(vault);
246
-
247
- try {
248
- await this.bitcoin.sendRawTransaction(res.raw);
249
- (withdrawalData as any).sending = false;
250
- } catch (e) {
251
- (withdrawalData as any).sending = false;
252
- vault.removeWithdrawal(withdrawalData);
230
+ let withdrawalTxId: string = null;
231
+ await this.bitcoin.execute(async () => {
232
+ psbt = await this.bitcoin.fundPsbt(psbt, feeRate);
233
+ if(psbt.inputsLength<2) throw new Error("PSBT needs at least 2 inputs!");
234
+ psbt.updateInput(0, {sequence: 0x80000000});
235
+ psbt.updateInput(1, {sequence: 0x80000000});
236
+ psbt = await this.vaultSigner.signPsbt(vault.chainId, vault.data.getVaultId(), psbt, [0]);
237
+ const res = await this.bitcoin.signPsbt(psbt);
238
+ withdrawalTxId = res.txId;
239
+
240
+ const parsedTransaction = await this.bitcoinRpc.parseTransaction(res.raw);
241
+ const withdrawalData = await spvVaultContract.getWithdrawalData(parsedTransaction);
242
+
243
+ if(withdrawalData.getSpentVaultUtxo()!==vault.getLatestUtxo()) {
244
+ throw new Error("Latest vault UTXO already spent! Please try again later.");
245
+ }
246
+ (withdrawalData as any).sending = true;
247
+ vault.addWithdrawal(withdrawalData);
253
248
  await this.saveVault(vault);
254
- throw e;
255
- }
256
249
 
257
- return res.txId;
250
+ try {
251
+ await this.bitcoin.sendRawTransaction(res.raw);
252
+ (withdrawalData as any).sending = false;
253
+ } catch (e) {
254
+ (withdrawalData as any).sending = false;
255
+ vault.removeWithdrawal(withdrawalData);
256
+ await this.saveVault(vault);
257
+ throw e;
258
+ }
259
+ });
260
+
261
+ return withdrawalTxId;
258
262
  }
259
263
 
260
264
  async checkVaults() {