以太坊源码
文章平均质量分 89
佛系布偶
这个作者很懒,什么都没留下…
展开
-
以太坊源码解读(5)BlockChain类的解析及NewBlockChain()分析
一、blockchain的数据结构type BlockChain struct { chainConfig *params.ChainConfig // 初始化配置 cacheConfig *CacheConfig // 缓存配置 db ethdb.Database // 底层的数据储存 triegc *prque.Prque gcproc time....原创 2018-11-01 16:30:43 · 2359 阅读 · 0 评论 -
以太坊源码解读(12)广播和同步(三)Fetcher解析
Fetcher是基于广播的同步工具,所以Fetcher必然是通过protocolManager的handleMsg()来调用的。下面就是handleMsg中收到NewBlockHashesMsg和NewBlockMsg时,均会调用fetcher的方法来进行相应的处理 case msg.Code == NewBlockHashesMsg: var announces newBlockHas...原创 2018-12-03 14:17:13 · 1582 阅读 · 0 评论 -
以太坊源码解读(15)交易池(二)交易池的升级、降级和重置
1、交易池降级:TxPool.demoteUnexecutables主要功能是从pending中移除无效的交易,同时将后续的交易都移动到queue。1)丢弃nonce值过低的交易:list.Foward(nonce)2)删除账户余额已经不足以支付交易的交易:list.Filter(pool.currentState.GetBalance(addr), pool.currentMaxGas)...原创 2018-12-05 23:13:55 · 1676 阅读 · 0 评论 -
以太坊源码解读(16)miner模块和Worker模块概述(最新源码)
最新的以太坊源码Miner模块有较大的改动,取消了原来的agent模块以及work对象,但是基本上的逻辑还是一样的。Miner模块的主要执行部分在worker中,Miner对象及其方法主要控制着模块的开关和外部接口。一、Miner模块type Miner struct { mux *event.TypeMux worker *worker coinbase comm...原创 2018-12-06 17:17:33 · 3211 阅读 · 0 评论 -
以太坊源码解读(23)stateDB分析
前面介绍了以太坊MPT树的结构和方法,而stateDB对象就是对以太坊状态MPT进行管理的对象。其管理功能包括:1、初始化:New2、增加:StateDB.createObject3、删除:StateDB.Suicide4、修改:StateDB.AddBalance5、查询:StateDB.GetBalance6、拍摄快照:StateDB.Snopshot7、恢复快照:StateDB...原创 2018-12-20 00:03:33 · 3872 阅读 · 1 评论 -
以太坊源码解读(19)通过EVM创建智能合约——Create()
我们要知道,evm解释器的执行上下文是stateTransition,是交易,但evm的服务对象是智能合约。智能合约与evm的解释器有紧密的联系,所以我们这一节先从智能合约的创建和执行开始学习。合约创建函数的调用时机,一是Worker执行交易的过程,交易如果是合约创建,则会在EVM执行交易时生成智能合约地址并部署智能合约;二是通过opCreate指令,这个指令使得在智能合约内部创建新的智能...原创 2018-12-09 15:32:15 · 3641 阅读 · 0 评论 -
以太坊源码解读(20)通过EVM执行转账或合约调用——Call()
在了解合约调用之前,我们需要知道调用合约的本质是什么。在我们创建合约的时候,由run函数初始化的智能合约code(ret)储存在stateDB中。也就是说在内存中并没有Contract这个对象,而只是存在智能合约code。那我们如何调用合约呢?本质上,调用合约实际上是从合约账户中取出合约代码,然后NewContract()创建出一个临时的contract对象(如下图),然后执行contract的S...原创 2018-12-09 23:38:18 · 2783 阅读 · 0 评论 -
以太坊源码解读(22)merkle-Patricia Tries(MPT)默克前缀树原理
MPT是以太坊中一种使用很广泛的数据结构,用来管理以太坊账户的状态、状态的变更、交易和收据等。在以太坊中MPT有以下几个应用的场景:1、交易树:记录交易的状态和变化。缓存到MTP2、收据树(交易收据):交易收据的存储3、状态树(账户信息):帐户中各种状态的保存。如余额等。4、账户中的Storage树。这是数据都持有一个接口,即trie Trie:type Trie stru...原创 2018-12-16 00:51:02 · 2421 阅读 · 4 评论 -
以太坊源码解读(11)广播和同步(二)同步模块和模式基本概念
以太坊网络中不断重复着广播和同步,这样才能保证对以太坊全网的规范链的维护和统一。一、广播【广播】主要是广播区块、区块hash和交易,分别通过ProtocolManager.BroadcastBlock和ProtocolManager.BroadcastTxs两个方法执行。广播有下面几种情形:1、minedBroadcastLoop()监听到新区块事件后,把新区块和区块hash分别广播出去...原创 2018-12-03 14:16:34 · 2525 阅读 · 0 评论 -
以太坊源码解读(13)广播和同步(四)Downloader解析
protocolManager启动了四个go程,其中包含用于定期同步的协程:syncer,该协程调用protocolManager的synchronise方法调用,选择td最高的节点进行同步:go pm.synchronise(pm.peers.BestPeer())synchronise获取了节点的头区块和难度值td,确定了同步模式(fastSync或fullSync),最终调用dow...原创 2018-12-05 10:54:43 · 973 阅读 · 0 评论 -
以太坊源码解读(4)Block类及其储存
一、Block类type Block struct { /******header*******/ header *Header /******header*******/ /******body*********/ uncles []*Header transactions Transactions ...原创 2018-10-31 23:49:05 · 1266 阅读 · 1 评论 -
以太坊源码解读(3)以太坊启动流程简析
启动命令:geth --identity "TestNode1" --datadir "data0" --rpc --rpcapi "db,eth,net,web3" --port "30303" --networkid "29382" --ws --wsorigins="*" --rpccorsdomain="*" console启动后,我们可以从日志来分原创 2018-10-30 10:47:55 · 3209 阅读 · 1 评论 -
以太坊源码解读(2)以太坊客户端geth源码目录解析
Geth是以太坊官方唯一推荐的客户端,相当于是对以太坊区块链的官方实现。源码的地址是:https://github.com/ethereum/go-ethereum下面我们来从Geth源码的目录来看看以太坊都有哪些模块。一、目录分析go-etherreum-master |- accounts /* 实现了高层级Ethereum账号管理 */ | |- abi ...原创 2018-10-28 15:22:01 · 3015 阅读 · 0 评论 -
以太坊源码解读(1)以太坊核心概念
一、定义以太坊是一个开源的带有智能合约功能的公共区块链平台。特点:1、支持智能合约,以太坊不是给用户一系列预先设定好的操作,而是充分允许用户按照自己的意愿创建复杂的逻辑操作;2、以太坊同时还构建了较完整的、开源的生态系统:有底层的geth、编程的solidity、合约在线浏览器browser-solidity、合约钱包Mist/wallet、前端开发框架Treffle,以及在此基础上运...转载 2018-10-28 15:21:10 · 1965 阅读 · 0 评论 -
以太坊源码解读(6)blockchain区块插入和校验分析
以太坊blockchain的管理事务:1、blockchain模块初始化2、blockchain模块插入校验分析3、blockchain模块区块链分叉处理4、blockchian模块规范链更新上一节分析了blockchain的初始化,这一节来分析blockchain区块的插入和校验分析以及规范链更新。一、InsertChain函数主要功能:调用insertChain将一组区块...原创 2018-11-04 00:58:24 · 4602 阅读 · 4 评论 -
以太坊源码解读(7)以太坊的P2P网络基础
一、分布式网络的来历基于P2P技术的应用有很多,包括文件分享,即时通信,协同处理,流媒体通信等等。其中文件分享和下载是p2p技术最集中体现。其中,DHT技术是目前很多分布式系统所普遍采用的方案,也包括以太坊。所以这里先要对DHT技术有所了解。二、DHT(Distributed Hash Table)技术简介DHT全称叫分布式哈希表(Distributed Hash Table),是...原创 2018-11-11 21:14:02 · 1222 阅读 · 2 评论 -
以太坊源码解读(9)以太坊的P2P模块解析——底层网络构建和启动
以太坊的底层p2pServer,大约可以分为三层:1、底层:table对象、node对象,它们分别定义了底层的路由表以及本地节点的数据结构、搜索和验证; 1)database.go //封装node数据库相关操作 2)node.go //节点数据结构 3)ntp.go //同步时间 4)t...原创 2018-11-21 13:32:36 · 3578 阅读 · 0 评论 -
以太坊源码解读(8)以太坊的P2P模块解析——节点发现和K-桶维护
回顾一下,前面说到以太坊分布式网络采用了Kademlia协议,它的特点是:1、采用了二叉树的拓扑结构;2、每个节点都对整树进行拆分,分成n棵子树;3、从每棵树中取K个节点,构成“k-桶”,每个节点控制着n个k-桶;4、节点的距离是通过异或的二进制运算得到的;5、k桶中的节点不是固定不变的,而是不断刷新变化的。下面,我们来看看Kademlia协议在以太坊中的具体实现。一、以太坊的k...原创 2018-11-17 01:38:19 · 3252 阅读 · 0 评论 -
以太坊源码解读(10)广播和同步(一)protocolManager及其handle()方法
前面提到了ProtocolManager,从字面上看是协议管理器,负责着p2p通信协议的管理。它连接了p2p的逻辑层peer与顶层peer之间的调用,从顶层将协议传递至逻辑层,再从逻辑层得到message传递到顶层。1、fastSync规定了同步的模式 ,通过atmoic.LoadUint32(&pm.fastSync) == 1或0来打开或关闭fastSync模式;2、acc...原创 2018-11-29 15:48:42 · 2506 阅读 · 0 评论 -
以太坊源码解读(21)EVM解释器代码分析
之前我们说到EVM解释器是面对Contract对象的,不论是Contract的创建还是调用,都会通过run()函数来调用Interpreter的Run()方法。该方法初始化执行过程中所需要的一些变量,然后进入堆栈操作的主循环。一、Interpreter.Run()a. 初始化执行循环中的中间变量if in.intPool == nil { in.intPool = poolO...原创 2018-12-10 23:57:09 · 1570 阅读 · 0 评论