怎么获得ABI?
在编译完合约后,可以在左边下面点击复制ABI
ABI(Application Binary Interface,应用二进制接口)是用来让前端或服务端 JavaScript 代码与智能合约进行交互的桥梁,它描述了合约的函数、事件和结构信息。
🔍 简单理解 ABI 的作用:
你可以把 ABI 想成“说明书”或“函数清单”,它告诉你:
-
合约有哪些方法(比如
mint
,ownerOf
,balanceOf
); -
每个方法需要哪些参数,返回什么;
-
哪些是
view
函数(不花费 gas),哪些是transaction
函数(会消耗 gas); -
有没有事件(event),事件结构是怎样的。
📦 示例 ABI(JSON 格式):
[{"inputs": [{"internalType": "string","name": "tokenURI","type": "string"}],"name": "mint","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "owner","type": "address"}],"name": "tokensOfOwner","outputs": [{"internalType": "uint256[]","name": "","type": "uint256[]"}],"stateMutability": "view","type": "function"}
]
🛠 ABI 的用途
你在 NestJS 或前端项目中这样使用:
import { ethers } from 'ethers';
import SimpleNFTABI from './SimpleNFT.abi.json';const contract = new ethers.Contract(contractAddress, SimpleNFTABI, signerOrProvider);
你能用 contract.mint(...)
、contract.tokensOfOwner(...)
就是因为 ABI
里定义了这些函数。
✅ 怎么获取 ABI?
在你用 Hardhat / Foundry / Remix / Truffle 编译完合约后,可以在这些路径找到 ABI:
🔹 Hardhat:
artifacts/contracts/SimpleNFT.sol/SimpleNFT.json
打开里面,你会看到一段很长的 JSON,其中包含:
-
abi
-
bytecode
-
metadata
你只需要复制 abi
部分即可。
📝 总结一句话:
ABI 是连接你写的智能合约和外部应用(前端 / 后端)的“函数说明书”,编译合约后拷贝
abi
部分,就能让程序识别你合约有哪些功能,怎么调用。
如果你想,我可以帮你提取你合约对应的 ABI JSON,并打包成一个 SimpleNFT.abi.json
文件。需要的话请告诉我。