区块链每日问答之节点(1)

区块链节点

区块链节点,通常指的是区块链网络中的计算机,也就是说任何连接到区块链网络的计算机(包括手机,矿机等)都称为节点。比如说比特币网络,是一个公有链,用户在自己的联网电脑上运行比特币程序时,这个电脑就成为比特币区块链网络中的一个节点。是指下载了相关加密货币的节点软件,以参与对等网络的计算机。操作一个节点可以是普通钱包用户,矿工或多人协作。不同的区块链对节点的数量和要求有所不同。通常,节点首先需要具有一定的存储空间,保证足够好的性能以免一跑就堵塞,然后设备需要连接网络,并可以使用矿机、服务器和电脑等进行操作接入区块链,具体使用什么工具视节点要求而定。

区块链节点有何特征:

1、具有存储空间,可以将区块数据存储在TF卡、U盘、移动硬盘和计算机等。

2、连接网络,所有的存储空间的设备必须连接网络。

3、参与区块链,需要在存储空间上运行区块链相应程序,通过可视化终端进行交易。

每一个安装有数字货币客户端并连接到数字货币区块链的电脑就是数字货币区块链的一个有效节点。这个世界上有多少这样的电脑或手机,区块链上就有多少个节点。

下面将对节点要完成的功能,节点的角色,矿池节点,Bitcoin Core,SPV进行进一步介绍.

节点要完成的功能

引用精通比特币上的观点,比特币节点的功能有四个:钱包,挖矿,保存完整区块链,以及路由。

image-20220118211105430

第一种角色是普通全节点。一个节点只要是下载了完整且最新的区块链数据,那它就是一个全节点了。全节点当然也拥有路由功能,另外还可能包含或者不包含其他的功能。全节点是整个网络的脊梁,因为只有全节点才能真正自己去验证交易。马上要介绍到的轻节点,本身没有完整的链,所以就不能看到所有的交易历史,不能直接去验证交易,需要通过向全节点去请求必要的交易数据。

第二种角色是 Bitcoin Core 全节点,是功能最为全面的节点。Bitcoin Core 是比特币的参考实现,是比特币网络上最为流行的客户端软件。安装了 Bitcoin Core 的节点,首先是一个全节点,另外还拥有钱包和挖矿的能力。

第三种是 SPV 钱包节点。这种节点的通常只关心和自己钱包中的地址相关部分交易,不会下载完整的区块链,所以也被称为轻节点。钱包通常都是安装在移动设备上,资源有限所以适合使用轻节点。轻节点可以去发起简单支付验证( SPV ),向全节点请求数据来验证交易。

第四种是独立挖矿节点。挖矿节点的主要工作当然是挖矿,独立的,也就是不加人矿池的节点要挖矿是需要下载完整区块链的,所以独立挖矿节点也是全节点。

以上四种就是比特币 P2P 网络上的基本节点角色了。

矿池节点

除了这四类基本节点,涉及到矿池挖矿,还有另外的两种节点。

image-20220118212437248

区块头中另外一项,Merkle 根,是我们更加感兴趣的一个参数。有 Merkle 根,必定对应一个 Merkle 树,必定对应着很多个小数据。没错,每一个小数据就都是一个交易。每个区块中一般都会包含2000多个交易,这些交易的数据并不在区块头中,而是保存在区块体中。注意,区块体中的并没有保存 Merkle 树,区块头中也没有,所以每次如果用到 Markle 树,需要重新运算一下。运算出来的 Merkle 根,就是最终被保存到区块头中的 Merkle 根。

img

理解了区块结构,就可以理解全节点( Full Node )和轻客户端( Thin Client ) 的区别了。全节点是一个程序,例如中本聪自己写的 Bitcoin Coin ,这个程序运行起来之后,会把整条区块链都下载到本地。比特币的区块数据估计到18年底会到达173G ,不算太大,但是要在手机上跑全节点基本是不可能的。所以有轻客户端的概念,例如 Electrum 就是个轻客户端。轻客户端可以安装在电脑上也可以安装在手机上,为啥呢为轻客户端只会去下载区块头,每个区块头只有80K,所以一条区块头组成的链,只有几十兆。

SPV 就是一个在轻客户端环境下,验证交易有效性的过程。

SPV 验证过程

安装全节点,很多时候是因为我们要挖矿。而安装轻客户端,通常就是把它当成一个钱包软件用。SPV 要解决的就是在轻客户端条件下的支付确认问题。

钱包当然就是用来负责当前账户的转入和转出操作的。先说转出,轻客户端能构建交易,并且签名交易,再广播到全网,这就是转出操作了。再说转入,网上交易很多,但是轻客户端只会去下载跟自己的账户相关的交易。那么不管是转入还是转出交易,下载到轻客户端本地都是相对孤立的交易,因为本地没有保存区块体。那么如何去验证交易生效了呢就是 SPV 要解决的问题。我们知道,一个交易在区块链上生效,意味着要满足两个条件:一个是交易已经被打包到了某个区块中,另外一个是这个区块之上又继续打包了5个区块,也就是所谓的要六次确认。

