主页 > imtoken冷钱包官方下载 > 比特币核心技术解读

比特币核心技术解读

imtoken冷钱包官方下载 2023-03-02 06:51:53

前言

在上一篇《区块链的基础知识和关键技术》中,梳理了区块链的基础知识和关键技术,而比特币是最典型的区块链,本文将解读比特币的核心技术。如有错误或遗漏,请交流并更正。

比特币系统

比特币是中本聪在 2009 年发明的一种数字货币,主要是为了抵抗中心化的银行系统,由于其复杂的系统设计和安全性和价值也在迅速增加。同时,由于不与现实身份绑定,匿名性强,因此也被用于非法交易、洗钱、敲诈勒索等恶意行为,引起了一些争议。

作为一个去中心化的区块链系统,每个人都可以访问它。您还可以在本地维护一个节点以参与比特币网络。比特币核心客户端也将用于维护本地节点。节点。

bitcoin_network_nodes

节点分为两种:全节点和轻节点。早期所有节点都是全节点,但随着数据量越来越大,在手机、平板等设备上运行比特币客户端,不需要存储整个区块链的信息,被称为简化支付验证(SPV)节点,也称为轻节点。

Bitcoin Core客户端是一个全节点,下面会详细介绍。全节点始终在线,维护完整的区块链信息;因为它在内存中维护了一套完整的UTXO,它可以验证整个区块链(从创世块到最新块)的区块和交易信息。验证交易的合法性;还决定哪些交易将被打包到区块中;验证交易是否正在挖矿,你可以决定沿着哪条链继续挖矿,当有等长的分叉分叉时选择哪个分支;同时监控其他矿工挖出的区块,验证合法性。

轻节点不需要一直在线,也不需要保留整个区块链(海量数据),只需要保留每个区块的区块头;并且只需要保存与自己相关的区块,不需要保存链上的所有交易;因为没有保存所有信息,所以无法验证大部分交易的合法性和网上发布的新区块的正确性,只能验证与自己相关的区块;一个可以通过 Merkle Proof 验证交易存在,但不能确认交易不存在;挖矿难度可以验证,因为它存储在区块头中。

下面举例说明全节点和轻节点的交易验证方式。

如果要验证区块 300,000 的交易 T,全节点将检查所有 300,000 个区块(直到创世区块),并构建完整的 UTXO 数据库,以确保该交易没有被花费;而轻节点会通过Merkle Path链接交易T相关的所有区块,然后等待300,001到300,006个区块进行确认,从而验证交易的合法性。

区块链结构

区块链是由顺序链接的块组成的数据结构,可以存储在单个文件或数据库中。比特币客户端使用谷歌的 LevelDB 数据库存储数据。每个块都指向前一个块。如果任何一个区块被修改,后续的所有区块都会受到影响,所以如果要篡改一个区块,就需要同时篡改所有后续区块,这需要很大的算力成本,往往大于好处,从而极大地保证了安全性。

区块链结构包括几个核心组件:Block Size(4字节)、Block Header、Transaction Counter(1-9字节)和Transaction。

区块链的块头大小为80字节,其中存储版本(4字节)、前块哈希(32字节)、默克尔树根(32字节)、时间戳(4字节)、难度目标(4字节)和 Nonce(4 个字节)。

每个区块的哈希值是通过对区块头进行两次哈希计算得到的,即SHA256(SHA256(Block Header)),它在区块链结构中不存在,而是由每个区块决定的。节点接收到块后,进行计算,并且是唯一的;另外,区块高度也可以作为区块的标识。

默克尔树

比特币核心

默克尔树默克尔树是区块链中非常重要的数据结构。 SHA256(SHA256(Block Header))),结构如下图所示:

merkle_tree_example

通过Merkle Tree方法可以快速验证一笔交易是否存在于一个区块中(算法复杂度为LogN),例如要验证一笔交易K是否存在于区块中,只需要访问几个节点即可

merkle_proof_example

merkle_proof_example

p>

由于比特币网络中的交易量很大,这种方式可以大大提高效率,如下图所示:

merkle_proof_efficiency

因为轻节点(比如手机上的比特币钱包)并没有保存整个区块链数据。通过默克尔树结构很容易找到交易。轻节点会构造一个布隆过滤器来获取与自己相关的交易:

首先,将布隆过滤器初始化为空值,获取钱包中的所有地址,创建检索模式以匹配与此交易输出关联的地址,并将检索模式添加到布隆过滤器;然后将bloom过滤器发送到每个节点(通过filterload消息);节点收到后比特币核心,会发送一条包含符合条件的区块头和交易的Merkle Path的merkleblock消息,以及包含过滤结果的tx消息。

在此过程中,轻节点会使用Merkle Path链接交易和区块,并使用区块头形成区块链,从而验证交易是否存在于区块链中。

