freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

解读比特币Oridinals协议与BRC20标准 原理创新与局限
2023-05-22 18:55:43
所属地 河南省

“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks.”

——比特币创世区块

最近 BTC 上手续费区块收入占比最高到 74% ,大约 4.85 BTC 手续费,而仅仅两个月前才 2% 左右,源于数个百倍币的诞生以及大众 fomo 的情绪,让 BRC 20 的市场迎来爆发, 5 月 7 日 Bitcoin 网络上有超过 40 万笔交易待确认,虽然他和我们熟知的 ERC 20 虽然都被称为代币标准,但是实现的机制原理差异巨大,本文将从技术视角尝试解读其实现以及价值。

1、Ordinals 协议的核心思想

1.1、概述

每一枚比特币都是由一亿个「聪(Satoshis)」构成 ( 1 btc = 10 ^ 8 sat),这些 sat 每一个都有唯一标识且无法分割。

1、根据比特币里面 sat 的「序数(ordinal)」,

2、赋予每一个聪特定的含义「Inscriptions(铭刻)」

这就是 Ordinals 协议。

2、聪是如何编号的?

他借由比特币独特的出块流程和 UTXO 模型,从而让每一个「聪(sat)」具有独特的编号。

比特币是在「挖矿」中产生的,挖矿过程是矿工通过解决复杂的数学问题(POW)获得出块权,来验证新交易并添加到区块链中,比特币网络每 10 分钟左右会生成一个新的区块,每个区块包含一组新的交易和之前区块的哈希值,其中矿工的收益又被称为Coinbase 区块

在以太坊中采用“账户余额模型”,即每个地址有单独的存储结构和空间余额(balance)便是其中的一个字段。这种模型的优点是:

  • 简单非常容易理解和编码实现。
  • 高效,每笔交易只需要验证发送账户是否有足够的余额来支付交易;

缺点:会出现双重支出攻击。

可拓展阅读:【前沿解读】斯坦福研究员论文-以太坊可逆交易标准 ERC 20/721 R 的机制、创新与局限

但是比特币网络不同,他账户的余额并不是由一个数字表明,而是由当前区块链网络中所有跟当前账户有关的 UTXO(未花费的交易输出)组成。


2.1、比特币的 UTXO 模型

UTXO(Unspent Transaction Output)是一种账本模型,在比特币系统中,每一笔交易都会产生一些输出,比如转账交易的输出就是接收方的比特币地址和转账金额。这些输出被存储在 UTXO 集合中,用于记录未花费的交易输出。

每一笔交易都由若干个输入(Input) 和若干个 输出(Output) 构成。每一笔交易都要花费一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”;一个 Input 指向的是前面区块的某个 Output,只有 Coinbase 交易没有输入,只有凭空输出。

UTXO 模型的优点是更加安全和隐私保护,因为它没有中心化的账户记录和传统账户模型可能泄露的账户余额信息。

UTXO 模型的缺点是增加了交易的验证成本和存储成本。每次交易时都需要验证交易的支付和接收是否合法,同时也需要存储大量的 UTXO 信息。

所以任何交易,总是可以由 Input 溯源到 Coinbase 交易 继而追溯每一个聪被挖矿挖出时的序号。



所以我们说自己有多少比特币(bitcoin)实际上是指的我们拥有所有权的那些 UTXO 中所指明的比特币(bitcoin)的数量,因此如果我们想要统计一个地址的 BTC 数量:

  1. 从创始块开始扫描;

  2. 遇到某笔交易的某个 output 是指定的地址,余额增加;

  3. 遇到某笔交易的某个 input 是指定的地址,余额减少;

2.2、sat 和 UTXO 的关系

注意是每一个 sat 不是 UTXO! 由于 UTXO 是不可再分的最小交易单元,因此 sat 只能存在于 UTXO 中,且 UTXO 包含了一定范围的 sats,且只能在花费某一 UTXO 后产生新的输出中对 sats 编号进行拆分

