以太坊blockchain源码分析】的更多相关文章

blockchain关键元素 db:持久化到底层数据储存,即leveldb: genesisBlock:创始区块 currentBlock:当前区块,blockchain中并不是储存链所有的block,而是通过currentBlock向前回溯直到genesisBlock,这样就构成了区块链 bodyCache.bodyRLPCache.blockCache.futureBlocks:区块链中的缓存结构,用于加快区块链的读取和构建: hc:headerchain区块头链,由blockchain额外…
本文具体分析以太坊的共识算法之一:实现了POW的以太坊共识引擎ethash. 关键字:ethash,共识算法,pow,Dagger Hashimoto,ASIC,struct{},nonce,FNV hash,位运算,epoch Ethash 前面我们分析了以太坊挖矿的源码,挖了一个共识引擎的坑,研究了DAG有向无环图的算法,这些都是本文要研究的Ethash的基础.Ethash是目前以太坊基于POW工作量证明的一个共识引擎(也叫挖矿算法).它的前身是Dagger Hashimoto算法. Dag…
上文我们总结了以太坊最主要的共识算法:ethash算法,本文将重点分析以太坊的另一个共识算法:clique. 关键字:clique,共识算法,puppeth,以太坊地址原理,区块校验,认证结点,POA,选举投票,snapshot,Comma-ok断言 clique 以太坊的官方共识算法是ethash算法,这在前文已经有了详细的分析: 它是基于POW的共识机制的,矿工需要通过计算nonce值来消耗大量算力来匹配target值. 如果在联盟链或者私链的方案里,继续使用ethash就会很浪费算力,PO…
第一.先安装geth的CLI环境sudo apt-get install geth,这个很重要 第二.下载源代码 git clone https://github.com/ethereum/go-ethereum 我下载到啦 /home/siegel/ethereum/ 更改文件夹权限为可写  chmod -R 777 /home/siegel/ethereum/go-ethereum 第三步 sudo apt-get install software-properties-common sud…
死磕以太坊源码分析之Fetcher同步 Fetcher 功能概述 区块数据同步分为被动同步和主动同步: 被动同步是指本地节点收到其他节点的一些广播的消息,然后请求区块信息. 主动同步是指节点主动向其他节点请求区块数据,比如geth刚启动时的syning,以及运行时定时和相邻节点同步 Fetcher负责被动同步,主要做以下事情: 收到完整的block广播消息(NewBlockMsg) 收到blockhash广播消息(NewBlockHashesMsg) 这两个消息又是分别由 peer.AsyncS…
死磕以太坊源码分析之downloader同步 需要配合注释代码看:https://github.com/blockchainGuide/ 这篇文章篇幅较长,能看下去的是条汉子,建议收藏 希望读者在阅读过程中,指出问题,给个关注,一起探讨. 概览 downloader 模块的代码位于 eth/downloader 目录下.主要的功能代码分别是: downloader.go :实现了区块同步逻辑 peer.go :对区块各个阶段的组装,下面的各个FetchXXX 就是很依赖这个模块. queue.g…
死磕以太坊源码分析之txpool 请结合以下代码阅读:https://github.com/blockchainGuide/ 写文章不易,也希望大家多多指出问题,交个朋友,混个圈子哦 交易池概念原理 交易池工作概况: 交易池的数据来源主要来自: 本地提交,也就是第三方应用通过调用本地以太坊节点的RPC服务所提交的交易: 远程同步,是指通过广播同步的形式,将其他以太坊节点的交易数据同步至本地节点; 交易池中交易去向:被Miner模块获取并验证,用于挖矿:挖矿成功后写进区块并被广播 Miner取走交…
死磕以太坊源码分析之state 配合以下代码进行阅读:https://github.com/blockchainGuide/ 希望读者在阅读过程中发现问题可以及时评论哦,大家一起进步. 源码目录 |-database.go 底层的存储设计 |-dump.go 用来dumpstateDB数据 |-iterator.go,用来遍历Trie |-journal.go,用来记录状态的改变 |-state_object.go 通过state object操作账户值,并将修改后的storage trie写入…
死磕以太坊源码分析之Kademlia算法 KAD 算法概述 Kademlia是一种点对点分布式哈希表(DHT),它在容易出错的环境中也具有可证明的一致性和性能.使用一种基于异或指标的拓扑结构来路由查询和定位节点,这简化了算法并有助于证明.该拓扑结构有一个特点:每次消息交换都能够传递或强化有效信息.系统利用这些信息进行并发的异步查询,可以容忍节点故障,并且故障不会导致用户超时. KAD算法要处理的问题 如何分配存储内容到各个节点,新增/删除内容如何处理 如何找到存储文件的节点/地址/路径 节点状态…
死磕以太坊源码分析之p2p节点发现 在阅读节点发现源码之前必须要理解kadmilia算法,可以参考:KAD算法详解. 节点发现概述 节点发现,使本地节点得知其他节点的信息,进而加入到p2p网络中. 以太坊的节点发现基于类似的kademlia算法,源码中有两个版本,v4和v5.v4适用于全节点,通过discover.ListenUDP使用,v5适用于轻节点通过discv5.ListenUDP使用,本文介绍的是v4版本. 节点发现功能主要涉及 Server Table udp 这几个数据结构,它们有…