介绍
以太坊是一个区块链平台,提供了运行智能合约的虚拟机,利用这个平台,任何人都可以快速的开发出一个自己的基于区块链的应用,例如一种加密货币,而不需要从实现最底层的区块链开始编写代码。
概念
智能合约
智能合约指的是运行在以太坊网络上的分布式的应用程序,它由一些保存在以太坊区块链上的特定地址上的函数和数据组成,智能合约其实也是一种以太坊账户,它有账户余额,并且可以向网络上发起交易,但是它是自动执行的、不可以被用户直接控制。
Gas
智能合约在以太坊网络上的每一个节点上执行,需要消耗的电能和时间,因此引入Gas来计算成本。Gas指的是以太坊底层的虚拟机EVM执行代码的代价。如果你的智能合约程序用光了账户里的Gas,那么你的计算程序就将会被以太坊网络拒绝。
Gas的价格由市场决定,与比特币的交易费类似。如果你出价高,网络中的节点会优先计算你的事务。通常来说,读取状态时免费,存储状态时收费。
部署智能合约也是一种交易事务,也需要花费gas。
分布式应用程序 dApp
分布式应用程序指的是服务端放在以太坊网络上的智能合约程序。它不并需要将全部的状态和计算都放在区块链上,因为那很昂贵。但是一个分布式程序最终必须将可信任状态存放到以太坊区块链上以供任何人读取。
以太坊组织在Github上有一些关于分布式应用程序dApp的参考和例子
dApp 客户端
一个dApp 客户端是以太坊区块链上的程序的前端,通常用Javascript或者Go/Rust编写。
dApp 浏览器
是一个可以运行dApp Javascript客户端程序的应用程序,连接以太坊节点、提供一个账户接口。
Mist是官方的以太坊dApp浏览器。
以太坊节点
节点保存着区块链的副本,可以执行所有的事务来确认结果状态,运行着geth或者parity
节点需要知道下载哪个区块链、和哪个peer通讯。
通常使用docker来运行节点客户端,但是也可以使用在本机运行(主要是为了测试和开发)。
如果你向用户分发dApp客户端,你不必提供对以太坊节点的访问方法。用户只需要运行dApp浏览器就可以了。
以太坊令牌
令牌就是在一个分布式哈希表里的通过API来做加运算和减运算的一些数字,通常用于去中心化的交互、资产所有权证明、投票权证明等。
REC20/ERC223/ERC777/ERC827 令牌
用于定义令牌的协议
ERC721/NFT 令牌
定义了一个不可替代的令牌的标准。所谓“不可替代”,指的是每一个令牌都不等于其他令牌,都有自己的独一无二的属性。
智能合约的接口
你可以使用 JSON RPC API与智能合约交互。geth和parity都提供了命令行/浏览器用于交互。
如果你想编程与智能合约交互,那么可以使用web3.js, ethjs, abigen,你也可以写自己的客户端库来操作 JSON PRC API。
为了测试和开发,可以使用Ganache来运行一个本地的以太坊节点。
当你部署一个智能合约的时候,你所有要做的,就是向地址0 (0x0)发送一个交易事务(将合约的字节码作为参数)
Truffle, Embark, Populous, Perigord 和其他
一旦你开始写智能合约,你所作的事情会有大量的重复:编译源代码成为字节码、部署字节码到网络上、测试部署的合约等等。
Truffle, Embark, Populous, Perigord 这些框架标准化和自动化了这些细节,他们提供了一个很好的编写、部署和测试合约的开发流程。
其中最受欢迎的是用Node编写Truffle。
当你第一次写合约的时候,最好不要使用这些框架,而是从头手写。这样可以让自己理解这些框架是干什么用的。当你熟悉了怎么手写智能合约之后,再使用这些框架。
ETHPM
ETHPM是一个去中心化的智能合约的包的仓库。使用它,你可以复用其他知名的合约和库,减少代码的重复。
主要的网络
Mainnet: 是主以太坊网络。
Görli: 是目前最主流的测试网络,使用权威证明(proof-of-authority)共识。
Ropsten: 一种使用工作量证明的测试网络。
账户 钱包
一个以太坊账户是一个私钥和地址对,他们用来存储以太币,无需Gas来创建,所有以太坊网络上的事务都起源于一个账户,合约不能发起一个事务。
一个钱包可能是下列二者之一:
1) 一个使用你的账户创建和发送事务的接口
2) 只是一个发送和接收以太的智能合约
EVM
你的智能合约会被编译成一种机器码,它们会运行于网络上每一个节点的EVM(以太坊虚拟机)里。Solidity 是官方的编写智能合约的语言。
区块链探索者 (Block Expolorer)
以太坊上的所有交易信息都是公开透明的,任何人都可以查看。区块链探索者提供了一个可以查看这些信息的接口,可以用于查看:
- 区块
- Gas
- 交易
- 账户
- token
- 网络
以及以太坊2.0里的一些信息。
常见的区块链探索者服务: