etherum & code analysis

以太坊源码分析(一)

Posted by minicool on February 1, 2018

区块链作为新的技术,能否真正产生效率,一直是大家争论的话题。但随着数字货币,例如比特币,以太币兑换法币的价值越来越高的时候。争论似乎都已经停止,如何加入到这个资本盛宴才是大家最急迫的一件事。如何真正的了解以太坊等数字平台,不被眼前所蒙蔽,源码称为了解其本质的唯一途径。源码即是真理。

何为以太坊?

作为了解一个新事物的入口,必然需要知道它是什么,从哪来,能干什么。所以从缘由说起更能很好的了解。

以太坊(英语:Ethereum)是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether,又称“以太币”)提供去中心化的虚拟机(称为“以太虚拟机”Ethereum Virtual Machine)来处理点对点合约。

区块链(Blockchain)是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。该技术方案让参与系统中的任意多个节点,把一段时间系统内全部事务通过密码学算法计算并记录到一个数据块(block),生成该数据块的hash用于链接下个数据块,系统所有参与节点来共同检验记录是否为真,并且每个区块的内容都由后续子链上的区块来保证其内容不可被篡改。各个参与节点可以在新区块产生确认及奖励分配上达成共识,从而逐渐形成的一个庞大、去中心化的公开账本。

源码分析准备

资料准备
  1. 以太坊文档资料[英文]
源码准备
  1. 以太坊源码地址 Go Ethereum
  2. 以太合约语言地址 Solidity
  3. go语言开发套件 goLand
  4. cpp语言开发套件 xcode [因本人是MAC系统所以选择自带Xcode,windows系统 建议选Visual Studio开发套件]
  5. 编辑器套件 visual stdio code [vscode不仅作为编辑器使用,也可以通过配置go,cpp等套件进行对应开发套件]
下载源码

下载Go Ethereum并编译源码

git clone https://github.com/ethereum/go-ethereum.git
cd  go-ethereum
git checkout v1.8.0
make geth
make all

查看geth版本信息

./build/bin/geth version
Geth
Version: 1.8.2-unstable
Git Commit: fa375955ad52bc7936f33c8d8cec68fb9007baaa
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.8.3
Operating System: darwin

执行程序

cd ./build/bin

获得12个执行程序 abigen,bootnode,ethkey,evm,examples,faucet,geth,p2psim,puppeth,ripdump,swarm,wnode

关键执行程序: 【geth】:以太坊CLI(command-line interface)命令行客户端。它是作为连接以太坊网络的入口节点,以太坊网络包括主网络(现交易真实公有链网络),测试网络(应用测试环境网络),专用网络(自行的搭建私有链网络)。Geth默认能作为一个完整节点运行,并且可以作为单独回溯节点(保留所有历史数据)及轻量节点(实时数据检索)。它可以被其他进程用作进入以太坊网络的网关,通过HTTP,WebSocket,IPC传输或者JSON RPC访问。

【abigen】:源代码生成器。它将以太坊智能合约定义(代码) 转换为易于使用的、编译时类型安全的Go软件包。 如果合约字节码可用的话,它可以在易用的以太坊智能合约ABI(Application Binary Interface)二进制应用接口上扩展功能。 同时也能编译Solidity源文件,使开发更加精简。

【bootnode】:网络节点发现应用(以太坊客户端节点发现功能)。只参与网络节点的发现,不能运行任何更高级别的应用程序协议。它作为轻量级引导节点来帮助找到专用网络中的对等设备。

【ethkey】: 密钥生成管理应用(以太坊客户端密钥管理)。具有生成密钥,检查密钥的管理功能。对发送消息进行签名及消息签名验证。

【evm】:EVM(Ethereum Virtual Machine)可以进行开发实用工具版本的以太坊虚拟机。能够在可配置的环境和执行模式下运行字节码片段。其目的是允许对EVM操作码进行封装,细粒度的调试。

【examples】:节点适配器例子。适配使用SIM,exec,docker.

【faucet】:-未知。从帮助中看应该是对以太坊网络进行配置。后面源码分析再重新整理。

【p2psim】:p2p仿真网络命令行工具。后面源码分析再重新整理。

【puppeth】:管理私有以太坊网络工具。安装和维护私有以太坊网络工具。后面源码分析再重新整理。

【ripdump】:RLP (Recursive Length Prefix) 前缀长度递归转换开发者通用工具,用来把二进制前缀长度递归 (以太坊协议中用于网络及一致性的数据编码) 转换成对用户友好的分层表示。

【swarm】: swarm守护进程和工具。作为swarm网络的入口点。

【wnode】:-未知

以上为生成的执行程序。