@truffle/codec
Version:
Library for encoding and decoding smart contract data
307 lines • 37.2 kB
HTML
<html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Format | Truffle Decoding and Encoding</title><meta name="description" content="Documentation for Truffle Decoding and Encoding"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">Truffle Decoding and Encoding</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../index.html">Truffle Decoding and Encoding</a></li>
<li><a href="_truffle_codec.html">@truffle/codec</a></li>
<li><a href="_truffle_codec.Format.html">Format</a></li></ul>
<h1>Namespace Format</h1></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><a id="md:codec-output-format" class="tsd-anchor"></a><h1><a href="#md:codec-output-format">Codec Output Format</a></h1><a id="md:module-information" class="tsd-anchor"></a><h2><a href="#md:module-information">Module information</a></h2><p>This module primarily defines TypeScript types for the output format
used in results provided by packages
<code>@truffle/decoder@>=4.0.0</code> and <code>@truffle/codec@>=0.1.0</code>.</p>
<p>See below for complete listing or continue reading
<a href="#format-information">Format information</a> to learn about this format.</p>
<a id="md:how-to-import" class="tsd-anchor"></a><h3><a href="#md:how-to-import">How to import</a></h3><p>Import either as part of Codec or by itself:</p>
<pre><code class="language-typescript"><span class="hl-0">// when importing entire Codec, use Codec.Format.*:</span><br/><span class="hl-1">import</span><span class="hl-2"> </span><span class="hl-3">*</span><span class="hl-2"> </span><span class="hl-1">as</span><span class="hl-2"> </span><span class="hl-4">Codec</span><span class="hl-2"> </span><span class="hl-1">from</span><span class="hl-2"> </span><span class="hl-5">"@truffle/codec"</span><span class="hl-2">;</span><br/><br/><span class="hl-0">// or import Format directly:</span><br/><span class="hl-1">import</span><span class="hl-2"> { </span><span class="hl-4">Format</span><span class="hl-2"> } </span><span class="hl-1">from</span><span class="hl-2"> </span><span class="hl-5">"@truffle/codec"</span><span class="hl-2">;</span>
</code><button>Copy</button></pre>
<p><img src="../media/example-struct-decoding.png" alt="Example struct decoding"></p>
<a id="md:format-information" class="tsd-anchor"></a><h2><a href="#md:format-information">Format information</a></h2><p>This format is intended for use in smart contract and dapp development
tools and libraries, and for use in display contexts, such as when
building on-screen components to show transaction and smart contract
state information.</p>
<p>This format seeks to provide an exhaustive schema for JavaScript
objects to encode <strong>lossless</strong>, <strong>machine-readable</strong> representations of
all possible Solidity and ABI data types and all possible values of those
types.</p>
<p>This format targets types and values understood by the
<a href="https://docs.soliditylang.org/">Solidity programming language</a> and
the <a href="https://docs.soliditylang.org/en/v0.8.19/abi-spec.html">Contract ABI specification</a>,
within the context of the <a href="https://ethereum.github.io/yellowpaper/paper.pdf">Ethereum Virtual Machine</a>
(EVM) and in raw data for transactions and logs according to the
<a href="https://github.com/ethereum/wiki/wiki/JSON-RPC">Ethereum JSON RPC</a>.</p>
<p>Objects in this format may be deeply nested and/or contain circular
dependencies. As such, <strong>do not</strong> serialize objects in this format or
otherwise attempt to display them in full without considering potential
risk. <strong>Objects in this format are for the machine to read, not humans!</strong>
This module provides utilities for inspecting objects in this format,
including the <strong>safe</strong> [[Format.Utils.Inspect.ResultInspector]] wrapper
(for <a href="https://nodejs.org/api/util.html#util_util_inspect_object_options">util.inspect</a>),
and the <strong>unsafe</strong> [[Format.Utils.Inspect.unsafeNativize]] function. For more
information, please see the documentation for those utilities.</p>
<a id="md:specification" class="tsd-anchor"></a><h3><a href="#md:specification">Specification</a></h3><p>Individual decoded values are represented by objects of the type
[[Format.Values.Result]], which contain the following fields:</p>
<ol>
<li><p><code>type</code>: This is a [[Format.Types.Type|<code>Type</code>]] object describing the value's
type. Each <code>Type</code> has a <code>typeClass</code> field describing the overall broad type,
such as <code>"uint"</code> or <code>"bytes"</code>, together with additional information that gives
the specific type. For full detail, see [[Format.Types]].</p>
</li>
<li><p><code>kind</code>: This is either <code>"value"</code>, in which case the <code>Result</code> is a
[[Format.Values.Value|<code>Value</code>]], or <code>"error"</code>, in which case the <code>Result</code> is an
[[Format.Errors.ErrorResult|<code>ErrorResult</code>]]. In the former case, there will be
a <code>value</code> field containin the decoded value. In the latter case, there will be
an <code>error</code> field indicating what went wrong. <em>Warning</em>: When decoding a
complex type, such as an array, mapping, or array, getting a kind of <code>"value"</code>
does not necessarily mean the individual elements were decoded successfully.
Even if the <code>Result</code> for the array (mapping, struct) as a whole has kind
<code>"value"</code>, the elements might still have kind <code>"error"</code>.</p>
</li>
<li><p><code>value</code>: As mentioned, this is included when <code>kind</code> is equal to <code>"value"</code>.
It contains information about the actual decoded value. See
[[Format.Values|<code>Format.Values</code>]] for more information.</p>
</li>
<li><p><code>error</code>: The alternative to <code>value</code>. Generally includes information about
the raw data that led to the error. See [[Format.Errors|<code>Format.Errors</code>]] for
more information.</p>
</li>
<li><p><code>interpretations</code>: This field will also be present when <code>kind</code> is equal
to <code>"value"</code>; it is an object that may contain additional information
about the decoded value beyond what is found in <code>value</code>. (All fields in
<code>interpretations</code> are always optional and will be included only when
applicable.) You may wonder, what is the difference between <code>value</code>
and <code>interpretations</code>? The answer is that the distinction is largely
historical; <code>interpretations</code> was not originally part of the format, and
it was added so that there would be a place to put new additional
information we wanted to include without having to expand <code>value</code>. See
[[Format.Values|<code>Format.Values</code>]] for more information.</p>
</li>
<li><p><code>reference</code>: This field is a debugger-only feature and does not
apply to results returned by @truffle/decoder, so it won't be documented here.</p>
</li>
</ol>
<a id="md:values-vs-errors" class="tsd-anchor"></a><h3><a href="#md:values-vs-errors">Values vs. errors</a></h3><p>It's worth taking a moment here to answer the question: What counts as a value,
and what counts as an error?</p>
<p>In general, the answer is that anything that can be generated via Solidity
alone (i.e. no assembly), with correctly-encoded inputs, and without making use
of compiler bugs, is a value, not an error. That means that, for instance, the
following things are values, not errors:</p>
<ul>
<li>A variable of contract type whose address does not actually hold a
contract of that type;</li>
<li>An external function pointer that does not correspond to a valid
function;</li>
<li>A string containing invalid UTF-8;</li>
<li>..., etc.</li>
</ul>
<p>By contrast, the following <em>are</em> errors:</p>
<ul>
<li>A <code>bool</code> which is neither <code>false</code> (0) nor <code>true</code> (1);</li>
<li>An <code>enum</code> which is out of range;</li>
<li>..., etc.</li>
</ul>
<p>(You may be wondering about the enum case here, because if you go sufficiently
far back, to Solidity 0.4.4 or earlier, it <em>was</em> possible to generate
out-of-range enums without resorting to assembly or compiler bugs. However,
enums are only supported in full mode (see
<a href="../#decoding-modes">Notes on decoding modes</a>),
which only supports 0.4.12 and later, so
we consider out-of-range enums an error. There are also additional technical
reasons why supporting out-of-range enums as a value would be difficult.)</p>
<p>There are three special cases here that are likely worthy of note.</p>
<p>Firstly, internal function pointers currently can't be meaningfully
decoded via @truffle/decoder. However, they decode to a bare-bones value,
not an error, as it is (in a sense) our own fault that we can't decode
these, so it doesn't make sense to report an error, which would mean that
something is wrong with the encoded data itself. This value that it
decodes to will give the program counter values it corresponds to, but
will not include the function name or defining class, as @truffle/decoder
is not presently capable of that. For now, full decoding of internal
function pointers remains a debugger-only feature. (But limited support for
this via @truffle/decoder is planned for the future.)</p>
<p>(When using the debugger, an invalid internal function pointer will decode to an
error. However, when using @truffle/decoder, we have no way of discerning whether
the pointer is valid or not, so internal function pointers will always decode to
a value, if an uninformative one.)</p>
<p>Secondly, when decoding events, it is impossible to decode indexed parameters
of reference type. Thus, these decode to an error
(<code>IndexedReferenceTypeError</code>, which see) rather than to a value.</p>
<p>Thirdly, the decoder is currently limited when it comes to decoding state
variables that are declared constant, and not all such variables are yet
supported in decoding; attempting to decode one of these that is not currently
supported will yield an error.</p>
<p>Similarly, there are various things that decode to errors for technical reasons.
Objects with encoded length fields larger than what fits in a JavaScript safe
integer, or pointed to by pointers with values larger than what fits in a
JavaScript safe integer, will decode to errors, even if they may technically be
legal. Such cases are impractical to handle and should never come up in real
use so we decode them to errors. Errors may also be returned in case of an
error in attempting to read the data to be decoded.</p>
<p>Finally, except when decoding events, we do not return an error if the pointers
in an ABI-encoded array or tuple are arranged in a nonstandard way, or if
strings or bytestrings are incorrectly padded, because it is not worth the
trouble to detect these conditions.</p>
<a id="md:notes-on-this-documentation" class="tsd-anchor"></a><h2><a href="#md:notes-on-this-documentation">Notes on this documentation</a></h2><p>Most of this doesn't have explanatory documentation
because it's largely self-explanatory, but particularly
non-obvious parts have been documented for clarity.</p>
<p>A note on optional fields: A number of types or values
have optional fields. These contain helpful
but non-essential information, or information which
for technical reasons we can't guarantee we can determine.</p>
</div>
<div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/trufflesuite/truffle/blob/8c81e30a6/packages/codec/lib/format/index.ts#L1">codec/lib/format/index.ts:1</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<h3 class="tsd-index-heading uppercase">Index</h3>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Namespaces - Main Format</h3>
<div class="tsd-index-list"><a href="_truffle_codec.Format.Errors.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-4"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)"></path></g></svg><span>Errors</span></a>
<a href="_truffle_codec.Format.Types.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Types</span></a>
<a href="_truffle_codec.Format.Values.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Values</span></a>
</div></section>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Namespaces - Other</h3>
<div class="tsd-index-list"><a href="_truffle_codec.Format.Utils.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Utils</span></a>
</div></section></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)" id="icon-chevronDown"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="#icon-chevronDown"></use></svg>On This Page</h3></summary>
<div class="tsd-accordion-details">
<ul>
<li>
<ul>
<li><a href="#md:codec-output-format"><span>Codec <wbr/>Output <wbr/>Format</span></a></li>
<li>
<ul>
<li><a href="#md:module-information"><span>Module information</span></a></li>
<li>
<ul>
<li><a href="#md:how-to-import"><span>How to import</span></a></li></ul></li>
<li><a href="#md:format-information"><span>Format information</span></a></li>
<li>
<ul>
<li><a href="#md:specification"><span>Specification</span></a></li>
<li><a href="#md:values-vs-errors"><span>Values vs. errors</span></a></li></ul></li>
<li><a href="#md:notes-on-this-documentation"><span>Notes on this documentation</span></a></li></ul></li></ul></li></ul></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Truffle <wbr/>Decoding and <wbr/>Encoding</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" open data-key="@truffle/codec"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="#icon-chevronDown"></use></svg><a href="_truffle_codec.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>@truffle/codec</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="_truffle_codec.AbiData.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Abi<wbr/>Data</span></a></li>
<li><a href="_truffle_codec.Ast.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Ast</span></a></li>
<li><a href="_truffle_codec.AstConstant.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Ast<wbr/>Constant</span></a></li>
<li><a href="_truffle_codec.Basic.html" class="tsd-is-protected"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Basic</span></a></li>
<li><a href="_truffle_codec.Bytes.html" class="tsd-is-protected"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Bytes</span></a></li>
<li><a href="_truffle_codec.Compilations.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Compilations</span></a></li>
<li><a href="_truffle_codec.Compiler.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Compiler</span></a></li>
<li><a href="_truffle_codec.Contexts.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Contexts</span></a></li>
<li><a href="_truffle_codec.Conversion.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Conversion</span></a></li>
<li><a href="_truffle_codec.Evm.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Evm</span></a></li>
<li><a href="_truffle_codec.Export.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Export</span></a></li>
<li>
<details class="tsd-index-accordion" open data-key="@truffle/codec.Format"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="#icon-chevronDown"></use></svg><a href="_truffle_codec.Format.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Format</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="_truffle_codec.Format.Errors.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Errors</span></a></li>
<li><a href="_truffle_codec.Format.Types.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Types</span></a></li>
<li><a href="_truffle_codec.Format.Utils.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Utils</span></a></li>
<li><a href="_truffle_codec.Format.Values.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Values</span></a></li></ul></div></details></li>
<li><a href="_truffle_codec.MappingKey.html" class="tsd-is-protected"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Mapping<wbr/>Key</span></a></li>
<li><a href="_truffle_codec.Memory.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Memory</span></a></li>
<li><a href="_truffle_codec.Pointer.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Pointer</span></a></li>
<li><a href="_truffle_codec.Special.html" class="tsd-is-protected"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Special</span></a></li>
<li><a href="_truffle_codec.Stack.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Stack</span></a></li>
<li><a href="_truffle_codec.Storage.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Storage</span></a></li>
<li><a href="_truffle_codec.Topic.html" class="tsd-is-protected"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Topic</span></a></li>
<li><a href="_truffle_codec.Wrap.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>Wrap</span></a></li>
<li><a href="../classes/_truffle_codec.NoProjectInfoError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-128"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)"></path></g></svg><span>No<wbr/>Project<wbr/>Info<wbr/>Error</span></a></li>
<li><a href="../classes/_truffle_codec.RepeatCompilationIdError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Repeat<wbr/>Compilation<wbr/>Id<wbr/>Error</span></a></li>
<li><a href="../classes/_truffle_codec.UnknownUserDefinedTypeError.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Unknown<wbr/>User<wbr/>Defined<wbr/>Type<wbr/>Error</span></a></li>
<li><a href="../interfaces/_truffle_codec.AbiArgument.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-256"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)"></path></g></svg><span>Abi<wbr/>Argument</span></a></li>
<li><a href="../interfaces/_truffle_codec.AccessListForAddress.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Access<wbr/>List<wbr/>For<wbr/>Address</span></a></li>
<li><a href="../interfaces/_truffle_codec.AddressWrapRequest.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Address<wbr/>Wrap<wbr/>Request</span></a></li>
<li><a href="../interfaces/_truffle_codec.AddressWrapResponse.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Address<wbr/>Wrap<wbr/>Response</span></a></li>
<li><a href="../interfaces/_truffle_codec.AnonymousDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Anonymous<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.BlockhashedMulticallInfo.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Blockhashed<wbr/>Multicall<wbr/>Info</span></a></li>
<li><a href="../interfaces/_truffle_codec.BytecodeDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Bytecode<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.CallInterpretationInfo.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Call<wbr/>Interpretation<wbr/>Info</span></a></li>
<li><a href="../interfaces/_truffle_codec.CodeRequest.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Code<wbr/>Request</span></a></li>
<li><a href="../interfaces/_truffle_codec.ConstructorDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Constructor<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.DeadlinedMulticallInfo.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Deadlined<wbr/>Multicall<wbr/>Info</span></a></li>
<li><a href="../interfaces/_truffle_codec.DecimalWrapRequest.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Decimal<wbr/>Wrap<wbr/>Request</span></a></li>
<li><a href="../interfaces/_truffle_codec.DecimalWrapResponse.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Decimal<wbr/>Wrap<wbr/>Response</span></a></li>
<li><a href="../interfaces/_truffle_codec.EmptyFailureDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Empty<wbr/>Failure<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.EventDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Event<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.FunctionDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Function<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.IntegerWrapRequest.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Integer<wbr/>Wrap<wbr/>Request</span></a></li>
<li><a href="../interfaces/_truffle_codec.IntegerWrapResponse.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Integer<wbr/>Wrap<wbr/>Response</span></a></li>
<li><a href="../interfaces/_truffle_codec.LogOptions.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Log<wbr/>Options</span></a></li>
<li><a href="../interfaces/_truffle_codec.MessageDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Message<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.Options.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Options</span></a></li>
<li><a href="../interfaces/_truffle_codec.RawReturnDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Raw<wbr/>Return<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.ReturnDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Return<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.RevertMessageDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Revert<wbr/>Message<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.SelfDestructDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Self<wbr/>Destruct<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.StateVariable.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>State<wbr/>Variable</span></a></li>
<li><a href="../interfaces/_truffle_codec.StorageRequest.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Storage<wbr/>Request</span></a></li>
<li><a href="../interfaces/_truffle_codec.TryAggregateInfo.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Try<wbr/>Aggregate<wbr/>Info</span></a></li>
<li><a href="../interfaces/_truffle_codec.UnknownBytecodeDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Unknown<wbr/>Bytecode<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.UnknownCallDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Unknown<wbr/>Call<wbr/>Decoding</span></a></li>
<li><a href="../interfaces/_truffle_codec.UnknownCreationDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Unknown<wbr/>Creation<wbr/>Decoding</span></a></li>
<li><a href="../types/_truffle_codec.AccessList.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-4194304"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.31 16V8.224H8.91V7.24H14.79V8.224H12.39V16H11.31Z" fill="var(--color-text)"></path></g></svg><span>Access<wbr/>List</span></a></li>
<li><a href="../types/_truffle_codec.BlockSpecifier.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Block<wbr/>Specifier</span></a></li>
<li><a href="../types/_truffle_codec.CalldataDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Calldata<wbr/>Decoding</span></a></li>
<li><a href="../types/_truffle_codec.ContractKind.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Contract<wbr/>Kind</span></a></li>
<li><a href="../types/_truffle_codec.DecoderRequest.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Decoder<wbr/>Request</span></a></li>
<li><a href="../types/_truffle_codec.DecodingMode.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Decoding<wbr/>Mode</span></a></li>
<li><a href="../types/_truffle_codec.ExtrasAllowed.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Extras<wbr/>Allowed</span></a></li>
<li><a href="../types/_truffle_codec.Location.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Location</span></a></li>
<li><a href="../types/_truffle_codec.LogDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Log<wbr/>Decoding</span></a></li>
<li><a href="../types/_truffle_codec.Mutability.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Mutability</span></a></li>
<li><a href="../types/_truffle_codec.PaddingMode.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Padding<wbr/>Mode</span></a></li>
<li><a href="../types/_truffle_codec.PaddingType.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Padding<wbr/>Type</span></a></li>
<li><a href="../types/_truffle_codec.ReturndataDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Returndata<wbr/>Decoding</span></a></li>
<li><a href="../types/_truffle_codec.Visibility.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Visibility</span></a></li>
<li><a href="../types/_truffle_codec.WrapRequest.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Wrap<wbr/>Request</span></a></li>
<li><a href="../types/_truffle_codec.WrapResponse.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4194304"></use></svg><span>Wrap<wbr/>Response</span></a></li>
<li><a href="../functions/_truffle_codec.abifyCalldataDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-64"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)"></path></g></svg><span>abify<wbr/>Calldata<wbr/>Decoding</span></a></li>
<li><a href="../functions/_truffle_codec.abifyLogDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-64"></use></svg><span>abify<wbr/>Log<wbr/>Decoding</span></a></li>
<li><a href="../functions/_truffle_codec.abifyReturndataDecoding.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-64"></use></svg><span>abify<wbr/>Returndata<wbr/>Decoding</span></a></li>
<li><a href="../functions/_truffle_codec.decodeCalldata.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-64"></use></svg><span>decode<wbr/>Calldata</span></a></li>
<li><a href="../functions/_truffle_codec.decodeEvent.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-64"></use></svg><span>decode<wbr/>Event</span></a></li>
<li><a href="../functions/_truffle_codec.decodeReturndata.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-64"></use></svg><span>decode<wbr/>Returndata</span></a></li>
<li><a href="../functions/_truffle_codec.decodeRevert.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-64"></use></svg><span>decode<wbr/>Revert</span></a></li>
<li><a href="../functions/_truffle_codec.decodeVariable.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-64"></use></svg><span>decode<wbr/>Variable</span></a></li></ul></div></details></li>
<li><a href="_truffle_encoder.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>@truffle/encoder</span></a></li>
<li><a href="decoder_lib.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-4"></use></svg><span>decoder/lib</span></a></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>