-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathaccounts.html
More file actions
449 lines (393 loc) · 28.4 KB
/
accounts.html
File metadata and controls
449 lines (393 loc) · 28.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width">
<title>Accounts - XAG Ledger Dev Portal</title>
<!-- favicon -->
<link rel="apple-touch-icon" sizes="180x180" href="assets/favicons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/favicons/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="assets/favicons/favicon-32x32.png">
<link rel="manifest" href="assets/favicons/site.webmanifest">
<link rel="shortcut icon" href="favicon.ico">
<meta name="msapplication-TileColor" content="#25A768">
<meta name="msapplication-config" content="assets/favicons/browserconfig.xml">
<meta name="theme-color" content="#25A768">
<!-- jQuery -->
<script src="assets/vendor/jquery-1.11.1.min.js"></script>
<!-- Stylesheet -->
<link href="assets/css/devportal.css" rel="stylesheet" />
<!-- Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-45576805-2"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-45576805-2');
gtag('config', 'UA-157720658-3', { 'linker': {
'domains': ['blog.xpring.io', 'forum.xpring.io', 'xpring.io',
'XAGl.org', 'explorer.XAGl.org', 'testnet.XAGl.org']
} }
);
</script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" />
<!-- syntax highlighting -->
<link rel="stylesheet" href="assets/vendor/docco.min.css" />
<script src="assets/vendor/highlight.min.js"></script>
<!-- expandable code samples -->
<script src="assets/js/expandcode.js"></script>
<!-- multi-code selection tabs -->
<script src="assets/js/multicodetab.js"></script>
<script>
$(document).ready(function() {
$(".multicode").minitabs();
hljs.initHighlighting();
make_code_expandable();
});
</script>
</head>
<body class="xrp-ledger-dev-portal sidebar-primary lang-en ">
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-white">
<a href="index.html" class="navbar-brand"><img src="assets/img/logo.png" class="logo" height="44" alt="XAG Ledger Dev Portal" /></a>
<button class="navbar-toggler" type="button" data-toggle="slide-collapse" data-target="#navbarHolder" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-end" id="navbarHolder">
<ul class="nav navbar-nav">
<li class="nav-item">
<a class="nav-link" href="dev-tools.html">Dev Tools</a>
</li>
<li class="nav-item">
<a class="nav-link" href="http://xagfans.com/" target="blank">BBS</a>
</li>
</ul><!-- /.navbar-nav -->
<div class="nav navbar-nav language-selector">
<div class="dropdown">
<button class="btn btn-outline-secondary dropdown-toggle" type="button" id="language_selector_header_btn" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
English
</button>
<div class="dropdown-menu" aria-labelledby="language_selector_header_btn">
<a class="dropdown-item" href="/accounts.html">English</a>
<a class="dropdown-item" href="/cn/accounts.html">中文</a>
</div><!--/.dropdown-menu-->
</div><!--/.dropdown-->
</div><!--/.language-selector-->
</div><!--/#navbarHolder-->
<div class="menu-overlay"></div>
</nav>
<div class="container-fluid" role="document" id="main_content_wrapper">
<div class="row">
<!-- Right sidebar first so it's at the beginning for mobile layouts -->
<!-- main column -->
<main class="main col-md-7 col-lg-6 order-md-3 " role="main" id="main_content_body">
<nav class="breadcrumbs-wrap p-0 p-md-3" aria-label="breadcrumb">
<ul class="breadcrumb bg-white">
<li class="breadcrumb-item"><a href="index.html">Home</a></li>
<li class="active breadcrumb-item"><a href="docs.html">Docs</a></li>
<li class="active breadcrumb-item"><a href="concepts.html">Concepts</a></li>
<li class="active breadcrumb-item"><a href="payment-system-basics.html">Payment System Basics</a></li>
<li class="active breadcrumb-item">Accounts</li>
</ul>
</nav><!--/.breadcrumbs-wrap--> <article class="pt-3 p-md-3">
<div class="content">
<h1 id="accounts">Accounts</h1>
<p>An "Account" in the XAG Ledger represents a holder of XAG and a sender of <a href="transaction-formats.html">transactions</a>. The core elements of an account are:</p>
<ul>
<li>
<p>An identifying <strong>address</strong>, such as <code>rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn</code></p>
</li>
<li>
<p>An <strong>XAG balance</strong>. Some of this XAG is set aside for the <a href="reserves.html">Reserve</a>.</p>
</li>
<li>A <strong>sequence number</strong>, which helps make sure any transactions this account sends are applied in the correct order and only once each. To execute a transaction, the transaction's sequence number and its sender's sequence number must match. Then, as part of applying the transaction, the account's sequence number increases by 1. (See also: <a href="basic-data-types.html#account-sequence">Basic Data Types: Account Sequence</a>.)</li>
<li>A <strong>history of transactions</strong> that affected this account and its balances.</li>
<li>One or more ways to <a href="transaction-basics.html#authorizing-transactions">authorize transactions</a>, possibly including:<ul>
<li>A master key pair intrinsic to the account. (This can be <a href="accountset.html">disabled</a> but not changed.)</li>
<li>A "regular" key pair that <a href="setregularkey.html">can be rotated</a>.</li>
<li>A signer list for <a href="multi-signing.html">multi-signing</a>. (Stored separately from the account's core data.)</li>
</ul>
</li>
</ul>
<p>In the ledger's data tree, an account's core data is stored in the <a href="accountroot.html">AccountRoot</a> ledger object type. An account can also be the owner (or partial owner) of several other types of data.</p>
<p class="devportal-callout tip"><strong>Tip:</strong> An "Account" in the XAG Ledger is somewhere between the financial usage (like "bank account") and the computing usage (like "UNIX account"). Non-XAG currencies and assets aren't stored in an XAG Ledger Account itself; each such asset is stored in an accounting relationship called a "Trust Line" that connects two parties.</p>
<h3 id="creating-accounts">Creating Accounts</h3>
<p>There is not a dedicated "create account" transaction. The <a href="payment.html">Payment transaction</a> automatically creates a new account if the payment sends XAG equal to or greater than the <a href="reserves.html">account reserve</a> to a mathematically-valid address that does not already have an account. This is called <em>funding</em> an account, and creates an <a href="accountroot.html">AccountRoot object</a> in the ledger. No other transaction can create an account.</p>
<p class="devportal-callout caution"><strong>Caution:</strong> Funding an account <strong>does not</strong> give you any special privileges over that account. Whoever has the secret key corresponding to the account's address has full control over the account and all XAG it contains. For some addresses, it's possible that no one has the secret key, in which case the account is a <a href="#special-addresses">black hole</a> and the XAG is lost forever.</p>
<p>The typical way to get an account in the XAG Ledger is as follows:</p>
<ol>
<li>
<p>Generate a key pair from a strong source of randomness and calculate the address of that key pair. (For example, you can use the <a href="wallet_propose.html">wallet_propose method</a> to do this.)</p>
</li>
<li>
<p>Have someone who already has an account in the XAG Ledger send XAG to the address you generated.</p>
<ul>
<li>
<p>For example, you can purchase XAG in a private exchange, then withdraw XAG from the exchange to the address you specified.</p>
<p class="devportal-callout caution"><strong>Caution:</strong> The first time you receive XAG at your own XAG Ledger address, you must pay the <a href="reserves.html">account reserve</a> (currently 20 XAG), which locks up that amount of XAG indefinitely. In contrast, private exchanges usually hold all their customers' XAG in a few shared XAG Ledger accounts, so customers don't have to pay the reserve for individual accounts at the exchange. Before withdrawing, consider whether having your own account directly on the XAG Ledger is worth the price.</p>
</li>
</ul>
</li>
</ol>
<h2 id="addresses">Addresses</h2>
<p>Accounts in the XAG Ledger are identified by an address in the XAG Ledger's <a href="base58-encodings.html">base58</a> format. The address is derived from the account's master <a class="external-link" href="https://en.wikipedia.org/wiki/Public-key_cryptography" target="_blank">public key <i aria-hidden="true" class="fa fa-external-link"></i></a>, which is in turn derived from a secret key. An address is represented as a string in JSON and has the following characteristics:</p>
<ul>
<li>Between 25 and 35 characters in length</li>
<li>
<p>Starts with the character <code>r</code></p>
<p class="devportal-callout note"><strong>Note:</strong> The XAG community has <a class="external-link" href="https://github.com/XAG-community/standards-drafts/issues/6" target="_blank">proposed <i aria-hidden="true" class="fa fa-external-link"></i></a> (and developed a <a class="external-link" href="https://github.com/XAG-community/XAGl-tagged-address-codec" target="_blank">codec <i aria-hidden="true" class="fa fa-external-link"></i></a> to support) a new <strong>X</strong>-address format that exchanges and wallets could use instead of <a class="external-link" href="https://XAGl.org/source-and-destination-tags.html" target="_blank">destination tags <i aria-hidden="true" class="fa fa-external-link"></i></a>. These "packed" addresses start with an <code>X</code> instead of an <code>r</code>. For more information, see the <a class="external-link" href="https://XAGaddress.info/" target="_blank">XAGL 𝗫-address format <i aria-hidden="true" class="fa fa-external-link"></i></a> site.</p>
</li>
<li>
<p>Uses alphanumeric characters, excluding the number "<code>0</code>" capital letter "<code>O</code>", capital letter "<code>I</code>", and lowercase letter "<code>l</code>"</p>
</li>
<li>Case-sensitive</li>
<li>Includes a 4-byte checksum so that the probability of generating a valid address from random characters is approximately 1 in 2^32</li>
</ul>
<p>For more information, see <a href="accounts.html">Accounts</a> and <a href="base58-encodings.html">base58 Encodings</a>.</p>
<p>Any valid address can <a href="#creating-accounts">become an account in the XAG Ledger</a> by being funded. You can also use an address that has not been funded to represent a <a href="setregularkey.html">regular key</a> or a member of a <a href="multi-signing.html">signer list</a>. Only a funded account can be the sender of a transaction.</p>
<p>Creating a valid address is a strictly mathematical task starting with a key pair. You can generate a key pair and calculate its address entirely offline without communicating to the XAG Ledger or any other party. The conversion from a public key to an address involves a one-way hash function, so it is possible to confirm that a public key matches an address but it is impossible to derive the public key from the address alone. (This is part of the reason why signed transactions include the public key <em>and</em> the address of the sender.)</p>
<p>For more technical details of how to calculate an XAG Ledger address, see <a href="#address-encoding">Address Encoding</a>.</p>
<h3 id="special-addresses">Special Addresses</h3>
<p>Some addresses have special meaning, or historical uses, in the XAG Ledger. In many cases, these are "black hole" addresses, meaning the address is not derived from a known secret key. Since it is effectively impossible to guess a secret key from only an address, any XAG possessed by black hole addresses is lost forever.</p>
<table>
<thead>
<tr>
<th>Address</th>
<th>Name</th>
<th>Meaning</th>
<th>Black Hole?</th>
</tr>
</thead>
<tbody>
<tr>
<td>rrrrrrrrrrrrrrrrrrrrrhoLvTp</td>
<td>ACCOUNT_ZERO</td>
<td>An address that is the XAG Ledger's <a href="base58-encodings.html">base58</a> encoding of the value <code>0</code>. In peer-to-peer communications, <code>rippled</code> uses this address as the issuer for XAG.</td>
<td>Yes</td>
</tr>
<tr>
<td>rrrrrrrrrrrrrrrrrrrrBZbvji</td>
<td>ACCOUNT_ONE</td>
<td>An address that is the XAG Ledger's <a href="base58-encodings.html">base58</a> encoding of the value <code>1</code>. In the ledger, <a href="ripplestate.html">RippleState entries</a> use this address as a placeholder for the issuer of a trust line balance.</td>
<td>Yes</td>
</tr>
<tr>
<td>rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh</td>
<td>The genesis account</td>
<td>When <code>rippled</code> starts a new genesis ledger from scratch (for example, in stand-alone mode), this account holds all the XAG. This address is generated from the seed value "masterpassphrase" which is <a class="external-link" href="https://github.com/ripple/rippled/blob/94ed5b3a53077d815ad0dd65d490c8d37a147361/src/ripple/app/ledger/Ledger.cpp#L184" target="_blank">hard-coded <i aria-hidden="true" class="fa fa-external-link"></i></a>.</td>
<td>No</td>
</tr>
<tr>
<td>rrrrrrrrrrrrrrrrrNAMEtxvNvQ</td>
<td>Ripple Name reservation black-hole</td>
<td>In the past, Ripple asked users to send XAG to this account to reserve Ripple Names.</td>
<td>Yes</td>
</tr>
<tr>
<td>rrrrrrrrrrrrrrrrrrrn5RM1rHd</td>
<td>NaN Address</td>
<td>Previous versions of <a class="external-link" href="https://github.com/ripple/ripple-lib" target="_blank">ripple-lib <i aria-hidden="true" class="fa fa-external-link"></i></a> generated this address when encoding the value <a class="external-link" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN" target="_blank">NaN <i aria-hidden="true" class="fa fa-external-link"></i></a> using the XAG Ledger's <a href="base58-encodings.html">base58</a> string encoding format.</td>
<td>Yes</td>
</tr>
</tbody>
</table>
<h2 id="deletion-of-accounts">Deletion of Accounts</h2>
<p>The <a href="known-amendments.html#deletableaccounts">DeletableAccounts amendment</a> (enabled 2020-05-08) made it possible to delete accounts.</p>
<p>To be deleted, an account must meet the following requirements:</p>
<ul>
<li>The account's <code>Sequence</code> number plus 256 must be less than the current <a href="basic-data-types.html#ledger-index">Ledger Index</a>.</li>
<li>The account must not be linked to any of the following types of <a href="ledger-object-types.html">ledger objects</a> (as a sender or receiver):<ul>
<li><code>RippleState</code></li>
</ul>
</li>
<li>The account must own fewer than 1000 objects in the ledger.</li>
</ul>
<p>After an account has been deleted, it can be re-created in the ledger through the normal method of <a href="#creating-accounts">creating accounts</a>. An account that has been deleted and re-created is no different than an account that has been created for the first time.</p>
<p>Unlike Bitcoin and many other cryptocurrencies, each new version of the XAG Ledger's public ledger chain contains the full state of the ledger, which increases in size with each new account. For that reason, you should not create new XAG Ledger accounts unless necessary. You can recover some of an account's 20 XAG <a href="reserves.html">reserve</a> by deleting the account, but you must still destroy at least 5 XAG to do so.</p>
<p>Institutions who send and receive value on behalf of many users can use <a href="become-an-XAG-ledger-gateway.html#source-and-destination-tags"><strong>Source Tags</strong> and <strong>Destination Tags</strong></a> to distinguish payments from and to their customers while only using one (or a handful) of accounts in the XAG Ledger.</p>
<h2 id="transaction-history">Transaction History</h2>
<p>In the XAG Ledger, transaction history is tracked by a "thread" of transactions linked by a transaction's identifying hash and the ledger index. The <code>AccountRoot</code> ledger object has the identifying hash and ledger of the transaction that most recently modified it; the metadata of that transaction includes the previous state of the <code>AccountRoot</code> node, so it is possible to iterate through the history of a single account this way. This transaction history includes any transactions that modify the <code>AccountRoot</code> node directly, including:</p>
<ul>
<li>Transactions sent by the account, because they modify the account's <code>Sequence</code> number. These transactions also modify the account's XAG balance because of the <a href="transaction-cost.html">transaction cost</a>.</li>
</ul>
<p>The <em>conceptual</em> transaction history of an account also includes transactions that modified the account's owned objects and non-XAG balances. These objects are separate ledger objects, each with their own thread of transactions that affected them. If you have an account's full ledger history, you can follow it forward to find the ledger objects created or modified by it. A "complete" transaction history includes the history of objects owned by a transaction, such as:</p>
<ul>
<li><code>RippleState</code> objects (Trust Lines) connected to the account.</li>
<li><code>DirectoryNode</code> objects, especially the owner directory tracking the account's owned objects.</li>
<li><code>Offer</code> objects, representing the account's outstanding currency-exchange orders in the decentralized exchange</li>
<li><code>SignerList</code> objects, representing lists of addresses that can authorize transactions for the account by <a href="multi-signing.html">multi-signing</a>.</li>
</ul>
<p>For more information on each of these objects, see the <a href="ledger-data-formats.html">Ledger Format Reference</a>.</p>
<h2 id="address-encoding">Address Encoding</h2>
<p class="devportal-callout tip"><strong>Tip:</strong> These technical details are only relevant for people building low-level library software for XAG Ledger compatibility!</p>
<p><a class="external-link" href="https://github.com/ripple/rippled/blob/35fa20a110e3d43ffc1e9e664fc9017b6f2747ae/src/ripple/protocol/impl/AccountID.cpp#L109-L140" target="_blank" title="Source">[Source] <i aria-hidden="true" class="fa fa-external-link"></i></a></p>
<p>XAG Ledger addresses are encoded using <a class="external-link" href="https://en.wikipedia.org/wiki/Base58" target="_blank">base58 <i aria-hidden="true" class="fa fa-external-link"></i></a> with the <em>dictionary</em> <code>rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz</code>. Since the XAG Ledger encodes several types of keys with base58, it prefixes the encoded data with a one-byte "type prefix" (also called a "version prefix") to distinguish them. The type prefix causes addresses to usually start with different letters in base58 format.</p>
<p>The following diagram shows the relationship between keys and addresses:</p>
<p><a href="img/address-encoding.png"><img alt="Master Public Key + Type Prefix → Account ID + Checksum → Address" src="img/address-encoding.png"/></a></p>
<p>The formula for calculating an XAG Ledger address from a public key is as follows. For the complete example code, see <a class="external-link" href="https://github.com/ripple/ripple-dev-portal/blob/master/content/_code-samples/address_encoding/encode_address.js" target="_blank"><code>encode_address.js</code> <i aria-hidden="true" class="fa fa-external-link"></i></a>. For the process of deriving a public key from a passphrase or seed value, see <a href="cryptographic-keys.html#key-derivation">Key Derivation</a>.</p>
<ol>
<li>
<p>Import required algorithms: SHA-256, RIPEMD160, and base58. Set the dictionary for base58.</p>
<pre><code>'use strict';
const assert = require('assert');
const crypto = require('crypto');
const R_B58_DICT = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz';
const base58 = require('base-x')(R_B58_DICT);
assert(crypto.getHashes().includes('sha256'));
assert(crypto.getHashes().includes('ripemd160'));
</code></pre>
</li>
<li>
<p>Start with a 33-byte ECDSA secp256k1 public key, or a 32-byte Ed25519 public key. For Ed25519 keys, prefix the key with the byte <code>0xED</code>.</p>
<pre><code>const pubkey_hex =
'ED9434799226374926EDA3B54B1B461B4ABF7237962EAE18528FEA67595397FA32';
const pubkey = Buffer.from(pubkey_hex, 'hex');
assert(pubkey.length == 33);
</code></pre>
</li>
<li>
<p>Calculate the <a class="external-link" href="https://en.wikipedia.org/wiki/RIPEMD" target="_blank">RIPEMD160 <i aria-hidden="true" class="fa fa-external-link"></i></a> hash of the SHA-256 hash of the public key. This value is the "Account ID".</p>
<pre><code>const pubkey_inner_hash = crypto.createHash('sha256').update(pubkey);
const pubkey_outer_hash = crypto.createHash('ripemd160');
pubkey_outer_hash.update(pubkey_inner_hash.digest());
const account_id = pubkey_outer_hash.digest();
</code></pre>
</li>
<li>
<p>Calculate the SHA-256 hash of the SHA-256 hash of the Account ID; take the first 4 bytes. This value is the "checksum".</p>
<pre><code>const address_type_prefix = Buffer.from([0x00]);
const payload = Buffer.concat([address_type_prefix, account_id]);
const chksum_hash1 = crypto.createHash('sha256').update(payload).digest();
const chksum_hash2 = crypto.createHash('sha256').update(chksum_hash1).digest();
const checksum = chksum_hash2.slice(0,4);
</code></pre>
</li>
<li>
<p>Concatenate the payload and the checksum. Calculate the base58 value of the concatenated buffer. The result is the address.</p>
<pre><code>const dataToEncode = Buffer.concat([payload, checksum]);
const address = base58.encode(dataToEncode);
console.log(address);
// rDTXLQ7ZKZVKz33zJbHjgVShjsBnqMBhmN
</code></pre>
</li>
</ol>
<!-- -->
<!-- -->
<!-- API object types -->
<!-- -->
<!-- -->
<!-- -->
<!-- rippled release notes links -->
</div>
</article>
</main>
<!-- Left sidebar last so it's at the end for mobile -->
<aside class="sidebar col-md-5 col-lg-3 p-0 order-md-1" role="complementary">
<div class="tree_nav">
<!---->
<div class="sidenav_parent">
<a href="concepts.html"> Concepts</a>
</div>
<!---->
<!---->
<div id="sidenav" role="tablist" aria-multiselectable="true">
<!---->
<div class="card">
<div class="card-header" role="tab" id="sidenav_cat_head_2">
<a class="collapsed sidenav_cat_toggler" role="button" data-toggle="collapse" href="#sidenav_collapse_2" aria-expanded="true" aria-controls="sidenav_collapse_2"></a>
<h5 class="card-title">
<a class="sidenav_cat_title" href="introduction.html">Introduction</a>
<!-- <a class="sidenav_cat_title" href="introduction.html">Introduction</a> -->
</h5>
</div><!-- /.card-header -->
<div id="sidenav_collapse_2" class="collapse" role="tabpanel" aria-labelledby="sidenav_cat_head_2">
<div class="card-body">
<ul class="sidebar_pagelist">
<li><a class="nosubcat-page" href="XAG-ledger-overview.html">XAG Ledger Overview</a></li>
<li><a class="nosubcat-page" href="intro-to-consensus.html">Introduction to Consensus</a></li>
<li><a class="nosubcat-page" href="XAG.html">XAG</a></li>
<li><a class="nosubcat-page" href="software-ecosystem.html">Software Ecosystem</a></li>
<li><a class="nosubcat-page" href="technical-faq.html">Technical FAQ</a></li>
</ul>
</div><!-- /.card-body -->
</div><!-- /#sidenav_collapse2 -->
</div><!-- /.card -->
<!---->
<div class="card active">
<div class="card-header" role="tab" id="sidenav_cat_head_8">
<a class="sidenav_cat_toggler" role="button" data-toggle="collapse" href="#sidenav_collapse_8" aria-expanded="true" aria-controls="sidenav_collapse_8"></a>
<h5 class="card-title">
<a class="sidenav_cat_title active-parent" href="payment-system-basics.html">Payment System Basics</a>
<!-- <a class="sidenav_cat_title" href="payment-system-basics.html">Payment System Basics</a> -->
</h5>
</div><!-- /.card-header -->
<div id="sidenav_collapse_8" class="collapse show" role="tabpanel" aria-labelledby="sidenav_cat_head_8">
<div class="card-body">
<ul class="sidebar_pagelist">
<li><a class="subcat-title active" href="#main_content_body">Accounts</a></li>
<li><a class="subpage" href="cryptographic-keys.html">Cryptographic Keys</a></li>
<li><a class="subpage" href="multi-signing.html">Multi-Signing</a></li>
<li><a class="nosubcat-page" href="ledgers.html">Ledgers</a></li>
<li><a class="subcat-title" href="transaction-basics.html">Transaction Basics</a></li>
<li><a class="subpage" href="transaction-cost.html">Transaction Cost</a></li>
<li><a class="subpage" href="finality-of-results.html">Finality of Results</a></li>
<li><a class="subpage" href="source-and-destination-tags.html">Source and Destination Tags</a></li>
</ul>
</div><!-- /.card-body -->
</div><!-- /#sidenav_collapse8 -->
</div><!-- /.card -->
<!---->
<!---->
<div class="card">
<div class="card-header" role="tab" id="sidenav_cat_head_28">
<a class="collapsed sidenav_cat_toggler" role="button" data-toggle="collapse" href="#sidenav_collapse_28" aria-expanded="true" aria-controls="sidenav_collapse_28"></a>
<h5 class="card-title">
<a class="sidenav_cat_title" href="issued-currencies.html">Issued Currencies</a>
<!-- <a class="sidenav_cat_title" href="issued-currencies.html">Issued Currencies</a> -->
</h5>
</div><!-- /.card-header -->
<div id="sidenav_collapse_28" class="collapse" role="tabpanel" aria-labelledby="sidenav_cat_head_28">
<div class="card-body">
<ul class="sidebar_pagelist">
<li><a class="nosubcat-page" href="issued-currencies-overview.html">Issued Currencies Overview</a></li>
<li><a class="nosubcat-page" href="trust-lines-and-issuing.html">Trust Lines and Issuing</a></li>
<li><a class="nosubcat-page" href="authorized-trust-lines.html">Authorized Trust Lines</a></li>
<li><a class="nosubcat-page" href="freezes.html">Freezing Issued Currencies</a></li>
<li><a class="nosubcat-page" href="rippling.html">Rippling</a></li>
<li><a class="nosubcat-page" href="transfer-fees.html">Transfer Fees</a></li>
<li><a class="nosubcat-page" href="issuing-and-operational-addresses.html">Issuing and Operational Addresses</a></li>
<li><a class="nosubcat-page" href="paths.html">Paths</a></li>
<li><a class="nosubcat-page" href="demurrage.html">Demurrage</a></li>
</ul>
</div><!-- /.card-body -->
</div><!-- /#sidenav_collapse28 -->
</div><!-- /.card -->
<!---->
<!---->
</div><!-- /#sidenav -->
</div><!-- /.tree_nav --> </aside>
</div><!--/.row (main layout)-->
</div>
<!-- Jump to top button -->
<a href="#main_content_wrapper" class="jump-to-top btn btn-primary btn-lg" role="button" title="Jump to top of page">Top</a>
<script type="text/javascript" src="assets/js/jump-to-top.js"></script>
<!-- Non-blocking resources -->
<!-- Bootstrap JS -->
<script src="assets/vendor/bootstrap.min.js"></script>
<!-- fontawesome icons -->
<link rel="stylesheet" href="assets/vendor/fontawesome/css/font-awesome.min.css" />
<!-- Algolia DocSearch -->
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
<script type="text/javascript"> docsearch({
apiKey: '70de5b9b8ef95460f3c6e04054b325b2',
indexName: 'XAGl',
inputSelector: '#topsearchbar',
algoliaOptions: { 'facetFilters': ["lang:en"] },
debug: false
});
</script>
<script type="application/javascript">
gtag('set', {'content_group1': 'Content Docs'});
</script>
</body>
</html>