# 操作

### 注册名称

名称注册通过调用相应的 BNSv2 合约函数来执行。调用者将成为该名称的所有者。

**高级流程：**

1. 检查可用性
2. 提交注册交易
3. 支付所需的 STX 费用
4. 等待确认
5. 名称分配给调用者主体（principal）

**路径 1 — 预下单 + 注册（安全，防止抢注）：**

1. 生成完全限定名称的加盐哈希：hash160(name.namespace.salt)
2. 提交包含哈希和要销毁的 STX 的名称预下单（name-preorder）
3. 至少等待 1 个区块
4. 提交名称注册（name-register），包含实际名称、命名空间和盐值
5. 合约验证哈希匹配，销毁 STX，将 NFT 铸造给调用者&#x20;

**路径 2 — 快速认领（单笔交易，易被抢注）：**

1. 提交 name-claim-fast，包含名称、命名空间和接收者
2. STX 在一步中被销毁，NFT 立即铸造
3. 风险：名称在确认前在内存池中可见，可能被抢注。对于托管命名空间：使用 `mng-name-preorder` + `mng-name-register` （不销毁 STX，管理者控制定价）。

### 更新记录

一旦名称被拥有，所有者可以通过合约调用更新记录。更新通过 `zonefile-resolver` 合约，通过 `update-zonefile(name, namespace, new-zonefile)`。调用者必须是名称所有者或命名空间管理者（对于托管命名空间）。提及 8KB 限制。

示例记录更新可能包括：

* 设置 Stacks 地址
* 更新配置文件元数据
* 添加自定义键值对

只有当前所有者可以修改记录。

### 转移名称

名称是可转移的数字资产。 `transfer(id, sender, recipient)` 在 BNS-V2 合约上。对于托管命名空间，使用 `mng-transfer(id, sender, recipient)`，但仅在管理者转移未被通过 `turn-off-manager-transfers` .

关闭的情况下可用。

* 所有者可以：
* 将所有权转移给另一个主体
* 在其他合约中使用名称

将名称集成到市场或身份系统中

### 由于所有权是 Clarity 的原生特性，转移是无需信任的（trustless）。

解析名称

`解析涉及查询 BNSv2 合约以获取名称存储的记录。` resolve-name(name, namespace) `zonefile-resolver`

在 `对应的 BNSv2 SDK 函数：`, `resolveNameZonefile()`, `getNameInfo()`.

getPrimaryName()

* 应用可以：
* 通过 RPC 直接调用合约
* 使用 SDK 助手函数

使用索引器以便捷操作

### **解析是确定性的，不依赖于集中式服务器。**

定价

* 名称价格基于以下因素计算：
* 名称长度
* 是否包含元音
* 是否包含非字母字符
* **命名空间特定的定价函数**

### **对于托管命名空间，定价将由命名空间管理者合约直接处理**

NFT 集成

* 每个名称都铸造成 NFT，从而允许：
* 易于转移所有权

### 与 NFT 市场及其他应用集成

续期 `非托管命名空间的名称在生存期区块后过期。所有者在过期后有 5,000 个区块的宽限期（约 34 天）通过`.&#x20;

* name-renewal(namespace, name)&#x20;
* 续期会根据当前名称价格销毁 STX。
* 如果在宽限期内未续期，名称将变为任何人可注册。

### 托管命名空间的名称不会过期（renewal-height = 0）。

市场

* `BNSv2 拥有内置市场：`list-in-ustx(id, price, commission-trait)
* `，将名称列为出售`unlist-in-ustx(id)
* `，移除挂单`buy-in-ustx(id, commission-trait)&#x20;
* ，购买已挂单的名称。佣金通过 SIP-009 的 commission trait 处理。

### 对于托管命名空间，管理者合约必须封装这些函数。

* `设置主要名称` set-primary-name(id)&#x20;
* 在 BNS-V2 上允许所有者将其某个名称指定为主要身份。&#x20;
* 这是钱包和应用用于显示的名称。只有每个地址可以有一个主要名称。
