主页 > 官网最新版imtoken钱包 > 比特币的模型和技术概述

比特币的模型和技术概述

官网最新版imtoken钱包 2023-04-06 05:55:31

2021-08-151、比特币概览

比特币是基于区块链技术的数字货币的具体应用。 它结合了多种不同的技术,建立了多种模型。 如下图所示,一个去中心化的比特币客户端需要实现基于p2p的网络模型,基于UTXO的具有激励、分叉处理和共识机制的交易模型,以及基于密码学和整体区块的底层数据结构链式结构。

比特币的模型和技术概述

2. 底层数据结构---**的产生、作用和管理

比特币的模型和技术概述

椭圆曲线密码学(Elliptic Curve Cryptography,简称ECC)是一种可以在不泄露私钥的情况下使用公钥验证数据的非对称加密算法,即“私钥加密,公钥解密”。 该算法在群论的基础上,先定义点加运算,再定义点乘运算,得到离散对数求逆公式:K=k*G。 其中K为公钥,k为私钥,G为椭圆曲线上的随机初始点。 已知G(x,y),从k中求K很容易,但从K中求k却很困难。根据这个特性,公钥可以在不泄露私钥的情况下与他人共享(实际上,它不是共享公钥K,而是共享公钥K的衍生物---比特币地址A)。

比特币的模型和技术概述

上图是公钥K推导出比特币地址A的流程图,可以看出公钥K经过了SHA256和RIPEMD160算法,即双重哈希得到160bits的输出公钥哈希值,以及然后对公钥哈希值进行Base58Check编码,得到最终的比特币地址。 由于得到的公钥是椭圆曲线上的一个最终映射点,公钥K由x和y值组成,长度为256+256位,传输时会造成不便,所以不仅要编码还要压缩是必须的。

常用的公钥编码格式有:base58、base58check。

常用的私钥编码格式有:Hex、WIF、WIF-compressed。

常用的公钥压缩:只存储x坐标,忽略y坐标(知道椭圆曲线,从x算y很简单); 未压缩的公钥以04为前缀,压缩的公钥以02、03为前缀,02或03的区别在于确定y坐标的符号。

私钥可以生成公钥和比特币地址,私钥可以用来解锁UTXO(可以理解为对你将要使用的存款进行数字签名)。 私钥需要保密,而私钥的数量很多,因此需要一种高效的私钥管理方法。 该功能由客户端实现,类似于现实中的钱包功能。 下面列出了一些常见的钱包实现。 (下面的BIP是Bitcoin Improvement Proposals,比特币提出的一个方案)

比特币 私钥 密码_比特币私钥分享_比特币私钥数据库

非确定性(随机)钱包:这种方式也叫JBOK(just a bunch of keys),意思是“一串私钥”。 很明显,它从一开始就生成了一堆随机私钥,并保存了所有副本。 私钥只能使用一次,避免重复,必须经常备份,以免丢失。 不鼓励这种方法。

确定性(种子)钱包(BIP0032/BIP0044):这种方法使用单项离散方程从公共种子生成私钥。 因此,私钥可以轻松管理和备份,而种子可以严格控制。 一种常见的类型是“分层确定性钱包”。 这个钱包的工作方式如下图所示。

比特币的模型和技术概述

比特币的模型和技术概述

比特币的模型和技术概述

3. 区块链的整体结构---区块、默克尔树

区块链本质上是一种数据结构,就像树图一样。 区块链上的每个节点都成为一个块,块中的元数据使用谷歌的 levelDB 数据库存储。 每个区块中的区块头通过SHA256哈希计算得到一个区块哈希值,该哈希值可以唯一标识,同时区块头中的父区块哈希值指针字段数据指向上一个区块,从而使得块连接成一条链,父指针可以从块的顶部追溯到创世块。 这样,区块链就类似于一个垂直堆栈。

区块链其实可以有两种检索方式:第一种是根据父指针逐个检索,第二种是将区块高度和区块哈希的键值对存储在数据库中,使用要检索的块的高度。

块节点结构

比特币的模型和技术概述