使用布隆过滤器会返回满足过滤条件的结果,也会有一些误报,所以返回了很多不相关的结果,在轻节点向其他节点请求相关地址时也可以保护隐私。

比特币网络

比特币系统运行在P2P点对点网络上,节点平等,不分身份和权限;没有中心化的服务器,网络也就没有层次。

每个节点都维护着一组等待上链的交易,每个区块大小为1M,因此通过大多数节点需要几秒钟。假设有节点监控A->B的交易,将其写入集合,如果同时发现A->C的双花攻击,则不再写入,如果监控相同A->C 交易>B 交易或A->C 交易的币源相同,集合中的A->B 交易将被删除。

比特币共识协议

比特币核心

比特币作为一个人人都可以参与的开发系统,需要解决恶意节点的威胁。解决的办法就是工作量证明机制,也就是算力投票机制,当一个新的交易产生时,广播一条新的数据记录,全网执行共识算法,也就是矿工挖来验证记录,即解出随机数,最先解出问题的矿工获得记账权并生成新区块。然后将新区块广播给外界,其他节点验证通过后加入主链。

钱包

比特币作为一种数字货币系统,有自己的钱包系统,主要由私钥、公钥和钱包地址三部分组成。

钱包地址的生成过程如下:

使用ECDSA(Elliptic Curve Digital Signature Algorithm)椭圆曲线算法,利用私钥生成对应的公钥,公钥很长,很难输入,因此通过SHA256得到一个公钥哈希值, RIPEMD160算法,最后用Base58Check处理,得到更具可读性的钱包地址交易流程

拥有钱包(和资产)后,您就可以开始交易了。让我们通过一个典型的比特币交易来了解这个过程:

A和B都有一个比特币钱包地址(可以用Bitcoin Client生成,原理同上),假设A要转5个BTC给B,A需要得到B的钱包地址,然后用自己的私钥转5个BTC给A->B进行交易签名(因为A的私钥只有他自己知道,所以拥有私钥就意味着拥有钱包资产交易的所有权);然后发布交易,在比特币系统中发起交易需要支付少量矿工费作为交易费;矿工会开始验证交易的合法性,经过六次确认后,交易就可以被比特币账本接受,整个验证过程大约需要10分钟。

为什么矿工要消耗大量的算力来验证交易?

矿工在验证过程中可以获得区块奖励和矿工费。区块奖励将减少四年。所以后期的主要激励是矿工费。

为什么验证需要 10 分钟?

比特币并非绝对安全。新交易容易受到一些恶意攻击。通过控制挖矿难度,将验证过程控制在10分钟左右,可以很大程度上防止恶意攻击。概率保证。

如何避免比特币系统中的双重支出?

比特币采用了一个称为 UTXO(未花费交易输出)的概念。当用户收到一笔 BTC 交易时,它将被包含在 UTXO 中。

在这个例子中,A 想向 B 转账 5 BTC,而 A 的 5 BTC 可能来自两个 UTXO(2 BTC + 3 BTC),所以当 A 向 B 转账时,矿工需要检查的是在交易之前已经花费了两个 UTXO。如果检测已经用完,则交易不合法。

下图很好的说明了多笔交易的流程和UTXO的相关概念

btc_utxo_example

比特币核心

另外,UTXO还有一个很重要的就是不可分割的。如果 A 有 20 个 BTC,他想将 5 个 BTC 转给 B,则交易首先以 20 个 BTC 作为输入,然后产生两个输出,一个将 5 个 BTC 转给 B,一个返回给 B。A 有 15 BTC 剩下,所以 A 有另一个价值 15 BTC 的 UTXO;如果单个 UTXO 不够支付,可以合并多个输入,但总和必须大于交易金额。

矿工如何验证交易发起方是否有足够的余额?

这个问题看起来很简单,第一反应就是像支付宝一样检查余额是否足够。但比特币是基于交易的账本模型,没有账户概念,无法直接查询余额。要知道一个账户的剩余资产,你需要查看所有之前的交易,找到并添加所有的 UTXO。

交易模型

上面提到了交易是如何发生的,那么比特币交易的组成部分是什么?

blockchain_bitcoin_script_detail

如图,第一部分是Version,表示版本。

然后是Input相关信息:Input Count表示数量,Input Info表示输入内容,即Unlocking Script,主要用于检查输入源,输入是否可用,以及其他输入细节.

接下来是输出相关信息,Output Count代表数量,Output Info代表输出内容,也就是Locking Script,主要用来记录输出了多少比特币,未来消费的情况,详情的输出。

最后一个是Locktime,表示交易可以加入区块链的最早时间/区块。小于5亿直接读取块高,大于5亿读取时间戳。

比特币脚本

交易中提到了解锁脚本和锁定脚本,那么比特币脚本是什么?

比特币脚本是记录在每笔交易中的指令列表。脚本执行时,可以检查交易是否有效,比特币是否可以使用等,典型脚本如下

  OP_DUP OP_HASH160  OP_EQUALVERIFY OP_CHECKSIG

