For the complete documentation index, see llms.txt. This page is also available as Markdown.

isInPreparePhase

Returns whether a Bitcoin block height falls in the prepare phase of its reward cycle: the last prepareCycleLength blocks, 100 on mainnet. Pure computation that mirrors the pox-5 read-only is-in-prepare-phase.


Usage

import { fetchPoxInfo, isInPreparePhase } from '@stacks/bitcoin-staking';

const poxInfo = await fetchPoxInfo({ network: 'mainnet' });

if (isInPreparePhase({ burnHeight: poxInfo.currentBurnchainBlockHeight, poxInfo })) {
  // wait for the next reward cycle before staking or unstaking
}

Notes

  • True when burnHeight >= rewardCycleToBurnHeight(cycle + 1) - prepareCycleLength, where cycle is the reward cycle of burnHeight.

  • The contract read-only takes a cycle and tests the chain tip. This function takes any height, which also lets you check a future height.

  • stake, stake-update, register-for-bond, update-bond-registration, announce-l1-early-exit and unstake-sbtc fail in the prepare phase with ERR_STAKE_IN_PREPARE_PHASE (u47) through verify-not-prepare-phase. unstake fails with ERR_UNSTAKE_IN_PREPARE_PHASE (u28). All of them can succeed only during the reward phase of a cycle.

  • Returns false for a height below poxInfo.firstBurnchainBlockHeight instead of throwing.


Signature


Returns

boolean

true if burnHeight is in a prepare phase.


Parameters

opts.burnHeight (required)

  • Type: number

The Bitcoin block height to test, usually poxInfo.currentBurnchainBlockHeight.

opts.poxInfo (required)

  • Type: PoxInfo

A PoxInfo, usually from fetchPoxInfo.

Was this helpful?