Explain an ABI.
The JSON ABI Format is the format that is output from the Solidity compiler.
A JSON serialized object is always a string, which represents an Array of Objects, where each Object has various properties describing the Fragment of the ABI.
The deserialized JSON string (which is a normal JavaScript Object) may also be passed into any function which accepts a JSON String ABI.
The Human-Readable ABI was introduced by ethers in this article and has since gained wider adoption.
The ABI is described by using an array of strings, where each string is the Solidity signature of the constructor, function, event or error.
When parsing a fragment, all inferred properties will be injected (e.g. a payable method will have its constant
proeprty set to false).
Tuples can be specified by using the tuple(...)
syntax or with bare (additional) parenthesis, (...)
.
Output Formats
Each Fragment and ParamType may be output using its format
method.
This is a full human-readable string, including all parameter names, any optional modifiers (e.g. indexed
, public
, etc) and white-space to aid in human readability.
This is similar to full
, except with no unnecessary whitespace or parameter names. This is useful for storing a minimal string which can still fully reconstruct the original Fragment using Fragment . from.
This returns a JavaScript Object which is safe to call JSON.stringify
on to create a JSON string.
This is a minimal output format, which is used by Solidity when computing a signature hash or an event topic hash.
The sighash
format is insufficient to re-create the original Fragment, since it discards modifiers such as indexed, anonymous, stateMutability, etc.
It is only useful for computing the selector for a Fragment, and cannot be used to format an Interface.
Fragment
An ABI is a collection of Fragments, where each fragment specifies:
- An Error
- An Event
- A Function
- A Constructor
This is the name of the Event or Function. This will be null for a ConstructorFragment.
This is a string which indicates the type of the Fragment. This will be one of:
constructor
event
function
This is an array of each ParamType for the input parameters to the Constructor, Event of Function.
Creates a string representation of the Fragment using the available output formats.
Creates a new Fragment sub-class from any compatible objectOrString.
Returns true if object is a Fragment.
This is the gas limit that should be used during deployment. It may be null.
This is whether the constructor may receive ether during deployment as an endowment (i.e. msg.value != 0).
This is the state mutability of the constructor. It can be any of:
nonpayable
payable
Creates a new ConstructorFragment from any compatible objectOrString.
Returns true if object is a ConstructorFragment.
Creates a new ErrorFragment from any compatible objectOrString.
Returns true if object is an ErrorFragment.
This is whether the event is anonymous. An anonymous Event does not inject its topic hash as topic0 when creating a log.
Creates a new EventFragment from any compatible objectOrString.
Returns true if object is an EventFragment.
FunctionFragment inherits ConstructorFragment
This is whether the function is constant (i.e. does not change state). This is true if the state mutability is pure
or view
.
This is the state mutability of the constructor. It can be any of:
nonpayable
payable
pure
view
A list of the Function output parameters.
Creates a new FunctionFragment from any compatible objectOrString.
Returns true if object is a FunctionFragment.
ParamType
The following examples will represent the Solidity parameter:
string foobar
The local parameter name. This may be null for unnamed parameters. For example, the parameter definition string foobar
would be foobar
.
The full type of the parameter, including tuple and array symbols. This may be null for unnamed parameters. For the above example, this would be foobar
.
The base type of the parameter. For primitive types (e.g. address
, uint256
, etc) this is equal to type. For arrays, it will be the string array
and for a tuple, it will be the string tuple
.
Whether the parameter has been marked as indexed. This only applies to parameters which are part of an EventFragment.
The type of children of the array. This is null for any parameter which is not an array.
The length of the array, or -1
for dynamic-length arrays. This is null for parameters which are not arrays.
The components of a tuple. This is null for non-tuple parameters.
Creates a string representation of the Fragment using the available output formats.
Creates a new ParamType from any compatible objectOrString.
Returns true if object is a ParamType.