monero-docs/Public-Address/index.html
2017-12-22 23:22:35 +01:00

320 lines
13 KiB
HTML

<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Piotr 'Qertoip' Włodarek">
<link rel="shortcut icon" href="../img/favicon.ico">
<title>Public Address - Monero Docs</title>
<link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="../css/theme.css" type="text/css" />
<link rel="stylesheet" href="../css/theme_extra.css" type="text/css" />
<link rel="stylesheet" href="../css/highlight.css">
<script>
// Current page data
var mkdocs_page_name = "Public Address";
var mkdocs_page_input_path = "Public-Address.md";
var mkdocs_page_url = "/Public-Address/";
</script>
<script src="../js/jquery-2.1.1.min.js"></script>
<script src="../js/modernizr-2.8.3.min.js"></script>
<script type="text/javascript" src="../js/highlight.pack.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-nav-search">
<a href=".." class="icon icon-home"> Monero Docs</a>
<div role="search">
<form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1">
<a class="" href="..">Unofficial Monero Documentation</a>
</li>
<li class="toctree-l1">
<a class="" href="../Monero-Base58/">Base58</a>
</li>
<li class="toctree-l1">
<a class="" href="../Multisignature/">Multisignature</a>
</li>
<li class="toctree-l1 current">
<a class="current" href="./">Public Address</a>
<ul class="subnav">
<li class="toctree-l2"><a href="#public-address">Public Address</a></li>
<ul>
<li><a class="toctree-l3" href="#standard-address">Standard address</a></li>
<li><a class="toctree-l3" href="#integrated-address">Integrated address</a></li>
<li><a class="toctree-l3" href="#subaddress">Subaddress</a></li>
<li><a class="toctree-l3" href="#caveates">Caveates</a></li>
</ul>
</ul>
</li>
<li class="toctree-l1">
<a class="" href="../Subaddress/">Subaddress</a>
</li>
<li class="toctree-l1">
<a class="" href="../Technical-Specs/">Technical Specs</a>
</li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="..">Monero Docs</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="..">Docs</a> &raquo;</li>
<li>Public Address</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/monerodocs/monerodocs/edit/master/docs/Public-Address.md"> Edit on monerodocs/monerodocs</a>
</li>
</ul>
<hr/>
</div>
<div role="main">
<div class="section">
<h1 id="public-address">Public Address</h1>
<p>Monero public address is what you publish to get paid.</p>
<p>An address can be generated offline and for free. It boils down to generating a large random number representing your private spending key.</p>
<p>Publishing your Monero address does <strong>not</strong> endanger your privacy. That's because in Monero transactions go to stealth addresses which are decoupled from your public address.</p>
<p>There are a few types of public addresses in Monero:</p>
<ul>
<li>Standard address - the basic type of the address, also refered to as raw address</li>
<li>Integrated address - embeds payment ID so you can learn for what you are being paid</li>
<li>Subaddress - allows for organizing your funds in subaccounts within a single wallet</li>
</ul>
<h2 id="standard-address">Standard address</h2>
<p>Monero standard ("raw") address is composed of two public keys:</p>
<ul>
<li>public spend key</li>
<li>public view key</li>
</ul>
<p>It also contains a checksum and a "network byte" which actually identifies both the network and the address type.</p>
<p>Data structure (<a href="https://github.com/monero-project/monero/blob/f7b9f44c1b0d53170fd7f53d37fc67648f3247a2/src/cryptonote_basic/cryptonote_basic_impl.cpp#L159">src</a>):</p>
<table>
<thead>
<tr>
<th>Index</th>
<th>Size in bytes</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
<td>identifies the network and address type; <a href="https://github.com/monero-project/monero/blob/793bc973746a10883adb2f89827e223f562b9651/src/cryptonote_config.h#L149">18</a> - main chain; <a href="https://github.com/monero-project/monero/blob/793bc973746a10883adb2f89827e223f562b9651/src/cryptonote_config.h#L161">53</a> - test chain</td>
</tr>
<tr>
<td>1</td>
<td>32</td>
<td>public spend key</td>
</tr>
<tr>
<td>33</td>
<td>32</td>
<td>public view key</td>
</tr>
<tr>
<td>65</td>
<td>4</td>
<td>checksum (<a href="https://github.com/monero-project/monero/blob/8f1f43163a221153403a46902d026e3b72f1b3e3/src/common/base58.cpp#L261">Keccak-f[1600] hash</a> of the previous 65 bytes, trimmed to first <a href="https://github.com/monero-project/monero/blob/8f1f43163a221153403a46902d026e3b72f1b3e3/src/common/base58.cpp#L53">4</a> bytes)</td>
</tr>
</tbody>
</table>
<p>It totals to 69 bytes. The bytes are then encoded (<a href="https://github.com/monero-project/monero/blob/8f1f43163a221153403a46902d026e3b72f1b3e3/src/common/base58.cpp#L240">src</a>) in <a href="../Monero-Base58">Monero specific Base58</a> format, resulting in a 95 chars long string. Example standard address:</p>
<p><code>4AdUndXHHZ6cfufTMvppY6JwXNouMBzSkbLYfpAV5Usx3skxNgYeYTRj5UzqtReoS44qo9mtmXCqY45DJ852K5Jv2684Rge</code></p>
<p>Reference:</p>
<ul>
<li><a href="https://xmr.llcoins.net/addresstests.html">https://xmr.llcoins.net/addresstests.html</a></li>
</ul>
<h2 id="integrated-address">Integrated address</h2>
<p>Monero integrated address embeds a compact payment ID.</p>
<p>Monero integrated address obsoletes the former practice of using full 32-bytes payment ID in a transaction extra field (where it was not encrypted).</p>
<p>Data structure (<a href="https://github.com/monero-project/monero/blob/f7b9f44c1b0d53170fd7f53d37fc67648f3247a2/src/cryptonote_basic/cryptonote_basic_impl.cpp#L172">src</a>):</p>
<table>
<thead>
<tr>
<th>Index</th>
<th>Size in bytes</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
<td>identifies the network and address type; <a href="https://github.com/monero-project/monero/blob/793bc973746a10883adb2f89827e223f562b9651/src/cryptonote_config.h#L150">19</a> - main chain; <a href="https://github.com/monero-project/monero/blob/793bc973746a10883adb2f89827e223f562b9651/src/cryptonote_config.h#L162">54</a> - test chain</td>
</tr>
<tr>
<td>1</td>
<td>32</td>
<td>public spend key</td>
</tr>
<tr>
<td>33</td>
<td>32</td>
<td>public view key</td>
</tr>
<tr>
<td>65</td>
<td>8</td>
<td>compact payment ID - 8 bytes randomly generated by the recipient; note that it does not need encryption in the address itself but it is hidden in a transaction paying to integrated address to prevent linking payment with the address by external observers</td>
</tr>
<tr>
<td>73</td>
<td>4</td>
<td>checksum (<a href="https://github.com/monero-project/monero/blob/8f1f43163a221153403a46902d026e3b72f1b3e3/src/common/base58.cpp#L261">Keccak-f[1600] hash</a> of the previous 73 bytes, trimmed to first <a href="https://github.com/monero-project/monero/blob/8f1f43163a221153403a46902d026e3b72f1b3e3/src/common/base58.cpp#L53">4</a> bytes)</td>
</tr>
</tbody>
</table>
<p>It totals to 78 bytes. The bytes are then encoded (<a href="https://github.com/monero-project/monero/blob/8f1f43163a221153403a46902d026e3b72f1b3e3/src/common/base58.cpp#L240">src</a>) in <a href="../Monero-Base58">Monero specific Base58</a> format, resulting in a 106 chars long string. Example integrated address:</p>
<p><code>4LL9oSLmtpccfufTMvppY6JwXNouMBzSkbLYfpAV5Usx3skxNgYeYTRj5UzqtReoS44qo9mtmXCqY45DJ852K5Jv2bYXZKKQePHES9khPK</code></p>
<p>Reference:</p>
<ul>
<li>question on <a href="https://monero.stackexchange.com/questions/3179/what-is-an-integrated-address">StackExchenge</a> </li>
</ul>
<h2 id="subaddress">Subaddress</h2>
<p>Subaddresses serve two purposes.</p>
<h3 id="subadresses-group-incoming-payments">Subadresses group incoming payments</h3>
<p>Think income streams.</p>
<p>Subaddresses allow you to group your incoming transactions within a single wallet.</p>
<p>You may want to organize your incoming funds into a streams like "donations", "work", "speculation", etc.</p>
<p>At first glance this is similar to subaccounts in your bank account. There is a very important difference though.</p>
<p>In Monero funds don't really sit on public addresses. Public addresses are conceptually a gateway or a routing mechanism. Funds sit on the unspent outputs. Thus, a single transaction can aggregate and spent outputs from multiple addresses. This means you can spend more than any individual address balance.</p>
<h3 id="subadresses-prevent-payer-from-linking-your-payouts-together">Subadresses prevent payer from linking your payouts together</h3>
<p>To prevent the payer from linking your payouts together simply generate a new subaddress for each payout. This way services like <a href="https://shapeshift.io">Shapeshift</a> wouldn't know it is you again receving Monero.</p>
<p>The advantage over creating multiple wallets is that you only have a single seed and wallet cache to manage. All subaddresses can be derived from the wallet seed.</p>
<p>Each subaddress has an index (with 0 being the base standard address). User interface allows to assign convenience labels to subaddresses. However, labels are not preserved when recreating from seed.</p>
<h2 id="caveates">Caveates</h2>
<ul>
<li>Subaddress cannot be used to receive transactions having multiple destinations (e.g. pool payouts). Only the standard address (the one with index == 0) can receive such transactions.</li>
<li>It is not recommended to sweep all the balances of subaddress to main address in a single transaction. That links the subaddresses together on the blockchain. However, this only concerns privacy against specific sender and the situation will never get worse than not using subaddresses in the first place. If you need to join funds while preserving maximum privacy do it with individual transactions (one per subaddress).</li>
</ul>
<table>
<thead>
<tr>
<th>Index</th>
<th>Size in bytes</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>1</td>
<td>identifies the network and address type; <a href="https://github.com/monero-project/monero/blob/784f7b07f05a645d43f62ed3a9cefda4b0c57825/src/cryptonote_config.h#L153">42</a> - main chain; <a href="https://github.com/monero-project/monero/blob/784f7b07f05a645d43f62ed3a9cefda4b0c57825/src/cryptonote_config.h#L167">63</a> - test chain</td>
</tr>
</tbody>
</table>
<p>Reference:</p>
<ul>
<li><a href="https://github.com/monero-project/monero/pull/2056">https://github.com/monero-project/monero/pull/2056</a></li>
<li><a href="https://www.reddit.com/r/Monero/comments/5vgjs2/subaddresses_and_disposable_addresses/">https://www.reddit.com/r/Monero/comments/5vgjs2/subaddresses_and_disposable_addresses/</a></li>
</ul>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../Subaddress/" class="btn btn-neutral float-right" title="Subaddress">Next <span class="icon icon-circle-arrow-right"></span></a>
<a href="../Multisignature/" class="btn btn-neutral" title="Multisignature"><span class="icon icon-circle-arrow-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="http://www.mkdocs.org">MkDocs</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" style="cursor: pointer">
<span class="rst-current-version" data-toggle="rst-current-version">
<span><a href="../Multisignature/" style="color: #fcfcfc;">&laquo; Previous</a></span>
<span style="margin-left: 15px"><a href="../Subaddress/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script>var base_url = '..';</script>
<script src="../js/theme.js"></script>
<script src="../search/require.js"></script>
<script src="../search/search.js"></script>
</body>
</html>