Replies: 2 comments 1 reply
-
|
What are the concerns about fixing the contract directly? |
Beta Was this translation helpful? Give feedback.
-
|
Let me be explicit about this point: I am not suggesting we replace the existing BNS contract. I do not think it is ever going to be acceptable or even safe to try and change code or data that is already deployed. After all, the point of having a blockchain run programs is to ensure that those programs remain deployed as-is (for better or worse). This proposal is concerned instead with wrapping an existing contract with a new contract. No modifications to the code or data will be carried out. In fact, this fix does not require a hard fork -- it could be shipped in 2.0. It could be deployed as a soft-fork, where if adopted, miners would never build on blocks that contained direct contract-calls to the old BNS contract. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
It has come to our attention that the BNS
name-renewalfunction has at least two bugs:The latter bug can be worked around with a
name-transfer, but the former is concerning. We don't want squatters.Fixing this is a consensus-breaking task, so it'll have to be done as part of Stacks 2.1. I think the least-risky way to do this is to simply create a BNS "wrapper contract" called
.bns-2.1, which wraps all thedefine-publicBNS methods with stubs that simply run acontract-call?to the corresponding BNS method. Forname-renewalspecifically,.bns-2.1will first call the originalname-renewalcontract, and if successful, will then burn the requisite renewal fee and run aname-transfer. We'd do contract-call interception to make it so that all calls todefine-publicmethods in.bnswill get rerouted to.bns-2.1. So,.bnswould be put into "read-only" mode, and.bns-2.1would in most cases simply do whatever.bnsdoes.So,
.bns-2.1would look like the following:We'd update the cost functions for these methods so that the cost to load the contract in the inner
contract-call?gets ignored, and we'd make it so the newname-renewalmethod takes the same runtime as the oldname-renewal.What do you all think about this?
cc @kantai @lgalabru @pavitthrap @reedrosenbluth @zone117x @gregorycoppola
Beta Was this translation helpful? Give feedback.
All reactions