排序:
默认
按更新时间
按访问量

以太坊源码解读(21)EVM解释器代码分析

之前我们说到EVM解释器是面对Contract对象的,不论是Contract的创建还是调用,都会通过run()函数来调用Interpreter的Run()方法。该方法初始化执行过程中所需要的一些变量,然后进入堆栈操作的主循环。 一、Interpreter.Run() a. 初始化执行循环中的中...

2018-12-10 23:57:09

阅读数:9

评论数:0

以太坊源码解读(20)通过EVM执行转账或合约调用——Call()

在了解合约调用之前,我们需要知道调用合约的本质是什么。在我们创建合约的时候,由run函数初始化的智能合约code(ret)储存在stateDB中。也就是说在内存中并没有Contract这个对象,而只是存在智能合约code。那我们如何调用合约呢?本质上,调用合约实际上是从合约账户中取出合约代码,然后...

2018-12-09 23:38:18

阅读数:1

评论数:0

以太坊源码解读(19)通过EVM创建智能合约——Create()

我们要知道,evm解释器的执行上下文是stateTransition,是交易,但evm的服务对象是智能合约。智能合约与evm的解释器有紧密的联系,所以我们这一节先从智能合约的创建和执行开始学习。 合约创建函数的调用时机,一是Worker执行交易的过程,交易如果是合约创建,则会在EVM执行交易...

2018-12-09 15:32:15

阅读数:66

评论数:0

以太坊源码解读(18)以太坊交易的执行基本流程——将交易递交给EVM

之前分析挖矿模块,miner从TxPool拿来的交易,交给worker对象。后者要调用commitTransaction在本地执行交易,生成receipt,更改世界状态,打包成挖矿的block最后递交给engine进行挖矿。而这一节我们关注的是在commitTransaction中,如何在本地执行...

2018-12-09 12:07:02

阅读数:72

评论数:0

以太坊源码解读(17)一张图看懂ethash挖矿原理

POW的本质是基于算力解决一个数学上困难的问题,解决问题关键点是除了暴力枚举,没有任何办法可以找到我们所需要的nonce值,但对于验证输出的结果是非常简单容易的。 经典的比特币POW的算法原理是对block的header加上循环更新的nonce去进行hash运算,运算的target是hash值的...

2018-12-07 23:14:24

阅读数:10

评论数:0

以太坊源码解读(16)miner模块和Worker模块概述(最新源码)

 最新的以太坊源码Miner模块有较大的改动,取消了原来的agent模块以及work对象,但是基本上的逻辑还是一样的。Miner模块的主要执行部分在worker中,Miner对象及其方法主要控制着模块的开关和外部接口。 一、Miner模块 type Miner struct { mux ...

2018-12-06 17:17:33

阅读数:31

评论数:0

以太坊源码解读(15)交易池(二)交易池的升级、降级和重置

1、交易池降级:TxPool.demoteUnexecutables 主要功能是从pending中移除无效的交易,同时将后续的交易都移动到queue。 1)丢弃nonce值过低的交易:list.Foward(nonce) 2)删除账户余额已经不足以支付交易的交易:list.Filter(pool...

2018-12-05 23:13:55

阅读数:9

评论数:0

以太坊源码解读(14)交易池(一)基本流程解析

一、交易池的概念和原理 首先了解一下交易池的工作概况: 1、交易池中交易来源:本地的交易和远端节点广播的交易; 2、交易池中交易去向:被Miner模块获取并验证,用于挖矿;挖矿成功后写进区块并被广播; 3、Miner取走交易是复制,交易池中的交易并不减少。直到交易被写进规范链后才从交易池删...

2018-12-05 17:19:32

阅读数:64

评论数:0

以太坊源码解读(13)广播和同步(四)Downloader解析

protocolManager启动了四个go程,其中包含用于定期同步的协程:syncer,该协程调用protocolManager的synchronise方法调用,选择td最高的节点进行同步: go pm.synchronise(pm.peers.BestPeer()) synchronis...

2018-12-05 10:54:43

阅读数:54

评论数:0

以太坊源码解读(12)广播和同步(三)Fetcher解析

Fetcher是基于广播的同步工具,所以Fetcher必然是通过protocolManager的handleMsg()来调用的。下面就是handleMsg中收到NewBlockHashesMsg和NewBlockMsg时,均会调用fetcher的方法来进行相应的处理 case msg.Cod...

2018-12-03 14:17:13

阅读数:20

评论数:0

以太坊源码解读(11)广播和同步(二)同步模块和模式基本概念

以太坊网络中不断重复着广播和同步,这样才能保证对以太坊全网的规范链的维护和统一。 一、广播 【广播】主要是广播区块、区块hash和交易,分别通过ProtocolManager.BroadcastBlock和ProtocolManager.BroadcastTxs两个方法执行。广播有下面几种情形...

2018-12-03 14:16:34

阅读数:24

评论数:0

以太坊源码解读(10)广播和同步(一)protocolManager及其handle()方法

前面提到了ProtocolManager,从字面上看是协议管理器,负责着p2p通信协议的管理。它连接了p2p的逻辑层peer与顶层peer之间的调用,从顶层将协议传递至逻辑层,再从逻辑层得到message传递到顶层。 1、fastSync规定了同步的模式 ,通过atmoic.LoadUint...

2018-11-29 15:48:42

阅读数:23

评论数:0

以太坊源码解读(9)以太坊的P2P模块解析——底层网络构建和启动

以太坊的底层p2pServer,大约可以分为三层: 1、底层:table对象、node对象,它们分别定义了底层的路由表以及本地节点的数据结构、搜索和验证;     1)database.go         //封装node数据库相关操作     2)node.go            ...

