Javascript
如何從 solc.compile 獲取 ABI?(^0.6.4)
在 pragma solidity ^0.6.4;
我寫了一個合約,可以得到如下字節碼:
const solc = require("solc"); const path = require("path"); const fs = require("fs"); const inboxPath = path.resolve(__dirname, "contracts", "Inbox.sol"); const source = fs.readFileSync(inboxPath, "utf8"); var input = { language: "Solidity", sources: { "test.sol": { content: source } }, settings: { outputSelection: { "*": { "*": ["*"] } } } }; var output = JSON.parse(solc.compile(JSON.stringify(input))); for (var contractName in output.contracts["test.sol"]) { console.log( contractName + ": " + output.contracts["test.sol"][contractName].evm.bytecode.object ); }
此程式碼返回字節碼,但我不知道如何訪問 ABI 程式碼。
您在這裡所做的只是從 JSON 映射中獲取“字節碼”。
輸出.契約
$$ “test.sol” $$$$ contractName $$.evm.bytecode.object
上面的程式碼片段進入:contracts -> .sol file -> file_name object -> evm -> bytecode
如果您仔細查看此 console.log:
console.log(output.contracts["test.sol"]["test"]);
你會注意到它包含 1)abi 2)devdoc 3)evm 並且在 evm 裡面有彙編程式碼和其他東西。
如果你想獲取 abi,你需要做的就是:
console.log(output.contracts["test.sol"]["test"].abi);
這將為您提供如下結果:
[ { inputs: [ [Object], [Object], [Object], [Object] ], name: 'addAdminData', outputs: [], stateMutability: 'nonpayable', type: 'function' }, { inputs: [ [Object], [Object], [Object], [Object], [Object], [Object] ], name: 'addUserData', outputs: [], stateMutability: 'nonpayable', type: 'function' }, { inputs: [ [Object], [Object], [Object], [Object] ], name: 'addVendorData', outputs: [], stateMutability: 'nonpayable', type: 'function' } ]
這就是你的 ABI。
如果你想要字節碼,你可以使用:
console.log(output.contracts["test.sol"]["test"]["evm"].bytecode);