diff --git a/src/constants.ts b/src/constants.ts index a1b05e6b..c99b8e47 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -28,3 +28,11 @@ export const JWT_IGNORE_URLS = ['/token', '/docs', '/cron', '/internal', '/healt export const SWAGGER_PROD_IGNORE_URLS = isAdminMode ? ['/token', '/cron'] : ['/cron']; export const VERCEL_MAX_DURATION = 300; + +// estimate time: 2024-04-03 09:45:17 +// ref: https://mempool.space/testnet/block/000000000000000493ba5eebf0602f3e0e5381dd35f763a62ca7ea135343a0d6 +export const BTC_TESTNET_SPV_START_BLOCK_HEIGHT = 2584900; + +// estimate time: 2024-04-02 06:20:03 +// ref: https://mempool.space/block/0000000000000000000077d98a103858c7d7cbc5ba67a4135f348a436bec1748 +export const BTC_MAINNET_SPV_START_BLOCK_HEIGHT = 837300; diff --git a/src/services/unlocker.ts b/src/services/unlocker.ts index 623948c2..38d10aa4 100644 --- a/src/services/unlocker.ts +++ b/src/services/unlocker.ts @@ -17,7 +17,7 @@ import { import { btcTxIdFromBtcTimeLockArgs } from '@rgbpp-sdk/ckb/lib/utils/rgbpp'; import { BtcAssetsApi } from '@rgbpp-sdk/service'; import { Cradle } from '../container'; -import { TestnetTypeMap } from '../constants'; +import { BTC_MAINNET_SPV_START_BLOCK_HEIGHT, BTC_TESTNET_SPV_START_BLOCK_HEIGHT, TestnetTypeMap } from '../constants'; interface IUnlocker { getNextBatchLockCell(): Promise; @@ -54,6 +54,10 @@ export default class Unlocker implements IUnlocker { return getBtcTimeLockScript(this.isMainnet, this.testnetType); } + private get btcSpvStartBlockHeight() { + return this.isMainnet ? BTC_MAINNET_SPV_START_BLOCK_HEIGHT : BTC_TESTNET_SPV_START_BLOCK_HEIGHT; + } + /** * Get next batch of BTC time lock cells */ @@ -73,6 +77,11 @@ export default class Unlocker implements IUnlocker { const btcTx = await this.cradle.bitcoin.getTx({ txid: btcTxid }); const blockHeight = btcTx.status.block_height; + // skip if the block height of the btc txid is less than the BTC SPV start block height + if (blockHeight && blockHeight < this.btcSpvStartBlockHeight) { + continue; + } + // skip if btc tx not confirmed $after blocks yet if (!blockHeight || blocks - blockHeight < after) { continue;