Ethereum
是一个分布式的计算机,有许多的节点,其中的每一个节点,都会执行字节码(其实就是智能合约),然后把结果存在区块链上。由于整个网络是分布式的,且应用就是一个个的状态组成,存储了状态就有了服务;所以它就能永不停机,没有一个中心化的结点(没有任何一个节点说了算,去中心化的),任何第三方不能干预。
是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用。 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产。
Go-Ethereum是由以太坊基金会提供的官方客户端软件。它是用Go编程语言编写的,简称Geth,其中Geth 客户端和Geth 终端是有必要了解的组件。基于go-Ethereum搭建私有链环境的步骤参照http://blog.csdn.net/wo541075754/article/details/53064877
hyperledger(超级账本)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,加入成员包括:荷兰银行(ABN AMRO)、埃森哲(Accenture)等十几个不同利益体,目标是让成员共同合作,共建开放平台,满足来自多个不同行业各种用户案例,并简化业务流程。由于点对点网络的特性,分布式账本技术是完全共享、透明和去中心化的,故非常适合于在金融行业的应用,以及其他的例如制造、银行、保险、物联网等无数个其他行业。通过创建分布式账本的公开标准,实现虚拟和数字形式的价值交换,例如资产合约、能源交易、结婚证书、能够安全和高效低成本的进行追踪和交易。
Kademlia协议(简称 Kad),最常用,最简洁,最实用P2P的索引算法,使用BT的同学经常会发现DHT这个缩写,使用电驴的同学就会发现KAD缩写。DHT的全称叫哈希表(Distributed Hash Table),KAD就是Kademlia的缩写。 Kademlia是DHT的一种,其实BT和电驴都是使用Kademlia 协议,只是电驴中加密方式不同。
以太坊底层分布式网络即P2P网络,使用了经典的Kademlia网络,简称kad。是一种分布式散列表(DHT)技术,以异或运算为距离度量基础。其路由表被称为“K桶”,记录了节点NodeId,distance,endpoint,ip等信息,以太坊K桶按照与target节点距离(节点距离与机器的物理距离无关,这个距离仅仅是逻辑上的一种约定)进行排序,共256个K桶,每个K桶包含16个节点.
邻居节点发现的具体步骤:
1.系统第一次启动随机生成本机节点NodeId,记为LocalId,生成后将固定不变,本地节点记为local-eth。
2.系统读取公共节点信息,ping-pong握手完成后,将其写入K桶。
3.系统每隔7200ms刷新一次K桶。
刷新K桶流程如下:
a.随机生成目标节点Id,记为TargetId,从1开始记录发现次数和刷新时间。
b.计算TargetId与LocalId的距离,记为Dlt
c.K桶中节点的NodeId记为KadId,计算KadId与TargetId的距离,记为Dkt
d.找出K桶中Dlt大于Dkt的节点,记为k桶节点,向k桶节点发送FindNODE命令,FindNODE命令包含TargetId
e.K桶节点收到FindNODE命令后,同样执行b-d的过程,将从K桶中找到的节点使用Neighbours命令发回给本机节点。
f. 本机节点收到Neighbours后,将收到的节点写入到K桶中。
g.若搜索次数不超过8次,刷新时间不超过600ms,则返回到b步骤循环执行。
更通俗点儿讲:
1.先随机一个目标节点的NodeID
2.在列表中以相对NodeID的“距离”为指标,由近及远查找此待连节点“附近”的节点。并将这些节点放入“附近”节点集合
3.向目标节点的“附近”节点集合中的每个节点发送FindNode消息
4.若在目标节点的”附近”没有搜到节点,则返回步骤1
5.否则等待600ms后跳转到步骤2
从上图可以看出,以太坊节点在发现邻居节点的8次循环中,所查找的节点均在距离上向随机生成的TargetId收敛。而传统Kad网络发现节点时,在距离上向节点自身收敛。
- 上一篇: 每天编程2小时——编程环境配置笔记(续)
- 下一篇: 每天编程2小时——Python语言
评论