以太坊学习笔记(2):以太坊简介

目录


一、以太坊

以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether)提供去中心化的虚拟机(Ethereum Virtual Machine,EVM)来处理点对点合约。——《百度百科》

以太坊是一个有智能合约(Smart Contract)功能的公共区块平台。类比智能手机,以太坊就是手机的操作系统,智能合约就是系统上搭载的应用(App)。

1. 以太坊与比特币的异同

1)相同点

  • 以太坊也是去中心化的区块链平台,平台上众多节点组成P2P网络。
  • 各节点都可以“交易”、“记账”。
  • 交易会被节点打包成一个“区块”,区块中也包含上一个区块的索引,形成一条区块链。
  • 节点之间通过共识机制达成数据一致性。

2)不同点

  • 以太坊“出块”速度更块,奖励机制更先进。比特币出块平均时间为10min,以太坊为12s。
  • 以太坊支持智能合约,支持去中心化应用(DApp),用户可以自定义数字资产和流通逻辑。

2. 以太坊特色

以太坊是一个可编程的区块链。核心是以太坊虚拟机(EVM),用户发布或调用的”智能合约”运行在EVM上。

  • 以太坊区块链上发送的“交易”可以是调用一段用户自定义的代码;
  • 处理的交易逻辑也可以是任意的函数调用;
  • 记录在账本里的也可以是函数调用后的变量的新状态。

3. 以太坊整体架构

以太坊的整体架构如下图所示,分为三层:底层服务、核心层、顶层应用。

以太坊学习笔记(2):以太坊简介

1)底层服务

底层服务有P2P网络服务、LevelDB数据库、密码学算法及分片(Sharding)优化等。

  • P2P网络,每个节点共同提供服务,生成或审核新数据。
  • LevelDB数据库,最终存储区块、交易等数据。
  • 密码学算法,保证数据的隐私性和区块链的安全性。
  • 分片优化,加快区块生成速度。

2)核心层

核心层包括区块链、以太坊虚拟机(EVM)和共识算法。以EVM作为运行智能合约的载体,区块链技术为主体,辅以共识算法。

3)顶层应用

顶层应用包括API接口、智能合约以及去中心化应用等。以太坊的DApp通过Web3.js与智能合约进行信息交换,所有智能合约运行在EVM上,并用到RPC调用。


二、去中心化应用DApp

一般对于DApp的定义是,运行在分布式网络上,参与者的信息被安全保护(也可能是匿名的),通过网络节点进行去中心化操作的应用。——《百度百科》

去中心化应用(Decentralized Application,DApp)是运行在P2P网络上的应用软件。具有开源、去中心化、激励机制、共识机制等特性。

1. DApp特点

  1. 开源
    所有用户可以检查验证DApp的代码逻辑、运行细节,源代码公开透明。
  2. 去中心化
    智能合约的部署与调用均记录于以太坊区块链的交易记录中,实现应用数据去中心化存储。
  3. 激励机制
    区块的制造者(“矿工”)投入算力用于执行交易和制造区块,会得到相应的奖励。
  4. 共识机制
    DApp在运行过程中需要一套协议机制使大多是用户对其运行过程达成共识。

2. DApp实例

  1. Golem
    Golem创造了一个全球空闲计算资源的产销市场。用户可以向其他用户出租自己目前未使用的计算资源,同时也能租借计算资源来解决一些消耗较多算力的任务。
  2. Augur
    Augur是一个用于预测未来真实事件的市场预测平台。用户可以对尚未发生的真实事件作出自己的预测,预测正确可以获得奖励,错误则会有一定损失。
  3. CryptoKitties
    CryptoKitties是养猫娱乐DApp,用户可以在DApp中饲养和繁育虚拟小猫。CryptoKitties的智能合约将小猫定义为“不可替代的代币”(Non-Fungible Token,NFT),每只猫有自己的基因与形态,独一无二。

三、以太坊主流项目

目前以太坊上有许多开源的项目,包括多语言版本的以太坊客户端、浏览器及拓展工具、开发工具等。

1. 以太坊客户端

目前,以太坊协议及客户端有许多语言版本的实现,最受欢迎的的包括Go-EthereumCPP-ethereumParityPyethapp等,这些开源项目均可在以太坊GitHub下找到。

  1. Go-Ethereum
    以太坊协议Go语言版本,又称Geth,目前使用最广泛以太坊客户端。既包括独立的以太坊客户端,也可作为库被调用。
  2. CPP-Ethereum
    以太坊协议C++语言版本。适用于Windows、Linux和OS X等各个操作系统及硬件平台,可移植性强。
  3. Parity
    以太坊协议Rust语言版本。该客户端实现了以太坊钱包功能,可用于管理账户及账户中的代币与合约等。
  4. Pyethapp
    以太坊协议Python语言版本。创建了一个易扩展的以太坊核心代码版本。

2. 以太坊浏览器及拓展工具

  1. Mist
    以太坊官方开发的工具,用以浏览DApp项目。
  2. MetaMask
    用以接入以太坊去中心化网络的浏览器插件,目前适用于Chrome和Brave浏览器。用户不需要在本地安装运行以太坊节点,只需通过MetaMask就可连接以太坊网络,运行DApp项目。

3. 以太坊开发工具

  1. Web3.js
    兼容了以太坊核心功能的JavaScript库,为客户端及DApp提供一系列JS API接口。
  2. Remix
    又称Browser-Solidity,是基于浏览器的Solidity IDE和编译器。它整合了Solidity代码的编写、调试和运行等功能。
  3. Truffle
    针对以太坊DApp的开发框架,基于Node.js编写。它对Solidity智能合约的开发、测试、部署等进行全流程管理。
  4. ENS-registrar
    以太坊域名服务(Ethereum Name Service,ENS)是为以太坊账户提供简单域名的服务,类似DNS。ENS-registrar为以太坊账户在以太坊链上提供域名注册。