[RFC] Stacks 1.0 -> 2.0 Upgrade Process

Hi everyone,

This post describes the proposed process for upgrading Stacks 1.0 nodes to Stacks 2.0. If you currently operate a Stacks 1.0 node, or plan to mine on Stacks 2.0, please read carefully and provide any feedback in the comments below!

Goals of the upgrade process:

  • Accurate: all relevant data from Stacks 1.0, especially accounts, balances, locks, vesting schedules must be correctly preserved in the upgrade process.
  • Decentralized: the upgrade should be triggered by independent miners expressing interest to mine on Stacks 2.0. No single entity, especially PBC, would have control on the precise timing.
  • Predictable: especially considering the point above, the upgrade process should provide predictability to users, developers, miners, exchanges and other stakeholders in the ecosystem on the mechanics of the upgrade process once the threshold for “sufficient miner interest” has been met.

Proposed upgrade process:

  • Registration: all prospective miners SHOULD register a Stacks ID on Stacks 1.0 under a dedicated namespace (say .miner)
  • Threshold Trigger: the Stacks 1.0 software will watch the .miner namespace, and once there are at least 20 IDs registered in the .miner namespace, it will trigger a countdown for the export step below.
  • Stacks 1.0 Export: 300 Bitcoin blocks (~2 days) after the threshold trigger, the Stacks 1.0 software will generate a snapshot of the Stacks 1.0 chainstate. No new transactions will be accepted after this point, though nodes might still serve read requests.
  • Import into Stacks 2.0 genesis: Stacks 2.0 software will import the exported snapshot from the above step to instantiate the Stacks 2.0 genesis block. The Stacks 2.0 chain will go live 300 (~2 days) Bitcoin blocks after the threshold trigger (so 300 blocks after the export step). Note that this means there’s going to be a “dead time” of ~2 days during which no new Stacks 1.0 transactions would be admitted and Stacks 2.0 would not have launched yet.

The 300 block window between Stacks 1.0 import and Stacks 2.0 genesis events would be useful for node operators and miners to do adequate testing and validation to ensure a correct and orderly Stacks 2.0 launch. This number is subject to change as we gather feedback from node operators and community members.



I wonder how much we should aim for accuracy. When upgrading balances from Stack 1.0 to 2.0 a different kind of stx tokens are created on Stacks 2.0 than they are created through Stacks 2.0 mining. The Stack 1.0 tokens did not pass through the burnchain transfer process, at least those that weren’t paid for in BTC.

The process looks sound - just curious as to the process for those that are not currently 1.0 miners. Where will they get the snapshot from? Will there be a requirement to become a 1.0 miner first


Thank you for this Diwaker.

Think it could make sense for Daemon to include registering a name at the .miner namespace as part of either the registration or prize fulfillment for the upcoming testnet mining contest. Let me know if you disagree.