From 40cef652abe1d638319eb2f23c372683f4434731 Mon Sep 17 00:00:00 2001 From: Aaron Blankstein <235161024+aaronb-stacks@users.noreply.github.com> Date: Mon, 13 Jul 2026 10:05:28 -0500 Subject: [PATCH 1/2] chore: changelog for 4.0.0 --- CHANGELOG.md | 74 +++++++++++++++++++ changelog.d/7112-variadic-concat.added | 1 - .../7179-bitcoin-clarity-builtins.added | 1 - changelog.d/7270-fix-retro-rewards.fixed | 1 - changelog.d/7277-fix-fee-claiming.fixed | 1 - changelog.d/7328-pause-rewards.added | 1 - ...reject-high-s-signature-tx-consensus.fixed | 1 - .../7341-cost-voting-epoch-4-0-gate.changed | 1 - changelog.d/C-02-duplicate-lockup.fixed | 1 - changelog.d/L-02-unlock-height.fixed | 1 - changelog.d/M-04-withdrawal-refunds.fixed | 1 - changelog.d/check-pox-addr.fixed | 1 - changelog.d/coinbase-intervals.changed | 1 - .../costs-5-valgrind-calibration.changed | 1 - changelog.d/current-cycle-unstaking.fixed | 9 --- changelog.d/ed25519-verify.added | 1 - changelog.d/epoch-35-clarity-6.added | 1 - changelog.d/epoch-4-0-read-budget.changed | 1 - changelog.d/epoch-4-value-sanitize.changed | 1 - changelog.d/error-no-claimable-rewards.fixed | 1 - ...contract-trait-entry-analysis-cost.changed | 1 - changelog.d/l1-bond-integration.added | 1 - changelog.d/no-stx-stakers.fixed | 1 - .../pox-5-assetmap-sum-committed.fixed | 1 - changelog.d/pox-5-bond-rollover.added | 1 - .../pox-5-cscriptnum-unlock-height.fixed | 1 - changelog.d/pox-5-l1-unlock-height.changed | 1 - .../pox-5-lockup-script-structure.changed | 1 - changelog.d/pox-5-print.added | 1 - ...5-remove-contract-caller-allowance.removed | 1 - ...revoke-signer-grant-blocks-new-stake.fixed | 1 - changelog.d/pox-5-signer-sig-cli.changed | 1 - changelog.d/pox-5-stake-read-cost.changed | 1 - ...ox-5-staker-controls-l1-early-exit.changed | 1 - changelog.d/pox-info-sbtc-contracts.added | 1 - changelog.d/pox-locking-v5.added | 1 - changelog.d/pox-wf-integration.changed | 1 - changelog.d/pox5-cltv-height-limit.fixed | 1 - changelog.d/private-reserve-fn.added | 1 - changelog.d/problematic-tx-markers.added | 1 - changelog.d/protect-grant-signer-key.fixed | 1 - changelog.d/remove-checkpoint-staker.fixed | 3 - changelog.d/revert-p2wsh-outputs.removed | 1 - changelog.d/revoke-signer-grant.fixed | 1 - changelog.d/secp256k1-decompress.added | 1 - changelog.d/signature-order.fixed | 1 - changelog.d/signer-manager-callbacks.fixed | 1 - changelog.d/signer-max-fee.fixed | 1 - changelog.d/special-map-off-by-one.fixed | 1 - changelog.d/stake-in-prepare-phase.fixed | 1 - changelog.d/staking-post-condition.added | 1 - .../tob-stacks-3-miner-spend-waterfall.fixed | 1 - ...-compliance-cost-error-epoch40-gated.fixed | 1 - .../tuple-merge-size-epoch40-gate.fixed | 1 - changelog.d/uint-to-buff-le.fixed | 1 - changelog.d/unify-node-signer-version.changed | 1 - .../update-l1-bond-registration-print.added | 23 ------ changelog.d/use-variadic-concat.changed | 1 - changelog.d/v2-pox.fixed | 1 - ...rify-merkle-proof-padding-relocation.fixed | 1 - changelog.d/wasm-time.fixed | 1 - 61 files changed, 74 insertions(+), 92 deletions(-) delete mode 100644 changelog.d/7112-variadic-concat.added delete mode 100644 changelog.d/7179-bitcoin-clarity-builtins.added delete mode 100644 changelog.d/7270-fix-retro-rewards.fixed delete mode 100644 changelog.d/7277-fix-fee-claiming.fixed delete mode 100644 changelog.d/7328-pause-rewards.added delete mode 100644 changelog.d/7337-reject-high-s-signature-tx-consensus.fixed delete mode 100644 changelog.d/7341-cost-voting-epoch-4-0-gate.changed delete mode 100644 changelog.d/C-02-duplicate-lockup.fixed delete mode 100644 changelog.d/L-02-unlock-height.fixed delete mode 100644 changelog.d/M-04-withdrawal-refunds.fixed delete mode 100644 changelog.d/check-pox-addr.fixed delete mode 100644 changelog.d/coinbase-intervals.changed delete mode 100644 changelog.d/costs-5-valgrind-calibration.changed delete mode 100644 changelog.d/current-cycle-unstaking.fixed delete mode 100644 changelog.d/ed25519-verify.added delete mode 100644 changelog.d/epoch-35-clarity-6.added delete mode 100644 changelog.d/epoch-4-0-read-budget.changed delete mode 100644 changelog.d/epoch-4-value-sanitize.changed delete mode 100644 changelog.d/error-no-claimable-rewards.fixed delete mode 100644 changelog.d/in-contract-trait-entry-analysis-cost.changed delete mode 100644 changelog.d/l1-bond-integration.added delete mode 100644 changelog.d/no-stx-stakers.fixed delete mode 100644 changelog.d/pox-5-assetmap-sum-committed.fixed delete mode 100644 changelog.d/pox-5-bond-rollover.added delete mode 100644 changelog.d/pox-5-cscriptnum-unlock-height.fixed delete mode 100644 changelog.d/pox-5-l1-unlock-height.changed delete mode 100644 changelog.d/pox-5-lockup-script-structure.changed delete mode 100644 changelog.d/pox-5-print.added delete mode 100644 changelog.d/pox-5-remove-contract-caller-allowance.removed delete mode 100644 changelog.d/pox-5-revoke-signer-grant-blocks-new-stake.fixed delete mode 100644 changelog.d/pox-5-signer-sig-cli.changed delete mode 100644 changelog.d/pox-5-stake-read-cost.changed delete mode 100644 changelog.d/pox-5-staker-controls-l1-early-exit.changed delete mode 100644 changelog.d/pox-info-sbtc-contracts.added delete mode 100644 changelog.d/pox-locking-v5.added delete mode 100644 changelog.d/pox-wf-integration.changed delete mode 100644 changelog.d/pox5-cltv-height-limit.fixed delete mode 100644 changelog.d/private-reserve-fn.added delete mode 100644 changelog.d/problematic-tx-markers.added delete mode 100644 changelog.d/protect-grant-signer-key.fixed delete mode 100644 changelog.d/remove-checkpoint-staker.fixed delete mode 100644 changelog.d/revert-p2wsh-outputs.removed delete mode 100644 changelog.d/revoke-signer-grant.fixed delete mode 100644 changelog.d/secp256k1-decompress.added delete mode 100644 changelog.d/signature-order.fixed delete mode 100644 changelog.d/signer-manager-callbacks.fixed delete mode 100644 changelog.d/signer-max-fee.fixed delete mode 100644 changelog.d/special-map-off-by-one.fixed delete mode 100644 changelog.d/stake-in-prepare-phase.fixed delete mode 100644 changelog.d/staking-post-condition.added delete mode 100644 changelog.d/tob-stacks-3-miner-spend-waterfall.fixed delete mode 100644 changelog.d/trait-compliance-cost-error-epoch40-gated.fixed delete mode 100644 changelog.d/tuple-merge-size-epoch40-gate.fixed delete mode 100644 changelog.d/uint-to-buff-le.fixed delete mode 100644 changelog.d/unify-node-signer-version.changed delete mode 100644 changelog.d/update-l1-bond-registration-print.added delete mode 100644 changelog.d/use-variadic-concat.changed delete mode 100644 changelog.d/v2-pox.fixed delete mode 100644 changelog.d/verify-merkle-proof-padding-relocation.fixed delete mode 100644 changelog.d/wasm-time.fixed diff --git a/CHANGELOG.md b/CHANGELOG.md index 901cb334ea0..8c82b40a252 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,80 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to the versioning scheme outlined in the [README.md](README.md). +## [4.0.0] + +This release includes the activation logic for the 4.0.0 hard-fork. It is compatible with prior chainstates, but after the hard-fork activation height, nodes running 4.0.0 and 3.4.x will diverge. Node operators **must** upgrade before the activation height. + +### Added + +* Clarity 6: Add variadic `concat` built-in +* Adds two new Clarity 6 native functions: `verify-merkle-proof`, which checks a Bitcoin-style merkle inclusion proof against a known root using double-SHA-256, and `get-bitcoin-tx-output?`, which parses a serialized Bitcoin transaction (with or without SegWit witness data) and returns the output at a given index along with the canonical, witness-stripped txid in internal byte order +* Adds the ability to pause claiming of rewards in pox-5. This is an irreversable action, which can only be taken by the "pause admin", which is set initially at 4.0 activation. +* Added ed25519-verify to clarity6 +* Adds a new epoch, epoch 4.0, which deploys pox-5, and a new Clarity version, Clarity 6, along with related boilerplate code. +* Complete L1 bitcoin staking integration tests, including both normal exit after the timelock expires, and early exit. +* pox-5: support seamless rollovers between bond and STX-only staking positions. A staker may now `register-for-bond` for the bond that starts immediately after their current bond ends or at the same cycle at which their STX-only staking unlocks. They can also `stake` STX-only while their existing bond/stake is ending. In these cases, the STX lock is carried forward (amount may go up or down) with no release. sBTC for the bond is also rolled forward via net transfer (or refunded on bond → stake). These rollovers are restricted to the bond L1 unlock window (last half cycle). +* Added `print` events for all interesting actions on the pox-5 contract and also improved the return values for some. +* The `/v2/pox` RPC response now includes `pox_5_sbtc_contract` and `pox_5_sbtc_registry_contract`, the sBTC token and registry contract identifiers that this node's PoX-5 references. On mainnet these are the canonical sBTC contracts; on non-mainnet they reflect the node's configuration. +* Add support to the pox-locking library for PoX-5. +* Added a private function, `transfer-from-reserve` to pox-5 to allow a consensus transfer of sBTC from the reserve. +* Added per-block `problematic_txs` markers to the Nakamoto block header (Epoch 4.0+), letting miners flag transactions to skip during replay. The field is gated on a new header version, so pre-4.0 block serialization and hashes are unchanged, and the header version is now validated against the block's epoch. Until the policies are set, signers will reject any transactions in this list. +* Added secp256k1-decompress? to clarity6 +* Added transaction-level `Staking` and `Pox` post-conditions, and matching in-contract `with-staking` / `with-pox` allowances. `Staking` constrains how much STX a principal may stake (lock for PoX) during a transaction. `Pox` gates the state-altering PoX-5 operations that act on a principal's existing position: `unstake`, `unstake-sbtc`, `update-bond-registration`, and `announce-l1-early-exit`, and is presence-based (block / allow / require). Both are only valid in Stacks epoch 4.0 and later, and in `Deny`/`Originator` post-condition mode an uncovered stake or PoX action fails the transaction. In Clarity 6 the `with-stacking` allowance was renamed to `with-staking` (the old `with-stacking` spelling remains valid in Clarity 4 and 5). +* Updated the print event inside `register-for-bond` to include the transaction info for L1 lockups. + +### Changed + +* Added `.cost-voting` disablement gate beginning from epoch 4.0 +* Updated coinbase intervals for Epoch 4.0 +* Recalibrated all Clarity 6 (Epoch 4.0) runtime cost functions in `costs_5.rs` using Callgrind instruction-count measurements from `clarity-cost-bench`. Arithmetic, tuple, sequence, hash, crypto, and store operations now have bench-derived linear formulas instead of forwarding to the Clarity 4 values, with a calibration baseline of 1 cost unit = 80,000 CPU instructions (a clean round value chosen to place the base overhead of any Clarity call at ≈38 units). +* Doubled the Clarity read budget (`read_length` and `read_count`) for Stacks Epoch 4.0 blocks, via a new `BLOCK_LIMIT_MAINNET_40` cost limit. All other block limit dimensions (write and runtime) remain unchanged from Epoch 2.1 onward. +* Add additional Clarity value sanitization pass to function invocations in Epoch 4.0 +* Contract analysis now charges the runtime cost of `AnalysisUseTraitEntry` when a trait is resolved from the contract under analysis. This closes a metering asymmetry between the two lookup paths and applies starting with Epoch 4.0. +* Allow pox-5 L1 BTC lockups to use timelock unlock heights greater than or equal to the bond's minimum L1 unlock height. +* Restructure the pox-5 L1 BTC lockup witness script: the early-exit branch now requires revealing the 32-byte `sha256(to-consensus-buff? staker)` preimage alongside the early-unlock signature. +* Updated the `stacks-signer generate-staking-signature` command to generate PoX-5 signer grant signatures. +* Reduced the per-cycle `readCount` cost of pox-5 `stake` (and the other staking entry points that fold over lock cycles) by de-duplicating redundant map reads in `settle-rewards` and skipping `settle-staker-rewards` when the staker holds no shares in that cycle. A max-length (96-cycle) `stake` now costs ~2,336 readCount instead of ~3,104 (~15.6% vs ~20.7% of the tenure-block budget), raising worst-case throughput from ~4 to ~6 such transactions per block. +* pox-5: `announce-l1-early-exit` is now callable by the staker themselves, not the bond's early-unlock admin. The `early-unlock-admin` field is removed from `protocol-bonds` and from the `setup-bond` parameter list, since no on-chain code path consumes it anymore. Re-announcing for the same bond returns the new `ERR_L1_EARLY_EXIT_ALREADY_ANNOUNCED`. The new read-only `has-announced-l1-early-exit` exposes per-staker announcement state for off-chain consumers and gates the re-entry assert on-chain. +* Reject `unstake-sbtc` and `announce-l1-early-exit` calls during a prepare phase. +* The node and `stacks-signer` now share a single version (`stacks_node_version` in `versions.toml`) and ship in one combined GitHub release: one set of binary archives (containing both binaries) plus the `stacks-core` and `stacks-signer` docker images, all tagged with the same version. The separate `stacks_signer_version`, the `signer-x.x.x` release tags, and the independent `release/signer-x.x.x` release path have been removed. +* Use new variadic `concat` in the pox-5 contract. + +### Fixed + +* Updates to pox-5 to prevent a scenario where a bond participant could switch signers, but that switch would cause the new signer to immediately start getting rewards, even though their signing power isn't updated yet. +* Fixed an issue related to signer managers not being able to withdrawal their accumulated fees. +* Consensus now rejects blocks that contain transactions with non-normalized "high S" secp256k1 signatures. This is a requirement of SIP 005, but was never correctly implemented. This change applies starting with Epoch 4.0. +* Prevent counting duplicate lockups in pox-5 `register-for-bond`. +* In `signer-manager.clar`, the function `check-pox-addr` wasn't used. Now, it is used to check when a staker has passed a `pox-addr` as part of their calldata. +* Fixed an issue related to how current and future cycle rewards state is managed after unstaking. +* Fixed an error where there could be an arithmetic underflow if a staker claimed rewards before the signer claimed their own first. Instead, we now explicitly return an error. +* Remove the faulty `reward-cycle-to-unlock-height` from pox-5. +* Return rejected sBTC withdrawal amounts to stakers and let admins sweep orphaned fee-refund dust in the pox-5 reference signer-manager. The admin sweep now subtracts outstanding withdrawal liability so it can never sweep funds owed to stakers, and accepted withdrawals are retired via the permissionless `settle-accepted-withdrawal` to release their liability. +* Handle reward cycle with no STX-only stakers (all excess rewards go to the reserve). +* In Epoch 4.0 (PoX-5), the Clarity asset map now sums concurrent stacking entries for the same principal within a transaction (both within a frame and when merging frames) instead of rejecting the block. The pre-Epoch-4.0 soft-fork behavior (rejecting PoX assetmap overwrites) is unchanged. +* Fixed PoX-5 L1 lockup CLTV height serialization so large unlock heights cannot truncate to lower Bitcoin script numbers. +* Re-check the signer key grant at every pox-5 new-stake entry point (`register-for-bond`, `update-bond-registration`, `stake`, `stake-update`), so revoking a grant with `revoke-signer-grant` now disables an already-registered signer manager from accepting any new stake. Previously revocation only blocked future `register-signer` calls, leaving a deprecated or buggy manager free to keep accumulating delegated STX and re-enter the signer set; its existing obligations still settle and wind down as the backing bonds/stakes expire. +* Fixed PoX-5 L1 lockup script construction to reject Bitcoin `CHECKLOCKTIMEVERIFY` values that would be interpreted as Unix timestamps instead of block heights. +* Allow only the signer to call `grant-signer-key`. Without this check someone could grief the signer, by watching for their call to `register-self` in the mempool, grabbing the `signer-key`, and then frontrunning a call to `grant-signer-key`, causing the signer's call to fail with `ERR_SIGNER_KEY_GRANT_USED`. +* Require that `revoke-signer-grant` is called directly only, not indirectly through any contract. +* Starting in Epoch 4.0, signer signatures on a Nakamoto block must be strictly ordered by the signer's index in the reward set. Previously a bug only compared each signature against the first signer's index, so only a partial ordering was enforced. The pre-Epoch-4.0 behavior is preserved for blocks validated before the activation so that historical blocks and un-upgraded peers validate identically. +* Gate the pox-5 callback functions in the sample signer-manager contract so that they can only be called directly by pox-5. +* Updates the max-fee settable by the signer to be 99.99%, to prevent accounting issues. +* Fix an off-by-one in the Clarity `map` built-in over unequal-length sequences. The fix is consensus-breaking and epoch-gated, activating in Epoch 4.0. +* Do not allow functions that modify the staker/signer set during the prepare phase. +* The miner-spend estimators (`get_miner_spend` CLI helper and `MinerStats`) now model block-commit outputs using the PoX-5 waterfall single-output scheme when active, matching the relayer. +* Surface cost-tracking errors raised during Clarity trait-compliance type-checking instead of masking them as `IncompatibleTrait`. The fix is consensus-breaking and epoch-gated, activating in Epoch 4.0. +* Fix tuple `merge` producing an oversized value: starting in Epoch 4.0, a `merge` whose combined size exceeds the maximum value size is rejected cleanly with `ValueTooLarge` at the merge site (in both static analysis and at runtime), instead of aborting the block. Behavior in earlier epochs is unchanged. +* Fix `uint-to-buff-le` in pox-5 contract to handle values >255 correctly. +* Fix the minimum threshold reported by /v2/pox when pox-5 is the active contract. +* Tightens the Clarity 6 `verify-merkle-proof` builtin so that it rejects CVE-2012-2459-style "inflated `tx-count`" forgeries that relocate the last real leaf of an odd-sized tree into the duplicated-padding region (e.g. presenting the same real Bitcoin tx as `(tx-index 3, tx-count 4)` against the merkle root of a 3-tx block). +* Replaced `time` dependency in logging code with `chrono` to allow it to work properly in Wasm builds. + +### Removed + +* Removed the `allow-contract-caller`, `disallow-contract-caller`, and `check-caller-allowed` functions and the `allowance-contract-callers` map from `pox-5`. Stacking methods may now be invoked through any contract-caller; stackers protect themselves with the in-contract `with-stacking` / `with-pox` allowances or transaction-level `Staking` / `Pox` post-conditions instead. + ## [3.4.0.0.4] ### Added diff --git a/changelog.d/7112-variadic-concat.added b/changelog.d/7112-variadic-concat.added deleted file mode 100644 index 8e4a9d3a89a..00000000000 --- a/changelog.d/7112-variadic-concat.added +++ /dev/null @@ -1 +0,0 @@ -Clarity 6: Add variadic `concat` built-in diff --git a/changelog.d/7179-bitcoin-clarity-builtins.added b/changelog.d/7179-bitcoin-clarity-builtins.added deleted file mode 100644 index 9d0700f983c..00000000000 --- a/changelog.d/7179-bitcoin-clarity-builtins.added +++ /dev/null @@ -1 +0,0 @@ -Adds two new Clarity 6 native functions: `verify-merkle-proof`, which checks a Bitcoin-style merkle inclusion proof against a known root using double-SHA-256, and `get-bitcoin-tx-output?`, which parses a serialized Bitcoin transaction (with or without SegWit witness data) and returns the output at a given index along with the canonical, witness-stripped txid in internal byte order diff --git a/changelog.d/7270-fix-retro-rewards.fixed b/changelog.d/7270-fix-retro-rewards.fixed deleted file mode 100644 index d9b89912050..00000000000 --- a/changelog.d/7270-fix-retro-rewards.fixed +++ /dev/null @@ -1 +0,0 @@ -Updates to pox-5 to prevent a scenario where a bond participant could switch signers, but that switch would cause the new signer to immediately start getting rewards, even though their signing power isn't updated yet. \ No newline at end of file diff --git a/changelog.d/7277-fix-fee-claiming.fixed b/changelog.d/7277-fix-fee-claiming.fixed deleted file mode 100644 index fe3cd665282..00000000000 --- a/changelog.d/7277-fix-fee-claiming.fixed +++ /dev/null @@ -1 +0,0 @@ -Fixed an issue related to signer managers not being able to withdrawal their accumulated fees. \ No newline at end of file diff --git a/changelog.d/7328-pause-rewards.added b/changelog.d/7328-pause-rewards.added deleted file mode 100644 index b1febf2e410..00000000000 --- a/changelog.d/7328-pause-rewards.added +++ /dev/null @@ -1 +0,0 @@ -Adds the ability to pause claiming of rewards in pox-5. This is an irreversable action, which can only be taken by the "pause admin", which is set initially at 4.0 activation. diff --git a/changelog.d/7337-reject-high-s-signature-tx-consensus.fixed b/changelog.d/7337-reject-high-s-signature-tx-consensus.fixed deleted file mode 100644 index 4d12ef04356..00000000000 --- a/changelog.d/7337-reject-high-s-signature-tx-consensus.fixed +++ /dev/null @@ -1 +0,0 @@ -Consensus now rejects blocks that contain transactions with non-normalized "high S" secp256k1 signatures. This is a requirement of SIP 005, but was never correctly implemented. This change applies starting with Epoch 4.0. \ No newline at end of file diff --git a/changelog.d/7341-cost-voting-epoch-4-0-gate.changed b/changelog.d/7341-cost-voting-epoch-4-0-gate.changed deleted file mode 100644 index abb315646b5..00000000000 --- a/changelog.d/7341-cost-voting-epoch-4-0-gate.changed +++ /dev/null @@ -1 +0,0 @@ -Added `.cost-voting` disablement gate beginning from epoch 4.0 diff --git a/changelog.d/C-02-duplicate-lockup.fixed b/changelog.d/C-02-duplicate-lockup.fixed deleted file mode 100644 index 2cf0d789738..00000000000 --- a/changelog.d/C-02-duplicate-lockup.fixed +++ /dev/null @@ -1 +0,0 @@ -Prevent counting duplicate lockups in pox-5 `register-for-bond`. diff --git a/changelog.d/L-02-unlock-height.fixed b/changelog.d/L-02-unlock-height.fixed deleted file mode 100644 index 265026c7f73..00000000000 --- a/changelog.d/L-02-unlock-height.fixed +++ /dev/null @@ -1 +0,0 @@ -Remove the faulty `reward-cycle-to-unlock-height` from pox-5. diff --git a/changelog.d/M-04-withdrawal-refunds.fixed b/changelog.d/M-04-withdrawal-refunds.fixed deleted file mode 100644 index c5907ea5116..00000000000 --- a/changelog.d/M-04-withdrawal-refunds.fixed +++ /dev/null @@ -1 +0,0 @@ -Return rejected sBTC withdrawal amounts to stakers and let admins sweep orphaned fee-refund dust in the pox-5 reference signer-manager. The admin sweep now subtracts outstanding withdrawal liability so it can never sweep funds owed to stakers, and accepted withdrawals are retired via the permissionless `settle-accepted-withdrawal` to release their liability. \ No newline at end of file diff --git a/changelog.d/check-pox-addr.fixed b/changelog.d/check-pox-addr.fixed deleted file mode 100644 index 87d07560d44..00000000000 --- a/changelog.d/check-pox-addr.fixed +++ /dev/null @@ -1 +0,0 @@ -In `signer-manager.clar`, the function `check-pox-addr` wasn't used. Now, it is used to check when a staker has passed a `pox-addr` as part of their calldata. diff --git a/changelog.d/coinbase-intervals.changed b/changelog.d/coinbase-intervals.changed deleted file mode 100644 index c7cf533eea1..00000000000 --- a/changelog.d/coinbase-intervals.changed +++ /dev/null @@ -1 +0,0 @@ -Updated coinbase intervals for Epoch 4.0 diff --git a/changelog.d/costs-5-valgrind-calibration.changed b/changelog.d/costs-5-valgrind-calibration.changed deleted file mode 100644 index 471a37130d7..00000000000 --- a/changelog.d/costs-5-valgrind-calibration.changed +++ /dev/null @@ -1 +0,0 @@ -Recalibrated all Clarity 6 (Epoch 4.0) runtime cost functions in `costs_5.rs` using Callgrind instruction-count measurements from `clarity-cost-bench`. Arithmetic, tuple, sequence, hash, crypto, and store operations now have bench-derived linear formulas instead of forwarding to the Clarity 4 values, with a calibration baseline of 1 cost unit = 80,000 CPU instructions (a clean round value chosen to place the base overhead of any Clarity call at ≈38 units). diff --git a/changelog.d/current-cycle-unstaking.fixed b/changelog.d/current-cycle-unstaking.fixed deleted file mode 100644 index d6de4461c08..00000000000 --- a/changelog.d/current-cycle-unstaking.fixed +++ /dev/null @@ -1,9 +0,0 @@ -Fixed an issue related to how current and future cycle rewards state is managed after unstaking. - -Before this fix, there was an issue where the "global" bond signer membership state was used, -even though bond participants could have a different signer in the current cycle. This led -to various issues around reward calculations if a staker unstaked after updating their signer. - -This change updates the logic around unstaking to remove the staker from the current and -future cycles. In each cycle, the signer is derived from per-cycle state instead of -being passed explicitly. \ No newline at end of file diff --git a/changelog.d/ed25519-verify.added b/changelog.d/ed25519-verify.added deleted file mode 100644 index 50c9f8e2ed5..00000000000 --- a/changelog.d/ed25519-verify.added +++ /dev/null @@ -1 +0,0 @@ -Added ed25519-verify to clarity6 \ No newline at end of file diff --git a/changelog.d/epoch-35-clarity-6.added b/changelog.d/epoch-35-clarity-6.added deleted file mode 100644 index 8a3b8e35e63..00000000000 --- a/changelog.d/epoch-35-clarity-6.added +++ /dev/null @@ -1 +0,0 @@ -Adds a new epoch, epoch 3.5, which deploys pox-5, and a new Clarity version, Clarity 6, along with related boilerplate code. The real activation height will be set later, via the SIP process. diff --git a/changelog.d/epoch-4-0-read-budget.changed b/changelog.d/epoch-4-0-read-budget.changed deleted file mode 100644 index 46b787e8a87..00000000000 --- a/changelog.d/epoch-4-0-read-budget.changed +++ /dev/null @@ -1 +0,0 @@ -Doubled the Clarity read budget (`read_length` and `read_count`) for Stacks Epoch 4.0 blocks, via a new `BLOCK_LIMIT_MAINNET_40` cost limit. All other block limit dimensions (write and runtime) remain unchanged from Epoch 2.1 onward. diff --git a/changelog.d/epoch-4-value-sanitize.changed b/changelog.d/epoch-4-value-sanitize.changed deleted file mode 100644 index 3a18ed598ef..00000000000 --- a/changelog.d/epoch-4-value-sanitize.changed +++ /dev/null @@ -1 +0,0 @@ -Add additional Clarity value sanitization pass to function invocations in Epoch 4.0 \ No newline at end of file diff --git a/changelog.d/error-no-claimable-rewards.fixed b/changelog.d/error-no-claimable-rewards.fixed deleted file mode 100644 index 8d63d1749f0..00000000000 --- a/changelog.d/error-no-claimable-rewards.fixed +++ /dev/null @@ -1 +0,0 @@ -Fixed an error where there could be an arithmetic underflow if a staker claimed rewards before the signer claimed their own first. Instead, we now explicitly return an error. diff --git a/changelog.d/in-contract-trait-entry-analysis-cost.changed b/changelog.d/in-contract-trait-entry-analysis-cost.changed deleted file mode 100644 index 5d2491a1e22..00000000000 --- a/changelog.d/in-contract-trait-entry-analysis-cost.changed +++ /dev/null @@ -1 +0,0 @@ -Contract analysis now charges the runtime cost of `AnalysisUseTraitEntry` when a trait is resolved from the contract under analysis. This closes a metering asymmetry between the two lookup paths and applies starting with Epoch 4.0. diff --git a/changelog.d/l1-bond-integration.added b/changelog.d/l1-bond-integration.added deleted file mode 100644 index 509ab5e9848..00000000000 --- a/changelog.d/l1-bond-integration.added +++ /dev/null @@ -1 +0,0 @@ -Complete L1 bitcoin staking integration tests, including both normal exit after the timelock expires, and early exit. diff --git a/changelog.d/no-stx-stakers.fixed b/changelog.d/no-stx-stakers.fixed deleted file mode 100644 index 780add080b5..00000000000 --- a/changelog.d/no-stx-stakers.fixed +++ /dev/null @@ -1 +0,0 @@ -Handle reward cycle with no STX-only stakers (all excess rewards go to the reserve). diff --git a/changelog.d/pox-5-assetmap-sum-committed.fixed b/changelog.d/pox-5-assetmap-sum-committed.fixed deleted file mode 100644 index 22d69a0a32d..00000000000 --- a/changelog.d/pox-5-assetmap-sum-committed.fixed +++ /dev/null @@ -1 +0,0 @@ -In Epoch 4.0 (PoX-5), the Clarity asset map now sums concurrent stacking entries for the same principal within a transaction (both within a frame and when merging frames) instead of rejecting the block. The pre-Epoch-4.0 soft-fork behavior (rejecting PoX assetmap overwrites) is unchanged. diff --git a/changelog.d/pox-5-bond-rollover.added b/changelog.d/pox-5-bond-rollover.added deleted file mode 100644 index 7a2df10c247..00000000000 --- a/changelog.d/pox-5-bond-rollover.added +++ /dev/null @@ -1 +0,0 @@ -pox-5: support seamless rollovers between bond and STX-only staking positions. A staker may now `register-for-bond` for the bond that starts immediately after their current bond ends or at the same cycle at which their STX-only staking unlocks. They can also `stake` STX-only while their existing bond/stake is ending. In these cases, the STX lock is carried forward (amount may go up or down) with no release. sBTC for the bond is also rolled forward via net transfer (or refunded on bond → stake). These rollovers are restricted to the bond L1 unlock window (last half cycle). diff --git a/changelog.d/pox-5-cscriptnum-unlock-height.fixed b/changelog.d/pox-5-cscriptnum-unlock-height.fixed deleted file mode 100644 index 519cdf027ee..00000000000 --- a/changelog.d/pox-5-cscriptnum-unlock-height.fixed +++ /dev/null @@ -1 +0,0 @@ -Fixed PoX-5 L1 lockup CLTV height serialization so large unlock heights cannot truncate to lower Bitcoin script numbers. diff --git a/changelog.d/pox-5-l1-unlock-height.changed b/changelog.d/pox-5-l1-unlock-height.changed deleted file mode 100644 index d59375d58d3..00000000000 --- a/changelog.d/pox-5-l1-unlock-height.changed +++ /dev/null @@ -1 +0,0 @@ -Allow pox-5 L1 BTC lockups to use timelock unlock heights greater than or equal to the bond's minimum L1 unlock height. diff --git a/changelog.d/pox-5-lockup-script-structure.changed b/changelog.d/pox-5-lockup-script-structure.changed deleted file mode 100644 index 4e694e3ca64..00000000000 --- a/changelog.d/pox-5-lockup-script-structure.changed +++ /dev/null @@ -1 +0,0 @@ -Restructure the pox-5 L1 BTC lockup witness script: the early-exit branch now requires revealing the 32-byte `sha256(to-consensus-buff? staker)` preimage alongside the early-unlock signature. diff --git a/changelog.d/pox-5-print.added b/changelog.d/pox-5-print.added deleted file mode 100644 index aefec215c11..00000000000 --- a/changelog.d/pox-5-print.added +++ /dev/null @@ -1 +0,0 @@ -Added `print` events for all interesting actions on the pox-5 contract and also improved the return values for some. diff --git a/changelog.d/pox-5-remove-contract-caller-allowance.removed b/changelog.d/pox-5-remove-contract-caller-allowance.removed deleted file mode 100644 index 54e560a10d3..00000000000 --- a/changelog.d/pox-5-remove-contract-caller-allowance.removed +++ /dev/null @@ -1 +0,0 @@ -Removed the `allow-contract-caller`, `disallow-contract-caller`, and `check-caller-allowed` functions and the `allowance-contract-callers` map from `pox-5`. Stacking methods may now be invoked through any contract-caller; stackers protect themselves with the in-contract `with-stacking` / `with-pox` allowances or transaction-level `Staking` / `Pox` post-conditions instead. diff --git a/changelog.d/pox-5-revoke-signer-grant-blocks-new-stake.fixed b/changelog.d/pox-5-revoke-signer-grant-blocks-new-stake.fixed deleted file mode 100644 index a409c1011d7..00000000000 --- a/changelog.d/pox-5-revoke-signer-grant-blocks-new-stake.fixed +++ /dev/null @@ -1 +0,0 @@ -Re-check the signer key grant at every pox-5 new-stake entry point (`register-for-bond`, `update-bond-registration`, `stake`, `stake-update`), so revoking a grant with `revoke-signer-grant` now disables an already-registered signer manager from accepting any new stake. Previously revocation only blocked future `register-signer` calls, leaving a deprecated or buggy manager free to keep accumulating delegated STX and re-enter the signer set; its existing obligations still settle and wind down as the backing bonds/stakes expire. diff --git a/changelog.d/pox-5-signer-sig-cli.changed b/changelog.d/pox-5-signer-sig-cli.changed deleted file mode 100644 index 7a429ea4e2e..00000000000 --- a/changelog.d/pox-5-signer-sig-cli.changed +++ /dev/null @@ -1 +0,0 @@ -Updated the `stacks-signer generate-staking-signature` command to generate PoX-5 signer grant signatures. diff --git a/changelog.d/pox-5-stake-read-cost.changed b/changelog.d/pox-5-stake-read-cost.changed deleted file mode 100644 index 8b0b61e58c6..00000000000 --- a/changelog.d/pox-5-stake-read-cost.changed +++ /dev/null @@ -1 +0,0 @@ -Reduced the per-cycle `readCount` cost of pox-5 `stake` (and the other staking entry points that fold over lock cycles) by de-duplicating redundant map reads in `settle-rewards` and skipping `settle-staker-rewards` when the staker holds no shares in that cycle. A max-length (96-cycle) `stake` now costs ~2,336 readCount instead of ~3,104 (~15.6% vs ~20.7% of the tenure-block budget), raising worst-case throughput from ~4 to ~6 such transactions per block. diff --git a/changelog.d/pox-5-staker-controls-l1-early-exit.changed b/changelog.d/pox-5-staker-controls-l1-early-exit.changed deleted file mode 100644 index 8d9da3ba346..00000000000 --- a/changelog.d/pox-5-staker-controls-l1-early-exit.changed +++ /dev/null @@ -1 +0,0 @@ -pox-5: `announce-l1-early-exit` is now callable by the staker themselves, not the bond's early-unlock admin. The `early-unlock-admin` field is removed from `protocol-bonds` and from the `setup-bond` parameter list, since no on-chain code path consumes it anymore. Re-announcing for the same bond returns the new `ERR_L1_EARLY_EXIT_ALREADY_ANNOUNCED`. The new read-only `has-announced-l1-early-exit` exposes per-staker announcement state for off-chain consumers and gates the re-entry assert on-chain. diff --git a/changelog.d/pox-info-sbtc-contracts.added b/changelog.d/pox-info-sbtc-contracts.added deleted file mode 100644 index c12c0344eee..00000000000 --- a/changelog.d/pox-info-sbtc-contracts.added +++ /dev/null @@ -1 +0,0 @@ -The `/v2/pox` RPC response now includes `pox_5_sbtc_contract` and `pox_5_sbtc_registry_contract`, the sBTC token and registry contract identifiers that this node's PoX-5 references. On mainnet these are the canonical sBTC contracts; on non-mainnet they reflect the node's configuration. diff --git a/changelog.d/pox-locking-v5.added b/changelog.d/pox-locking-v5.added deleted file mode 100644 index 053dd337a7c..00000000000 --- a/changelog.d/pox-locking-v5.added +++ /dev/null @@ -1 +0,0 @@ -Add support to the pox-locking library for PoX-5. \ No newline at end of file diff --git a/changelog.d/pox-wf-integration.changed b/changelog.d/pox-wf-integration.changed deleted file mode 100644 index 8b719ec6084..00000000000 --- a/changelog.d/pox-wf-integration.changed +++ /dev/null @@ -1 +0,0 @@ -Reject `unstake-sbtc` and `announce-l1-early-exit` calls during a prepare phase. diff --git a/changelog.d/pox5-cltv-height-limit.fixed b/changelog.d/pox5-cltv-height-limit.fixed deleted file mode 100644 index bf028f9c865..00000000000 --- a/changelog.d/pox5-cltv-height-limit.fixed +++ /dev/null @@ -1 +0,0 @@ -Fixed PoX-5 L1 lockup script construction to reject Bitcoin `CHECKLOCKTIMEVERIFY` values that would be interpreted as Unix timestamps instead of block heights. diff --git a/changelog.d/private-reserve-fn.added b/changelog.d/private-reserve-fn.added deleted file mode 100644 index 6cbc33ddb82..00000000000 --- a/changelog.d/private-reserve-fn.added +++ /dev/null @@ -1 +0,0 @@ -Added a private function, `transfer-from-reserve` to pox-5 to allow a consensus transfer of sBTC from the reserve. diff --git a/changelog.d/problematic-tx-markers.added b/changelog.d/problematic-tx-markers.added deleted file mode 100644 index 6fbdbc9f60d..00000000000 --- a/changelog.d/problematic-tx-markers.added +++ /dev/null @@ -1 +0,0 @@ -Added per-block `problematic_txs` markers to the Nakamoto block header (Epoch 4.0+), letting miners flag transactions to skip during replay. The field is gated on a new header version, so pre-4.0 block serialization and hashes are unchanged, and the header version is now validated against the block's epoch. Until the policies are set, signers will reject any transactions in this list. diff --git a/changelog.d/protect-grant-signer-key.fixed b/changelog.d/protect-grant-signer-key.fixed deleted file mode 100644 index c6ca289ec98..00000000000 --- a/changelog.d/protect-grant-signer-key.fixed +++ /dev/null @@ -1 +0,0 @@ -Allow only the signer to call `grant-signer-key`. Without this check someone could grief the signer, by watching for their call to `register-self` in the mempool, grabbing the `signer-key`, and then frontrunning a call to `grant-signer-key`, causing the signer's call to fail with `ERR_SIGNER_KEY_GRANT_USED`. diff --git a/changelog.d/remove-checkpoint-staker.fixed b/changelog.d/remove-checkpoint-staker.fixed deleted file mode 100644 index 7f02f3f25f8..00000000000 --- a/changelog.d/remove-checkpoint-staker.fixed +++ /dev/null @@ -1,3 +0,0 @@ -The `checkpoint-staker` function was removed from the PoX-5 signer manager trait, -along with its associated usage in pox-5. Instead, per-staker -rewards tracking is stored in pox-5 directly. \ No newline at end of file diff --git a/changelog.d/revert-p2wsh-outputs.removed b/changelog.d/revert-p2wsh-outputs.removed deleted file mode 100644 index b246e8fe993..00000000000 --- a/changelog.d/revert-p2wsh-outputs.removed +++ /dev/null @@ -1 +0,0 @@ -Remove the p2wsh output storage which is no longer needed in the latest Pstaking design. diff --git a/changelog.d/revoke-signer-grant.fixed b/changelog.d/revoke-signer-grant.fixed deleted file mode 100644 index de6e30d2020..00000000000 --- a/changelog.d/revoke-signer-grant.fixed +++ /dev/null @@ -1 +0,0 @@ -Require that `revoke-signer-grant` is called directly only, not indirectly through any contract. diff --git a/changelog.d/secp256k1-decompress.added b/changelog.d/secp256k1-decompress.added deleted file mode 100644 index f318f82ed15..00000000000 --- a/changelog.d/secp256k1-decompress.added +++ /dev/null @@ -1 +0,0 @@ -Added secp256k1-decompress? to clarity6 diff --git a/changelog.d/signature-order.fixed b/changelog.d/signature-order.fixed deleted file mode 100644 index 037a17961f9..00000000000 --- a/changelog.d/signature-order.fixed +++ /dev/null @@ -1 +0,0 @@ -Starting in Epoch 4.0, signer signatures on a Nakamoto block must be strictly ordered by the signer's index in the reward set. Previously a bug only compared each signature against the first signer's index, so only a partial ordering was enforced. The pre-Epoch-4.0 behavior is preserved for blocks validated before the activation so that historical blocks and un-upgraded peers validate identically. diff --git a/changelog.d/signer-manager-callbacks.fixed b/changelog.d/signer-manager-callbacks.fixed deleted file mode 100644 index 93ecc0e9819..00000000000 --- a/changelog.d/signer-manager-callbacks.fixed +++ /dev/null @@ -1 +0,0 @@ -Gate the pox-5 callback functions in the sample signer-manager contract so that they can only be called directly by pox-5. diff --git a/changelog.d/signer-max-fee.fixed b/changelog.d/signer-max-fee.fixed deleted file mode 100644 index 024724c4205..00000000000 --- a/changelog.d/signer-max-fee.fixed +++ /dev/null @@ -1 +0,0 @@ -Updates the max-fee settable by the signer to be 99.99%, to prevent accounting issues. diff --git a/changelog.d/special-map-off-by-one.fixed b/changelog.d/special-map-off-by-one.fixed deleted file mode 100644 index 85d896ca748..00000000000 --- a/changelog.d/special-map-off-by-one.fixed +++ /dev/null @@ -1 +0,0 @@ -Fix an off-by-one in the Clarity `map` built-in over unequal-length sequences. The fix is consensus-breaking and epoch-gated, activating in Epoch 4.0. diff --git a/changelog.d/stake-in-prepare-phase.fixed b/changelog.d/stake-in-prepare-phase.fixed deleted file mode 100644 index 1e09ceb1831..00000000000 --- a/changelog.d/stake-in-prepare-phase.fixed +++ /dev/null @@ -1 +0,0 @@ -Do not allow functions that modify the staker/signer set during the prepare phase. diff --git a/changelog.d/staking-post-condition.added b/changelog.d/staking-post-condition.added deleted file mode 100644 index f2122915a12..00000000000 --- a/changelog.d/staking-post-condition.added +++ /dev/null @@ -1 +0,0 @@ -Added transaction-level `Staking` and `Pox` post-conditions, and matching in-contract `with-staking` / `with-pox` allowances. `Staking` constrains how much STX a principal may stake (lock for PoX) during a transaction. `Pox` gates the state-altering PoX-5 operations that act on a principal's existing position: `unstake`, `unstake-sbtc`, `update-bond-registration`, and `announce-l1-early-exit`, and is presence-based (block / allow / require). Both are only valid in Stacks epoch 4.0 and later, and in `Deny`/`Originator` post-condition mode an uncovered stake or PoX action fails the transaction. In Clarity 6 the `with-stacking` allowance was renamed to `with-staking` (the old `with-stacking` spelling remains valid in Clarity 4 and 5). diff --git a/changelog.d/tob-stacks-3-miner-spend-waterfall.fixed b/changelog.d/tob-stacks-3-miner-spend-waterfall.fixed deleted file mode 100644 index a335465e258..00000000000 --- a/changelog.d/tob-stacks-3-miner-spend-waterfall.fixed +++ /dev/null @@ -1 +0,0 @@ -The miner-spend estimators (`get_miner_spend` CLI helper and `MinerStats`) now model block-commit outputs using the PoX-5 waterfall single-output scheme when active, matching the relayer. diff --git a/changelog.d/trait-compliance-cost-error-epoch40-gated.fixed b/changelog.d/trait-compliance-cost-error-epoch40-gated.fixed deleted file mode 100644 index 470a00b3053..00000000000 --- a/changelog.d/trait-compliance-cost-error-epoch40-gated.fixed +++ /dev/null @@ -1 +0,0 @@ -Surface cost-tracking errors raised during Clarity trait-compliance type-checking instead of masking them as `IncompatibleTrait`. The fix is consensus-breaking and epoch-gated, activating in Epoch 4.0. diff --git a/changelog.d/tuple-merge-size-epoch40-gate.fixed b/changelog.d/tuple-merge-size-epoch40-gate.fixed deleted file mode 100644 index 393c84fcb99..00000000000 --- a/changelog.d/tuple-merge-size-epoch40-gate.fixed +++ /dev/null @@ -1 +0,0 @@ -Fix tuple `merge` producing an oversized value: starting in Epoch 4.0, a `merge` whose combined size exceeds the maximum value size is rejected cleanly with `ValueTooLarge` at the merge site (in both static analysis and at runtime), instead of aborting the block. Behavior in earlier epochs is unchanged. diff --git a/changelog.d/uint-to-buff-le.fixed b/changelog.d/uint-to-buff-le.fixed deleted file mode 100644 index bdd9fb7f840..00000000000 --- a/changelog.d/uint-to-buff-le.fixed +++ /dev/null @@ -1 +0,0 @@ -Fix `uint-to-buff-le` in pox-5 contract to handle values >255 correctly. diff --git a/changelog.d/unify-node-signer-version.changed b/changelog.d/unify-node-signer-version.changed deleted file mode 100644 index f684044be12..00000000000 --- a/changelog.d/unify-node-signer-version.changed +++ /dev/null @@ -1 +0,0 @@ -The node and `stacks-signer` now share a single version (`stacks_node_version` in `versions.toml`) and ship in one combined GitHub release: one set of binary archives (containing both binaries) plus the `stacks-core` and `stacks-signer` docker images, all tagged with the same version. The separate `stacks_signer_version`, the `signer-x.x.x` release tags, and the independent `release/signer-x.x.x` release path have been removed. diff --git a/changelog.d/update-l1-bond-registration-print.added b/changelog.d/update-l1-bond-registration-print.added deleted file mode 100644 index c21e0b43361..00000000000 --- a/changelog.d/update-l1-bond-registration-print.added +++ /dev/null @@ -1,23 +0,0 @@ -Updated the print event inside `register-for-bond` to include the transaction info for L1 lockups. - -For an L1 lockup, you'll see: - -```clar -{ - btc-lockup: { - type: "l1", - txs: (some { txid: (buff 32), output-index: uint }) - } -} -``` - -For an L2 lockup, you'll see: - -```clar -{ - btc-lockup: { - type: "l2", - txs: none, - } -} -``` diff --git a/changelog.d/use-variadic-concat.changed b/changelog.d/use-variadic-concat.changed deleted file mode 100644 index 81498842a29..00000000000 --- a/changelog.d/use-variadic-concat.changed +++ /dev/null @@ -1 +0,0 @@ -Use new variadic `concat` in the pox-5 contract. diff --git a/changelog.d/v2-pox.fixed b/changelog.d/v2-pox.fixed deleted file mode 100644 index 3c58fab87fd..00000000000 --- a/changelog.d/v2-pox.fixed +++ /dev/null @@ -1 +0,0 @@ -Fix the minimum threshold reported by /v2/pox when pox-5 is the active contract. diff --git a/changelog.d/verify-merkle-proof-padding-relocation.fixed b/changelog.d/verify-merkle-proof-padding-relocation.fixed deleted file mode 100644 index 8239524c05b..00000000000 --- a/changelog.d/verify-merkle-proof-padding-relocation.fixed +++ /dev/null @@ -1 +0,0 @@ -Tightens the Clarity 6 `verify-merkle-proof` builtin so that it rejects CVE-2012-2459-style "inflated `tx-count`" forgeries that relocate the last real leaf of an odd-sized tree into the duplicated-padding region (e.g. presenting the same real Bitcoin tx as `(tx-index 3, tx-count 4)` against the merkle root of a 3-tx block). diff --git a/changelog.d/wasm-time.fixed b/changelog.d/wasm-time.fixed deleted file mode 100644 index 01d48acd698..00000000000 --- a/changelog.d/wasm-time.fixed +++ /dev/null @@ -1 +0,0 @@ -Replaced `time` dependency in logging code with `chrono` to allow it to work properly in Wasm builds. From f7ddf617f0fb4ed23186c552ad3db61d33b04574 Mon Sep 17 00:00:00 2001 From: Aaron Blankstein <235161024+aaronb-stacks@users.noreply.github.com> Date: Mon, 13 Jul 2026 10:06:40 -0500 Subject: [PATCH 2/2] chore: set mainnet Epoch-4.0 activation height to 960,230 --- stacks-common/src/types/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stacks-common/src/types/mod.rs b/stacks-common/src/types/mod.rs index 59dd56ab28e..bc1b5ae38da 100644 --- a/stacks-common/src/types/mod.rs +++ b/stacks-common/src/types/mod.rs @@ -189,7 +189,7 @@ pub struct CoinbaseInterval { pub const BITCOIN_MAINNET_GENESIS_BURN_HEIGHT: u64 = 666_050; /// Burnchain height at which the Stacks 4.0 epoch activates (mainnet). -pub const BITCOIN_MAINNET_STACKS_40_BURN_HEIGHT: u64 = 1_012_860; +pub const BITCOIN_MAINNET_STACKS_40_BURN_HEIGHT: u64 = 960_230; /// Burnchain height of the Stacks genesis block (testnet). pub const BITCOIN_TESTNET_GENESIS_BURN_HEIGHT: u64 = 2_000_000;