这一篇分析 geth 中与账户和转账相关的源代码。

交易是以太坊里的一个很核心的概念,它不仅仅体现在价值的转移上。我们知道智能合约是以太坊的一个重大创新,而智能合约的执行是依靠交易来触发的,可以这么说,在以太坊中,大部分场景的状态转换都依靠交易实现,而交易又与账户紧密相关,所以这一篇我们将账户,转账这两个模块结合在一起来探讨。

阅读全文 »

默克尔树是区块链的基础结构,在比特币里它用来存放区块内的所有交易,用一个数字指纹(hash)来表示整个交易集合,在以太坊中,提出了一种新的数据结构叫做 Merkle Patricia Tree(常用翻译:默克尔帕特里夏树,缩写是 MPT),在以太坊中它用来组织管理账户,交易,收据等数据。从名字或许可以看出来它是一个组合名字,它实际上是默克尔树和帕特里夏树两种数据结构的结合,在阅读 trie 模块之前,读者应该对默克尔树,帕特里夏树这两个数据结构有一定了解,这些是阅读源代码的基础知识,这里只做概述。下面我们先分别介绍这两种数据结构。

阅读全文 »

区块链区块链,即区块组成的链,不妨先从区块谈起。这一篇我们将着眼于区块链的一些基本操作。在区块链中,区块存储有效信息,在阅读源代码之前,我们应该对区块头,区块体,区块链这些基本的数据结构有所了解。

阅读全文 »

cmd 模块包含了很多子模块,基本上每个子模块表示一个可执行的命令,其中最重要的是 geth 命令,它是以太坊的命令行客户端。

geth 命令是以太坊提供的一个强大的命令行工具,它是使用以太坊的入口。它包括了很多子命令,你可以通过 geth --help 获得更多帮助信息。其运行方法是:geth [选项] 命令 [命令选项][参数…]

阅读全文 »

本篇将梳理以太坊的基本概念,说明一些值得注意的地方,这里不会讲解比特币的原理,代码,但会介绍以太坊与比特币的差异,所以最好看过比特币的论文,对比特币的基本原理、实现有所了解。这一篇将以太坊的白皮书作为重要参考,可以看做是以太坊白皮书的概述。以太坊的白皮书是一个非常好的学习资料,它在介绍以太坊前分析了比特币存在的问题,因此我们可以通过这份白皮书了解整个加密货币的生态。

阅读全文 »

花了一点时间读以太坊的源代码,内容太多,所以一边看一边写,没想到越写越多,于是想着把笔记整理出来。

源码解读是一件费力不讨好的事情,因为看代码的时候我们看到的是最终解决方案,虽然可以看到 commit 的历史,但我们看不到作者的思路,踩过的坑,而且 geth 的设计文档,功能的相关讨论等信息不像 Kubernetes 那么规范透明,所以我看这些代码的时候很多地方也只是一知半解,欢迎有更多经验的朋友批评指正,不吝赐教,也欢迎有价值的讨论。看了一些书和文章,所以我这也算不上多原创,基本上所有看过的链接都记在 reference 里面了。有的代码暂时看不懂就只能靠猜了,等待之后的实践中验证想法。尽管如此,对于同样想要阅读 geth 的源代码的人来说总还是有些作用,对于我个人来说整理出来这些文章也是一个总结知识,把点连成面的过程,希望同时能帮到其他人。

geth 版本:master 分支,a1eb9c7d13240fd250866219a502d0cdc9924e06

阅读全文 »

本文对释放 Docker 占的磁盘,网络,数据卷的命令做一个整理。内容部分来自网络,一部分来自自己的总结。

阅读全文 »