Monitor chain swap addresses (#322)

* Check chain swap addresses for unspent outputs

* Monitoring expired swaps up to 4320 blocks after expiration

* Refactor chain swap monitoring

* Handle the error to prevent the loop exiting

* Add RefundPending state

* Check if RefundPendingbefore setting to Refundable

* Use script_get_balance to determine spent state

* Use unconfirmed balance to check if RefundPending should be reset to Refundable
This commit is contained in:
Ross Savage
2024-06-26 16:53:41 +02:00
committed by GitHub
parent ef5cd28fa5
commit e7844473cd
26 changed files with 614 additions and 229 deletions

View File

@@ -1289,25 +1289,28 @@ fun asPrepareRefundResponse(prepareRefundResponse: ReadableMap): PrepareRefundRe
if (!validateMandatoryFields(
prepareRefundResponse,
arrayOf(
"refundTxVsize",
"refundTxFeeSat",
"txVsize",
"txFeeSat",
),
)
) {
return null
}
val refundTxVsize = prepareRefundResponse.getInt("refundTxVsize").toUInt()
val refundTxFeeSat = prepareRefundResponse.getDouble("refundTxFeeSat").toULong()
val txVsize = prepareRefundResponse.getInt("txVsize").toUInt()
val txFeeSat = prepareRefundResponse.getDouble("txFeeSat").toULong()
val refundTxId = if (hasNonNullKey(prepareRefundResponse, "refundTxId")) prepareRefundResponse.getString("refundTxId") else null
return PrepareRefundResponse(
refundTxVsize,
refundTxFeeSat,
txVsize,
txFeeSat,
refundTxId,
)
}
fun readableMapOf(prepareRefundResponse: PrepareRefundResponse): ReadableMap =
readableMapOf(
"refundTxVsize" to prepareRefundResponse.refundTxVsize,
"refundTxFeeSat" to prepareRefundResponse.refundTxFeeSat,
"txVsize" to prepareRefundResponse.txVsize,
"txFeeSat" to prepareRefundResponse.txFeeSat,
"refundTxId" to prepareRefundResponse.refundTxId,
)
fun asPrepareRefundResponseList(arr: ReadableArray): List<PrepareRefundResponse> {

View File

@@ -389,6 +389,18 @@ class BreezLiquidSDKModule(
}
}
@ReactMethod
fun rescanOnchainSwaps(promise: Promise) {
executor.execute {
try {
getBindingLiquidSdk().rescanOnchainSwaps()
promise.resolve(readableMapOf("status" to "ok"))
} catch (e: Exception) {
promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e)
}
}
}
@ReactMethod
fun sync(promise: Promise) {
executor.execute {