fetchPoxInfo
Reads the node's /v2/pox endpoint and returns the PoX parameters, the current and next cycle, and the sBTC contracts that pox-5 pays rewards through.
Usage
import { fetchPoxInfo } from '@stacks/bitcoin-staking';
const poxInfo = await fetchPoxInfo({ network: 'mainnet' });
poxInfo.contractId; // 'SP000000000000000000002Q6VF78.pox-5'
poxInfo.rewardCycleLength; // 2100
poxInfo.sbtcContract; // 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token'Notes
Read
sbtcContracthere instead of hardcoding it. It is fixed on mainnet; on other networks it comes from the node's configuration and can differ from node to node. The sBTC post conditions forbuildRegisterForBondandbuildUnstakeSbtcneed it.sbtcRegistryContractis the contract the node reads each cycle's reward recipient from. No pox-5 call moves an asset through it, so post conditions never reference it.Without
opts.client, the request goes to the network's default API:https://api.mainnet.hiro.sofor'mainnet',https://api.testnet.hiro.sofor'testnet'.A non-2xx response throws an
Errorwhose message starts withError fetching pox info.and includes the status code and URL.The result carries a subset of the node's response.
min_amount_ustx,epochs,current_epochand the next cycle's phase heights are dropped. Request/v2/poxdirectly if you need them.
Signature
opts is a NetworkClientParam.
Returns
Promise<PoxInfo>
Resolves to a PoxInfo: the node's /v2/pox response, renamed to camelCase, with micro-STX totals converted to bigint.
Parameters
opts.network (optional)
Type:
StacksNetworkName | StacksNetwork
The network to query: a name such as 'mainnet' or 'testnet', or a StacksNetwork object. Defaults to 'mainnet'.
opts.client (optional)
Type:
{ baseUrl?: string; fetch?: FetchFn }
Overrides the API base URL or the fetch function, for example to query your own node. Fields you set replace the network's defaults.
Was this helpful?