介绍

This handbook is a guide to ordinal theory. Ordinal theory concerns itself with gros, giving them individual identities and allowing them to be tracked, transferred, and imbued with meaning.

Gros, not groestlcoin, are the atomic, native currency of the Groestlcoin network. One groestlcoin can be sub-divided into 100,000,000 gros, but no further.

序数理论不需要比特币区块链之外的侧链或代币,并且可以在不对比特币网络进行任何更改的情况下使用。它即刻可以有效使用。

Ordinal theory imbues gros with numismatic value, allowing them to be collected and traded as curios.

Individual gros can be inscribed with arbitrary content, creating unique Groestlcoin-native digital artifacts that can be held in Groestlcoin wallets and transferred using Groestlcoin transactions. Inscriptions are as durable, immutable, secure, and decentralized as Groestlcoin itself.

其他非常规的应用也是可能的:链下染色硬币,具有密钥轮换的公钥基础设施DNS 的去中心化替代品等等。 不过就目前而言,这样的应用是推测性的,只存在于非主流的序数理论家的脑海中。

有关序数理论的更多详细信息,请参阅 概述.

有关铭文的更多详细信息,请参阅铭文.

当您准备好亲自动手时,一个好的起点是铭文这是一种由序数理论支持的独特的数字文物。

链接

序数理论概述

Ordinals are a numbering scheme for gros that allows tracking and transferring individual gros. These numbers are called ordinal numbers. Gros are numbered in the order in which they're mined, and transferred from transaction inputs to transaction outputs first-in-first-out. Both the numbering scheme and the transfer scheme rely on order, the numbering scheme on the order in which gros are mined, and the transfer scheme on the order of transaction inputs and outputs. Thus the name, ordinals.

Technical details are available in the BIP.

序数理论不需要一个单独的代币,单独区块链,或者对比特币进行任何更改。它即刻可以有效运转。

序号有几种不同的表示方式:

  • Integer notation: 2099994106992659 The ordinal number, assigned according to the order in which the gro was mined.

  • Decimal notation: 3891094.16797 The first number is the block height in which the gro was mined, the second the offset of the gro within the block.

  • Degree notation: 3°111094′214″16797‴. We'll get to that in a moment.

  • Percentile notation: 99.99971949060254% . The gro's position in Groestlcoin's supply, expressed as a percentage.

  • Name: satoshi. An encoding of the ordinal number using the characters a through z.

Arbitrary assets, such as NFTs, security tokens, accounts, or stablecoins can be attached to gros using ordinal numbers as stable identifiers.

Ordinals is an open-source project, developed on GitHub. The project consists of a BIP describing the ordinal scheme, an index that communicates with a Groestlcoin Core node to track the location of all gros, a wallet that allows making ordinal-aware transactions, a block explorer for interactive exploration of the blockchain, functionality for inscribing gros with digital artifacts, and this manual.

稀缺度

Humans are collectors, and since gros can now be tracked and transferred, people will naturally want to collect them. Ordinal theorists can decide for themselves which gros are rare and desirable, but there are some hints…

比特币有周期性的事件,有些频繁,有些不常见,这些事件自然而然地形成了一个稀有度系统。这些周期性事件是:

  • Blocks: A new block is mined approximately every 1 minute, from now until the end of time.

  • Difficulty adjustments: Every 2016 blocks, or approximately every 1.5 days, the Groestlcoin network responds to changes in hashrate by adjusting the difficulty target which blocks must meet in order to be accepted.

  • Halvings: Every 1,050,000 blocks.

  • Cycles: Every 6 * 1,050,000 blocks.

这给了我们以下稀缺度等级:

  • common: Any gro that is not the first gro of its block
  • uncommon: The first gro of each block
  • rare: The first gro of each difficulty adjustment period
  • epic: The first gro of each halving epoch
  • legendary: The first gro of each cycle
  • mythic: The first gro of the genesis block

Which brings us to degree notation, which unambiguously represents an ordinal number in a way that makes the rarity of a gro easy to see at a glance:

A°B′C″D‴
│ │ │ ╰─ Index of gro in the block
│ │ ╰─── Index of block in difficulty adjustment period
│ ╰───── Index of block in halving epoch
╰─────── Cycle, numbered starting from 0

序数理论家通常使用 "小时", "分钟", "秒", 以及 "第三" 等专用词汇来对应的表示 A, B, C, 和 D

Now for some examples. This gro is common:

1°1′1″1‴
│ │ │ ╰─ Not first gro in block
│ │ ╰─── Not first block in difficulty adjustment period
│ ╰───── Not first block in halving epoch
╰─────── Second cycle

This gro is uncommon:

1°1′1″0‴
│ │ │ ╰─ First gro in block
│ │ ╰─── Not first block in difficulty adjustment period
│ ╰───── Not first block in halving epoch
╰─────── Second cycle

This gro is rare:

1°1′0″0‴
│ │ │ ╰─ First gro in block
│ │ ╰─── First block in difficulty adjustment period
│ ╰───── Not the first block in halving epoch
╰─────── Second cycle

This gro is epic:

1°0′1″0‴
│ │ │ ╰─ First gro in block
│ │ ╰─── Not first block in difficulty adjustment period
│ ╰───── First block in halving epoch
╰─────── Second cycle

This gro is legendary:

1°0′0″0‴
│ │ │ ╰─ First gro in block
│ │ ╰─── First block in difficulty adjustment period
│ ╰───── First block in halving epoch
╰─────── Second cycle

And this gro is mythic:

0°0′0″0‴
│ │ │ ╰─ First gro in block
│ │ ╰─── First block in difficulty adjustment period
│ ╰───── First block in halving epoch
╰─────── First cycle

If the block offset is zero, it may be omitted. This is the uncommon gro from above:

1°1′1″
│ │ ╰─ Not first block in difficulty adjustment period
│ ╰─── Not first block in halving epoch
╰───── Second cycle

Rare Gro Supply

总供给

  • common: 10.4 quadrillion
  • 非普通: 6,929,999
  • 罕见: 3437
  • 史诗: 32
  • 传奇: 5
  • 神话: 1

现有的供给量

  • common: 8.3 quadrillion
  • 非普通: 745,855
  • 稀有: 369
  • 史诗: 3
  • 传奇: 0
  • 神话: 1

At the moment, even uncommon gros are quite rare. As of this writing, 745,855 uncommon gros have been mined - one per 25.6 groestlcoin in circulation.

名字

Each gro has a name, consisting of the letters A through Z, that get shorter the further into the future the gro was mined. They could start short and get longer, but then all the good, short names would be trapped in the unspendable genesis block.

As an example, 1905530482684727°'s name is "iaiufjszmoba". The name of the last gro to be mined is "a". Every combination of 10 characters or less is out there, or will be out there, someday.

奇特的

Gros may be prized for reasons other than their name or rarity. This might be due to a quality of the number itself, like having an integer square or cube root. Or it might be due to a connection to a historical event, such as gros from block 1,439,424, the block in which SegWit activated, or 10499999999999999°, the last gro that will ever be mined.

Such gros are termed "exotic". Which gros are exotic and what makes them so is subjective. Ordinal theorists are encouraged to seek out exotics based on criteria of their own devising.

铭文

Gros can be inscribed with arbitrary content, creating Groestlcoin-native digital artifacts. Inscribing is done by sending the gro to be inscribed in a transaction that reveals the inscription content on-chain. This content is then inextricably linked to that gro, turning it into an immutable digital artifact that can be tracked, transferred, hoarded, bought, sold, lost, and rediscovered.

考古

Whether or not ordinals are of interest to NFT archaeologists is an open question! Ordinals were in fact created by Gruve-P in 2014 when he mined the Groestlcoin genesis block. In this sense, ordinals, and especially early ordinals, are certainly of historical interest.

数字文物

想象有一个实体的人工制品。 比方说,一枚稀有的硬币,在维京人的宝库的黑暗中秘密保存了无数年,现在被你亲手从地下挖了出来。 它…

…有了一个主人. 那就是您. 只要您妥善保管,就没有人能从您手中夺走它。

…是完整的。 它没有任何遗漏的部分。

…只能由您来改变。如果您是一名商人,并且您来到了 18世纪的中国,那么除您之外,无人可以在上面盖章。

……只能由您处置。 销售、交易或赠送都是您的决定,您想给谁就给谁。

什么是数字文物(数字工件、数字人工制品)? 简而言之,它们是物理人工制品的数字等价物。