但是,毕竟轻客户端这里是没有保存任何交易的,所以一个独立的交易拿出来,要确定它属于哪个区块也是不可能的。这时候轻客户端需要发起 SPV 过程。首先,轻客户端要发起一个专门的确认请求,把这个交易广播给网络上邻近的全节点。全节点收到交易后,会去搜索这个交易属于哪个区块,然后会运算这个区块的 Merkle Tree 。这时, Merkle Tree 最大的优势现在就发挥出来了,因为要确认一个交易是不是从属于一个 Merkle 根,是不需要把整个 Merkle Tree 都发送给轻节点的,而只需要发送跟当前交易相关的部分 Merkle 树即可。这样,轻节点接收到这个部分 Merkle 树之后,在自己本地在运算一下这个交易的哈希,然后根据部分 Merkle 树上的各个哈希值,一路运算获得 Merkle 根,如果这个值跟自己的区块头中的正好吻合,交易验证就成功了。

所以整个 SPV 过程是靠全节点帮忙去验证交易的,轻节点自身不能验证交易,但是通过确认其他全节点都接受了这次交易,就间接完成了交易确认。但是,全节点有没有可能反馈一个假的 Merkle Tree 过来呢案是不可能。在 Merkle 验证中用一个伪造的交易哈希来得到一个已知的 Merkle 根是不可能的。比特币计算 Merkle 树哈希使用的是 sha256 算法,伪造就相当于去碰撞 sha256 算法了,这是根本不可能的。

SPV 有什么用处/h3>

那么中本聪引入 SPV 技术到底有没有实际用途呢/p>

首先一个就是用来实现钱包软件。如果一个钱包软件想要安装在移动设备上,想要避免去下载一百多 G 的区块数据。那么就只有两个思路,一个是借助中心化服务器,让钱包去把信息先发送到服务器,然后由服务器去验证交易,这样的思路显然就偏中心化了。另外一个思路就是 SPV ,类似 Electrum 这样的钱包,就可以通过只下载区块头来验证交易,整个的数据量和计算量都是不大的,可以直接运行在低端设备上。所以很多轻客户端,也叫轻钱包,或者叫 SPV 钱包。

SPV 的另外一个用途就是实现侧链技术。侧链就是可以通过双向锚定来使用主链上的币的一条链,上面可以做出各种创新。例如基于比特币的侧链开发出的 RootStock ,可以基于比特币实现智能合约平台。而双向锚定过程,就依赖于 SPV 技术。

所以,虽然 SPV 在白皮书上所占的篇幅不大,但是实际中发挥的作用是非常大的。

总结

最后来总结一下:第一,区块有区块头和区块体组成,区块头中的前一个区块的哈希,其实就是之前一个区块的区块头的哈希,所以单独下载区块头,也能得到一条链。第二,同样是比特币网络上的节点,却可以分成全节点和轻客户端两类,轻客户端就是只下载了区块头。第三,SPV 解决的就是在轻客户端中去确认单独一个交易的过程,总体思路是去相邻的全节点中去请求部分 Merkle 树信息,到本地验证通过,就证明其他的全节点都接受了这个交易。第四,SPV 是开发钱包软件和侧链的关键技术,意义非常重大。

Q&A

  • 全节点和轻节点是什么/p>

    • **全节点: **拥有全网所有的交易数据的节点

      上文描述的4种节点, 除了SPV都是全节点

    • **轻节点: **只拥有和自己相关的交易数据节点。

      • SPV
  • 独立矿工和合伙矿工

    • 独立矿工:矿工独立生成新的区块,来自区块奖励和交易费用收益全部归自己,承受更高的风险波动和更高的回报(回报周期长)。
    • 合伙矿工:矿工相互联合组成矿池,以发现更多的区块,根据贡献的hash算力共享收益,以更低的风险波动接受较小的回报(回报周期短,目前矿池模式是比特币挖矿的主要模式)。
  • 合伙矿工是什么节点呢 /p>

    你们认为呢/p>

参考

bitcoinbook/ch08.asciidoc at develop · bitcoinbook/bitcoinbook (github.com)

简单支付验证 SPV (happypeter.github.io)

Bitcoin Core (happypeter.github.io)

比特币网络节点分类 – 知乎 (zhihu.com)

Running A Full Node – Bitcoin

轻节点SPV – 知乎 (zhihu.com)

区块链 节点和区块的关系_区块链的轻节点技术_weixin_39786341的博客-CSDN博客

来源:RenLJ1895

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月16日
下一篇 2022年1月16日

相关推荐