http://www.7klian.com

Buidler 新手教程

    address public owner;
      // to our Signer’s owner.
    /**
    });
  // `beforeEach` will run before each test, re-deploying the contract every
      // Check balances.
    it(“Should assign the total supply of tokens to the owner”, async function () {
npm install
    });
     * The `constructor` is executed only once when the contract is created.
利用 git[7]
    // `it` is another Mocha function. This is the one you use to define your
建设和设置 Buidler 项目
    await buidlerToken.deployed();
describe(“Token contract”, function() {
  Create a sample project
// We import Chai to use its asserting functions here.
    const [owner] = await ethers.getSigners();
这是 npx buidler test在完整测试用例下输出的样子:
假如你的Node.js版本低于 10.0 ,请凭据以下说明举办进级。完成后,请返回 查抄情况[16]。
  let owner;
  // up after they run.
     * 合约结构函数
打开 terminal[6]
nvm alias default 10
实现Solidity智能合约代币
      );
进级 Node.js
      const initialOwnerBalance = await buidlerToken.balanceOf(
88888b.  888  888 888  .d88888 888  .d88b.  888d888
        owner = msg.sender;
     */
  });
      // Owner balance shouldn’t have changed.
  // You can nest describe calls to create subsections.
  let addrs;
Buidler是一个利便在以太坊长举办构建的任务运行器。利用它可以辅佐开拓人员打点和自动化构建智能合约和dApp的进程中固有的反复任务,以及轻松地环绕此事情流程引入更多成果。
  describe(“Deployment”, function () {
// an async function.
在项目根目次中建设一个名为test的新目次,并建设一个名为Token.js的新文件。
请记着,得到全部代币刊行量的账户是举办陈设的帐户,而且在利用 buidler-ethers 插件时,默认环境下, ContractFactory和Contract实例毗连到第一个签名者。这意味着owner变量中的帐户执行了陈设,而balanceOf()应该返回全部刊行量。
888               Y8P      888 888
MacOS
    it(“Should set the right owner”, async function () {
      expect(addr1Balance).to.equal(100);
Buidler还内置了Buidler EVM,后者是为开拓而设计的当地以太坊网络。它答允你陈设合约,运行测试和调试代码。
    string public name = “My Buidler Token”;
      await buidlerToken.transfer(await addr1.getAddress(), 50);
让我们从下面的代码开始。接下来,我们将对其举办表明,但此刻将其粘贴到Token.js中:
        await addr1.getAddress()
888               d8b      888 888
    await buidlerToken.deployed();
      expect(await buidlerToken.owner()).to.equal(await owner.getAddress());
· Git的Windows安装措施[12]
  solc: {
mkdir buidler-tutorial 
      await expect(
    it(“Should transfer tokens between accounts”, async function () {
  });
Buidler是环绕**task(任务)和plugins(插件)**的观念设计的。**Buidler **的大部门成果来自插件,作为开拓人员,你可以自由选择[21]你要利用的插件。
      const addr2Balance = await buidlerToken.balanceOf(
$ npx buidler test
你可以利用nvm[18]变动Node.js版本。要进级到Node.js12.x,请在终端中运行以下呼吁:
cd buidler-tutorial 
陈设合约后,我们可以在buidlerToken 上挪用我们的合约要领,通过挪用balanceOf()来获取所有者帐户的余额。
· 整个刊行总量都分派给了陈设合约的地点。
888                        888 888
在节制台运行  sudo apt update && sudo apt install nodejs 以再次安装新的 node.js
88888P”   “Y88888 888  “Y88888 888  “Y8888  888
        await owner.getAddress()
提示:你大概传闻过ERC20,这是以太坊中的代币尺度。DAI,USDC,MKR和ZRX之类的代币都遵循ERC20尺度,使这些代币都可以与任何能处理惩罚ERC20代币的软件兼容。为了简朴起见,我们要构建的代币不是ERC20。
每次你从CLI运行Buidler时,你都在运行任务。譬喻 npx buidler compile正在运行compile任务。要查察项目中当前可用的任务,运行npx buidler。通过运行npx buidler help [task],可以摸索任何任务。
      );
      );
      expect(addr2Balance).to.equal(50);
在此处[17]中找到要安装的Node.js版本,然后凭听说明举办操纵。
假如你已经安装了的Node.js> = 10.0,则可以跳过本节。假如没有,请凭据以下步调在Ubuntu,MacOS和Windows上安装它。
假如你不具备上述常识,请会见链接并花一些时间来进修基本常识。
    const [owner, addr1, addr2] = await ethers.getSigners();
    // for it to be deployed(), which happens onces its transaction has been
ethers.js中的ContractFactory是用于陈设新智能合约的抽象,因此此处的Token是我们代币合约实例的工场。

1. 概述
const { expect } = require(“chai”);
      const ownerBalance = await buidlerToken.balanceOf(owner.getAddress());
nvm use 12
Plugins(插件)
      expect(finalOwnerBalance).to.equal(initialOwnerBalance – 150);
    await buidlerToken.deployed();
      );
    // If the callback function is async, Mocha will `await` it.
    version: “0.6.8”
      // Expect receives a value, and wraps it in an assertion objet. These
     * The `external` modifier makes a function *only* callable from outside
    // Transfer 50 tokens from addr1 to addr2
这意味着测试通过了。此刻我们逐行表明一下:
我们将利用npm 呼吁行安装**Builder **。NPM是一个Node.js软件包揽理器和一个JavaScript代码在线存储库。打开一个新终端并运行以下呼吁:
npm install –save-dev @nomiclabs/buidler-ethers ethers @nomiclabs/buidler-waffle ethereum-waffle chai
    // The fixed amount of tokens stored in an unsigned integer type variable.
      // Transfer 100 tokens from owner to addr1.
      // We use .connect(signer) to send a transaction from another account
npm install npm –global ## 将npm进级到最新版本
编写测试用例
假如你有旧版本的Node.js,请参阅下一节。
// not actually needed, but having your tests organized makes debugging them
  Token contract
  let buidlerToken;
      const addr1Balance = await buidlerToken.balanceOf(
在终端上运行npx buidler test。你应该看到以下输出:
  });
提示:要相识有关Signer的更多信息,可以查察Signers文档[26]。
nvm use 10
        // Transfer the amount.
describe(“Token contract”, function () {
npm install -g node-gyp ## 确保我们已安装node-gyp
  it(“Should transfer tokens between accounts”, async function() {
    Deployment
888 “88b 888  888 888 d88″ 888 888 d8P  Y8b 888P”
Windows
      // `require` will evaluate false and revert the transaction.
      );
MacOS
// It will be used by the Solidity compiler to validate its version.
这将需要几分钟,而且大概会下载几GB的数据。
  });
在最终选择哪种东西,Buidler并不是排他的,可是它确实内置了一些特性,所有这些也都可以包围。大大都时候,利用给定东西的要领是利用将其集成到Buidler中的插件。
要完本钱教程,你应该可以或许:
要编译合约,请在终端中运行 npx buidler compile 。compile任务是内置任务之一。
contract Token {
  }
相识 smart contracts[8] 基本常识
      await buidlerToken.transfer(await addr1.getAddress(), 100);
      // Transfer another 50 tokens from owner to addr2.
    // To deploy our contract, we just have to call Token.deploy() and await
为了确保你的开拓情况已经筹备停当,请将以下呼吁复制并粘贴到新的终端中:
const [owner] = await ethers.getSigners();
    uint256 public totalSupply = 1000000;
· 代币不行支解。你可以转让1、2、3或37个代币,但不能转让2.5个代币。
    string public symbol = “MBT”;
假如你需要从默认帐户以外的其他帐户(或ethers.js 中的 Signer)发送生意业务来测试代码,则可以在ethers.js的Contract中利用connect()要领来将其毗连到其他帐户。像这样:
      ✓ Should transfer tokens between accounts (199ms)
      ✓ Should update balances after transfers (111ms)

    const Token = await ethers.getContractFactory(“Token”);
## 将会呈现一个弹出窗口,你必需继承举办安装。
合约已乐成编译,可以利用了。
    // mined.
      );
在Windows上安装Node.js需要一些手动步调。我们将安装git,Node.js 10.x和NPM的Windows构建东西。下载并运行以下呼吁:
sudo apt install nodejs
cd ethereum-hackathon-setup-checker
    // Some string type variables to identify the token.
Ubuntu
    });
     */
await buidlerToken.deployed();
  // They’re very useful to setup the environment for tests, and to clean it
});
    Transactions
    });
