BNS Upgrade: sBTC

This post is part of a larger effort to discuss potential features to be included in an upgraded version of BNS. Please see the megathread for more information.

Proposal: implement a mechanism for registration fees to be paid in sBTC

With the upcoming launch of sBTC, Stacks will have a native tokenized Bitcoin asset available for use in smart contracts. Using sBTC (in addition to STX) for registrations can bring BNS back to its Bitcoin-native roots, where all registrations were paid for with BTC.

Making BNS (the Bitcoin Name System) more Bitcoin-native is crucial to maintaining its dominance as the de-facto Bitcoin-based naming system.

There are a few ways this change could be implemented:

  • Use some kind of “oracle” (such as one based on recent Stacking rewards) to determine the sBTC-equivalent price for a name
  • Use only sBTC as the payment token for some or all namespaces, like .btc
  • Use sBTC as the underlying pricing token, but allow STX through an exchange rate

Regardless of whether this change is implemented, it will always be possible for a smart contract to “wrap” registration to allow registrations with sBTC. This contract would swap sBTC for STX and then immediately register the name.

While a swap-based mechanism at least partially reaches the goal of a more Bitcoin-native experience, it will have flaws due to the moving exchange rate of STXBTC. If a user knows they can always buy a certain name for an exact price in Sats, the user move an exact amount of BTC into sBTC. With a moving exchange rate, it’s possible for a registration to fail because the user doesn’t have enough sBTC.

A change to price names in Sats also wouldn’t be unheard of - the first versions of BNS had names priced in Sats. It wasn’t until the launch of Stacks 2.0, where there wasn’t a tokenized BTC asset, that paying for names in Sats was removed. Moving towards pricing in sBTC would simply be bringing BNS back towards its roots.

I’d like to add another thought here about how the benefits of sBTC support for Stacks overall.

With the launch of sBTC, Stacks is in a really unique position to become the best L2 for Bitcoin-based activity. A big part of that effort is just getting sBTC live, but once it is, the success of Stacks with sBTC is dependent on great application support. That includes both defi and NFTs.

Pricing BNS names in Sats can provide a really great first experience for sBTC users. Buying a name doesn’t cost a lot of money, so it provides an opportunity to try out sBTC without putting a lot of funds at risk.

In summary - I believe that sBTC support can be great for BNS, but it can also be great for Stacks. The success of both BNS and Stacks is intertwined. Many users who are interested in Stacks come to BNS, and many users learn about Stacks through sBTC.

100% in favor of this.

The more I think about this, the more I believe it makes sense to move to sBTC-only pricing. This changes the “native token” that names are priced in. You would still be able to pay with STX (or any other token) by making a swap into sBTC and then registering, even in one transaction.

The primary benefit of this approach is that it’s not reliant on any kind of price oracle to continually update the exchange rate of STX-sBTC.

So, how would this work?

At the time of the BNS upgrade’s activation, an exchange rate will be set which will be used to convert STX pricing to sBTC. This exchange rate will be in the form of a fraction, ie a “numerator” and a “denominator”. Using a fraction ensures better precision when performing integer-based multiplication or division.

This “exchange rate” becomes an additional variable in the namespace’s “pricing formula”, in addition to the other namespace pricing formula variables. As always, a namespace owner can modify their pricing function and can remove (or update) this variable.


  • Example prices: STX = $0.5 BTC = $30,000
  • 1 uSTX = 0.0016666 sats
    • Equivalent to 5 / 3000
  • To calculate price in sats, multiply uSTX cost by 5 / 3000
  • Example for .btc
    • .btc stx price = 2000000 uSTX (2 STX)
    • .btc sats price = (2000000 * 5) / 3000 = 3334 sats
    • .btc BTC price = 0.00003333 BTC