Skip to content

Generate Solidity interface from ABI JSON

License

Notifications You must be signed in to change notification settings

programeth/abi-to-sol

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

abi-to-sol

npm version

Generate Solidity interface source from a given ABI JSON!

Installation

No need to install - just use npx (e.g. npx abi-to-sol).

Alternatively, install globally via:

$ npm install -g abi-to-sol

Usage

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

--validate
  Validate JSON before starting

-V --solidity-version
  Version of Solidity (for pragma)

-L --license
  SPDX license identifier. default: UNLICENSED

-h --help     Show this screen.
--version     Show version.

Example

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:
/* ... */

Currently unsupported (PRs welcome! 😉)

  • Detect internalType for enums and emit stub declaration.
  • Detect internalType for function pointers (parameter type function) and emit parameter.
  • Omit pragma experimental ABIEncoderV2; when it's not necessary
  • Anonymous events (waiting on prettier-solidity/prettier-plugin-solidity#350)

About

Generate Solidity interface from ABI JSON

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 94.1%
  • JavaScript 5.9%