比如我在创世块或者 CoinBase 区块获得了 50 个 BTC 的奖励,对应的 Input 和 Output 则是

### inputs //为空
### outputs :addr_a:[0 -> 4,999,999,999] sats

如果我进行一笔 20 BTC 的转账给 B 地址,则 UTXO 集中会呈现,这里的 input 是上一笔的 output

### inputs"
addrA: [0 -> 4,999,999,999] sats

### outputs
# 30 btc to addrA, index=0
addrA: [0 -> 2,999,999,999] sats
# 20 btc to addrB, index=1
addrB: [3,000,000,000 -> 4,999,999,999] sats

这里的 sats 消耗顺序,是基于 FIFO"先进先出"(First-In-First-Out )原则,在交易费用相同的情况下,较早的 UTXO 将比较晚的 UTXO 更优先被用于交易。

这些就是 Ordinal NFT 的核心技术支撑,非常的简洁但是却能衍生出很多好玩的东西! 这个 Ordinal Number 甚至可以用来表示域名等。


2.3、Ordinal number 的表示方法

Ordinal Number 则有很多种表示方式,比如度数表示法(Degree Notation)

A°B′C″D‴
│ │ │ ╰─ Index of sat in the block(每10分钟一个块)
│ │ ╰─── Index of block in difficulty adjustment period(每2016个块调整一次,~2周)
│ ╰───── Index of block in halving epoch(每210,000个块减半,~4年一次)
╰─────── Cycle, numbered starting from 0(减半和难度调整时间重合,~24年一次)

