php小编百草将为你详细解析Ordinal铭文协议的原理与技术细节。Ordinal铭文协议是一种用于保护数据传输的加密协议,它采用了先进的加密算法和认证机制,确保数据在传输过程中的安全性和完整性。本文将介绍Ordinal铭文协议的基本原理,包括密钥交换、加密算法、消息认证码等核心技术,并深入探讨其在网络通信中的应用。无论你是初学者还是专业人士,阅读本文都将对你深入了解Ordinal铭文协议提供帮助。
区块链是一种多用户记账技术,也可称为分布式数据库。它将记录按时间顺序组成区块,并扩展账本。
我们用excel做了表格来说明区块链的工作原理。一份excel文件代表了一个区块链,其中每一个单独表格表示一个个区块,区块按照时间顺序从560331,560332.一直到最新的560336. 560336会在区块内打包最近的交易。区块内部主体部分就是我们在会计领域最常见的复式记账法,一边地址记做借出(debit)就是inputs from,另一边地址记做贷入(credit)就是outputs to。Value对应相应地址的BTC数量。Inputs的币的数量会大于Outputs币的数量,差额就是用户层面的转账费,也是矿工(记账人)的取得的手续费。区块头部会获取上一个区块高度,上一个区块的哈希值,本区块的建立时间(时间戳),和随机数。那么做为去中心化的记账技术,到底是谁来抢到下一个区块的记账权呢?靠的就是这个随机数和与之对应的哈希值。拥有算力的矿工通过对当前区块的随机数进行哈希计算,最先得到符合条件哈希值的矿工拥有下一个区块的记账权并且赢得区块奖励和转账费。最后是脚本区域,可以用来做一些扩展应用,比如脚本op_return可以当做附言栏。需要注意的是,在实际的区块中,脚本区是附着在input和output信息中的,而不是真的另外单独一个区域。比如附着在input的脚本是解锁脚本(ScriptSig),需要钱包地址进行私钥签名授权允许转出,而附着在output的脚本是锁定脚本(ScriptPubKey),用来设置收到该BTC的解锁条件(一般情况条件就是“有相应私钥的人才能消费”)。
原始的input和output的数据结构表展示了交易信息的附带参数。其中,解锁脚本(ScriptSig)作为私钥授权的一部分,也被称为“见证数据”(witness data)。
虽然比特币网络已经运行了超过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),类似于高级语言中的“注释”,来保证后续的代码不被执行。
以上是Ordinal铭文协议的原理与技术细节讨论的详细内容。更多信息请关注PHP中文网其他相关文章!