# Ordinals 主域名协议 (方案B, Beta)

## 1. 背景

比特币生态目前还没有主域名协议，与比特币相关的区块链浏览器、第三方NFT市场和DApp网站无法像以太坊那样，将用户的钱包地址显示为更易读的名字。如果比特币生态系统中有一个主名称协议，它就可以允许一些钱包地址以更友好的形式在比特币社区内传播，并进一步扩展到非比特币社区，从而增强比特币社区的影响力。

目前已有多个基于Ordinals 的域名协议，包括 .btc, .sats, .bitmap, .unisat, .x 等。期望能够有一个主域名协议兼容主流的 Ordinals名称协议，以降低各方开发和集成成本。

## 2. 核心规则

### 2.1  Ordinals 主名称定义

对于一个 Ordinals 域名 (例如 abc.btc) 的transfer 事件, 会有 "from地址" 和 "to 地址". 一个 Ordinals 域名转移后，如果"from 地址"和 "to 地址"相同, 这个域名就会成为钱包的主域名。也就是说，通过将钱包下的某个Ordinals 域名做自转操作，这个域名就会成为钱包的主域名。

**备注**：将域名映射为钱包地址， 如通过 abc.btc 得到对应的钱包地址bc1pk0e02kpy2kp2sngkvgpzqh6mhr50k7x2uxkgdxp467frfs9725ws00k89e，称为正向解析；根据钱包地址 bc1pk0e02kpy2kp2sngkvgpzqh6mhr50k7x2uxkgdxp467frfs9725ws00k89e 显示名称 abc.btc ，称为为反向解析。正向解析时，多个域名可以指向同一个钱包地址；但反向解析时，一个钱包地址只能显示一个名字，所以反向解析也称为主域名。

### 2.2  以最新的为准

钱包的主域名可能会发生变化，如果将不同的域名做自转操作，最后自转的那个域名会成为钱包的主域名。&#x20;

例如， 钱包A名下有 a.btc 和 b.btc, 先将 "a.btc"做自转操作，再将 "b.btc" 做自转操作，那么最终 "b.btc" 会成为钱包A的主域名。

### 2.3  协议生效的区块高度

[840000](https://mempool.space/block/0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5)

### 2.4 最大主域名长度

主域名主要用于代替可读性不好的钱包地址，因此太长的名字并不适于用于主域名。

我们将主域名的最大长度设置为 128 。

### 2.5 支持的地址类型

Native Segwit( 以bc1q开头) 和 Taproot( 以 bc1p开头).

理论上，本协议可以支持所有BTC 钱包地址格式，为了减少非本意的设置主域名操作，暂时仅支持bc1q和bc1p钱包地址格式。

## 3. 一些示例&#x20;

* 钱包A有"a.btc"，钱包将 "a.btc"做自转操作后，钱包 A 的主域名是 "a.btc"。
* &#x20;钱包A有 a.btc 和 b.btc, 先将 "a.btc"做自转操作，再将 "b.btc" 做自转操作，那么最终 "b.btc" 会成为钱包A的主域名。
* 钱包A有"a.btc"，钱包将 "a.btc"做自转操作后，将 "a.btc" 转给了钱包B, 钱包B又将"a.btc" 转给钱包A，此时钱包A没有主域名。
* 如果 Sats Names 支持本主域名协议，并且钱包A有"a.btc"和"b.sats"。钱包A 先将"a.btc"做自转操作,后将"b.sats"做自转操作，最终钱包A的主域名是"b.sats"。

## 4. API

查询一个钱包对应的主域名:&#x20;

* URL:  <https://btcnameapi.com/api/v1/primary_name/query?address={wallet_address}>&#x20;
* HTTP 方法: Get
* 目前支持的 Ordinal 域名协议: BtcName (.btc)、SatsNames（.sats）

一个返回主域名的示例:&#x20;

<https://btcnameapi.com/api/v1/primary\\_name/query?address=bc1pw9e4d928rsw2x4ma0f9z9kvptt0ycypsyuc9s049y4usha3w946snqc5yh>

```json
{
    "code": "0",
    "msg": "success",
    "data": {
        "primary_name": "163.btc"
    }
}
```

一个返回空结果的示例:

<https://btcnameapi.com/api/v1/primary\\_name/query?address=bc1pwp3aycchale8k9l6d9kquxhj86ze4dsqmkre7ufqymrq87uw66xs5us7w4>

```
{
    "code": "0",
    "msg": "success",
    "data": {
        "primary_name": ""
    }
}
```

## 5. 讨论&#x20;

本协议还处于草案阶段，欢迎通过BtcName Discord primary-name频道讨论和完善本协议。&#x20;

BtcName Discord : <https://discord.gg/eNERqJU85x>


---

# 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.btcname.id/docs/zhong-wen-she-qu/ordinals-zhu-yu-ming-xie-yi-fang-anbbeta.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.
