区块链——使用ether.js在ganache上部署合约

一、安装ganache

地址:ganache地址

二、配置ganache,因为我使用了WSL,用了ubontu虚拟机,所以我的网络需要设置以下

在这里插入图片描述

三、根据ganache的配置编写代码

在这里插入图片描述

const {
    
     ethers } = require("ethers");
const fs = require("fs-extra");
// 引入环境变量工具
const dotenv = require("dotenv");
// 加载到process
dotenv.config();

async function main() {
    
    
  // 获取网络服务商
  const provider = new ethers.providers.JsonRpcProvider(process.env.RPC_SERVER);
  // 获取钱包,需要私钥和provider
  const wallet = new ethers.Wallet(process.env.PRIMARY_KEY, provider);
  // 读取abi文件
  const abi = fs.readFileSync(
    "./solc/SimpleStorage_sol_SimpleStorage.abi",
    "utf8"
  );
  // 读取二进制文件
  const binary = fs.readFileSync(
    "./solc/SimpleStorage_sol_SimpleStorage.bin",
    "utf8"
  );
  // 合约工厂,需要参数abi信息、合约二进制数据、钱包
  const contractFactory = new ethers.ContractFactory(abi, binary, wallet);
  console.log("Deploying, please wait...");
  // 部署合约
  const contract = await contractFactory.deploy();
  // 合约部署之后,我们可以等待该交易后面确认了一个区块,这就是交易回执
  await contract.deployTransaction.wait(1);

  // 另一种部署合约的方式
  // 获取交易的数量,也就是正确的nonce
  // const nonce = await wallet.getTransactionCount();
  // 我们自己构建交易的明细
  // const tx = {
    
    
  //   nonce: nonce,
  //   gasPrice: 20000000000,
  //   gasLimit: 1000000,
  //   to: null,
  //   value: 0,
  //   data: "0x" + binary,
  //   chainId: 1337,
  // };
  // const sendTxResponse = await wallet.sendTransaction(tx);
  // await sendTxResponse.wait(1);
  // console.log(sendTxResponse);

  // 上面这种方式无法获取合约对象,所以我们注释掉,拿到合约对象,我们就可以合约的方法了
  // 获取最爱的数字
  let favorateNumber = await contract.retrieve();
  console.log(`最爱的数字为:${
      
      favorateNumber.toString()}`);
  // 设置最爱的数字
  const updateFavoriteResponse = await contract.store("520");
  await updateFavoriteResponse.wait(1);
  favorateNumber = await contract.retrieve();
  console.log(`最爱的数字为:${
      
      favorateNumber.toString()}`);
}

main();

使用node ./deploy.js即可

猜你喜欢

转载自blog.csdn.net/weixin_42789698/article/details/140726270