这里要稍微介绍一下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网络中移除。
![](../uploads/200920/1-200920205205540.jpg)
Ethereum Node的工作
Etherum是去中心化架构。在Ethereum网络中每一个节点地位都是相等。每个Ethereum Node所作的事也差不多。Ethereum Node要作的工作很多,譬如Mining(挖矿)、 Recevies Transactions(接收交易)、 Receive/Send Blocks(同步区块)…等工作。下图显示了Ethereum Node主要的工作和与其互动的对象。
![](../uploads/200920/1-200920205232U4.jpg)
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的沟通
![](../uploads/200920/1-200920205304423.jpg)
- 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的互动方式。
![](../uploads/200920/1-200920205334642.jpg)
JSON-RPC和Web3.js
Web3.js是一个专门用来跟Ethereum Node互动的Javascript library,利用JSON-RPC over HTTP的方式跟Ehtereum Node沟通。前端可以提供人性化界面操作网页给一般使用者,后端则使用Web3.js与Ethereum网络沟通,来简化对于Ethereum BlockChain操作。
![](../uploads/200920/1-200920205401238.jpg)
结尾
目前已经有许多人根据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的一些理解。若观念或理解有误,也拜托各位大大不吝啬给于纠正。若
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。