一、简介
-
智能合约
首先,智能合约并不是像人工智能AI那样的超级智能,智能合约的英文名叫Smart contract,仅仅是Smart而已,还没有到人工智能的intelligence。所以,我们可以把智能合约想象成一种自动售货机,出售的是通证(token):投资者(用户)发起交易,向智能合约转入以太币(ETH),智能合约自动运转,在满足一定规则后,它向投资者账户转入相应数量的通证。 -
NFT
上面我们知道了,智能合约类似一种自动售货机,出售的是通证(token)。如果出售的token的类型是独一无二的,并且是不可分割的,这种token就叫做Non-Fungible Token
,即是 NFT(需要符合ERC-721标准)。例如一个token代表一张体育比赛的门票,因为每一张门票座位编号不一样,所以对应的token独一无二,又因为座位只能出售给一个人,因为对应的token也不能分割。
一、以太坊区块链网络简介
以太坊区块链网络-
以太坊公共区块链网络
对区块链最好的描述是将其描述为一个公共数据库,它由网络中的许多计算机更新和共享,并且任何人都可以接入。以太坊公共区块链网络也不例外。目前,以太坊公共区块链网络提供了主网和三个测试网,主网就是智能合约正式上线的区块链网络,三个测试网分别为Kovan、Rinkeby和Ropsten。Ropsten是官方提供的和主网最相似的网络,使用工作量证明;Rinkeby也是官方提供的,使用权益证明。以太坊公共区块链网络具体的说明[见这里]。(https://ethereum.org/zh/developers/docs/networks/) -
节点、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 测试框架集成。
二、开发环境搭建
-
安装vscode Visual Studio Code
-
安装以太坊开发的vscode相关插件,打开下面的网址,在点击 install 即可。
https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity
https://marketplace.visualstudio.com/items?itemName=hosho.solidity-debugger
三、注册相关账号
-
上面说了,我们的程序需要访问Ethereum节点,才能连接到公共区块链网络,为了方便,我们使用Infura访问Ethereum节点。我们应用使用Infura只需要Infura的API KEY(即是API网址)即可。在Infura上注册账号,创建项目,在项目详情页上可以查看API KEY。我们先用测试网goerli的API KEY,等到正式上线再用mainnet的API Key:
Infura api key
-
以太坊帐户由公钥和私钥加密对组成。因为密钥不方便记忆,我们不直接创建密钥,而是使用助记词来自动生成。助记词是由十二到二十四个单词组成的密码,它被用于生成区块链账户系统中512位的种子(seed),而种子可以生成私钥(prikey),由私钥可以导出公钥(pubkey),公钥经过变换后可以得到我们经常在区块链账本上看到的地址(address)。点击这里来生成助记词(注意空格也是助记词的一部分):
生成助记词
助记词相当于以太坊的账号密码,千万要保存好,千万不要随便告诉别人。
四、开发环境搭建
- 下载 Solidity Template 的源代码,
-
用 vscode 打开下载的源代码,将
.env.example
复制一份,改名为.env
,填入上面注册时的 API KEY 和助记词。 -
使用下面的命令来安装项目依赖库:
$ yarn install
-
编译合约
要编译合约,请在终端中运行 npx hardhat compile
。 compile
任务是hardhat内置任务之一。
$ npx hardhat compile
Compiling...
Compiled 1 contract successfully
合约已成功编译,可以使用了。
网友评论