更新时间:2025-07-22 15:27:01 编辑:丁丁小编
来源:点击查看
简介
深入解析 BTC 生态:铭文、UTXO 与技术细节
最近研究 BTC 生态和各种铭文项目,发现很多文章对原理和技术细节介绍不够清晰。比如铭文铸造时交易如何发起,UTXO 里的聪(sats)如何被追踪,铭刻内容放在脚本什么地方,BRC20 转账为何需要两次操作?不了解这些技术细节,很难搞明白 BRC20、BRC420、atomicals、stamps、符文 Runes 等协议的区别。本文将深入 BTC 区块链的基础知识,试着回答上述问题。
BTC 的区块结构
区块链本质是一种多用户记账技术,计算机科学术语来说,是一种分布式数据库。每一段时间内的记录(账目)组成一个区块,然后根据时间先后顺序进行账本扩展。
我们用表格来说明区块链的工作原理。一份文件代表了一个区块链,其中每一个单独表格表示一个个区块,区块按照时间顺序从 560331,560332 一直到最新的 560336。560336 会在区块内打包最近的交易。区块内部主体部分就是会计领域最常见的复式记账法,一边地址记做借出(debit)就是 inputs from,另一边地址记做贷入(credit)就是 outputs to。Value 对应相应地址的 BTC 数量。Inputs 的币的数量会大于 Outputs 币的数量,差额就是用户层面的转账费,也是矿工(记账人)的取得的手续费。区块头部会获取上一个区块高度,上一个区块的哈希值,本区块的建立时间(时间戳),和随机数。那么做为去中心化的记账技术,到底是谁来抢到下一个区块的记账权呢?靠的就是这个随机数和与之对应的哈希值。拥有算力的矿工通过对当前区块的随机数进行哈希计算,最先得到符合条件哈希值的矿工拥有下一个区块的记账权并且赢得区块奖励和转账费。最后是脚本区域,可以用来做一些扩展应用,比如脚本 op_return 可以当做附言栏。需要注意的是,在实际的区块中,脚本区是附着在 input 和 output 信息中的,而不是真的另外单独一个区域。比如附着在 input 的脚本是解锁脚本(ScriptSig),需要 wallet 地址进行私钥签名授权允许转出,而附着在 output 的脚本是锁定脚本(ScriptPubKey),用来设置收到该 BTC 的解锁条件(一般情况条件就是“有相应私钥的人才能消费”)。
上面两张图是原始的 input 和 output 的数据结构表,在执行层面,脚本表现为交易信息的附带参数,其中解锁脚本(ScriptSig)因为需要私钥授权,也被称为“见证数据”(witness data)。
隔离见证和 Taproot
尽管比特币网络已经运行了超过 10 年,没有发生过什么显著的事件,但曾多次出现交易成本飙升到不再可行的高点。因此,比特币的开发人员一直在讨论如何最好地扩展网络,以处理未来不断增长的交易量。
2017 年,这场辩论达到高潮,比特币开发社区分裂成两派,一派是支持使用软分叉实施名为 SegWit 的功能,另一派是支持直接区块扩容的“大区块”派。
我们在上文提到了解锁脚本需要用到私钥授权生成“见证数据”,那么是不是可以把这个见证数据从区块中分离,从而变相增加每个区块可容纳的交易数呢?隔离见证(Segregated Witness)在 2017 年 8 月激活正式激活。它的实现方式正是将所有的交易数据分为两部分,一部分是交易的基本信息(Transaction Data),另一部分是交易的签名信息(Witness Data),并把签名信息保存在一个新的数据结构中,是被称为“隔离见证(witness)”的新区块中,并与原始交易分开传输。
在技术上,SegWit 的实施意味着交易不再需要包括见证数据(不会占用比特币原本为区块安排的 1MB 空间)。取而代之的是,在一个区块的末尾,为见证数据创建了一个额外独立的空间。它支持任意的数据转账,并有一个折扣的 "区块重量(block weight)",巧妙地将大量的数据保持在比特币的区块大小限制内,以避免硬分叉的需要。这样,比特币交易的交易数据大小提高了上限,同时降低了签名数据的交易费用。在 SegWit 升级之前,比特币的容量上限是 1MB,而 SegWit 之后,虽然单纯交易的容量上限仍旧是 1M,但隔离见证空间的大小达到了 4MB。
Taproot 于 2021 年 11 月实施,由 3 项不同的比特币改进提案 (BIP) 组成,其中包括:Taproot、Tapscript 及其名为「Schnorr 签名」的全新数字签名方案。Taproot 旨在为比特币用户带来诸多好处,例如提升交易私密性和降低交易费用。还将让比特币执行更多复杂的交易,从而拓宽应用场景(新增加了一些操作码 opcodes)。
这些更新是 Ordinals NFT 的关键推动因素,它将 NFT 数据存储在 Taproot 脚本路径的花费脚本(spent script)中(见证数据空间)。这次升级使得结构化和存储任意的见证数据变得更加容易,为 "ord" 标准奠定了基础。随着数据要求的放宽,假设一个交易可以用其交易和见证数据填满整个区块 -- 达到 4MB 的区块大小(见证数据空间)限制 -- 极大地扩展了可以放在链上的媒体类型。
也许有人会问,既然在脚本中放入一些字符串,那对这些字符串没有限制条件吗?万一真的执行这些脚本呢?如果随便放内容,那会不会出现错误代码拒绝出块呢?这就要提到 OP_FALSE 指令。OP_FALSE(在比特币脚本中也表示为“0”)确保脚本语言中的执行路径永远不会进入 OP_IF 分支,并保持未执行状态。它充当脚本中的占位符或空操作(No Operation),类似于高级语言中的“注释”,来保证后续的代码不被执行。