主页 > imtoken新版本 > 区块链 2.0 架构:以太坊区块链

区块链 2.0 架构:以太坊区块链

imtoken新版本 2023-03-30 05:24:15

比特币提供HTTP/JSON RPC API接口,通过该接口对外控制比特币节点。 在运行比特币核心bitcoin-qt并传入-sever选项时,或者运行bitcoind时,比特币提供了一个HTTP/JSON RPC服务器,外部程序可以通过JSONRPCAPI访问比特币节点。 默认情况下,服务器只允许来自同一台机器的客户端访问。 打开任何机器进行远程访问是非常危险的,不建议这样做。

不同语言编写的程序可以通过HTTP/JSONRP API接口轻松访问比特币节点。 例如:Bitcoin-JSON-RPC-Client是一个轻量级的Java客户端程序。

3.命令行工具

bitcoin-cli 提供了一个命令行工具来控制比特币节点。 命令行工具通过JSON RPC API接口访问比特币后台bitcoin。 用户可以通过发送指令完成比特币的各种功能,如:查询余额、支付、转账等。

4.比特币浏览器bx

比特币提供了一个跨平台的 C++ libbitcoin 库,支持比特币全节点服务器和浏览器(BitCoinExplorer (bx))作为客户端命令行工具。 bitcoin 浏览器命令提供与 bitcoin-cli 基本相同的功能。 但同时bx提供了一些bitcoin-cli所没有的密钥管理功能和处理工具,包括2类确定性密钥管理、助记码密钥生成(例如使用好记的单词作为私钥)密钥种子)、隐蔽地址、支付和查询支持。

5.图形开发工具(Qt)

Bitcoin Core 是比特币使用最广泛的客户端。 它是使用C++开源用户界面开发工具Qt开发的桌面客户端。 Qt 是一个跨平台的 C++ 图形用户界面应用程序框架。 它为开发者提供了创建图形用户界面所需的功能,广泛用于GUI程序的开发,也可用于开发非GUI程序。 Qt 是完全面向对象的,易于扩展,并允许真正的组件编程。 Qt 支持更多平台(包括 Microsoft Windows、GNU/Linux、MacOSX、Android、iOS、WinCE、UNIX 家族等)。

比特币期货对比特币影响_808比特币创始人颜万卫 炮制比特币风险大_一个比特币内存有多大

#节点背景

区块链管理、交易验证、内存池管理、邻居节点管理、共识(Consensus)、规则(Policy)、密码(Crypto)、数字签名(Sec256kl)、脚本引擎(Script)、HTTP/JSON RPC服务器(RPC)、数据库(LevelDB、BerkeleyDB)、P2P网络管理、队列管理(ZMQ)、挖矿节点【CPU挖矿(Cpuminer)、CPU挖矿(Cgminer)、ASIC挖矿(bfgminer)、矿池挖矿(bitminer)

比特币节点后台负责参与比特币网络的通信和互联,维护区块链,验证区块和交易,广播和中继区块交易信息。 比特币的后台程序主要由比特币和挖矿节点程序组成。 比特币核心bitcoin-qt实际上是一个包括前后端(挖矿功能除外)的集成节点。 下面简单介绍一下比特币后端组件的功能。

1. 区块链管理

区块链管理包括初始化区块链下载、链接块、断开块、验证块和保存块,以及找到最长链的顶部块。 主要是区块链管理的代码逻辑。 cpp程序实现。

1)下载区块链:比特币全节点首次加入网络时,首先要下载并验证整个区块链。 当区块链的容量不断增加时,下载整条链的世界会越来越长。 在网速较低的环境下,甚至可能需要数天时间才能完成整条链的下载。 2014年,比特币0.10.0版本正式发布了一种全新的初始区块链下载方式,称为“区块头优先”(header first)。 节点下载完所有区块头后,可以并行地从多个相邻节点下载不同区间的区块,大大提高了整个区块链的下载速度。

