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 the following changes to renewal functionality:
- Require payment for renewals
- Set expiration to period after current expiration
- Allow paying for multiple renewals at once
Require payment for renewals
The current BNS contract doesn’t actually require any STX to be spent when renewing a name. This is not the intended functionality of the contract, but is a result of a missing call to
This results in renewals being free, except for the transaction fee.
In addition to a good pricing formula, requiring payment for renewals is key to maintaining a fair market. Without paid renewals, the market for names is too heavily favored to early users, especially those who intend to “squat” names.
The proposed change is to implement the originally intended renewal fee structure, but to actually burn the STX required. The price of renewal will stay the same, which is that the price of renewal is the same as the cost of registration.
Set expiration to period after current expiration
In BNS, each namespace has a “lifetime” property, which refers to the length of time (in blocks) until a name expires.
The current logic for changing a name’s expiration after renewal is to set the new expiration to be
now + lifetime. This proposed change would set the new expiration to be
current_expiration + lifetime.
As an example, using the
.btc namespace, which has a lifetime of ~5 years:
- Alice registers
alice.btcin 2023. The name will expire in 5 years (2028)
- After 1 year (in 2024), Alice renews the name
In the current BNS contract, Alice’s new expiration will be in 2029 (2024 + 5). This proposal would change this logic, such that Alice’s new expiration would be 2033 (2028 + 5).
The reasoning for this change is that it removes the pressure of waiting until expiration to renew a name. Currently, a user who proactively renews a name is “punished” by needing to renew a name sooner than a user who waits until the last second. Incentivizing earlier renewals should result in less accidental expirations.
Allow paying for multiple renewals at once
As explained in the previous section, when a user renews their name, the name’s expiration is based on the time of renewal. If a user pays for a renewal twice in the same day, the second renewal makes no difference to their final expiration.
By allowing users to pay for multiple renewals at once, this should result in a similar result of lessened accidental registrations.