以太坊技术架构
架构概述
以太坊属于公链,所有节点都具有相同的功能。
以太坊技术架构自上而下依次为应用层、合约层、通信层、共识层、网络层、数据层、存储层。
应用层
应用层主要对应Dapp应用模块,其中包含多种区块链应用场景典型案例。
合约层
以太坊的合约层中封装以太坊客户端所使用的智能合约部署和调用机制。
通信层
以太坊的通信层封装了以太坊上下游以及以太坊与外部的通信交互协议。
共识层
以太坊的共识层封装了网络节点的多种共识机制算法,主要为Pow(Proof of work)、Pos(Proofof stack)和Casper。
网络层
以太坊的网络层主要封装P2P的组网机制,数据验证以及传播机制。
数据层
数据层封装了底层数据区块的链式结构和Event事件模型,负责处理与以太坊相关的数据结构以及事件通知机制。
存储层
存储层封装了日志和LevelDB模型,负责数据的持久化功能以及系统日志的记录。
以太坊共识算法概述
POW
运行流程
优点
- 挖矿过程匿名化,无需许可,即所有人均可参与
- 作恶成本较高
缺点
- 吞吐量较低,延迟过高,需要等待PoW难题破解
- 分叉较频繁,造成大量算力浪费
以太坊PoW的步骤
PoS
运行流程
优点
- 节省大量的算力和电力进行共识
- 吞吐量大,且延迟较低
- 作恶成本较高
缺点
- 分叉链的成本较低,导致系统容易出现分叉
- 去中心化程度较低,参与验证需要一定的成本
Casper
定义
Casper是一种基于保证金的经济激励共识协议(security-deposit based economic consensus Protocol)。
Casper是由POS衍生出来的一种共识机制,其与POS的区别为Casper的共识按块来达成而非POS按链来达成。
Casper不是单独一个项目,它是两个研究项目的融合:
Casper the Friendly Finality Gadget (FFG)
Casper the Friendly GHOST:Correct-by-Construction (CBC)
Casper的几个概念
下注共识
- 验证人将部分保证金下注
- 共识结果又通过验证人的下注情况形成
交易最终确认
当锁定保证金的验证人中绝大多数以非常高的概率下注某个块时,任何不包含这个块的分叉都不可能胜出
防审查
Casper将共识过程看作一个合作博弈,确保每一个节点只有在由所有节点组成的联盟中才能获得最大利益
工作流程
优点
- Casper对去中心化更为友好,减少权益集中度的影响
- Casper相当于POW降低了能源的消耗与浪费,可以在不消耗大量电力的情况下进行工作
- Casper具有经济安全性
- Casper非常友好地支持分片,可以有效提高扩展性
缺点
- Casper协议会降低货币的流动性,从而对金融市场造成一定的冲击
- 需要质押大量代币,从而降低了代币的流动性
以太坊智能合约
智能合约指令
定义
智能合约指令是定义一种特定形式的脚本指令交由以太坊EVM执行,智能合约指令需要定义数据结构,构造函数,逻辑函数以及通知事件。
执行
从智能合约指令到智能合约执行,分为以下四个步骤
- 编写智能合约
- 将智能合约编译成bytecode
- 部署智能合约
- 外部调用智能合约
智能合约ABI
简介
ABI全程为Application Binary Interface,表示应用程序二进制接口,是指两个程序模块之间的接口。
形式
以太坊智能合约的ABI包含描述该合约中函数以及事件的数组,数组中的元素统一使用JSON格式进行表示。
智能合约高级语言
开发一款专用于智能合约编写的高级语言,可以有效降低消耗成本。
主要分为两大类:声明式编程语言和指令式编程语言
目前的高级语言有:
Solidity语言
Solidity是一种面向对象的静态类型编程语言,语法神似JavaScript。学习成本低,简单易上手,同时具有普适性,目前也被广泛运用于多个区块链平台(不仅仅是以太坊)。solidity的结构如下:
智能合约编写
智能合约编写是使用contract关键字和标识符来声明,合约体主要包含数据结构、构造函数、业务逻辑函数以及通知事件。
部署与调用
智能合约部署是将智能合约部署到以太坊网络中获取合约地址作为访问以太坊网络中智能合约的一个标识。
智能合约的调用是通过RPC调用合约地址中的智能合约函数中的接口,完成对合约的调用与访问。
Truffle和DApp开发
Truffle简介
Truffle是一个基于solidity的世界级开发测试框架,致力于让以太坊上的智能合约与DApp开发变得简单。
Truffle特点
Truffle具有以下四个特点:
- 高效开发工具
- 基于node运行时的框架
- 轻松实施自动化开发DevOps
- 不需要手动编译和部署
Dapp架构
Dapp开发流程
Dapp的开发是从客户端连接区块链到最终用户通过客户端、网页操作Dapp的全流程开发。
Truffle开发Dapp流程
Dapp开发流程基本类似,下面以Truffle为例
钱包Mist
钱包Mist是以太坊官方的图形化区块链钱包。
作用
第一个图形交互界面的钱包
支持简易合约部署
将ERC20代币标准进行推广
支持根据ABI创建合约虚拟交互界面
功能
部署合约
创建账户
比特币
备份钱包
转账
钱包MetaMask
MetaMask是一款基于MIT开源协议去中心化的以太坊轻钱包,由全球分布式开发者进行开发与维护。
Geth
Geth是以太坊客户端命令行工具,用于与以太坊网络进行交互,主要对开发者比较友好,更利于开发者连接进行Dapp的开发。