怎么獲得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
文件。需要的話請告訴我。