要使数字化事物成为数字人工制品,它必须像您的那枚硬币:

  • 数字文物可以有所有者,因此数字不同于数字文物,因为没有人可以拥有数字。

  • 数字文物是完整的,指向 IPFS 或 Arweave 上链下内容的 NFT 是不完整的,因此不是数字文物。

  • 数字文物是无需许可的,不支付版税就不能出售的 NFT 不是无需许可的,因此不是数字文物。

  • 数字文物是不可审查的, 也许你今天可以更改集中式分类账上的数据库条目,但明天可能不行 因此一个不是数字文物

  • 数字文物是不可篡改的,带有升级密钥的NFT不是数字文物。

数字文物的定义旨在从其特定的本质上反映NFT 应该 是什么, 有时是什么, 以及铭文_始终_ 是什么

铭文

Inscriptions inscribe gros with arbitrary content, creating groestlcoin-native digital artifacts, more commonly known as NFTs. Inscriptions do not require a sidechain or separate token.

These inscribed gros can then be transferred using groestlcoin transactions, sent to groestlcoin addresses, and held in groestlcoin UTXOs. These transactions, addresses, and UTXOs are normal groestlcoin transactions, addresses, and UTXOS in all respects, with the exception that in order to send individual gros, transactions must control the order and value of inputs and outputs according to ordinal theory.

铭文内容是基于万维网标准的。铭文由内容类型(也称为 MIME 类型)和内容本身(字节串)组成。这允许从 Web 服务器返回铭文内容,并用于创建和使用HTML铭文并重新混合其他铭文内容。

铭文内容完全在链上,存储在taproot script-path spend脚本中。 Taproot 脚本对其内容的限制很少,并且额外获得见证折扣,使得铭文内容存储相对经济。

因为taproot script-path spend脚本只能从现有的 taproot 输出中产生,因此使用两阶段commit/reveal过程进行铭刻。首先,在commit中,创建一个提交到包含铭文内容的脚本的taproot 输出。 其次,在reveal交易中,使用commit交易产生的输出,来显示链上的铭文内容。

铭文内容使用未执行条件中的数据推送进行序列化,称为“信封”。信封由 OP_FALSE OP_IF … OP_ENDIF 组成,包装任意数量的数据推送。因为信封实际上是空操作,所以它们不会改变包含它们的脚本的语义,并且可以与任何其他锁定脚本结合使用。

包含字符串“Hello, world!”的文本铭文 序列化如下:

OP_FALSE
OP_IF
  OP_PUSH "ord"
  OP_PUSH 1
  OP_PUSH "text/plain;charset=utf-8"
  OP_PUSH 0
  OP_PUSH "Hello, world!"
OP_ENDIF

首先字符串ord被推送,以消除铭文与信封其他用途的歧义。

OP_PUSH 1 indicates that the next push contains the content type, and OP_PUSH 0indicates that subsequent data pushes contain the content itself. Multiple data pushes must be used for large inscriptions, as one of taproot's few restrictions is that individual data pushes may not be larger than 520 bytes.

The inscription content is contained within the input of a reveal transaction, and the inscription is made on the first gro of its input. This gro can then be tracked using the familiar rules of ordinal theory, allowing it to be transferred, bought, sold, lost to fees, and recovered.

内容

铭文的数据模型是 HTTP 响应的数据模型,允许铭文由网络服务器提供服务并在网络浏览器中查看的内容。

字段

铭文可以在可选主体之前包含字段。每个字段都包含两个数据推送,一个标签和一个值。

目前,唯一定义的字段是‘content-type’,标签为‘1’,其值是正文的 MIME 类型。

正文的开头和字段的结尾用'空数据'指示推送。

无法识别的标签的解释不同,取决于它们是否是偶数或奇数,遵循闪电网络"可以是奇数"的规则。

甚至标签也用于可能影响创建、初始分配的字段,或铭文的转移。因此,即使无法识别的铭文,字段也必须显示为"未绑定",即没有位置。

奇数标签用于不影响创建、初始的字段,分配或转移,例如附加元数据,因此是选择忽略是安全的。

铭文身份ID

铭文包含在揭示交易的输入中。为了唯一地识别他们,他们被分配了一个以下形式的 ID:

521f8eccffa4c41a3a7728dd012ea5a4a02feed81f41159231251ecf1e5c79dai0

i 的前面部分是交易ID (txid),在i之后的数字定义了新的铭文在交易总被铭刻的索引的位置 (从 0 开始)

铭文可以位于同一输入中的不同输入中,可以是同一个输入或两者的组合。在任何情况下,顺序都是明确的,因为解析器将连续检查输入并查找所有铭文信封

InputInscription CountIndices
02i0, i1
11i2
23i3, i4, i5
30
41i6

沙盒化

HTML 和 SVG 铭文被沙箱化,以防止引用链下内容,从而保持铭文的不可变性和独立性。

这是通过在“iframes”中加载 HTML 和 SVG 铭文来完成的sandbox 属性,以及提供铭文内容Content-Security-Policy”标头。

Metadata

Inscriptions may include CBOR metadata, stored as data pushes in fields with tag 5. Since data pushes are limited to 520 bytes, metadata longer than 520 bytes must be split into multiple tag 5 fields, which will then be concatenated before decoding.

Metadata is human readable, and all metadata will be displayed to the user with its inscription. Inscribers are encouraged to consider how metadata will be displayed, and make metadata concise and attractive.

Metadata is rendered to HTML for display as follows:

  • null, true, false, numbers, floats, and strings are rendered as plain text.
  • Byte strings are rendered as uppercase hexadecimal.
  • Arrays are rendered as <ul> tags, with every element wrapped in <li> tags.
  • Maps are rendered as <dl> tags, with every key wrapped in <dt> tags, and every value wrapped in <dd> tags.
  • Tags are rendered as the tag , enclosed in a <sup> tag, followed by the value.

CBOR is a complex spec with many different data types, and multiple ways of representing the same data. Exotic data types, such as tags, floats, and bignums, and encoding such as indefinite values, may fail to display correctly or at all. Contributions to ord to remedy this are welcome.

示例

Since CBOR is not human readable, in these examples it is represented as JSON. Keep in mind that this is only for these examples, and JSON metadata will not be displayed correctly.

The metadata {"foo":"bar","baz":[null,true,false,0]} would be included in an inscription as:

OP_FALSE
OP_IF
    ...
    OP_PUSH 0x05 OP_PUSH '{"foo":"bar","baz":[null,true,false,0]}'
    ...
OP_ENDIF

And rendered as:

<dl>
  ...
  <dt>metadata</dt>
  <dd>
    <dl>
      <dt>foo</dt>
      <dd>bar</dd>
      <dt>baz</dt>
      <dd>
        <ul>
          <li>null</li>
          <li>true</li>
          <li>false</li>
          <li>0</li>
        </ul>
      </dd>
    </dl>
  </dd>
  ...
</dl>

Metadata longer than 520 bytes must be split into multiple fields:

OP_FALSE
OP_IF
    ...
    OP_PUSH 0x05 OP_PUSH '{"very":"long","metadata":'
    OP_PUSH 0x05 OP_PUSH '"is","finally":"done"}'
    ...
OP_ENDIF

Which would then be concatinated into {"very":"long","metadata":"is","finally":"done"}.

溯源

铭文的所有者可以创建子铭文,在链上无需信任地建立这些子铭文的'溯源',证明它们是由父铭文的所有者创建的。这可以用于集合,父铭文的子铭文会成为同一集合的成员。

子铭文自己也可以有子铭文,从而形成复杂的层级结构。例如,一位艺术家可能创建一个代表自己的铭文,子铭文代表他们创建的合辑,而那些子铭文的子项就是合辑中的项目。

规范

为父系铭文P创建一个子铭文C:

  • 像通常一样为C创建常用的铭刻交易T。
  • 在其中的一个T输入中加入父系铭文P
  • 在C中包含标签3,即OP_PUSH 3,其值为P的序列化二进制铭文ID序列化为32字节的TXID,后跟四字节的小端INDEX,不含末尾的零。

请注意,比特币交易ID的字节在文本中的表现形式是反向的,所以序列化的交易ID会以相反的顺序呈现。

示例

子铭文的一个示例 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fi0:

OP_FALSE
OP_IF
  OP_PUSH "ord"
  OP_PUSH 1
  OP_PUSH "text/plain;charset=utf-8"
  OP_PUSH 3
  OP_PUSH 0x1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100
  OP_PUSH 0
  OP_PUSH "Hello, world!"
OP_ENDIF

请注意,标签3的值是二进制的,而不是十六进制的,主要是为了让子铭文识别出来是个子铭文,000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fi0必须作为铭文交易的输入之一