块头字段中的所有元数据

比特币的模型和技术概述

比特币私钥数据库_比特币 私钥 密码_比特币私钥分享

Merkle根,Merkle树

比特币的模型和技术概述

对于交易来说,如果每笔交易都被完整地存储起来,那么存储量将是巨大的,所以交易数据必须有一种机制,既能实现压缩,又能保证安全性。 如上图所示,将一个区块的所有数据分别哈希,存储在叶子上,成对再次哈希,直到生成一个Merkle根,用于存储在区块域中,实现数据压缩。 另一方面,根据哈希的特性,叶子节点的任何数据发生了变化,通过验证可以发现篡改。

Merkle树的平衡性:如果交易数为奇数,则通过复制不平衡的叶子节点,达到偶数后即可构建Merkle树。

比特币的模型和技术概述

通过Merkle树验证交易:如果要验证上图中绿色节点的交易数据是否存在,只需要一个绿色节点和四个蓝色节点的哈希值计算Merkle根哈希即可。 即可以与block字段进行对比验证。 这种方法的作用对于具有巨大块数据的验证计算尤其重要。

Merkle 树和简单支付验证(SPV):对于轻量级客户端,通常不可能存储整个区块链账本的所有区块数据,而只能存储区块头。 这个轻量级客户端在通信的时候,会建立布隆过滤器只接受包含自己需要的比特币地址的交易数据的区块,同时以Merkle_block消息的形式接收数据。 在 Merkle_block 中,只包含区块头和 Merkle 根中与目标比特币地址关联的哈希路径。 这极大地简化了轻客户端的负载,同时也保持了其验证交易的能力。

4.交易模型---UTXO、输入输出结构和脚本

现实中,我们有100块钱,付了90块钱给商家买货,剩下10块钱,90块钱是商家的,10块钱是自己的。 在比特币中,情况略有不同。 由于在比特币区块链中比特币私钥分享,整个网络维护着同一个完整的账本,区块链数据应该是所有交易和资金的所有权证明。 在比特币中,财产所有权不是通过记录“我有多少钱”来实现的,而是通过“别人转给我多少钱,我还没有花掉”来证明个人对比特币的所有权。 这个数据模型称为“UTXO”(未花费交易输出未花费交易输出)。 如下图所示,输入来自于各个消费者的消费,输出者表明这些比特币最终属于哪个比特币接收者。 但是值得注意的是,输入的总和往往比输出的总和高一点,因为需要创建区块的人(矿工)有一点交易费和人工费。 同时,还有一种常见的情况,就是变化过大,此时exporter和importer会重叠。

一般来说,输入来自每个产生交易的消费者,输出属于比特币的接收者、找零者和矿工。

钱包余额:用户的余额通常是通过客户端扫描区块链数据并汇总用户所有的UTXO来计算的。

比特币的模型和技术概述

比特币 私钥 密码_比特币私钥数据库_比特币私钥分享

以下是区块中交易字段中每笔单笔交易的数据结构。

比特币的模型和技术概述

交易的输入字段:简单的说,交易的输入是指向UTXO的指针。 在实际环境中,通过调用比特币核心客户端的远程调用或者第三方应用接口来获取可用的UTXO。 使用它需要包括一个解锁脚本来签名。 输入数据结构如下:

比特币的模型和技术概述

交易输出字段: 向某人发送比特币比特币私钥分享,其实就是为对方的比特币地址注册一个新的UTXO,以后只能通过对方的比特币私钥来解锁。 为对方注册一个新的 UTXO 也需要一个锁定脚本来锁定 UTXO。 以下是输出数据结构:

比特币的模型和技术概述

Bitcoin Transaction Scripting Language:也称为Script,是一种基于Reverse Polish Notation的栈式执行语言。 在比特币核心客户端的源码中,有五个标准脚本,分别是:P2PKH、P2PK、MS多重签名、P2SH、OP_Return。 详细的脚本知识请参考《掌握比特币》一书。