编写 JavaScript[5]
      ✓ Should fail if sender doesn’t have enough tokens
pragma solidity ^0.6.0;
     * The `view` modifier indicates that it doesn’t modify the contract’s
在节制台运行 sudo apt remove nodejs 以删除 node.js
  1 passing (663ms)
    // Get the ContractFactory and Signers here.
      // Transfer 50 tokens from owner to addr1
      const initialOwnerBalance = await buidlerToken.balanceOf(
假如乐成,你将看到一条确认动静,暗示你的开拓情况已筹备停当。你可以随时删除这个查抄情况的代码库目次,,然后在 建设新的Buidler项目[15]中继承前进。
提示:*.sol 的Solidity 合约文件的后缀。我们发起将文件名与其包括的合约名一致,这是一种常见的做法。
const { expect } = require(“chai”);
const { ethers } = require(“@nomiclabs/buidler”);
const ownerBalance = await buidlerToken.balanceOf(owner.getAddress());
npm install npm –global ## Upgrade npm to the latest version
        await addr2.getAddress()
        await addr2.getAddress()
nvm install 12
利用键盘选择 “建设一个新的builder.config.js(Create an empty buidler.config.js)”,然后回车。
  it(“Deployment should assign the total supply of tokens to the owner”, async function() {
利用 Ethers.js[3] 和 Waffle[4]为合约编写自动化测试
首先建设一个名为 contracts 的新目次,然后在目次内建设一个名为Token.sol的文件。
     * The `public` modifier makes a function callable from outside the contract.
      // objects have a lot of utility methods to assert values.
All contracts have already been compiled, skipping compilation.
当你挪用deploy()时,将发送生意业务,可是直到该生意业务打包出块后,合约才真正陈设。挪用deployed()将返回一个Promise,因此该代码将阻塞直到陈设完成。
配置 Metamask[9]钱包
        await owner.getAddress()
提示:安装Builder将安装一些以太坊JavaScript依赖项,因此请耐性期待。
编写合约
在本教程中,我们将指导你完成以下操纵:
## 下一步需要构建当地依赖项。
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.2/install.sh | bash
3. 建设新的 Buidler 工程
你需要像以前一样遵循安装说明[19],但选择其他版本。你可以在此处[20]查抄所有可用版本的列表。
    ✓ Deployment should assign the total supply of tokens to the owner (654ms)
        await addr1.getAddress()
    expect(await buidlerToken.balanceOf(await addr1.getAddress())).to.equal(50);
编译合约
Buidler 架构
利用Buidler EVM通过console.log()调试Solidity
    // We can interact with the contract by calling `buidlerToken.method()`
      const addr2Balance = await buidlerToken.balanceOf(
      const finalOwnerBalance = await buidlerToken.balanceOf(
接待来到Buidler的初学者指南,看看如何基于Buidler举办合约和dApp开拓。
    it(“Should fail if sender doesn’t have enough tokens”, async function () {
});
npx buidler
nvm alias default 12
既然我们已经先容了测试合约所需的基本常识,一下是代币的完整测试用例,个中包括有关Mocha以及如何构组织测试的很多信息。我们发起你通读。
提示:在文本编辑器中添加相应的插件(搜索Solidity 或 Ethereum 插件)可以支持Solidity语法高亮,我们发起利用Visual Studio Code或Sublime Text 3。
## 这将需要一些时间,而且大概会下载几个G的数据。
    // A mapping is a key/value map. Here we store each account balance.
  // Mocha has four functions that let you hook into the the test runner’s
        // Check if the transaction sender has enough tokens.
在这里,我们再次利用Contract实例挪用Solidity代码中合约函数。totalSupply()返回代币的刊行量,我们查抄它是否便是ownerBalance。
    [owner, addr1, addr2, …addrs] = await ethers.getSigners();
 Welcome to Buidler v1.0.0 
     * 读取某账号的代币余额
    // Transfer 50 tokens from owner to addr1
    await buidlerToken.connect(addr1).transfer(await addr2.getAddress(), 50);
    mapping(address => uint256) balances;
Compiled 1 contract successfully
        balances[to] += amount;
  let addr2;
});
4. 编写和编译合约
npm install –global –production windows-build-tools
sudo apt install curl git
// `describe` receives the name of a section of your test suite, and a callback.
  let Token;
      ).to.be.revertedWith(“Not enough tokens”);
git clone https://github.com/nomiclabs/ethereum-hackathon-setup-checker.git
}
    const ownerBalance = await buidlerToken.balanceOf(owner.getAddress());
    /**
        // transaction will revert.
      expect(addr1Balance).to.equal(50);
      await buidlerToken.transfer(await addr2.getAddress(), 50);
  describe(“Transactions”, function () {
sudo apt install build-essential ## 构建东西,我们需要它来成立当地依赖
888 d88P Y88b 888 888 Y88b 888 888 Y8b.     888
      // This test expects the owner variable stored in the contract to be equal
在本教程中,我们将利用Ethers.js和Waffle插件。他们答允你与以太坊举办交互并测试合约。稍后我们将表明它们的用法。要安装它们,请在项目目次中运行:
大大都以太坊库和东西都是用JavaScript编写的,Buidler也是如此。假如你不熟悉Node.js,它是基于Chrome的V8 JavaScript引擎构建的JavaScript运行时。这是在网络欣赏器之外运行JavaScript的最受接待的办理方案,**Buidler **就是成立Node.js之上。
npm install –save-dev @nomiclabs/buidler
将高亮行添加到你的builder.config.js中,如下所示:
describe(“Transactions”, function () {
    });
nvm install 10
  Quit
  beforeEach(async function () {
  // A common pattern is to declare some variables, and assign them in the
     * 代币转账.
Linux
        buidlerToken.connect(addr1).transfer(await owner.getAddress(), 1)
将以下呼吁复制并粘贴到终端中:
const Token = await ethers.getContractFactory(“Token”);
// This is the main building block for smart contracts.
    const buidlerToken = await Token.deploy();
我们将建设一个简朴的智能合约,该合约实现可以转让的代币。代币合约最常用于互换或存储代价。在本教程中,我们将不深入接头合约的Solidity代码,可是我们实现一些逻辑你应该知道:
完整测试
❯ Create an empty buidler.config.js
      ✓ Should assign the total supply of tokens to the owner
2. 情况搭建
     *
      );
        // The totalSupply is assigned to transaction sender, which is the account
Linux
usePlugin(“@nomiclabs/buidler-waffle”);
      );
Compiling…
在安装Builder的目次下运行:
All contracts have already been compiled, skipping compilation.
    Token = await ethers.getContractFactory(“Token”);
      // Transfer 50 tokens from addr1 to addr2
提示:你可以建设本身的任务。请查察建设任务[22]指南。
$ npx buidler
        // that is deploying the contract.
Ubuntu
· 从 这里[13]下载node-v10.XX.XX-x64.msi
const buidlerToken = await Token.deploy();
    // An address type variable is used to store ethereum accounts.
    constructor() public {
     */
};
  // time. It receives a callback, which can be async.
