go-ethereum的设计思路及模块组织形式
===================================
以太坊的目标是基于区块链技术打造一个运行智能合约的去中心化平台。
## 一. 区块链技术
区块链属于一种去中心化的数字记账技术,区块链数据由彼此互不信任的节点共同维护,每个节点复制一份完整的记录。
## 二. 以太坊核心概念
* EVM: 以太坊虚拟机,轻量级的虚拟机环境,是以太坊智能合约的运行环境。
* Account: 账户分为两类,合约账户和外部账户。合约账户主要存储执行的合约代码,外部账户存储以太币,对应具体共钥。
* Transaction: 以太坊网络上的交易,从一个账户到另一个账户的消息,包括以太币或这智能合约参数。
* Gas: 以太坊网络运行的燃料,每执行一条智能合约,都会消耗一定的燃料。
* Mine: 挖矿,以太坊网络通过工作量证明算法来保证网络的安全运行。
* P2P网络: 以太坊分布式网络中的所有节点都地位平等,没有中心服务器。
## 三. 以太坊模型
以太坊本质是一个基于交易的状态机(transaction-based state machine),以太坊的状态中有百万个交易,
这些交易被打包到一个区块(Block)中,每个区块都和之前的区块链接起来,形成一个反向链表,所以叫区块链。在区块链的基础上增加了智能合约打造出以太坊。
为了让一笔交易被认为是有效的,它必须要经过一个验证过程,也就是挖矿(Mine)。 任何一个以太坊网络上的矿工都可以尝试创建和验证区块,
如果一个区块被认为是有效的,并且是最快完成验证的,那么就会添加到主链上,主链是以太坊网络上最长的一条链。如果同时有多个矿工打包了一个区块,加上区块在网络中传播需要一定时间,
难免会产生多条路径,就是所谓的分叉。
为了防止多条链的产生,以太坊使用了
**GHOST 协议** (Greedy Heaviest Observed Subtree),也就是选择一条完成计算最多的路径,区块号越大, 路径就越长,说明挖矿消耗的算力越多。
因为成功证实了一个新区块会得到一定以太币的奖励,所以从经济学和博弈论的角度,选择主链是最优的。
## 四. 以太坊的架构
以太坊的架构设计可以简单的分为三个层次,协议层、接口层和应用层。而协议层又可以分为网络层和存储层。
从技术角度看,协议层主要包括P2P网络通信,分布式算法,加密签名和数据存储技术。数据存储底层,比特币和以太坊都选用了Google开源的LevelDB数据库。
接口层与协议层完全分离,除了交易时与协议层进行交互,保证开发各种基于区块链的应用层业务不受约束,包括分布式存储业务,机器学习,物联网等。
应用层主要是从区块链自身的特性出发,在不引用第三方机构的前提下,提供去中心化,不可篡改,安全可靠的场景应用。
主要包括金融服务,征信和权属管理,资源共享,投资管理以及物联网和供应链等。
## 五. 以太坊核心数据结构
#### 1. 区块(Block)是以太坊的核心数据结构之一,Block包含Header和Body两部分。
#### 2. Blockchain和HeaderChain, Blockchain管理所有的Block, 让其组成一个单向链表。Headerchain管理所有的Header,也形成一个单向链表, Headerchain是Blockchain里面的一部分。
#### 3. Transaction是Body的重要数据结构,一个交易就是被外部拥有账户生成的加密签名的一段指令,序列化,然后提交给区块链。