@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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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
|
@@ -227,34 +227,38 @@ export class SpvVaults {
|
|
|
227
227
|
script: opReturnScript
|
|
228
228
|
});
|
|
229
229
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
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
|
-
|
|
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() {
|