2)接受区块链:现有节点开启时,会先将整个区块链的索引从LevelDB调入内存。 需要注意的是,区块链的索引不是单手链,而是可能是一棵树,也就是说每个区块只有一个父块,但可能有多个子块,因为子块形式临时分叉需要逐渐发现哪个子块属于最长的链。 根据比特币的挖矿难度设计,全网出块速度动态调整为10分钟左右。 一个节点收到另一个新块。 如果指向前一个区块的区块的区块头哈希值与节点当前的顶部区块哈希值相同,则节点将尝试连接新收到的区块,并将其作为当前链的最顶部区块,从而扩展节点拥有的区块链。 这是因为在区块链中,每一个区块都保存着前一个区块的区块头的哈希值,区块之间就是这样链接起来的。

808比特币创始人颜万卫 炮制比特币风险大_一个比特币内存有多大_比特币期货对比特币影响

3)区块链验证:在区块链管理中,连接块函数ConnectBlock()是检测“双花”交易的关键。 该函数检查新收到的区块中的所有交易,并验证每笔交易的比特币来源是否可以在当前“未花费交易输出(UTXO)”记录中找到匹配项。 在网络延迟的情况下,节点收到的块可能会乱序到达。 在这种情况下,一些交易的比特币来源可能暂时无法在UTXO记录中找到,但是当稍后收到延迟的区块时,UTXO记录将被更新一个比特币内存有多大,区块链将被链接。

区块验证流程图

4) 重组区块链:当一个节点在网络中发现了一条不基于其当前区块链的更长的区块链时,它需要断开现有的“区块链”并重组区块链。 大多数重组只是对一个区块的重组,多发生在不同矿工几乎同时挖出合法区块时。 断开区块,重组区块链,设计UTXO。 断开连接的区块中的交易将被回滚到交易内存池(mempool)。 这时候可以使用“回滚”记录来回滚断开的区块事务。 回滚记录将用于断开现有块。

2.区块验证

交易验证模块根据以下条件检查收到的比特币交易的合规性:

交易的格式是数据结构必须正确; 交易的输入输出不能为空; 交易的大小不能超过定义的区块最大值MAX_BLOCK_SIZE; 每笔交易的输出,以及所有输出的总和,必须在一定范围内。 大于0小于2100个比特币; 交易输入的哈希值不能为0,挖矿(coinbase)交易不能广播; nLocktime 小于或等于 INT_MAX; 交易的字节大小必须等于或大于100; 交易的签名操作次数应小于签名操作的上限; 解锁脚本(scriptSig)只能将数字入栈,锁定脚本(scriptPubkey)必须是标准格式; 与接收到的交易相匹配的交易必须在当前交易池或主链上的某个区块中被找到; 对于交易的每个输入,如果在当前交易池中可以找到其对应的UTXO输出,则该交易必须被拒绝(双花交易),因为当前交易池没有记录在区块链交易中,并且每个输入的交易应来自已确认的UTXO,如果在当前交易池中找到,则为双花交易; 对于交易的每一个输入,如果在主链或当前交易池中找不到其对应的UTXO输出,则该交易为孤儿交易,应将其放入孤儿交易池; 对于交易中的每个输入,如果其对应的UTXO输出是挖矿初始(coinbase)交易,则初始交易应该得到100个确认块的确认; 对于交易中的每个输入,对应的输出必须是UTXO(存在且未被花费); 使用相应的输出交易获取输入值,检查每个输入的值和总量应该在允许的范围内(0~2100万比特币); 如果交易的总输入小于总输出,则交易将被拒绝; 如果交易费用太低,交易将被拒绝; 每个输入的解锁脚本(unlocking script)必须配合相应的输出锁定脚本(locking script)来验证交易的合规性。

最后一个是check,不好理解,错过了比特币平台设计的精髓。 比特币的一大创新是依靠脚本来验证交易的合法性,即每一笔要花费的比特币都必须来自对应的来源。 简单来说,比特币交易中的输入和输出都由脚本和值组成。 通过比特币的脚本引擎在一个简单的堆栈计算平台上执行。