铭文ID的编码示例 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fi255:

OP_FALSE
OP_IF
  …
  OP_PUSH 3
  OP_PUSH 0x1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100ff
  …
OP_ENDIF

以及铭文 ID 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fi256:

OP_FALSE
OP_IF
  …
  OP_PUSH 3
  OP_PUSH 0x1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a090807060504030201000001
  …
OP_ENDIF

注释

标签 3 被使用是因为它是第一个可用的奇数标签。未识别的奇数标签不会使铭文无法进行绑定,因此,旧版本的ord仍可以识别和追踪子铭文。

通过销毁集合的父铭文,可以关闭一个集合,这保证了该集合中不能再发行更多的项目。

递归

沙盒化的一个重要例外是递归:访问“ord”的“/content”允许端点,允许铭文访问其他端点的内容通过请求 /content/<INSCRIPTION_ID> 来获取铭文。

这有许多有趣的用例:

  • 重新混合现有铭文的内容。

  • 将代码、图像、音频或样式表片段发布为公共的共享资源。

  • 生成艺术收藏,其中算法使用JavaScript刻写,并从具有独特种子的多个铭文中实例化。

  • 生成个人资料图片集,其中包含配件和属性刻录为单独的图像,或刻录在共享纹理图集中,然后组合,拼贴风格,在多个铭文中以独特的组合。

铭文可以访问的其他几个端点如下:

  • /blockheight:最新区块高度。
  • /blockhash:最新的块哈希。
  • /blockhash/<HEIGHT>:给定块高度的块哈希。
  • /blocktime:最新块的 UNIX 时间戳。

Pointer

In order to make an inscription on a sat other than the first of its input, a zero-based integer, called the "pointer", can be provided with tag 2, causing the inscription to be made on the sat at the given position in the outputs. If the pointer is equal to or greater than the number of total sats in the outputs of the inscribe transaction, it is ignored, and the inscription is made as usual. The value of the pointer field is a little endian integer, with trailing zeroes ignored.

An even tag is used, so that old versions of ord consider the inscription to be unbound, instead of assigning it, incorrectly, to the first sat.

This can be used to create multiple inscriptions in a single transaction on different sats, when otherwise they would be made on the same sat.

Examples

An inscription with pointer 255:

OP_FALSE
OP_IF
  OP_PUSH "ord"
  OP_PUSH 1
  OP_PUSH "text/plain;charset=utf-8"
  OP_PUSH 2
  OP_PUSH 0xff
  OP_PUSH 0
  OP_PUSH "Hello, world!"
OP_ENDIF

An inscription with pointer 256:

OP_FALSE
OP_IF
  OP_PUSH "ord"
  OP_PUSH 1
  OP_PUSH "text/plain;charset=utf-8"
  OP_PUSH 2
  OP_PUSH 0x0001
  OP_PUSH 0
  OP_PUSH "Hello, world!"
OP_ENDIF

An inscription with pointer 256, with trailing zeroes, which are ignored:

OP_FALSE
OP_IF
  OP_PUSH "ord"
  OP_PUSH 1
  OP_PUSH "text/plain;charset=utf-8"
  OP_PUSH 2
  OP_PUSH 0x000100
  OP_PUSH 0
  OP_PUSH "Hello, world!"
OP_ENDIF

序数理论常见问题

什么是序数理论

Ordinal theory is a protocol for assigning serial numbers to gros, the smallest subdivision of a groestlcoin, and tracking those gros as they are spent by transactions.

These serial numbers are large numbers, like this 804766073970493. Every gro, which is ¹⁄₁₀₀₀₀₀₀₀₀ of a groestlcoin, has an ordinal number.

序数理论是否需要一个侧链,一个单独的代币,或对比特币做出改变?

完全不需要!序数理论现在有效可用,没有侧链,唯一需要的代币是比特币本身。

序数理论有什么用?

Collecting, trading, and scheming. Ordinal theory assigns identities to individual gros, allowing them to be individually tracked and traded, as curios and for numismatic value.

Ordinal theory also enables inscriptions, a protocol for attaching arbitrary content to individual gros, turning them into groestlcoin-native digital artifacts.

序数理论是如何运作的?

Ordinal numbers are assigned to gros in the order in which they are mined. The first gro in the first block has ordinal number 0, the second has ordinal number 1, and the last gro of the first block has ordinal number 4,999,999,999.

Gros live in outputs, but transactions destroy outputs and create new ones, so ordinal theory uses an algorithm to determine how gros hop from the inputs of a transaction to its outputs.

幸运的是,这个算法非常简单。

Gros transfer in first-in-first-out order. Think of the inputs to a transaction as being a list of gros, and the outputs as a list of slots, waiting to receive a gro. To assign input gros to slots, go through each gro in the inputs in order, and assign each to the first available slot in the outputs.

让我们想象一个具有三个输入和两个输出的交易。 输入在箭头的左边,输出在右边,都标有它们的值:

[2] [1] [3] → [4] [2]

Now let's label the same transaction with the ordinal numbers of the gros that each input contains, and question marks for each output slot. Ordinal numbers are large, so let's use letters to represent them:

[a b] [c] [d e f] → [? ? ? ?] [? ?]

To figure out which gro goes to which output, go through the input gros in order and assign each to a question mark:

[a b] [c] [d e f] → [a b c d] [e f]

What about fees, you might ask? Good question! Let's imagine the same transaction, this time with a two gro fee. Transactions with fees send more gros in the inputs than are received by the outputs, so to make our transaction into one that pays fees, we'll remove the second output:

[2] [1] [3] → [4]

