> For the complete documentation index, see [llms.txt](https://docs.btcname.id/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.btcname.id/docs/zhong-wen-she-qu/ordinals-zhu-yu-ming-xie-yi-fang-anbbeta.md).

# 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>
