以太坊(Ethereum)智能合约开发快速入门

一、简介

  1. 智能合约
    首先,智能合约并不是像人工智能AI那样的超级智能,智能合约的英文名叫Smart contract,仅仅是Smart而已,还没有到人工智能的intelligence。所以,我们可以把智能合约想象成一种自动售货机,出售的是通证(token):投资者(用户)发起交易,向智能合约转入以太币(ETH),智能合约自动运转,在满足一定规则后,它向投资者账户转入相应数量的通证。

  2. NFT
    上面我们知道了,智能合约类似一种自动售货机,出售的是通证(token)。如果出售的token的类型是独一无二的,并且是不可分割的,这种token就叫做 Non-Fungible Token,即是 NFT(需要符合ERC-721标准)。例如一个token代表一张体育比赛的门票,因为每一张门票座位编号不一样,所以对应的token独一无二,又因为座位只能出售给一个人,因为对应的token也不能分割。

一、以太坊区块链网络简介

以太坊区块链网络
  1. 以太坊公共区块链网络
    对区块链最好的描述是将其描述为一个公共数据库,它由网络中的许多计算机更新和共享,并且任何人都可以接入。以太坊公共区块链网络也不例外。目前,以太坊公共区块链网络提供了主网和三个测试网,主网就是智能合约正式上线的区块链网络,三个测试网分别为Kovan、Rinkeby和Ropsten。Ropsten是官方提供的和主网最相似的网络,使用工作量证明;Rinkeby也是官方提供的,使用权益证明。以太坊公共区块链网络具体的说明[见这里]。(https://ethereum.org/zh/developers/docs/networks/)

  2. 节点、Geth、Infura
    我们的程序需要访问以太坊节点,才能连接到以太坊公共区块链网络。有几种方法可以做到这一点,可以使用官方的Geth运行自己的以太坊节点。但这需要从区块链下载大量数据并保持同步,很麻烦,成本也高。比较方便的方法是,使用Infura访问以太坊节点。
    Infura 是什么?专业一点讲,Infura 是一种 IaaS(Infrastructure as a Service)产品,目的是为了降低访问以太坊数据的门槛。通俗一点讲,Infura 就是一个可以让你的 DApp 快速接入以太坊的平台,不需要本地运行以太坊节点。
    Infura是一个免费提供以太坊节点的服务。接下来有Infura的使用说明。

一、智能合约应用模块简介

我们的智能合约应用使用Solidity Template 项目模板开发框架来开发。下面简单介绍Solidity Template 的组成。

智能合约应用组成模块
  1. Solidity Template —— 项目模板
    Solidity Template 是一个 Hardhat 项目的模板,除了集成 Hardhat,还集成了以太坊 linter、代码格式化、代码覆盖率测试等工具。Solidity Template 直接clone或者下载回来就能使用,非常方便。

  2. Hardhat —— 项目主框架
    Hardhat 是一个编译、部署、测试和调试以太坊应用的开发环境。使用 Hardhat 可以方便地开发以太坊的智能合约和dApps。

  3. Waffle —— 智能合约应用测试库
    Waffle 是一个编写和测试以太坊智能合约的库,比Truffle更加好用,简单和快速,它内部使用了ethers-jsMochaChai。我们将使用它来编写智能合约应用的测试代码。

  1. Ethers.js —— 智能合约API库
    Ethers.js 是一个编译、部署、测试和调试以太坊应用的开发环境。使用 Hardhat 可以方便地开发以太坊的智能合约和dApps。这是我们开发智能合约应用所用的最多API的库。这里有中文文档,和官方英文文档。

  2. Mocha和Chai —— 测试框架和断言库
    Mocha是一个功能丰富的javascript测试框架,运行在node.js和浏览器中,使异步测试变得简单有趣。Chai 是一个针对 Node.js 和浏览器的行为驱动测试和测试驱动测试的诊断库,可与任何 JavaScript 测试框架集成。

二、开发环境搭建

  1. 安装vscode Visual Studio Code

  2. 安装以太坊开发的vscode相关插件,打开下面的网址,在点击 install 即可。

https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity
https://marketplace.visualstudio.com/items?itemName=hosho.solidity-debugger

三、注册相关账号

  1. 上面说了,我们的程序需要访问Ethereum节点,才能连接到公共区块链网络,为了方便,我们使用Infura访问Ethereum节点。我们应用使用Infura只需要Infura的API KEY(即是API网址)即可。在Infura上注册账号,创建项目,在项目详情页上可以查看API KEY。我们先用测试网goerli的API KEY,等到正式上线再用mainnet的API Key:

    Infura api key

  2. 以太坊帐户由公钥和私钥加密对组成。因为密钥不方便记忆,我们不直接创建密钥,而是使用助记词来自动生成。助记词是由十二到二十四个单词组成的密码,它被用于生成区块链账户系统中512位的种子(seed),而种子可以生成私钥(prikey),由私钥可以导出公钥(pubkey),公钥经过变换后可以得到我们经常在区块链账本上看到的地址(address)。点击这里来生成助记词(注意空格也是助记词的一部分):

    生成助记词

助记词相当于以太坊的账号密码,千万要保存好,千万不要随便告诉别人。

四、项目搭建

  1. 下载 Solidity Template 的源代码,

https://github.com/paulrberg/solidity-template

  1. 用 vscode 打开下载的源代码,将 .env.example 复制一份,改名为 .env,填入上面注册时的 API KEY 和助记词。

  2. 使用下面的命令来安装项目依赖库:
    $ yarn install

  3. 编译合约

要编译合约,请在终端中运行 npx hardhat compilecompile任务是hardhat内置任务之一。

$ npx hardhat compile
Compiling...
Compiled 1 contract successfully

合约已成功编译,可以使用了。

五、编写智能合约(待续。。。)

你可能感兴趣的:(以太坊(Ethereum)智能合约开发快速入门)