Generate Solidity interface
source from a given ABI JSON!
Skip the terminal and just use the hosted Web UI.
No need to install - just use npx (e.g.
npx abi-to-sol
).
Alternatively, install globally via:
$ npm install -g abi-to-sol
Pipe ABI JSON to stdin, get Solidity on stdout.
abi-to-sol [--solidity-version=<solidityVersion>] [--license=<license>] [--validate] [<name>]
abi-to-sol -h | --help
abi-to-sol --version
Options:
<name>
Name of generated interface. Default: MyInterface
--validate
Validate JSON before starting
-V --solidity-version
Version of Solidity (for pragma). Default: >=0.7.0 <0.9.0
-L --license
SPDX license identifier. default: UNLICENSED
-h --help Show this screen.
--version Show version.
Run the following command:
$ echo '[{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"label","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setSubnodeOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"ttl","type":"uint64"}],"name":"setTTL","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"ttl","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"resolver","type":"address"}],"name":"setResolver","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":true,"name":"label","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"NewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"resolver","type":"address"}],"name":"NewResolver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"ttl","type":"uint64"}],"name":"NewTTL","type":"event"}]' \
| npx abi-to-sol ENS
Get this output:
// SPDX-License-Identifier: UNLICENSED
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol. SEE BELOW FOR SOURCE. !!
pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;
interface ENS {
function resolver(bytes32 node) external view returns (address);
function owner(bytes32 node) external view returns (address);
function setSubnodeOwner(
bytes32 node,
bytes32 label,
address owner
) external;
function setTTL(bytes32 node, uint64 ttl) external;
function ttl(bytes32 node) external view returns (uint64);
function setResolver(bytes32 node, address resolver) external;
function setOwner(bytes32 node, address owner) external;
event Transfer(bytes32 indexed node, address owner);
event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);
event NewResolver(bytes32 indexed node, address resolver);
event NewTTL(bytes32 indexed node, uint64 ttl);
}
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/* ... */
- Detect
internalType
forenum
s and emit stub declaration. - Detect
internalType
for function pointers (parameter typefunction
) and emit parameter.