假如碰着提示失败,则说明你的情况未正确配置。确保已经安装了git和Node.js >= 10.0。假如看到提到“ node-gyp”的错误,请确保安装了前面提到的构建东西。
module.exports = {
        require(balances[msg.sender] >= amount, “Not enough tokens”);
    /**
    expect(await buidlerToken.balanceOf(await addr2.getAddress())).to.equal(50);
// The callback must define the tests of that section. This callback can’t be
        await owner.getAddress()
   
        balances[msg.sender] = totalSupply;
        balances[msg.sender] -= amount;
  });
  // lifecyle. These are: `before`, `beforeEach`, `after`, `afterEach`.
      ✓ Should set the right owner
在MacOS上有多种安装Node.js的要领。我们将利用 Node 版本打点器(nvm)[11]。将以下呼吁复制并粘贴到终端中:
     * state, which allows us to call it without executing a transaction.
  Token contract
Windows
      await buidlerToken.connect(addr1).transfer(await addr2.getAddress(), 50);
      expect(await buidlerToken.balanceOf(await owner.getAddress())).to.equal(
为智能合约编写自动化测试至关重要,因为事关用户资金。为此,我们将利用Buidler EVM,这是一个内置的以太坊网络,专门为开拓而设计,而且是**Buidler **中的默认网络。你无需举办任何配置即可利用它。在我们的测试中,我们将利用ethers.js[24]与上一节中构建的以太坊合约举办交互,并利用 Mocha[25] 作为测试框架。
然后 以打点员身份打开终端[14] 并运行以下呼吁:
xcode-select –install
    await buidlerToken.transfer(await addr1.getAddress(), 50);
为此,我们利用Chai[27],这是一个断言库。这些断言函数称为“匹配器”,我们在此利用的实际上来自Waffle[28]。这就是为什么我们利用buidler-waffle插件,这使得从以太坊上断言值变得更容易。请查察Waffle文档中的此部门[29],相识以太坊特定匹配器的完整列表。
    expect(await buidlerToken.totalSupply()).to.equal(ownerBalance);
npm init –yes 
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash –
      expect(addr2Balance).to.equal(50);
Tasks(任务)
为以太坊开拓配置Node.js情况
· 代币有牢靠的刊行总量,而且总量是无法变动的。
ethers.js中的Signer是代表以太坊账户的工具。它用于将生意业务发送到合约和其他帐户。在这里,我们得到了所毗连节点中的帐户列表,在本例中节点为Buidler EVM,而且仅保存第一个帐户。
        return balances[account];
expect(await buidlerToken.totalSupply()).to.equal(ownerBalance);
  // `before` and `beforeEach` callbacks.
将合约陈设到Buidler EVM和以太坊测试网
我们在这里仅挪用builder-waffle,因为它依赖于builder-ethers,因此不需要同时添加两者。
        initialOwnerBalance
将下面的代码粘贴到文件中,花一点时间阅读代码。它很简朴,而且有许多表明Solidity基本语法[23]的注释。
ethers变量在全局浸染域下都可用。假如你但愿代码始终是明晰的,则可以在顶部添加以下行:
查抄情况
在运行Buidler时,它将从当前事情目次开始搜索最靠近的buidler.config.js文件。这个文件凡是位于项目标根目次下,一个空的buidler.config.js足以使Buidler正常事情。
? What do you want to do? …
    
      const addr1Balance = await buidlerToken.balanceOf(
    buidlerToken = await Token.deploy();
    it(“Should update balances after transfers”, async function () {
    }
    const buidlerToken = await Token.deploy();
5. 测试合约
    // tests. It receives the test name, and a callback function.
     *
    }
    function balanceOf(address account) external view returns (uint256) {
在ContractFactory上挪用deploy()将启动陈设,并返回理会为Contract的Promise。该工具包括了智能合约所有函数的要领。
安装 Node.js
      // Try to send 1 token from addr1 (0 tokens) to owner (1000 tokens).
sudo apt update
npm install -g node-gyp ## Make sure we have node-gyp installed
const { expect } = require(“chai”);
    function transfer(address to, uint256 amount) external {
    await buidlerToken.deployed();
      expect(await buidlerToken.totalSupply()).to.equal(ownerBalance);
$ npx buidler compile
· 任何人都可以吸收代币。
    const Token = await ethers.getContractFactory(“Token”);
利用差异的账号
// easier. All Mocha functions are available in the global scope.
$ npx buidler test
确保你已安装git。不然,请遵循这些说明[10]安装。
// Solidity files have to start with this pragma.
    }
· 拥有至少一个代币的任何人都可以转让代币。
        // If `require`’s first argument evaluates to `false` then the
  let addr1;
     *
888  888 888  888 888 888  888 888 88888888 888
     * the contract.
// `describe` is a Mocha function that allows you to organize your tests. It’s

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。