这种表示法有趣的地方在于,它根据比特币自身的周期性特征,人为地为 sat 创造了一种稀缺性:

  • common: 所有不是区块 mint 出的第一个 sat 的 sats

  • uncommon: 该 sat 是某区块挖出的第一个 sat(D== 0)

  • rare: 难度调整时挖出的第一个 sat(C== 0&&D== 0)

  • epic: 减半时挖出的第一个 sat(B== 0&&D== 0

  • legendary: 发生 Cycle 轮换时挖出的第一个 sat(B==C==D== 0)

  • mythic: 创世区块挖出的第一个 sat(A==B==C==D== 0)

比如:https://ordinals.com/sat/1 ° 0 ′ 0 ″ 0 ‴,所以目前产生 Fomo 追逐的核心点并非是 mint 的内容中包含什么东西,而是对应的 Ordinal Number 这样的序号值。

如果说序号是结合了比特币原生的诸多技术特性产生的,那么铭刻(Inscriptions)则是注入 sat 具体内容的方法,所以问题便来到,有了唯一标识的 sat 如何定义其绑定的任意内容呢?

3、如何 Inscriptions(铭刻)任意内容

在讨论铭刻之前,咱们先了解下比特币扩容的两次重大升级:SegWit 和 Taproot


3.1、SegWit(隔离见证)

他是比特币的一个重大升级于 2017 年 8 月激活,主要目的是优化比特币的交易处理能力、降低交易费用,并在更安全的条件下实现比特币的扩容。SegWit 是一个软分叉(Soft Fork)升级,涵盖多个 BIP(141、 142、 143、 144 和 145 ),所谓软分叉也就是可以兼容老版本的比特币客户端,没有破坏比特币网络的兼容性。

它的核心改变是把交易中的签名(Witness Data)从交易数据中分离出来,使交易数据更小,从而减少交易费用,并提高比特币网络的容量。

SegWit 的实现方式是将所有的交易数据分为两部分,一部分是交易的基本信息(Transaction Data),另一部分是交易的签名信息(Witness Data),并把签名信息保存在一个新的数据结构中,是被称为“隔离见证(witness)”的新区块中,并与原始交易分开传输。这样,比特币交易的交易数据大小提高了上限,同时降低了签名数据的交易费用。在 SegWit 升级之前,比特币的容量上限是 1 MB,而 SegWit 之后,比特币交易的容量上限达到了 4 MB。所以 Oridnals Inscription 的本质就是把铭刻数据藏在见证数据中。


3.2、Taproot 升级

与 SegWit 升级类似,Taproot 升级同样是一种软分叉升级,是 Bitcoin Core 贡献者 Gregory Maxwell 在 2018 年提出的比特币升级提案,它并不会改变比特币协议本身,而是对现有的比特币交易机制进行改进。

该升级主要包含 3 个技术概念 —— P 2 SH、MAST 和 Schnorr 。其结果是让复杂的交易如多签名交易、时间锁交易看起来如同普通的比特币交易,增强了比特币的隐私性,目的是推动了比特币实现智能合约部署、拓展用例等各种场景升级。

在 SegWit 升级中,比特币协议增加了一个新的版本号,用于表示新的交易格式。在 Taproot 升级中,比特币协议最重要的更改是将脚本验证程序从 ScriptVerify flag 更新为 ScriptVerify v2 flag,以支持 Tapscript。

一个Tapscript的上链需要分为两个步骤:commit 和 reveal。而 Inscription(铭刻)的内容则包含在 reveal 交易的第一个输入中,从而铭刻在此交易的第一个输出的第一个 sat 上。比如

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

这里有多个操作指令,但是开头必然是 OP_FALSE 此指令被推入执行栈后脚本就会停止运行,但仍然被存在了链上。

所以 Ordinal Inscription 的本质是:在比特币网络上借助一个永远不会被执行的脚本 tapscript,搭建了一个简易的记账层,进行资产和数据的统计和记录

由于只有记账,这就意味着不会有类似智能合约的脚本执行以及验证的过程,必然高度依赖链下的中心化管理和上报结果。

4、什么是 BRC 20 ?

BRC-20 的名字乍一看很像以太坊的 ERC 20 ,但其实两者技术差别非常大,ERC-20 代币的持有状态保存于链上 ,能在链上得到网络共识。而 BRC 20 则是借助 Ordinals 协议铭刻的**JSON 格式铭文,**该规范只是定义了 brc-20 代币的部署、铸造和转账行为, 且BRC-20 代币的持有状态由链下服务维护 。

部署的 json 是什么样的?

{ 
  "p": "brc-20",//Protocol: 帮助线下的记账系统识别和处理brc-20事件
  "op": "deploy",//op 操作: 事件类型 (Deploy, Mint, Transfer)
  "tick": "ordi", //Ticker: brc-20代币的标识符,长度为4个字母(可以是emoji)
  "max": "21000000",//Max supply: brc-20代币的最大供应量
  "lim": "1000"//Mint limit: 每次brc-20代币铸造量的限制
}

对应的 op 还有 Mint 和 Transfer,两个格式几乎一致,当然如果熟悉以太坊上交易的话,会觉得奇怪,这里的转账接收方 to 怎么表示呢?

这是因为转账交易生效时,就是该铭文内容对应的 sat 被交易的时候,所以铭文对应的 sat 被谁接收,谁就是 transfer 的对象 ,因此 brc-20 的转账必须伴随比特币所有权的转移 (不是只是作为手续费被消耗)。

中心化机构则依据链上登记的各个 op 来推导出用户当前应该有的余额。如 unisat.io 这样客户端软件(索引器),根据mint、transfer 事件进行统计获得。如:UTXO 中包含 mint 铭文,就为第一个所有者添加,transfer 则在发起者的地址上扣除余额,接收者地址加上余额。

拓展阅读:【源码解读】你买的 NFT 到底是什么?

在这个过程中,铭文是 ‘附加’ 交易(聪)上的,比特币的矿工并不会处理这些铭文,从链上来看跟其它聪依然是没有分别的,他们都是当做普通的聪来转移的。

5、如何评价 Ordinals 与 BRC 20 

BRC-20 及 Ordinals NFT, 给比特币带来了很多争论,基本分成两种阵营:

支持方认为,只要你支付手续费,你就有全权以任意的方式使用区块空间,不论交易是什么内容,他们 认为 BRC-20 与 NFT 给比特币带来了新的文化与叙事,有利于提高比特币的实际应用价值。

反对方认为,这些 BRC-20 与 NFT 毫无价值是垃圾交易,过多的垃圾交易会抢占交易带宽,导致交易入块时间变长以及手续费变高。

笔者看来,通过上文的技术实现路线可以显然感受到,虽然新生事物在价格上爆火,但是其技术缺陷也十分显著

1、过于中心化

Ordinals 协议,必须基于比特币网络之外的线下服务进行状态维护。如果底层的状态服务不可用或者有缺陷,可能导致资产损失,因为比特币网络没办法阻止失效铭文上链,中心化平台要裁定谁的铭文有效,在该平台上就是有效的。

2、缺乏可信验证机制

不是采用智能合约公开透明的代码规则,所以该协议无法满足共识、防止双花等资金安全的需求。

可拓展阅读:解读最新 Final 的 ERC-6147 :极简的半强制性 NFT 产权分离标准

3、比特币网络性能局限

目前比特币出块间隔长达十分钟,交易确认的速度过慢,也会导致交易体验不佳。而且比特币的交易成本太高,并且,一笔成功的上链铭文交易要扣掉三方抽成,平台网络数据延迟,以及各种卡顿带来的预估差错成本,所以矿工费拉满至少要 2-3 倍才行

4、缺乏基础设施

比如作为 token 最核心的交易和定价服务,现在是主要依靠交易平台的订单系统保障,完全中心化的结果缺乏权威的交易方法和定价方法。比如其交易场景若没有中心化平台裁定极易被双花作恶。铭文先到先得的 fomo 机制和矿工按矿工费优先打包的机制存在的逻辑悖论,这就决定了 mint 并不一定是公平的

5、缺乏安全性BRC 20

容易让用户产生错觉,使其认为 BRC 20 是利用了比特币的安全性进行创造的代币,会和比特币一样的安全以及稳定,但其实它与 BTC 并不一样,BTC 的安全是建立在加密以及共识算法所支撑之上,已经相对稳定运行了相当长的时间,经受住了时间的考验,而 BRC 20 是利用 Ordinals 协议与 BTC 进行绑定,Ordinals 协议目前运行时间短,还在发展初始阶段,其中可能会存在一些安全隐患还未被发现。

慢雾也发出 BRC 20 存在的安全风险的提醒:

近期 BRC-20 比较火,我们注意到 BRC-20 从 Mint 代币到交易,可能存在安全风险:Mint 代币上,相关的 BRC 20 代币铸造平台安全性存疑,防御措施较为薄弱,容易被恶意攻击篡改代码,从而导致用户 Mint 时资产被盗。在交易方法上,有两种方式:一是私下找第三方担保交易,很容易遇到骗子、假币等;二是去专门的交易平台挂单交易,这些交易平台的安全性无法得到保证。笔者虽然并不看好眼前的 Ordinals,毕竟他对区块空间的应用还是太单调只是把图片、NFT 放进去并没有产生更多价值。但是作为一个有趣的尝试,如此破圈的创新也能重新引发大家的思考:

如何利用比特币可编程性?毕竟如今的公链中不会有比比特币更强的共识与安全性了。

都是存储空间的利用,其实 Ordinals 协议在 OP-Ruturn 输出的金融交易,这在本质上和全节点存储的其他东西没有什么不同,但是是否比特币只能为高净值交易服务?是否可自由的将区块空间去存储和执行一些低成本的数据?

这也让我想起曾经 Vitalik 为代表提出的:“当你合理地使用技术并且支付了相应的花费,那你的行为就是有合法性的。”

# 比特币 # Web3
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录