工具学习

俗话说:“工欲善其事,必先利其器”,在进入实际编码阶段我们先来了解两个有用的工具,Remix 和 Hardhat。

Remix

Remix 是一款开发以太坊智能合约的 IDE,它可帮助开发者直接在浏览器中编写 Solidity 代码,并且提供用于测试、调试和将智能合约部署到区块链的工具。

也提供桌面版

创建 Hello Remix

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

contract Hello{
    
  string text;

  constructor(){
    text = "Hello Remix";
  }

  function say() public view returns (string memory) {
    return text;
  }
}

编译与部署

左侧菜单栏从上至下分别是:工程目录,编译,部署,Debug,插件和设置;

点击第二个菜单,这里是编译器选项(Remix 默认保存即自动变易),可在此处手动编译,COMPILE 可以选择编译器的版本;

注意 LANGUAGE 也列出了另外一种语言,它可用于中间编译,比 Solidity 更接近硬件。

编译成功后,点击第三个菜单,我们可以将合约发布到测试网或本地网络,ENVIRONMENT 有四个选项,大部分情况下默认即可。需要注意的是 Remix 附带了一个 JS VM,这是浏览器中以太坊 EVM 的模拟器,只要你的合约不依赖真实网络中另一个合约,这里可以快速的测试和调试合约。

如果你想将合约部署到真实的网络,比如 rinkeby 测试网络,首先你需要在 metamask 上将网络选择为 rinkeby,然后在 ENVIRONMENT 中选择 Injected Web3 并连接钱包,最后点击 Deploy 来部署合约。

接下来,你可以在下方点击 say 函数来进行测试。

如果你需要 DEBUG ,那么合约需要在 JS VM 中部署,然后在控制台的信息中点击 debug 开启此功能。

Hardhat

Hardhat 是一个用于编译、部署、测试和调试以太坊软件的开发环境,大多数情况我都只使用 Hardhat。

建议安装 Hardhat VSCode Plugin

它帮助开发人员管理和自动化构建智能合约和 dApp 过程中固有的重复性任务,以及围绕此工作流程轻松引入更多功能。这意味着编译、运行和测试最核心的智能合约。 Hardhat内置了安全帽网络,这是一个专为开发而设计的本地以太坊网络。它的功能侧重于 Solidity 调试,具有堆栈跟踪、console.log() 和事务失败时的显式错误消息。

它与 Remix 相比更有开发的氛围,因为你需要通过代码来编写部署的脚本,需要命令来启动编译,部署,测试等环节,这个工具更易在工程流水线中进行集成。

它的命令不多,主要有四个:

  • hardhat node 在本地启动一个节点
  • hardhat compile 编译
  • hardhat run 运行脚本
  • hardhat test 运行测试

hardhat.config.js 文件是 hardhat 的灵魂核心

module.exports = {
  solidity: "0.8.4",
  networks: {
    rinkeby: {
      url: "网络",
      accounts: ["私钥"],
    },
    mumbai: {
      url: "网络",
      accounts: ["私钥"]
    }
  },
  etherscan: {
    apiKey: {
      polygonMumbai: "API-KEY"
    }
  }
};

上述相当于是配置了多个网络,一般来说我们将部署脚本编写在 scripts 目录中,多数都起名叫 deploy.js,因此如果我们要将合约部署到 rinkeby 测试网络,只需运行如下命令:

$ hardhat run scripts/deploy.js --network rinkeby

至于部署脚本,用例都非常简单:

const hre = require('hardhat');

async function deploy(){
  const HelloContractFactory = await hre.ethers.getContractFactory('Hello');
  const helloContract = await HelloContractFactory.deploy(1000);
  await helloContract.deployed();
  console.log('deploy address', helloContract.address);
}

deploy()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

更深入详细的用例,请阅读和学习 Hardhat 文档。

Subscribe to icepy
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.