这篇报告主要以本人视角回顾从 2016 年接触区块链至今的科研经历,介绍区块链技术原理和梳理区块链学术研究,为所在项目团队做相关知识补充,也为感兴趣的研究者提供少许思路。
1 区块链技术介绍
1.1 区块链是什么
根据 Wikipedia 的定义:“A blockchain is a distributed ledger with growing lists of records (blocks) that are securely linked together via cryptographic hashes.”
区块链是一种分布式账本,其中包含不断增长的记录,用区块来进行表示。这些区块通过密码学哈希安全地链接在一起,每个区块都包含前一个区块的哈希值,因此有效地形成一条链。
-
从输出来看,区块链类似于数据结构中的链表。稍有不同的是,区块链中的指针不是内存地址,而是数据的哈希值。由于哈希函数单向不可逆,区块只能追加,无法插入。
-
从构造来看,区块链并非仅由单个程序产生。它涉及多个有相同行为且独立运行的程序,一般被称作节点。节点之间通过网络连接,以对等的角色相互通信。节点同步本地视图里的数据,各自执行预先定义的协议,最终生成全局唯一的区块链。
这也是为什么早期在解释区块链概念的时候,经常将其类比为分布式数据库系统:用户发送的事务请求,通过执行共识算法,存储在多个节点中,以保持一致性。
不同的是,数据库提供 CRUD 操作(即创建、读取、更新和删除),关注结果;对比而言,区块链仅支持 CR 操作(即创建和读取),记录过程。尽管两者在行为上十分接近,但是区块链这个概念更能区分不同。
1.2 区块链有什么特性
由此看来,区块链并没有创造什么新的技术,而是将现有的各种技术组合在一起,设计了一个有特殊属性的系统框架。基本地,以密码学作为安全支撑,以分布式作为架构模板,以链结构作为组织形式,更多的技术可以整合进来以设计新的系统。
这样的基本设计带来了三个关键的特性:
- 公开(public):区块数据是公开可访问的,透明的概念也源于此,因其共识算法需要对区块数据达成一致,节点也是开放加入的。
- 去中心(decentralized):不依赖第三方或者某个中心节点进行管理,缺失部分节点系统仍然可正常运行。
- 不可篡改(immutable):一旦写入到区块链上的信息,无法进行修改和删除。
至于匿名性、去信任、自治性等概念,都可以与上述特性关联或者延申。随着技术的发展,根据业务的需求,研究者对区块链进行了部分改造,在其特性上做出了多种尝试,丰富了区块链的技术内容。
在公开特性上,约束对节点的开放范围,区块链被划分为三类。
- 公有链(public blockchain):任何用户无需授权即可加入成为节点,参与维护区块链,执行共识算法。
- 联盟链(consortium blockchain):被授权的用户才能成为共识节点,甚至不同角色给定的访问权限也有所不同。
- 私有链(private blockchain):节点完全由某个机构掌握,与中心化数据库类似,一般做内部使用。
由于私有链对于区块链技术而言并没有太多的意义,现在也经常将区块链分为许可链(permission blockchain)和非许可链(permissionless blockchain),分别对应上述的联盟链和公有链。
在去中心特性上,节点的身份由某个可信中心机构认证(例如公钥基础设施PKI),或设计多个中心以加强系统的权威性和可控性。
在不可篡改特性上,曾有应用变色龙哈希(Chameleon Hash),或者调整区块结构的部分字段,设计可编辑区块链(Redactable Blockchain)的方案。
1.3 区块链发展趋势和现状
区块链技术起源于2008年11月,一个化名为中本聪的人,在网络上发表了一篇论文(非会议、非期刊、也不是预印本),题目为《Bitcoin: A peer-to-peer electronic cash system》,即比特币系统的原型。
2009年1月,比特币网络正式开始运行,一直到现在。自此之后,关于区块链项目和研究呈爆发式增长。截止2024年1月底,在Github上以Blockchain
为主题的开源项目多达2.7万多个,在谷歌学术上搜索Blockchain
关键字可找到60多万篇相关学术论文。
区块链作为一项底层技术,有效解决的是信任问题。可以应用的领域非常广,包括金融、物流、医疗、物联网、供应链、数字版权、数据共享、存证防伪等等。
然而,区块链技术的实际落地相当困难,目前在金融和政务上的落地占大头。尤其在金融领域,稳定币的出现,将虚拟货币与传统货币挂钩。我国更是推出了自己的数字货币,同样也使用了区块链技术。
关于区块链技术落地的难点可类似于:本地vs云(需要解决通信性能),人工设计vs大模型生成(需要解决目标对齐)。区块链的应用要有明确切实的需求!
2 经典区块链系统
2.1 比特币
在比特币的原始论文中,对交易、时间戳、工作量证明、网络、激励、验证都有分模块描述,但是比较粗糙。本报告按照《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个字节 |