一个比特币内存有多大_比特币期货对比特币影响_808比特币创始人颜万卫 炮制比特币风险大

3.内存池管理

比特币内存池(mempool)管理也是交易池管理。 节点经过验证的交易被放置在交易池中,准备被放置在一个被挖掘的块中。 当矿工挖到一个合格的区块时,他会按照一定的优先顺序从交易池中选择交易放入区块中。 根据交易中输入对应的UTXO的“链龄”和交易金额的大小来划分优先级。 UTXO 较旧的交易和交易金额较大的交易具有较高的优先级。

使用以下公式计算优先级:

优先级 = SUM(输入值 x 输出年龄)/交易规模

比特币区块中的前 50k 字节是为高优先级交易保留的。 高优先级的交易手续费即使为0也会计入区块链的优先区域。

4.相邻节点管理

当一个新的比特币节点进行初始启动(bootstrap)时,它需要发现网络中的其他节点并连接到至少一个节点。 一般在8333端口与已知节点建立TCP连接,连接的“握手”过程会发送一个版本信息,包括:P2P协议版本、本节点支持的服务、当前实践、对方节点的IP地址、本节点IP地址,比特币软件系统,本节点当前区块链长度。 对端节点收到握手信息后会回复确认信息。

一个比特币内存有多大_比特币期货对比特币影响_808比特币创始人颜万卫 炮制比特币风险大

新节点如何发现它的邻居

1)用一些“DNS种子”查询DNS,这些种子是为比特币节点提供地址的DNS服务器。 Bitcoin Core 带来了 5 个不同的“DNS 种子”。 DNS 种子提供稳定的比特币节点地址。

2)直接使用一个已知的邻居节点作为种子节点,然后通过它发现更多的邻居节点。 当发现新的邻居节点时,新节点一般会断开与种子节点的连接。 新节点将自己的地址信息发送给邻居节点,邻居节点会不断将新节点的地址转发给自己的邻居节点,这样新节点就会被网络上的其他节点知道并保持连接网络打开。

5. 共识管理

比特币中广义的共识管理(Consensus)应该包括挖矿、区块验证和交易验证规则。 由于比特币的关键是在陌生的 P2P 环境中建立共识机制一个比特币内存有多大,因此共识管理至关重要。

6.规则管理

比特币的共识规则是所有节点都必须遵守的规则(政策)。 并且每个节点可以采用一些不同于共识规则的个性化规则。 该部分的规则由规则管理模块实现。

一个比特币内存有多大_808比特币创始人颜万卫 炮制比特币风险大_比特币期货对比特币影响

7.密码模块

密码模块(Crypto)主要处理比特币地址,使用RIMEMD和SHA-256算法和Base-58编码生成比特币地址。 比特币的公钥通过私钥生成,然后公钥经过Secure Hash Algorithm (SHA)算法SHA256和RACE Integrity Primitives Evaluation Message Digest (RIPEMD)算法RIPEMD160处理,最后形成比特币地址通过Base58编码。

8.签名模块

比特币使用椭圆曲线数字签名算法(ECDSA)来实现数字签名并生成公钥。 ECDSA是一种非对称加密算法,是一种基于椭圆曲线离散对数问题计算难度的公钥密码学方法。 secp256k1 曲线。

9.脚本引擎

比特币的脚本语言是一种专门设计的类似“Forth”的、基于堆栈的编程脚本(script)语言。 基于堆栈的语言的指令只按顺序执行一次,即不指定循环或跳转。 所以脚本中的指令数量给了我们一个程序运行的实用性上限,以及它需要的内存量上限。 这种基于堆栈的计算平台不是图灵完备的计算平台。

常用比特币脚本指令表

10.采矿

很多人认为比特币挖矿很神秘。 其实简单的意思就是:不断对区块头进行哈希处理,每次都尝试改变一个随机数,直到区块头的哈希值满足一定的条件,比如初始的0必须有多少个才算合格的区块.