BRC-20标准与铭文 Ordi 技术原理解析

作者:林冠宏 / 指尖下的幽灵。转载者,请: 务必标明出处。

掘金:juejin.im/user/178526...

GitHub : github.com/af913337456...

出版的书籍:


BRC-20标准的本质

BRC-20 标准是在 Ordinals 协议 的基础上提出的一种数据存储标准,应用在 BTC 链上。

由于这种标准被应用到了 Token 经济中,所以人们又叫它为BTC-Token标准

无论如何,我们只需要知道,它是定义了一种数据存储格式就行了。

至于Ordinals 协议是什么,可以去看这篇文章的介绍:Ordinals 协议介绍

BTC链的数据存储方案

关于在比特币链上存储数据的技术方案,早在几年前我参与开发的一个公司 DApp 的时候曾思考并实践过其中的一种,直到现在也是只有两种本质级别的方案:

  1. 存储在操作码 OP_RETURN [data] 所携带的数据域;
  2. 存在到隔离见证(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...

索引器的做法在其他链,比如以太坊上面上面已经有很多例子,原理都是一样的,无外乎下面几个步骤:

  1. 监控链上区块;
  2. 从区块中获取数据;
  3. 将区块中的数据提取;
  4. 按照特定的规则对数据进行处理。

由于我们知道了 BRC-20 标准的 Json 结构,那么按照这个结构就能够取出这些基于 BRC-20 标准实现的 Token 数据,来实现:

  1. 转账;
  2. 余额;
  3. 等应用功能操作。

铭文 Ordi

Ordi 就是 BRC-20标准 下的一种 Token,且是历史的第一个,遵循上面所有属性。

打铭文

就是去发送 mint 交易,很多平台都提供了这个功能。

相关推荐
木鱼时刻1 小时前
肖臻《区块链技术与应用》第十二讲:比特币是匿名的吗?—— 深入解析匿名性、隐私风险与增强技术
区块链
小明的小名叫小明4 小时前
区块链技术原理(9)-什么是以太币
区块链
余_弦1 天前
区块链钱包开发(十八)—— 构建批准控制器(ApprovalController)
javascript·区块链·以太坊
余_弦1 天前
区块链钱包开发(十七)—— 构建密钥管理控制器(KeyringController)
javascript·区块链·以太坊
小明的小名叫小明2 天前
区块链技术原理(5)-网络
网络·区块链
云和数据.ChenGuang2 天前
Raft协议 一种专为分布式系统设计的共识算法
运维·服务器·算法·区块链·共识算法
YSGZJJ3 天前
股指期货合约是个啥?怎么玩?
区块链
数据与人工智能律师3 天前
刑法视野下的虚拟财产属性争议:法律风险与市场潜力解析
大数据·网络·人工智能·云计算·区块链
追梦人物3 天前
Uniswap 手续费和协议费机制剖析
前端·后端·区块链
余_弦3 天前
区块链钱包开发(十六)—— 构建网络控制器(NetworkController)
区块链·以太坊