作者:林冠宏 / 指尖下的幽灵。转载者,请: 务必标明出处。
GitHub : github.com/af913337456...
出版的书籍:
BRC-20标准的本质
BRC-20
标准是在 Ordinals 协议
的基础上提出的一种数据存储标准
,应用在 BTC 链上。
由于这种标准被应用到了 Token 经济
中,所以人们又叫它为BTC-Token标准
。
无论如何,我们只需要知道,它是定义了一种数据存储格式就行了。
至于Ordinals 协议是什么,可以去看这篇文章的介绍:Ordinals 协议介绍
BTC链的数据存储方案
关于在比特币链上存储数据的技术方案,早在几年前我参与开发的一个公司 DApp 的时候曾思考并实践过其中的一种,直到现在也是只有两种本质级别的方案:
- 存储在操作码
OP_RETURN [data]
所携带的数据域; - 存在到
隔离见证(SegWit)
数据中。
关于 OP_RETURN 的深入解析在我第二本书中有单独的一章讲解它,涉及到如何使用来构造轻量级 DApp,OP_RETURN 所携带的数据量是有限的,对于重型 DApp 是不适用的,但它的好处是数据完全存储在链上。
相反,隔离见证(SegWit)
是存储在链下的,注意这里的重点:链下。
隔离见证(SegWit) 的由来
2017年以前,比特币交易的签名数据被包含在交易数据中,这种机制长远去看是有缺陷的,即当网络交易量大的时候,链上区块空间会被交易数据占大头导致区块膨胀,从而影响比特币全网的性能。
为了讲解这个问题,BTC的核心开发者们提出了隔离见证
技术方案。做法是将比特币的签名数据单独抽出来,不再放到交易数据中,放到节点本地,这样交易数据量就大大减少从而解决问题。
签名是交易的核心数据,存储到本地后如何参与验证签名呢?做法是将签名数据存储到一个 见证区块(Witness Block)
的数据结构中。当交易需要被验证签名的时候,就会把见证区块进行一次哈希计算,哈希值会被加入到交易数据中参与整体验证。
当节点本地的签名数据被修改,就会导致整个哈希计算不一致,自然地这笔交易就无法上链而被踢出区块交易组。
更多阅读:比特币技术 --- 交易的验签原理
BRC-20标准及数据存储位置
它定义了如下的基础 Json 结构:
json
{
"p": "brc-20",
"op": "mint",
"tick": "ordi",
"amt": "1000",
"max": "210000",
"lim": "10",
"des": "1",
}
字段解析如下。
- p 协议名称。protocol 的首字母,告知解析器这是 BRC-20;
- op 操作名称。operation 前两个字母,现在包含的取值有:
- deploy 部署,代表部署 Token
- mint 铸造,铸造/生产 Token
- transfer 转移,转账 token
- tick 名称,比如 Ordi,四个字母标识符,可以是 emoji;
- amt 数量,当 op = tranfer 的时候用到;
- max 最大供应,当 op = deploy 的时候用到;
- lim 每次铸造时的数量限制,为最大值,当 op = mint 的时候用到;
- des 精度
BRC-20 的数据存储
位置在:隔离见证(SegWit)
BRC-20转账接收者
由于每次 BRC 的转账操作都是一笔 BTC 交易,我们可以指定交易的最小 BTC 数值是 1 sat,自然地,sat 的接收地址,就是这一次 BRC 转账的接收地址。
BRC-20的有效规则
部署规则
观察到上面的 deploy
操作可以想象到如果同一个 tick
被重复部署,那么在 Token 经济价值的角度上去看,应该认同哪一个呢?
一般来说,是遵循部署性质的先来后到,如果有其他说明,比如社区的高度一致性意见,那么以社区意见为主,此时可以理解为 BRC 层面的硬分叉。
比如我在昨天部署了 A,那么你今天再部署 A,你的 A 就不再被认同。
以ordi为例,domo在3月8日部署了ordi,你后面再部署叫ordi就是无效的了。
挖掘Mint规则
不限用户,任何人都可以按照标准去组装交易发出,只要当前的 Token 还没被 Mint 完,那么你就可以去 发送 Mint 交易。
虽然我们可以限制其 max 最大供应量是 2100 个,如果我作为用户,我偏偏往链上 mint 一笔 30000 个的,那么如何来限制我的这次 mint 超出各种限制而无效呢?
依靠的是标准的共识
,下面我说谈及索引器
来说明,共识是如何约束并维持整个系统正常运行的。
BRC-20的索引性质
思考上面的 BRC-20 标准,它在整个链上的频繁交易,会在一开始的几个地址的Token持有分散出很多零散的地址的持有。
那么在这种情况下,我们如何维持发散后的地址总值依然是当初 max 的总值呢?
依靠的是 BTC 的 UTXO 规则
,首先每笔的 BRC 交易都是常规的 BTC 交易,而 BTC 交易模型基于 UTXO,自然地,对于受共识规则所认同有效的 BRC 交易,那么就能够索引整个交易链,由 Output 输出找出 Input 输入,再逐个累加就可得到总值。
BRC-20 索引器
所谓 BRC-20 索引器就是一个程序,根据 BRC-20 标准监控 BTC 链上的区块数据,来提取出各种 BRC-20 Token 交易的程序。
比如 Golang 语言实现的 BRC-20 索引器:github.com/unisat-wall...
索引器的做法在其他链,比如以太坊上面上面已经有很多例子,原理都是一样的,无外乎下面几个步骤:
- 监控链上区块;
- 从区块中获取数据;
- 将区块中的数据提取;
- 按照特定的规则对数据进行处理。
由于我们知道了 BRC-20 标准的 Json 结构,那么按照这个结构就能够取出这些基于 BRC-20 标准实现的 Token 数据,来实现:
- 转账;
- 余额;
- 等应用功能操作。
铭文 Ordi
Ordi 就是 BRC-20标准 下的一种 Token,且是历史的第一个,遵循上面所有属性。
打铭文
就是去发送 mint 交易,很多平台都提供了这个功能。