The gros ef现在在输出中无处可去``` [a b] [c] [d e f] → [a b c d]


So they go to the miner who mined the block as fees. [The BIP](https://github.com/Groestlcoin/ord-groestlcoin/blob/master/bip.mediawiki) has the details, but in short, fees paid by transactions are treated as extra inputs to the coinbase transaction, and are ordered how their corresponding transactions are ordered in the block. The coinbase transaction of the block might look like this:

[SUBSIDY] [e f] → [SUBSIDY e f]


## 我在哪里可以找到这些详细信息

[The BIP!](https://github.com/Groestlcoin/ord-groestlcoin/blob/master/bip.mediawiki)

## Why are gro inscriptions called "digital artifacts" instead of "NFTs"?

铭文也是一种NFT,但使用术语“数字文物”代替,因为它简单、有启发性且熟悉。

"数字文物"(数字工件,数字人工制品)这些词具有很强的暗示性,即使对以前从未听说过这个词的人来说也是如此相比之下,NFT是一个首字母缩略词,如果你以前没有听过这个术语,它就无法说明它的意思。

此外,"NFT"感觉像是金融术语,"NFT"中使用的"同质化"一词和"代币"一词的含义在金融语境之外并不常见。

## How do gro inscriptions compare to…

### 以太坊NFT

_铭文永恒不变_

铭文的创建者或铭文的所有者根本无法在创建铭文后对其进行修改。

以太坊NFTs_可以_是不可更改的,但很多都不是,且是可以由 NFT 合约所有者更改或删除。

为了确保特定的以太坊 NFT 是不可变的,必须审计合约代码,这需要详细了解 EVM 和 Solidity 语义。

对于非技术用户来说,很难确定某以太坊NFT是否可变,以太坊NFT平台也没有努力去区分NFT是否可变,以及合约源代码是否可用并已经过审计。

_铭文内容永久链上_

铭文无法引用链下内容。因为内容不会丢失,这使得铭文更加持久,也使得铭文创作者必须支付与内容大小成比例的费用。

一些以太坊 NFT 内容在链上的,但大部分内容在链下,存储在 IPFS 或 Arweave 等平台上,或传统完全中心化的网络服务器上。IPFS上的内容不保证继续可用,一些存储在IPFS上的NFT内容已经丢失。像Arweave这样的平台依赖于薄弱的经济假设,当这些经济假设不再满足时,它们很可能会发生灾难性的失败。中心化的网络服务器随时可能消失。

对于非技术用户来说,很难确定某以太坊NFT的内容存储在哪里。

_铭文要简单得多_

以太坊 NFT 依赖于以太坊网络和虚拟机,它们高度复杂、不断变化,并通过向后不兼容的硬分叉引入变化。

相反,铭文依赖于比特币区块链,它相对简单和保守,并通过向后兼容的软分叉引入变化。

_铭文更安全_

铭文继承了比特币的交易模型,允许用户在签名之前准确地看到交易中转移了哪些铭文。铭文可以使用部分签名交易进行销售,不需要允许第三方(如交易所或市场)代表用户转让它们。

相比之下,以太坊NFT受到终端用户安全漏洞的困扰。盲签交易、授予第三方应用程序对用户NFT的无限权限,以及与复杂且不可预测的智能合约交互都是司空见惯的事情。这为以太坊 NFT 用户制造了一个危险雷区,而这些对于序号理论家来说,根本毋需操心。

_铭文更加稀缺_

铭文需要比特币来铸造、转移和存储。从表面上看,这似乎是一个阻碍,但数字文物存在的价值目的正是稀缺。

另一方面,以太坊 NFT 可以通过单笔交易以几乎无限的质量进行铸造,使它们本质上不那么稀缺,因此可能没太多价值。

_铭文不会假装支持链上版税_

“链上版税”理论上是个好主意,但在实践中却行不通。 如果没有复杂和侵入性的限制,就不能在链上强制执行版税支付。以太坊 NFT 生态系统正在努力地解决围绕版税的难题,并且也在共同面对一个现实:即向艺术家传达NFT 链上版税这个利器其实是不可行的,与此同时,多个平台则在竞相删除对版税的支持。

铭文完全避免了这种情况,不虚假地承诺支持链上版税,从而避免了和以太坊NFT一样混乱又消极的状况。

_铭文开启了新的市场_

比特币的市值和流动性都大大超越以太坊。以太坊NFT无法获得此类大部分的流动性,因为许多比特币使用者出于简单性、安全性和去中心化的考虑,不愿意与以太坊生态系统进行交互。

与以太坊 NFT 相比,此类比特币拥护者可能对铭文更感兴趣,从而解锁了新的类别的收藏家。

_铭文有更丰富的数据模型_

铭文由内容类型(也称为MIME类型)和内容(任意字节字符串)组成。这相同于 web 使用的数据模型,允许铭文内容随着 web 的发展而发展,并支持 web 浏览器支持的任何类型的内容,而无需更改底层协议。

## 铭文可以为...

### 艺术家

_铭文在比特币上_ 比特币是目前地位最高、长期生存机会最大的数字货币。 如果你想保证你的艺术作品能流传到未来,没有比铭文更好的发布方式了。

_Cheaper on-chain storage._ At $0,40 per GRS and the minimum relay fee of 1 gro per vbyte, publishing inscription content costs $0.0025 per 1 million bytes.

_铭文还处于项目早期_ 铭文仍在开发中,尚未在主网上发布(建议更新)。 这使您有机会成为早期采用者,并随着媒体的发展探索它。

_铭文很简单_ 铭文不需要你编写或理解智能合约。

\_铭文解锁新的流动性_对于比特币持有者来说,铭文更容易获得,也更有吸引力,从而带来全新的收藏者。

_铭文是为数字文物设计_ 全新设计的铭文是为了支持 NFT,并具有更好的数据模型,以及全球独特符号和增强来源等功能。

_铭文不鼓励链上版税_ 这可能不是个好消息,但也取决于你如何看待它。链上版税一直是创作者的福音,但也在以太坊 NFT生态系统中造成了巨大的混乱。以太坊现在正努力解决这个问题,也是一场逐底竞赛,以实现一个“可选版税”的未来。铭文不支持链上版税,因为它们在技术上不可行。如果您选择创建铭文,有许多方法可以绕过这个限制:保留一部分铭文供未来售卖,以受益于未来的升值,或者为尊重可选版税的用户提供额外津贴。

### 收藏者

_铭文很简单_,清晰并无意外\* 它们始终是不可变的并且在链上,不需要特殊的尽职调查。

_铭文在比特币上_ 您可以使用您控制的比特币全节点轻松验证铭文的位置和属性。

### 比特币信仰者

让我在开头说明一下:比特币网络所做的最重要的事情是货币去中心化。所有其他用例都是次要的,包括序数理论。序数理论的开发者理解并承认这一点,并相信序数理论至少在很小的程度上有助于比特币的主要任务。

Digital artifacts have merit. There are, of course, a great deal of NFTs that are ugly, stupid, and fraudulent. However, there are many that are fantastically creative, and creating and collecting art has been a part of the human story since its inception, and predates even trade and money, which are also ancient technologies.

比特币提供了一个精彩的平台,以一种安全、去中心化的方式创造、收集数字文物,也以同样的方式保护了用户和艺术家,更同时提供了一个优秀的平台来发送和接收价值。

序数和铭文增加了对比特币区块空间的需求,这也增加了比特币的安全预算。这对于保障比特币向费用依赖型的安全模式过渡至关重要,因为区块补贴减半已少得微不足道。

铭文内容存储在链上,因此对用于铭文区块空间的需求是无限的。这就为所有比特币区块空间创造了一个最后买家。这将有助于支持一个强大的收费市场,从而确保比特币一直安全。

Inscriptions also counter the narrative that Groestlcoin cannot be extended or used for new use-cases. Inscriptions provide a counter argument which is easy to understand, and which targets a popular and proven use case, NFTs, which makes it highly legible.

如果像作者所希望的那样,铭文被证明是具有丰富历史的数字文物,并且受到高度追捧,它们将会成为比特币采用的强大吸引力:被乐趣、丰富的艺术吸引而来,也为去中心化的数字货币而愿意留下来。

铭文是区块空间需求的一个极其良性的来源,不像稳定币,可能会让大型发行人对比特币的未来发展产生影响;也不像DeFi,可能通过在比特币上引入MEV、数字艺术和收藏品的机会来集中挖矿。艺术是去中心化的,任何实体都不可能运用权力去破坏得了比特币。

铭文用户和服务提供商被激励运行比特币全节点,以及发布跟踪铭文,从而将他们的经济权重投向诚实的链。

序数理论和铭文不会对比特币的可替代性产生重大影响。比特币用户即使忽略这两者也不会受到影响。

我们希望序数理论能够加强、丰富比特币,并赋予它另一个维度的吸引力和功能,使其能够更有效地服务于其作为人类去中心化价值存储的主要用例。

如何为ord做贡献

建议的步骤

  1. 找到一个你想解决的问题。
  2. 弄清楚什么是解决这个问题的良好的第一步,这可以是代码,研究和提案的形式,或者是如果它已经过时,或者一开始就不是一个好主意,则建议将其关闭。
  3. 概述您所建议的第一步,对问题进行评论,并征求反馈。当然你也可以立即投入并开始编写代码或者测试。但是如果问题已经过时、未明确制定、因其他原因受阻或者未准备好实施,这一步可以避免潜在的精力浪费。
  4. 如果问题需要更改代码或者修复错误,请打开测试PR草稿,并征求反馈意见。这将保证每一个人会同步知道需要做一些什么,或者解决这个问题的第一步是什么。同样,调试是必须的,所以首先写出测试草案并确认更新是可以被容易的测试的。
  5. 随机敲击键盘直到测试通过,然后重构直到代码准备好提交。
  6. 将 PR 标记为审查就绪。
  7. 根据需要修改 PR 。
  8. 最后一步,合并!

集腋成裘

小的改变可以让你迅速的产生影响力,即便你采取了错误的策略,你也不会浪费太多的时间。

一些小问题的思路:

  • 增加新的测试或者测试案例以增加测试的覆盖率
  • 增加或者改进文档
  • 找到一个需要更多研究的问题,进行研究并在评论中进行总结
  • 找到一个过时的问题,并评论使其关闭
  • 找到一个本不该做的问题,并提供建设性的反馈,详细说明您认为会出现这种情况的原因

早合并,勤合并

将大大型的任务分成多个较小的步骤,这些步骤可以单独取的进展。如果有程序错误,您也可以打开一个PR,添加一个失败的忽略测试。这可以合并,下一步可以修复错误并忽略测试。将你的研究或者测试结果进行报告。将一个大的功能分解为小的子功能并一次一个的逐步实现它们。

弄清楚如何将一个较大的PR分解成较小的PR,每个PR都可以合并是一种非常值得练习,这也是编程的一种艺术。 困难的部分是每个PR本身必须是一个改进。

我自己努力遵循这个建议,而且当我这样做时,我总是可以做的更好。

小的更改可以快速编写、审查和合并,这比为一个需要永远编写、审查和合并的大型的PR工作要有趣得多。小的更改不会花费太多时间,因此如果您需要停止处理一个小的更改,与代表许多小时工作的较大更改相比,您不会浪费太多时间。 快速获得PR可以立即改进项目,而不必等待很长时间才能进行更大的改进。 小的更改不太可能累积合并冲突。正如雅典人所说:快者尽其所愿,慢者兼并其所必须。

寻求帮助

如果您遇到困难超过 15 分钟,请寻求帮助,例如 Rust Discord、Stack Exchange,或者在项目问题或讨论中寻求帮助。

实践'假说驱动'的调试

就导致问题的原因提出假设。 弄清楚如何检验该假设。 执行该测试。 如果有效,那太好了,您解决了问题,或者现在您知道如何解决问题了。 如果不是,请重复一个新的假设。

关注错误信息

阅读所有错误消息,不要容忍警告。

捐赠

Ordinals is an open-source project by Groestlcoin in development since early 2023.

You can donate here: https://www.groestlcoin.org/donations/

序数理论指引

See the table of contents for a list of guides, including a guide to the explorer, a guide for gro hunters, and a guide to inscriptions.

序数浏览器

The ord binary includes a block explorer. We host a instance of the block explorer on mainnet at ordinals.groestlcoin.org, and on signet at ordinals-signet.groestlcoin.org.

运行浏览器

服务器可以使用本地运行:

ord server

指定端口使用--http-port标记

ord server --http-port 8080

To enable the JSON-API endpoints add the --enable-json-api or -j flag (see here for more info):

ord --enable-json-api server

测试你的铭文你可以运行:

ord preview <FILE1> <FILE2> ...

搜索

搜索框可以使用各种对象:

区块

区块可以通过哈希来查找,例如创世区块:

00000ac5927c594d49cc0bdb81759d0da8297eb614683d3acb62f0703b639023

交易

Transactions can be searched by hash, for example, the block 1 coinbase transaction:

cf72b5842b3528fd7f3065ba9e93c50a62e84f42b3b7b7a351d910b5e353b662

输出

可以通过outpoint搜索交易输出,例如创世块coinbase交易的唯一输出:

3ce968df58f9c8a752306c4b7264afab93149dbc578bd08a42c446caaa6628bb:0

Gros

Gros can be searched by integer, their position within the entire groestlcoin supply:

2099994106992659

按十进制,它们的块和该块内的偏移量:

481824.0

按度数,他们的周期,自上次减半以来的区块,自上次难度调整以来的区块,以及区块内的偏移量:

1°0′0″0‴

按照名称,它们使用字母"a"到"z"的 26个字母组合表示:

ahistorical

或者按百分位数,在开采时已经或将要发行的比特币供应量的百分比:

100%

JSON-API

You can run ord with the --enable-json-api flag to access endpoints that return JSON instead of HTML if you set the HTTP Accept: application/json header. The structure of theses objects closely follows what is shown in the HTML. These endpoints are:

  • /inscription/<INSCRIPTION_ID>
  • /inscriptions
  • /inscriptions/block/<BLOCK_HEIGHT>
  • /inscriptions/block/<BLOCK_HEIGHT>/<PAGE_INDEX>
  • /inscriptions/<FROM>
  • /inscriptions/<FROM>/<N>
  • /output/<OUTPOINT>
  • /output/<OUTPOINT>
  • /sat/<SAT>

To get a list of the latest 100 inscriptions you would do:

curl -s -H "Accept: application/json" 'http://0.0.0.0:80/inscriptions'

To see information about a UTXO, which includes inscriptions inside it, do:

curl -s -H "Accept: application/json" 'http://0.0.0.0:80/output/bc4c30829a9564c0d58e6287195622b53ced54a25711d1b86be7cd3a70ef61ed:0'

Which returns:

{
  "value": 10000,
  "script_pubkey": "OP_PUSHNUM_1 OP_PUSHBYTES_32 156cc4878306157720607cdcb4b32afa4cc6853868458d7258b907112e5a434b",
  "address": "grs1pz4kvfpurqc2hwgrq0nwtfve2lfxvdpfcdpzc6ujchyr3ztj6gd9sfr6ayf",
  "transaction": "bc4c30829a9564c0d58e6287195622b53ced54a25711d1b86be7cd3a70ef61ed",
  "sat_ranges": null,
  "inscriptions": [
    "6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0"
  ]
}

铭文指引

Individual gros can be inscribed with arbitrary content, creating Groestlcoin-native digital artifacts that can be held in a Groestlcoin wallet and transferred using Groestlcoin transactions. Inscriptions are as durable, immutable, secure, and decentralized as Groestlcoin itself.

Working with inscriptions requires a Groestlcoin full node, to give you a view of the current state of the Groestlcoin blockchain, and a wallet that can create inscriptions and perform gro control when constructing transactions to send inscriptions to another wallet.

Groestlcoin Core provides both a Groestlcoin full node and wallet. However, the Groestlcoin Core wallet cannot create inscriptions and does not perform gro control.

This requires ord, the ordinal utility. ord doesn't implement its own wallet, so ord wallet subcommands interact with Groestlcoin Core wallets.

本指南涵盖:

  1. 安装 Groestlcoin Core
  2. 同步比特币区块链
  3. 创建 Groestlcoin Core 钱包
  4. Using ord wallet receive to receive gros
  5. 使用ord wallet inscribe创建铭文
  6. 使用 ord wallet send发送铭文
  7. 使用ord wallet receive收取铭文

寻求帮助

If you get stuck, try asking for help on the Groestlcoin Discord Server, or checking GitHub for relevant issues.

安装 Groestlcoin Core

Groestlcoin Core is available from groestlcoin.org.

制作铭文需要Groestlcoin Core 24 或者更新版本。

This guide does not cover installing Groestlcoin Core in detail. Once Groestlcoin Core is installed, you should be able to run groestlcoind -version successfully from the command line. Do NOT use groestlcoin-qt.

配置 Groestlcoin Core

ord requires Groestlcoin Core's transaction index and rest interface.

配置你的Groestlcoin Core阶段去维护一个交易索引,需要在groestlcoin.conf里面添加:

txindex=1

或者, 运行 groestlcoind-txindex:

groestlcoind -txindex

Details on creating or modifying your groestlcoin.conf file can be found here.

比特币区块同步

区块同步,运行:

groestlcoind -txindex

…直到运行 getblockcount:

groestlcoin-cli getblockcount

像区块链浏览器the mempool.space block explorer一样对区块进行记述. ordgroestlcoind进行交互, 所以你在使用ord时候需要让groestlcoind 在后台运行。

The blockchain takes about 600GB of disk space. If you have an external drive you want to store blocks on, use the configuration option blocksdir=<external_drive_path>. This is much simpler than using the datadir option because the cookie file will still be in the default location for groestlcoin-cli and ord to find.

故障排除

Make sure you can access groestlcoind with groestlcoin-cli -getinfo and that it is fully synced.

If groestlcoin-cli -getinfo returns Could not connect to the server, groestlcoind is not running.

Make sure rpcuser, rpcpassword, or rpcauth are NOT set in your groestlcoin.conf file. ord requires using cookie authentication. Make sure there is a file .cookie in your groestlcoin data directory.

If groestlcoin-cli -getinfo returns Could not locate RPC credentials, then you must specify the cookie file location. If you are using a custom data directory (specifying the datadir option), then you must specify the cookie location like groestlcoin-cli -rpccookiefile=<your_groestlcoin_datadir>/.cookie -getinfo. When running ord you must specify the cookie file location with --cookie-file=<your_groestlcoin_datadir>/.cookie.

Make sure you do NOT have disablewallet=1 in your groestlcoin.conf file. If groestlcoin-cli listwallets returns Method not found then the wallet is disabled and you won't be able to use ord.

Make sure txindex=1 is set. Run groestlcoin-cli getindexinfo and it should return something like

{
  "txindex": {
    "synced": true,
    "best_block_height": 776546
  }
}

If it only returns {}, txindex is not set. If it returns "synced": false, groestlcoind is still creating the txindex. Wait until "synced": true before using ord.

If you have maxuploadtarget set it can interfere with fetching blocks for ord index. Either remove it or set whitebind=127.0.0.1:1331.

安装 ord

The ord utility is written in Rust and can be built from source. Pre-built binaries are available on the releases page.

你也可以在命令行中使用下面命令来安装最新的文件:

curl --proto '=https' --tlsv1.2 -fsLS https://raw.githubusercontent.com/Groestlcoin/ord-groestlcoin/master/install.sh | bash -s

ord 成功安装以后,你可以运行 :

ord --version

这会返回 ord的版本信息.

创建一个Groestlcoin Core钱包

ord 使用Groestlcoin Core来管理私钥,签署交易以及向比特币网络广播交易。

创建一个名为ord 的Groestlcoin Core 钱包,运行:

ord wallet create

Receiving Gros

Inscriptions are made on individual gros, using normal Groestlcoin transactions that pay fees in gros, so your wallet will need some gros.

为你的 ord 钱包创建一个新地址,运行:

ord wallet receive

向上面地址发送一些资金。

你可以使用以下命令看到交易情况:

ord wallet transactions

一旦交易确认,你应该可以使用 ord wallet outputs看到交易的输出;

创建铭文内容

Gros can be inscribed with any kind of content, but the ord wallet only supports content types that can be displayed by the ord block explorer.

另外,铭文是包含在交易中的,所以内容越大,铭文交易需要支付的费用就越高。

铭文内容包含在交易见证中,获得见证折扣。要计算写入交易将支付的大概费用,请将内容大小除以四,然后乘以费率。

铭文交易必须少于 400,000 个权重计量单位,否则不会被 Groestlcoin Core 中继。一个字节的铭文内容需要一个权重计量单位。 由于铭文交易不只是铭文内容,铭文内容限制在400,000权重计量单位以内。390,000 个权重计量单位应该是安全的。

创建铭文

FILE的内容创建一个铭文,需要运行:

ord wallet inscribe --fee-rate FEE_RATE FILE

Ord会输出两个交易ID,一个是commit交易,一个是reveal交易,还有铭文ID。铭文 ID 的格式为TXIDiN,其中TXID 是揭示交易的交易 ID,N 是揭示交易中铭文的索引。

The commit transaction commits to a tapscript containing the content of the inscription, and the reveal transaction spends from that tapscript, revealing the content on chain and inscribing it on the first gro of the input that contains the corresponding tapscript.

Wait for the reveal transaction to be mined. You can check the status of the commit and reveal transactions using the esplora block explorer.

一旦reveal交易完成记账,你可以使用以下命令查询铭文ID:

ord wallet inscriptions

Parent-Child Inscriptions

Parent-child inscriptions enable what is colloquially known as collections, see provenance for more information.

To make an inscription a child of another, the parent inscription has to be inscribed and present in the wallet. To choose a parent run ord wallet inscriptions and copy the inscription id (<PARENT_INSCRIPTION_ID>).

Now inscribe the child inscription and specify the parent like so:

ord wallet inscribe --fee-rate FEE_RATE --parent <PARENT_INSCRIPTION_ID> CHILD_FILE

This relationship cannot be added retroactively, the parent has to be present at inception of the child.

发送铭文

铭文接收方使用一下命令生成地址

ord wallet receive

使用命令格式发送铭文:

ord wallet send --fee-rate <FEE_RATE> <ADDRESS> <INSCRIPTION_ID>

检查未完成交易情况:

ord wallet transactions

一旦交易确认,接收方可以使用一下命令查看接收到的铭文

ord wallet inscriptions

接收铭文

使用以下命令生成一个新的接收地址

ord wallet receive

发送方使用命令发送铭文到你的地址

ord wallet send ADDRESS INSCRIPTION_ID

检查未完成交易情况:

ord wallet transactions

一旦交易确认,你可以使用以下命令确认收到

ord wallet inscriptions

Gro Hunting

This guide is out of date. Since it was written, the ord binary was changed to only build the full gro index when the --index-sats flag is supplied. Additionally, ord now has a built-in wallet that wraps a Groestlcoin Core wallet. See ord wallet --help.

Ordinal hunting is difficult but rewarding. The feeling of owning a wallet full of UTXOs, redolent with the scent of rare and exotic gros, is beyond compare.

Ordinals are numbers for gros. Every gro has an ordinal number and every ordinal number has a gro.

Preparation

There are a few things you'll need before you start.

  1. First, you'll need a synced Groestlcoin Core node with a transaction index. To turn on transaction indexing, pass -txindex on the command-line:

    groestlcoind -txindex
    

    Or put the following in your Groestlcoin configuration file:

    txindex=1
    

    Launch it and wait for it to catch up to the chain tip, at which point the following command should print out the current block height:

    groestlcoin-cli getblockcount
    
  2. Second, you'll need a synced ord index.

    • Get a copy of ord from the repo.

    • Run RUST_LOG=info ord index. It should connect to your groestlcoin core node and start indexing.

    • Wait for it to finish indexing.

  3. Third, you'll need a wallet with UTXOs that you want to search.

Searching for Rare Ordinals

Searching for Rare Ordinals in a Groestlcoin Core Wallet

The ord wallet command is just a wrapper around Groestlcoin Core's RPC API, so searching for rare ordinals in a Groestlcoin Core wallet is Easy. Assuming your wallet is named foo:

  1. Load your wallet:

    groestlcoin-cli loadwallet foo
    
  2. Display any rare ordinals wallet foo's UTXOs:

    ord wallet sats
    

Searching for Rare Ordinals in a Non-Groestlcoin Core Wallet

The ord wallet command is just a wrapper around Groestlcoin Core's RPC API, so to search for rare ordinals in a non-Groestlcoin Core wallet, you'll need to import your wallet's descriptors into Groestlcoin Core.

Descriptors describe the ways that wallets generate private keys and public keys.

You should only import descriptors into Groestlcoin Core for your wallet's public keys, not its private keys.

If your wallet's public key descriptor is compromised, an attacker will be able to see your wallet's addresses, but your funds will be safe.

If your wallet's private key descriptor is compromised, an attacker can drain your wallet of funds.

  1. Get the wallet descriptor from the wallet whose UTXOs you want to search for rare ordinals. It will look something like this:

    wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)#csvefu29
    
  2. Create a watch-only wallet named foo-watch-only:

    groestlcoin-cli createwallet foo-watch-only true true
    

    Feel free to give it a better name than foo-watch-only!

  3. Load the foo-watch-only wallet:

    groestlcoin-cli loadwallet foo-watch-only
    
  4. Import your wallet descriptors into foo-watch-only:

    groestlcoin-cli importdescriptors \
      '[{ "desc": "wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)#tpnxnxax", "timestamp":0 }]'
    

    If you know the Unix timestamp when your wallet first started receive transactions, you may use it for the value of "timestamp" instead of 0. This will reduce the time it takes for Groestlcoin Core to search for your wallet's UTXOs.

  5. Check that everything worked:

    groestlcoin-cli getwalletinfo
    
  6. Display your wallet's rare ordinals:

    ord wallet sats
    

Searching for Rare Ordinals in a Wallet that Exports Multi-path Descriptors

Some descriptors describe multiple paths in one descriptor using angle brackets, e.g., <0;1>. Multi-path descriptors are not yet supported by Groestlcoin Core, so you'll first need to convert them into multiple descriptors, and then import those multiple descriptors into Groestlcoin Core.

  1. First get the multi-path descriptor from your wallet. It will look something like this:

    wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/<0;1>/*)#fw76ulgt
    
  2. Create a descriptor for the receive address path:

    wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)
    

    And the change address path:

    wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/1/*)
    
  3. Get and note the checksum for the receive address descriptor, in this case tpnxnxax:

    groestlcoin-cli getdescriptorinfo \
      'wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)'
    
    {
      "descriptor": "wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)#csvefu29",
      "checksum": "tpnxnxax",
      "isrange": true,
      "issolvable": true,
      "hasprivatekeys": false
    }
    

    And for the change address descriptor, in this case 64k8wnd7:

    groestlcoin-cli getdescriptorinfo \
      'wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/1/*)'
    
    {
      "descriptor": "wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/1/*)#fyfc5f6a",
      "checksum": "64k8wnd7",
      "isrange": true,
      "issolvable": true,
      "hasprivatekeys": false
    }
    
  4. Load the wallet you want to import the descriptors into:

    groestlcoin-cli loadwallet foo-watch-only
    
  5. Now import the descriptors, with the correct checksums, into Groestlcoin Core.

    groestlcoin-cli \
     importdescriptors \
     '[
       {
         "desc": "wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)#tpnxnxax"
         "timestamp":0
       },
       {
         "desc": "wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/1/*)#64k8wnd7",
         "timestamp":0
       }
     ]'
    

    If you know the Unix timestamp when your wallet first started receive transactions, you may use it for the value of the "timestamp" fields instead of 0. This will reduce the time it takes for Groestlcoin Core to search for your wallet's UTXOs.

  6. Check that everything worked:

    groestlcoin-cli getwalletinfo
    
  7. Display your wallet's rare ordinals:

    ord wallet sats
    

Exporting Descriptors

麻雀钱包

Navigate to the Settings tab, then to Script Policy, and press the edit button to display the descriptor.

Transferring Ordinals

The ord wallet supports transferring specific gros. You can also use groestlcoin-cli commands createrawtransaction, signrawtransactionwithwallet, and sendrawtransaction, how to do so is complex and outside the scope of this guide.

收藏

Currently, ord is the only wallet supporting gro-control and gro-selection, which are required to safely store and send rare gros and inscriptions, hereafter ordinals.

发送、接收和存储序号的推荐方法是使用 ord,但如果你小心,可以安全地存储,在某些情况下,使用其他钱包发送序号。

作为一般说明,在不受支持的钱包中接收序号并不危险。 序号可以发送到任何比特币地址,只要包含它们的 UTXO 没有被花费,它就是安全的。 但是,如果该钱包随后用于发送比特币,它可能会选择包含序号的 UTXO 作为输入,并发送铭文或将其用于费用。

A guide to creating an ord-compatible wallet with Sparrow-GRS Wallet, is available in this handbook.

Please note that if you follow this guide, you should not use the wallet you create to send GRS, unless you perform manual coin-selection to avoid sending ordinals.

使用麻雀Sparrow钱包收藏铭文

Users who cannot or have not yet set up the ord wallet can receive inscriptions and ordinals with alternative groestlcoin wallets, as long as they are very careful about how they spend from that wallet.

本指南提供了一些基本步骤,说明如何使用 Sparrow Wallet 创建一个与ord兼容的钱包,稍后可以将其导入到ord

⚠️⚠️ 警告!! ⚠️⚠️

一般来说,如果你选择这种方法,你应该将这个钱包作为接收款项的钱包,使用Sparrow软件。

Do not spend any gros from this wallet unless you are sure you know what you are doing. You could very easily inadvertently lose access to your ordinals and inscriptions if you don't heed this warning.

钱包设置和接收

根据你的操作系统从 发布页面 下载Sparrow钱包。

选择 File -> New Wallet并创建一个名为ord的新钱包。

Script Type更改为Taproot (P2TR),然后选择New or Imported Software Wallet选项。

选择Use 12 Words,然后点击 Generate New。密码短语留空。

将为你生成一个新的12词BIP39种子短语。将此短语写在安全的地方,这是获取钱包访问权限的备份。切勿与他人分享或显示这个种子短语。

一旦你把种子短语写下来,点击 Confirm Backup.

重新输入你记下的种子短语,然后点击 Create Keystore.

点击 Import Keystore.

点击 Apply。如果你想的话,可以为钱包添加一个密码。

你现在有了一个兼容ord的钱包,可以使用BIP39种子短语导入到 ord。要接收序数或铭文,点击 Receive选项卡并复制一个新地址。

每次你想接收时,都应该使用一个全新的地址,而不是重复使用现有的地址。

注意,比特币与一些其他区块链钱包不同,这个钱包可以生成无限数量的新地址。你可以通过点击获取下一个地址按钮生成新地址。你可以在应用程序的Addresses选项卡中看到所有的地址。

你可以给每个地址添加一个标签,这样你就可以跟踪它的用途。

验证/查看收到的铭文

一旦你收到一条铭文,你将在 Sparrow 的 Transactions 选项卡中看到一个新的交易,以及在UTXOs选项卡中看到一个新的 UTXO。

最初,这笔交易可能有一个"未确认"的状态,你需要等待它被挖矿到一个比特币块中,才算真正收到。

要跟踪你的交易状态,你可以右键点击它,选择Copy Transaction ID,然后将该交易 id 粘贴到 mempool.space

Once the transaction has confirmed, you can validate and view your inscription by heading over to the UTXOs tab, finding the UTXO you want to check, right-clicking on the Output and selecting Copy Transaction Output. This transaction output id can then be pasted into the ordinals.groestlcoin.org search.

冻结 UTXO

如上所述,你的每一条铭文都存储在一个未花费的交易输出 (UTXO) 中。你需要非常小心不要意外花费你的铭文,而冻结 UTXO 是使这种情况发生的难度增加的一种方式。

要做到这一点,去 UTXOs 选项卡,找到你想要冻结的 UTXOs,右键点击 Output 并选择Freeze UTXO

这个 UTXO (铭文) 现在在 Sparrow 钱包中是不可消费的,直到你解冻它。

导入 ord 钱包

关于设置比特币核心和 ord 钱包的详细信息,请查看铭文指南

设置 ord 时,你可以使用 ord wallet restore "BIP39 SEED PHRASE" 命令和你用Sparrow Wallet生成的种子短语,导入你现有的钱包,而不是运行 ord wallet create 来创建一个全新的钱包。

There is currently a bug which causes an imported wallet to not be automatically rescanned against the blockchain. To work around this you will need to manually trigger a rescan using the groestlcoin core cli: groestlcoin-cli -rpcwallet=ord rescanblockchain 767430

然后,你可以使用ord wallet inscriptions检查你的钱包的铭文.

注意,如果你之前已经用 ord 创建过一个钱包,那么你已经有一个默认名称的钱包,需要给你导入的钱包取一个不同的名称。你可以在所有的 ord命令中使用 --wallet 参数来引用不同的钱包,例如:

ord --wallet ord_from_sparrow wallet restore "BIP39 SEED PHRASE"

ord --wallet ord_from_sparrow wallet inscriptions

groestlcoin-cli -rpcwallet=ord_from_sparrow rescanblockchain 767430

使用麻雀钱包发送铭文

⚠️⚠️ 警告 ⚠️⚠️

虽然强烈建议你设置一个比特币核心节点并运行 ord 软件,但是你可以通过一些安全的方式在 Sparrow 钱包中发送铭文。请注意,这并不推荐,只有在你完全理解你正在做什么的情况下才能这么做。

使用 ord 软件将大大简化我们在这里描述的复杂性,因为它能以一种简单的方式自动并安全地处理发送铭文。

⚠️⚠️ 额外警告 ⚠️⚠️

不要用你的sparrow麻雀铭文钱包去发送非铭文比特币。如果你需要进行普通的比特币交易,你可以在麻雀中设置一个单独的钱包,并保持你的铭文钱包独立。

比特币的UTXO模型

Before sending any transaction it's important that you have a good mental model for groestlcoin's Unspent Transaction Output (UTXO) system. The way Groestlcoin works is fundamentally different to many other blockchains such as Ethereum. In Ethereum generally you have a single address in which you store ETH, and you cannot differentiate between any of the ETH - it is just all a single value of the total amount in that address. Groestlcoin works very differently in that we generate a new address in the wallet for each receive, and every time you receive gros to an address in your wallet you are creating a new UTXO. Each UTXO can be seen and managed individually. You can select specific UTXO's which you want to spend, and you can choose not to spend certain UTXO's.

有些比特币钱包并不显示这个级别的详细信息,它们只向你显示钱包中所有比特币的单一总和值。然而,当发送铭文时,使用如麻雀这样允许UTXO控制的钱包非常重要。

在发送之前检查你的铭文

Like we have previously described inscriptions are inscribed onto gros, and gros are stored within UTXOs. UTXO's are a collection of gros with some particular value of the number of gros (the output value). Usually (but not always) the inscription will be inscribed on the first gro in the UTXO.

When inspecting your inscription before sending the main thing you will want to check is which gro in the UTXO your inscription is inscribed on.

To do this, you can follow the Validating / Viewing Received Inscriptions described above to find the inscription page for your inscription on ordinals.groestlcoin.org

在那里,你会找到一些关于你铭文的元数据,如下所示:

以下是需要检查的几个重要事项:

  • output 标识符与您将要发送的UTXO的标识符匹配
  • The offset of the inscription is 0 (this means that the inscription is located on the first gro in the UTXO)
  • the output_value has enough gros to cover the transaction fee (postage) for sending the transaction. The exact amount you will need depends on the fee rate you will select for the transaction

如果以上所有内容对于您的铭文都是正确的,那么您应该可以安全地使用以下方法发送它。

⚠️⚠️ 发送铭文时要非常小心,特别是如果offset 值不是0。如果是这种情况,不建议使用这种方法,否则您可能会无意中将您的雕文发送给比特币矿工,除非您知道自己在做什么。

发送您的铭文

要发送铭文,请导航到UTXOs选项卡,并找到您之前验证包含您的雕文的UTXO。

如果您之前冻结了UXTO,您将需要右键单击它并解冻它。

选择您想要发送的UTXO,并确保这是唯一选中的UTXO。在界面中,您应该看到UTXOs 1/1。确定这个后,您可以点击Send Selected

然后,您将看到交易构建界面。在这里,您需要检查几件事以确保这是一个安全的发送:

  • 交易应该只有1个输入,这应该是您想要发送的带有标签的UTXO
  • 交易应该只有1个输出,这是您想要发送铭文的地址/标签

如果您的交易看起来与此不同,例如您有多个输入或多个输出,那么这可能不是一种安全的铭文传输方式,您应该放弃发送,直到您更了解或可以导入到ord钱包。

您应该设置合适的交易费用,Sparrow通常会推荐一个合理的费用,但您也可以查看mempool.space 以查看发送交易的推荐费率。

您应该为收件人地址添加一个标签,如alice address for inscription #123就很理想。

在使用上述检查确认交易是安全的交易,并且有信心发送它后,您可以点击Create Transaction

在这里,您可以再次确认您的交易是否安全,在确认后,您可以点击Finalize Transaction for Signing

在这里,你可以在点击Sign之前再次确认所有内容。

然后实际上在点击Broadcast Transaction之前,你有最后一次检查所有内容的机会。一旦你广播交易,它就会被发送到比特币网络,并开始在mempool中传播。

如果你想跟踪你的交易状态,你可以复制Transaction Id (Txid)并粘贴到mempool.space

Once the transaction has confirmed you can check the inscription page on ordinals.groestlcoin.org to validate that it has moved to the new output location and address.

故障排除

Sparrow钱包没有显示交易/UTXO,但我在mempool.space上看到了

确保你的钱包连接到一个比特币节点。要验证这一点,转到Preferences-> Server 设置,并点击 Edit Existing Connection

从那里你可以选择一个节点并点击 Test Connection 来验证Sparrow是否能够成功连接。

调试

Ord can be tested using the following flags to specify the test network.

大多数在铭文浏览器 中的 ord命令可以使用以下网络标志运行:

NetworkFlag
Testnet--testnet or -t
Signet--signet or -s
Regtest--regtest or -r

Regtest不需要下载区块链或者建立ord索引

示例

在regtest里运行groestlcoind,使用:

groestlcoind -regtest -txindex

在regtest里创建钱包

ord -r wallet create

创建一个regtest接收地址

ord -r wallet receive

挖取101个区块(解锁coinbase)使用:

groestlcoin-cli -regtest generatetoaddress 101 <receive address>

在regtest上铭刻

ord -r wallet inscribe --fee-rate 1 <file>

挖取铭文

groestlcoin-cli -regtest generatetoaddress 1 <receive address>

在regtest浏览器里查看铭文

ord -r server

测试递归

When testing out recursion, inscribe the dependencies first (example with p5.js):

ord -r wallet inscribe --fee-rate 1 p5.js

这应该返回一个inscription_id,然后您可以在递归铭文中引用它。

请注意,在主网和signet上铭刻的时候这些id有所不同,因此请务必更改每个链的递归铭文中的内容。

现在你可以使用以下命令来铭刻你的递归铭文:

ord -r wallet inscribe --fee-rate 1 recursive-inscription.html

最终你可以挖取一些区块来开始服务器:

groestlcoin-cli generatetoaddress 6 <receive address>
ord -r server

调节

ord 包含了一个区块浏览器,你可以在本地运行ord server.

区块浏览器允许查看铭文。铭文是用户生成的内容,因此可能令人反感或非法的。

运行ord区块浏览器实例的每个人都有责任了解他们对非法内容的责任,并决定适合他们实例的审核政策。

为了防止特定的铭文显示在ord实例上,它们可以包含在 YAML 配置文件中,该文件使用 --config选项加载。

要隐藏铭文,首先创建一个配置文件,其中包含要隐藏的铭文 ID:

hidden:
- 0000000000000000000000000000000000000000000000000000000000000000i0

ord 配置文件的建议名称是 ord.yaml,但可以使用任何文件名。

然后将文件在服务启动的使用使用 --config :

ord --config ord.yaml server

请注意, --config 选项的位置在 ord 之后但是在 server子命令前。

ord 必须重启才可以加载在配置文件中的更改。

ordinals.groestlcoin.org

The ordinals.groestlcoin.org instances use systemd to run the ord server service, which is called ord, with a config file located at /var/lib/ord/ord.yaml.

To hide an inscription on ordinals.groestlcoin.org:

  1. 使用SSH登陆服务器
  2. /var/lib/ord/ord.yaml中增加铭文ID
  3. 使用 systemctl restart ord 重启服务
  4. 通过 journalctl -u ord 重启

目前,ord 重启速度较慢,因此站点不会立即恢复在线。

重新索引

有时必须重新索引‘ord’数据库,这意味着删除数据库并使用 ord index updateord server来重新索引数据库。重新索引的原因是:

  1. ord 发布新的主要版本,更改了数据库架构
  2. 数据库可能会损坏

ord 使用的数据库称为 redb,所以我们为索引指定默认文件名‘index.redb’。默认情况下我们存储根据您的操作系统,此文件位于不同的位置。

平台Value示例
Linux$XDG_DATA_HOME/ord or $HOME/.local/share/ord/home/alice/.local/share/ord
macOS$HOME/Library/Application Support/ord/Users/Alice/Library/Application Support/ord
Windows{FOLDERID_RoamingAppData}\ordC:\Users\Alice\AppData\Roaming\ord

因此,要在 MacOS 上删除数据库并重新索引,您必须在终端中执行以下命令:

rm ~/Library/Application Support/ord/index.redb
ord index update

您当然也可以自己设置数据目录的位置,ord --data-dir <DIR> index update 或为其指定特定的文件名和路径,使用‘ord --index 索引运行’。

Ordinals赏金计划提示

  • The ord wallet can send and receive specific gros. Additionally, ordinal theory is extremely simple. A clever hacker should be able to write code from scratch to manipulate gros using ordinal theory in no time.

  • For more information about ordinal theory, check out the FAQ for an overview, the BIP for the technical details, and the ord repo for the ord wallet and block explorer.

  • Satoshi was the original developer of ordinal theory. However, he knew that others would consider it heretical and dangerous, so he hid his knowledge, and it was lost to the sands of time. This potent theory is only now being rediscovered. You can help by researching rare gros.

祝您一切顺利,好运!

赏金任务 0

标准

Send a gro whose ordinal number ends with a zero to the submission address:

✅: 1857578125803250

❌: 1857578125803251

The gro must be the first gro of the output you send.

奖励

100,000 gros

提交地址

No longer accepting submissions.

状态

仍然有效!

赏金任务 1

标准

The transaction that submits a UTXO containing the oldest gro, i.e., that with the lowest number, amongst all submitted UTXOs will be judged the winner.

奖励

200,000 gros

提交地址

No longer accepting submissions.

状态

仍然有效!

赏金任务 2

标准

发送一个不普通的 gro to the submission address:

✅: 347100000000000

❌: 6685000001337

在提交之前确认上述地址并未在你之前收到其他的稀有聪,只有第一个成功的提交可以获得奖励;

奖励

300,000 gros

提交地址

No longer accepting submissions.

状态

仍然有效!

赏金任务 3

标准

Ordinal bounty 3 has two parts, both of which are based on ordinal names. Ordinal names are a modified base-26 encoding of ordinal numbers. To avoid locking short names inside the unspendable genesis block coinbase reward, ordinal names get shorter as the ordinal number gets longer. The name of gro 0, the first gro to be mined is nvtdijuwxlp and the name of gro 2,099,999,997,689,999, the last gro to be mined, is a.

Both parts use frequency.tsv, a list of words and the number of times they occur in the Google Books Ngram dataset. filtered to only include the names of gros which will have been mined by the end of the submission period, that appear at least 5000 times in the corpus.

frequency.tsv 制表符分割值的文件,第一列是单词,第二列是它在语料库里出现的次数。这些条目从出现频率最低到出现频率最高的顺序进行排序。

frequency.tsv 使用了这个程序进行的编译.

To search an ord wallet for gros with a name in frequency.tsv, use the following ord command:

ord wallet sats --tsv frequency.tsv

This command requires the gro index, so --index-sats must be passed to ord when first creating the index.

第0部分

Rare gros pair best with rare words.

The transaction that submits the UTXO containing the gro whose name appears with the lowest number of occurrences in frequency.tsv shall be the winner of part 0.

第1部分

人气是价值的源泉

The transaction that submits the UTXO containing the gro whose name appears with the highest number of occurrences in frequency.tsv shall be the winner of part 1.

平局情况

在平局情况下,如果两个提交的出现了相同的频率,则以较早者提交为获胜者。

奖励

  • Part 0: 200,000 gros
  • Part 1: 200,000 gros
  • Total: 400,000 gros

提交地址

No longer accepting submissions.

状态

仍然有效!