# 操作

### 注册名称

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

**高级流程：**

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

**路径 1 — 预定 + 注册（安全，可防止抢跑）：**

1. 对完全限定名称生成带盐哈希：hash160(name.namespace.salt)
2. 提交名称预定，附带哈希和要销毁的 STX
3. 至少等待 1 个区块
4. 提交名称注册，使用实际名称、命名空间和盐值
5. 合约验证哈希匹配，销毁 STX，并向调用者铸造 NFT

**路径 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 中，转移是无需信任的。

### 解析名称

解析涉及查询 BNSv2 合约中某个名称存储的记录。

`resolve-name(name, namespace)` 在 `zonefile-resolver`

相应的 BNSv2 SDK 函数： `resolveNameZonefile()`, `getNameInfo()`, `getPrimaryName()`.

应用可以：

* 通过 RPC 直接调用合约
* 使用 SDK 辅助函数
* 为方便起见使用索引器

解析是确定性的，不依赖中心化服务器。

### **定价**

名称价格根据以下因素计算：

* 名称长度
* 是否包含元音
* 是否包含非字母字符
* 命名空间特定的定价函数
* **对于托管命名空间，定价将由命名空间管理员合约直接处理**

### **NFT 集成**

每个名称都被铸造为 NFT，从而可以：

* 轻松转移所有权
* 与 NFT 市场及其他应用集成

### 续期

未托管命名空间中的名称在生命周期区块后过期。所有者在过期后有 5,000 个区块的宽限期（约 34 天）可通过以下方式续期： `name-renewal(namespace, name)`.

* 续期会根据当前名称价格销毁 STX。
* 如果未在宽限期内续期，该名称将再次对任何人开放注册。
* 托管命名空间中的名称不会过期（renewal-height = 0）。

### 市场

BNSv2 具有原生市场：

* `list-in-ustx(id, price, commission-trait)`，将名称挂牌出售
* `unlist-in-ustx(id)`，取消挂牌
* `buy-in-ustx(id, commission-trait)`，购买已挂牌名称。佣金通过 SIP-009 佣金 trait 处理。
* 对于托管命名空间，管理员合约必须封装这些函数。

### 设置主名称

* `set-primary-name(id)` 在 BNS-V2 上允许所有者将其某个名称指定为其主身份。
* 钱包和应用会使用它进行显示。
* 每个地址只能有一个主名称。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.stacks.co/learn/zh/network-fundamentals/bitcoin-name-system/operations.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
