What is a sub-registry?
A name like company.btc is a namespace. The person who holds that inscription UTXO controls the entire *.company.btc space. They decide who can hold a subname, what the rules are, and whether to charge a fee.
A sub-registry operator is an address that the root owner designates to issue and manage subnames on their behalf. This is useful for collections, organizations, teams, and any scenario where a single owner does not want to sign every individual subname registration. The operator can issue subnames, but cannot transfer the root name or override security-critical operations.
The root owner retains full override authority at all times. By default, inherit: false is in effect: if the root name is ever sold or transferred, all subnames under that namespace are invalidated and the new owner starts with a clean slate. This protects buyers from inheriting unknown subname obligations. Setting inherit: true explicitly allows subnames to survive a transfer.
Roles and capabilities
| Capability | Root Owner | Sub-registry Operator | Subname Holder |
|---|---|---|---|
| Register subnames | Yes | Yes | No |
| Revoke subnames | Yes | Yes | No |
| Set namespace policy | Yes | No | No |
| Transfer root name | Yes | No | No |
| Override operator actions | Yes | No | No |
| Delegate to operator | Yes | No | No |
| Revoke delegation | Yes | No | No |
| Update own subname records | Yes | If authorized | If permitted by policy |
| Transfer own subname | Yes | If authorized | If permitted by policy |
Yellow entries depend on the namespace policy set by the root owner.
Inscription schemas
Two inscription operations control sub-registry delegation. Both are BNRP-protocol inscriptions that must be signed by the root owner's address.
{
"p": "bnrp",
"op": "namespace_policy",
"name": "company.btc",
"nonce": 1,
"v": 1,
"policy": {
"mode": "delegated",
"subregistry": {
"operator": "bc1p<operator_address>",
"fee_sats": 10000,
"fee_address": "bc1p<fee_address>",
"max_subnames": 10000,
"inherit": false
}
}
}
{
"p": "bnrp",
"op": "delegate",
"name": "company.btc",
"nonce": 2,
"v": 1,
"to": "bc1p<operator_address>"
}
To revoke delegation, inscribe a delegate_revoke op from the root owner's address. The nonce must be strictly higher than the previous inscription.
Security model
The root owner can override or revoke any sub-registry action at any time by inscribing from the address that holds the root name UTXO. No operator action can supersede a valid root-owner inscription.
When inherit: false (the default), all subnames are invalidated if the root name changes hands. The new owner is not encumbered by any subnames issued under the previous owner.
A delegated sub-registry operator can issue and revoke subnames but has no authority to transfer the root name inscription. Only the address holding the root UTXO can do that.
Setting inherit: true must be an explicit choice by the root owner. It is never the default. When set, subnames survive a transfer and remain valid under the new owner.
The root owner can inscribe a delegate_revoke op to immediately revoke the operator's authority. Any subname operations by that operator after the revocation block height are considered invalid.
Every inscription op for a given name must have a nonce value strictly higher than the previous. This prevents replay attacks and establishes an unambiguous ordering for all namespace operations.
How resolution works
When resolving a subname like user.company.btc, the BNRP resolver follows this sequence:
subregistry.operator field.delegated, both the root owner and the operator address are authorized signers.user, signed by the root owner or the delegated operator.inherit: false and the root name has changed ownership since the subname was issued, the subname is invalid regardless of its inscription state.Manage your namespace
Protocol status
Related specs: BNRP Resolution Protocol | Subname issuance | Full spec on GitHub