# 以太坊基础
# 介绍
什么是以太坊
以太坊是一个去中心化的开源的有智能合约功能的公共区块链平台
# 特点
- 以太坊是“世界计算机”,这代表它是一个开源的,全球分布式的技术基础设施
- 执行称为“智能合约”的程序
- 使用区块链来同步和存储系统状态以及名为以太币(ether)的加密货币,已计量和约束执行资源成本
- 本质是一个基于交易的状态机
- 以太坊平台使开发人员能够构建具有内置经济功能的强大去中心化应用程序(DApp);在持续自我正常运行的同时,它还减少或消除了审查,第三方界面和交易对手风险
# 组成
P2P网络 以太坊在以太坊主网络上运行,该网络可在TCP端口30303上寻址,并运行一个DVP2p的协议
交易 Transaction 以太坊交易是网络消息,其中包括发送者,接受者,值和数据的有效载荷
以太坊虚拟机 EVM 以太坊状态转换由以太坊虚拟机处理,是一个执行字节码的基于堆栈的虚拟机
数据库 Blockchain 以太坊的区块链作为数据库(通常是Google的LevelDB) 本地存储在每个节点上,包含序列化后的交易和系统状态
客户端 以太坊有几种可操作的客户端软件实现,其中最突出的是Go-Ethereum(Geth)和Parity
账户 Account
包含地址,余额和随机数 以及可选的存储和代码的对象- 普通账户(EOA) 存储和代码均为空
- 合约账户(Contract) 包含存储和代码
地址 Address 一般来说,这代表一个EOA和合约,它可以在区块链上接受或发送交易。更具体来说,它是ECDSA公钥的keccak散列的最右边的160位
交易 Transaction 可以发送以太币和信息 向合约发送的交易可以调用智能合约代码,并以信息数据为函数参数 向空用户发送信息,可以自动生成以信息为代码块的合约账户
gas 以太坊用于执行智能合约的虚拟燃料。以太坊虚拟机使用核算机制来衡量gas的消耗量并限制计算资源的消耗
# 货币
以太坊的货币单位称为以太 ether,也可以表示成为ETH
发行规则:
挖矿前 2014年7/8月,为众筹大约发行了7200万以太币
挖矿产出
- 区块奖励
- 叔块奖励
- 叔块引用奖励
以太币产量未来的变化 以太坊出块机制从工作量证明(Pow)转换为股权证明(Pos)后,以太币的发行会有什么变化尚未有定论。股权证明机制将使用一个称为Casper的协议
# Token 代币
- 代币Token 也称作通证,本意为令牌,代表所有权的资产,货币,权限等在区块链上的抽象
- 可替代性通证 (fungible token) 指的是基于区块链技术发行的,互相可以替代的,可以接近无限拆分的token erc20
- 非同质通证(non-fungible token) 指的是基于区块链技术发行的,唯一的,不可替代的,大多数情况下不可拆分的token,如加密猫 erc721
# 单位
- 以太坊的货币单位称为以太,也称为ETH
- ether被细分为更小的单位,称为wei; 1 ether = 10^18 wei
- 以太的值总是在以太坊内部表示为以wei表示的无符号的整数值
- 以太的各种单位都一个使用国际单位制(SI) 的科学名称和一个口语名称
# 网络
Main Network (Network ID:1) 主要的,公共的以太坊区块链
Ropsten Test Network (Network ID:3) 以太坊公共测试区块链和网络,使用工作量证明共识(挖矿) 。该网络上的ETH没有任何价值
Kovan Test Network (Network ID:42) 以太坊公共测试区块链和网络,使用Aura协议进行权威证明POA共识
Rinkeby Test Network (Network ID:4) 以太坊公共测试区块链和网络,使用Clique协议进行权威证明POA共识
Localhost 8545 连接到本机网络,该节点可以是任何公共区块链的一部分,也可以是私有testnet
Custom RPC 允许将Metamask连接到任意兼容geth的RPC接口的节点
# 客户端
以太坊客户端是一个软件应用程序,它实现以太坊规范并通过p2p网络与其他以太坊客户端进行通信。如果不同的以太坊客户端符合参考规范和标准化通信协议,则可以进行相互操作。以太坊是一个开源项目,由“黄皮书”正式规范定义。除了各种以太坊改进提案之外,此正式规范还定义了以太坊客户端的标准行为。因为以太坊有明确的正式规范,以太网客户端有了很多独立开发软件实现,他们之间又可以彼此交互。
全节点 以太坊全节点
- 全节点是整个主链的一个副本,存储并维护链上的所有数据,并随时验证新区块的合法性。
- 区块链的健康和扩展弹性,取决于具有许多独立操作和地理上分散的全节点。每个全节点都可以帮助其他新节点获取区块数据,并提供所有交易和合约的独立验证。
- 运行全节点将耗费巨大的成本,包括硬件资源和带宽。
- 以太坊开发不需要在实时网络(主网)上运行的全节点。我们可以使用测试网络的节点来代替,也可以用本地私链,或者使用服务商提供的基于云的以太坊客户端:这些几乎都可以执行所有操作
远程客户端 不存储区块链的本地副本或验证块和交易。这些客户端一般只提供钱包的功能,可以创建和广播交易。远程客户端可用于连接到现有网络,MetaMask 就是一个这样的客户端。
轻节点 不保存链上的区块历史数据,只保存区块链当前的状态。轻节点可以对块和交易进行验证。
# 账户
# 智能合约
# 交易
# gas
# EVM
# solidity
# DApp 去中心化应用
基于以太坊可以创建智能合约来构建去中心化应用(Dapp),以太坊的构想是成为DApps编程开发的平台
DApp至少由以下组成:
- 区块链上的智能合约
- Web前端用户界面
# 名词解释
- EIP Ethereum Improvement Proposals 以太坊改进意见
- ERC Ethereum Request for Comments 以太坊征求意见
- EOA External Owned Account 外部账户
- Ethash: 以太坊1.0的工作量证明算法
- Keccak256 以太坊中使用的密码哈希函数
- faucet 水龙头