挖矿机制:挖矿过程简单来说就是支付本地算力。 通过验证新的交易数据,同时完成一个复杂的哈希计算问题,构建新的区块并向全网广播,获得黄金(无中生有,类似于央行印新币,即书中称为造币交易,其交易输入字段与普通交易字段结构不同,没有UTXO输入,只有coinbase作为输入)和区块中交易产生的交易手续费。

共识机制:区块链的共识机制是区块链的核心,使异步、自发交互的去中心化网络实现安全性和一致性。 整体上可以分为四个方面: 1. 每个全节点按照统一标准独立验证接收到的交易; 2. 挖矿节点支付算力,将新的交易集打包到节点中 3. 各节点检查收到的新区块,组装到区块链中; 4. 每个节点独立选择有分叉的区块链,选择工作量证明机制最大的区块链下的工作量。

工作量证明机制(Proof Of Work):该机制是一个数学问题,其目的是提高获得记账权的门槛。 流程如下:区块字段包含两个唯一字段------“难度目标”和“Nonce”。 难度目标是一个以t和0开头的值,表示需要找到一个哈希值,它的大小比以0开头的t个值(二进制位)还小。 哈希计算需要输入和迭代。 输入由文本字符串和随机数变化值组成,随机数不断增加以迭代调整输入。 这是:

outputHash = hash(文本拼接nonce++)

必须找到小于难度目标的 outputHash。

比特币私钥分享_比特币私钥数据库_比特币 私钥 密码

找到后,将nonce填入本节点构建的新区块的nonce域,广播到全网供其他节点验证。 验证只需要简单的计算。

值得一提的是,难度调整脚本定义在Bitcoin core的源文件中。 根据难度调整,调整区块链的发币速度。

分叉机制:对于网络延迟大、布局大的比特币网络来说,分叉是不可避免的,但每个节点只需要独立选择累积工作量证明最大的分支或最长的链作为主链就可以解决问题。 这样解题的过程可以看下面的一系列图,相同的颜色表示最上面的是同一个方块:

比特币的模型和技术概述

比特币的模型和技术概述

比特币的模型和技术概述

比特币的模型和技术概述

比特币的模型和技术概述

最后,分叉的区块链选择最长的链获得完整的区块链账本。

5.网络模型------节点类型、协议

比特币区块链的一个全节点包括以下所有功能,根据不同的功能定义不同的节点,类似于一个平台的插件。

比特币的模型和技术概述

比特币私钥分享_比特币 私钥 密码_比特币私钥数据库

比特币的模型和技术概述

网络发现:访问P2P区块链网络,通常需要在8333端口建立TCP链接,发送包含基本认证内容的版本消息,开始握手通信。 在交换version消息建立连接后,新节点发送addr消息来学习更多的peer ip地址,以便连接到更多的相邻节点。 如下所示:

比特币的模型和技术概述

比特币的模型和技术概述

区块同步:连接建立后,节点做的第一件事就是同步区块,发送getblocks消息给peer节点获取区块数据,peer节点发送inv消息给application节点表示库存list, 并找出未同步的块 同时,当未达到数据传输限制时,应用节点发送getdata消息申请确认块,peer节点批量发送块信息。 协议流程如下:

比特币的模型和技术概述

SPV同步协议:当全节点同步区块时,整个区块同步,无法获知具体交易,但SPV轻节点只请求具体交易,存在隐私泄露风险,因此Bloom filter用于选择块并隐藏特定地址信息。 SPV节点同步区块头流程如下:

比特币的模型和技术概述

交易池:作为一个整体,区块链中的数据时不时会出现不一致的情况,因此需要将一些具有不确定性的最新交易信息存储在本地内存或本地数据库(交易池)中,而不是直接加入区块链. 区块链。 此外,一些节点维护一个孤立交易池,以处理某些子交易在本地比父交易更快地通信的情况。 如果孤儿交易池的子交易与刚刚到达的父交易相匹配,它们将形成一个完整的交易,并从孤儿交易池移动到交易池(级联重构)。 以上交易为未确认交易,等待确认,部分客户端会额外维护一个UTXO池,里面只包含已确认的交易,都是可用的比特币。

分类:

技术要点:

相关文章: