首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在安全帽中使用以太得到已部署合同的ABI?

如何在安全帽中使用以太得到已部署合同的ABI?
EN

Ethereum用户
提问于 2022-07-08 08:53:34
回答 4查看 8.2K关注 0票数 5

我必须用json格式的部署最新ABI更新我的前端文件。我在部署脚本中使用以下代码(在部署原始智能契约之后运行)

代码语言:javascript
复制
import { DeployFunction } from "hardhat-deploy/types";
import { HardhatRuntimeEnvironment } from "hardhat/types";
import fs from "fs";


const updateUI: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
    const { network, ethers } = hre;
    
    console.log("Writing to front end...");
    
    //Updating ABI on front end JSON file
    const frontEndAbiFile = "path/to/store/abi.json";
    const fundme = await ethers.getContract("FundMe"); //already deployed contract on hardhat/rinkeby
    //I want to get the ABI here so that I can write and save it to frontEndAbiFile location.
    fs.writeFileSync(frontEndAbiFile, 'How shoud I get ABI in json?' );
    
};

export default updateUI;

我怎样才能得到json格式的FundMe合同中的ABI?请阅读我以上代码中的评论。注意:我使用的是TypeScript。

EN

回答 4

Ethereum用户

发布于 2022-07-31 07:40:06

如果您是通过命令行进行部署,则可以从以前构建的文件中读取,在“硬帽子”的情况下,有一个示例:

代码语言:javascript
复制
const fs = require("fs")
const path = require("path")

const getTheAbi = () => {
  try {
    const dir = path.resolve(
      __dirname,
      "./artifacts/contracts/HelloWorld.sol/HelloWorld.json"
    )
    const file = fs.readFileSync(dir, "utf8")
    const json = JSON.parse(file)
    const abi = json.abi
    console.log(`abi`, abi)

    return abi
  } catch (e) {
    console.log(`e`, e)
  }
}
票数 3
EN

Ethereum用户

发布于 2022-09-14 11:04:07

可以跳过ABI直接获得合同实例:

代码语言:javascript
复制
const contractInstance = await ethers.getContractAt("contracts/XYZ.sol:ContractName", contractAddress);
票数 2
EN

Ethereum用户

发布于 2022-11-24 12:34:17

代码语言:javascript
复制
fs.writeFileSync(
    frontEndAbiFile,

    fundme.interface.format(ethers.utils.FormatTypes.json)
)

部署时,这将更新前端文件。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/131400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档