2018-11-21 13:32:36

阅读数:437

评论数:0

以太坊源码解读(8)以太坊的P2P模块解析——节点发现和K-桶维护

回顾一下,前面说到以太坊分布式网络采用了Kademlia协议,它的特点是: 1、采用了二叉树的拓扑结构; 2、每个节点都对整树进行拆分,分成n棵子树; 3、从每棵树中取K个节点,构成“k-桶”,每个节点控制着n个k-桶; 4、节点的距离是通过异或的二进制运算得到的; 5、k桶中的节点不是固定不变的...

2018-11-17 01:38:19

阅读数:40

评论数:0

以太坊源码解读(7)以太坊的P2P网络基础

一、分布式网络的来历 基于P2P技术的应用有很多,包括文件分享,即时通信,协同处理,流媒体通信等等。其中文件分享和下载是p2p技术最集中体现。其中,DHT技术是目前很多分布式系统所普遍采用的方案,也包括以太坊。所以这里先要对DHT技术有所了解。 二、DHT(Distributed Hash...

2018-11-11 21:14:02

阅读数:39

评论数:0

以太坊源码解读(6)blockchain区块插入和校验分析

以太坊blockchain的管理事务: 1、blockchain模块初始化 2、blockchain模块插入校验分析 3、blockchain模块区块链分叉处理 4、blockchian模块规范链更新 上一节分析了blockchain的初始化,这一节来分析blockchain区块的插入和校验分...

2018-11-04 00:58:24

阅读数:986

评论数:0

以太坊源码解读(5)BlockChain类的解析及NewBlockChain()分析

一、blockchain的数据结构 type BlockChain struct { chainConfig *params.ChainConfig // 初始化配置 cacheConfig *CacheConfig // 缓存配置 db ethdb.Databa...

2018-11-01 16:30:43

阅读数:61

评论数:0

以太坊源码解读(4)Block类及其储存

一、Block类 type Block struct { /******header*******/ header *Header /******header*******/ /******body*********/ uncl...

2018-10-31 23:49:05

阅读数:59

评论数:0

以太坊源码解读(3)以太坊启动流程简析

启动命令: geth --identity "TestNode1" --datadir "data0" --rpc --rpcapi "db,eth,net,web3" --port &...

2018-10-30 10:47:55

阅读数:479

评论数:0

以太坊源码解读(2)以太坊客户端geth源码目录解析

Geth是以太坊官方唯一推荐的客户端,相当于是对以太坊区块链的官方实现。源码的地址是:https://github.com/ethereum/go-ethereum 下面我们来从Geth源码的目录来看看以太坊都有哪些模块。 一、目录分析 go-etherreum-master |- a...

2018-10-28 15:22:01

阅读数:860

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