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, wherecycleis the reward cycle ofburnHeight.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-exitandunstake-sbtcfail in the prepare phase withERR_STAKE_IN_PREPARE_PHASE (u47)throughverify-not-prepare-phase.unstakefails withERR_UNSTAKE_IN_PREPARE_PHASE (u28). All of them can succeed only during the reward phase of a cycle.Returns
falsefor a height belowpoxInfo.firstBurnchainBlockHeightinstead 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?