Ethereum Node(以太坊节点)介绍

这里要稍微介绍一下Ethereum Node(节点)。Etherum Node就是Ethereum Blockchain P2P网络中的节点。在Ethereum网络中每个节点互相沟通和同步区块资料。常听到的Geth就是Ethereum Protocol的一种实作,而Geth Node就是Ethereum Node。对Ehtereum Node有基本认识有助于Geth操作及功能上的理解。

Ethereum网络

Ethereum是一个分散式的网络架构,由一个到多个节点组成Ethereum网络。我们称这些节点为Ehtereum Node或Ethereum Client。Ethereum Node在整个Ethereum网络扮演着很重要的角色,他们维持了整个Ethereum网络的运行。在Ethereum网络中随时可以加入新的节点,也可以随时将节点从Ethereum网络中移除。

Ethereum网络由Ehtereum Node组成

Ethereum Node的工作

Etherum是去中心化架构。在Ethereum网络中每一个节点地位都是相等。每个Ethereum Node所作的事也差不多。Ethereum Node要作的工作很多,譬如Mining(挖矿)、 Recevies Transactions(接收交易)、 Receive/Send Blocks(同步区块)…等工作。下图显示了Ethereum Node主要的工作和与其互动的对象。

Ethereum Node主要工作

Ethereum Node主要工作:

  • Receives Blocks: 从其他的Ethtereum node接收block资料同步blocks。
  • Validate: 验证该block是否正确,若正确就保存在本地端的Database。
  • Transactions: 接收其他帐户或Dapp所发起的交易。
  • Mining: 挖矿来获得奖励的ether并把交易纪录写入blocks。
  • Sends Blocks: 把block资料传送给其他Ethereum Node来达到同步blocks。
  • Deploy & Execute Contract: Smart Contract的布署也是由Ethereum Node来负责。Ehtereum Node也负责Smart Contract执行。
  • Explore History: 外面的网站可以与Ethereum Node沟通来取得blocks相关的历史纪录。

Ethereum Node的沟通

Ethereum Node沟通方式
  • Ethereum Node相互沟通所使用的是ÐΞVp2p Wire Protocol,而预设的Port是30303。
  • 本地端所采用的local database是LevelDB。LevelDB是Google所提出的Fast key-value storage,提供了简易的Put/Get/Delete操作。
  • 我们可以使用JOSN-RPC协议跟Ethereum Node互动。最常见的两种方式分别是Console使用pipe或file来沟通的JSON-RPC over IPC(Inter-Process-Communication) 机制,以及Browser所使用URL(http://localhost:8545)来沟通的JSON-RPC over HTTP机制。
  • 使用Browser/Console皆可经由JSON-RPC协议,针对Ethereum网络执行某些操作。例如建立一个帐户(Create Account)、查询某个帐户的余额(Get Balance)…等。其互动的方式非常类似与Mysql Server的互动方式。
Mysql Server相当于Ethereum Node,Console相当于Mysql Client而Mysql Database相当于LevelDB

JSON-RPC和Web3.js

Web3.js是一个专门用来跟Ethereum Node互动的Javascript library,利用JSON-RPC over HTTP的方式跟Ehtereum Node沟通。前端可以提供人性化界面操作网页给一般使用者,后端则使用Web3.js与Ethereum网络沟通,来简化对于Ethereum BlockChain操作。

前端使用者利用网页进行操作,后端则使用Web3.js与Ethereum Nodes沟通

结尾

目前已经有许多人根据Ethereum黄皮书( Ethtereum Yellow Paper)上的SPEC,在各种不同的语言上实作Ethereum Protocol。比较著名的有由C++实作的cpp-ethereum,Python实作的pyethapp和最多人使用由Golang实作的Geth(go-ethereum)。其他还有一些像是ethereumjs-vm、ruby-ethereum…等不同语言的实作,大家都可以从网络上找到。

这一篇主要是希望在介绍Geth(go-ethereum)之前,简介一下Ethereum Node的主要工作,后面介绍Geth时能更清楚Geth在Ethereum中的角色。以上是我对于Ethereum Node的一些理解。若观念或理解有误,也拜托各位大大不吝啬给于纠正。若

本文链接地址:https://www.wwsww.cn/ytf/6246.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。