Skip to content
Snippets Groups Projects
Verified Commit a8d36567 authored by Diego Salazar's avatar Diego Salazar
Browse files

Enabled all site except user guides to be multilingual ready

- Moved technical specs out of 'Resources' and into root
parent 5cd5e7ea
Branches
No related tags found
No related merge requests found
Showing
with 3151 additions and 1 deletion
......@@ -26,7 +26,7 @@ gems:
# jekyll-multiple-languages-plugin settings:
languages: ["en", "es"]
exclude_from_localizations: ["img", "css", "fonts", "media", "404", "feed.xml", "404", "meta", "forum-funding-system", "_posts"]
exclude_from_localizations: ["img", "css", "fonts", "media", "404", "feed.xml", "404", "meta", "forum-funding-system", "_posts", "legal"]
......
<div class="downloads">
<div class="container description" markdown="1">
If you need help choosing the correct application, please click [here](https://www.reddit.com/r/Monero/comments/64b5lf/what_is_the_best_monero_wallet/) for a quick answer, then select the appropriate release for your operating system below.
Note: the SHA256 hashes are listed by the downloads for convenience, but a GPG-signed list of the hashes is at [getmonero.org/downloads/hashes.txt](https://getmonero.org/downloads/hashes.txt) and should be treated as canonical, with the signature checked against the appropriate GPG key in the source code (in /utils/gpg_keys).
</div>
<div class="container full downdropdown">
<div class="info-block download-nav row middle-xs between-xs" id="selections">
<div class="col"><a href="#windows">Windows</a></div>
<div class="col"><a href="#mac">Mac</a></div>
<div class="col"><a href="#linux">Linux</a></div>
<div class="col"><a href="#arm">Arm (v7 & 8)</a></div>
<div class="col"><a href="#bsd">BSD</a></div>
<div class="col"><a href="#source">Source & Blockchain</a></div>
<div class="col"><a href="#mobilelight">Mobile & Light</a></div>
<div class="col"><a href="#hardware">Hardware</a></div>
</div>
</div>
<div class="container full">
<div class="info-block row center-xs" id="pick-platform">
<div class="mob dropdowndrop">
<input id="check01" type="checkbox" name="menu"/>
<label for="check01">Choose your OS</label>
<ul id="menu">
<li><a href="#windows">Windows</a></li>
<li><a href="#mac">Mac</a></li>
<li><a href="#linux">Linux</a></li>
<li><a href="#arm">Arm (v7 & 8)</a></li>
<li><a href="#bsd">BSD</a></li>
<li><a href="#source">Source & Blockchain</a></li>
<li><a href="#mobilelight">Mobile & Light</a></li>
<li><a href="#hardware">Hardware</a></li>
</ul>
</div>
</div>
</div>
<div class="download-platforms">
{% for data_downloads in site.data.downloads %}
<section class="container full" id="{{ data_downloads.id}}">
<div class="info-block">
<h2>
{% if data_downloads.icon != null %}
<span class="{{data_downloads.icon}}"></span>
{% endif %}
{{data_downloads.platform}}
</h2>
{% if data_downloads.version != null %}
<p class="text-center">Current Version: {{ data_downloads.version }} {{ data_downloads.tag }}</p>
{%endif%}
{% if data_downloads.cli_hash == "source" %}
<div class="row">
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
<h4 id="{{ data_downloads.platform | slugify }}">
<a href="{{ data_downloads.cli_url }}">Source Code</a>
</h4>
</div>
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12" markdown="1">
If you'd prefer to use a blockchain bootstrap, instead of syncing from scratch, you can [use this link for the most current bootstrap](https://downloads.getmonero.org/blockchain.raw). It is typically much faster to sync from scratch, however, and it also takes a lot less RAM (import is very greedy).
</div>
</div>
{% elsif data_downloads.id == "hardware" %}
<div class="row">
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
<p>The Monero community has just funded a <a href="https://forum.getmonero.org/9/work-in-progress/88149/dedicated-monero-hardware-wallet" target="_blank" rel="noreferrer, noopener">Dedicated Hardware Wallet</a> which is now in progress. As well, Ledger is working on <a href="https://github.com/LedgerHQ/blue-app-monero" target="_blank" rel="noreferrer, noopener">integrating Monero into their hardware wallets</a>.</p>
</div></div>
{% elsif data_downloads.id == "mobilelight" %}
<div class="row">
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
<p>The following are mobile or light wallets that are deemed safe by trusted members of the community. If there is a wallet that is not on here, you can request the community check it out. Go to our <a href="/community/hangouts/">Hangouts</a> page to see where we are.</p>
</div>
</div>
<div class="row center-xs">
<div class="col-xs-12">
<a href="https://mymonero.com"><img src="/img/mymonero.png" alt="MyMonero Logo"></a>
</div>
</div>
{% elsif data_downloads.gui_hash == nil and data_downloads.cli_hash != nil %}
<div class="row"><div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12"><h4 id="{{ data_downloads.platform | slugify }}">
<a href="//downloads.getmonero.org/cli/{{ data_downloads.cli_url }}"> {{ data_downloads.platform }} (Command-line Tools Only)</a>
</h4></div></div>
<div class="row"><div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
<p><strong>SHA256 Hash:</strong></p> <p class="hash"> {{ data_downloads.cli_hash }}</p></div>
</div>
{% elsif data_downloads.gui_hash != nil and data_downloads.cli_hash == nil %}
<div class="row">
<h4 id="{{ data_downloads.platform | slugify }}">
<a href="//downloads.getmonero.org/gui/{{ data_downloads.gui_url }}">{{ data_downloads.platform }}</a>
</h4></div>
<div class="row">
<p><strong>SHA256 Hash:</strong></p> <p class="hash"> {{ data_downloads.gui_hash }}</p>
</div>
{% elsif data_downloads.gui_hash != nil and data_downloads.cli_hash != nil %}
<div class="row start-md">
<div class="col-md-6 col-sm-12" >
<h4 id="{{ data_downloads.platform | slugify }}">
<a href="//downloads.getmonero.org/gui/{{ data_downloads.gui_url }}">{{ data_downloads.platform }}</a>
</h4>
<p><strong>SHA256 Hash (GUI):</strong></p> <p class="hash"> {{ data_downloads.gui_hash }}</p>
</div>
<div class="col-md-6 col-sm-12">
<h4>
<a href="//downloads.getmonero.org/cli/{{ data_downloads.cli_url }}">{{ data_downloads.platform }} (Command-Line Tools Only)</a>
</h4>
<p><strong>SHA256 Hash (CLI):</strong></p> <p class="hash"> {{ data_downloads.cli_hash }}</p>
</div>
</div>
{% endif %}
</div>
</section>
{% endfor %}
</div>
<a href="#" class="arrow-up"><i></i></a>
</div>
<section class="container">
<div class="row">
<!-- left two-thirds block-->
<div class="full">
<div class="info-block text-adapt">
<div class="row center-xs">
<div class="col">
<h2>Instructions for the Command-Line Interface</h2>
</div>
</div>
<div markdown="1">
### The Basics
Monero works a little differently to what you may have become accustomed to from other @cryptocurrencies. In the case of a digital currency like Bitcoin and its many derivatives merchant payment systems will usually create a new recipient @address for each payment or user.
However, because Monero has @stealth-addresses there is no need to have separate recipient addresses for each payment or user, and a single @account address can be published. Instead, when receiving payments a merchant will provide the person paying with a "payment ID".
A @payment-ID is a hexadecimal string that is 64 characters long, and is normally randomly created by the merchant. An example of a payment ID is:
```
666c75666679706f6e7920697320746865206265737420706f6e792065766572
```
### Checking for a Payment in monero-wallet-cli
If you want to check for a payment using monero-wallet-cli you can use the "payments" command followed by the payment ID or payment IDs you want to check. For example:
```
[wallet 49VNLa]: payments 666c75666679706f6e7920697320746865206265737420706f6e792065766572
payment transaction height amount unlock time
666c75666679706f6e79206973207 7ba4cd810c9b4096869849458181e98e 441942 30.00000 0
[wallet 49VNLa]: █
```
If you need to check for payments programmatically, then details follow the next section.
### Receiving a Payment Step-by-Step
* Generate a random 64 character hexadecimal string for the payment
* Communicate the payment ID and Monero address to the individual who is making payment
* Check for the payment using the "payments" command in monero-wallet-cli
### Checking for a Payment Programmatically
In order to check for a payment programmatically you can use the get_payments or get_bulk_payments JSON RPC API calls.
*get_payments*: this requires a payment_id parameter with a single payment ID.
*get_bulk_payments*: this is the preferred method, and requires two parameters, payment_ids - a JSON array of payment IDs - and an optional min_block_height - the block height to scan from.
An example of returned data is as follows:
```
[ monero->~ ]$ curl -X POST http://127.0.0.1:18500/json_rpc -d '{"jsonrpc":"2.0","method":"get_bulk_payments","id":"test", "params":{"payment_ids": ["666c75666679706f6e7920697320746865206265737420706f6e792065766572"]}}' -H "Content-Type: application/json"
{
"id": "test",
"jsonrpc": "2.0",
"result": {
"payments": [{
"amount": 30000000000000,
"block_height": 441942,
"payment_id": "666c75666679706f6e7920697320746865206265737420706f6e792065766572",
"tx_hash": "7ba4cd810c9b4096869849458181e98e18b6474ab66415de0f4ccf7ab1162fdf",
"unlock_time": 0
}]
}
}
```
It is important to note that the amounts returned are in base Monero units and not in the display units normally used in end-user applications. Also, since a transaction will typically have multiple outputs that add up to the total required for the payment, the amounts should be grouped by the tx_hash or the payment_id and added together. Additionally, as multiple outputs can have the same amount, it is imperative not to try and filter out the returned data from a single get_bulk_payments call.
Before scanning for payments it is useful to check against the daemon RPC API (the get_info RPC call) to see if additional blocks have been received. Typically you would want to then scan only from that received block on by specifying it as the min_block_height to get_bulk_payments.
### Programatically Scanning for Payments
* Get the current block height from the daemon, only proceed if it has increased since our last scan
* Call the get_bulk_payments RPC API call with our last scanned height and the list of all payment IDs in our system
* Store the current block height as our last scanned height
* Remove duplicates based on transaction hashes we have already received and processed
</div>
</div>
</div>
<!-- end right one-third block-->
</div>
</section>
\ No newline at end of file
<div markdown="1" class="text-center container description">
Monero is an open-source, community-driven project. Described below are several ways to support the project.
</div>
<div class="contribute">
<section class="container">
<div class="row">
<!-- full block-->
<div class="full col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="info-block text-adapt">
<div class="row center-xs">
<div class="col"><h2>Support the Network</h2></div>
</div>
<div class="row start-xs" markdown="1">
### Develop
Monero is primarily written in C++. As it is a decentralized project, anyone is welcome to add or make changes to existing code. Pull requests are merged based on community consensus. See the <a href="https://github.com/monero-project"> repositories</a> and outstanding <a href="https://github.com/monero-project/monero/issues">issues</a>.
### Run a Full Node
Run monerod with port 18080 open. Running a full node ensures maximum privacy when transacting with Monero. It also improves distribution of the blockchain to new users.
### Mine
Mining ensures the Monero network remains decentralized and secure. In the Monero graphical user interface and command-line interface, background mining may be activated. Additional resources for mining may be viewed [here](https://reddit.com/r/MoneroMining).
</div>
</div>
</div>
<!-- end full block-->
<!-- full block-->
<div class="full col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="info-block text-adapt">
<div class="row center-xs">
<div class="col">
<h2>View the Forum Funding System</h2>
</div>
</div>
<div class="row start-xs">
<p>Monero utilizes a <a href="https://forum.getmonero.org">forum funding system</a> whereby projects are proposed for development and community-funded. Funding is held in escrow and remunerated to developers once programming milestones are achieved. Anyone may generate new proposals or fund existing ones.</p>
</div>
</div>
</div>
<!-- full block-->
<!-- full block-->
<div class="full col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="info-block text-adapt">
<div class="row center-xs">
<div class="col">
<h2>Donate</h2>
</div>
</div>
<div class="row start-xs">
<p>Ongoing development is supported by donations and <a href="/community/sponsorships/">sponsorships</a>.</p>
</div>
<div class="row center-xs">
<div class="col-lg-6">
<img src="/img/donate-monero.png" alt=""/>
</div>
<div class="col-lg-6">
<img src="/img/donate-bitcoin.png" alt=""/>
</div>
</div>
<div class="row start-xs">
<div class="col-xs-12">
<h3>Donating Monero</h3>
<p>Donations may be sent to donate.getmonero.org or 44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A</p>
</div>
</div>
<div class="row start-xs">
<div class="col-xs-12">
<h3>Donating Bitcoin</h3>
<p>Donations may be sent to donate.getmonero.org or 1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H</p>
</div>
</div>
<div class="row start-xs">
<div class="col-xs-12">
<h3>Other</h3>
<p>E-mail <a href="mailto:dev@getmonero.org">dev@getmonero.org</a> for alternative means of donating or if you would like to become a sponsor for the Monero Project.</p>
</div>
</div>
</div>
</div>
<!-- full block-->
</div>
</section>
</div>
<div class="tab">
<input id="tab-one" type="checkbox" name="tabs" class="accordion">
<label for="tab-one" class="accordion">How does Monero have value?</label>
<div class="tab-content" markdown="1">
Monero has value because people are willing to buy it. If no one is willing to buy Monero, then it will not have any value. Monero’s price increases if demand exceeds supply, and it decreases if supply exceeds demand.
</div>
</div>
<div class="tab">
<input id="tab-two" type="checkbox" name="tabs" class="accordion">
<label for="tab-two" class="accordion">How can I get Monero?</label>
<div class="tab-content" markdown="1">
You can buy Monero from an exchange or from an individual. Alternatively, you can try mining Monero to get coins from the block reward.
</div>
</div>
<div class="tab">
<input id="tab-three" type="checkbox" name="tabs" class="accordion">
<label for="tab-three" class="accordion">What is a mnemonic seed?</label>
<div class="tab-content" markdown="1">
A mnemonic seed is a set of 25 words that can be used to restore your account anywhere. Keep these words safe and do not share them with someone else. You can use this seed to restore your account, even if your computer crashes.
</div>
</div>
<div class="tab">
<input id="tab-four" type="checkbox" name="tabs" class="accordion">
<label for="tab-four" class="accordion">How is Monero’s privacy different from other coins?</label>
<div class="tab-content" markdown="1">
Monero uses three different privacy technologies: ring signatures, ring confidential transactions (RingCT), and stealth addresses. These hide the sender, amount, and receiver in the transaction, respectively. All transactions on the network are private by mandate; there is no way to accidentally send a transparent transaction. This feature is exclusive to Monero. You do not need to trust anyone else with your privacy.
</div>
</div>
<div class="tab">
<input id="tab-five" type="checkbox" name="tabs" class="accordion">
<label for="tab-five" class="accordion">Why is my wallet taking so long to sync?</label>
<div class="tab-content" markdown="1">
If you are running a full node locally, you need to copy the entire blockchain to your computer. This can take a long time, especially on an old hard drive or slow internet connection. If you are using a remote node, your computer still needs to request a copy of all the outputs, which can take several hours. Be patient, and if you would like to sacrifice some privacy for faster sync times, consider using a lightweight wallet instead.
</div>
</div>
<div class="tab">
<input id="tab-six" type="checkbox" name="tabs" class="accordion">
<label for="tab-six" class="accordion">What is the different between a lightweight and a normal wallet?</label>
<div class="tab-content" markdown="1">
For a lightweight wallet, you give your view key to a node, who scans the blockchain and looks for incoming transactions to your account on your behalf. This node will know when you receive money, but it will not know how much you receive, who you received it from, or who you are sending money to. Depending on your wallet software, you may be able to use a node you control to avoid privacy leaks. For more privacy, use a normal wallet, which can be used with your own node.
</div>
</div>
<div class="tab">
<input id="tab-seven" type="checkbox" name="tabs" class="accordion">
<label for="tab-seven" class="accordion">How is Monero different from Bitcoin?</label>
<div class="tab-content" markdown="1">
Monero is not based on Bitcoin. It is based on the CryptoNote protocol. Bitcoin is a completely transparent system, where people can see exactly how much money is being sent from one user to another. Monero hides this information to protect user privacy in all transactions. It also has a dynamic block size and dynamic fees, an ASIC-resistant proof of work, and a tail coin emission, among several other changes.
</div>
</div>
<div class="tab">
<input id="tab-eight" type="checkbox" name="tabs" class="accordion">
<label for="tab-eight" class="accordion">Does Monero have a block size limit?</label>
<div class="tab-content" markdown="1">
No, Monero does not have a hard block size limit. Instead, the block size can increase or decrease over time based on demand. It is capped at a certain growth rate to prevent outrageous growth.
</div>
</div>
<div class="tab">
<input id="tab-nine" type="checkbox" name="tabs" class="accordion">
<label for="tab-nine" class="accordion">What is a blockchain?</label>
<div class="tab-content" markdown="1">
A blockchain is a system that stores a copy of all transaction history on the Monero network. Every two minutes, a new block with the latest transaction information is added to the blockchain. This chain allows the network to verify the amount of money accounts have and make it resilient to attacks and centralization attempts.
</div>
</div>
<div class="tab">
<input id="tab-ten" type="checkbox" name="tabs" class="accordion">
<label for="tab-ten" class="accordion">What is Kovri?</label>
<div class="tab-content" markdown="1">
Kovri is an I2P router written in C++. I2P is a hidden network like Tor with several technical differences. Kovri is an independent project of Monero, but it will work with Monero and several other projects. Kovri hides the transaction broadcast, so other nodes do not know who created transactions. In adversarial conditions, Kovri can be used to hide all Monero traffic through I2P, which would prevent people from knowing Monero is being used. Kovri is currently in alpha, and it is not yet fully integrated in Monero. Learn more about Kovri at the [project website.](https://getkovri.org)
</div>
</div>
<div class="tab">
<input id="tab-eleven" type="checkbox" name="tabs" class="accordion">
<label for="tab-eleven" class="accordion">What is fungibility, and why is it important?</label>
<div class="tab-content" markdown="1">
Fungibility is a simple property of money such that there are no differences between two amounts of the same value. If two people exchanged a 10 and two 5’s, then no one would lose out. However, let’s suppose that everyone knows the 10 was previously used in a ransomware attack. Is the other person still going to make the trade? Probably not, even if the person with the 10 has no connection with the ransomware. This is a problem, since the receiver of money needs to constantly check the money they are receiving to not end up with tainted coins. Monero is fungible, which means people do not need to go through this effort.
</div>
</div>
<div class="tab">
<input id="tab-twelve" type="checkbox" name="tabs" class="accordion">
<label for="tab-twelve" class="accordion">If Monero is so private how do we know they're not being created out of thin air?</label>
<div class="tab-content" markdown="1">
In Monero, every transaction output is uniquely associated with a key image that can only be generated by the holder of that output. Key images that are used more than once are rejected by the miners as double-spends and cannot be added to a valid block. When a new transaction is received, miners verify that the key image does not already exist for a previous transaction to ensure it's not a double-spend.
We can also know that transaction amounts are valid even though the value of the inputs that you are spending and the value of the outputs you are sending are encrypted (these are hidden to everyone except the recipient). Because the amounts are encrypted using Pedersen commitments what this means is that no observers can tell the amounts of the inputs and outputs, but they can do math on the Pedersen commitments to determine that no Monero was created out of thin air.
As long as the encrypted output amounts you create is equal to the sum of the inputs that are being spent (which include an output for the recipient and a change output back to yourself and the unencrypted transaction fee), then you have a legitimate transaction and know no Monero is being created out of thin air. Pedersen commitments mean that the sums can be verified as being equal, but the Monero value of each of the sums and the Monero value of the inputs and outputs individually are undeterminable.
</div>
</div>
<div class="mining">
<div class="center-xs container description">
<p>Monero is a cryptocurrency that relies on proof-of-work mining to achieve distributed consensus. Below you'll find some information and resources on how to begin mining.</p>
<p><strong>The Monero Project does not endorse any particular pool, software, or hardware, and the content below is provided for informational purposes only.</strong></p>
</div>
<section class="container">
<div class="row">
<!-- full block-->
<div class="full col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col">
<h2>Support</h2>
</div>
</div>
<div class="row center-xs">
<p>See <a href="/community/hangouts/"> Hangouts</a>, <a href="https://www.reddit.com/r/MoneroMining/" target="_blank" rel="noreferrer noopener">/r/moneromining</a> and <a href="irc://chat.freenode.net/#monero-pools" target="_blank" rel="noreferrer noopener">#monero-pools</a>.</p>
</div>
</div>
</div>
<!-- end full block -->
</div>
</section>
<section class="container">
<div class="row">
<div class="left half no-pad-sm col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col">
<h2>Pools</h2>
</div>
</div>
<div class="row center-xs">
<p>A listing of trusted Monero pools is found <a href="http://moneropools.com/"> here</a>.</p>
</div>
</div>
</div>
<div class="right half col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col">
<h2>Hardware Benchmarking</h2>
</div>
</div>
<div class="row center-xs">
<p>See <a href="http://monerobenchmarks.info/">here</a> for a listing of GPUs/CPUs and their respective hashrates.</p>
</div>
</div>
</div>
</div>
</section>
<section class="container">
<div class="row">
<!-- full block-->
<div class="full col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col">
<h2>Mining Software</h2>
</div>
</div>
<div class="row center-xs">
<p>Note that some miners may have developer fees.</p>
</div>
<div class="row center-xs">
<p><a href="https://github.com/fireice-uk/xmr-stak" target="_blank" rel="noreferrer noopener">XMR Stak</a></p>
<p><a href="https://github.com/xmrig/xmrig" target="_blank" rel="noreferrer noopener">XMRig</a></p>
<p><a href="https://github.com/xmrig/xmrig-amd" target="_blank" rel="noreferrer noopener">XMRig AMD</a></p>
<p><a href="https://github.com/xmrig/xmrig-nvidia" target="_blank" rel="noreferrer noopener">XMRig NVIDIA</a></p>
</div>
</div>
</div>
<!-- end full block -->
</div>
</section>
</div>
\ No newline at end of file
<div class="text-center container description">
<p>Transacting with Monero can be made easy. This page is designed to guide users in that process.</p>
</div>
<div class="using">
<section class="container">
<div class="row">
<!-- full block-->
<div class="full col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="info-block text-adapt">
<div class="row center-xs">
<div class="col">
<h2>1. Learn</h2>
</div>
</div>
<div class="row start-xs">
<p>Monero is a secure, private, and untraceable cryptocurrency. The developers and community are committed to protecting these values. Learn more by reading the <a href="/get-started/what-is-monero/">What is Monero</a> page. The <a href="https://github.com/monero-project">source code</a> is also available for review and discussion.</p>
</div>
</div>
</div>
<!-- end full block -->
</div>
</section>
<section class="container">
<div class="row">
<div class="left half no-pad-sm col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col">
<h2>2. Request Support</h2>
</div>
</div>
<div class="row start-xs">
<p>There is a large and supportive community that will assist if you experience any difficulty. See the <a href="/community/hangouts/">Hangouts</a> page for more information.</p>
</div>
</div>
</div>
<div class="right half col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col">
<h2>3. Generate a Wallet</h2>
</div>
</div>
<div class="row start-xs">
<p>A Monero wallet is required to secure your own funds. See the <a href="/downloads/">Downloads</a> page for a listing of available wallets.</p>
</div>
</div>
</div>
</div>
</section>
<section class="container">
<div class="row">
<!-- full block-->
<div class="full col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="info-block text-adapt">
<div class="row center-xs">
<div class="col">
<h2>4. Acquire Monero</h2>
</div>
</div>
<div class="row start-xs">
<p>Monero may be purchased on an <a href="/community/merchants#exchanges">exchange</a> with fiat or other cryptocurrencies. An alternate way of acquiring Monero is via <a href="https://getmonero.org/get-started/mining/">mining</a>, the computationally-complex process whereby transactions are immutably recorded on the blockchain.</p>
</div>
</div>
</div>
<!-- end full block -->
</div>
</section>
<section class="container">
<div class="row">
<div class="left half no-pad-sm col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col">
<h2>5. Send and Receive Monero</h2>
</div>
</div>
<div class="row start-xs">
<p>Learn how to send and receive Monero by viewing the <a href="/get-started/accepting/">guide</a>.</p>
</div>
</div>
</div>
<div class="right half col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col">
<h2>6. Transact with Monero</h2>
</div>
</div>
<div class="row start-xs">
<p>Monero may be used to purchase many goods and services. For a listing, see the <a href="/community/merchants/">Merchants</a> page. </p>
</div>
</div>
</div>
</div>
</section>
</div>
<div class="site-wrap">
<section class="container">
<div class="row">
<section class="container about-monero full col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col"><h2>What you need to know</h2></div>
</div>
<div class="row middle-xs info-block-row private">
<div class="col-lg-7 col-md-6 col-sm-8 col-xs-12 why-text">
<h3>Monero is the leading cryptocurrency with a focus on private and censorship-resistant transactions.</h3>
<p>Most existing cryptocurrencies, including Bitcoin and Ethereum, have transparent blockchains, meaning that transactions are openly verifiable and traceable by anyone in the world. Furthermore, sending and receiving addresses for these transactions may potentially be linkable to a person's real-world identity. </p>
<p>Monero uses cryptography to shield sending and receiving addresses, as well as transacted amounts.</p>
</div>
<div class="col-lg-5 col-md-6 col-sm-4 col-xs-12 last-sm first-xs center-xs">
<img src="/img/crypto-lock.png" alt="Encrypted lock" class="main-icon">
</div>
</div>
<div class="row middle-xs info-block-row">
<div class="col-lg-5 col-md-6 col-sm-4 col-xs-12 center-xs">
<img src="/img/monero-classified.png" alt="Classified document" class="main-icon">
</div>
<div class="col-lg-7 col-md-6 col-sm-8 col-xs-12 why-text">
<h3>Monero transactions are confidential and untraceable.</h3>
<p>Every Monero transaction, by default, obfuscates sending and receiving addresses as well as transacted amounts. This always-on privacy means that every Monero user's activity enhances the privacy of all other users, unlike selectively transparent cryptocurrencies (e.g. Z-Cash).</p>
<p>Monero is fungible. By virtue of obfuscation, Monero cannot become tainted through participation in previous transactions. This means Monero will always be accepted without the risk of censorship.</p>
<p>The Kovri Project, <a href="https://getkovri.org/">currently in development</a>, will route and encrypt transactions via I2P Invisible Internet Project nodes. This will obfuscate a transactor's IP address and provide further protection against network monitoring.</p>
</div>
</div>
<div class="row middle-xs info-block-row">
<div class="col-lg-7 col-md-6 col-sm-8 col-xs-12 why-text">
<h3>Monero is a grassroots community attracting the world's best cryptocurrency researchers and engineering talent.</h3>
<p>Over <a href="https://www.openhub.net/p/monero" target="_blank" rel="noreferrer noopener">240 developers</a> have contributed to the Monero project, including 30 core developers. Forums and chat channels are welcoming and active.</p>
<p>Monero's Research Lab, Core Development Team and Community Developers are constantly pushing the frontier of what is possible with cryptocurrency privacy and security.</p>
<p>Monero is not a corporation. It is developed by cryptography and distributed systems experts from all over the world that donate their time or are funded by community donations. This means that Monero can't be shut down by any one country and is not constrained by any particular legal jurisdiction.</p>
</div>
<div class="col-lg-5 col-md-6 col-sm-4 col-xs-12 last-sm first-xs center-xs">
<img src="/img/academic-growth.png" alt="Academic growth" class="main-icon">
</div>
</div>
<div class="row middle-xs info-block-row">
<div class="col-lg-5 col-md-6 col-sm-4 col-xs-12 center-xs">
<img src="/img/monero-electronic-cash.png" alt="Electronic cash" class="main-icon">
</div>
<div class="col-lg-7 col-md-6 col-sm-8 col-xs-12 why-text">
<h3>Monero is electronic cash that allows fast, inexpensive payments to and from anywhere in the world.</h3>
<p>There are no multi-day holding periods and no risk of fraudulent chargebacks. It is safe from ‘capital controls’ - these are measures that restrict the flow of traditional currencies, sometimes to an extreme degree, in countries experiencing economic instability.</p>
</div>
</div>
</div>
</section>
<section class="full col-xs-12 monero-vid">
<div class="info-block">
<div class="row center-xs">
<div class="col"><h2>Monero Videos</h2></div>
</div>
<div class="row center-xs">
<div class="col-xs-12 carousel-container">
<ul class="carousel my-carousel">
<input class="carousel-activator" type="radio" id="A" name="activator" checked="checked"/>
<input class="carousel-activator" type="radio" id="B" name="activator"/>
<input class="carousel-activator" type="radio" id="C" name="activator"/>
<input class="carousel-activator" type="radio" id="D" name="activator"/>
<div class="carousel-controls">
<label class="carousel-control carousel-control-backward" for="D"></label>
<label class="carousel-control carousel-control-forward" for="B"></label>
</div>
<div class="carousel-controls">
<label class="carousel-control carousel-control-backward" for="A"></label>
<label class="carousel-control carousel-control-forward" for="C"></label>
</div>
<div class="carousel-controls">
<label class="carousel-control carousel-control-backward" for="B"></label>
<label class="carousel-control carousel-control-forward" for="D"></label>
</div>
<div class="carousel-controls">
<label class="carousel-control carousel-control-backward" for="C"></label>
<label class="carousel-control carousel-control-forward" for="A"></label>
</div>
<li class="carousel-slide ms">
<h3>Monero Promo</h3>
<video controls poster="/img/monero-community.png" onclick="this.paused ? this.play() : this.pause();" preload="none">
<source src="/media/Monero_Promo.m4v">
</video>
</li>
<li class="carousel-slide">
<h3>Monero: The Essentials</h3>
<video controls poster="/img/monero-cash-video-poster.png" onclick="this.paused ? this.play() : this.pause();" preload="none">
<source src="/media/Monero%20-%20The%20Essentials.m4v">
</video>
</li>
<li class="carousel-slide">
<h3>Stealth Addresses</h3>
<video controls poster="/img/stealth-address-poster.png" onclick="this.paused ? this.play() : this.pause();" preload="none">
<source src="/media/Monero%20-%20Stealth%20Addresses.m4v">
</video>
</li>
<li class="carousel-slide">
<h3>Ring Signatures</h3>
<video controls poster="/img/ring-signatures-poster.png" onclick="this.paused ? this.play() : this.pause();" preload="none">
<source src="/media/Monero%20-%20Ring%20Signatures.m4v">
</video>
</li>
<li class="carousel-slide">
<h3>RingCT</h3>
<video controls poster="/img/ringct-poster.png" onclick="this.paused ? this.play() : this.pause();" preload="none">
<source src="/media/Monero%20-%20RingCT.m4v">
</video>
</li>
</ul>
</div>
</div>
</div>
</section>
</div>
</section>
</div>
\ No newline at end of file
<div class="text-center container description">
<p>Here you'll find the Monero symbol and logo below. You can choose any size that you want, or download the .ai file to mess with the logo yourself. <strong>Note that the white background options have a white background under the Monero symbol ONLY, not as a background to the whole image.</strong> Lastly, you can download everything on this page in one zip file by clicking <a href="/press-kit/monero-press-kit.zip">here</a>.</p>
</div>
<section class="container">
<div class="row">
<div class="left half no-pad-sm col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col">
<h2>Monero Symbol</h2>
</div>
</div>
<div class="row center-xs">
<img src="/press-kit/symbols/monero-symbol-480.png" alt="Monero Symbol" class="symbol-logo">
</div>
<div class="row center-xs press">
<div class="col-md-6">
<p>No background (PNG)</p>
<a href="/press-kit/symbols/monero-symbol-480.png">Small</a>
<a href="/press-kit/symbols/monero-symbol-800.png">Medium</a>
<a href="/press-kit/symbols/monero-symbol-1280.png">Large</a>
</div>
<div class="col-md-6">
<p>White background (PNG)</p>
<a href="/press-kit/symbols/monero-symbol-on-white-480.png">Small</a>
<a href="/press-kit/symbols/monero-symbol-on-white-800.png">Medium</a>
<a href="/press-kit/symbols/monero-symbol-on-white-1280.png">Large</a>
</div>
</div>
<div class="row center-xs press">
<a href="/press-kit/symbols/monero-symbol.ai" class="adi">Symbol .ai file</a>
</div>
</div>
</div>
<div class="right half col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="info-block">
<div class="row center-xs">
<div class="col">
<h2>Monero Logo</h2>
</div>
</div>
<div class="row center-xs">
<div class="col-xs-12">
<img src="/press-kit/logos/monero-logo-480.png" alt="Monero Logo" class="monero-symbol-logo">
</div>
</div>
<div class="row center-xs press">
<div class="col-md-6">
<p>No background (PNG)</p>
<a href="/press-kit/logos/monero-logo-480.png">Small</a>
<a href="/press-kit/logos/monero-logo-800.png">Medium</a>
<a href="/press-kit/logos/monero-logo-1280.png">Large</a>
</div>
<div class="col-md-6">
<p>White background (PNG)</p>
<a href="/press-kit/logos/monero-logo-symbol-on-white-480.png">Small</a>
<a href="/press-kit/logos/monero-logo-symbol-on-white-800.png">Medium</a>
<a href="/press-kit/logos/monero-logo-symbol-on-white-1280.png">Large</a>
</div>
</div>
<div class="row center-xs press">
<div class="col-xs-12">
<a href="/press-kit/logos/monero-logo.ai" class="adi">Logo .ai file</a>
</div>
</div>
</div>
</div>
</div>
</section>
\ No newline at end of file
<div class="about-monero">
<section class="container">
<div class="row">
<!-- left two-thirds block-->
<div class="full col-xs-12">
<div class="info-block text-adapt">
<div class="row center-xs">
<div class="col">
<h2>A Brief History</h2>
</div>
</div>
<div markdown="1">
Monero was launched in April 2014. It was a fair, pre-announced launch of the CryptoNote reference code. There was no premine or instamine, and no portion of the block reward goes to development. See the original Bitcointalk thread here. The founder, thankful_for_today, proposed some controversial changes that the community disagreed with. A fallout ensued, and the Monero Core Team forked the project with the community following this new Core Team. This Core Team has provided oversight since.
Monero has made several large improvements since launch. The blockchain was migrated to a different database structure to provide greater efficiency and flexibility, minimum ring signature sizes were set so that all transactions were private by mandate, and RingCT was implemented to hide the transaction amounts. Nearly all improvements have provided improvements to security or privacy, or they have facilitated use. Monero continues to develop with goals of privacy and security first, ease of use and efficiency second.
</div>
</div>
</div>
<!-- end right one-third block-->
</div>
<div class="row">
<!-- left two-thirds block-->
<div class="full col-xs-12">
<div class="info-block text-adapt">
<div class="row center-xs">
<div class="col">
<h2>Our Values</h2>
</div>
</div>
<div markdown="1">
Monero is more than just a technology. It’s also what the technology stands for. Some of the important guiding philosophies are listed below.
### Security
Users must be able to trust Monero with their transactions, without risk of error or attack. Monero gives the full block reward to the miners, who are the most critical members of the network who provide this security. Transactions are cryptographically secure using the latest and most resilient encryption tools available.
### Privacy
Monero takes privacy seriously. Monero needs to be able to protect users in a court of law and, in extreme cases, from the death penalty. This level of privacy must be completely accessible to all users, whether they are technologically competent or have no idea how Monero works. A user needs to confidently trust Monero in a way that this person does not feel pressured into changing their spending habits for risk of others finding out.
### Decentralization
Monero is committed to providing the maximum amount of decentralization. With Monero, you do not have to trust anyone else on the network, and it is not run by any large group. An accessible “Proof of Work” algorithm makes it easy to mine Monero on normal computers, which makes it more difficult for someone to purchase a large amount of mining power. Nodes connect to each other with I2P to lower the risks of revealing sensitive transaction information and censorship (tba). Development decisions are extremely clear and open to public discussion. Developer meeting logs are published online in their entirety and visible by all.
</div>
</div>
</div>
<!-- end right one-third block-->
</div>
</section>
\ No newline at end of file
<div class="guides">
<div class="center-xs container description">
<p class="text-center">Please note: the guides below are currently out of date, but are considered a good starting point for most calls. </p>
</div>
<section class="container full">
<div class="info-block">
<h2>RPC Documetation</h2>
<div markdown="1">
[Daemon RPC Documentation](daemon-rpc.html)
[Wallet RPC Documentation](wallet-rpc.html)
More coming soon...
</div>
</div>
</section>
</div>
\ No newline at end of file
## Introduction
This is a list of the monerod daemon RPC calls, their inputs and outputs, and examples of each.
Many RPC calls use the daemon's JSON RPC interface while others use their own interfaces, as demonstrated below.
Note: "atomic units" refer to the smallest fraction of 1 XMR according to the monerod implementation. **1 XMR = 1e12 atomic units.**
### [JSON RPC Methods](#json-rpc-methods):
* [getblockcount](#getblockcount)
* [on_getblockhash](#on_getblockhash)
* [getblocktemplate](#getblocktemplate)
* [submitblock](#submitblock)
* [getlastblockheader](#getlastblockheader)
* [getblockheaderbyhash](#getblockheaderbyhash)
* [getblockheaderbyheight](#getblockheaderbyheight)
* [getblock](#getblock)
* [get_connections](#get_connections)
* [get_info](#get_info)
* [hard_fork_info](#hard_fork_info)
* [setbans](#setbans)
* [getbans](#getbans)
### [Other RPC Methods](#other-daemon-rpc-calls):
* [/getheight](#getheight)
* [/gettransactions](#gettransactions)
* [/is_key_image_spent](#is_key_image_spent)
* [/sendrawtransaction](#sendrawtransaction)
* [/get_transaction_pool](#get_transaction_pool)
* [/stop_daemon](#stop_daemon)
---
## JSON RPC Methods
The majority of monerod RPC calls use the daemon's `json_rpc` interface to request various bits of information. These methods all follow a similar structure, for example:
```
IP=127.0.0.1
PORT=18081
METHOD='getblockheaderbyheight'
PARAMS='{"height":912345}'
curl \
-X POST http://$IP:$PORT/json_rpc \
-d '{"jsonrpc":"2.0","id":"0","method":"'$METHOD'","params":'$PARAMS'}' \
-H 'Content-Type: application/json'
```
Some methods include parameters, while others do not. Examples of each JSON RPC method follow.
### **getblockcount**
Look up how many blocks are in the longest chain known to the node.
Inputs: *None*.
Outputs:
* *count* - unsigned int; Number of blocks in longest chain seen by the node.
* *status* - string; General RPC error code. "OK" means everything looks good.
Example:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblockcount"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"count": 993163,
"status": "OK"
}
}
```
### **on_getblockhash**
Look up a block's hash by its height.
Inputs:
* block height (int array of length 1)
Outputs:
* block hash (string)
Example:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"on_getblockhash","params":[912345]}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": "e22cf75f39ae720e8b71b3d120a5ac03f0db50bba6379e2850975b4859190bc6"
}
```
### **getblocktemplate**
Inputs:
* *wallet_address* - string; Address of wallet to receive coinbase transactions if block is successfully mined.
* *reserve_size* - unsigned int; Reserve size.
Outputs:
* *blocktemplate_blob* - string; Blob on which to try to mine a new block.
* *difficulty* - unsigned int; Difficulty of next block.
* *height* - unsigned int; Height on which to mine.
* *prev_hash* - string; Hash of the most recent block on which to mine the next block.
* *reserved_offset* - unsigned int; Reserved offset.
* *status* - string; General RPC error code. "OK" means everything looks good.
Example:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblocktemplate","params":{"wallet_address":"44GBHzv6ZyQdJkjqZje6KLZ3xSyN1hBSFAnLP6EAqJtCRVzMzZmeXTC2AHKDS9aEDTRKmo6a6o9r9j86pYfhCWDkKjbtcns","reserve_size":60}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"blocktemplate_blob": "01029af88cb70568b84a11dc9406ace9e635918ca03b008f7728b9726b327c1b482a98d81ed83000000000018bd03c01ffcfcf3c0493d7cec7020278dfc296544f139394e5e045fcda1ba2cca5b69b39c9ddc90b7e0de859fdebdc80e8eda1ba01029c5d518ce3cc4de26364059eadc8220a3f52edabdaf025a9bff4eec8b6b50e3d8080dd9da417021e642d07a8c33fbe497054cfea9c760ab4068d31532ff0fbb543a7856a9b78ee80c0f9decfae01023ef3a7182cb0c260732e7828606052a0645d3686d7a03ce3da091dbb2b75e5955f01ad2af83bce0d823bf3dbbed01ab219250eb36098c62cbb6aa2976936848bae53023c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f12d7c87346d6b84e17680082d9b4a1d84e36dd01bd2c7f3b3893478a8d88fb3",
"difficulty": 982540729,
"height": 993231,
"prev_hash": "68b84a11dc9406ace9e635918ca03b008f7728b9726b327c1b482a98d81ed830",
"reserved_offset": 246,
"status": "OK"
}
}
```
### **submitblock**
Submit a mined block to the network.
Inputs:
* Block blob data - string
Outputs:
* *status* - string; Block submit status.
### **getlastblockheader**
Block header information for the most recent block is easily retrieved with this method. No inputs are needed.
Inputs: *None*.
Outputs:
* *block_header* - A structure containing block header information.
* *depth* - unsigned int; The number of blocks succeeding this block on the blockchain. A larger number means an older block.
* *difficulty* - unsigned int; The strength of the Monero network based on mining power.
* *hash* - string; The hash of this block.
* *height* - unsigned int; The number of blocks preceding this block on the blockchain.
* *major_version* - unsigned int; The major version of the monero protocol at this block height.
* *minor_version* - unsigned int; The minor version of the monero protocol at this block height.
* *nonce* - unsigned int; a cryptographic random one-time number used in mining a Monero block.
* *orphan_status* - boolean; Usually `false`. If `true`, this block is not part of the longest chain.
* *prev_hash* - string; The hash of the block immediately preceding this block in the chain.
* *reward* - unsigned int; The amount of new atomic units generated in this block and rewarded to the miner. Note: 1 XMR = 1e12 atomic units.
* *timestamp* - unsigned int; The time the block was recorded into the blockchain.
* *status* - string; General RPC error code. "OK" means everything looks good.
In this example, the most recent block (990793 at the time) is returned:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getlastblockheader"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"block_header": {
"depth": 0,
"difficulty": 746963928,
"hash": "ac0f1e226268d45c99a16202fdcb730d8f7b36ea5e5b4a565b1ba1a8fc252eb0",
"height": 990793,
"major_version": 1,
"minor_version": 1,
"nonce": 1550,
"orphan_status": false,
"prev_hash": "386575e3b0b004ed8d458dbd31bff0fe37b280339937f971e06df33f8589b75c",
"reward": 6856609225169,
"timestamp": 1457589942
},
"status": "OK"
}
}
```
### **getblockheaderbyhash**
Block header information can be retrieved using either a block's hash or height. This method includes a block's hash as an input parameter to retrieve basic information about the block.
Inputs:
* *hash* - string; The block's sha256 hash.
Outputs:
* *block_header* - A structure containing block header information. See [getlastblockheader](#getlastblockheader).
In this example, block 912345 is looked up by its hash:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblockheaderbyhash","params":{"hash":"e22cf75f39ae720e8b71b3d120a5ac03f0db50bba6379e2850975b4859190bc6"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"block_header": {
"depth": 78376,
"difficulty": 815625611,
"hash": "e22cf75f39ae720e8b71b3d120a5ac03f0db50bba6379e2850975b4859190bc6",
"height": 912345,
"major_version": 1,
"minor_version": 2,
"nonce": 1646,
"orphan_status": false,
"prev_hash": "b61c58b2e0be53fad5ef9d9731a55e8a81d972b8d90ed07c04fd37ca6403ff78",
"reward": 7388968946286,
"timestamp": 1452793716
},
"status": "OK"
}
}
```
### **getblockheaderbyheight**
Similar to `getblockheaderbyhash` above, this method includes a block's height as an input parameter to retrieve basic information about the block.
Inputs:
* *height* - unsigned int; The block's height.
Outputs:
* *block_header* - A structure containing block header information. See [getlastblockheader](#getlastblockheader).
In this example, block 912345 is looked up by its height (notice that the returned information is the save as in the previous example):
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblockheaderbyheight","params":{"height":912345}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"block_header": {
"depth": 78376,
"difficulty": 815625611,
"hash": "e22cf75f39ae720e8b71b3d120a5ac03f0db50bba6379e2850975b4859190bc6",
"height": 912345,
"major_version": 1,
"minor_version": 2,
"nonce": 1646,
"orphan_status": false,
"prev_hash": "b61c58b2e0be53fad5ef9d9731a55e8a81d972b8d90ed07c04fd37ca6403ff78",
"reward": 7388968946286,
"timestamp": 1452793716
},
"status": "OK"
}
}
```
### **getblock**
Full block information can be retrieved by either block height or hash, like with the above block header calls. For full block information, both lookups use the same method, but with different input parameters.
Inputs (pick one of the following):
* *height* - unsigned int; The block's height.
* *hash* - string; The block's hash.
Outputs:
* *blob* - string; Hexadecimal blob of block information.
* *block_header* - A structure containing block header information. See [getlastblockheader](#getlastblockheader).
* *json* - json string; JSON formatted block details:
* *major_version* - Same as in block header.
* *minor_version* - Same as in block header.
* *timestamp* - Same as in block header.
* *prev_id* - Same as `prev_hash` in block header.
* *nonce* - Same as in block header.
* *miner_tx* - Miner transaction information
* *version* - Transaction version number.
* *unlock_time* - The block height when the coinbase transaction becomes spendable.
* *vin* - List of transaction inputs:
* *gen* - Miner txs are coinbase txs, or "gen".
* *height* - This block height, a.k.a. when the coinbase is generated.
* *vout* - List of transaction outputs. Each output contains:
* *amount* - The amount of the output, in atomic units.
* *target* -
* *key* -
* *extra* - Usually called the "transaction ID" but can be used to include any random 32 byte/64 character hex string.
* *signatures* - Contain signatures of tx signers. Coinbased txs do not have signatures.
* *tx_hashes* - List of hashes of non-coinbase transactions in the block. If there are no other transactions, this will be an empty list.
* *status* - string; General RPC error code. "OK" means everything looks good.
**Look up by height:**
In the following example, block 912345 is looked up by its height. Note that block 912345 does not have any non-coinbase transactions. (See the next example for a block with extra transactions):
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblock","params":{"height":912345}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"blob": "...",
"block_header": {
"depth": 80694,
"difficulty": 815625611,
"hash": "e22cf75f39ae720e8b71b3d120a5ac03f0db50bba6379e2850975b4859190bc6",
"height": 912345,
"major_version": 1,
"minor_version": 2,
"nonce": 1646,
"orphan_status": false,
"prev_hash": "b61c58b2e0be53fad5ef9d9731a55e8a81d972b8d90ed07c04fd37ca6403ff78",
"reward": 7388968946286,
"timestamp": 1452793716
},
"json": "{\n \"major_version\": 1, \n \"minor_version\": 2, \n \"timestamp\": 1452793716, \n \"prev_id\": \"b61c58b2e0be53fad5ef9d9731a55e8a81d972b8d90ed07c04fd37ca6403ff78\", \n \"nonce\": 1646, \n \"miner_tx\": {\n \"version\": 1, \n \"unlock_time\": 912405, \n \"vin\": [ {\n \"gen\": {\n \"height\": 912345\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 8968946286, \n \"target\": {\n \"key\": \"378b043c1724c92c69d923d266fe86477d3a5ddd21145062e148c64c57677008\"\n }\n }, {\n \"amount\": 80000000000, \n \"target\": {\n \"key\": \"73733cbd6e6218bda671596462a4b062f95cfe5e1dbb5b990dacb30e827d02f2\"\n }\n }, {\n \"amount\": 300000000000, \n \"target\": {\n \"key\": \"47a5dab669770da69a860acde21616a119818e1a489bb3c4b1b6b3c50547bc0c\"\n }\n }, {\n \"amount\": 7000000000000, \n \"target\": {\n \"key\": \"1f7e4762b8b755e3e3c72b8610cc87b9bc25d1f0a87c0c816ebb952e4f8aff3d\"\n }\n }\n ], \n \"extra\": [ 1, 253, 10, 119, 137, 87, 244, 243, 16, 58, 131, 138, 253, 164, 136, 195, 205, 173, 242, 105, 123, 61, 52, 173, 113, 35, 66, 130, 178, 250, 217, 16, 14, 2, 8, 0, 0, 0, 11, 223, 194, 193, 108\n ], \n \"signatures\": [ ]\n }, \n \"tx_hashes\": [ ]\n}",
"status": "OK"
}
}
```
**Look up by hash:**
In the following example, block 993056 is looked up by its hash. Note that block 993056 has 3 non-coinbase transactions:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblock","params":{"hash":"510ee3c4e14330a7b96e883c323a60ebd1b5556ac1262d0bc03c24a3b785516f"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"blob": "...",
"block_header": {
"depth": 12,
"difficulty": 964985344,
"hash": "510ee3c4e14330a7b96e883c323a60ebd1b5556ac1262d0bc03c24a3b785516f",
"height": 993056,
"major_version": 1,
"minor_version": 2,
"nonce": 2036,
"orphan_status": false,
"prev_hash": "0ea4af6547c05c965afc8df6d31509ff3105dc7ae6b10172521d77e09711fd6d",
"reward": 6932043647005,
"timestamp": 1457720227
},
"json": "{\n \"major_version\": 1, \n \"minor_version\": 2, \n \"timestamp\": 1457720227, \n \"prev_id\": \"0ea4af6547c05c965afc8df6d31509ff3105dc7ae6b10172521d77e09711fd6d\", \n \"nonce\": 2036, \n \"miner_tx\": {\n \"version\": 1, \n \"unlock_time\": 993116, \n \"vin\": [ {\n \"gen\": {\n \"height\": 993056\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 2043647005, \n \"target\": {\n \"key\": \"59e9d685b3484886bc7b47c133e6099ecdf212d5eaa16ce19cd58e8c3c1e590a\"\n }\n }, {\n \"amount\": 30000000000, \n \"target\": {\n \"key\": \"4c5e2f542d25513c46b9e3b7d40140a22d0ae5314bfcae492ad9f56fff8185f0\"\n }\n }, {\n \"amount\": 900000000000, \n \"target\": {\n \"key\": \"13dd8ffdac9e6a2f71e327dad65328198dc879a492d145eae72677c0703a3515\"\n }\n }, {\n \"amount\": 6000000000000, \n \"target\": {\n \"key\": \"62bda00341681dccbc066757862da593734395745bdfe1fdc89b5948c86a5d4c\"\n }\n }\n ], \n \"extra\": [ 1, 182, 145, 133, 28, 240, 87, 185, 195, 2, 163, 219, 202, 135, 158, 28, 186, 76, 196, 80, 97, 202, 85, 170, 166, 224, 60, 220, 103, 171, 158, 69, 80, 2, 8, 0, 0, 0, 12, 97, 127, 223, 22\n ], \n \"signatures\": [ ]\n }, \n \"tx_hashes\": [ \"79c6b9f00db027bde151705aafe85c495883aae2597d5cb8e1adb2e0f3ae1d07\", \"d715db73331abc3ec588ef07c7bb195786a4724b08dff431b51ffa32a4ce899b\", \"b197066426c0ed89f0b431fe171f7fd62bc95dd29943daa7cf3585cf1fdfc99d\"\n ]\n}",
"status": "OK",
"tx_hashes": ["79c6b9f00db027bde151705aafe85c495883aae2597d5cb8e1adb2e0f3ae1d07","d715db73331abc3ec588ef07c7bb195786a4724b08dff431b51ffa32a4ce899b","b197066426c0ed89f0b431fe171f7fd62bc95dd29943daa7cf3585cf1fdfc99d"]
}
}
```
### **get_connections**
Retrieve information about incoming and outgoing connections to your node.
Inputs: *None*.
Outputs:
* *connections* - List of all connections and their info:
* *avg_download* - unsigned int; Average bytes of data downloaded by node.
* *avg_upload* - unsigned int; Average bytes of data uploaded by node.
* *current_download* - unsigned int; Current bytes downloaded by node.
* *current_upload* - unsigned int; Current bytes uploaded by node.
* *incoming* - boolean; Is the node getting information from your node?
* *ip* - string; The node's IP address.
* *live_time* - unsigned int
* *local_ip* - boolean
* *localhost* - boolean
* *peer_id* - string; The node's ID on the network.
* *port* - stringl The port that the node is using to connect to the network.
* *recv_count* - unsigned int
* *recv_idle_time* - unsigned int
* *send_count* - unsigned int
* *send_idle_time* - unsigned int
* *state* - string
Following is an example of `get_connections` and it's return:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_connections"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"connections": [{
"avg_download": 0,
"avg_upload": 0,
"current_download": 0,
"current_upload": 0,
"incoming": false,
"ip": "76.173.170.133",
"live_time": 1865,
"local_ip": false,
"localhost": false,
"peer_id": "3bfe29d6b1aa7c4c",
"port": "18080",
"recv_count": 116396,
"recv_idle_time": 23,
"send_count": 176893,
"send_idle_time": 1457726610,
"state": "state_normal"
},{
...
}],
"status": "OK"
}
}
```
### **get_info**
Retrieve general information about the state of your node and the network.
Inputs: *None*.
Outputs:
* *alt_blocks_count* - unsigned int; Number of alternative blocks to main chain.
* *difficulty* - unsigned int; Network difficulty (analogous to the strength of the network)
* *grey_peerlist_size* - unsigned int; Grey Peerlist Size
* *height* - unsigned int; Current length of longest chain known to daemon.
* *incoming_connections_count* - unsigned int; Number of peers connected to and pulling from your node.
* *outgoing_connections_count* - unsigned int; Number of peers that you are connected to and getting information from.
* *status* - string; General RPC error code. "OK" means everything looks good.
* *target* - unsigned int; Current target for next proof of work.
* *target_height* - unsigned int; The height of the next block in the chain.
* *testnet* - boolean; States if the node is on the testnet (true) or mainnet (false).
* *top_block_hash* - string; Hash of the highest block in the chain.
* *tx_count* - unsigned int; Total number of non-coinbase transaction in the chain.
* *tx_pool_siz* - unsigned int; Number of transactions that have been broadcast but not included in a block.
* *white_peerlist_size* - unsigned int; White Peerlist Size
Following is an example `get_info` call and its return:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_info"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"alt_blocks_count": 5,
"difficulty": 972165250,
"grey_peerlist_size": 2280,
"height": 993145,
"incoming_connections_count": 0,
"outgoing_connections_count": 8,
"status": "OK",
"target": 60,
"target_height": 993137,
"testnet": false,
"top_block_hash": "",
"tx_count": 564287,
"tx_pool_size": 45,
"white_peerlist_size": 529
}
}
```
### **hard_fork_info**
Look up information regarding hard fork voting and readiness.
Inputs: *None*.
Outputs:
* *earliest_height* - unsigned int; Block height at which hard fork would be enabled if voted in.
* *enabled* - boolean; Tells if hard fork is enforced.
* *state* - unsigned int; Current hard fork state: 0 (There is likely a hard fork), 1 (An update is needed to fork properly), or 2 (Everything looks good).
* *status* - string; General RPC error code. "OK" means everything looks good.
* *threshold* - unsigned int; Minimum percent of votes to trigger hard fork. Default is 80.
* *version* - unsigned int; The major block version for the fork.
* *votes* - unsigned int; Number of votes towards hard fork.
* *voting* - unsigned int; Hard fork voting status.
* *window* - unsigned int; Number of blocks over which current votes are cast. Default is 10080 blocks.
Example:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"hard_fork_info"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"earliest_height": 1009827,
"enabled": false,
"state": 2,
"status": "OK",
"threshold": 0,
"version": 1,
"votes": 7277,
"voting": 2,
"window": 10080
}
}
```
### **setbans**
Ban another node by IP.
Inputs:
* *bans* - A list of nodes to ban:
* *ip* - unsigned int; IP address to ban, in Int format.
* *ban* - boolean; Set `true` to ban.
* *seconds* - unsigned int; Number of seconds to ban node.
Outputs:
* *status* - string; General RPC error code. "OK" means everything looks good.
Example:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"setbans","params":{"bans":[{"ip":838969536,"ban":true,"seconds":30}]}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"status": "OK"
}
}
```
### **getbans**
Inputs: *None*.
Outputs:
* *bans* - List of banned nodes:
* *ip* - unsigned int; Banned IP address, in Int format.
* *seconds* - unsigned int; Local Unix time that IP is banned until.
* *status* - string; General RPC error code. "OK" means everything looks good.
Example:
```
$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getbans"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"bans": [{
"ip": 838969536,
"seconds": 1457748792
}],
"status": "OK"
}
}
```
---
## Other Daemon RPC Calls
Not all daemon RPC calls use the JSON_RPC interface. This section gives examples of these calls.
The data structure for these calls is different than the JSON RPC calls. Whereas the JSON RPC methods were called using the `/json_rpc` extension and specifying a method, these methods are called at their own extensions. For example:
IP=127.0.0.1
PORT=18081
METHOD='gettransactions'
PARAMS='{"txs_hashes":["d6e48158472848e6687173a91ae6eebfa3e1d778e65252ee99d7515d63090408"]}'
curl \
-X POST http://$IP:$PORT/$METHOD \
-d $PARAMS \
-H 'Content-Type: application/json'
Note: It is recommended to use JSON RPC where such alternatives exist, rather than the following methods. For example, the recommended way to get a node's height is via the JSON RPC methods [get_info](#getinfo) or [getlastblockheader](#getlastblockheader), rather than [getheight](#getheight) below.
### **/getheight**
Get the node's current height.
Inputs: *None*.
Outputs:
* *height* - unsigned int; Current length of longest chain known to daemon.
```
$ curl -X POST http://127.0.0.1:18081/getheight -H 'Content-Type: application/json'
{
"height": 993488,
"status": "OK"
}
```
### **/gettransactions**
Look up one or more transactions by hash.
Inputs:
* *txs_hashes* - string list; List of transaction hashes to look up.
* *decode_as_json* - boolean; Optional. If set `true`, the returned transaction information will be decoded rather than binary.
Outputs:
* *status* - General RPC error code. "OK" means everything looks good.
* *txs_as_hex* - string; Full transaction information as a hex string.
* *txs_as_json* - json string; (Optional - returned if set in inputs.) List of transaction info:
* *version* - Transaction version
* *unlock_time* - If not 0, this tells when a transaction output is spendable.
* *vin* - List of inputs into transaction:
* *key* - The public key of the previous output spent in this transaction.
* *amount* - The amount of the input, in atomic units.
* *key_offsets* - A list of integer offets to the input.
* *k_image* - The key image for the given input
* *vout* - List of outputs from transaction:
* *amount* - Amount of transaction output, in atomic units.
* *target* - Output destination information:
* *key* - The stealth public key of the receiver. Whoever owns the private key associated with this key controls this transaction output.
* *extra* - Usually called the "payment ID" but can be used to include any random 32 bytes.
* *signatures* - List of ignatures used in ring signature to hide the true origin of the transaction.
Example 1: Return transaction information in binary format.
```
$ curl -X POST http://127.0.0.1:18081/gettransactions -d '{"txs_hashes":["d6e48158472848e6687173a91ae6eebfa3e1d778e65252ee99d7515d63090408"]}' -H 'Content-Type: application/json'
{
"status": "OK",
"txs_as_hex": ["..."]
}
```
Example 2: Decode returned transaction information in JSON format. Note: the "vout" list has been truncated in the displayed return for space considerations.
```
$ curl -X POST http://127.0.0.1:18081/gettransactions -d '{"txs_hashes":["d6e48158472848e6687173a91ae6eebfa3e1d778e65252ee99d7515d63090408"],"decode_as_json":true}' -H 'Content-Type: application/json'
{
"status": "OK",
"txs_as_hex": ["..."],
"txs_as_json": ["{\n \"version\": 1, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 70000000, \n \"key_offsets\": [ 35952\n ], \n \"k_image\": \"d16908468dff9438a9814fe96bdaa575f06fe8da85772b72e54926428712293d\"\n }\n }, {\n \"key\": {\n \"amount\": 400000000000000, \n \"key_offsets\": [ 6830\n ], \n \"k_image\": \"c7a7024b763df1181ae6fe821b70669735e38a68162ac02362e33acbe829b605\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 50000, \n \"target\": {\n \"key\": \"f6be43f7be4f06adcb1d06f4a07c637c7359e009cf3e57bb32b8c9ea636509c3\"\n }\n }, {\n \"amount\": 200000, \n \"target\": {\n \"key\": \"b0a7a8e32f2b5302552bcd8d85112c62838b1f56cccd844eb9b63e0a732d0353\"\n }\n }, ... \n ], \n \"extra\": [ 1, 225, 240, 98, 34, 169, 73, 47, 237, 117, 192, 30, 192, 60, 155, 47, 4, 115, 20, 21, 11, 13, 252, 219, 129, 13, 174, 37, 36, 78, 191, 141, 109\n ], \n \"signatures\": [ \"e6a3be8003d481d2855c8127f56871de3d28a4fb52385b999eb986c831c5cc08361c126b0db24a21b6c4299b438ee2be201d44d57a371230b9cd04395ab8c400\", \"8309851abaf2cf2a7091e0cdb9c83704fa7d68838a7a8ef8c178bb55a1e93a038dd18bb4a7549dc056b7a70e037cabd80911a03f427e36f712756d4c00f38f0b\"]\n}"]
}
```
### **/is_key_image_spent**
Check if outputs have been spent using the key image associated with the output.
Inputs:
* *key_images* - string list; List of key image hex strings to check.
Outputs:
* *spent_status* - unsigned int list; List of statuses for each image checked. Statuses are follows: 0 = unspent, 1 = spent in blockchain, 2 = spent in transaction pool
* *status* - string; General RPC error code. "OK" means everything looks good.
Example:
```
$ curl -X POST http://127.0.0.1:18081/is_key_image_spent -d '{"key_images":["8d1bd8181bf7d857bdb281e0153d84cd55a3fcaa57c3e570f4a49f935850b5e3","7319134bfc50668251f5b899c66b005805ee255c136f0e1cecbb0f3a912e09d4"]}' -H 'Content-Type: application/json'
{
"spent_status": [1,2],
"status": "OK"
}
```
### **/sendrawtransaction**
Broadcast a raw transaction to the network.
Inputs:
* *tx_as_hex* - string; Full transaction information as hexidecimal string.
Outputs:
* *status* - string; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong.
* *double_spend* - boolean; Transaction is a double spend (`true`) or not (`false`).
* *fee_too_low* - boolean; Fee is too low (`true`) or OK (`false`).
* *invalid_input* - boolean; Input is invalid (`true`) or valid (`false`).
* *invalid_output* - boolean; Output is invalid (`true`) or valid (`false`).
* *low_mixin* - boolean; Mixin count is too low (`true`) or OK (`false`).
* *not_rct* - boolean; Transaction is not a ring transaction (`true`) or a ring transaction (`false`).
* *not_relayed* - boolean; Transaction was not relayed (`true`) or relayed (`false`).
* *overspend* - boolean; Transaction uses more money than available (`true`) or not (`false`).
* *reason* - string; Additional information. Currently empty or "Not relayed" if transaction was accepted but not relayed.
* *too_big* - boolean; Transaction size is too big (`true`) or OK (`false`).
Example (No return information included here.):
```
$ curl -X POST http://127.0.0.1:18081/sendrawtransaction -d '{"tx_as_hex":"de6a3..."}' -H 'Content-Type: application/json'
```
### **/get_transaction_pool**
Show information about valid transactions seen by the node but not yet mined into a block, as well as spent key image information in the node's memory.
Inputs: *None*.
Outputs:
* *spent_key_images* - List of spent output key images:
* *id_hash* - string; Key image ID hash.
* *txs_hashes* - string list; Key image transaction hashes.
* *status* - string; General RPC error code. "OK" means everything looks good.
* *transactions* - List of transactions in the mempool that have not been included in a block:
* *blob_size* - unsigned int; The size of the full transaction blob.
* *fee* - unsigned int; The amount of the mining fee included in the transaction, in atomic units.
* *id_hash* - string; The transaction ID hash.
* *kept_by_block* - boolean; We do not accept transactions that timed out before, unless set `true`.
* *last_failed_height* - unsigned int; If the transaction has previously timed out, this tells at what height that occured.
* *last_failed_id_hash* - string; Like the previous, this tells the previous transaction ID hash.
* *max_used_block_height* - unsigned int; Tells the height of the most recent block with an output used in this transaction.
* *max_used_block_hash* - string; Tells the hash of the most recent block with an output used in this transaction.
* *receive_time* - unsigned int; The Unix time that the transaction was first seen on the network by the node.
* *tx_json* - json string; JSON structure of all information in the transaction:
* *version* - Transaction version
* *unlock_time* - If not 0, this tells when a transaction output is spendable.
* *vin* - List of inputs into transaction:
* *key* - The public key of the previous output spent in this transaction.
* *amount* - The amount of the input, in atomic units.
* *key_offsets* - A list of integer offets to the input.
* *k_image* - The key image for the given input
* *vout* - List of outputs from transaction:
* *amount* - Amount of transaction output, in atomic units.
* *target* - Output destination information:
* *key* - The stealth public key of the receiver. Whoever owns the private key associated with this key controls this transaction output.
* *extra* - Usually called the "transaction ID" but can be used to include any random 32 bytes.
* *signatures* - List of ignatures used in ring signature to hide the true origin of the transaction.
Example (Note: Some lists in the returned information have been truncated for display reasons):
```
$ curl -X POST http://127.0.0.1:18081/get_transaction_pool -H 'Content-Type: application/json'
{
"spent_key_images": [{
"id_hash": "1edb9ecc39602040282d326070ad22cb473c952c0d6280c9c4c3b853fb34f3bc",
"txs_hashes": ["409911b2be02e3f0e930b326c67ab9e74675885ce23d71bb3bd28b62bc3e7803"]
},{
"id_hash": "4adb4bb63b3397027340ca4e6c45f4ce2147dfb3a4e0fafdec18834ae594a05e",
"txs_hashes": ["946f1f4c52e3426a41959c93b60078f314813bc4bdebcf69b8ee11d593b2bd14"]
},
...],
"status": "OK",
"transactions": [{
"blob_size": 25761,
"fee": 290000000000,
"id_hash": "11d4cff23e610fac6a2b89187ad61d429a5e226652693dcac5d83d506eb92b96",
"kept_by_block": false,
"last_failed_height": 0,
"last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000",
"max_used_block_height": 954508,
"max_used_block_id_hash": "03f96b374778bc059e47b96e2beec2e6d4d9e0ad39afeabdbcd77e1bd5a62f81",
"receive_time": 1457676127,
"tx_json": "{\n \"version\": 1, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 70000000000, \n \"key_offsets\": [ 63408, 18978, 78357, 16560\n ], \n \"k_image\": \"7319134bfc50668251f5b899c66b005805ee255c136f0e1cecbb0f3a912e09d4\"\n }\n }, ... ], \n \"vout\": [ {\n \"amount\": 80000000000, \n \"target\": {\n \"key\": \"094e6a1b187385533665f89db741149f42d95fdc50bdd2a2384bcd1dc5209c55\"\n }\n }, ... ], \n \"extra\": [ 2, 33, 0, 15, 56, 190, 21, 169, 77, 13, 182, 209, 51, 35, 54, 96, 89, 237, 96, 23, 24, 107, 240, 79, 40, 86, 64, 68, 45, 166, 119, 192, 17, 225, 23, 1, 31, 159, 145, 15, 173, 255, 165, 192, 55, 84, 127, 154, 163, 25, 85, 204, 212, 127, 147, 133, 118, 218, 166, 52, 78, 188, 131, 235, 9, 159, 105, 158\n ], \n \"signatures\": [ \"966e5a67fbdbf72d7dc0364b705121a58e0ced7e2ab45747b6b154c05a1afe04fac4aac7f64faa2dc6dd4d51b8277f11e2f2ec7729fac225088befe3b8399c0b71a4cb55b9d0e20f93d305c78cebceff1bcfcfaf225428dfcfaaec630c88720ab65bf5d3399dd1ac82ea0ecf308b3f80d9780af7742fb157692cd60515a7e2086878f082117fa80fff3d257de7d3a2e9cc8b3472ef4a5e545d90e1159523a60f38d16cece783579627124776813334bdb2a2df4171ef1fa12bf415da338ce5085c01e7a715638ef5505aebec06a0625aaa72d13839838f7d4f981673c8f05f08408e8b372f900af7227c49cfb1e1febab6c07dd42b7c26f921cf010832841205\", ... ]\n}"
},
...]
}
```
### **/stop_daemon**
Send a command to the daemon to safely disconnect and shut down.
Inputs: *None*.
Outputs:
* *status* - string; General RPC error code. "OK" means everything looks good.
Example:
```
$ curl -X POST http://127.0.0.1:18081/stop_daemon -H 'Content-Type: application/json'
{
"status": "OK"
}
```
\ No newline at end of file
## Introduction
This is a list of the monero-wallet-rpc calls, their inputs and outputs, and examples of each. The program monero-wallet-rpc replaced the rpc interface that was in simplewallet and then monero-wallet-cli.
All monero-wallet-rpc methods use the same JSON RPC interface. For example:
```
IP=127.0.0.1
PORT=18082
METHOD="make_integrated_address"
PARAMS="{\"payment_id\":\"1234567890123456789012345678900012345678901234567890123456789000\"}"
curl \
-X POST http://$IP:$PORT/json_rpc \
-d '{"jsonrpc":"2.0","id":"0","method":"'$METHOD'","params":'"$PARAMS"'}' \
-H 'Content-Type: application/json'
```
If the monero-wallet-rpc was executed with the `--rpc-login` argument as `username:password`, then follow this example:
```
IP=127.0.0.1
PORT=18082
METHOD="make_integrated_address"
PARAMS="{\"payment_id\":\"1234567890123456789012345678900012345678901234567890123456789000\"}"
curl \
-u username:password --digest \
-X POST http://$IP:$PORT/json_rpc \
-d '{"jsonrpc":"2.0","id":"0","method":"'$METHOD'","params":'"$PARAMS"'}' \
-H 'Content-Type: application/json'
```
Note: "atomic units" refer to the smallest fraction of 1 XMR according to the monerod implementation. **1 XMR = 1e12 atomic units.**
### Index of JSON RPC Methods:
* [getbalance](#getbalance)
* [getaddress](#getaddress)
* [getheight](#getheight)
* [transfer](#transfer)
* [transfer_split](#transfer_split)
* [sweep_dust](#sweep_dust)
* [sweep_all](#sweep_all)
* [store](#store)
* [get_payments](#get_payments)
* [get_bulk_payments](#get_bulk_payments)
* [get_transfers](#get_transfers)
* [get_transfer_by_txid](#get_transfer_by_txid)
* [incoming_transfers](#incoming_transfers)
* [query_key](#query_key)
* [make_integrated_address](#make_integrated_address)
* [split_integrated_address](#split_integrated_address)
* [stop_wallet](#stop_wallet)
* [make_uri](#make_uri)
* [parse_uri](#parse_uri)
* [rescan_blockchain](#rescan_blockchain)
* [set_tx_notes](#set_tx_notes)
* [get_tx_notes](#get_tx_notes)
* [sign](#sign)
* [verify](#verify)
* [export_key_images](#export_key_images)
* [import_key_images](#import_key_images)
* [get_address_book](#get_address_book)
* [add_address_book](#add_address_book)
* [delete_address_book](#delete_address_book)
* [rescan_spent](#rescan_spent)
* [start_mining](#start_mining)
* [stop_mining](#stop_mining)
* [get_languages](#get_languages)
* [create_wallet](#create_wallet)
* [open_wallet](#open_wallet)
---
## JSON RPC Methods:
### **getbalance**
Return the wallet's balance.
Inputs: *None*.
Outputs:
* *balance* - unsigned int; The total balance of the current monero-wallet-rpc in session.
* *unlocked_balance* - unsigned int; Unlocked funds are those funds that are sufficiently deep enough in the Monero blockchain to be considered safe to spend.
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getbalance"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"balance": 140000000000,
"unlocked_balance": 50000000000
}
}
```
### **getaddress**
Return the wallet's address.
Inputs: *None*.
Outputs:
* *address* - string; The 95-character hex address string of the monero-wallet-rpc in session.
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getaddress"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"address": "427ZuEhNJQRXoyJAeEoBaNW56ScQaLXyyQWgxeRL9KgAUhVzkvfiELZV7fCPBuuB2CGuJiWFQjhnhhwiH1FsHYGQGaDsaBA"
}
}
```
### **getheight**
Returns the wallet's current block height.
Inputs: *None*.
Outputs:
* *height* - unsigned int; The current monero-wallet-rpc's blockchain height. If the wallet has been offline for a long time, it may need to catch up with the daemon.
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getheight"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"height": 994310
}
}
```
### **transfer**
Send monero to a number of recipients.
Inputs:
* *destinations* - array of destinations to receive XMR:
* *amount* - unsigned int; Amount to send to each destination, in atomic units.
* *address* - string; Destination public address.
* *fee* - unsigned int; Ignored, will be automatically calculated.
* *mixin* - unsigned int; Number of outpouts from the blockchain to mix with (0 means no mixing).
* *unlock_time* - unsigned int; Number of blocks before the monero can be spent (0 to not add a lock).
* *payment_id* - string; (Optional) Random 32-byte/64-character hex string to identify a transaction.
* *get_tx_key* - boolean; (Optional) Return the transaction key after sending.
* *priority* - unsigned int; Set a priority for the transaction. Accepted Values are: 0-3 for: default, unimportant, normal, elevated, priority.
* *do_not_relay* - boolean; (Optional) If true, the newly created transaction will not be relayed to the monero network. (Defaults to false)
* *get_tx_hex* - boolean; Return the transaction as hex string after sending
Outputs:
* *fee* - Integer value of the fee charged for the txn.
* *tx_hash* - String for the publically searchable transaction hash
* *tx_key* - String for the transaction key if get_tx_key is true, otherwise, blank string.
* *tx_blob* - Transaction as hex string if get_tx_hex is true
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer","params":{"destinations":[{"amount":100000000,"address":"9wNgSYy2F9qPZu7KBjvsFgZLTKE2TZgEpNFbGka9gA5zPmAXS35QzzYaLKJRkYTnzgArGNX7TvSqZC87tBLwtaC5RQgJ8rm"},{"amount":200000000,"address":"9vH5D7Fv47mbpCpdcthcjU34rqiiAYRCh1tYywmhqnEk9iwCE9yppgNCXAyVHG5qJt2kExa42TuhzQfJbmbpeGLkVbg8xit"}],"mixin":4,"get_tx_key": true}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"fee": 48958481211,
"tx_hash": "985180f468637bc6d2f72ee054e1e34b8d5097988bb29a2e0cb763e4464db23c",
"tx_key": "8d62e5637f1fcc9a8904057d6bed6c697618507b193e956f77c31ce662b2ee07"
}
}
```
### **transfer_split**
Same as transfer, but can split into more than one tx if necessary.
Inputs:
* *destinations* - array of destinations to receive XMR:
* *amount* - unsigned int; Amount to send to each destination, in atomic units.
* *address* - string; Destination public address.
* *fee* - unsigned int; Ignored, will be automatically calculated.
* *mixin* - unsigned int; Number of outpouts from the blockchain to mix with (0 means no mixing).
* *unlock_time* - unsigned int; Number of blocks before the monero can be spent (0 to not add a lock).
* *payment_id* - string; (Optional) Random 32-byte/64-character hex string to identify a transaction.
* *get_tx_keys* - boolean; (Optional) Return the transaction keys after sending. -- Ignored
* *priority* - unsigned int; Set a priority for the transactions. Accepted Values are: 0-3 for: default, unimportant, normal, elevated, priority.
* *do_not_relay* - boolean; (Optional) If true, the newly created transaction will not be relayed to the monero network. (Defaults to false)
* *get_tx_hex* - boolean; Return the transactions as hex string after sending
* *new_algorithm* - boolean; True to use the new transaction construction algorithm, defaults to false.
Outputs:
* *fee_list* - array of: integer. The amount of fees paid for every transaction.
* *tx_hash_list* - array of: string. The tx hashes of every transaction.
* *tx_blob_list* - array of: string. The tx as hex string for every transaction.
* *amount_list* - array of: integer. The amount transferred for every transaction..
* *tx_key_list* - array of: string. The transaction keys for every transaction.
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer_split","params":{"destinations":[{"amount":100000000,"address":"9wNgSYy2F9qPZu7KBjvsFgZLTKE2TZgEpNFbGka9gA5zPmAXS35QzzYaLKJRkYTnzgArGNX7TvSqZC87tBwtaC5RQgJ8rm"},{"amount":200000000,"address":"9vH5D7Fv47mbpCpdcthcjU34rqiiAYRCh1tYywmhqnEk9iwCE9yppgNCXAyVHG5qJt2kExa42TuhzQfJbmbpeGLkVbg8xit"},{"amount":200000000,"address":"9vC5Q25cR1d3WzKX6dpTaLJaqZyDrtTnfadTmVuB1Wue2tyFGxUhiE4RGa74pEDJv7gSySzcd1Ao6G1nzSaqp78vLfP6MPj"},{"amount":200000000,"address":"A2MSrn49ziBPJBh8ZNEhhbfyLMou6mao4C1F5TLGUatmUnCxZArDYkcbAnVkVEopWVeak2rKDrmc8JpoS7n5dvfN9YDPBTG"},{"amount":200000000,"address":"9tEDyVQ8zgRQbDYiykTdpw5kZ6qWQWcKfExEj9eQshjpGb3sdr3UyWE2AHWzUGzJjaH9HN1DdGBdyQQ4AqGMc7rr5xYwZWW"}],"mixin":4,"get_tx_key": true, "new_algorithm": true}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"fee_list": [97916962422],
"tx_hash_list": ["c5c389846e701c27aaf1f7ab8b9dc457b471fcea5bc9710e8020d51275afbc54"]
}
}
```
### **sweep_dust**
Send all dust outputs back to the wallet's, to make them easier to spend (and mix).
Inputs: *None*.
Outputs:
* *tx_hash_list* - list of: string
Example (In this example, `sweep_dust` returns an error due to insufficient funds to sweep):
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sweep_dust"}' -H 'Content-Type: application/json'
{
"error": {
"code": -4,
"message": "not enough money"
},
"id": "0",
"jsonrpc": "2.0"
}
```
### **sweep_all**
Send all unlocked balance to an address.
Inputs:
* *address* - string; Destination public address.
* *priority* - unsigned int; (Optional)
* *mixin* - unsigned int; Number of outpouts from the blockchain to mix with (0 means no mixing).
* *unlock_time* - unsigned int; Number of blocks before the monero can be spent (0 to not add a lock).
* *payment_id* - string; (Optional) Random 32-byte/64-character hex string to identify a transaction.
* *get_tx_keys* - boolean; (Optional) Return the transaction keys after sending.
* *below_amount* - unsigned int; (Optional)
* *do_not_relay* - boolean; (Optional)
* *get_tx_hex* - boolean; (Optional) return the transactions as hex encoded string.
Outputs:
* *tx_hash_list* - array of string;
* *tx_key_list* - array of string;
* *tx_blob_list* - array of string;
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sweep_all","params":{"address":"9sS8eRU2b5ZbN2FPSrpkiab1bjbHE5XtL6Ti6We3Fhw5aQPudRfVVypjgzKDNkxtvTQSPs122NKggb2mqcqkKSeMNVu59S","mixin":2,"unlock_time":0,"get_tx_keys":true}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"tx_hash_list": ["53a3648797d5524dd037d4105e067fa61468faecab41927fc43adbb26c202d22"],
"tx_key_list": ["e83b3b78235e36cd7e4d9695efd81a3b3e64c7d1f1ebd61892f0a7add6a50301"]
}
}
```
### **store**
Save the blockchain.
Inputs: *None*.
Outputs: *None*.
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"store"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
### **get_payments**
Get a list of incoming payments using a given payment id.
Inputs:
* *payment_id* - string
Outputs:
* *payments* - list of:
* *payment_id* - string
* *tx_hash* - string
* *amount* - unsigned int
* *block_height* - unsigned int
* *unlock_time* - unsigned int
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_payments","params":{"payment_id":"4279257e0a20608e25dba8744949c9e1caff4fcdafc7d5362ecf14225f3d9030"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"payments": [{
"amount": 10350000000000,
"block_height": 994327,
"payment_id": "4279257e0a20608e25dba8744949c9e1caff4fcdafc7d5362ecf14225f3d9030",
"tx_hash": "c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1",
"unlock_time": 0
}]
}
}
```
### **get_bulk_payments**
Get a list of incoming payments using a given payment id, or a list of payments ids, from a given height. This method is the preferred method over `get_payments` because it has the same functionality but is more extendable. Either is fine for looking up transactions by a single payment ID.
Inputs:
* *payment_ids* - array of: string
* *min_block_height* - unsigned int; The block height at which to start looking for payments.
Outputs:
* *payments* - list of:
* *payment_id* - string
* *tx_hash* - string
* *amount* - unsigned int
* *block_height* - unsigned int
* *unlock_time* - unsigned int
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_bulk_payments","params":{"payment_ids":["4279257e0a20608e25dba8744949c9e1caff4fcdafc7d5362ecf14225f3d9030"],"min_block_height":990000}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"payments": [{
"amount": 10350000000000,
"block_height": 994327,
"payment_id": "4279257e0a20608e25dba8744949c9e1caff4fcdafc7d5362ecf14225f3d9030",
"tx_hash": "c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1",
"unlock_time": 0
}]
}
}
```
### **get_transfers**
Returns a list of transfers.
Inputs:
* *in* - boolean;
* *out* - boolean;
* *pending* - boolean;
* *failed* - boolean;
* *pool* - boolean;
* *filter_by_height* - boolean;
* *min_height* - unsigned int;
* *max_height* - unsigned int;
Outputs:
* *in* array of transfers:
* *txid* - string;
* *payment_id* - string;
* *height* - unsigned int;
* *timestamp* - unsigned int;
* *amount* - unsigned int;
* *fee* - unsigned int;
* *note* - string;
* *destinations* - std::list<transfer_destination>;
* *type* - string;
* *out* array of transfers
* *pending* array of transfers
* *failed* array of transfers
* *pool* array of transfers
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_transfers","params":{"pool":true}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"pool": [{
"amount": 500000000000,
"fee": 0,
"height": 0,
"note": "",
"payment_id": "758d9b225fda7b7f",
"timestamp": 1488312467,
"txid": "da7301d5423efa09fabacb720002e978d114ff2db6a1546f8b820644a1b96208",
"type": "pool"
}]
}
}
```
### **get_transfer_by_txid**
Show information about a transfer to/from this address.
Inputs:
* *txid* - string
Outputs:
* *transfer* - JSON object containing parment information:
* *amount* - unsigned int
* *fee* - unsigned int
* *height* - unsigned int
* *note* - string
* *payment_id* - string
* *timestamp* - unsigned int
* *txid* - string
* *type* - string
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_transfer_by_txid","params":{"txid":"f2d33ba969a09941c6671e6dfe7e9456e5f686eca72c1a94a3e63ac6d7f27baf"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"transfer": {
"amount": 10000000000000,
"fee": 0,
"height": 1316388,
"note": "",
"payment_id": "0000000000000000",
"timestamp": 1495539310,
"txid": "f2d33ba969a09941c6671e6dfe7e9456e5f686eca72c1a94a3e63ac6d7f27baf",
"type": "in"
}
}
}
```
### **incoming_transfers**
Return a list of incoming transfers to the wallet.
Inputs:
* *transfer_type* - string; "all": all the transfers, "available": only transfers which are not yet spent, OR "unavailable": only transfers which are already spent.
Outputs:
* *transfers* - list of:
* *amount* - unsigned int
* *spent* - boolean
* *global_index* - unsigned int; Mostly internal use, can be ignored by most users.
* *tx_hash* - string; Several incoming transfers may share the same hash if they were in the same transaction.
* *tx_size* - unsigned int
Example (Return "all" transaction types):
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"all"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"transfers": [{
"amount": 10000000000000,
"global_index": 711506,
"spent": false,
"tx_hash": "&lt;c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1&gt;",
"tx_size": 5870
},{
"amount": 300000000000,
"global_index": 794232,
"spent": false,
"tx_hash": "&lt;c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1&gt;",
"tx_size": 5870
},{
"amount": 50000000000,
"global_index": 213659,
"spent": false,
"tx_hash": "&lt;c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1&gt;",
"tx_size": 5870
}]
}
}
```
Example (Return "available" transactions):
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"available"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"transfers": [{
"amount": 10000000000000,
"global_index": 711506,
"spent": false,
"tx_hash": "&lt;c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1&gt;",
"tx_size": 5870
},{
"amount": 300000000000,
"global_index": 794232,
"spent": false,
"tx_hash": "&lt;c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1&gt;",
"tx_size": 5870
},{
"amount": 50000000000,
"global_index": 213659,
"spent": false,
"tx_hash": "&lt;c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1&gt;",
"tx_size": 5870
}]
}
}
```
Example (Return "unavailable" transaction. Note that this particular example returns 0 unavailable transactions):
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"unavailable"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
### **query_key**
Return the spend or view private key.
Inputs:
* *key_type* - string; Which key to retrieve: "mnemonic" - the mnemonic seed (older wallets do not have one) OR "view_key" - the view key
Outputs:
* *key* - string; The view key will be hex encoded, while the mnemonic will be a string of words.
Example (Query view key):
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"query_key","params":{"key_type":"view_key"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"key": "7e341d..."
}
}
```
Example (Query mnemonic key):
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"query_key","params":{"key_type":"mnemonic"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"key": "adapt adapt nostril ..."
}
}
```
### **make_integrated_address**
Make an integrated address from the wallet address and a payment id.
Inputs:
* *payment_id* - string; hex encoded; can be empty, in which case a random payment id is generated
Outputs:
* *integrated_address* - string
Example (Payment ID is empty, use a random ID):
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"make_integrated_address","params":{"payment_id":""}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"integrated_address": "4BpEv3WrufwXoyJAeEoBaNW56ScQaLXyyQWgxeRL9KgAUhVzkvfiELZV7fCPBuuB2CGuJiWFQjhnhhwiH1FsHYGQQ8H2RRJveAtUeiFs6J"
}
}
```
### **split_integrated_address**
Retrieve the standard address and payment id corresponding to an integrated address.
Inputs:
* *integrated_address* - string
Outputs:
* *standard_address* - string
* *payment* - string; hex encoded
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"split_integrated_address","params":{"integrated_address": "4BpEv3WrufwXoyJAeEoBaNW56ScQaLXyyQWgxeRL9KgAUhVzkvfiELZV7fCPBuuB2CGuJiWFQjhnhhwiH1FsHYGQQ8H2RRJveAtUeiFs6J"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"payment_id": "&lt;420fa29b2d9a49f5&gt;",
"standard_address": "427ZuEhNJQRXoyJAeEoBaNW56ScQaLXyyQWgxeRL9KgAUhVzkvfiELZV7fCPBuuB2CGuJiWFQjhnhhwiH1FsHYGQGaDsaBA"
}
}
```
### **stop_wallet**
Stops the wallet, storing the current state.
Inputs: *None*.
Outputs: *None*.
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"stop_wallet"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
### **make_uri**
Create a payment URI using the official URI spec.
Inputs:
* *address* - wallet address string
* *amount* (optional) - the integer amount to receive, in **atomic** units
* *payment_id* (optional) - 16 or 64 character hexadecimal payment id string
* *recipient_name* (optional) - string name of the payment recipient
* *tx_description* (optional) - string describing the reason for the tx
Outputs:
* *uri* - a string containing all the payment input information as a properly formatted payment URI
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"make_uri","params":{"address":"44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A","amount":10,"payment_id":"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef","tx_description":"Testing out the make_uri function.","recipient_name":"Monero Project donation address"}}' -H 'Content-Type: application/json'
{
"id": 0,
"jsonrpc": "2.0",
"result": {
"uri": "monero:44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A?tx_payment_id=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&tx_amount=0.000000000010&recipient_name=Monero%20Project%20donation%20address&tx_description=Testing%20out%20the%20make_uri%20function."
}
}
```
### **parse_uri**
Parse a payment URI to get payment information.
Inputs:
* *uri* - a string containing all the payment input information as a properly formatted payment URI
Outputs:
* *uri* - JSON object containing payment information:
* *address* - wallet address string
* *amount* - the decimal amount to receive, in **coin** units (0 if not provided)
* *payment_id* - 16 or 64 character hexadecimal payment id string (empty if not provided)
* *recipient_name* - string name of the payment recipient (empty if not provided)
* *tx_description* - string describing the reason for the tx (empty if not provided)
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"parse_uri","params":{"uri":"monero:44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A?tx_payment_id=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&tx_amount=0.000000000010&recipient_name=Monero%20Project%20donation%20address&tx_description=Testing%20out%20the%20make_uri%20function."}}' -H 'Content-Type: application/json'
{
"id": 0,
"jsonrpc": "2.0",
"result": {
"uri": {
"address": "44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A",
"amount": 10,
"payment_id": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"recipient_name": "Monero Project donation address",
"tx_description": "Testing out the make_uri function."
}
}
}
```
### **rescan_blockchain**
Rescan blockchain from scratch.
Inputs: *None*.
Outputs: *None*.
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"rescan_blockchain" -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
### **set_tx_notes**
Set arbitrary string notes for transactions.
Inputs:
* *txids* - array of string; transaction ids
* *notes* - array of string; notes for the transactions
Outputs: *None*.
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"set_tx_notes","params":{"txids":["6a1a100c079c236e2cbf36f7760e8ef1a9e8357c434aa790a8c78de653ec4cf2"],"notes":["This is an example"]}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
### **get_tx_notes**
Get string notes for transactions.
Inputs:
* *txids* - array of string; transaction ids
Outputs:
* *notes* - array of string; notes for the transactions
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_tx_notes","params":{"txids":["6a1a100c079c236e2cbf36f7760e8ef1a9e8357c434aa790a8c78de653ec4cf2"]}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"notes": ["This is an example"]
}
}
```
### **sign**
Sign a string.
Inputs:
* *data* - string;
Outputs:
* *signature* - string;
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sign","params":{"data":"This is sample data to be signed"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"signature": "SigV1Xp61ZkGguxSCHpkYEVw9eaWfRfSoAf36PCsSCApx4DUrKWHEqM9CdNwjeuhJii6LHDVDFxvTPijFsj3L8NDQp1TV"
}
}
```
### **verify**
Verify a signature on a string.
Inputs:
* *data* - string;
* *address* - string;
* *signature* - string;
Outputs:
* *good* - boolean;
Example:
```
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"verify","params":{"data":"This is sample data to be signed","address":"9sS8eRU2b5ZbN2FPSrpkiab1bjbHE5XtL6Ti6We3Fhw5aQPudRfVVypjgzKDNkxtvTQZSPs122NKggb2mqcqkKSeMNVu59S","signature":"SigV1Xp61ZkGguxSCHpkYEVw9eaWfRfSoAf36PCsSCApx4DUrKWHEqM9CdNwjeuhJii6LHDVDFxvTPijFsj3L8NDQp1TV"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"good": true
}
}
```
### **export_key_images**
Export a signed set of key images.
Inputs: *None*.
Outputs:
* *signed_key_images* - array of signed key images:
* *key_image* - string;
* *signature* - string;
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"export_key_images"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"signed_key_images": [{
"key_image": "62b83df78baad99e23b5ad3f667bc6f8d388a13d9e84c7bb6c223a556dfd34af",
"signature": "b87b7e989aa85aa3a2a7cd8adcb3a848d3512ff718b168e15217ff3e5da29c0183c0328b97cc052fcb5ee3548aa5e41e530ba9d854199ea19d7ddaf6a54a4c0a"
}]
}
}
```
### **import_key_images**
Import signed key images list and verify their spent status.
Inputs:
* *signed_key_images* - array of signed key images:
* *key_image* - string;
* *signature* - string;
Outputs:
* *height* - unsigned int;
* *spent* - unsigned int;
* *unspent* - unsigned int;
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"import_key_images", "params":{"signed_key_images":[{"key_image":"63b83df78cafd99e23b5ad3f667bc6f8d38813d9e84c7bb6c223a556dfd34af","signature":"b87b7e989aa86aa2a7a7cd8adcb3a848d3512ff718b168e15217ff3e5da29c0183c0328b97cc052fcb5ee3548aa5e41e530ba9d854199ea19d7ddaf6a54a4c0a"},{"key_image":"44ec12fbc56c533a30b09de8ae26febd515528c4957dfe875430377a7e212b4e","signature":"91105f15be0b25bc2a94bd78a7e261608974d6d888080b9f1815655b98af190340325ea1a0840a5951dacf913d4de1b2bd33ea59c1cb7bce1b6648afa7133d03"}]}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"height": 986050,
"spent": 10000100000000,
"unspent": 4979852760000
}
}
```
### **get_address_book**
Retrieves entries from the address book.
Inputs:
* *entries* - array of unsigned int; indices of the requested address book entries
Outputs:
* *entries* - array of entries:
* *address* - string;
* *description* - string;
* *index* - unsigned int;
* *payment_id* - string;
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_address_book","params":{"entries":[1,2]}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"entries": [{
"address": "A135xq3GVMdU5qtAm4hN7zjPgz8bRaiSUQmtuDdjZ6CgXayvQruJy3WPe95qj873JhK4YdTQjoR39Leg6esznQk8PckhjRN",
"description": "",
"index": 1,
"payment_id": "0000000000000000000000000000000000000000000000000000000000000000"
},{
"address": "A135xq3GVMdU5qtAm4hN7zjPgz8bRaiSUQmtuDdjZ6CgXayvQruJy3WPe95qj873JhK4YdTQjoR39Leg6esznQk8PckhjRN",
"description": "",
"index": 2,
"payment_id": "0000000000000000000000000000000000000000000000000000000000000000"
}]
}
}
```
### **add_address_book**
Add an entry to the address book.
Inputs:
* *address* - string;
* *payment_id* - (optional) string, defaults to "0000000000000000000000000000000000000000000000000000000000000000";
* *description* - (optional) string, defaults to "";
Outputs:
* *index* - unsigned int; The index of the address book entry.
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"add_address_book","params":{"address":"44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A","description":"Donation address for the Monero project"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"index": 2
}
}
```
### **delete_address_book**
Delete an entry from the address book.
Inputs:
* *index* - unsigned int; The index of the address book entry.
Outputs: *None*.
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"delete_address_book","params":{"index":0}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
### **rescan_spent**
Rescan the blockchain for spent outputs.
Inputs: *None*.
Outputs: *None*.
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"rescan_spent"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
### **start_mining**
Start mining in the Monero daemon.
Inputs:
* *threads_count* - unsigned int; Number of threads created for mining
* *do_background_mining* - boolean;
* *ignore_battery* - boolean;
Outputs: *None*.
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"start_mining","params":{"threads_count":1,"do_background_mining":true,"ignore_battery":true}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
### **stop_mining**
Stop mining in the Monero daemon.
Inputs: *None*.
Outputs: *None*.
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"stop_mining"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
### **get_languages**
Get a list of available languages for your wallet's seed.
Inputs: *None*.
Outputs:
* *languages* - array of string; List of available languages
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_languages"}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"languages": ["Deutsch","English","Español","Français","Italiano","Nederlands","Português","русский язык","日本語","简体中文 (中国)","Esperanto"]
}
}
```
### **create_wallet**
Create a new wallet. You need to have set the argument "--wallet-dir" when launching monero-wallet-rpc to make this work.
Inputs:
* *filename* - string;
* *password* - string;
* *language* - string; Language for your wallets' seed.
Outputs: *None*.
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"create_wallet","params":{"filename":"mytestwallet","password":"mytestpassword","language":"English"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
### **open_wallet**
Open a wallet. You need to have set the argument "--wallet-dir" when launching monero-wallet-rpc to make this work.
Inputs:
* *filename* - string;
* *password* - string;
Outputs: *None*.
Example:
```
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"open_wallet","params":{"filename":"mytestwallet","password":"mytestpassword"}}' -H 'Content-Type: application/json'
{
"id": "0",
"jsonrpc": "2.0",
"result": {
}
}
```
---
layout: moneropedia
entry: ""
terms: ["", ""]
summary: ""
---
### The Basics
{{ page.summary | capitalize }}.
\ No newline at end of file
---
layout: moneropedia
entry: "Account"
terms: ["account", "accounts", "wallet", "wallets"]
summary: "similar in function to a bank account, contains all of your sent and received transactions"
---
### The Basics
Those familiar with Monero's predecessors will be more familiar with the term *wallet* to describe this. In Monero we call this an account, and it is a private account owned and operated by a Monero user.
Your account contains all of the Monero @transactions you have sent and received. Your account balance is a sum of all the Monero you've received, less the Monero you've sent. When using Monero you may notice that your account has two balances, a locked and an unlocked balance. The unlocked balance contains funds that can be spent immediately, and the locked balance contains funds that you can't spend right now. You may receive a transaction that has an @unlock-time set, or you may have sent some Monero and are waiting for the @change to come back to your wallet, both situations that could lead to those funds being locked for a time.
A key difference between traditional electronic currency and Monero is that your account resides only under your control, normally on your computer, and cannot be accessed by anyone else if you [practice good security](#practicing-good-security).
### Multiple Accounts
There are no costs attached to creating a Monero account, and there are no fees charged except for individual @transaction fees that go to @miners.
This means that individuals can easily create a Monero account for themselves as well as a joint account to share with their partner, and individual accounts for their children. Similarly, a business could create separate accounts for each division or group. Since Monero's @transaction fees are quite low, moving funds between accounts is not an expensive exercise.
### Cryptographic Keys
Monero relies heavily on a cryptography principle known as *public/private key cryptography* or *asymmetric cryptography*, which is thoroughly detailed in [this Wikipedia article](https://en.wikipedia.org/wiki/Public-key_cryptography).
Your account is based on two keys, a @spend-key and a @view-key. The @spend-key is special in that it is the single key required to spend your Monero funds, whereas the @view-key allows you to reveal your @transactions to a third party, for example for auditing or accounting purposes. These keys in your account also play an important role in Monero's @transaction-privacy.
The private keys for both of these must be protected by you in order to retain your account privacy. On the other hand, the public keys are obviously public (they are part of your Monero account address). For normal public/private key cryptography someone could send you a private message by encrypting it with either of your public keys, and you would then be the only one able to decrypt it with your private keys.
### Backing Up Your Account
When you manage your own Monero Account with the private @spend-key, you are solely responsible for the security of your funds. Thankfully, Monero makes it very easy to backup your account. When creating a Monero account for the first time you will be given a unique @mnemonic-seed for your account that consists of 13 or 25 words in the language of your choosing. **This seed is the only thing you need to backup for your account**, and so it is imperative that it is written down and stored securely. Never store this seed in a form or location that would allow someone else to see it!
```
List of available languages for your wallet's seed:
0 : Deutsch
1 : English
2 : Español
3 : Français
4 : Italiano
5 : Nederlands
6 : Português
7 : русский язык
8 : 日本語
9 : 简体中文 (中国)
10 : Esperanto
Enter the number corresponding to the language of your choice: 1
Generated new wallet: 4B15ZjveuttEaTmfZjLVioPVw7bfSmRLpSgB33CJbuC6BoGtZrug9TDAmhZEWD6XoFDGz55bgzisT9Dnv61sbsA6Sa47TYu
view key: 4130fa26463d9451781771a8baa5d0b8085c47c4500cefe4746bab48f1d15903
**********************************************************************
Your wallet has been generated.
To start synchronizing with the daemon, use "refresh" command.
Use "help" command to see the list of available commands.
Always use "exit" command when closing monero-wallet-cli to save your
current session's state. Otherwise, you might need to synchronize
your wallet again (your wallet keys are NOT at risk in any case).
PLEASE NOTE: the following 25 words can be used to recover access to your wallet. Please write them down and store them somewhere safe and secure. Please do not store them in your email or on file storage services outside of your immediate control.
aunt knuckle italics moisture hawk thorn iris abort
chlorine smog uphill glass aptitude nowhere sewage plywood
dual relic fierce divers anvil nodes bubble cabin abort
**********************************************************************
Starting refresh...
Refresh done, blocks received: 21939
Balance: 0.000000000000, unlocked balance: 0.000000000000
Background refresh thread started
[wallet 4B15Zj]: █
```
As the example above indicates, it is incredibly important to store these words in safe locations. If you are concerned about the risk of critical loss at your home, for instance, you may want to store a second copy of your seed with your attorney or in a safety deposit box. It is also recommended that it is stored in a way that does not make it obvious that it is your seed, so writing it into a letter or as part of other notes is advisable.
### Practicing Good Security
Over and above backing up your @mnemonic-seed so that you have access to your account in the event of critical data loss, it is also important to practice good security. Use a secure password when creating a local Monero account (not used on [MyMonero](https://mymonero.com) or other web-based account systems).
Don't ever give your Monero account password to anyone, as this can be used to access the Monero on your computer without knowing your @mnemonic-seed. Similarly, make sure you have running and up-to-date antivirus, especially on Windows computers. Finally, be careful when clicking links in emails or on unknown and untrusted websites, as malware installed on your computer can sit and wait for you to access your Monero account before taking the funds from it.
### Leaving Your Account to Next of Kin
Providing access to your Monero account to your next of kin is just as easy as it is to backup your Monero account. Simply leave your @mnemonic-seed to them in your will, or store it somewhere safe where it will be given to them upon the execution of your will. A key advantage to this is that your next of kin won't have to wait for months for a third party to release the funds to them.
---
layout: moneropedia
entry: "Address Book"
tags: ["kovri"]
terms: ["Address-Book"]
summary: "Allows you to visit I2P websites/services that have the .i2p domain"
---
### The Basics
In order to browse @I2P sites or services with @Kovri, you'll need an address book. An address book will allow you to translate @I2P websites/services that use the `.i2p` [top-level domain](https://en.wikipedia.org/wiki/Top_level_domain) into an address that @I2P network will understand.
Without an address book, you would be stuck using a @base32-address every time you visit an @I2P website/service - and that's not fun!
### In-depth information
Since [DNS](https://en.wikipedia.org/wiki/DNS) does not exist on the @I2P network, @Kovri also does **not** use DNS or any sort of @canonically-unique-host resolution. Instead, Kovri pairs a @locally-unique-host to a @base64-address @destination in a @subscription. Once your address book is filled with a @subscription, you can resolve your favorite `.i2p` domain site into a usable @I2P destination.
### Creating an Address Book
By default, your installation will come with a default public @subscription called `hosts.txt` in your @data-directory. When @Kovri starts, it loads this subscription and fetches any other subscriptions you've specified. Once loaded, your address book will be appropriately filled. For details on how to manage subscriptions, see @subscription.
### Updating the Address Book
Currently, there are several ways to update your address book:
1. Use a @jump-service to insert I2P addresses into your address book
2. Use a @jump-service to copy/paste an address into your private @subscription
3. Manually add or subtract from a private @subscription
**Note: Kovri is in heavy development. In the future there *will* be easier ways to update the address book**
### Address Book / Naming specification
For specification details and more, visit the [Address Book and Naming Specification](https://geti2p.net/en/docs/naming)
---
layout: moneropedia
entry: "Address"
terms: ["address", "addresses"]
summary: "either an alias, such as donate.getmonero.org, or a set of 95 characters starting with a 4"
---
### The Basics
When you send Monero to someone you only need one piece of information, and that is their Monero address. A *raw* Monero address is a set of 95 characters starting with a '4'. The Monero donation address, for instance, is <span class="long-term">44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A</span>.
Because those addresses are long and complex you will often encounter an @OpenAlias address instead. For example, Monero donations can be sent to <span class="long-term">donate@getmonero.org</span> or <span class="long-term">donate.getmonero.org</span>.
If you would like to get an @OpenAlias address of your own then there is some information on the [OpenAlias page](/knowledge-base/openalias).
### Integrated address
An integrated address is an address combined with an encrypted 64-bit @payment-ID. A raw integrated address is 106 characters long.
### In-depth Information
The address is actually the concatenation, in Base58 format, of the *public* @spend-key and the *public* @view-key, prefixed with the network byte (the number 18 for Monero) and suffixed with the first four bytes of the Keccac-256 hash of the whole string (used as a checksum).
---
layout: moneropedia
entry: "Airgap"
terms: ["airgap"]
summary: "An airgap is a security measure to physically separate a computer or device from all other networks, such as the Internet."
---
### The Basics
"An air gap, air wall or air gapping is a network security measure employed on one or more computers to ensure that a secure computer network is physically isolated from unsecured networks, such as the public Internet or an unsecured local area network.[2] The name arises from the technique of creating a network that is physically separated (with a conceptual air gap) from all other networks. The air gap may not be completely literal, as networks employing the use of dedicated cryptographic devices that can tunnel packets over untrusted networks while avoiding packet rate or size variation can be considered air gapped, as there is no ability for computers on opposite sides of the gap to communicate."
Taken from https://en.wikipedia.org/wiki/Air_gap_(networking)
---
layout: moneropedia
entry: "Base32 address"
tags: ["kovri"]
terms: ["Base32-address", "Base32-addresses"]
summary: "Base32 encoded hash of a Base64 address"
---
### The Basics
A Base32 address is a shortened, encoded version of an @I2P address. The Base32 address is the first part in a `.b32.i2p` hostname.
Example:
`i35yftyyb22xhcvghmev46t5knefur5v66qzekkajatwfwhyklvq.b32.i2p`
where
`i35yftyyb22xhcvghmev46t5knefur5v66qzekkajatwfwhyklvq` is the Base32 address.
### In-depth Information
Ultimately, a Base32 address is a 52 character [Base32 encoded representation](https://en.wikipedia.org/wiki/Base32) of the full SHA-256 hash of an @I2P @base64-address.
### Notes
**Note: `.b32` is not a sub-domain of `.i2p`**
---
layout: moneropedia
entry: "Base64 address"
tags: ["kovri"]
terms: ["Base64-address", "Base64-addresses"]
summary: "Base64 encoded I2P destination"
---
### The Basics
A @base64-address is a 516-character [Base64 encoded](https://en.wikipedia.org/wiki/Base64) @I2P @destination. @base64-addresses are primarily used for @address-book, @jump-service, and also internally.
Example:
```
AQZGLAMpI9Q0l0kmMj1vpJJYK3CjLp~fE3MfvE-e7KMKjI5cPOH6EN8m794uHJ6b09qM8mb9VEv1lVLEov~usVliTSXCSHuRBOCIwIOuDNU0AbVa4BpIx~2sU4TxKhoaA3zQ6VzINoduTdR2IJhPvI5xzezp7dR21CEQGGTbenDslXeQ4iLHFA2~bzp1f7etSl9T2W9RID-KH78sRQmzWnv7dbhNodMbpO6xsf1vENf6bMRzqD5vgHEHZu2aSoNuPyYxDU1eM6--61b2xp9mt1k3ud-5WvPVg89RaU9ugU5cxaHgR927lHMCAEU2Ax~zUb3DbrvgQBOTHnJEx2Fp7pOK~PnP6ylkYKQMfLROosLDXinxOoSKP0UYCh2WgIUPwE7WzJH3PiJVF0~WZ1dZ9mg00c~gzLgmkOxe1NpFRNg6XzoARivNVB5NuWqNxr5WKWMLBGQ9YHvHO1OHhUJTowb9X90BhtHnLK2AHwO6fV-iHWxRJyDabhSMj1kuYpVUBQAEAAcAAA==
```
### In-depth Information
See @destination for details behind @base64-address
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment