K1 d1 I" s; j. h% J. l' M, x随着区块链技术的快速发展,各种加密货币和代币协议不断涌现。在以太坊的 ERC-20 代币协议成为行业标准之际,比特币社区也迎来了实验性质的 BRC-20 代币标准。BRC-20 标准采用简洁、安全的设计理念,实现了代币的部署、铸造和转移。BRC-20 基于比特币网络,通过在聪(Satoshis)上记录数据的方式实现代币的发行和管理。本文将介绍 BRC-20 的原理和应用以及优势和缺陷等方面的内容,以期为读者提供全面深入的了解。
长期以来,人们觉得比特币生态相对于以太坊来说不具有扩展性,因为除了转账交易以外,区块上几乎无法保存任何数据。BRC-20 近期爆火的原因在于它是基于比特币的代币标准,将 NFT 和其他代币引入了比特币生态。
重要的里程碑:
2020 年 1 月,比特币核心开发者 Pieter Wuille 发布了 BIP 341 和 BIP 342 比特币改进提案为比特币生态带来了可能性。
2022 年 6 月,Casey Rodarmor 对 BIP 342 中的Tapscript 做了技术延伸与扩展,并且提出新的比特币改进方案ordinal (序数)和 inscription(铭文),主要实现了比特币链上存储数据的功能。
2023 年 3 月,Domodata 进行 ERC-20 实验,通过Ordinal 协议和 inscriptions 功能,向比特币链上存储 json 数据,证明链下代币余额状态,变相的实现了向比特币生态发布代币的功能。
Domodata(BRC-20 作者)认为BRC-20 标准只是个有趣的实验,通过实验向我们展示了可以通过以创建链上铭文的方式证明链下代币余额的状态。他觉得这只是一次尝试,BRC-20 标准不应该被认为是唯一标准,同时鼓励比特币社区的人们共同努力修补和优化标准,并且BRC-20 的作者还认为在比特币上发行资产目前是存在着更好的方案的。
二、BRC-20 前置知识BRC-20 是基于 Ordinal 协议的代币标准。Ordinal 协议是一种针对比特币网络的扩展协议,它允许在比特币聪上铭刻数据。基于 Ordinal 协议,BRC-20 可以实现代币的发行、转移和交易。
BRC-20 的原理相对复杂,需要了解比特币网络上的一些概念,比如聪(Satoshis)、Ordinal、Inscription 和 Taproot 升级等。其中,聪是比特币网络的最小单位,Ordinal 理论对每个聪进行编号,Inscription 则是将数据刻在每个聪上,而 Taproot 升级相关的技术则是控制这些 Inscription 的机制。这些概念共同构成了 BRC-20 标准的运作逻辑。
(一)Satoshis(聪)Satoshis(聪)不是比特币,而是比特币的最小单位, 1 个比特币可以分割成 1 亿个聪。
(二)Ordinal(序数)序数理论是一种协议,用于将序列号分配给 satoshis(比特币的最小细分),并在交易花费时跟踪这些 satoshis。这些序列号都是很大的数字,比如这个 804766073970493 。每个聪,也就是一个比特币的 ¹⁄₁₀₀₀₀₀₀₀₀,都有一个序号。
。该项目包括几个部分一个是ordinal方案对比特币的改进建议,另外一个是用 rust 开发的 ord 工具,集成了索引、区块浏览器和命令行钱包的功能。后面我们会讲解到如何通过 ord 工具包刻录自己的铭文。
(三)inscription(铭文)Ordinal 协议通过为每个聪分配唯一编号并添加注释来实现扩展功能。这个过程被称为铭文(inscription),即为聪赋予衍生含义。注释即铭文内容写在了交易见证(witnesses)当中,使得聪可以刻写任何类型的内容。铭文内容大小限制在 3.9 M 以下会比较安全,因为铭文内容是包含在交易中的,所以内容越大,铭文交易需要支付的手续费就越高。
我们可以通过下载
#打印 ord 版本号% l0 \# T6 G- X \0 L; ~; Z5 A, G
ord --version
( M O; s" |; iord wallet create& s! i7 m5 i k$ L4 y/ B" h6 j
#获取钱包地址
x3 a, Y, B! d- ~. N' M) D aord wallet receive
0 G' k" G1 r0 Q/ k/ f. ]#查看待处理交易
8 F% D1 C: z1 x( Zord wallet transactions* v( K' Y5 o' l5 y7 k1 l8 A5 Z
#创建 Inscriptions(铭文)- M4 W2 w2 y7 P2 P
ord wallet inscribe --fee-rate FEE_RATE FILE! l/ p: t/ D. L% `( T8 {2 d
#发送铭文
9 O" m, q! [# e$ }0 A" zord wallet send --fee-rate <FEE_RATE> <ADDRESS> <INSCRIPTION_ID>(四)BIP 341 和 BIP 342
BIP 341 和 BIP 342 是两个与比特币改进相关的提案。BIP 全称为 Bitcoin Improvement Proposal(比特币改进提案),用于描述比特币协议、客户端或环境的新特性、流程或规范。BIP 341 和 BIP 342 与 Taproot 升级有关,主要目的是提高比特币的隐私性和扩展性,而不是直接用于向区块链写入数据,但是 Taproot 升级可以使用比特币脚本和通过交易向区块链低成本写入数据,为 brc-20 标准进行了技术铺垫。
BIP 341 :Segregated Witness(隔离见证)输出,这个提案定义了新的输出类型,该输出类型实现了 Taproot 功能。这使得支持 Taproot 的交易可以与其他类型的交易在一个区块ZG存,同时维持向后兼容性。BIP 341 为新的输出类型提供了详细的描述和规范。
BIP 342 :Tapscript,这个提案描述了 Taproot 内部的脚本语言,称为 Tapscript。Tapscript 基于比特币的现有脚本语言,并对其进行了扩展和优化。BIP 342 定义了 Tapscript 的语法、运行环境和执行规则。这些改进使得在比特币网络中执行复杂的智能合约变得更加高效和隐私。
$ V D2 L% M4 b9 `+ ]# l5 b" y; ]
常规我们可以使用 OP_RETURN 操作码将一小段数据(最多 80 字节)附加到交易输出中,从而将数据永久写入比特币区块链中。如果需要存储更多的数据我们需要采用数据分割的方式,创建多个包含 OP_RETURN 的交易,向每个小块分别写入一段数据,这种方法会大大增加交易费用。
当 BIP 341 和 342 出现时,我们可以使用 P 2 WSH(Pay-to-Witness-Script-Hash),P 2 WSH 是 Segregated Witness(隔离见证)的一部分,他允许你创建一个比特币地址,该地址表示Witness-Script(见证脚本)的散列值,要花费这个地址的资金,必须提供满足该脚本的解锁条件的输入。具体流程如下:
1.创建一个包含您要存储的数据的见证脚本。您可以使用 OP_PUSHDATA 操作码将数据嵌入脚本中。
2.计算见证脚本的散列值(SHA-256 )。
3.使用散列值创建一个 P 2 WSH 地址。 4.创建一个比特币交易,将资金发送到 P 2 WSH 地址。
5.广播交易到比特币网络。
我们进行交易时,将解锁脚本从交易主体中分离,存储在 Witness(见证数据)中。通过该技术我们可以在任何比特区块的 Witness 部分存储高达 4 MB 的任意数据。这构成了任何比特币 Inscriptions(铭文)的上限为 4 MB。
三、BRC-20 的技术原理基于 ordinal 铭文的 BRC-20 标准,利用 Satoshis(聪)来存储和管理代币的各种信息,如代币名称、符号、总量等,将这些信息以 JSON 格式编码后写入 Satoshis(聪)中,组成了一个一个的铭文(inscriptions)。最后通过汇总所有铭文(inscriptions)的活动,便可以找到 BRC-20 通证的余额状态,从而实现了代币的部署、铸造和转账。
BRC-20 是一种基于比特币的实验性代币标准,核心思想是通过序数理论 (ordinal theory) 创建、铸造和转移 BRC-20 通证来实现在比特币区块链上进行资产管理。该实验主要包括以下几个方面:
部署(Deploy):创建 BRC-20 通证,需要设置通证参数,如代币符号、最大供应量和铸币限制等。部署过程仅用于初始化 BRC-20 ,不影响状态。
{$ C2 {8 |0 ?$ ^$ h ?' L' j
"p": "brc-20",1 Q8 |# F0 u7 M6 G4 @9 W. h Z
"op": "deploy",
: y4 H4 Q4 f' H: z( l "tick": "ordi",
" V' u. H6 y1 C7 c6 c- f2 Q0 ~ "max": "21000000",' \& Y8 X( i" p1 n2 r; o
"lim": "1000"9 {5 v" s( y7 V- q! t
}7 _! Y- J" @8 M
***************注释****************% V" b: n l) ?( h- L( ?7 w- ]" E3 \
"p": "brc-20":指定协议为 BRC-20 ,有助于其他系统识别和处理 BRC-20 事件。; S5 Z2 p5 V" t( M( M! m& o
"op": "deploy":指定操作类型为部署。
* V1 F" p: P: {$ F1 X' T; r"tick": "ordi":指定通证的 4 个字母标识符,这里用"ordi"作为演示文档中的示例,它的最大供应量已达到。0 w2 Y! k, A7 G
"max": "21000000":设置通证的最大供应量为 21, 000, 000 。- `- e! L- u, V9 S [+ A
"lim": "1000":设置每个序数的铸币限制为 1000 。
铸造(Mint):使用铸造功能铸造一定数量的 BRC-20 通证。铸造操作向铸币功能的初始所有者提供相应余额。若通证设有铸币限制,请确保不超过该限制。
{
9 X5 }& ]9 a) Z0 N "p": "brc-20",
4 w% `+ n5 l- V) } "op": "mint",, H/ a ~0 |% S" E
"tick": "ordi",
, A# {, X7 x+ q* q& }* G "amt": "1000"8 U! `& q) K* _3 W" Z7 J
}
5 c- h. N" \ O***************注释****************5 g6 r( g* y) g# q& d
"p": "brc-20":指定协议为 BRC-20 ,有助于其他系统识别和处理 BRC-20 事件。
, e+ ]7 y8 @* j/ N: {9 r; Z) y! b"op": "mint":指定操作类型为铸造。% d: r; y4 L* X- F# C0 y& \
"tick": "ordi":指定通证的 4 个字母标识符,这里用"ordi"作为示例。
7 e1 o9 U% |. a6 b2 a, t"amt": "1000":设置铸造的通证数量为 1000 。
转移(Transfer):通过转移功能转移 BRC-20 通证的一定数量。转移操作从发送者的余额中扣除通证,并将其添加至接收者的余额。转移功能仅在第一次转移时生效。
{; U! s: |, o) ^' W- ]* {
"p": "brc-20",
( k. r5 B( B4 J& T8 M) w7 H8 { "op": "transfer",
' R5 y K1 i# m! u- i3 ? "tick": "ordi",
7 c x7 S2 D( r; R6 w* U+ m "amt": "100"2 A, V7 l. U0 v1 U
}1 N6 C' e. P4 t1 l' s. T$ p
***************注释****************
5 ~: L9 }+ |$ Y4 ?"p": "brc-20":指定协议为 BRC-20 ,有助于其他系统识别和处理 BRC-20 事件。. z0 T3 ]# l: E( i) L+ M$ R: r( n, d
"op": "transfer":指定操作类型为转移。) j* ?0 M8 r: E9 Q
"tick": "ordi":指定通证的 4 个字母标识符,这里用"ordi"作为示例。
" T& j0 C( A, Z, l"amt": "100":设置转移的通证数量为 100 。
状态追踪:我们创建链上铭文(inscriptions),向其中存储符合 BRC-20 标准的 json 数据的方式,可以证明链下代币部署、铸造,转移的状态。通过汇总链上所有铭文(inscriptions)的活动,可以找到 BRC-20 代币的余额状态。
$ z+ _5 M6 `! b# v, G9 l0 b9 ^- e( w' {$ y1 w8 M; A
9 s1 A1 N9 W# p' `