一、安装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即可