比特币脚本是根据栈从左到右执行的,使用Opcodes对数据进行操作,在上面的脚本语言中,里面包含了要入栈的数据,不包含,前缀OP_就是操作符( OP可以省略),脚本也可以将数据嵌入并永久记录在链上(不超过40字节)比特币核心,记录的数据不影响UTXO。

在交易中,

比特币核心

是解锁脚本,OP_DUP OP_HASH160

OP_EQUALVERIFY OP_CHECKSIG 部分是锁定脚本。

与大多数编程语言相比,Bitcoin Script 是非图灵完备的,没有循环或复杂的流控制,执行简单,并且无论在何处执行都具有确定性的结果。状态被保存并且脚本到脚本是相互独立的。由于以上特点,比特币脚本虽然比较安全,但不能处理很复杂的逻辑,所以不适合处理一些复杂的业务。以太坊提供的智能合约在这方面实现了创新突破,因此诞生了很多去中心化的应用。

挖矿

上面整个交易过程都提到了挖矿,接下来我们会详细讲。

为了获得区块奖励和矿工费,一些节点会验证交易,所以称为矿工挖矿。区块奖励由 coinbase 创建,每四年递减一次,从 2009 年的 25 个减少到现在的 6.5 个。

挖矿实际上是一个不断尝试随机数以达到一定目标值的过程。如果小于某个目标值,则人为设置此难度,以调整验证时间,提高安全性,同时不解决数学问题。

矿工会不断尝试这个值,成功率很低,但尝试次数可以很大。因此,计算能力强的节点具有比例优势,更容易解决问题。

为什么要调整挖矿难度?

因为在比特币系统中,如果出块时间太短,就容易分叉。如果分叉过多,会影响系统的共识,危及系统的安全。比特币系统通过难度调整将出块速度稳定在10分钟左右,从而防止交易被计算。

挖矿难度如何调整?

系统会每隔 2016 个区块(约两周)调整一次目标阈值,该阈值存储在区块头中。整个网络中的所有节点都需要遵循新的挖矿难度。如果恶意节点不调整代码如果目标在目标中,诚实矿工不会批准

目标阈值 = 目标阈值 *(实际生成 2016 个块的时间 / 估计生成 2016 个块的时间)

比特币诞生之初,矿工少,挖矿难度低。他们中的大多数使用家用电脑(CPU)进行直接挖矿;随着越来越多的人参与到比特币生态中,挖矿的难度也越来越高,逐渐开始使用一些算力强大的GPU进行挖矿,还有一些专用的ASIC(Application Specific Integrated circuit)随着市场需求逐渐诞生的专用矿芯片和矿机;而且现在也有很多大型矿池,聚集了全网的大量算力进行中心化挖矿。

在这个大型矿池系统中,Pool Manager 充当全节点,大量矿工共同计算哈希值,最终通过工作量证明机制分配收益。但是,如果算力过于集中,很容易产生一些中心化风险。比如一个大型矿池达到全网51%以上的算力,可以回滚交易或者抵制部分交易。

分叉

比特币核心

在比特币系统中,也会有没有达成共识的情况,称为分叉。分叉主要分为两种,一种是状态分叉,往往是一些节点故意进行的;另一个叫做协议分叉,意思是比特币协议有一些区别。

协议分叉可以分为两种,一种叫做硬分叉,即对协议的某些内容进行不兼容的修改,比如将比特币的区块大小从1M调整为4M,这种分叉方式是永久的,从某个节点形成两条平行链,比如Bitcoin Classic,就形成了两个币。

另一个称为软分叉。比如比特币的区块大小还是有调整的,只是从1M调整到了0.5M。此次调整后,将出现新的节点来挖掘小块。在旧节点挖大块的情况下,软分叉是非永久性的。典型的例子是coinbase内容的修改和P2SH(Pay to Script Hash)产生的分叉。

比特币核心客户端

Bitcoin Core 是比特币的一种实现,也称为 Bitcoin-QT 或 Satoshi-client,您可以通过它连接到比特币网络、验证区块链、发送和接收比特币等等。共有三个网络,Mainnet、Testnet和Regnet,可以切换。

提供了一个调试控制台以直接与比特币区块链交互。常用操作如下:

区块链

哈希

方块

钱包

内存池

交易

签名

网络

挖矿

总结

以上是对比特币核心技术的一些解读,主要从其基本原理和数据模型出发。了解了区块链的设计理念和运行机制后,我们将学习分析以太坊,也就是所谓的区块链2.0,敬请期待!

参考文献COMP7408 分布式账本和区块链技术,S.M. 教授Yiu, HKUUdacity Blockchain Developer Nanodegree, Udacity Blockchain Technology and Application, Xiaozhen, Beijing University Blockchain Technology Advancement and Practice, Cai Liang, Li Qilei Liang Xibo, 浙江大学 |趣链科技