_section: Fragments  @<fragments>

Explain an ABI.

_subsection: Formats

_heading: JSON String ABI (Solidity Output JSON)

The **JSON ABI Format** is the format that is
[output from the Solidity compiler](link-solc-output).

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.

_heading: Humanb-Readable ABI

The Human-Readable ABI was @TODO

[article](link-ricmoo-humanreadableabi)


_heading: Output Formats @<fragments--output-formats> @SRC<abi/fragments:FormatTypes>

Each [[Fragment]] and [[ParamType]] may be output using its ``format``
method.

_property: ethers.utils.FragmentTypes.full => string

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.

_property: ethers.utils.FragmentTypes.minimal => string

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&thinsp;.&thinsp;from](Fragment-from).

_property: ethers.utils.FragmentTypes.json => string

This returns a JavaScript Object which is safe to call ``JSON.stringify``
on to create a JSON string.

_property: ethers.utils.FragmentTypes.sighash => string

This is a minimal output format, which is used by Solidity when computing a
signature hash or an event topic hash.

_warning: Note

The ``sighash`` format is **insufficient** to re-create the original [[Fragment]],
since it discards modifiers such as indexed, anonymous, stateMutability, etc.


_subsection: Fragment @<Fragment> @SRC<abi/fragments:class.Fragment>

An ABI is a collection of **Fragments**, where each fragment specifies:

- An [Event](EventFragment)
- A [Function](FunctionFragment)
- A [Constructor](ConstructorFragment)

_heading: Properties

_property: fragment.name => string

This is the name of the Event or Function. This will be null for
a [[ConstructorFragment]].

_property: fragment.type => string

This is a string which indicates the type of the [[Fragment]]. This
will be one of:

- ``constructor``
- ``event``
- ``function``

_property: fragment.inputs => Array<[[ParamType]]>

This is an array of each [[ParamType]] for the input parameters to
the Constructor, Event of Function.

_heading: Methods

_property: ethers.utils.Fragment.from(objectOrString) => [[Fragment]] @<Fragment-from> @SRC<abi/fragments:Fragment.from>

Returns a 

_property: ethers.utils.Fragment.isFragment(object) => boolean @<Fragment-isFragment> @SRC<abi/fragments:Fragment.isFragment>

Tra lal al


_subsection: ConstructorFragment @<ConstructorFragment> @INHERIT<[[Fragment]]> @SRC<abi/fragments:class.ConstructorFragment>

_heading: Properties

_property: fragment.gas => [[BigNumber]]

This is the gas limit that should be used during deployment. It may be
null.

_property: fragment.payable => boolean

This is whether the constructor may receive ether during deployment as
an endowment (i.e. msg.value != 0).

_property: fragment.stateMutability => string

This is the state mutability of the constructor. It can be any of:

- ``nonpayable``
- ``payable``

_heading: Methods

_property: ethers.utils.ConstructorFragment.from(objectOrString) => [[ConstructorFragment]] @<ConstructorFragment-from> @SRC<abi/fragments:ConstructorFragment.from>

Tra la la...

_property: ethers.utils.ConstructorFragment.isConstructorFragment(object) => boolean @<ConstructorFragment-isConstructorFragment> @SRC<abi/fragments:ConstructorFragment.isConstructorFragment>

Tra lal al


_subsection: EventFragment @<EventFragment> @INHERIT<[[Fragment]]> @SRC<abi/fragments:class.EventFragment>

_heading: Properties

_property: fragment.anonymous => boolean

This is whether the event is anonymous. An anonymous Event does not inject its
topic hash as topic0 when creating a log.

_heading: Methods

_property: ethers.utils.EventFragment.from(objectOrString) => [[EventFragment]] @<EventFragment-from> @SRC<abi/fragments:EventFragment.from>

Tra la la...

_property: ethers.utils.EventFragment.isEventFragment(object) => boolean @<EventFragment-isEventFragment> @SRC<abi/fragments:EventFragment.isEventFragment>

Tra lal al


_subsection: FunctionFragment @<FunctionFragment> @INHERIT<[[ConstructorFragment]]> @SRC<abi/fragments:class.FunctionFragment>

_heading: Properties

_property: fragment.constant => boolean

This is whether the function is constant (i.e. does not change state). This
is true if the state mutability is ``pure`` or ``view``.

_property: fragment.stateMutability => string

This is the state mutability of the constructor. It can be any of:

- ``nonpayable``
- ``payable``
- ``pure``
- ``view``

_property: fragment.outputs => Array<[[ParamType]]>

A list of the Function output parameters.

_heading: Method

_property: ethers.utils.FunctionFragment.from(objectOrString) => [[FunctionFragment]] @<FunctionFragment-from> @SRC<abi/fragments:ConstructorFragment.from>

Tra la la...

_property: ethers.utils.FunctionFragment.isFunctionFragment(object) => boolean @<FunctionFragment-isFunctionFragment> @SRC<abi/fragments:FunctionFragment.isFunctionFragment>

Tra lal al


_subsection: ParamType @<ParamType> @SRC<abi/fragments:class.ParamType>

The following examples will represent the Solidity parameter:

``string foobar``

_heading: Properties

_property: paramType.name => string @<ParamType-name>

The local parameter name. This may be null for unnamed parameters. For example,
the parameter definition ``string foobar`` would be ``foobar``.

_property: paramType.type => string @<ParamType-type>

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``.

_property: paramType.baseType => string @<ParamType-baseType>

The base type of the parameter. For primitive types (e.g. ``address``, ``uint256``, etc)
this is equal to [type](ParamType-type). For arrays, it will be the string ``array`` and for
a tuple, it will be the string ``tuple``.

_property: paramType.indexed => boolean @<ParamType-indexed>

Whether the parameter has been marked as indexed. This **only** applies
to parameters which are part of an [[EventFragment]].

_property: paramType.arrayChildren => [[ParamType]] @<ParamType-arrayChildren>

The type of children of the array. This is null for any parameter
which is not an array.

_property: paramType.arrayLength => number @<ParamType-arrayLength>

The length of the array, or ``-1`` for dynamic-length arrays. This is
null for parameters which are not arrays.

_property: paramType.components => Array<[[ParamType]]> @<ParamType-components>

The components of a tuple. This is null for non-tuple parameters.


_heading: Methods

Tra la la...

_property: paramType.format([ outputType = sighash ])

Tra la la...

_property: ethers.utils.ParamType.from(objectOrString) => [[ParamType]] @<ParamType-from> @SRC<abi/fragments:ParamType.from>

Tra la la...

_property: ethers.utils.ParamType.isParamType(object) => boolean @<ParamType-isParamType> @SRC<abi/fragments:ParamType.isParamType>

Tra la la...
