以太坊源码
文章平均质量分 92
TurkeyCock
这个作者很懒,什么都没留下…
展开
-
以太坊源码学习启动篇
最近需要开始研读以太坊源码,准备写一个系列的文章记录下学习过程。首先需要准备下学习环境:基于mac,源码阅读采用Visual Studio Code,调试采用Delve。1. 安装Visual Studio Code官网地址:https://code.visualstudio.com2. 安装Delve调试工具使用以下命令安装:brew install go-delve/...原创 2018-05-16 23:25:33 · 1710 阅读 · 0 评论 -
图解以太坊虚拟机EVM
今天聊一聊以太坊虚拟机的原理。以太坊虚拟机,简称EVM,是用来执行以太坊上的交易的。业务流程参见下图:输入一笔交易,内部会转换成一个Message对象,传入EVM执行。如果是一笔普通转账交易,那么直接修改StateDB中对应的账户余额即可。如果是智能合约的创建或者调用,则通过EVM中的解释器加载和执行字节码,执行过程中可能会查询或者修改StateDB。1.固定油费(Intrinsic ...原创 2018-11-06 14:17:04 · 4561 阅读 · 4 评论 -
以太坊Ethash算法源码分析
Ethash是以太坊目前使用的共识算法,其前身是Dagger-Hashimoto算法,但是进行了很大的改动。1. Dagger-HashimotoDagger-Hashimoto算法想要达到以下几个目标: 抵制ASIC矿机轻客户端验证全链数据存储实际上Dagger-Hashimoto是由两种不同的算法Dagger和Hashimoto融合而成的:Hashi...原创 2018-08-02 17:14:36 · 4142 阅读 · 1 评论 -
以太坊数据存储源码分析
上一篇主要讲解了MPT的基本原理,这篇分析一下以太坊数据存储相关的流程。 首先介绍一下MPT的存储流程,然后依次分析StateDB、Transactions、Receipts的存储,这3棵树的Merkle Root最终会存储到区块Header中的Root、TxHash、ReceiptHash字段。1.MPT存储流程 从图中可以看出,MPT的存储涉及3种编码方式: Ke...原创 2018-06-07 22:43:08 · 4796 阅读 · 8 评论 -
以太坊MPT简介
MPT全称Merkle Patricia Trie,是以太坊用来存储数据的一种数据结构。 MPT融合了Trie、Patricia Trie、Merkle Tree这3种数据结构的优点,从而实现快速查找并节省存储空间。下面依次介绍一下这几种结构的基本概念和原理。1. TrieTrie也称为Radix Tree或者Prefix Tree,这个单词来源于retrieval(检索)这个单词的...原创 2018-06-07 14:59:55 · 3633 阅读 · 0 评论 -
以太坊账户管理源码分析
这篇分析一下以太坊的账户管理。这部分比较简单,主要分”获取钱包列表“和“订阅钱包事件”两个部分,下面分别介绍。1. 获取钱包列表先上一张图,理清组件间的关系:从图中可以看出wallet、account、address这三者的区别和联系i:wallet中可能包含多个account,而每个account中包含一个address和账户所在路径(URL)。这里有两个重要接口:Bac...原创 2018-05-24 09:09:20 · 2544 阅读 · 4 评论 -
以太坊RPC源码分析
上一篇过了一下以太坊的启动流程,这篇详细分析一下RPC的完整流程。以太坊遵循JSON RPC规范,API列表参见以下链接:https://github.com/ethereum/wiki/wiki/JSON-RPC本文主要分析一下API注册和API调用的主要流程。1. API注册流程先看一张图,理清各组件之间的关系:上篇提到,Node启动时会调用各Service的构造函...原创 2018-05-22 13:32:48 · 2543 阅读 · 6 评论 -
以太坊启动源码分析
今天正式开始撸以太坊代码了。以太坊入口代码位于cmd/geth/main.go,先看一下main()函数:func main() { if err := app.Run(os.Args); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) }}显然,使用了urfave/cli库,...原创 2018-05-21 23:00:35 · 2220 阅读 · 2 评论 -
Go语言命令行库urfave/cli简介
很多用Go写的命令行程序都用了urfave/cli这个库,包括geth,有必要简单了解一下。用C写过命令行程序的人应该都不陌生,我们需要根据argc/argv一个个地解析命令行参数,调用不同的函数,最后还要写一个usage()函数用于打印帮助信息。urfave/cli把这个过程做了一下封装,抽象出flag/command/subcommand这些模块,用户只需要提供一些模块的配置,参数的解析和...原创 2018-05-18 10:42:05 · 17190 阅读 · 3 评论 -
A Tour of Go练习题汇总
以太坊客户端是用Go语言写的,所以首先要学会Go语言。目前为止看到的最好的教程是下面这个网站:https://tour.golang.org花上一天时间学习,Go语言的方方面面基本上心里就有数了。教程中间还穿插了几个练习题,比较有意思,摘出来汇总到这篇文章里。1. fibonacci的三种写法孔乙己的“回”字有三种写法,教程里也有三种不同的生成fibonacci数列的方法。第一...原创 2018-05-17 09:41:40 · 2611 阅读 · 0 评论 -
以太坊控制台源码分析
最近有网友提到以太坊控制台的代码看不太明白,抽了点时间整理了一下。当我们通过geth console或者geth attach与节点交互的时候,输入的命令是如何被处理的呢?看下面这张流程图就明白了:命令行编辑器Liner等待用户输入命令JSRE使用一个名为scheduler的通道(chan)接收命令JSRE把命令发送给Javascript解释器Otto处理Otto中预加载了web3....原创 2019-04-14 12:51:52 · 1720 阅读 · 2 评论