Files
2023-07-26 15:19:41 -06:00

291 lines
52 KiB
HTML

<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Documentation</title><meta name="description" content="Documentation for Documentation"/><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 async src="assets/search.js" id="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 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>
<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">Documentation</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget 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-8 col-content">
<div class="tsd-page-title">
<h2>Documentation</h2></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography">
<a href="#awcp-aepp-waellet-communication-protocol" id="awcp-aepp-waellet-communication-protocol" style="color: inherit; text-decoration: none;">
<h1>AWCP: aepp-waellet communication protocol</h1>
</a>
<p>Suppose you are the aepp and you want to communicate with a waellet. What
you do is pick an <code>EventTarget</code> (typically <code>window</code>), and listen to its
<code>MessageEvent</code>s, via something like</p>
<pre><code class="language-typescript"><span class="hl-0">window</span><span class="hl-1">.</span><span class="hl-2">addEventListener</span><span class="hl-1">(</span><span class="hl-3">&#39;message&#39;</span><span class="hl-1">, </span><span class="hl-0">my_listener</span><span class="hl-1">);</span>
</code></pre>
<p>You then communicate with the wallet by sending messages back over the
<code>EventTarget</code>. You should probably use the <a href="https://github.com/aeternity/Vanillae/tree/master/sidekick">sidekick
library</a> to do
this.</p>
<p>Keep in mind that these messages are not secret. Any browser extension or
foreign page script can intercept these messages. Imagine as an (imperfect)
analogy that you work in an office. Everyone&#39;s mail is dumped on the floor
in the middle of the office, and you are responsible for picking out which
letters are addressed to you. Anyone else can pick up letters addressed to
you, and read them.</p>
<p>This module defines the shape of the messages that are sent. There are several
layers to the onion, each corresponding to natural branch points in the
protocol.</p>
<h3>Example</h3><pre><code class="language-ts"><span class="hl-4">// this is a aepp-to-wallet call which is sent to `window` by say sidekick</span><br/><span class="hl-4">// layer 2 layer 3 layer 4</span><br/><span class="hl-4">// EventData_A2W&lt;RpcCall&lt;&quot;connection.open&quot;, Params_A2W_connection_open&gt;&gt;)</span><br/><span class="hl-4">// layer 2: who is the message for</span><br/><span class="hl-1">{</span><span class="hl-5">type</span><span class="hl-1"> : </span><span class="hl-3">&quot;to_waellet&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">// layer 3: json rpc</span><br/><span class="hl-1"> </span><span class="hl-5">data</span><span class="hl-1"> : {</span><span class="hl-5">jsonrpc</span><span class="hl-1"> : </span><span class="hl-3">&quot;2.0&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">id</span><span class="hl-1"> : </span><span class="hl-3">&quot;ske-connect-1&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">method</span><span class="hl-1"> : </span><span class="hl-3">&quot;connection.open&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">// layer 4: AWCP-specific semantics</span><br/><span class="hl-1"> </span><span class="hl-5">params</span><span class="hl-1"> : {</span><span class="hl-5">name</span><span class="hl-1"> : </span><span class="hl-3">&quot;sidekick examples&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">version</span><span class="hl-1"> : </span><span class="hl-6">1</span><span class="hl-1">}}}</span><br/><br/><br/><span class="hl-4">// this is the associated wallet-to-aepp response which is sent to `window`</span><br/><span class="hl-4">// by Superhero</span><br/><span class="hl-4">// layer 2 layer 3 layer 4</span><br/><span class="hl-4">// EventData_W2A&lt;RpcResp_ok&lt;&quot;connection.open&quot;, Result_W2A_connection_open&gt;&gt;)</span><br/><span class="hl-4">// layer 2: who is the message for</span><br/><span class="hl-1">{</span><span class="hl-5">type</span><span class="hl-1"> : </span><span class="hl-3">&quot;to_aepp&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">// layer 3: json rpc</span><br/><span class="hl-1"> </span><span class="hl-5">data</span><span class="hl-1"> : {</span><span class="hl-5">jsonrpc</span><span class="hl-1"> : </span><span class="hl-3">&quot;2.0&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">id</span><span class="hl-1"> : </span><span class="hl-3">&quot;ske-connect-1&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">method</span><span class="hl-1"> : </span><span class="hl-3">&quot;connection.open&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">// layer 4: AWCP-specific semantics</span><br/><span class="hl-1"> </span><span class="hl-5">result</span><span class="hl-1"> : {</span><span class="hl-5">id</span><span class="hl-1"> : </span><span class="hl-3">&quot;mnhmmkepfddpifjkamaligfeemcbhdne&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">name</span><span class="hl-1"> : </span><span class="hl-3">&quot;Superhero&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">networkId</span><span class="hl-1"> : </span><span class="hl-3">&quot;ae_mainnet&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">origin</span><span class="hl-1"> : </span><span class="hl-3">&quot;chrome-extension://mnhmmkepfddpifjkamaligfeemcbhdne&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">type</span><span class="hl-1"> : </span><span class="hl-3">&quot;extension&quot;</span><span class="hl-1">}}}</span>
</code></pre>
<h3>Example</h3><pre><code class="language-ts"><span class="hl-4">// this is a waellet-to-aepp cast (RPC verbiage: &quot;notification&quot;). It does</span><br/><span class="hl-4">// not require a response.</span><br/><br/><span class="hl-4">// layer 2 layer 3 layer 4</span><br/><span class="hl-4">// EventData_W2A&lt;RpcCast&lt;&quot;connection.announcePresence&quot;, Params_W2A_connection_announcePresence&gt;&gt;)</span><br/><span class="hl-4">// layer 2: who is the message for</span><br/><span class="hl-1">{</span><span class="hl-5">type</span><span class="hl-1"> : </span><span class="hl-3">&quot;to_aepp&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">// layer 3: json rpc</span><br/><span class="hl-1"> </span><span class="hl-5">data</span><span class="hl-1"> : {</span><span class="hl-5">jsonrpc</span><span class="hl-1"> : </span><span class="hl-3">&quot;2.0&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">method</span><span class="hl-1"> : </span><span class="hl-3">&quot;connection.announcePresence&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">// layer 4: AWCP-specific semantics</span><br/><span class="hl-1"> </span><span class="hl-5">params</span><span class="hl-1"> : {</span><span class="hl-5">id</span><span class="hl-1"> : </span><span class="hl-3">&quot;{aee9e933-52b6-410a-8c3f-99c6be596b4e}&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">name</span><span class="hl-1"> : </span><span class="hl-3">&quot;Superhero&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">networkId</span><span class="hl-1"> : </span><span class="hl-3">&quot;ae_mainnet&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">origin</span><span class="hl-1"> : </span><span class="hl-3">&quot;moz-extension://ee425d81-d5b2-44b6-9406-4da31b019e7c&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">type</span><span class="hl-1"> : </span><span class="hl-3">&quot;extension&quot;</span><span class="hl-1">}}}</span>
</code></pre>
<ol>
<li><p>The <code>MessageEvent</code> layer. This is what is actually sent as an event.
This is an opaque object that is built into every runtime&#39;s standard
library: <a href="https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent">https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent</a></p>
<p>The <code>MessageEvent</code> has a field called <code>data</code>, which corresponds to the
next layer.</p>
</li>
<li><p>The <code>EventData</code> layer. This is what goes in <code>message_event.data</code>. The
structure that goes in here is one of</p>
<ol>
<li><a href="types/EventData_W2A.html">EventData_W2A</a>: waellet-to-aepp</li>
<li><a href="types/EventData_A2W.html">EventData_A2W</a>: aepp-to-waellet</li>
</ol>
<p>This layer corresponds to the &quot;am I supposed to pay attention to this
event?&quot; branch point.</p>
<p>Those data structures mentioned above have two fields.</p>
<ol>
<li><code>type</code> is a string which is either <code>&quot;to_aepp&quot;</code> or <code>&quot;to_waellet&quot;</code></li>
<li><code>data</code> contains the next layer</li>
</ol>
<pre><code class="language-typescript"><span class="hl-7">type</span><span class="hl-1"> </span><span class="hl-8">EventData_W2A</span><br/><span class="hl-1"> &lt;</span><span class="hl-8">t</span><span class="hl-1"> </span><span class="hl-7">extends</span><span class="hl-1"> </span><span class="hl-8">any</span><span class="hl-1">&gt;</span><br/><span class="hl-1"> = {</span><span class="hl-0">type</span><span class="hl-1"> : </span><span class="hl-3">&quot;to_aepp&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">data</span><span class="hl-1"> : </span><span class="hl-8">t</span><span class="hl-1">};</span>
</code></pre>
<pre><code class="language-typescript"><span class="hl-7">type</span><span class="hl-1"> </span><span class="hl-8">EventData_A2W</span><br/><span class="hl-1"> &lt;</span><span class="hl-8">t</span><span class="hl-1"> </span><span class="hl-7">extends</span><span class="hl-1"> </span><span class="hl-8">any</span><span class="hl-1">&gt;</span><br/><span class="hl-1"> = {</span><span class="hl-0">type</span><span class="hl-1"> : </span><span class="hl-3">&quot;to_waellet&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">data</span><span class="hl-1"> : </span><span class="hl-8">t</span><span class="hl-1">};</span>
</code></pre>
</li>
<li><p>We&#39;re at <code>message_event.data.data</code>. The idiom here is &quot;JSON RPC&quot;, which
is sort of a poor man&#39;s HTTP.</p>
<p>In general, the wallet is the server and the aepp is the client.</p>
<p>If you are the aepp, usually you are handling a response to a request
you sent to the waellet. For instance, you formed a transaction and
sent it to the waellet to sign, and the waellet is sending you back
either the signed transaction or an error (e.g. user rejected the
transaction).</p>
<p>The exception to this pattern is the wallet notifying you that it
exists, which is the only time the waellet sends a request (a &quot;cast&quot;, or
a &quot;notification&quot;) to the aepp. <strong>In no event does the aepp send a
response to the waellet.</strong></p>
<p>I am not 100% sure what RPC stands for, but it will be helpful to think
about it as &quot;remote procedure call&quot;. More below. This layer roughly
corresponds to the &quot;given that I am supposed to pay attention to this
event, what am I supposed to do with this information?&quot;</p>
<p>All requests have a <code>method</code> field (a string) and a <code>params</code> field (an
object). There are two types of requests:</p>
<ol>
<li><p>&quot;casts&quot; (the RPC standard calls these &quot;notifications&quot;). These do not
need a response. This is only used for the waellet announcing it
exists.</p>
</li>
<li><p>&quot;calls&quot;. These have an <code>id</code> field, and get a response. These are
used when the aepp is requesting the waellet to do something. The
response will have the same <code>id</code> field and the same <code>method</code> field.</p>
</li>
</ol>
</li>
<li><p>So far nothing we&#39;ve talked about is specific to Aeternity, Vanillae,
JR, or sidekick. This fourth layer is the actual semantics of the
messaging protocol between the aepp and the waellet.</p>
<p>By analogy, the first two layers are developing something like TCP. The
third layer is developing HTTP. And this layer is the actual routing
table of your website, which carries with it the expected semantics of
how the website is supposed to behave.</p>
<p>This module DOES <strong>NOT</strong> exhaustively define all of the communication
protocol that occurs in the SDK, only the subset that I have encountered
in practice.</p>
</li>
</ol>
<p>The first layer is defined by the runtime, not here. So we&#39;re starting with
layer 2.</p>
<a href="#notes-on-json-rpc-20" id="notes-on-json-rpc-20" style="color: inherit; text-decoration: none;">
<h1>Notes on JSON RPC 2.0</h1>
</a>
<p>I have subtly changed the RPC protocol to</p>
<ol>
<li>improve it in such a way that it is easier to use in code</li>
<li>more accurately represent how it is used in practice</li>
</ol>
<p>The only difference here is that the <code>params</code> field of requests is
non-optional, and <strong>must be an object</strong> (the RPC standard allows arrays).</p>
<a href="#requests" id="requests" style="color: inherit; text-decoration: none;">
<h2>Requests</h2>
</a>
<p>I have adapted the verbiage here, borrowing from Erlang, to make a
distinction between</p>
<ol>
<li><p>casts (RPC calls these &quot;notifications&quot;): these</p>
<ol>
<li>do <strong>NOT</strong> have an <code>id</code> field</li>
<li><strong>AND</strong> do <strong>NOT</strong> require a response.</li>
</ol>
</li>
<li><p>calls: these</p>
<ol>
<li><strong>DO</strong> have an <code>id</code> field</li>
<li><strong>AND</strong> <strong>DO</strong> require a response.</li>
</ol>
</li>
</ol>
<p>The <a href="types/RpcCall.html">RpcCall</a> and <a href="types/RpcResp.html">RpcResp</a> data structures each have an <code>id_n</code>
type parameter.</p>
<p>The purpose of this is to notate (and possibly enforce) at the type level
the constraint that, given a call with say <code>id = 7</code>, the response must also
have <code>id = 7</code>.</p>
<a href="#links" id="links" style="color: inherit; text-decoration: none;">
<h1>Links</h1>
</a>
<ul>
<li><code>MessageEvent</code>s: <a href="https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent">https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent</a></li>
<li>JSON RPC 2.0: <a href="https://www.jsonrpc.org/specification">https://www.jsonrpc.org/specification</a></li>
</ul>
</div></section>
<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">Type Aliases</h3>
<div class="tsd-index-list"><a href="types/EventData_W2A.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4194304-path"></rect><path d="M11.31 16V8.224H8.91V7.24H14.79V8.224H12.39V16H11.31Z" fill="var(--color-text)" id="icon-4194304-text"></path></svg><span>Event<wbr/>Data_<wbr/>W2A</span></a>
<a href="types/EventData_A2W.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>A2W</span></a>
<a href="types/RpcError.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Error</span></a>
<a href="types/RpcCast.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Cast</span></a>
<a href="types/RpcCall.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Call</span></a>
<a href="types/RpcResp_error.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Resp_<wbr/>error</span></a>
<a href="types/RpcResp_ok.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Resp_<wbr/>ok</span></a>
<a href="types/RpcResp.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Resp</span></a>
<a href="types/RpcResp_Any.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Resp_<wbr/>Any</span></a>
<a href="types/Params_W2A_connection_announcePresence.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Params_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>announce<wbr/>Presence</span></a>
<a href="types/RpcCast_W2A_connection_announcePresence.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Cast_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>announce<wbr/>Presence</span></a>
<a href="types/EventData_W2A_connection_announcePresence.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>announce<wbr/>Presence</span></a>
<a href="types/Params_A2W_connection_open.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Params_<wbr/>A2<wbr/>W_<wbr/>connection_<wbr/>open</span></a>
<a href="types/Result_W2A_connection_open.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Result_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>open</span></a>
<a href="types/RpcCall_A2W_connection_open.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Call_<wbr/>A2<wbr/>W_<wbr/>connection_<wbr/>open</span></a>
<a href="types/RpcResp_W2A_connection_open.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Resp_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>open</span></a>
<a href="types/EventData_A2W_connection_open.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>A2<wbr/>W_<wbr/>connection_<wbr/>open</span></a>
<a href="types/EventData_W2A_connection_open.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>open</span></a>
<a href="types/Params_A2W_address_subscribe.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Params_<wbr/>A2<wbr/>W_<wbr/>address_<wbr/>subscribe</span></a>
<a href="types/Result_W2A_address_subscribe.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Result_<wbr/>W2<wbr/>A_<wbr/>address_<wbr/>subscribe</span></a>
<a href="types/RpcCall_A2W_address_subscribe.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Call_<wbr/>A2<wbr/>W_<wbr/>address_<wbr/>subscribe</span></a>
<a href="types/RpcResp_W2A_address_subscribe.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Resp_<wbr/>W2<wbr/>A_<wbr/>address_<wbr/>subscribe</span></a>
<a href="types/EventData_A2W_address_subscribe.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>A2<wbr/>W_<wbr/>address_<wbr/>subscribe</span></a>
<a href="types/EventData_W2A_address_subscribe.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>address_<wbr/>subscribe</span></a>
<a href="types/Params_A2W_tx_sign_yesprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Params_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</span></a>
<a href="types/Result_W2A_tx_sign_yesprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Result_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</span></a>
<a href="types/RpcCall_A2W_tx_sign_yesprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Call_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</span></a>
<a href="types/RpcResp_W2A_tx_sign_yesprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Resp_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</span></a>
<a href="types/EventData_A2W_tx_sign_yesprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</span></a>
<a href="types/EventData_W2A_tx_sign_yesprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</span></a>
<a href="types/Params_A2W_tx_sign_noprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Params_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>noprop</span></a>
<a href="types/Result_W2A_tx_sign_noprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Result_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>noprop</span></a>
<a href="types/RpcCall_A2W_tx_sign_noprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Call_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>noprop</span></a>
<a href="types/RpcResp_W2A_tx_sign_noprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Resp_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>noprop</span></a>
<a href="types/EventData_A2W_tx_sign_noprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>noprop</span></a>
<a href="types/EventData_W2A_tx_sign_noprop.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>noprop</span></a>
<a href="types/Params_A2W_msg_sign.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Params_<wbr/>A2<wbr/>W_<wbr/>msg_<wbr/>sign</span></a>
<a href="types/Result_W2A_msg_sign.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Result_<wbr/>W2<wbr/>A_<wbr/>msg_<wbr/>sign</span></a>
<a href="types/RpcCall_A2W_msg_sign.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Call_<wbr/>A2<wbr/>W_<wbr/>msg_<wbr/>sign</span></a>
<a href="types/RpcResp_W2A_msg_sign.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Rpc<wbr/>Resp_<wbr/>W2<wbr/>A_<wbr/>msg_<wbr/>sign</span></a>
<a href="types/EventData_A2W_msg_sign.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>A2<wbr/>W_<wbr/>msg_<wbr/>sign</span></a>
<a href="types/EventData_W2A_msg_sign.html" class="tsd-index-link tsd-kind-type-alias"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg><span>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>msg_<wbr/>sign</span></a>
</div></section>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Variables</h3>
<div class="tsd-index-list"><a href="variables/ERROR_CODE_RpcInvalidTransactionError.html" class="tsd-index-link tsd-kind-variable"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-32-path"></rect><path d="M11.106 16L8.85 7.24H9.966L11.454 13.192C11.558 13.608 11.646 13.996 11.718 14.356C11.79 14.708 11.842 14.976 11.874 15.16C11.906 14.976 11.954 14.708 12.018 14.356C12.09 13.996 12.178 13.608 12.282 13.192L13.758 7.24H14.85L12.582 16H11.106Z" fill="var(--color-text)" id="icon-32-text"></path></svg><span>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Invalid<wbr/>Transaction<wbr/>Error</span></a>
<a href="variables/ERROR_CODE_RpcBroadcastError.html" class="tsd-index-link tsd-kind-variable"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg><span>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Broadcast<wbr/>Error</span></a>
<a href="variables/ERROR_CODE_RpcRejectedByUserError.html" class="tsd-index-link tsd-kind-variable"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg><span>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Rejected<wbr/>By<wbr/>User<wbr/>Error</span></a>
<a href="variables/ERROR_CODE_RpcUnsupportedProtocolError.html" class="tsd-index-link tsd-kind-variable"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg><span>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Unsupported<wbr/>Protocol<wbr/>Error</span></a>
<a href="variables/ERROR_CODE_RpcConnectionDenyError.html" class="tsd-index-link tsd-kind-variable"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg><span>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Connection<wbr/>Deny<wbr/>Error</span></a>
<a href="variables/ERROR_CODE_RpcNotAuthorizeError.html" class="tsd-index-link tsd-kind-variable"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg><span>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Not<wbr/>Authorize<wbr/>Error</span></a>
<a href="variables/ERROR_CODE_RpcPermissionDenyError.html" class="tsd-index-link tsd-kind-variable"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg><span>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Permission<wbr/>Deny<wbr/>Error</span></a>
<a href="variables/ERROR_CODE_RpcInternalError.html" class="tsd-index-link tsd-kind-variable"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg><span>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Internal<wbr/>Error</span></a>
<a href="variables/ERROR_CODE_RpcMethodNotFoundError.html" class="tsd-index-link tsd-kind-variable"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg><span>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Method<wbr/>Not<wbr/>Found<wbr/>Error</span></a>
</div></section></section></section></div>
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
<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)"></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>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><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>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<nav class="tsd-navigation primary">
<details class="tsd-index-accordion" open><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)"></path></svg> Modules</h3></summary>
<div class="tsd-accordion-details">
<ul>
<li class="current selected"><a href="modules.html">Documentation</a>
<ul></ul></li></ul></div></details></nav>
<nav class="tsd-navigation secondary menu-sticky">
<ul>
<li class="tsd-kind-type-alias"><a href="types/EventData_W2A.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>W2A</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_A2W.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>A2W</a></li>
<li class="tsd-kind-variable"><a href="variables/ERROR_CODE_RpcInvalidTransactionError.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Invalid<wbr/>Transaction<wbr/>Error</a></li>
<li class="tsd-kind-variable"><a href="variables/ERROR_CODE_RpcBroadcastError.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Broadcast<wbr/>Error</a></li>
<li class="tsd-kind-variable"><a href="variables/ERROR_CODE_RpcRejectedByUserError.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Rejected<wbr/>By<wbr/>User<wbr/>Error</a></li>
<li class="tsd-kind-variable"><a href="variables/ERROR_CODE_RpcUnsupportedProtocolError.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Unsupported<wbr/>Protocol<wbr/>Error</a></li>
<li class="tsd-kind-variable"><a href="variables/ERROR_CODE_RpcConnectionDenyError.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Connection<wbr/>Deny<wbr/>Error</a></li>
<li class="tsd-kind-variable"><a href="variables/ERROR_CODE_RpcNotAuthorizeError.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Not<wbr/>Authorize<wbr/>Error</a></li>
<li class="tsd-kind-variable"><a href="variables/ERROR_CODE_RpcPermissionDenyError.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Permission<wbr/>Deny<wbr/>Error</a></li>
<li class="tsd-kind-variable"><a href="variables/ERROR_CODE_RpcInternalError.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Internal<wbr/>Error</a></li>
<li class="tsd-kind-variable"><a href="variables/ERROR_CODE_RpcMethodNotFoundError.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-32-path"></use><use href="#icon-32-text"></use></svg>ERROR_<wbr/>CODE_<wbr/>Rpc<wbr/>Method<wbr/>Not<wbr/>Found<wbr/>Error</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcError.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Error</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcCast.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Cast</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcCall.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Call</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcResp_error.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Resp_<wbr/>error</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcResp_ok.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Resp_<wbr/>ok</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcResp.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Resp</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcResp_Any.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Resp_<wbr/>Any</a></li>
<li class="tsd-kind-type-alias"><a href="types/Params_W2A_connection_announcePresence.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Params_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>announce<wbr/>Presence</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcCast_W2A_connection_announcePresence.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Cast_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>announce<wbr/>Presence</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_W2A_connection_announcePresence.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>announce<wbr/>Presence</a></li>
<li class="tsd-kind-type-alias"><a href="types/Params_A2W_connection_open.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Params_<wbr/>A2<wbr/>W_<wbr/>connection_<wbr/>open</a></li>
<li class="tsd-kind-type-alias"><a href="types/Result_W2A_connection_open.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Result_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>open</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcCall_A2W_connection_open.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Call_<wbr/>A2<wbr/>W_<wbr/>connection_<wbr/>open</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcResp_W2A_connection_open.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Resp_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>open</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_A2W_connection_open.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>A2<wbr/>W_<wbr/>connection_<wbr/>open</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_W2A_connection_open.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>connection_<wbr/>open</a></li>
<li class="tsd-kind-type-alias"><a href="types/Params_A2W_address_subscribe.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Params_<wbr/>A2<wbr/>W_<wbr/>address_<wbr/>subscribe</a></li>
<li class="tsd-kind-type-alias"><a href="types/Result_W2A_address_subscribe.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Result_<wbr/>W2<wbr/>A_<wbr/>address_<wbr/>subscribe</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcCall_A2W_address_subscribe.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Call_<wbr/>A2<wbr/>W_<wbr/>address_<wbr/>subscribe</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcResp_W2A_address_subscribe.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Resp_<wbr/>W2<wbr/>A_<wbr/>address_<wbr/>subscribe</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_A2W_address_subscribe.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>A2<wbr/>W_<wbr/>address_<wbr/>subscribe</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_W2A_address_subscribe.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>address_<wbr/>subscribe</a></li>
<li class="tsd-kind-type-alias"><a href="types/Params_A2W_tx_sign_yesprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Params_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/Result_W2A_tx_sign_yesprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Result_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcCall_A2W_tx_sign_yesprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Call_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcResp_W2A_tx_sign_yesprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Resp_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_A2W_tx_sign_yesprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_W2A_tx_sign_yesprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>yesprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/Params_A2W_tx_sign_noprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Params_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>noprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/Result_W2A_tx_sign_noprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Result_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>noprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcCall_A2W_tx_sign_noprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Call_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>noprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcResp_W2A_tx_sign_noprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Resp_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>noprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_A2W_tx_sign_noprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>A2<wbr/>W_<wbr/>tx_<wbr/>sign_<wbr/>noprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_W2A_tx_sign_noprop.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>tx_<wbr/>sign_<wbr/>noprop</a></li>
<li class="tsd-kind-type-alias"><a href="types/Params_A2W_msg_sign.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Params_<wbr/>A2<wbr/>W_<wbr/>msg_<wbr/>sign</a></li>
<li class="tsd-kind-type-alias"><a href="types/Result_W2A_msg_sign.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Result_<wbr/>W2<wbr/>A_<wbr/>msg_<wbr/>sign</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcCall_A2W_msg_sign.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Call_<wbr/>A2<wbr/>W_<wbr/>msg_<wbr/>sign</a></li>
<li class="tsd-kind-type-alias"><a href="types/RpcResp_W2A_msg_sign.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Rpc<wbr/>Resp_<wbr/>W2<wbr/>A_<wbr/>msg_<wbr/>sign</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_A2W_msg_sign.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>A2<wbr/>W_<wbr/>msg_<wbr/>sign</a></li>
<li class="tsd-kind-type-alias"><a href="types/EventData_W2A_msg_sign.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4194304-path"></use><use href="#icon-4194304-text"></use></svg>Event<wbr/>Data_<wbr/>W2<wbr/>A_<wbr/>msg_<wbr/>sign</a></li></ul></nav></div></div>
<div class="container tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div><script src="assets/main.js"></script></body></html>