赞
踩
这篇报告主要以本人视角回顾从 2016 年接触区块链至今的科研经历,介绍区块链技术原理和梳理区块链学术研究,为所在项目团队做相关知识补充,也为感兴趣的研究者提供少许思路。
根据 Wikipedia 的定义:“A blockchain is a distributed ledger with growing lists of records (blocks) that are securely linked together via cryptographic hashes.”
区块链是一种分布式账本,其中包含不断增长的记录,用区块来进行表示。这些区块通过密码学哈希安全地链接在一起,每个区块都包含前一个区块的哈希值,因此有效地形成一条链。
从输出来看,区块链类似于数据结构中的链表。稍有不同的是,区块链中的指针不是内存地址,而是数据的哈希值。由于哈希函数单向不可逆,区块只能追加,无法插入。
从构造来看,区块链并非仅由单个程序产生。它涉及多个有相同行为且独立运行的程序,一般被称作节点。节点之间通过网络连接,以对等的角色相互通信。节点同步本地视图里的数据,各自执行预先定义的协议,最终生成全局唯一的区块链。
这也是为什么早期在解释区块链概念的时候,经常将其类比为分布式数据库系统:用户发送的事务请求,通过执行共识算法,存储在多个节点中,以保持一致性。
不同的是,数据库提供 CRUD 操作(即创建、读取、更新和删除),关注结果;对比而言,区块链仅支持 CR 操作(即创建和读取),记录过程。尽管两者在行为上十分接近,但是区块链这个概念更能区分不同。
由此看来,区块链并没有创造什么新的技术,而是将现有的各种技术组合在一起,设计了一个有特殊属性的系统框架。基本地,以密码学作为安全支撑,以分布式作为架构模板,以链结构作为组织形式,更多的技术可以整合进来以设计新的系统。
这样的基本设计带来了三个关键的特性:
至于匿名性、去信任、自治性等概念,都可以与上述特性关联或者延申。随着技术的发展,根据业务的需求,研究者对区块链进行了部分改造,在其特性上做出了多种尝试,丰富了区块链的技术内容。
在公开特性上,约束对节点的开放范围,区块链被划分为三类。
由于私有链对于区块链技术而言并没有太多的意义,现在也经常将区块链分为许可链(permission blockchain)和非许可链(permissionless blockchain),分别对应上述的联盟链和公有链。
在去中心特性上,节点的身份由某个可信中心机构认证(例如公钥基础设施PKI),或设计多个中心以加强系统的权威性和可控性。
在不可篡改特性上,曾有应用变色龙哈希(Chameleon Hash),或者调整区块结构的部分字段,设计可编辑区块链(Redactable Blockchain)的方案。
区块链技术起源于2008年11月,一个化名为中本聪的人,在网络上发表了一篇论文(非会议、非期刊、也不是预印本),题目为《Bitcoin: A peer-to-peer electronic cash system》,即比特币系统的原型。
2009年1月,比特币网络正式开始运行,一直到现在。自此之后,关于区块链项目和研究呈爆发式增长。截止2024年1月底,在Github上以Blockchain
为主题的开源项目多达2.7万多个,在谷歌学术上搜索Blockchain
关键字可找到60多万篇相关学术论文。
区块链作为一项底层技术,有效解决的是信任问题。可以应用的领域非常广,包括金融、物流、医疗、物联网、供应链、数字版权、数据共享、存证防伪等等。
然而,区块链技术的实际落地相当困难,目前在金融和政务上的落地占大头。尤其在金融领域,稳定币的出现,将虚拟货币与传统货币挂钩。我国更是推出了自己的数字货币,同样也使用了区块链技术。
关于区块链技术落地的难点可类似于:本地vs云(需要解决通信性能),人工设计vs大模型生成(需要解决目标对齐)。区块链的应用要有明确切实的需求!
在比特币的原始论文中,对交易、时间戳、工作量证明、网络、激励、验证都有分模块描述,但是比较粗糙。本报告按照《Mastering Bitcoin》这本经典书籍的思路,展开技术原理介绍。
中文版书籍链接如下:
https://github.com/inoutcode/bitcoin_book_2nd
数字货币的出现与密码学发展息息相关,挑战在于如何让数字拥有价值。比特币系统要解决的问题:
比特币系统主要构成模块:
比特币系统由用户、交易和矿工组成。用户通过密钥控制钱包,交易被广播到比特币网络,矿工通过竞争计算生成区块。比特币官方地址为https://bitcoin.org。
交易就是要告知全网:比特币的持有者已经授权把比特币转账给其他人。新的持有者能够再次授权,产生另一笔交易来做相同的事情,即进行消费。
交易包含一个或多个输入,即比特币的来源;同时,交易还包含一个或多个输出,即比特币的去处;输出与输入之间的差额,作为矿工打包交易的辛苦费。
下图展示了买咖啡的完整实例。Alice从Joe那里用现金换了点比特币,Alice支付Bob比特币用来买咖啡,形成一条钱转移的交易链。
被广播到全网的交易等待矿工打包加入到区块中,通过竞争挖矿不久Alice的交易就在区块链里能被查询到记录,包含在第277316号区块中。
几分钟后,第277,317号新区块诞生在另一个挖矿节点中,它的出现增加了Alice交易的可信度。基于这个区块每产生一个新区块,对于交易来说就增加了一次确认。当区块一个个堆上来时,交易会变得指数级越来越难被推翻,即得到了更多的信任。
可以通过一些区块链数据查询网站获取详细信息:
比特币采用基于椭圆曲线的公钥密码系统,私钥即一个随机数k,通过椭圆曲线乘法操作产生公钥K(椭圆曲线上的坐标点),再利用哈希函数结合其他操作生成简短地址A。
对公钥进行哈希函数后,做Base58Check编码得到比特币地址,其中还加入了各种版本信息和校验计算,方便区分、解析、识别。具体的编码算法,以及格式压缩,详见书第4章。
钱包即私钥的容器,其中的私钥可以是随机非确定的,也可以是利用种子计算派生函数生成。
一笔比特币交易是包含多个输入和输出的数据结构,其内容与账号或者身份信息无关,应当把它们理解成一种被特定秘密信息锁定的一定数量的比特币。
比特币交易结构
大小 | 字段 | 描述 |
---|---|---|
4字节 | 版本 | 明确这笔交易参照的规则 |
1-9字节 | 输入数量 | 被包含的输入的数量 |
不定 | 输入 | 一个或多个交易输入 |
1-9字节 | 输出数量 | 被包含的输出的数量 |
不定 | 输出 | 一个或多个交易输出 |
4字节 | 时钟时间 | 一个UNIX时间戳或区块号 |
比特币的交易输出包含两个部分,它指定要转移的比特币数量,以及给定一个锁定脚本,即给花费这笔钱设置了一个障碍,需要满足某些条件。
比特币交易输出结构
尺寸 | 字段 | 说明 |
---|---|---|
8个字节 | 总量 | 用聪表示的比特币值(10-8比特币) |
1–9个字节(可变整数) | 锁定脚本尺寸 | 用字节表示的后面的锁定脚本长度 |
变长 | 锁定脚本 | 一个定义了支付输出所需条件的脚本 |
未被花费的输出被简称为UTXO(unspent transaction output),它是不能再分割、被所有者锁住或记录于区块链中的并被整个网络识别成货币单位的一定量的比特币。
比特币的交易输入是指向UTXO的指针,表示其想花费被锁定的比特币,因此需要包含一个对应的解锁脚本,用来证明有针对该UTXO的所有权。
比特币交易输入结构
尺寸 | 字段 | 说明 |
---|---|---|
32个字节 | 交易 | 指向交易包含的被花费的UTXO的哈希指针 |
4个字节 | 输出索引 | 被花费的UTXO的索引号,第一个是0 |
1–9个字节(可变整数) | 解锁脚本尺寸 | 用字节表示的后面的解锁脚本长度 |
变长 | 解锁脚本 | 一个达到UTXO锁定脚本中的条件的脚本 |
4个字节 | 序列号 | 目前未被使用的交易替换功能,设成0xFFFFFFFF |
交易费 = 求和(所有输入) - 求和(所有输出),用户一般在输出中给自己找零。
较为简单的,令交易输出指定某个公钥地址,交易输入给出对应的私钥的签名,即可完成一笔交易。而比特币设计了一种脚本语言,让该过程更加灵活且可扩展,一个常用的交易脚本组合如下。
这是一种基于堆栈的执行语言,执行完后栈顶推出TRUE则表示脚本匹配。交易脚本的执行流程大致如下所示。
比特币定义了5种类型的标准交易,分别是P2PKH、P2PK、MS、P2SH和OP_Return。上述例子就是Pay-to-Public-Key-Hash脚本,详见书第6章。
网络采用Peer-to-Peer对等架构,节点既是客户端,也是服务端,类似于BitTorrent内容分发系统。节点的四个功能:钱包、矿工、完整区块链、网络路由节点。通过组合这四个功能,产生不同类型的节点。
当新节点启动后,它发现至少一个节点并建立连接,并且随机地与其他节点连接。每个节点保持一定数量的邻居,通过心跳机制保证连通。比特币网络也包括了主网络、测试网络等,不再赘述。
区块是一种被包含在公开账本里的聚合了交易信息的容器数据结构。
比特币区块结构
大小 | 字段 | 描述 |
---|---|---|
4字节 | 区块大小 | 用字节表示的该字段之后的区块大小 |
80字节 | 区块头 | 组成区块头的几个字段 |
1–9(可变整数) | 交易计数器 | 交易的数量 |
可变的 | 交易 | 记录在区块里的交易信息 |
区块头是构建链结构的关键,其中的父区块哈希即链指针;难度、时间戳、Nonce值与挖矿竞争相关;Merkle根用来有效总结区块内的所有交易。
比特币区块头结构
大小 | 字段 | 描述 |
---|---|---|
4字节 | 版本 | 版本号,用于跟踪软件/协议的更新 |
32字节 | 父区块哈希值 | 引用区块链中父区块的哈希值 |
32字节 | Merkle根 | 该区块中交易的merkle树根的哈希值 |
4字节 | 时间戳 | 该区块产生的近似时间(精确到秒的Unix时间戳) |
4字节 | 难度目标 | 该区块工作量证明算法的难度目标 |
4字节 | Nonce | 用于工作量证明算法的计数器 |
Merkle树是一种哈希二叉树,它可以用作快速归纳和校验大规模数据完整性的数据结构。叶子节点表示原始的分块的数据,然后从下往上两两拼接进行哈希计算,直到产生根哈希值。
如图所示,HA代表交易A的哈希值,以此类推。节点能够通过一条哈希路径来证明某个交易的存在。例如,证明交易K包含在区块中,给定HL、HIJ、HMNOP和HABCDEFGH4个哈希值,计算是否能匹配到根哈希。
挖矿是增加比特币供应的过程,保护比特币系统的安全,防止欺诈交易,避免双重支付。矿工们验证每笔新的交易并记录在总账本上,约每10分钟就有一个新区块被挖掘出来,这个区块包含着从上一个区块产生到目前这段时间内发生的交易。
Coinbase交易输入结构
长度 | 字段 | 描述 |
---|---|---|
32 字节 | 交易哈希 | 不引用任何一个交易,值全部为0 |
4 字节 | 交易输出索引 | 值全部为1 |
1-9 字节 | Coinbase数据长度 | coinbase数据长度 |
(VarInt) 可变长度 | Coinbase数据 | 在v2版本的区块中,除了需要以区块高度开始外,其他数据可以任意填写,用于extra nonce和挖矿标签 |
4 bytes | 顺序号 | 值全部为1,0xFFFFFFFF |
在创世区块中,中本聪在Coinbase数据中写入了 “The Times 03/Jan/ 2009 Chancellor on brink of second bailout for banks”。
矿工挖掘区块得到的奖励,一部分来自于凭空产生的比特币,另一部分来自于在该区块中输入总额减去输出总额得到的交易费。
矿工挖掘区块的过程,就是在计算区块头的哈希值的过程。矿工会尝试不同的Nonce值,填充到区块头的对应字段中,直到该区块头对应的哈希值小于某个目标值。
Nonce即该区块的工作量证明(Proof of Work,POW),而目标值即区块的挖矿难度。
比特币中的工作量证明采用SHA256函数,即哈希值有256位。难度通常是要求哈希值前面有多少个0,其计算公示为:target = coefficient * 2^(8 * (exponent – 3))。在区块277,316中,难度值为0x1903a30c。这个标记的值被存为系数/指数格式,0x19为幂,而0x03a30c为系数。
target = 0x03a30c * 2^(0x08 * (0x19 - 0x03))
target = 0x0000000000000003A30C00000000000000000000000000000000000000000000
比特币令每10分钟产生一个区块,挖矿难度会随着算力进行调整,调整周期为2016个区块。
New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes)
挖矿是同时且在不同节点上独自进行的,由于网络延迟区块链可能会产生分叉,工作量证明机制要求矿工选择最长链来解决分叉导致的差异,因而有了竞争挖矿。
比特币是一个开源项目(https://github.com/bitcoin/bitcoin),其源代码也作为其他一些区块链项目的基础,由此衍生出各种竞争币。
2013年底,年轻程序员和比特币爱好者Vitalik Buterin考虑进一步扩展比特币,他分享了一份题目为《A next-generation smart contract and decentralized application platform》的白皮书,描述了以太坊背后的想法:一个图灵完备的可编程和通用区块链。
Gavin Wood博士是第一批接触Vitalik并提供帮助提供C ++编程技能的人员之一。Gavin成为了以太坊的联合创始人,联合设计师和CTO。从2013年12月开始,Vitalik和Gavin完善并发展了这个想法,共同构建了形成以太坊的协议层。2015年7月30日,以太坊区块链正式运行。
以太坊的核心在于,突破比特币交易脚本的限制,将其变为可编程的语言,以支持各种各样的应用。本报告按照《Mastering Ethereum》这本经典书籍的思路,同时参考了一些相关博客,展开技术原理介绍。
中文版书籍链接如下:
https://github.com/inoutcode/ethereum_book
以太坊设计了一个EVM虚拟机,它模拟计算机来运行程序,允许编写代码去执行动作。相较于比特币的标准脚本类型,以太坊能支持更多支付逻辑,其程序代码被称为智能合约。
于是,在以太坊中存在两个实体:
合约有一个地址,也可以发送和接收ether,当交易目的地是合约地址时,它会导致该合约在EVM中运行,并将交易作为其输入。区别在于:人们通过EOA做出决定,而软件通过合约做出决定。
在以太坊虚拟机提供的底层EVM字节码基础之上,可以设计高级语言来更方便的编写智能合约。Gavin Wood创建了Solidity,已经成为以太坊及以太坊外最广泛使用的语言。
给定一个经典的faucet合约代码示例:它给任何地址发放ether,并且可以定期补充ether到合约中。
contract Faucet { // Give out ether to anyone who asks function withdraw(uint withdraw_amount) public { // Limit withdrawal amount require(withdraw_amount <= 100000000000000000); // Send the amount to the address that requested it msg.sender.transfer(withdraw_amount); } // Accept any incoming amount function () public payable {} }
该代码声明了一个Faucet的合约对象,withdraw()函数将合约里的ether转给发送者,()为回调函数,当交易不包含数据或没有调用已声明的函数时触发,用于向合约转账。
与比特币类似,以太坊同样采用椭圆曲线来生成公私密钥。
不同地,以太坊使用Keccak-256哈希函数来将公钥转换成地址,并且使用互换客户端地址协议(Inter Exchange Client Address Protocol,ICAP)对地址进行编码。
以太坊也使用钱包来存储私钥,但官方更鼓励使用确定性种子钱包,私钥通过密钥扩展算法派生,利用助记词进行备份和恢复。
(主要对比以太坊与比特币的异同,详见书第5和6章)
由外部所有帐户发起的签名消息,由以太坊网络传输,并在以太坊区块链上进行记录(挖掘)。
交易是以太坊与比特币在设计上区别最大的地方,比特币中的交易记录过程,以太坊中的交易是唯一可触发状态变更,或导致合约在EVM中执行的事件,也可以说以太坊保留着结果。也因为交易的结构,以太坊不像比特币那样推荐密钥只使用一次就丢弃。
以太坊交易结构
字段 | 描述 |
---|---|
nonce | 由始发EOA(外部所有账户)发出的序列号,用于防止消息重播。 |
gas price | 发起人愿意支付的gas价格(以wei为单位)。 |
start gas | 发起人愿意支付的最大gas量。 |
to | 目标以太坊地址。 |
value | 发送到目标地址的ether数量。 |
data | 变长二进制数据。 |
v,r,s | 始发EOA的ECDSA签名的三个组成部分。 |
以太坊引入了gas的概念,它是作用于以太坊内部的虚拟货币。合约代码在EVM中以字节码的形式执行,每条代码的执行都映射一定量的gas消耗。以太坊依靠这一机制来限定合约执行的时间或步数,因为开放式(图灵完备的)计算模型需要某种形式的计量,以避免拒绝服务攻击或无意中的资源吞噬交易。
此外,gas设计与ether分离,以保护系统免受随着ether价值快速变化而产生的波动。gas与ether之间存在一个汇率,在交易中通过gasPrice来体现。如果一笔交易触发了合约的执行,但是gas在合约还未执行完之前就消耗完了,那么该执行回退,交易失败。gasPrice的设置也被矿工用来排序交易优先级,是矿工收入的来源之一,作为交易手续费。
交易的载荷主要包含在两个字段value和data。value的值形成支付payment动作,data的值形成调用invocation动作,如果既没有value也没有data,那么该交易只是浪费gas,但依然合法。
如果to字段是EOA地址,那么value的值表示转账的金额;如果to字段是合约地址,那么value的值是锁定到合约的ether数量。
如果to字段是EOA地址,那么data的值相当于转账备注;如果to字段是合约地址,那么data的值为调用合约函数的参数。
如果有data,没有value,且to字段为0x0零地址,该交易创建一个合约,data是合约的字节码。
EOA与合约账户通过用户的一笔特殊交易产生关联,合约地址根据创建者的地址(sender)及其发送过的交易数量(nonce)来计算确定,进行RLP编码并计算Keccak-256哈希值。
智能合约由密码学家Nick Szabo于二十世纪九十年代提出的,定义为“一组以数字形式规定的承诺,包括各方在其他承诺中履行的协议”。在以太坊中,智能合约是一段程序代码,在虚拟环境中确定性的运行,虚拟机指令详见第14章。
合约由EOA发起的交易创建,可以由交易调用,也可以被另一个合约调用。同时,交易是原子性的,成功的交易会改变原有的状态,错误的交易会将所有中间状态回滚,就好像交易从未运行过一样。(如何用solidity构建智能合约详见第8章)
与比特币一样,采用点对点的扁平式网络架构。存在的以太坊网络有:Ethereum,Ethereum Classic,Ella,Expanse,Ubiq,Musicoin等等。
不同语言编写的以太坊协议主要实现:Go(Geth),Rust(parity),C++(cpp-ethereum),Python(pyethereum),Scala(mantis)和Java(harmony)。
流行的以太坊浏览器钱包有
显然,以太坊的区块结构相较于比特币要复杂的多,包含更多关键信息。
以太坊区块头结构关键字段
字段 | 描述 |
---|---|
ParentHash | 父块的哈希值 |
Number | 块编号 |
Timestamp | 块产生的时间戳 |
GasUsed | 交易消耗的Gas |
GasLimit | Gas限制 |
Difficulty | PoW的难度值 |
Beneficiary | 块打包手续费的受益人,也称矿工 |
Nonce | 一个随机数,使得块头哈希满足PoW要求 |
相较于比特币,以太坊在区块头中除了存储交易树根哈希,还存储着收据树根和状态树根哈希。(叔父区块树根哈希也在区块头中)
以太坊是基于状态的区块链,它由多个账户的状态共同组成了全局状态。
以太坊账户数据结构
字段 | 描述 |
---|---|
Balance | 该账号拥有的ether数量 |
Nonce | 该账号发送出去的交易数量,每做一笔交易自增1 |
CodeHash | 对于合约账户,是此账户存储EVM代码的哈希值。对于EOA账户,此处留空。 |
StorageRoot | 该账户的存储内容组成Merkle树后求得的根哈希值 |
收据树与交易树一样,都是采用Merkle树组织,记录日志和结算信息。状态树则采用MPT(Merkle Patricia Trie)树组织,方便存储内容的更新。
账户存储树是保存与账户相关联数据的结构。该项只有合约账户才有,而在EOA中, storageRoot留空、codeHash则是一串空字符串的哈希值。
以太坊除了在区块结构设计上有变动,对共识算法也进行很多改进。比特币设计的工作量证明PoW共识对电力的消耗巨大,而且由于比特币有利可图,出现了专业矿机提高哈希计算速度,造成了节点中心化,面临51%攻击风险。
以太坊中存在三种共识算法:
以太坊的长期目标是将共识算法从PoW切换到PoS,在原有共识方案上都做了工程优化。下图是以太坊PoW共识算法ETHash的计算流程
PoW(Proof of Work):通过节点竞争去寻找基于哈希函数的困难解,奖励发现谜题答案的参与者,验证交易并创建新区块。
PoA(Proof of Authority):交易的有效性由一组经批准的链上账户确定,也即授权节点来达成账本共识。
PoS(Proof of Stake):依赖验证者在网络中的经济利益,任何持有ether可以通过发现一种特殊交易锁定其ether称为验证者。
此外,以太坊还在链结构上做了一些优化,应用了一种名为GHOST协议的算法,全称为The Greedy Heaviest-Observed Sub-Tree(贪婪最重可观测子树算法)。相比于比特币的最长链原则,可以认为以太坊采用的是最重链原则。
叔父区块与交易一样存储在区块体中,并通过Merkle哈希树进行组织,其树根存储在区块头中。
以太坊的设计将比特币核心的区块链升级为了可编程的平台,超级账本Fabric项目更进一步,直接舍弃了货币属性,还有更多的智能合约平台,EOS、Moonbeam、Cardano等。
热门智能合约平台列表可见网站:
https://www.coinlore.com/zh/smart-contract-platforms
更多的,当提及区块链智能合约给互联网带来的改变,为了理解将互联网的发展划分了三个阶段(参考博客:https://ethereum.org/zh/web3)。
自区块链诞生以来,其去中心化构建的信任环境吸引了广泛的关注,工业界和学术界都做了大量的研究。根据其研究内容,可以大致划分为如下三个层面:
在本报告中,列举上述三个层面部分典型案例,目标对区块链研究进程有一个宏观的了解。
2013年,染色币(colored coin)诞生和尝试,它利用比特币的特点,把空余字段定义成特殊的数据格式,用以代表所持有的其他资产,使得比特币支持更广泛的应用。
此后,各种山寨币相继出现,绝大多数山寨币来自于比特币源码克隆修改了部分参数之后成为新的币种。
2021年,非同质化代币(Non-fungible token,NFT)出现,利用区块链打造数字藏品。
各大企业入局区块链领域,提供区块链服务平台。
在供应链金融、溯源、电信、司法存证等场景都做了大量应用尝试,信通院在区块链应用场景方面都发过相关白皮书。
闪电网络(Lightning Network)基于比特币的交易脚本和时间锁定的特性,结合密码学承诺方案,构建了一个在线的支付通道,让Alice和Bob交易双方能够将交易的许多细节移动至链外,而只需将交易的初始状态和最重状态记录在链上。
Alice和Bob支付一笔押金到一个特殊的锁定脚本,然后各自生成一笔承诺交易,并获得对方的签名。公开锁定脚本所在交易开启支付通道。一旦某一方关闭该支付通道,另一方可以取出协商中剩余的属于自己的余额。
基于此,可通过扩散承诺的参与者,将支付通道延申成闪电网络。
闪电网络方案的原始论文:
https://lightning.network/lightning-network-paper.pdf
技术细节可参考这篇博客:
https://zhuanlan.zhihu.com/p/611633729
跨链是一种将A链上的数据安全可信地转移到B链上并产生预期效果的一种技术。通常,跨链利用哈希锁定技术,类似于闪电网络,使得冻结在A链上的资产等值创建在B链上。目标是做一个多个链之间的hub。
热门的跨链项目:
这一研究方向尝试构建具备一定隐私能力的公开货币。
Darkcoin方案的原始论文:
https://cryptochainuni.com/wp-content/uploads/Darkcoin-Whitepaper.pdf
CryptoNote方案的原始论文:
https://www.getmonero.org/ru/resources/research-lab/pubs/whitepaper_annotated.pdf
字节币Bytecoin,官方网站:https://www.bytecoin.org,项目地址:https://github.com/bcndev/bytecoin
门罗币Monero,官方网站:https://www.getmonero.org,项目地址:https://github.com/monero-project/monero
Zerocoin方案的原始论文:
https://doi.org/10.1109/SP.2013.34
Zerocash方案的原始论文:
https://doi.org/10.1109/SP.2014.36
更多区块链隐私保护相关的研究,可参考博客:
https://zhuanlan.zhihu.com/p/501364521
由于区块链的公开特性,将区块链网络作为信道可实现隐蔽通信,做到内容和行为双重隐藏。例如,将消息隐藏在交易地址、可变字段、时间戳、随机数等等。
Chen等人对该方向的研究做了调研和整理《Blockchain Meets Covert Communication: A Survey》,原始论文:
https://doi.org/10.1109/COMST.2022.3204281
这一研究方向尝试利用区块链的去中心特性构建更可靠的存储
Permacoin方案的原始论文:
https://doi.org/10.1109/SP.2014.37
Filecoin方案的原始论文:
https://filecoin.io/filecoin.pdf
PoCW方案的原始论文:
https://doi.org/10.1109/JIOT.2021.3115568
基于PoX(Proof of Everything)机制的区块链在性能上依然难以满足业务需求,一些研究考虑将传统的拜占庭容错算法引入到区块链共识算法中。这里列举几个比较经典的方案。
Byzcoin方案的原始论文:
https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/kogias
Algorand方案的原始论文:
https://doi.org/10.1145/3132747.3132757
分片技术将整个区块链网络分成不同的分片,由各分片的节点负责处理所在分片的事务以及存储分片的状态,通过并行验证事务,整个区块链的吞吐率近似线性地提升。
Elastico方案的原始论文:
https://doi.org/10.1145/2976749.2978389
更多区块链分片技术方向研究,可参考博客:
https://zanez.top/2022/05/17/220517-sharding-blockchain
除了结合拜占庭容错算法,还有一种直接将拜占庭容错算法的协议执行阶段与区块链的区块生成过程更紧密适配的研究。
Hotstuff方案的原始论文:
https://doi.org/10.1145/3293611.3331591
HCA方案的原始论文:
https://doi.org/10.1109/TDSC.2023.3262283
单链结构十分限制区块链系统的性能,就连以太坊都采用GHOST协议来提高吞吐率,这一类研究即引入有向无环图,重构了区块链的底层结构,实现更高的吞吐率和性能。
Hashgraph方案的原始论文:
https://www.swirlds.com/wp-content/uploads/2016/06/2016-05-31-Swirlds-Consensus-Algorithm-TR-2016-01.pdf
Conflux方案的原始论文:
https://www.usenix.org/system/files/atc20-li-chenxing.pdf
Phantom方案的原始论文:
https://doi.org/10.1145/3479722.3480990
推荐阅读这一篇综述论文,了解图结构区块链的更多有趣方案:
https://doi.org/10.48550/arXiv.2012.06128
现有区块链共识算法忽略的一个问题,即区块打包交易时的排序公平性。其中,涉及到一个名为Condorcet Paradox,即社会选择理论中的孔多塞悖论,交易的排序引用会形成哈密顿回路。
以三个投票者为例
投票者 | 第一选择 | 第二选择 | 第三选择 |
---|---|---|---|
1号 | A | B | C |
2号 | B | C | A |
3号 | C | A | B |
汇总三个投票者的排序偏好,得到如下图所示结果。
Themis方案提出了一种延迟排序的算法,交易通过区块按批划分保持排序结果,确定顺序的交易在当前区块中输出,剩余交易等待后续区块的交易排序更新信息。
Themis方案的原始论文:
https://doi.org/10.1145/3576915.3616658
个人理解,区块链本质上是一个处于基础网络架构和应用业务系统之间的技术,它更偏向于搭建平台和生态,优化管理和服务等,难以设计实际可观的现象级应用,因而在各类场景落地稍有逊色。当协同需求和网络环境足够成熟时,该技术会有它的用武之地。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。