以太坊最上层的是DApp。它通过Web3.js和智能合约层进行交换。所有的智能合约都运行在EVM(以太坊虚拟机)上,并会用到RPC的调用。在EVM和RPC下面是以太坊的四大核心内容,包括:blockChain,共识算法,挖矿以及网络层。除了DApp外,其他的所有部分都在以太坊的客户端里,目前最流行的以太坊客户端就是Geth(Go-Ethereum)
一、简介
智能合约
首先,智能合约并不是像人工智能AI那样的超级智能,智能合约的英文名叫Smart contract,,仅仅是Smart而已,还没有到人工智能的intelligence。
NFT
上面我们知道了,智能合约类似一种自动售货机,出售的是通证(token)。如果出售的token的类型是独一无二的,并且是不可分割的,这种token就叫做Non-Fungible Token,即是NFT(需要符合ERC-721标准)。例如一个token代表一张体育比赛的门票,因为每一张门票座位编号不一样,所以对应的token独一无二,又因为座位只能出售给一个人,因为对应的token也不能分割。
一、以太坊区块链网络简介
以太坊区块链网络
以太坊公共区块链网络
对区块链最好的描述是将其描述为一个公共数据库,它由网络中的许多计算机更新和共享,并且任何人都可以接入。ETH链上系统开发对接唯:MrsFu123,以太坊公共区块链网络也不例外。目前,以太坊公共区块链网络提供了主网和三个测试网,主网就是智能合约正式上线的区块链网络,三个测试网分别为Kovan、Rinkeby和Ropsten。Ropsten是官方提供的和主网最相似的网络,使用工作量证明;Rinkeby也是官方提供的,使用权益证明。
节点、Geth、Infura
我们的程序需要访问以太坊节点,才能连接到以太坊公共区块链网络。有几种方法可以做到这一点,可以使用Geth运行自己的以太坊节点。但这需要从区块链下载大量数据并保持同步,很麻烦,成本也高。比较方便的方法是,使用Infura访问以太坊节点。
Infura是什么?Infura是一种IaaS(Infrastructure as a Service)产品,目的是为了降低访问以太坊数据的门槛。通俗一点讲,Infura就是一个可以让你的DApp快速接入以太坊的平台,不需要本地运行以太坊节点。
Infura是一个免费提供以太坊节点的服务。接下来有Infura的使用说明。
一、智能合约应用模块简介
我们的智能合约应用使用Solidity Template项目模板开发框架来开发。下面简单介绍Solidity Template的组成。
智能合约应用组成模块
Solidity Template——项目模板
Solidity Template是一个Hardhat项目的模板,除了集成Hardhat,还集成了以太坊linter、代码格式化、代码覆盖率测试等工具。Solidity Template直接clone或者下载回来就能使用,非常方便。
Hardhat——项目主框架
Hardhat是一个编译、部署、测试和调试以太坊应用的开发环境。使用Hardhat可以方便地开发以太坊的智能合约和dApps。
Waffle——智能合约应用测试库
Waffle是一个编写和测试以太坊智能合约的库,比Truffle更加好用,简单和快速,它内部使用了ethers-js、Mocha和Chai。我们将使用它来编写智能合约应用的测试代码。
Ethers.js——智能合约API库
Ethers.js是一个编译、部署、测试和调试以太坊应用的开发环境。使用Hardhat可以方便地开发以太坊的智能合约和dApps。这是我们开发智能合约应用所用的最多API的库。这里有中文文档,和官方英文文档。
Mocha和Chai——测试框架和断言库
Mocha是一个功能丰富的javascript测试框架,运行在node.js和浏览器中,使异步测试变得简单有趣。Chai是一个针对Node.js和浏览器的行为驱动测试和测试驱动测试的诊断库,可与任何JavaScript测试框架集成。