go-ethereum源码分析 PartII 共识算法】的更多相关文章

首先从共识引擎-Engine开始记录 Engine是一个独立于具体算法的共识引擎接口 Author(header) (common.Address, error) 返回打包header对应的区块的矿工地址 VerifyHeader(chain ChainReader, header, seal bool) 验证header是否遵循当前Engine的共识原则.seal代表是否要顺便把VerifySeal做了 VerifyHeaders VerifyUncles(chain ChainReader,…
死磕以太坊源码分析之Kademlia算法 KAD 算法概述 Kademlia是一种点对点分布式哈希表(DHT),它在容易出错的环境中也具有可证明的一致性和性能.使用一种基于异或指标的拓扑结构来路由查询和定位节点,这简化了算法并有助于证明.该拓扑结构有一个特点:每次消息交换都能够传递或强化有效信息.系统利用这些信息进行并发的异步查询,可以容忍节点故障,并且故障不会导致用户超时. KAD算法要处理的问题 如何分配存储内容到各个节点,新增/删除内容如何处理 如何找到存储文件的节点/地址/路径 节点状态…
1 简述 storngswan的配置里用一种固定格式的字符串设置了用于协商的预定义算法.在包协商过程中strongswan将字符串转换为固定的枚举值封在数据包里用于传输. 协商成功之后,这组被协商选中的枚举值会通过netlink接口以xfrm定义好的字符串形式,传递给内核,内核再将字符串转换成pfkey定义的枚举值,最终进行加密设置. DPDK的话,也有其统一的一组枚举值的抽象.在调用不同的cryptodev pmd时,会想这组值转换为对应的值或操作,如转变成openssl对应的API调用. 见…
上一篇分析了Ribbon如何发送出去一个自带负载均衡效果的HTTP请求,本节就重点分析各个算法都是如何实现. 负载均衡整体是从IRule进去的: public interface IRule{ /* * choose one alive server from lb.allServers or * lb.upServers according to key * * @return choosen Server object. NULL is returned if none * server i…
前言 在上一章介绍了关于区块链的一些基础知识,这一章会分析指令 geth --datadir dev/data/02 init private-geth/genesis.json 的源码,若你的ethereum的debug环境还没有搭建,那么需要先搭建ethereum的dabug环境. 准备工作 创建文件 genesis.json ,内容如下: { "config": { "chainId": 666, //可用于网络标识,在eip155里有用到,目前来看是做重放保…
Diff 算法源码(结合源码写的简易版本) 备注:文章后面有详细解析,先简单浏览一遍整体代码,更容易阅读 // Vue3 中的 diff 算法 // 模拟节点 const { oldVirtualDom, virtualDom } = require('./dom') // 这是节点的类型(源码中还有更多的类型,这里只使用了两种类型作为示例) const ShapeFlags = { TEXT_CHILDREN: 1 << 3, ARRAY_CHILDREN: 1 << 4 } f…
accounts 实现了一个高等级的以太坊账户管理     bmt          二进制的默克尔树的实现     build           主要是编译和构建的一些脚本和配置     cmd          命令行工具,又分了很多的命令行工具,下面一个一个介绍         /abigen     ABI生成器,Application Binary Interface, 应用二进制接口,在以太坊生态系统中,它是一个标准的用来与合约交互的方式         /bootnode   启…
前言 在上一章我们介绍了 ethereum运行开启console 的过程,那么在这一章我们将会介绍如何在以太坊中创建一个新的账号.以下的理解可能存在错误,如果各位大虾发现错误,还望指正. 指令分析 指令: personal.newAccount(password) 介绍:上面的指令的主要的作用是生成一个account 分析: password 是一个字符串,即你为账户设置的密码(ps:这个密码跟身份验证有关) 例子: 首先我们先需要开启console,开启之后会在控制台出现下图的信息: 然后我们…
核心数据结构: core.types.transaction.go type Transaction struct { data txdata // caches hash atomic.Value size atomic.Value from atomic.Value } Transaction.data type txdata struct { AccountNonce uint64 `json:"nonce" gencodec:"required"` Pric…
前言 在上一章我们介绍了  ethereum初始化指令 ,包括了系统是如何调用指令和指令的执行.在本章节我们将会介绍 geth --datadir dev/data/ --networkid console 指令. 指令分析 指令: geth --datadir dev/data/ --networkid console 介绍:上面的指令主要的工作为: 运行eth程序 开启控制台 分析: --datadir :指定eth的数据存储地址为 dev/data/ --networkid :指定eth的…