1. 以太坊编程语言和操作码
以太坊中智能合约的代码以高级语言编写,如 Serpent、LLL、Solidity 或 Viper,并可转换为 EVM 可以理解的字节码,以便执行。
Solidity 是为以太坊开发的高级语言之一,它具有类似 JavaScript 的语法,可以为智能合约编写代码。在代码编写完成之后,可使用称为 solc 的 Solidity 编译器将其编译为 EVM 可以理解的字符码。
注意: Solidity 官方说明文档可以从以下网址获得: http://solidity.readthedocs.io/en/latest/ |
类似 Lisp 的低级语言(Low-level Lisp-like Language,LLL) 是一种用于编写智能合约代码的语言。
Serpent 是一种类似于 Python 的高级语言,也可以用于为以太坊编写智能合约。
Vyper 是一种较新的语言,它是从零开始开发的,旨在实现开发一种安全、简单且审核的语言。
注意: 有关 Vyper 的更多信息,可以从以下网址获得: https://github.com/ethereum/vyper |
2. 区块和区块链
区块是区块链的主要组成部分。以太坊区块由各种元素组成,具体如下:
- 区块标头
- 交易列表
- 叔区块标头列表
交易列表是该区块中包含的所有交易的列表。此外,该区块中还包含叔(Ommers 或 Uncles) 区块的标头列表。
以太坊区块的生产时间(大概 15 秒) 和 比特币 (大概 10 分钟) 相比要快很多,因此,会有更多的竞争区块被矿工发现,这些竞争区块也被称为孤立区块(Orphan Block) 或 陈旧区块
2.1 区块标头
以太坊中区块最重要、最复杂的部分是区块标头,它包含一些有价值的信息。
下图显示了区块和区块标头的详细结构
3. 节点和矿工
以太坊网络包含不同的节点。一些节点仅充当钱包,另一些节点是轻客户端,很少有节点是运行完整区块链的全客户端。节点的最重要类型之一是挖矿节点。
3.1 共识机制
以太坊的共识机制是基于贪婪最重可观测子数(Greedy Heaviest Observed SubTree, GHOST) 协议,它最初是由 Zohar 和 Sompolinsky 在 2013 年 12 月提出的。
下图显示了最长链和最重链之间的简单比较
3.6 挖矿设备
由于以太币的挖矿难度随着时间的增加而增加,因此矿工开始组装具有多个 GPU 的挖矿设备(Mining Rigs)。挖矿设备通常包含大约 5 张显卡,它们全部并行工作以进行挖矿,从而提高找到有效的随机数进行挖矿的机会。
下图显示了在市场上可以购买到的挖矿设备
3.7 矿池
许多在线矿池都提供以太坊挖矿,可以使用以下命令将 Ethminer 连接到矿池:
每个矿池都会发布其操作指导。一般来说,连接到矿池的过程都是相似的。
4. 钱包和客户端软件
由于以太坊正处于加紧开发和演变过程中,因此过去几年已经开发并推出了许多组件、客户端和工具。
4.1 Geth
这是以太坊客户端的 Go 语言实现。
4.2 Eth
这是以太坊客户端的 C++ 语言实现。
4.3 Pyethapp
这是以太坊客户端的 Python 语言实现。
4.4 Parity
此实现使用 Rust 语言构建,由 EthCore 开发。EthCore 是一家致力于 Parity 客户端开发的公司。
4.8 Mist 浏览器
4.10 Geth 控制台
4.11 用比特币为帐户注资
4.12 Parity 安装
6. 支持协议
6.2 Swarm