区块链——使用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即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值