From 8f054aa611432687c74ed8808ceb85ab561b658b Mon Sep 17 00:00:00 2001 From: null Date: Fri, 22 Jan 2021 15:04:23 +0100 Subject: [PATCH] Add onion, minify --- .gitignore | 3 +- .nojekyll | 0 CNAME | 1 - mkdocs-material | 1 + mkdocs.yml | 32 +- monerodocs-org.iml | 9 + public/404.html | 914 +--- public/accepting-monero/overview/index.html | 990 +--- public/assets/manifest.json | 14 + .../stylesheets/overrides.46d791ea.min.css | 3 + .../overrides.46d791ea.min.css.map | 1 + .../asymmetric/edwards25519/index.html | 1199 +---- .../asymmetric/introduction/index.html | 1013 +---- .../asymmetric/key-image/index.html | 1096 +---- .../asymmetric/private-key/index.html | 1160 +---- .../asymmetric/public-key/index.html | 1086 +---- public/cryptography/base58/index.html | 1049 +---- public/cryptography/introduction/index.html | 1000 +--- public/cryptography/keccak-256/index.html | 1097 +---- public/cryptography/prng/index.html | 1072 +---- public/index.html | 1030 +---- public/infrastructure/monero-pulse/index.html | 1179 +---- public/infrastructure/networks/index.html | 1147 +---- .../tor-onion-p2p-seed-nodes/index.html | 1171 +---- .../download-monero-binaries/index.html | 1073 +---- .../index.html | 1295 +----- .../index.html | 1347 +----- .../interacting/monero-config-file/index.html | 1165 +---- .../monero-wallet-cli-reference/index.html | 2142 +-------- .../monero-wallet-gui-reference/index.html | 1204 +---- .../monero-wallet-rpc-reference/index.html | 4007 ++--------------- .../interacting/monerod-reference/index.html | 2302 +--------- public/interacting/overview/index.html | 1268 +----- .../verify-monero-binaries/index.html | 1106 +---- public/multisignature/index.html | 1210 +---- public/proof-of-work/cryptonight/index.html | 1398 +----- .../pow-in-cryptocurrencies/index.html | 1078 +---- public/proof-of-work/random-x/index.html | 997 +--- public/proof-of-work/what-is-pow/index.html | 1102 +---- .../integrated-address/index.html | 1146 +---- public/public-address/main-address/index.html | 931 +--- .../standard-address/index.html | 1149 +---- public/public-address/subaddress/index.html | 1337 +----- .../index.html | 931 +--- .../open-node-tor-onion/index.html | 1503 +------ public/sitemap.xml | 68 +- public/sitemap.xml.gz | Bin 559 -> 559 bytes public/technical-specs/index.html | 1361 +----- public/todo/bulletproofs/index.html | 956 +--- .../todo/confidential-transactions/index.html | 947 +--- public/todo/p2p/index.html | 931 +--- public/todo/pedersen-commitment/index.html | 952 +--- .../risks-of-using-remote-node/index.html | 972 +--- public/todo/stealth-address/index.html | 1077 +---- public/todo/tx/index.html | 952 +--- 55 files changed, 603 insertions(+), 53571 deletions(-) delete mode 100644 .nojekyll delete mode 100644 CNAME create mode 160000 mkdocs-material create mode 100644 monerodocs-org.iml create mode 100644 public/assets/manifest.json create mode 100644 public/assets/stylesheets/overrides.46d791ea.min.css create mode 100644 public/assets/stylesheets/overrides.46d791ea.min.css.map diff --git a/.gitignore b/.gitignore index e8e42fb..968bf9a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea -site +.iml + diff --git a/.nojekyll b/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/CNAME b/CNAME deleted file mode 100644 index f75ef87..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -monerodocs.org \ No newline at end of file diff --git a/mkdocs-material b/mkdocs-material new file mode 160000 index 0000000..2bab77c --- /dev/null +++ b/mkdocs-material @@ -0,0 +1 @@ +Subproject commit 2bab77cf071d2a50b5990667b662708501328e09 diff --git a/mkdocs.yml b/mkdocs.yml index ae2601c..762862e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -5,6 +5,8 @@ site_author: "Piotr 'Qertoip' Włodarek" site_url: 'https://monerodocs.org' site_dir: 'public' +copyright: '© 2021 MoneroDocs under MIT' + nav: - Home: 'index.md' - Interacting: @@ -53,12 +55,30 @@ nav: - Overview: 'accepting-monero/overview.md' theme: - name: 'material' + name: null + custom_dir: mkdocs-material/material + + # 404 page + static_templates: + - 404.html + + # Necessary for search to work properly + include_search_page: false + search_index_only: true + + # Default values, taken from mkdocs_theme.yml + language: en + font: + text: Roboto + code: Roboto Mono + favicon: assets/favicon.png + palette: primary: white accent: indigo + icon: + logo: logo logo: 'images/monero.svg' - language: 'en' extra_css: ['overrides.css'] @@ -80,3 +100,11 @@ markdown_extensions: - pymdownx.inlinehilite - pymdownx.superfences # nest code blocks inside codeblocks - pymdownx.snippets # insert content from other files + +plugins: + - search + - minify: + minify_html: true + minify_js: true + htmlmin_opts: + remove_comments: true diff --git a/monerodocs-org.iml b/monerodocs-org.iml new file mode 100644 index 0000000..8021953 --- /dev/null +++ b/monerodocs-org.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/public/404.html b/public/404.html index e8683d3..7d29bf2 100644 --- a/public/404.html +++ b/public/404.html @@ -1,910 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
- -

404 - Not found

- - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/accepting-monero/overview/index.html b/public/accepting-monero/overview/index.html index 8c5b529..dce3a82 100644 --- a/public/accepting-monero/overview/index.html +++ b/public/accepting-monero/overview/index.html @@ -1,986 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Accepting Monero for Businesses - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Accepting Monero for Businesses

-

This is for businesses that want to accept Monero in an automated way, including:

-
    -
  • merchants
  • -
  • service providers
  • -
  • exchanges
  • -
-

We prepared a comparison of available venues to accept Monero, as of 2019-01-28:

-

Accepting Monero as a Business - Comparison Matrix

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/assets/manifest.json b/public/assets/manifest.json new file mode 100644 index 0000000..e0cc752 --- /dev/null +++ b/public/assets/manifest.json @@ -0,0 +1,14 @@ +{ + "assets/javascripts/bundle.js": "assets/javascripts/bundle.83e5331e.min.js", + "assets/javascripts/bundle.js.map": "assets/javascripts/bundle.83e5331e.min.js.map", + "assets/javascripts/vendor.js": "assets/javascripts/vendor.93c04032.min.js", + "assets/javascripts/vendor.js.map": "assets/javascripts/vendor.93c04032.min.js.map", + "assets/javascripts/worker/search.js": "assets/javascripts/worker/search.8c7e0a7e.min.js", + "assets/javascripts/worker/search.js.map": "assets/javascripts/worker/search.8c7e0a7e.min.js.map", + "assets/stylesheets/main.css": "assets/stylesheets/main.15aa0b43.min.css", + "assets/stylesheets/main.css.map": "assets/stylesheets/main.15aa0b43.min.css.map", + "assets/stylesheets/overrides.css": "assets/stylesheets/overrides.46d791ea.min.css", + "assets/stylesheets/overrides.css.map": "assets/stylesheets/overrides.46d791ea.min.css.map", + "assets/stylesheets/palette.css": "assets/stylesheets/palette.75751829.min.css", + "assets/stylesheets/palette.css.map": "assets/stylesheets/palette.75751829.min.css.map" +} \ No newline at end of file diff --git a/public/assets/stylesheets/overrides.46d791ea.min.css b/public/assets/stylesheets/overrides.46d791ea.min.css new file mode 100644 index 0000000..81c8ec6 --- /dev/null +++ b/public/assets/stylesheets/overrides.46d791ea.min.css @@ -0,0 +1,3 @@ +@-webkit-keyframes tx-heart{0%,40%,80%,100%{transform:scale(1)}20%,60%{transform:scale(1.15)}}@keyframes tx-heart{0%,40%,80%,100%{transform:scale(1)}20%,60%{transform:scale(1.15)}}.md-typeset figure>p+figcaption{margin-top:-1.2rem}.md-typeset .twitter{color:#00acee}.md-typeset .tx-video{width:auto}.md-typeset .tx-video__inner{position:relative;width:100%;height:0;padding-bottom:56.138%}.md-typeset .tx-video iframe{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;border:none}.md-typeset .tx-heart{-webkit-animation:tx-heart 1000ms infinite;animation:tx-heart 1000ms infinite}.md-typeset .tx-insiders{color:#e91e63}.md-typeset .tx-insiders-button{font-weight:400}.md-typeset .tx-insiders-count{font-weight:700}.md-typeset .tx-insiders-list{margin:2em 0;overflow:auto}.md-typeset .tx-insiders-list__item{display:block;float:left;width:3rem;height:3rem;margin:.2rem;overflow:hidden;border-radius:100%;transform:scale(1);transition:color 125ms,transform 125ms}.md-typeset .tx-insiders-list__item img{display:block;width:100%;height:auto;-webkit-filter:grayscale(100%);filter:grayscale(100%);transition:-webkit-filter 125ms;transition:filter 125ms;transition:filter 125ms, -webkit-filter 125ms}.md-typeset .tx-insiders-list__item:focus,.md-typeset .tx-insiders-list__item:hover{transform:scale(1.1)}.md-typeset .tx-insiders-list__item:focus img,.md-typeset .tx-insiders-list__item:hover img{-webkit-filter:grayscale(0%);filter:grayscale(0%)}.md-typeset .tx-insiders-list__item--private{color:var(--md-default-fg-color--lighter);font-weight:700;font-size:1.2rem;line-height:3rem;text-align:center;background:var(--md-default-fg-color--lightest)}.md-typeset .tx-switch button{cursor:pointer;transition:opacity 250ms}.md-typeset .tx-switch button:focus,.md-typeset .tx-switch button:hover{opacity:.75}.md-typeset .tx-switch button>code{display:block;color:var(--md-primary-bg-color);background-color:var(--md-primary-fg-color)}.md-typeset .tx-columns ol,.md-typeset .tx-columns ul{-moz-columns:2;columns:2}@media screen and (max-width: 29.9375em){.md-typeset .tx-columns ol,.md-typeset .tx-columns ul{-moz-columns:initial;columns:initial}}.md-typeset .tx-columns li{-moz-column-break-inside:avoid;break-inside:avoid}.md-announce a,.md-announce a:focus,.md-announce a:hover{color:currentColor}.md-announce strong{white-space:nowrap}.md-announce .twitter{margin-left:.2em}.tx-content__footer{margin-top:1rem;text-align:center}.tx-content__footer a{display:inline-block;color:#e91e63;transition:transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1),color 125ms}.tx-content__footer a:focus,.tx-content__footer a:hover{transform:scale(1.2)}.tx-content__footer hr{display:inline-block;width:2rem;margin:1em;vertical-align:middle;background-color:currentColor;border:none}.tx-container{padding-top:1rem;background:url("data:image/svg+xml;utf8,") no-repeat bottom,linear-gradient(to bottom, var(--md-primary-fg-color), #a63fd9 99%, var(--md-default-bg-color) 99%)}[data-md-color-scheme=slate] .tx-container{background:url("data:image/svg+xml;utf8,") no-repeat bottom,linear-gradient(to bottom, var(--md-primary-fg-color), #a63fd9 99%, var(--md-default-bg-color) 99%)}.tx-hero{margin:0 .8rem;color:var(--md-primary-bg-color)}.tx-hero h1{margin-bottom:1rem;color:currentColor;font-weight:700}@media screen and (max-width: 29.9375em){.tx-hero h1{font-size:1.4rem}}.tx-hero__content{padding-bottom:6rem}@media screen and (min-width: 60em){.tx-hero{display:flex;align-items:stretch}.tx-hero__content{max-width:19rem;margin-top:3.5rem;padding-bottom:14vw}.tx-hero__image{order:1;width:38rem;transform:translateX(4rem)}}@media screen and (min-width: 76.25em){.tx-hero__image{transform:translateX(8rem)}}.tx-hero .md-button{margin-top:.5rem;margin-right:.5rem;color:var(--md-primary-bg-color)}.tx-hero .md-button:focus,.tx-hero .md-button:hover{color:var(--md-default-bg-color);background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color)}.tx-hero .md-button--primary{color:#894da8;background-color:var(--md-primary-bg-color);border-color:var(--md-primary-bg-color)} + +/*# sourceMappingURL=overrides.46d791ea.min.css.map*/ \ No newline at end of file diff --git a/public/assets/stylesheets/overrides.46d791ea.min.css.map b/public/assets/stylesheets/overrides.46d791ea.min.css.map new file mode 100644 index 0000000..2f5f50e --- /dev/null +++ b/public/assets/stylesheets/overrides.46d791ea.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/assets/stylesheets/overrides/_typeset.scss","webpack:///./node_modules/material-design-color/material-color.scss","webpack:///./src/assets/stylesheets/utilities/_break.scss","webpack:///./src/assets/stylesheets/overrides/layout/_announce.scss","webpack:///./src/assets/stylesheets/overrides/layout/_content.scss","webpack:///./src/assets/stylesheets/overrides/layout/_hero.scss"],"names":[],"mappings":"AA2BA,4BACE,gBACE,mBAEF,QACE,uBALJ,oBACE,gBACE,mBAEF,QACE,uBAYF,gCACE,mBAIF,qBACE,cAIF,sBACE,WAGA,6BACE,kBACA,WACA,SACA,uBAIF,6BACE,kBACA,MACA,OACA,WACA,YACA,gBACA,YAKJ,sBACE,8EAIF,yBACE,aC0BY,CDtBd,gCACE,gBAIF,+BACE,gBAIF,8BACE,aACA,cAGA,oCACE,cACA,WACA,WACA,YACA,aACA,gBACA,mBACA,mBACA,sCACE,CAIF,wCACE,cACA,WACA,YACA,sDACA,sGAIF,oFAEE,qBAGA,4FACE,kDAKJ,6CACE,0CACA,gBACA,iBACA,iBACA,kBACA,gDAMN,8BACE,eACA,yBAGA,wEAEE,YAIF,mCACE,cACA,iCACA,4CAQF,sDAEE,yBEgCF,yCFlCA,sDAMI,sCAKJ,2BACE,kDGzJJ,yDAGE,mBAIF,oBACE,mBAIF,sBACE,iBChBJ,oBACE,gBACA,kBAGA,sBACE,qBACA,aH4EY,CG3EZ,qEACE,CAIF,wDAEE,qBAKJ,uBACE,qBACA,WACA,WACA,sBACA,8BACA,YC1BJ,cACE,iBACA,0YACE,CASF,2CACE,4YACE,CAWN,SACE,eACA,iCAGA,YACE,mBACA,mBACA,gBHiJA,yCGpJF,YAOI,kBAKJ,kBACE,oBHqHA,oCGvIJ,SAuBI,aACA,oBAGA,kBACE,gBACA,kBACA,oBAIF,gBACE,QACA,YACA,4BHkGF,uCG1FA,gBACE,4BAKJ,oBACE,iBACA,mBACA,iCAGA,oDAEE,iCACA,2CACA,uCAIF,6BACE,cACA,4CACA,wC","file":"assets/stylesheets/overrides.46d791ea.min.css","sourcesContent":["////\n/// Copyright (c) 2016-2020 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Keyframes\n// ----------------------------------------------------------------------------\n\n// Pumping heart animation\n@keyframes tx-heart {\n 0%, 40%, 80%, 100% {\n transform: scale(1);\n }\n 20%, 60% {\n transform: scale(1.15);\n }\n}\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n // Screenshot caption\n figure > p + figcaption {\n margin-top: px2rem(-24px);\n }\n\n // Twitter icon\n .twitter {\n color: #00ACEE;\n }\n\n // Insiders video\n .tx-video {\n width: auto;\n\n // Insiders video container\n &__inner {\n position: relative;\n width: 100%;\n height: 0;\n padding-bottom: 56.138%;\n }\n\n // Insiders video iframe\n iframe {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n border: none;\n }\n }\n\n // Pumping heart\n .tx-heart {\n animation: tx-heart 1000ms infinite;\n }\n\n // Insiders color (for links, etc.)\n .tx-insiders {\n color: $clr-pink-500;\n }\n\n // Insiders button\n .tx-insiders-button {\n font-weight: 400;\n }\n\n // Insiders count\n .tx-insiders-count {\n font-weight: 700;\n }\n\n // Insiders list\n .tx-insiders-list {\n margin: 2em 0;\n overflow: auto;\n\n // Insiders list item\n &__item {\n display: block;\n float: left;\n width: px2rem(60px);\n height: px2rem(60px);\n margin: px2rem(4px);\n overflow: hidden;\n border-radius: 100%;\n transform: scale(1);\n transition:\n color 125ms,\n transform 125ms;\n\n // Sponsor avatar\n img {\n display: block;\n width: 100%;\n height: auto;\n filter: grayscale(100%);\n transition: filter 125ms;\n }\n\n // Sponsor item on focus/hover\n &:focus,\n &:hover {\n transform: scale(1.1);\n\n // Sponsor avatar\n img {\n filter: grayscale(0%);\n }\n }\n\n // Private sponsor\n &--private {\n color: var(--md-default-fg-color--lighter);\n font-weight: 700;\n font-size: px2rem(24px);\n line-height: px2rem(60px);\n text-align: center;\n background: var(--md-default-fg-color--lightest);\n }\n }\n }\n\n // Switch buttons\n .tx-switch button {\n cursor: pointer;\n transition: opacity 250ms;\n\n // Button on focus/hover\n &:focus,\n &:hover {\n opacity: 0.75;\n }\n\n // Code block\n > code {\n display: block;\n color: var(--md-primary-bg-color);\n background-color: var(--md-primary-fg-color);\n }\n }\n\n // Two-column layout\n .tx-columns {\n\n // Column\n ol,\n ul {\n columns: 2;\n\n // [mobile portrait -]: Reset columns on mobile\n @include break-to-device(mobile portrait) {\n columns: initial;\n }\n }\n\n // Column item\n li {\n break-inside: avoid;\n }\n }\n}\n","// ==========================================================================\n//\n// Name: UI Color Palette\n// Description: The color palette of material design.\n// Version: 2.3.1\n//\n// Author: Denis Malinochkin\n// Git: https://github.com/mrmlnc/material-color\n//\n// twitter: @mrmlnc\n//\n// ==========================================================================\n\n\n//\n// List of base colors\n//\n\n// $clr-red\n// $clr-pink\n// $clr-purple\n// $clr-deep-purple\n// $clr-indigo\n// $clr-blue\n// $clr-light-blue\n// $clr-cyan\n// $clr-teal\n// $clr-green\n// $clr-light-green\n// $clr-lime\n// $clr-yellow\n// $clr-amber\n// $clr-orange\n// $clr-deep-orange\n// $clr-brown\n// $clr-grey\n// $clr-blue-grey\n// $clr-black\n// $clr-white\n\n\n//\n// Red\n//\n\n$clr-red-list: (\n \"base\": #f44336,\n \"50\": #ffebee,\n \"100\": #ffcdd2,\n \"200\": #ef9a9a,\n \"300\": #e57373,\n \"400\": #ef5350,\n \"500\": #f44336,\n \"600\": #e53935,\n \"700\": #d32f2f,\n \"800\": #c62828,\n \"900\": #b71c1c,\n \"a100\": #ff8a80,\n \"a200\": #ff5252,\n \"a400\": #ff1744,\n \"a700\": #d50000\n);\n\n$clr-red: map-get($clr-red-list, \"base\");\n\n$clr-red-50: map-get($clr-red-list, \"50\");\n$clr-red-100: map-get($clr-red-list, \"100\");\n$clr-red-200: map-get($clr-red-list, \"200\");\n$clr-red-300: map-get($clr-red-list, \"300\");\n$clr-red-400: map-get($clr-red-list, \"400\");\n$clr-red-500: map-get($clr-red-list, \"500\");\n$clr-red-600: map-get($clr-red-list, \"600\");\n$clr-red-700: map-get($clr-red-list, \"700\");\n$clr-red-800: map-get($clr-red-list, \"800\");\n$clr-red-900: map-get($clr-red-list, \"900\");\n$clr-red-a100: map-get($clr-red-list, \"a100\");\n$clr-red-a200: map-get($clr-red-list, \"a200\");\n$clr-red-a400: map-get($clr-red-list, \"a400\");\n$clr-red-a700: map-get($clr-red-list, \"a700\");\n\n\n//\n// Pink\n//\n\n$clr-pink-list: (\n \"base\": #e91e63,\n \"50\": #fce4ec,\n \"100\": #f8bbd0,\n \"200\": #f48fb1,\n \"300\": #f06292,\n \"400\": #ec407a,\n \"500\": #e91e63,\n \"600\": #d81b60,\n \"700\": #c2185b,\n \"800\": #ad1457,\n \"900\": #880e4f,\n \"a100\": #ff80ab,\n \"a200\": #ff4081,\n \"a400\": #f50057,\n \"a700\": #c51162\n);\n\n$clr-pink: map-get($clr-pink-list, \"base\");\n\n$clr-pink-50: map-get($clr-pink-list, \"50\");\n$clr-pink-100: map-get($clr-pink-list, \"100\");\n$clr-pink-200: map-get($clr-pink-list, \"200\");\n$clr-pink-300: map-get($clr-pink-list, \"300\");\n$clr-pink-400: map-get($clr-pink-list, \"400\");\n$clr-pink-500: map-get($clr-pink-list, \"500\");\n$clr-pink-600: map-get($clr-pink-list, \"600\");\n$clr-pink-700: map-get($clr-pink-list, \"700\");\n$clr-pink-800: map-get($clr-pink-list, \"800\");\n$clr-pink-900: map-get($clr-pink-list, \"900\");\n$clr-pink-a100: map-get($clr-pink-list, \"a100\");\n$clr-pink-a200: map-get($clr-pink-list, \"a200\");\n$clr-pink-a400: map-get($clr-pink-list, \"a400\");\n$clr-pink-a700: map-get($clr-pink-list, \"a700\");\n\n\n//\n// Purple\n//\n\n$clr-purple-list: (\n \"base\": #9c27b0,\n \"50\": #f3e5f5,\n \"100\": #e1bee7,\n \"200\": #ce93d8,\n \"300\": #ba68c8,\n \"400\": #ab47bc,\n \"500\": #9c27b0,\n \"600\": #8e24aa,\n \"700\": #7b1fa2,\n \"800\": #6a1b9a,\n \"900\": #4a148c,\n \"a100\": #ea80fc,\n \"a200\": #e040fb,\n \"a400\": #d500f9,\n \"a700\": #aa00ff\n);\n\n$clr-purple: map-get($clr-purple-list, \"base\");\n\n$clr-purple-50: map-get($clr-purple-list, \"50\");\n$clr-purple-100: map-get($clr-purple-list, \"100\");\n$clr-purple-200: map-get($clr-purple-list, \"200\");\n$clr-purple-300: map-get($clr-purple-list, \"300\");\n$clr-purple-400: map-get($clr-purple-list, \"400\");\n$clr-purple-500: map-get($clr-purple-list, \"500\");\n$clr-purple-600: map-get($clr-purple-list, \"600\");\n$clr-purple-700: map-get($clr-purple-list, \"700\");\n$clr-purple-800: map-get($clr-purple-list, \"800\");\n$clr-purple-900: map-get($clr-purple-list, \"900\");\n$clr-purple-a100: map-get($clr-purple-list, \"a100\");\n$clr-purple-a200: map-get($clr-purple-list, \"a200\");\n$clr-purple-a400: map-get($clr-purple-list, \"a400\");\n$clr-purple-a700: map-get($clr-purple-list, \"a700\");\n\n\n//\n// Deep purple\n//\n\n$clr-deep-purple-list: (\n \"base\": #673ab7,\n \"50\": #ede7f6,\n \"100\": #d1c4e9,\n \"200\": #b39ddb,\n \"300\": #9575cd,\n \"400\": #7e57c2,\n \"500\": #673ab7,\n \"600\": #5e35b1,\n \"700\": #512da8,\n \"800\": #4527a0,\n \"900\": #311b92,\n \"a100\": #b388ff,\n \"a200\": #7c4dff,\n \"a400\": #651fff,\n \"a700\": #6200ea\n);\n\n$clr-deep-purple: map-get($clr-deep-purple-list, \"base\");\n\n$clr-deep-purple-50: map-get($clr-deep-purple-list, \"50\");\n$clr-deep-purple-100: map-get($clr-deep-purple-list, \"100\");\n$clr-deep-purple-200: map-get($clr-deep-purple-list, \"200\");\n$clr-deep-purple-300: map-get($clr-deep-purple-list, \"300\");\n$clr-deep-purple-400: map-get($clr-deep-purple-list, \"400\");\n$clr-deep-purple-500: map-get($clr-deep-purple-list, \"500\");\n$clr-deep-purple-600: map-get($clr-deep-purple-list, \"600\");\n$clr-deep-purple-700: map-get($clr-deep-purple-list, \"700\");\n$clr-deep-purple-800: map-get($clr-deep-purple-list, \"800\");\n$clr-deep-purple-900: map-get($clr-deep-purple-list, \"900\");\n$clr-deep-purple-a100: map-get($clr-deep-purple-list, \"a100\");\n$clr-deep-purple-a200: map-get($clr-deep-purple-list, \"a200\");\n$clr-deep-purple-a400: map-get($clr-deep-purple-list, \"a400\");\n$clr-deep-purple-a700: map-get($clr-deep-purple-list, \"a700\");\n\n\n//\n// Indigo\n//\n\n$clr-indigo-list: (\n \"base\": #3f51b5,\n \"50\": #e8eaf6,\n \"100\": #c5cae9,\n \"200\": #9fa8da,\n \"300\": #7986cb,\n \"400\": #5c6bc0,\n \"500\": #3f51b5,\n \"600\": #3949ab,\n \"700\": #303f9f,\n \"800\": #283593,\n \"900\": #1a237e,\n \"a100\": #8c9eff,\n \"a200\": #536dfe,\n \"a400\": #3d5afe,\n \"a700\": #304ffe\n);\n\n$clr-indigo: map-get($clr-indigo-list, \"base\");\n\n$clr-indigo-50: map-get($clr-indigo-list, \"50\");\n$clr-indigo-100: map-get($clr-indigo-list, \"100\");\n$clr-indigo-200: map-get($clr-indigo-list, \"200\");\n$clr-indigo-300: map-get($clr-indigo-list, \"300\");\n$clr-indigo-400: map-get($clr-indigo-list, \"400\");\n$clr-indigo-500: map-get($clr-indigo-list, \"500\");\n$clr-indigo-600: map-get($clr-indigo-list, \"600\");\n$clr-indigo-700: map-get($clr-indigo-list, \"700\");\n$clr-indigo-800: map-get($clr-indigo-list, \"800\");\n$clr-indigo-900: map-get($clr-indigo-list, \"900\");\n$clr-indigo-a100: map-get($clr-indigo-list, \"a100\");\n$clr-indigo-a200: map-get($clr-indigo-list, \"a200\");\n$clr-indigo-a400: map-get($clr-indigo-list, \"a400\");\n$clr-indigo-a700: map-get($clr-indigo-list, \"a700\");\n\n\n//\n// Blue\n//\n\n$clr-blue-list: (\n \"base\": #2196f3,\n \"50\": #e3f2fd,\n \"100\": #bbdefb,\n \"200\": #90caf9,\n \"300\": #64b5f6,\n \"400\": #42a5f5,\n \"500\": #2196f3,\n \"600\": #1e88e5,\n \"700\": #1976d2,\n \"800\": #1565c0,\n \"900\": #0d47a1,\n \"a100\": #82b1ff,\n \"a200\": #448aff,\n \"a400\": #2979ff,\n \"a700\": #2962ff\n);\n\n$clr-blue: map-get($clr-blue-list, \"base\");\n\n$clr-blue-50: map-get($clr-blue-list, \"50\");\n$clr-blue-100: map-get($clr-blue-list, \"100\");\n$clr-blue-200: map-get($clr-blue-list, \"200\");\n$clr-blue-300: map-get($clr-blue-list, \"300\");\n$clr-blue-400: map-get($clr-blue-list, \"400\");\n$clr-blue-500: map-get($clr-blue-list, \"500\");\n$clr-blue-600: map-get($clr-blue-list, \"600\");\n$clr-blue-700: map-get($clr-blue-list, \"700\");\n$clr-blue-800: map-get($clr-blue-list, \"800\");\n$clr-blue-900: map-get($clr-blue-list, \"900\");\n$clr-blue-a100: map-get($clr-blue-list, \"a100\");\n$clr-blue-a200: map-get($clr-blue-list, \"a200\");\n$clr-blue-a400: map-get($clr-blue-list, \"a400\");\n$clr-blue-a700: map-get($clr-blue-list, \"a700\");\n\n\n//\n// Light Blue\n//\n\n$clr-light-blue-list: (\n \"base\": #03a9f4,\n \"50\": #e1f5fe,\n \"100\": #b3e5fc,\n \"200\": #81d4fa,\n \"300\": #4fc3f7,\n \"400\": #29b6f6,\n \"500\": #03a9f4,\n \"600\": #039be5,\n \"700\": #0288d1,\n \"800\": #0277bd,\n \"900\": #01579b,\n \"a100\": #80d8ff,\n \"a200\": #40c4ff,\n \"a400\": #00b0ff,\n \"a700\": #0091ea\n);\n\n$clr-light-blue: map-get($clr-light-blue-list, \"base\");\n\n$clr-light-blue-50: map-get($clr-light-blue-list, \"50\");\n$clr-light-blue-100: map-get($clr-light-blue-list, \"100\");\n$clr-light-blue-200: map-get($clr-light-blue-list, \"200\");\n$clr-light-blue-300: map-get($clr-light-blue-list, \"300\");\n$clr-light-blue-400: map-get($clr-light-blue-list, \"400\");\n$clr-light-blue-500: map-get($clr-light-blue-list, \"500\");\n$clr-light-blue-600: map-get($clr-light-blue-list, \"600\");\n$clr-light-blue-700: map-get($clr-light-blue-list, \"700\");\n$clr-light-blue-800: map-get($clr-light-blue-list, \"800\");\n$clr-light-blue-900: map-get($clr-light-blue-list, \"900\");\n$clr-light-blue-a100: map-get($clr-light-blue-list, \"a100\");\n$clr-light-blue-a200: map-get($clr-light-blue-list, \"a200\");\n$clr-light-blue-a400: map-get($clr-light-blue-list, \"a400\");\n$clr-light-blue-a700: map-get($clr-light-blue-list, \"a700\");\n\n\n//\n// Cyan\n//\n\n$clr-cyan-list: (\n \"base\": #00bcd4,\n \"50\": #e0f7fa,\n \"100\": #b2ebf2,\n \"200\": #80deea,\n \"300\": #4dd0e1,\n \"400\": #26c6da,\n \"500\": #00bcd4,\n \"600\": #00acc1,\n \"700\": #0097a7,\n \"800\": #00838f,\n \"900\": #006064,\n \"a100\": #84ffff,\n \"a200\": #18ffff,\n \"a400\": #00e5ff,\n \"a700\": #00b8d4\n);\n\n$clr-cyan: map-get($clr-cyan-list, \"base\");\n\n$clr-cyan-50: map-get($clr-cyan-list, \"50\");\n$clr-cyan-100: map-get($clr-cyan-list, \"100\");\n$clr-cyan-200: map-get($clr-cyan-list, \"200\");\n$clr-cyan-300: map-get($clr-cyan-list, \"300\");\n$clr-cyan-400: map-get($clr-cyan-list, \"400\");\n$clr-cyan-500: map-get($clr-cyan-list, \"500\");\n$clr-cyan-600: map-get($clr-cyan-list, \"600\");\n$clr-cyan-700: map-get($clr-cyan-list, \"700\");\n$clr-cyan-800: map-get($clr-cyan-list, \"800\");\n$clr-cyan-900: map-get($clr-cyan-list, \"900\");\n$clr-cyan-a100: map-get($clr-cyan-list, \"a100\");\n$clr-cyan-a200: map-get($clr-cyan-list, \"a200\");\n$clr-cyan-a400: map-get($clr-cyan-list, \"a400\");\n$clr-cyan-a700: map-get($clr-cyan-list, \"a700\");\n\n\n//\n// Teal\n//\n\n$clr-teal-list: (\n \"base\": #009688,\n \"50\": #e0f2f1,\n \"100\": #b2dfdb,\n \"200\": #80cbc4,\n \"300\": #4db6ac,\n \"400\": #26a69a,\n \"500\": #009688,\n \"600\": #00897b,\n \"700\": #00796b,\n \"800\": #00695c,\n \"900\": #004d40,\n \"a100\": #a7ffeb,\n \"a200\": #64ffda,\n \"a400\": #1de9b6,\n \"a700\": #00bfa5\n);\n\n$clr-teal: map-get($clr-teal-list, \"base\");\n\n$clr-teal-50: map-get($clr-teal-list, \"50\");\n$clr-teal-100: map-get($clr-teal-list, \"100\");\n$clr-teal-200: map-get($clr-teal-list, \"200\");\n$clr-teal-300: map-get($clr-teal-list, \"300\");\n$clr-teal-400: map-get($clr-teal-list, \"400\");\n$clr-teal-500: map-get($clr-teal-list, \"500\");\n$clr-teal-600: map-get($clr-teal-list, \"600\");\n$clr-teal-700: map-get($clr-teal-list, \"700\");\n$clr-teal-800: map-get($clr-teal-list, \"800\");\n$clr-teal-900: map-get($clr-teal-list, \"900\");\n$clr-teal-a100: map-get($clr-teal-list, \"a100\");\n$clr-teal-a200: map-get($clr-teal-list, \"a200\");\n$clr-teal-a400: map-get($clr-teal-list, \"a400\");\n$clr-teal-a700: map-get($clr-teal-list, \"a700\");\n\n\n//\n// Green\n//\n\n$clr-green-list: (\n \"base\": #4caf50,\n \"50\": #e8f5e9,\n \"100\": #c8e6c9,\n \"200\": #a5d6a7,\n \"300\": #81c784,\n \"400\": #66bb6a,\n \"500\": #4caf50,\n \"600\": #43a047,\n \"700\": #388e3c,\n \"800\": #2e7d32,\n \"900\": #1b5e20,\n \"a100\": #b9f6ca,\n \"a200\": #69f0ae,\n \"a400\": #00e676,\n \"a700\": #00c853\n);\n\n$clr-green: map-get($clr-green-list, \"base\");\n\n$clr-green-50: map-get($clr-green-list, \"50\");\n$clr-green-100: map-get($clr-green-list, \"100\");\n$clr-green-200: map-get($clr-green-list, \"200\");\n$clr-green-300: map-get($clr-green-list, \"300\");\n$clr-green-400: map-get($clr-green-list, \"400\");\n$clr-green-500: map-get($clr-green-list, \"500\");\n$clr-green-600: map-get($clr-green-list, \"600\");\n$clr-green-700: map-get($clr-green-list, \"700\");\n$clr-green-800: map-get($clr-green-list, \"800\");\n$clr-green-900: map-get($clr-green-list, \"900\");\n$clr-green-a100: map-get($clr-green-list, \"a100\");\n$clr-green-a200: map-get($clr-green-list, \"a200\");\n$clr-green-a400: map-get($clr-green-list, \"a400\");\n$clr-green-a700: map-get($clr-green-list, \"a700\");\n\n\n//\n// Light green\n//\n\n$clr-light-green-list: (\n \"base\": #8bc34a,\n \"50\": #f1f8e9,\n \"100\": #dcedc8,\n \"200\": #c5e1a5,\n \"300\": #aed581,\n \"400\": #9ccc65,\n \"500\": #8bc34a,\n \"600\": #7cb342,\n \"700\": #689f38,\n \"800\": #558b2f,\n \"900\": #33691e,\n \"a100\": #ccff90,\n \"a200\": #b2ff59,\n \"a400\": #76ff03,\n \"a700\": #64dd17\n);\n\n$clr-light-green: map-get($clr-light-green-list, \"base\");\n\n$clr-light-green-50: map-get($clr-light-green-list, \"50\");\n$clr-light-green-100: map-get($clr-light-green-list, \"100\");\n$clr-light-green-200: map-get($clr-light-green-list, \"200\");\n$clr-light-green-300: map-get($clr-light-green-list, \"300\");\n$clr-light-green-400: map-get($clr-light-green-list, \"400\");\n$clr-light-green-500: map-get($clr-light-green-list, \"500\");\n$clr-light-green-600: map-get($clr-light-green-list, \"600\");\n$clr-light-green-700: map-get($clr-light-green-list, \"700\");\n$clr-light-green-800: map-get($clr-light-green-list, \"800\");\n$clr-light-green-900: map-get($clr-light-green-list, \"900\");\n$clr-light-green-a100: map-get($clr-light-green-list, \"a100\");\n$clr-light-green-a200: map-get($clr-light-green-list, \"a200\");\n$clr-light-green-a400: map-get($clr-light-green-list, \"a400\");\n$clr-light-green-a700: map-get($clr-light-green-list, \"a700\");\n\n\n//\n// Lime\n//\n\n$clr-lime-list: (\n \"base\": #cddc39,\n \"50\": #f9fbe7,\n \"100\": #f0f4c3,\n \"200\": #e6ee9c,\n \"300\": #dce775,\n \"400\": #d4e157,\n \"500\": #cddc39,\n \"600\": #c0ca33,\n \"700\": #afb42b,\n \"800\": #9e9d24,\n \"900\": #827717,\n \"a100\": #f4ff81,\n \"a200\": #eeff41,\n \"a400\": #c6ff00,\n \"a700\": #aeea00\n);\n\n$clr-lime: map-get($clr-lime-list, \"base\");\n\n$clr-lime-50: map-get($clr-lime-list, \"50\");\n$clr-lime-100: map-get($clr-lime-list, \"100\");\n$clr-lime-200: map-get($clr-lime-list, \"200\");\n$clr-lime-300: map-get($clr-lime-list, \"300\");\n$clr-lime-400: map-get($clr-lime-list, \"400\");\n$clr-lime-500: map-get($clr-lime-list, \"500\");\n$clr-lime-600: map-get($clr-lime-list, \"600\");\n$clr-lime-700: map-get($clr-lime-list, \"700\");\n$clr-lime-800: map-get($clr-lime-list, \"800\");\n$clr-lime-900: map-get($clr-lime-list, \"900\");\n$clr-lime-a100: map-get($clr-lime-list, \"a100\");\n$clr-lime-a200: map-get($clr-lime-list, \"a200\");\n$clr-lime-a400: map-get($clr-lime-list, \"a400\");\n$clr-lime-a700: map-get($clr-lime-list, \"a700\");\n\n\n//\n// Yellow\n//\n\n$clr-yellow-list: (\n \"base\": #ffeb3b,\n \"50\": #fffde7,\n \"100\": #fff9c4,\n \"200\": #fff59d,\n \"300\": #fff176,\n \"400\": #ffee58,\n \"500\": #ffeb3b,\n \"600\": #fdd835,\n \"700\": #fbc02d,\n \"800\": #f9a825,\n \"900\": #f57f17,\n \"a100\": #ffff8d,\n \"a200\": #ffff00,\n \"a400\": #ffea00,\n \"a700\": #ffd600\n);\n\n$clr-yellow: map-get($clr-yellow-list, \"base\");\n\n$clr-yellow-50: map-get($clr-yellow-list, \"50\");\n$clr-yellow-100: map-get($clr-yellow-list, \"100\");\n$clr-yellow-200: map-get($clr-yellow-list, \"200\");\n$clr-yellow-300: map-get($clr-yellow-list, \"300\");\n$clr-yellow-400: map-get($clr-yellow-list, \"400\");\n$clr-yellow-500: map-get($clr-yellow-list, \"500\");\n$clr-yellow-600: map-get($clr-yellow-list, \"600\");\n$clr-yellow-700: map-get($clr-yellow-list, \"700\");\n$clr-yellow-800: map-get($clr-yellow-list, \"800\");\n$clr-yellow-900: map-get($clr-yellow-list, \"900\");\n$clr-yellow-a100: map-get($clr-yellow-list, \"a100\");\n$clr-yellow-a200: map-get($clr-yellow-list, \"a200\");\n$clr-yellow-a400: map-get($clr-yellow-list, \"a400\");\n$clr-yellow-a700: map-get($clr-yellow-list, \"a700\");\n\n\n//\n// amber\n//\n\n$clr-amber-list: (\n \"base\": #ffc107,\n \"50\": #fff8e1,\n \"100\": #ffecb3,\n \"200\": #ffe082,\n \"300\": #ffd54f,\n \"400\": #ffca28,\n \"500\": #ffc107,\n \"600\": #ffb300,\n \"700\": #ffa000,\n \"800\": #ff8f00,\n \"900\": #ff6f00,\n \"a100\": #ffe57f,\n \"a200\": #ffd740,\n \"a400\": #ffc400,\n \"a700\": #ffab00\n);\n\n$clr-amber: map-get($clr-amber-list, \"base\");\n\n$clr-amber-50: map-get($clr-amber-list, \"50\");\n$clr-amber-100: map-get($clr-amber-list, \"100\");\n$clr-amber-200: map-get($clr-amber-list, \"200\");\n$clr-amber-300: map-get($clr-amber-list, \"300\");\n$clr-amber-400: map-get($clr-amber-list, \"400\");\n$clr-amber-500: map-get($clr-amber-list, \"500\");\n$clr-amber-600: map-get($clr-amber-list, \"600\");\n$clr-amber-700: map-get($clr-amber-list, \"700\");\n$clr-amber-800: map-get($clr-amber-list, \"800\");\n$clr-amber-900: map-get($clr-amber-list, \"900\");\n$clr-amber-a100: map-get($clr-amber-list, \"a100\");\n$clr-amber-a200: map-get($clr-amber-list, \"a200\");\n$clr-amber-a400: map-get($clr-amber-list, \"a400\");\n$clr-amber-a700: map-get($clr-amber-list, \"a700\");\n\n\n//\n// Orange\n//\n\n$clr-orange-list: (\n \"base\": #ff9800,\n \"50\": #fff3e0,\n \"100\": #ffe0b2,\n \"200\": #ffcc80,\n \"300\": #ffb74d,\n \"400\": #ffa726,\n \"500\": #ff9800,\n \"600\": #fb8c00,\n \"700\": #f57c00,\n \"800\": #ef6c00,\n \"900\": #e65100,\n \"a100\": #ffd180,\n \"a200\": #ffab40,\n \"a400\": #ff9100,\n \"a700\": #ff6d00\n);\n\n$clr-orange: map-get($clr-orange-list, \"base\");\n\n$clr-orange-50: map-get($clr-orange-list, \"50\");\n$clr-orange-100: map-get($clr-orange-list, \"100\");\n$clr-orange-200: map-get($clr-orange-list, \"200\");\n$clr-orange-300: map-get($clr-orange-list, \"300\");\n$clr-orange-400: map-get($clr-orange-list, \"400\");\n$clr-orange-500: map-get($clr-orange-list, \"500\");\n$clr-orange-600: map-get($clr-orange-list, \"600\");\n$clr-orange-700: map-get($clr-orange-list, \"700\");\n$clr-orange-800: map-get($clr-orange-list, \"800\");\n$clr-orange-900: map-get($clr-orange-list, \"900\");\n$clr-orange-a100: map-get($clr-orange-list, \"a100\");\n$clr-orange-a200: map-get($clr-orange-list, \"a200\");\n$clr-orange-a400: map-get($clr-orange-list, \"a400\");\n$clr-orange-a700: map-get($clr-orange-list, \"a700\");\n\n\n//\n// Deep orange\n//\n\n$clr-deep-orange-list: (\n \"base\": #ff5722,\n \"50\": #fbe9e7,\n \"100\": #ffccbc,\n \"200\": #ffab91,\n \"300\": #ff8a65,\n \"400\": #ff7043,\n \"500\": #ff5722,\n \"600\": #f4511e,\n \"700\": #e64a19,\n \"800\": #d84315,\n \"900\": #bf360c,\n \"a100\": #ff9e80,\n \"a200\": #ff6e40,\n \"a400\": #ff3d00,\n \"a700\": #dd2c00\n);\n\n$clr-deep-orange: map-get($clr-deep-orange-list, \"base\");\n\n$clr-deep-orange-50: map-get($clr-deep-orange-list, \"50\");\n$clr-deep-orange-100: map-get($clr-deep-orange-list, \"100\");\n$clr-deep-orange-200: map-get($clr-deep-orange-list, \"200\");\n$clr-deep-orange-300: map-get($clr-deep-orange-list, \"300\");\n$clr-deep-orange-400: map-get($clr-deep-orange-list, \"400\");\n$clr-deep-orange-500: map-get($clr-deep-orange-list, \"500\");\n$clr-deep-orange-600: map-get($clr-deep-orange-list, \"600\");\n$clr-deep-orange-700: map-get($clr-deep-orange-list, \"700\");\n$clr-deep-orange-800: map-get($clr-deep-orange-list, \"800\");\n$clr-deep-orange-900: map-get($clr-deep-orange-list, \"900\");\n$clr-deep-orange-a100: map-get($clr-deep-orange-list, \"a100\");\n$clr-deep-orange-a200: map-get($clr-deep-orange-list, \"a200\");\n$clr-deep-orange-a400: map-get($clr-deep-orange-list, \"a400\");\n$clr-deep-orange-a700: map-get($clr-deep-orange-list, \"a700\");\n\n\n//\n// Brown\n//\n\n$clr-brown-list: (\n \"base\": #795548,\n \"50\": #efebe9,\n \"100\": #d7ccc8,\n \"200\": #bcaaa4,\n \"300\": #a1887f,\n \"400\": #8d6e63,\n \"500\": #795548,\n \"600\": #6d4c41,\n \"700\": #5d4037,\n \"800\": #4e342e,\n \"900\": #3e2723,\n);\n\n$clr-brown: map-get($clr-brown-list, \"base\");\n\n$clr-brown-50: map-get($clr-brown-list, \"50\");\n$clr-brown-100: map-get($clr-brown-list, \"100\");\n$clr-brown-200: map-get($clr-brown-list, \"200\");\n$clr-brown-300: map-get($clr-brown-list, \"300\");\n$clr-brown-400: map-get($clr-brown-list, \"400\");\n$clr-brown-500: map-get($clr-brown-list, \"500\");\n$clr-brown-600: map-get($clr-brown-list, \"600\");\n$clr-brown-700: map-get($clr-brown-list, \"700\");\n$clr-brown-800: map-get($clr-brown-list, \"800\");\n$clr-brown-900: map-get($clr-brown-list, \"900\");\n\n\n//\n// Grey\n//\n\n$clr-grey-list: (\n \"base\": #9e9e9e,\n \"50\": #fafafa,\n \"100\": #f5f5f5,\n \"200\": #eeeeee,\n \"300\": #e0e0e0,\n \"400\": #bdbdbd,\n \"500\": #9e9e9e,\n \"600\": #757575,\n \"700\": #616161,\n \"800\": #424242,\n \"900\": #212121,\n);\n\n$clr-grey: map-get($clr-grey-list, \"base\");\n\n$clr-grey-50: map-get($clr-grey-list, \"50\");\n$clr-grey-100: map-get($clr-grey-list, \"100\");\n$clr-grey-200: map-get($clr-grey-list, \"200\");\n$clr-grey-300: map-get($clr-grey-list, \"300\");\n$clr-grey-400: map-get($clr-grey-list, \"400\");\n$clr-grey-500: map-get($clr-grey-list, \"500\");\n$clr-grey-600: map-get($clr-grey-list, \"600\");\n$clr-grey-700: map-get($clr-grey-list, \"700\");\n$clr-grey-800: map-get($clr-grey-list, \"800\");\n$clr-grey-900: map-get($clr-grey-list, \"900\");\n\n\n//\n// Blue grey\n//\n\n$clr-blue-grey-list: (\n \"base\": #607d8b,\n \"50\": #eceff1,\n \"100\": #cfd8dc,\n \"200\": #b0bec5,\n \"300\": #90a4ae,\n \"400\": #78909c,\n \"500\": #607d8b,\n \"600\": #546e7a,\n \"700\": #455a64,\n \"800\": #37474f,\n \"900\": #263238,\n);\n\n$clr-blue-grey: map-get($clr-blue-grey-list, \"base\");\n\n$clr-blue-grey-50: map-get($clr-blue-grey-list, \"50\");\n$clr-blue-grey-100: map-get($clr-blue-grey-list, \"100\");\n$clr-blue-grey-200: map-get($clr-blue-grey-list, \"200\");\n$clr-blue-grey-300: map-get($clr-blue-grey-list, \"300\");\n$clr-blue-grey-400: map-get($clr-blue-grey-list, \"400\");\n$clr-blue-grey-500: map-get($clr-blue-grey-list, \"500\");\n$clr-blue-grey-600: map-get($clr-blue-grey-list, \"600\");\n$clr-blue-grey-700: map-get($clr-blue-grey-list, \"700\");\n$clr-blue-grey-800: map-get($clr-blue-grey-list, \"800\");\n$clr-blue-grey-900: map-get($clr-blue-grey-list, \"900\");\n\n\n//\n// Black\n//\n\n$clr-black-list: (\n \"base\": #000\n);\n\n$clr-black: map-get($clr-black-list, \"base\");\n\n\n//\n// White\n//\n\n$clr-white-list: (\n \"base\": #fff\n);\n\n$clr-white: map-get($clr-white-list, \"base\");\n\n\n//\n// List for all Colors for looping\n//\n\n$clr-list-all: (\n \"red\": $clr-red-list,\n \"pink\": $clr-pink-list,\n \"purple\": $clr-purple-list,\n \"deep-purple\": $clr-deep-purple-list,\n \"indigo\": $clr-indigo-list,\n \"blue\": $clr-blue-list,\n \"light-blue\": $clr-light-blue-list,\n \"cyan\": $clr-cyan-list,\n \"teal\": $clr-teal-list,\n \"green\": $clr-green-list,\n \"light-green\": $clr-light-green-list,\n \"lime\": $clr-lime-list,\n \"yellow\": $clr-yellow-list,\n \"amber\": $clr-amber-list,\n \"orange\": $clr-orange-list,\n \"deep-orange\": $clr-deep-orange-list,\n \"brown\": $clr-brown-list,\n \"grey\": $clr-grey-list,\n \"blue-grey\": $clr-blue-grey-list,\n \"black\": $clr-black-list,\n \"white\": $clr-white-list\n);\n\n\n//\n// Typography\n//\n\n$clr-ui-display-4: $clr-grey-600;\n$clr-ui-display-3: $clr-grey-600;\n$clr-ui-display-2: $clr-grey-600;\n$clr-ui-display-1: $clr-grey-600;\n$clr-ui-headline: $clr-grey-900;\n$clr-ui-title: $clr-grey-900;\n$clr-ui-subhead-1: $clr-grey-900;\n$clr-ui-body-2: $clr-grey-900;\n$clr-ui-body-1: $clr-grey-900;\n$clr-ui-caption: $clr-grey-600;\n$clr-ui-menu: $clr-grey-900;\n$clr-ui-button: $clr-grey-900;\n","////\n/// Copyright (c) 2016-2020 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Variables\n// ----------------------------------------------------------------------------\n\n///\n/// Device-specific breakpoints\n///\n/// @example\n/// $break-devices: (\n/// mobile: (\n/// portrait: 220px 479px,\n/// landscape: 480px 719px\n/// ),\n/// tablet: (\n/// portrait: 720px 959px,\n/// landscape: 960px 1219px\n/// ),\n/// screen: (\n/// small: 1220px 1599px,\n/// medium: 1600px 1999px,\n/// large: 2000px\n/// )\n/// );\n///\n$break-devices: () !default;\n\n// ----------------------------------------------------------------------------\n// Helpers\n// ----------------------------------------------------------------------------\n\n///\n/// Choose minimum and maximum device widths\n///\n@function break-select-min-max($devices) {\n $min: 1000000;\n $max: 0;\n @each $key, $value in $devices {\n @while type-of($value) == map {\n $value: break-select-min-max($value);\n }\n @if type-of($value) == list {\n @each $number in $value {\n @if type-of($number) == number {\n $min: min($number, $min);\n @if $max != null {\n $max: max($number, $max);\n }\n } @else {\n @error \"Invalid number: #{$number}\";\n }\n }\n } @else if type-of($value) == number {\n $min: min($value, $min);\n $max: null;\n } @else {\n @error \"Invalid value: #{$value}\";\n }\n }\n @return $min, $max;\n}\n\n///\n/// Select minimum and maximum widths for a device breakpoint\n///\n@function break-select-device($device) {\n $current: $break-devices;\n @for $n from 1 through length($device) {\n @if type-of($current) == map {\n $current: map-get($current, nth($device, $n));\n } @else {\n @error \"Invalid device map: #{$devices}\";\n }\n }\n @if type-of($current) == list or type-of($current) == number {\n $current: (default: $current);\n }\n @return break-select-min-max($current);\n}\n\n// ----------------------------------------------------------------------------\n// Mixins\n// ----------------------------------------------------------------------------\n\n///\n/// A minimum-maximum media query breakpoint\n///\n@mixin break-at($breakpoint) {\n @if type-of($breakpoint) == number {\n @media screen and (min-width: $breakpoint) {\n @content;\n }\n } @else if type-of($breakpoint) == list {\n $min: nth($breakpoint, 1);\n $max: nth($breakpoint, 2);\n @if type-of($min) == number and type-of($max) == number {\n @media screen and (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else {\n @error \"Invalid breakpoint: #{$breakpoint}\";\n }\n } @else {\n @error \"Invalid breakpoint: #{$breakpoint}\";\n }\n}\n\n///\n/// An orientation media query breakpoint\n///\n@mixin break-at-orientation($breakpoint) {\n @if type-of($breakpoint) == string {\n @media screen and (orientation: $breakpoint) {\n @content;\n }\n } @else {\n @error \"Invalid breakpoint: #{$breakpoint}\";\n }\n}\n\n///\n/// A maximum-aspect-ratio media query breakpoint\n///\n@mixin break-at-ratio($breakpoint) {\n @if type-of($breakpoint) == number {\n @media screen and (max-aspect-ratio: $breakpoint) {\n @content;\n }\n } @else {\n @error \"Invalid breakpoint: #{$breakpoint}\";\n }\n}\n\n///\n/// A minimum-maximum media query device breakpoint\n///\n@mixin break-at-device($device) {\n @if type-of($device) == string {\n $device: $device,;\n }\n @if type-of($device) == list {\n $breakpoint: break-select-device($device);\n @if nth($breakpoint, 2) != null {\n $min: nth($breakpoint, 1);\n $max: nth($breakpoint, 2);\n @media screen and (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else {\n @error \"Invalid device: #{$device}\";\n }\n } @else {\n @error \"Invalid device: #{$device}\";\n }\n}\n\n///\n/// A minimum media query device breakpoint\n///\n@mixin break-from-device($device) {\n @if type-of($device) == string {\n $device: $device,;\n }\n @if type-of($device) == list {\n $breakpoint: break-select-device($device);\n $min: nth($breakpoint, 1);\n @media screen and (min-width: $min) {\n @content;\n }\n } @else {\n @error \"Invalid device: #{$device}\";\n }\n}\n\n///\n/// A maximum media query device breakpoint\n///\n@mixin break-to-device($device) {\n @if type-of($device) == string {\n $device: $device,;\n }\n @if type-of($device) == list {\n $breakpoint: break-select-device($device);\n $max: nth($breakpoint, 2);\n @media screen and (max-width: $max) {\n @content;\n }\n } @else {\n @error \"Invalid device: #{$device}\";\n }\n}\n","////\n/// Copyright (c) 2016-2020 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Announcement bar\n.md-announce {\n\n // Text link, also on focus/hover\n a,\n a:focus,\n a:hover {\n color: currentColor;\n }\n\n // Don't wrap name of blog article\n strong {\n white-space: nowrap;\n }\n\n // Twitter icon\n .twitter {\n margin-left: .2em;\n }\n}\n","////\n/// Copyright (c) 2016-2020 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Content footer\n.tx-content__footer {\n margin-top: px2rem(20px);\n text-align: center;\n\n // Link to Insiders\n a {\n display: inline-block;\n color: $clr-pink-500;\n transition:\n transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1),\n color 125ms;\n\n // Link to Insiders on focus/hover\n &:focus,\n &:hover {\n transform: scale(1.2);\n }\n }\n\n // Horizontal separator\n hr {\n display: inline-block;\n width: px2rem(40px);\n margin: px2em(16px);\n vertical-align: middle;\n background-color: currentColor;\n border: none;\n }\n}\n","////\n/// Copyright (c) 2016-2020 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Landing page container\n.tx-container {\n padding-top: px2rem(20px);\n background:\n url(\"data:image/svg+xml;utf8,\") no-repeat bottom,\n linear-gradient(\n to bottom,\n var(--md-primary-fg-color),\n hsla(280, 67%, 55%, 1) 99%,\n var(--md-default-bg-color) 99%\n );\n\n // Adjust background for slate theme\n [data-md-color-scheme=\"slate\"] & {\n background:\n url(\"data:image/svg+xml;utf8,\") no-repeat bottom,\n linear-gradient(\n to bottom,\n var(--md-primary-fg-color),\n hsla(280, 67%, 55%, 1) 99%,\n var(--md-default-bg-color) 99%\n );\n }\n}\n\n// Landing page hero\n.tx-hero {\n margin: 0 px2rem(16px);\n color: var(--md-primary-bg-color);\n\n // Hero headline\n h1 {\n margin-bottom: px2rem(20px);\n color: currentColor;\n font-weight: 700;\n\n // [mobile portrait -]: Larger hero headline\n @include break-to-device(mobile portrait) {\n font-size: px2rem(28px);\n }\n }\n\n // Hero content\n &__content {\n padding-bottom: px2rem(120px);\n }\n\n // [tablet landscape +]: Columnar display\n @include break-from-device(tablet landscape) {\n display: flex;\n align-items: stretch;\n\n // Adjust spacing and set dimensions\n &__content {\n max-width: px2rem(380px);\n margin-top: px2rem(70px);\n padding-bottom: 14vw;\n }\n\n // Hero image\n &__image {\n order: 1;\n width: px2rem(760px);\n transform: translateX(#{px2rem(80px)});\n }\n }\n\n // [screen +]: Columnar display and adjusted spacing\n @include break-from-device(screen) {\n\n // Hero image\n &__image {\n transform: translateX(#{px2rem(160px)});\n }\n }\n\n // Button\n .md-button {\n margin-top: px2rem(10px);\n margin-right: px2rem(10px);\n color: var(--md-primary-bg-color);\n\n // Button on focus/hover\n &:focus,\n &:hover {\n color: var(--md-default-bg-color);\n background-color: var(--md-accent-fg-color);\n border-color: var(--md-accent-fg-color);\n }\n\n // Primary button\n &--primary {\n color: hsla(280deg, 37%, 48%, 1);\n background-color: var(--md-primary-bg-color);\n border-color: var(--md-primary-bg-color);\n }\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/public/cryptography/asymmetric/edwards25519/index.html b/public/cryptography/asymmetric/edwards25519/index.html index a2ba117..d0e1b35 100644 --- a/public/cryptography/asymmetric/edwards25519/index.html +++ b/public/cryptography/asymmetric/edwards25519/index.html @@ -1,1195 +1,12 @@ - - - - - - - - - - - - - - - - - - - - - - - Edwards25519 Elliptic Curve - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Edwards25519 Elliptic Curve

-
-

Note

-

Author is nowhere close to being a cryptographer. Be sceptical on accuracy.

-
-
-

Note

-

This article is only about the underlying curve. Public key derivation and signing algorithm will be treated separately.

-
-

Monero employs edwards25519 elliptic curve as a basis for its key pair generation.

-

The curve comes from the Ed25519 signature scheme. While Monero takes the curve unchanged, it does not exactly follow rest of the Ed25519.

-

The edwards25519 curve is birationally equivalent to Curve25519.

-

Definition

-

This is the standard edwards25519 curve definition, no Monero specific stuff here, -except the naming convention. The convention comes from the CryptoNote -whitepaper and is widely used in Monero literature.

-

Curve equation

-
−x^2 + y^2 = 1 − (121665/121666) * x^2 * y^2
-
-

Note:

-
    -
  • curve is in two dimensions (nothing fancy, like all the curves is high school)
  • -
  • curve is mirrored below y axis due to y^2 part of the equation (not a polynomial)
  • -
-

Base point: G

-

The base point is a specific point on the curve. It is used -as a basis for further calculations. It is an arbitrary choice -by the curve authors, just to standardize the scheme.

-

Note that it is enough to specify the y value and the sign of the x value. -That's because the specific x can be calculated from the curve equation.

-
G = (x, 4/5)  # take the point with the positive x
+ Edwards25519 Elliptic Curve - Monero Documentation      

Edwards25519 Elliptic Curve

Note

Author is nowhere close to being a cryptographer. Be sceptical on accuracy.

Note

This article is only about the underlying curve. Public key derivation and signing algorithm will be treated separately.

Monero employs edwards25519 elliptic curve as a basis for its key pair generation.

The curve comes from the Ed25519 signature scheme. While Monero takes the curve unchanged, it does not exactly follow rest of the Ed25519.

The edwards25519 curve is birationally equivalent to Curve25519.

Definition

This is the standard edwards25519 curve definition, no Monero specific stuff here, except the naming convention. The convention comes from the CryptoNote whitepaper and is widely used in Monero literature.

Curve equation

−x^2 + y^2 = 1 − (121665/121666) * x^2 * y^2
+

Note:

  • curve is in two dimensions (nothing fancy, like all the curves is high school)
  • curve is mirrored below y axis due to y^2 part of the equation (not a polynomial)

Base point: G

The base point is a specific point on the curve. It is used as a basis for further calculations. It is an arbitrary choice by the curve authors, just to standardize the scheme.

Note that it is enough to specify the y value and the sign of the x value. That's because the specific x can be calculated from the curve equation.

G = (x, 4/5)  # take the point with the positive x
 
 # The hex representation of the base point
 5866666666666666666666666666666666666666666666666666666666666666
-
-

Prime order of the base point: l

-

In layment terms, the "canvas" where the curve is drawn is assumed -to have a finite "resolution", so point coordinates must "wrap around" -at some point. This is achieved by modulo the l value (lowercase L). -In other words, the l defines the maximum scalar we can use.

-
l = 2^252 + 27742317777372353535851937790883648493
+

Prime order of the base point: l

In layment terms, the "canvas" where the curve is drawn is assumed to have a finite "resolution", so point coordinates must "wrap around" at some point. This is achieved by modulo the l value (lowercase L). In other words, the l defines the maximum scalar we can use.

l = 2^252 + 27742317777372353535851937790883648493
 # => 7237005577332262213973186563042994240857116359379907606001950938285454250989
-
-

The l is a prime number specified by the curve authors.

-

In practice this is the private key's strength.

-

Total number of points on the curve

-

The total number of points on the curve is also a prime number:

-
q = 2^255 - 19
-
-

In practice not all points are "useful" and so the private key strength is limited to l describe above.

-

Implementation

-

Monero uses (apparently modified) Ref10 implementation by Daniel J. Bernstein.

-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/cryptography/asymmetric/introduction/index.html b/public/cryptography/asymmetric/introduction/index.html index 10bc0b7..0ef5eec 100644 --- a/public/cryptography/asymmetric/introduction/index.html +++ b/public/cryptography/asymmetric/introduction/index.html @@ -1,1009 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Asymmetric Cryptography in Moner - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Asymmetric Cryptography in Monero

-
-

Note

-

Author is nowhere close to being a cryptographer. Be sceptical on accuracy.

-
-

Before we get to Monero specific stuff, a little bit of context. We are talking asymmetric cryptography here. -The "asymmetric" simply means the are two keys:

-
    -
  • the private key (used primarily for signing data and for decrypting data)
  • -
  • the public key (used primarily for signature verification and encrypting data)
  • -
-

This is in contrast to symmetric cryptography which uses a single key. This key is a secret shared among the parties.

-

Historically, asymmetric cryptography was based on the problem of factorization of a very large integers -back into prime numbers (which is practically impossible for large enough integers).

-

Recently, asymmetric cryptography is based on a mathematical notion of elliptic curves. -Edwards25519 is a specific, well researched and standardized elliptic curve used in Monero.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/cryptography/asymmetric/key-image/index.html b/public/cryptography/asymmetric/key-image/index.html index b16a4fd..7fad01f 100644 --- a/public/cryptography/asymmetric/key-image/index.html +++ b/public/cryptography/asymmetric/key-image/index.html @@ -1,1089 +1,7 @@ - - - - - - - - - - - - - - - - - - - - - - - Monero Private Key Image - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Monero Private Key Image

-
-

Note

-

Author is nowhere close to being a cryptographer. Be sceptical on accuracy.

-
-

Private key image serves to detect double spending attempts.

-

In Monero funds are always sent to a one-time public key P. -Related one-time private key x is specific to unspent output.

-

As output can be spent only once (in whole), the related private key can be used only once as well.

-

Thus, specific private key image I being present on the blockchain means -that related output was already spent, and subsequent attempts must not be allowed.

-

This whole scheme is necessary because Monero uses Ring Signatures -which make it impossible to know whom exactly signed the transaction. -This is why a simple Bitcoin-like double spending check wouldn't work here.

-

Definition

-
I = x*Hp(P)
-
-

Where:

-
    -
  • I - private key image (or "key image" for short)
  • -
  • x - one-time private key used to unlock an unspent output
  • -
  • P - one-time public key of an unspent output
  • -
  • Hp() - hash function accepting an EC point as an argument
  • -
-

The P comes from this:

-
P = xG
-
-

Where G is the edwards25519 base point.

-

Substitute P with xG and we get:

-
I = x*Hp(xG)
-
-

The key image I is a one-way function of the private key x.

-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/cryptography/asymmetric/private-key/index.html b/public/cryptography/asymmetric/private-key/index.html index 34815b1..c1ac474 100644 --- a/public/cryptography/asymmetric/private-key/index.html +++ b/public/cryptography/asymmetric/private-key/index.html @@ -1,1156 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Private Keys in Monero - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Private Keys in Monero

-
-

Note

-

Author is nowhere close to being a cryptographer. Be sceptical on accuracy.

-
-

In Monero, the root private key is generated randomly. Other private keys are derived deterministically from the root private key.

-

Private key must be kept secret.

-

Private key is a large integer impossible to guess, like: -108555083659983933209597798445644913612440610624038028786991485007418559037440

-

Private key is 256 bits long.

-

Private key is a scalar, meaning it is a single value.

-

In equations scalars are represented by lowercase letters.

-

Relation to Ed25519

-

Being simply a random integer, private key is not specific to any particular asymmetric cryptography scheme.

-

In context of Monero EC cryptography the private key is a number the base point G is multiplied by. -The result of the multiplication is the public key P (another point on the curve). -Multiplication of a point by a number has a very special definition in EC cryptography. -See this this guide for details.

-

Key strength

-

Before deriving the public key, private key is subject to modulo l, -where l is the maximum scalar allowed by the edwards25519 curve.

-

The l is on the order of 2^252, so the effective key strength is technically 252 bits, not 256 bits. -This is standard for EC cryptography and is more of a cosmetic nuance than any concern.

-

Encoding

-

In user-facing contexts, the private key integer is:

-
    -
  1. Taken modulo l to avoid malleability
  2. -
  3. Put as array of 32 bytes in a little-endian direction (the first byte is the least significant)
  4. -
  5. Converted to hexadecimal form, like: b3588a87056fb21dc4d052d59e83b54293882e646b543c29478e4cf45c28a402
  6. -
-

Private spend key

-

Private spend key is used to spend moneros.

-

More specifically, it is used to build one-time private keys which allow to spend related outputs.

-

Private view key

-

Private view key is used to recognize your incoming transactions on the otherwise opaque blockchain.

-

One-time private keys

-

One-time private key like construct is used in stealth addresses.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/cryptography/asymmetric/public-key/index.html b/public/cryptography/asymmetric/public-key/index.html index b74d831..ca9f089 100644 --- a/public/cryptography/asymmetric/public-key/index.html +++ b/public/cryptography/asymmetric/public-key/index.html @@ -1,1081 +1,5 @@ - - - - - - - - - - - - - - - - - - - - - - - Public Keys in Monero - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Public Keys in Monero

-
-

Note

-

Author is nowhere close to being a cryptographer. Be sceptical on accuracy.

-
-

Public key is deterministically derived from private key based on edwards25519 curve with a little Monero-specific twist.

-

Public key is meant to be shared. Assuming correct implementation, it is not practically possible to recover private key from public key.

-

Public key is a point (x,y) on the elliptic curve.

-

In equations points are represented by uppercase letters.

-

In user-facing contexts, public key is encoded in a little-endian hexadecimal form, like: -016a941812293cf9a86071060fb090ab38d67945e659968cb8cf30e1bc725683

-

Deriving public key

-

Say:

-
    -
  • P is a public key
  • -
  • x is a private key
  • -
  • G is a "base point"; this is simply a constant specific to edwards25519; this point lies on the elliptic curve
  • -
-

Then:

-
P = xG
-
-

The public key is simply the base point (G) multiplied by the private key (x). -Multiplying the point is adding the point to itself a number of times.

-

However, the addition is not a simple vector addition. It has a very specific -definition nicely described in this article. -What is important is that result of addition is always a point on the curve. -For example, G + G is another point on the curve.

-

Use cases

-

Monero address is composed of public spend key and public view key. -These keys are used to build stealth addresses to receive payments.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/cryptography/base58/index.html b/public/cryptography/base58/index.html index 26cead9..36eda2b 100644 --- a/public/cryptography/base58/index.html +++ b/public/cryptography/base58/index.html @@ -1,1045 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Base58 - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Base58

-

Base58 is a binary-to-text encoding scheme. It is similar to Base64 but has been modified to avoid both non-alphanumeric characters and letters which might look ambiguous when printed. The characters excluded in relation to Base64 are: IOl0+/

-

Base58 does not strictly specify the format. This results in some implementations being incompatible with others, for example with regard to alphabet order.

-

For details, see Wikipedia.

-

Base58 in Monero

-

Monero has its own variant of Base58.

-

In Monero the Base58 encoding is performed in 8-byte blocks, except the last block which is the remaining (8 or less) bytes .

-

The 8-byte block converts to 11 or less Base58 characters. If the block converted to less then 11 characters, the output is padded with "1"s (0 in Base58). The final block is padded as well to whatever would be the maximum size of this number of bytes encoded in Base58.

-

The advantage of Monero implementation is that output is of a fixed size which is not the case with plain Base58. The disadvantage is that default libraries won't work.

-

For details, see reference C++ Base58 implementation and unofficial Python Base58 implementation.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/cryptography/introduction/index.html b/public/cryptography/introduction/index.html index c0681f4..99b315d 100644 --- a/public/cryptography/introduction/index.html +++ b/public/cryptography/introduction/index.html @@ -1,996 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Cryptography in Monero - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Cryptography in Monero

-

Monero uses a wide variety of cryptographic primitives for various use cases.

-

Comparing to altcoins, Monero cryptography is considered conservative, sound and robust.

-

Comparing to Bitcoin, Monero uses much more primitives, and some of them are more advanced, especially those related to privacy and Proof of Work. -Some choices are deliberately non-standard (for better or worse) - oftentimes a legacy of the CryptoNote protocol.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/cryptography/keccak-256/index.html b/public/cryptography/keccak-256/index.html index 8e50f33..38f1d76 100644 --- a/public/cryptography/keccak-256/index.html +++ b/public/cryptography/keccak-256/index.html @@ -1,1093 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Keccak-256 Hash Function - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Keccak-256 Hash Function

-

Monero employs Keccak as a hashing function. In most context specifically Keccak-256 is used, -providing 32-byte hashes.

-

Keccak is the leading hashing function, designed by non-NSA designers. -Keccak won NIST competition to become the official SHA3.

-

Use Cases

-

Monero does not employ Keccak for Proof-of-Work. Instead, Keccak is used for:

-
    -
  • random number generator
  • -
  • block hashing
  • -
  • transaction hashing
  • -
  • stealth address private key image (for double spend protection)
  • -
  • public address checksum
  • -
  • RingCT
  • -
  • multisig
  • -
  • bulletproofs
  • -
-

...and likely a few other things.

-

Keccak-256 vs SHA3-256

-

SHA3-256 is Keccak-256, except NIST changed padding. -For that reason original Keccak-256 gives in a different hash value than NIST SHA3-256.

-

Monero uses original Keccak-256. -The NIST standard was only published on August 2015, while Monero went live on 18 April 2014.

-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/cryptography/prng/index.html b/public/cryptography/prng/index.html index 0463aa7..4f8f9a5 100644 --- a/public/cryptography/prng/index.html +++ b/public/cryptography/prng/index.html @@ -1,1068 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Monero Pseudorandom Number Generator - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Monero Pseudorandom Number Generator

-

Monero uses PRNG based on the Keccak hashing function. -Basically, output of the previous hashing round is input for the next one.

-

The initial seed comes from entropy sources provided by operating system. -On Linux and MacOS the seed comes from /dev/urandom. -On Windows the WinAPI CryptGenRandom call is used for seeding.

-

There is no reseeding.

-

Caveats

-
    -
  • This concerns the reference C++ implementation of Monero. -Please note there are many alternative implementations of private key generation, -including JavaScript, Python, Android/Java. These should be researched case by case for correctness.
  • -
  • In Monero source code you can also find libsodium based random bytes generator. It is part of the embedded library and apparently is not used in actual Monero code.
  • -
-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/index.html b/public/index.html index 7de3b2c..49a3813 100644 --- a/public/index.html +++ b/public/index.html @@ -1,1026 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Monero Documentation - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Unofficial Monero Documentation

-

Work in Progress

-

Monerodocs attempts to organize basic technical knowledge on Monero in one place.

-

While technical explanations are out there, knowledge is scattered through reddit posts, git comments, stack exchange answers, chat logs and the source code. This makes it hard to find complete and up-to-date explanations on advanced topics.

-

The goal is to educate and onboard power users faster.

-

Please submit your feedback and corrections directly on github.

-

Find my contact details at qertoip.com.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/infrastructure/monero-pulse/index.html b/public/infrastructure/monero-pulse/index.html index b16b319..51e9033 100644 --- a/public/infrastructure/monero-pulse/index.html +++ b/public/infrastructure/monero-pulse/index.html @@ -1,1061 +1,5 @@ - - - - - - - - - - - - - - - - - - - - - - - MoneroPulse - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - - - - -
-
- - - - - - - -

MoneroPulse

-

What is MoneroPulse?

-

MoneroPulse is infrastructure for emergency checkpointing the blockchain.

-

It aims to mitigate chain-splits resulting from consensus bugs (like this one from 2014).

-

Effectively, MoneroPulse operators can publish which fork they consider the valid one. Technically, the "checkpoint" they publish is a block hash and the block height.

-

By default, Monero full node will simply warn users when MoneroPulse checkpoint does not match the fork it is on. The error will be present in the log and on the console in red. Users are free to discard it. Ideally though, users should consult community on what is going on, and make educated decission on whether to follow the checkpoint-compatible fork or the default fork.

-

Users can also set auto-enforcing the checkpoints via --enforce-dns-checkpointing option to monerod. In case of mismatch, monerod will rollback the local blockchain by a few blocks. Eventually, the alternative ("fixed") fork will get heavier and the node will follow it, leaving the "invalid" fork behind. This option is recommended for unattended full nodes.

-

Summing up, MoneroPulse is emergency checkpointing mechanism. It is opt-in for the users.

-

MoneroPulse is DNS based

-

The ckeckpoints are stored as DNS TXT records for domains owned by MoneroPulse operators.

-

To get the idea you can access the checkpoints manually with any DNS client:

-

Try:

-
dig -t txt checkpoints.moneropulse.net +dnssec
-
-

Result:

-
(cut)
+ MoneroPulse - Monero Documentation      

MoneroPulse

What is MoneroPulse?

MoneroPulse is infrastructure for emergency checkpointing the blockchain.

It aims to mitigate chain-splits resulting from consensus bugs (like this one from 2014).

Effectively, MoneroPulse operators can publish which fork they consider the valid one. Technically, the "checkpoint" they publish is a block hash and the block height.

By default, Monero full node will simply warn users when MoneroPulse checkpoint does not match the fork it is on. The error will be present in the log and on the console in red. Users are free to discard it. Ideally though, users should consult community on what is going on, and make educated decission on whether to follow the checkpoint-compatible fork or the default fork.

Users can also set auto-enforcing the checkpoints via --enforce-dns-checkpointing option to monerod. In case of mismatch, monerod will rollback the local blockchain by a few blocks. Eventually, the alternative ("fixed") fork will get heavier and the node will follow it, leaving the "invalid" fork behind. This option is recommended for unattended full nodes.

Summing up, MoneroPulse is emergency checkpointing mechanism. It is opt-in for the users.

MoneroPulse is DNS based

The ckeckpoints are stored as DNS TXT records for domains owned by MoneroPulse operators.

To get the idea you can access the checkpoints manually with any DNS client:

Try:

dig -t txt checkpoints.moneropulse.net +dnssec
+

Result:

(cut)
 
 ;; ANSWER SECTION:
 checkpoints.moneropulse.net. 299 IN  TXT  "1288616:875ac1bc7aa6c5eedc5410abb9c694034f9e7f79dce4c60698baf37009cb6365"
@@ -1078,122 +22,21 @@ checkpoints.moneropulse.net. 299 IN  TXT  "600000:f5828ebf7d7d1cb61762c4dfe
 checkpoints.moneropulse.net. 299 IN  TXT  "700000:12be9b3d210b93f574d2526abb9c1ab2a881b479131fd0d4f7dac93875f503cd"
 checkpoints.moneropulse.net. 299 IN  TXT  "300000:0c1cd46df6ccff90ec4ab493281f2583c344cd62216c427628990fe9db1bb8b6"
 checkpoints.moneropulse.net. 299 IN  RRSIG  TXT 13 3 300 20180922151845 20180920131845 35273 moneropulse.net. 8CyqtsM2f9o6OHZYqtGPVf+8gcFM+eUyoMi29LlkcLtK1AXbZlKqCcdN NvdvB+4OzepmpTanSc+TbLWbz/sIzA==
-
-

Please note the DNSSEC signature entry at the end.

-

The checkpoints are mirrored on several DNS servers:

-

Mainnet:

-
checkpoints.moneropulse.se
+

Please note the DNSSEC signature entry at the end.

The checkpoints are mirrored on several DNS servers:

Mainnet:

checkpoints.moneropulse.se
 checkpoints.moneropulse.org
 checkpoints.moneropulse.net
 checkpoints.moneropulse.co
-
-

Stagenet:

-
stagenetpoints.moneropulse.se
+

Stagenet:

stagenetpoints.moneropulse.se
 stagenetpoints.moneropulse.org
 stagenetpoints.moneropulse.net
 stagenetpoints.moneropulse.co
-
-

Testnet:

-
testpoints.moneropulse.se
+

Testnet:

testpoints.moneropulse.se
 testpoints.moneropulse.org
 testpoints.moneropulse.net
 testpoints.moneropulse.co
-
-

MoneroPulse as attack vector

-

It is worth noting that MoneroPulse does not produce blocks and cannot split the chain on its own. It only suggests the valid fork.

-

Should MoneroPulse got entirely compromised, attacker could stop all auto-enforcing nodes from advancing, by feeding them with the fake checkpoint. This is partially mitigated by DNSSEC and by operating multiple domains. Monero expects checkpoints are consistent across domains. Thus, compromising a single domain or registrar should not lead to any disruption.

-

MoneroPulse also increases the say of its operators in case of possible contentious hard forks. While well intended, this effectively centralizes more power in hands of core developers, or whomever is at the time running MoneroPulse infrastructure.

-

Who are MoneroPulse operators?

-

MoneroPulse is operated by selected core developers.

-

Fixing "WARNING: no two valid MoneroPulse DNS checkpoint records were received"

-

This means DNS server you are using does not ackonwledge the +dnssec flag necessary for securely query for checkpoints.

-

By default, your operating system will use DNS server provided by your Internet Service Provider.

-

To fix this warning, change your DNS server either system-wide in your network configuration, or specifically for monerod.

-

Many people find Google's or Cloudflare's DNS servers superior to those offered by their ISPs.

-

Using Google DNS:

-
DNS_PUBLIC=tcp://8.8.8.8 ./monerod
-
-

Using Cloudflare DNS:

-
DNS_PUBLIC=tcp://1.1.1.1 ./monerod
-
-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/infrastructure/networks/index.html b/public/infrastructure/networks/index.html index 561c121..297d19c 100644 --- a/public/infrastructure/networks/index.html +++ b/public/infrastructure/networks/index.html @@ -1,1143 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Mainnet, Stagenet, Testnet - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Networks

-

Monero offers three separate networks and blockchains: mainnet, stagenet and testnet. Every blockchain has its own genesis block and is entirely seperate from others. Also, corresponding p2p networks are separate.

-

Mainnet

-

Mainnet is the "production" network and blockchain.

-

Mainnet is the only blockchain where XMR units have value.

-

Mainnet is what people mean by default.

-

Default TCP ports (listening):

-
    -
  • 18080 - p2p network
  • -
  • 18081 - JSON-RPC server
  • -
  • 18082 - ZMQ server
  • -
-

Stagenet

-

Stagenet is what you need to learn Monero safely.

-

Stagenet is technically equivalent to mainnet, both in terms of features and consensus rules. Similar to mainnet, use the latest official Monero release to be compatible with stagenet.

-

To get started:

- -

Default TCP ports (listening):

-
    -
  • 38080 - p2p network
  • -
  • 38081 - JSON-RPC server
  • -
  • 38082 - ZMQ server
  • -
-

Stagenet was introduced in March 2018 as part of Monero 0.12.0.0.

-

Testnet

-

As a normal user, use stagenet instead. Testnet is for developers.

-

Testnet is the "experimental" network and blockchain where things get released long before mainnet.

-

Testnet forks early and often. Most of the time you need to compile Monero from source to be compatible with testnet. Otherwise you will get stuck on the old not-forked version.

-

To get started:

- -

Default TCP ports (listening):

-
    -
  • 28080 - p2p network
  • -
  • 28081 - JSON-RPC server
  • -
  • 28082 - ZMQ server
  • -
-

Private Testnet

-

You can also create your private version of the testnet.

-

Private testnet gives more flexibility to arange for specific situations for developers.

-

Check the private testnet guide.

-

Why stagenet and testnet coins have no value?

-

If mainnet and stagenet are technically equivalent then why only mainnet coins have value?

-

This is simply the convention community embraced. Value only comes from a shared believe that mainnet coins will be accepted by other people in the future.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/infrastructure/tor-onion-p2p-seed-nodes/index.html b/public/infrastructure/tor-onion-p2p-seed-nodes/index.html index deaf80f..cdad758 100644 --- a/public/infrastructure/tor-onion-p2p-seed-nodes/index.html +++ b/public/infrastructure/tor-onion-p2p-seed-nodes/index.html @@ -1,1068 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Tor Onion Seed Nodes for Monero P2P Network - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - - - - -
-
- - - - - - - -

Tor onion seed nodes for Monero network

-

When this is necessary?

-

This is only necessary if you run a full node and you want to propagate locally-originating transactions over Tor (using tx-proxy option, see monerod reference). This allows you to mask your IP (as transaction originator) against P2P network surveillence, on top of Monero's built-in Dandelion++.

-

What are P2P seed nodes?

-

Your monero daemon will discover other P2P nodes but it needs to start somewhere. These starting nodes are known as "seed nodes". For clearnet the seed nodes are hardcoded in the software so no configuration is needed.

-

For the Tor network there are no hardcoded seed nodes. You must specify them manually by using the add-peer option in monero.conf.

-

Config snippet

-

These were tested working as of 2020-01-11. They are ran by volunteers and are not guaranteed to work or be maintained. See below how you can quickly test them.

-
# monero.conf snippet
+ Tor Onion Seed Nodes for Monero P2P Network - Monero Documentation      

Tor onion seed nodes for Monero network

When this is necessary?

This is only necessary if you run a full node and you want to propagate locally-originating transactions over Tor (using tx-proxy option, see monerod reference). This allows you to mask your IP (as transaction originator) against P2P network surveillence, on top of Monero's built-in Dandelion++.

What are P2P seed nodes?

Your monero daemon will discover other P2P nodes but it needs to start somewhere. These starting nodes are known as "seed nodes". For clearnet the seed nodes are hardcoded in the software so no configuration is needed.

For the Tor network there are no hardcoded seed nodes. You must specify them manually by using the add-peer option in monero.conf.

Config snippet

These were tested working as of 2020-01-11. They are ran by volunteers and are not guaranteed to work or be maintained. See below how you can quickly test them.

# monero.conf snippet
 # ...
 add-peer=moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion:18080
 add-peer=monerozf6koypqrt.onion:18080
@@ -1071,109 +7,20 @@ add-peer=rno75kjcw3ein6i446sqby2xkyqjarb75oq36ah6c2mribyklzhurpyd.onion:28083
 add-peer=sqzrokz36lgkng2i2nlzgzns2ugcxqosflygsxbkybb4xn6gq3ouugqd.onion:18083        # very flaky, works 1 in 3 times
 add-peer=blzchctiibfjfvtukctsydhquucz2oajnxnfc5hh4ix35gyqjhdnaqqd.onion:18083        # full node by author of monerodocs.org
 # ...
-
-

How to test onion seed nodes?

-

You need Tor daemon installed and running on your laptop. You will also need torsocks command line tool that either comes with Tor or needs to be installed separately.

-

Test using torsocks and telnet

-

You need tor, torsocks and telnet installed.

-

To test speficic onion:

-
torsocks telnet moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion 18080
-
-

The expected output (domain resolution errors are fine):

-
1610372702 ERROR torsocks[11332]: Unable to resolve. Status reply: 4 (in socks5_recv_resolve_reply() at socks5.c:677)
+

How to test onion seed nodes?

You need Tor daemon installed and running on your laptop. You will also need torsocks command line tool that either comes with Tor or needs to be installed separately.

Test using torsocks and telnet

You need tor, torsocks and telnet installed.

To test speficic onion:

torsocks telnet moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion 18080
+

The expected output (domain resolution errors are fine):

1610372702 ERROR torsocks[11332]: Unable to resolve. Status reply: 4 (in socks5_recv_resolve_reply() at socks5.c:677)
 Trying 127.42.42.0...
 Connected to moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion.
 Escape character is '^]'.
-
-

Test using torsocks and proxychains

-

You need tor, torsocks and proxychains installed.

-

To test specific onion:

-
proxychains nmap -Pn -p 18080 moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion
-
-

The expected output (example):

-
[proxychains] Strict chain  ...  127.0.0.1:9050  ...  moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion:18080  ...  OK
+

Test using torsocks and proxychains

You need tor, torsocks and proxychains installed.

To test specific onion:

proxychains nmap -Pn -p 18080 moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion
+

The expected output (example):

[proxychains] Strict chain  ...  127.0.0.1:9050  ...  moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion:18080  ...  OK
 Nmap scan report for moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion (224.0.0.1)
 Host is up (0.74s latency).
 rDNS record for 224.0.0.1: all-systems.mcast.net
 
 PORT      STATE SERVICE
 18080/tcp open  unknown
-
-

Not enough onion seed nodes

-

The onion seed nodes are a scarce resource. Most nodes are only maintained temporarily by their authors.

-

You can greatly contribute to Monero P2P network performance and resillience by running onion-enabled monero full node.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/interacting/download-monero-binaries/index.html b/public/interacting/download-monero-binaries/index.html index 8709a4d..c7518bd 100644 --- a/public/interacting/download-monero-binaries/index.html +++ b/public/interacting/download-monero-binaries/index.html @@ -1,1069 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Download Monero - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Download Monero

-

A single archive contains all you need to start using Monero (the full node and the wallet).

-

We recommend downloading Monero binaries directly from GitHub:

- -

GUI is a graphical desktop wallet.

-

CLI is a commandline desktop wallet.

-

If you need more guidance check download Monero section on Monero website.

-

It is critical to verify the signature of downloaded archive.

-

Which version to download?

-

Download the latest version matching your operating system and processor architecture.

-

The CLI version is released earlier and is suitable for server deployments.

-

The GUI version contains both CLI and GUI. It is preferable for end-users.

-

All versions contain a full node and a wallet.

-

Why prefer GitHub over getmonero.org?

-

Binaries appear earlier on GitHub.

-

On top of that, if you fail to properly verify the signature, GitHub is safer, simply because you don't need to trust a separate website to not be compromised. -Obviously, you should still carefully verify the signature for each release. Signature verification is always the primary line of defense.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/interacting/monero-blockchain-export-reference/index.html b/public/interacting/monero-blockchain-export-reference/index.html index f08875e..fd3e059 100644 --- a/public/interacting/monero-blockchain-export-reference/index.html +++ b/public/interacting/monero-blockchain-export-reference/index.html @@ -1,1291 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - monero-blockchain-export - Reference - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

monero-blockchain-export - Reference

-
-

Note

-

Nowadays, there is little usage for raw blockchain export / import. In the past the p2p blockchain download was much slower. Back than blockchain.raw file was used to speed up the process of bootstrapping a node.

-
-

Overview

-

The tool dumps local blockchain to raw format, known as the blockchain.raw file.

-

This could be useful if you want to process blockchain efficiently with your custom tools, -as the raw format is probably easier to work with than Monero's custom lmdb database.

-

The tool works on your local copy of the blockchain. It does not require monerod running.

-

Syntax

-

./monero-blockchain-export [options]

-

Example:

-

./monero-blockchain-export --help

-

Running

-

Go to directory where you unpacked Monero.

-

./monero-blockchain-export --stagenet --output-file=/tmp/blockchain.raw

-

Options

-

Help

- - - - - - - - - - - - - -
OptionDescription
--helpEnlist available options.
-

Pick network

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
(missing)By default monero-blockchain-export assumes mainnet.
--stagenetExport stagenet blockchain.
--testnetExport testnet blockchain.
-

Logging

-

Specifying the log file path is not supported.

- - - - - - - - - - - - - -
OptionDescription
--log-level0-4 with 0 being minimal logging and 4 being full tracing. Defaults to 0. These are general presets and do not directly map to severity levels. For example, even with minimal 0, you may see some most important INFO entries. Example:
./monero-blockchain-export --log-level=1
-

Input

- - - - - - - - - - - - - - - - - -
OptionDescription
--data-dirFull path to data directory. This is where the blockchain, log files, and p2p network memory are stored. For defaults and details see data directory.
--database, --db-typeThe default and only valid value is lmdb.
-

Output

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--output-fileSpecify output file path. The default is $DATA_DIR/export/blockchain.raw. Example:
./monero-blockchain-export --output-file=/tmp/blockchain.raw
--blocksdatOutput in blocks.dat format.
--block-stopOnly export up to this block number. By default do the full export (value 0).
-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/interacting/monero-blockchain-import-reference/index.html b/public/interacting/monero-blockchain-import-reference/index.html index 3faa138..7df0664 100644 --- a/public/interacting/monero-blockchain-import-reference/index.html +++ b/public/interacting/monero-blockchain-import-reference/index.html @@ -1,1343 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - monero-blockchain-import - Reference - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

monero-blockchain-import - Reference

-
-

Note

-

Nowadays, there is little usage for raw blockchain export / import. In the past the p2p blockchain download was much slower. Back than blockchain.raw file was used to speed up download process of bootstrapping a node.

-
-

Overview

-

The tool imports bootstrap file blockchain.raw to your full node.

-

This could be useful if you want to decouple download from verification for any reason (like testing performance in isolation). -In this case, you may download the blockchain.raw file from https://downloads.getmonero.org/blockchain.raw.

-

Ideally though, you should use your own trusted blockchain.raw file that you exported earlier.

-

Please note that importing blockchain.raw will not speed up the process over syncing up from p2p network. -This is because usual bottlenecks are disk IO and verification, not the download.

-

The tool works on your local files. It does not require monerod running.

-

Syntax

-

./monero-blockchain-import [options]

-

Example:

-

./monero-blockchain-import --help

-

Running

-

Go to directory where you unpacked Monero.

-

./monero-blockchain-import --stagenet --output-file=/tmp/blockchain.raw

-

Options

-

Help

- - - - - - - - - - - - - -
OptionDescription
--helpEnlist available options.
-

Pick network

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
(missing)By default monero-blockchain-import assumes the mainnet blockchain.
--stagenetImport stagenet blockchain.
--testnetImport testnet blockchain.
-

Logging

-

Specifying the log file path is not supported.

- - - - - - - - - - - - - -
OptionDescription
--log-level0-4 with 0 being minimal logging and 4 being full tracing. Defaults to 0. These are general presets and do not directly map to severity levels. For example, even with minimal 0, you may see some most important INFO entries. Example:
./monero-blockchain-import --log-level=1
-

Input

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--input-fileFull path to raw blockchain file. The default is $DATA_DIR/export/blockchain.raw.
--block-stopOnly import up to this block height. By default import all blocks (value 0).
--pop-blocksDiscard specified number of blocks from the tip of the bootstrapped blockchain. By default don't discard anything (value 0).
-

Output

- - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--data-dirFull path to data directory. This is where the blockchain, log files, and p2p network memory are stored. For defaults and details see data directory.
--count-blocksCount blocks in the bootstrap file and exit.
--drop-hard-forkWhether to drop hard fork data. Off by default (0).
--databaseThe only valid value seems to be lmdb (the default).
-

Performance

- - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--dangerous-unverified-importThe safe default is to run verification (value 0). You can enable --dangerous-unverified-import if you are importing from your own and trusted blockchain.raw (which we assume was already verified). The "dangerous" mode will greatly speed up the process.
--batchWhether to save to disk on an ongoing basis (the default, value 1) or maybe do everything in RAM and save everything in the end (value 0). No batching is only effective in combination with no verification (--dangerous-unverified-import). See also --batch-size.
--batch-sizeHow often to save to disk expressed in number of blocks. By default save every 5000 blocks (when verifying) or every 20000 blocks (when not verifying). Big batches are faster but require more RAM.
--resumeResume from current height if output database already exists (the default, value 1). Changing to --resume=0 doesn't change much — existing blocks are skipped pretty quickly and the process is resumed anyway.
-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/interacting/monero-config-file/index.html b/public/interacting/monero-config-file/index.html index 13e5bd6..3502026 100644 --- a/public/interacting/monero-config-file/index.html +++ b/public/interacting/monero-config-file/index.html @@ -1,1082 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - Monero Configuration File - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Monero Configuration File

-

Applicability

-

By default Monero looks for bitmonero.conf in Monero data directory.

-

To use a specific config file add --config-file option:

-

./monerod --config-file=/etc/monerod.conf

-

The --config-file option is available for:

-
    -
  • monerod
  • -
  • monero-wallet-cli
  • -
  • monero-wallet-rpc
  • -
  • monero-gen-trusted-multisig
  • -
-

Syntax

-
    -
  • option-name=value
  • -
  • valueless-option-name=1 for options that don't expect value
  • -
  • # comment
  • -
  • whitespace is ignored
  • -
-

Reference

-

All configuration options are the same as command line options for the binary.

- -

Skip the -- from --option-name.

-

Example:

-

./monerod --log-level=4 --stagenet

-

translates to:

-
log-level=4
+ Monero Configuration File - Monero Documentation      

Monero Configuration File

Applicability

By default Monero looks for bitmonero.conf in Monero data directory.

To use a specific config file add --config-file option:

./monerod --config-file=/etc/monerod.conf

The --config-file option is available for:

  • monerod
  • monero-wallet-cli
  • monero-wallet-rpc
  • monero-gen-trusted-multisig

Syntax

  • option-name=value
  • valueless-option-name=1 for options that don't expect value
  • # comment
  • whitespace is ignored

Reference

All configuration options are the same as command line options for the binary.

Skip the -- from --option-name.

Example:

./monerod --log-level=4 --stagenet

translates to:

log-level=4
 stagenet=1     # use value "1" to enable the value-less options like --stagenet
-
-

Examples

-

monerod.conf

-

This config is tailored for production server usage.

-
# /etc/monero/monerod.conf
+

Examples

monerod.conf

This config is tailored for production server usage.

# /etc/monero/monerod.conf
 
 # Data directory (blockchain db and indices)
 data-dir=/home/monero/.monero  # Remember to create the monero user first
@@ -1108,10 +32,7 @@ in-peers=1024             # The default is unlimited; we prefer to put a cap on
 
 limit-rate-up=1048576     # 1048576 kB/s == 1GB/s; a raise from default 2048 kB/s; contribute more to p2p network
 limit-rate-down=1048576   # 1048576 kB/s == 1GB/s; a raise from default 8192 kB/s; allow for faster initial sync
-
-

monero-wallet-cli.conf

-

This config is tailored for desktop usage on stagenet.

-
# $HOME/.bitmonero/stagenet/monero-wallet-cli.conf
+

monero-wallet-cli.conf

This config is tailored for desktop usage on stagenet.

# $HOME/.bitmonero/stagenet/monero-wallet-cli.conf
 
 # Pick network
 stagenet=1
@@ -1124,79 +45,7 @@ untrusted-daemon=1
 log-file=/tmp/monero-wallet-cli.log
 
 # wallet-file=/home/YOUR-USER/.bitmonero/stagenet/wallets/MoneroExampleStagenetWallet
-
- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/interacting/monero-wallet-cli-reference/index.html b/public/interacting/monero-wallet-cli-reference/index.html index ad091cc..ffc8b5f 100644 --- a/public/interacting/monero-wallet-cli-reference/index.html +++ b/public/interacting/monero-wallet-cli-reference/index.html @@ -1,2138 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - monero-wallet-cli - Reference - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
- -
-
- - -
-
- - - - - - - -

monero-wallet-cli - Reference

-
-

Note

-

Get yourself comfortable with a friendly Monero CLI wallet. -It is the most reliable and most complete wallet for Monero. -Use stagenet for learning.

-
-

Overview

-

Command line wallet

-

The "official" command line wallet for Monero. Available for Linux, macOS and Windows.

-

Wallet uses your private keys to understand your total balance, -transactions history, and to facilitate creating transactions.

-

However, wallet does not store the blockchain and does not directly participate in the p2p network.

-

The CLI wallet is the most reliable and most feature complete wallet for Monero.

-

Depends on the full node

-

Wallet connects to a full node to scan the blockchain for your transaction outputs and to send your transactions out to the network.

-

The full node can be either local (same computer) or remote.

-

Normally, you run the full node on the same computer as wallet (or within your home network).

-

Connection happens over HTTP and uses this API.

-

Any transaction leaving the wallet is already blinded by all Monero privacy features. -This means plain text HTTP communication isn't an issue on its own even if you connect to a remote node.

-

However, connecting to a remote node has other nuanced trade-offs, which is a topic for a separate article.

-

Syntax

-

./monero-wallet-cli [options] [command]

-

Example:

-

./monero-wallet-cli --stagenet

-

Running

-

Go to directory where you unpacked Monero.

-

Run the full node and wait until it syncs up with the network (may take up to a few days):

-

./monerod --stagenet

-

In a separate terminal window, run the wallet:

-

./monero-wallet-cli --stagenet --generate-new-wallet MoneroExampleStagenetWallet

-

Options

-

Help and version

- - - - - - - - - - - - - - - - - -
OptionDescription
--helpEnlist available options.
--versionShow monero-wallet-cli version to stdout. Example:
Monero 'Boron Butterfly' (v0.14.0.0-release)
-

Pick network

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
(missing)By default wallet assumes mainnet.
--stagenetRun on stagenet. Remember to run your daemon with --stagenet as well.
--testnetRun on testnet. Remember to run your daemon with --testnet as well.
-

Logging

- - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--log-file <arg>Full path to the log file.
--log-level <arg>0-4 with 0 being minimal logging and 4 being full tracing. Defaults to 0. These are general presets and do not directly map to severity levels. For example, even with minimal 0, you may see some most important INFO entries.
--max-log-file-size <arg>Soft limit in bytes for the log file (=104850000 by default, which is just under 100MB). Once log file grows past that limit, monero creates the next log file with a UTC timestamp postfix -YYYY-MM-DD-HH-MM-SS.

In production deployments, you would probably prefer to use established solutions like logrotate instead. In that case, set --max-log-file-size 0 to prevent monero from managing the log files.
--max-log-files <arg>Limit on the number of log files (=50 by default). The oldest log files are removed. In production deployments, you would probably prefer to use established solutions like logrotate instead.
-

Full node connection

-

Wallet depends on a full node for all non-local operations. The following options define how to connect to monerod:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--daemon-address <arg>Use monerod instance at <host>:<port>. Example:
./monero-wallet-cli --daemon-address monero-stagenet.exan.tech:38081 --stagenet
--daemon-host <arg>Use monerod instance at host <arg> instead of localhost.
--daemon-port <arg>Use monerod instance at port <arg> instead of 18081.
--daemon-login <arg>Specify username[:password] for monerod RPC API. It is based on HTTP Basic Auth. Mind that connections are by default unencrypted. Authentication only makes sense if you establish a secure connection (maybe via Tor, or SSH tunneling, or reverse proxy w/ TLS).
--trusted-daemonEnable commands and behaviors which rely on monerod instance being trusted. Default for localhost connection. The trust in this context concerns preserving your privacy. Only use this flag if you do control monerod. Trusted daemon allows for commands like rescan_spent, start_mining, import_key_images and behaviors like not warning about potential attack on transient problems with transaction sending.
--untrusted-daemonDisable commands and behaviors which rely on monerod instance being trusted. Default for a non-localhost connections. See --trusted-daemon for more details.
--do-not-relayThe newly created transaction will not be relayed to the Monero network. Instead it will be dumped to a file in a raw hexadecimal format. Useful if you want to push the transaction through a gateway like https://xmrchain.net/rawtx. This may be easier to use over Tor than Monero wallet.
--allow-mismatched-daemon-versionAllow communicating with monerod that uses a different RPC version.
-

Create new wallet

- - - - - - - - - - - - - - - - - -
OptionDescription
--generate-new-wallet <arg>Create a new Monero wallet and save it to <arg> file. You will be asked for a password. The password is used to encrypt the wallet file but it is unrelated to your master spend key or mnemonic seed. Generate a very strong password with your password manager (~256 bits of entropy). Example:

./monero-wallet-cli --stagenet --generate-new-wallet $HOME/.bitmonero/stagenet/wallets/MoneroExampleStagenetWallet
--kdf-rounds <arg>Concerns encrypting the wallet file. The wallet file is encrypted with ChaCha stream cipher. The encryption key is derived from the user supplied password by hashing the password with CryptoNight. This option defines how many times the CryptoNight hashing will be applied. The default is 1 round of hashing.

Note this is unrelated to spend key generation.

The more rounds the longer you will wait to open the wallet or send transaction. But also the attacker will have it harder to brute force your wallet password.

Note: You will have to remember and provide the same kdf-rounds on every wallet access!

Recommendation: Do not change the default value. Instead generate a very strong wallet password with your password manager (256 bits of entropy).
-

Open existing wallet

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--wallet-file <arg>Open existing wallet. Example:

./monero-wallet-cli --stagenet --wallet-file $HOME/.bitmonero/stagenet/wallets/MoneroExampleStagenetWallet

This is only for wallet files generated with monero-wallet-cli, monero-wallet-gui, or monero-wallet-rpc tools. If you have other type of wallet then see importing options.
--password <arg>Provide wallet password as a parameter instead of interactively. Remember to escape/quote as needed.

Not recommended because the password will remain in your command history and will also be visible in the process table. For automation prefer --password-file.

The option also works in combination with --generate-new-wallet.
--password-file <arg>Provide password as a file in stead of interactively. Trailing \n are discarded when reading the password file.

Prefer this over --password if you automate wallet access. Make sure the password file is meaningfully separated from the wallet file. Otherwise it provides no security benefit.

The option also works in combination with --generate-new-wallet.
-

Restore wallet

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--generate-from-device <arg>Restore/generate a special wallet to work with a hardware device like Ledger or Trezor and save it to <arg> file. Example:

./monero-wallet-cli --stagenet --generate-from-device MoneroExampleDeviceWallet --subaddress-lookahead 5:20

This is a one-time action. Next time you simply open the wallet.

By default the command expects Ledger hardware connected. For Trezor hardware add --hw-device Trezor (expected ~May 2019).

It will take up to 25 minutes with default settings. This is because hardware devices are slow to pre-generate subaddresses. To mitigate use low --subaddress-lookahead 5:20.

The local wallet will not have private spend key and will not be able to spend on its own. It serves as a user interface and a bridge for low-power hardware devices. Transaction signing with a private spend key always happens on the hardware device.

See the complete guide to hardware wallet setup.
--generate-from-view-key <arg>Restore a view-only version of the wallet to track incoming transactions and save it to <arg> file. The wallet is created based on a secret view key and standard address. The secret view key is meant to be pasted as hexadecimal.
--generate-from-spend-key <arg>Restore a wallet from secret spend key and save it to <arg> file. The secret spend key is meant to be pasted as hexadecimal.
--restore-deterministic-walletRestore a wallet from secret mnemonic seed. Use this to restore from your 25 words backup.

You will be asked for a password to encrypt the wallet file (once restored). Note this is not a passphrase to mnemonic seed. Mnemonic seeds generated by Monero official wallets are naked.
--restore-height <arg>Only scan for transactions later than specific blockchain height. The default is 0. Raising the value makes wallet restoration radically faster. The optimal value should match the day you originally created the wallet (but cannot be later). The mapping between the block height and date/time is available on block explorers like https://xmrchain.net. For instance, if you created the wallet in 2019+ use 1730000.
-

Multisig wallet

- - - - - - - - - - - - - - - - - -
OptionDescription
--generate-from-multisig-keys <arg>Create a standard wallet from multisig keys. This is useful to combine all multisig secret keys back into the standard wallet (when you no longer need the multisig). The wallet will then have control of the funds. It only supports providing all secret keys even if the multisig scheme allowed for less (only N/N not N/M).
--restore-multisig-walletRestore a multisig wallet from secret seed that was earlier exported with the seed interactive command. This only restores your part of the wallet. Other multisig participants will still be necessary to sign the transaction.
-

Config file

- - - - - - - - - - - - - -
OptionDescription
--config-file <arg>Full path to the configuration file. Note this should be a separate config than monerod uses because these tools accept different set of options.
-

Performance

- - - - - - - - - - - - - - - - - -
OptionDescription
--subaddress-lookahead <arg>Accepts m:n, by default 50:200. The first value is the number of accounts and the second value is the number of subaddresses per account.

The wallet will not check for payments to subaddresses further than n away from the last received payment. This can happen if you generated unique subaddresses for n clients in a row but none of them paid.

On the other hand the more subaddresses you set to look ahead, the longer it takes to create your wallet, because they must be pre-computed. This is normally not a concern, except for hardware wallets. On the Ledger the default value of 50:200 can take over 20 minutes (one time on wallet creation)!
--max-concurrency <arg>Max number of threads to use for parallel jobs. The default value 0 uses the number of CPU threads.
-

Internationalization

- - - - - - - - - - - - - - - - - -
OptionDescription
--mnemonic-language <arg>Language for mnemonic seed words. One of english, english_old, esperanto, french, german, italian, japanese, lojban, portuguese, russian, spanish.

It might be a good idea to stick to default English which is by far the most popular and well tested. It also avoids potential non-ASCII characters pitfalls or bugs.
--use-english-language-namesIf your display freezes, exit blind with ^C, then run again with --use-english-language-names. This can happen when Monero prompts for a language displaying language names in their natives alphabets.
-

Legacy

-

These options are either legacy or rarely useful.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--non-deterministicGenerate legacy non-deterministic wallet. The view key will not be derived from the spend key. You would also have to backup the .keys. To restore non-deterministic wallet (standard address) use --generate-from-keys. To restore fully you will need the .keys file.
--generate-from-keys <arg>Restore legacy non-deterministic wallet by providing both spend and view keys and the standard address.
--shared-ringdb-dir <arg>Set shared ring database path. No longer worthwhile.
--create-address-fileHas no effect. The *.address.txt file is created regardless of this option.
--electrum-seed <arg>Provide mnemonic seed as a commandline option for --restore-deterministic-wallet instead of interactively. This is not recommended b/c the seed will be saved in your command history and also visible in the process list.
--generate-from-json <arg>You would run monero-wallet-rpc to use this option. It seems exposed in monero-wallet-cli by accident.
--tx-notify <arg>You would run monero-wallet-rpc to use this option. It seems exposed in monero-wallet-cli by accident.
-

Defaults

-

Wallet files are created and seek in current directory. This is rarely what you want. Use --wallet-file and similar options to control this.

-

Log files are created in the same directory as monero-wallet-cli binary. Use --log-file to specify the location.

-

Commands

-

Commands are used interactively in the monero-wallet-cli prompt.

-

You can also run a one-off command by providing it as a commandline parameter. -This is rarely useful though. For automation prefer monero-wallet-rpc.

-

The CLI wallet has built-in help for individual commands - we will not attempt to reproduce that. -Instead we focus on grouping commands so you can quickly find what you are looking for. -Use help command_name to learn more.

-

Help and version

-

help - list all commands

-

help command_name - show help for individual command

-

version - show version of the monero-wallet-cli binary

-

Network status

-

status - show if synced up to the blockchain height

-

fee - show current fee-per-byte and full node's mempool (the backlog of transactions depending on the priority)

-

wallet_info - show wallet file path, standard address, type and network

-

Balance

-

account - total balance; list accounts with respective balances

-

balance detail - within the current account, list addresses with respective balances

-

refresh - force refresh the balance and transactions by pulling latest blocks from the full node; this is often useful because auto-refresh only kicks in once in 90 seconds

-

Manage accounts

-

account

-

account new

-

account switch

-

account label

-

Manage addresses

-

address all

-

address new

-

address label

-

View transactions

-

show_transfers - show all transactions on the current account; optionally provide a filter: in | out | pending | failed | pool | coinbase; optionally provide subaddress index for output selection

-

show_transfer <txid> - show details of specific transaction

-

incoming_transfers [available|unavailable] [verbose] [index=<N1>[,<N2>[,...]]] - show the incoming transactions, all or filtered by availability and address index within current account; this will only show confirmed transactions; you will not see transactions awaiting in the mempool

-

get_tx_note <txid> - get a string note for transaction id

-

Keys and Passwords

-

Secret mnemonic seed

-

seed - show raw mnemonic seed

-

encrypted_seed - create mnemonic seed encrypted with the passphrase; you will need to remember or store the passphrase separately; restoring will not be possible without the passphrase

-

Secret keys

-

spendkey - show secret spend key and public spend key

-

viewkey - show secret view key and public view key

-

Wallet password

-

password - change wallet password; this password is used to encrypt the local wallet files; it does not change secret keys or backups

-

Proofs

-

get_reserve_proof -> check_reserve_proof - prove the balance

-

get_spend_proof -> check_spend_proof - prove you made the payment

-

sign <file> -> verify <filename> <address> <signature> - prove ownership of the address; allows to verify the file was signed by the owner of specific Monero address

-

get_tx_proof -> check_tx_proof

-

Multisig

-

Setup

-

prepare_multisig

-

make_multisig

-

finalize_multisig

-

Update

-

export_multisig_info

-

import_multisig_info

-

Other

-

submit_multisig

-

exchange_multisig_keys

-

export_raw_multisig_tx

-

sign_multisig <filename>

-

Hardware wallet

-

hw_reconnect - attempts to reconnect HW wallet

-

Mining

-

start_mining

-

stop_mining

-

Advanced

-

Outputs

-

unspent_outputs - show a list of, and a histogram of unspent outputs (indivisible pieces of your total balance)

-

export_outputs <file> -> import_outputs <file> - helps with cold spending; export outputs from a view-wallet to the cold-wallet to make it aware of what had been sent to it

-

mark_output_spent <amount>/<offset> | <filename> [add]

-

mark_output_unspent <amount>/<offset>

-

is_output_spent <amount>/<offset>

-

Key images

-

export_key_images <file> -> import_key_images <file> - used to inform the view-only wallet about outgoing transactions so it can calculate the real balance; normally view-only wallets only learn about incoming transactions, not outgoing

-

Tx private key

-

These allow to learn and verify transaction's private key r. -This was useful to create a proof of payment -but got superseded by get_spend_proof.

-

get_tx_key <txid>

-

check_tx_key <txid> <txkey> <address>

-

set_tx_key <txid> <tx_key>

-

Debugging

-

rescan_spent - rescan the blockchain for spent outputs; sometimes, the wallet's idea of what outputs are spent and what outputs are not get out of sync with the blockchain. This can happen if you exit the wallet without saving after sending a tx, or if it crashes. This will look for the key images on the blockchain to make sure it's up to date.

-

Cosmetics

-

donate <amount> - donate <amount> to development team

-

address_book [(add ((<address> [pid <id>])|<integrated address>) [<description possibly with whitespaces>])|(delete <index>)]

-

set_description [free text note] -> get_description - manage convenience description of the wallet (the information is local)

-

Legacy

-

save - this now happens automatically

-

save_bc - this now happens automatically

-

bc_height - show blockchain height (superseded with status)

-

sweep_unmixable - only relevant for very old wallets (<= 2016); send all unmixable outputs to yourself with ring_size 10

-

locked_sweep_all - see

-

rescan_bc - rescan the blockchain from scratch, losing any information which can not be recovered from the blockchain itself

-

TODO: document remaining commands

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/interacting/monero-wallet-gui-reference/index.html b/public/interacting/monero-wallet-gui-reference/index.html index 882cc65..302e673 100644 --- a/public/interacting/monero-wallet-gui-reference/index.html +++ b/public/interacting/monero-wallet-gui-reference/index.html @@ -1,1200 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - monero-wallet-gui - Reference - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

monero-wallet-gui - Reference

-

Overview

-

Desktop GUI wallet

-

The "official" desktop wallet for Monero. Available for Linux, macOS and Windows.

-

Wallet uses your private keys to understand your total balance, -transactions history, and to facilitate creating transactions.

-

However, wallet does not store the blockchain and does not directly participate in the p2p network.

-

Depends on the full node

-

Wallet connects to a full node to scan the blockchain for your transaction outputs and to send your transactions out to the network.

-

The full node can be either local (same computer) or remote.

-

Normally, you run the full node on the same computer as wallet (or within your home network).

-

Connection happens over HTTP and uses this API.

-

Any transaction leaving the wallet is already blinded by all Monero privacy features. -This means plain text HTTP communication isn't an issue on its own even if you connect to a remote node.

-

However, connecting to a remote node has other nuanced trade-offs, which is a topic for a separate article.

-

User guide PDF

-

A nice PDF guide is available in the catalog you unpacked Monero. Make sure to check it out!

-

The online living version is also available:
-https://github.com/monero-ecosystem/monero-GUI-guide/blob/master/monero-GUI-guide.md

-

Syntax

-

./monero-wallet-gui [options]

-

Example:

-

./monero-wallet-gui --log-file=/dev/null

-

Running

-

Go to directory where you unpacked Monero.

-

Run the full node and wait until it syncs up with the network (may take up to a few days):

-

./monerod

-

In a separate terminal window, run the wallet:

-

./monero-wallet-gui

-

Options

-

There are very few options because everything is set up via a GUI.

- - - - - - - - - - - - - - - - - -
OptionDescription
--helpEnlists available options.
--log-fileFull path to the log file. Example (mind file permissions):
./monerod --log-file=/var/log/monero/mainnet/monerod.log
-

Defaults

-

The wallet is created in $HOME/Monero/wallets/. -You may want to change it to $HOME/.bitmonero/wallets/ to have all Monero related files in one place. -This is possible on wallet creation wizard in the GUI.

-

The log file is created directly in the home directory $HOME/monero-wallet-gui.log. -You may want to change with --log-file=$HOME/.bitmonero/monero-wallet-gui.log option.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/interacting/monero-wallet-rpc-reference/index.html b/public/interacting/monero-wallet-rpc-reference/index.html index 7232809..51ce57f 100644 --- a/public/interacting/monero-wallet-rpc-reference/index.html +++ b/public/interacting/monero-wallet-rpc-reference/index.html @@ -1,2686 +1,267 @@ - - - - - - - - - - - - - - - - - - - - - - - monero-wallet-rpc - Reference - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

monero-wallet-rpc - Reference

-

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:

- -

JSON RPC Methods:

-

add_address_book

-

Add an entry to the address book.

-

Alias: None.

-

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":"78P16M3XmFRGcWFCcsgt1WcTntA1jzcq31seQX1Eg92j8VQ99NPivmdKam4J5CKNAD7KuNWcq5xUPgoWczChzdba5WLwQ4j","description":"Third account"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "index": 1
-  }
-}
-
-

change_wallet_password

-

Change a wallet password.

-

Alias: None.

-

Inputs:

-
    -
  • old_password - string; (Optional) Current wallet password, if defined.
  • -
  • new_password - string; (Optional) New wallet password, if not blank.
  • -
-

Outputs: None.

-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"change_wallet_password","params":{"old_password":"theCurrentSecretPassPhrase","new_password":"theNewSecretPassPhrase"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-  }
-}
-
-

check_reserve_proof

-

Proves a wallet has a disposable reserve using a signature.

-

Alias: None.

-

Inputs:

-
    -
  • address - string; Public address of the wallet.
  • -
  • message - string; (Optional) Should be the same message used in get_reserve_proof.
  • -
  • signature - string; reserve signature to confirm.
  • -
-

Outputs:

-
    -
  • good - boolean; States if the inputs proves the reserve.
  • -
-

In the example below, the reserve has been proven:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_reserve_proof","params":{"address":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt","signature":"ReserveProofV11BZ23sBt9sZJeGccf84mzyAmNCP3KzYbE1111112VKmH111118NfCYJQjZ6c46gT2kXgcHCaSSZeL8sRdzqjqx7i1e7FQfQGu2o113UYFVdwzHQi3iENDPa76Kn1BvywbKz3bMkXdZkBEEhBSF4kjjGaiMJ1ucKb6wvMVC4A8sA4nZEdL2Mk3wBucJCYTZwKqA8i1M113kqakDkG25FrjiDqdQTCYz2wDBmfKxF3eQiV5FWzZ6HmAyxnqTWUiMWukP9A3Edy3ZXqjP1b23dhz7Mbj39bBxe3ZeDNu9HnTSqYvHNRyqCkeUMJpHyQweqjGUJ1DSfFYr33J1E7MkhMnEi1o7trqWjVix32XLetYfePG73yvHbS24837L7Q64i5n1LSpd9yMiQZ3Dyaysi5y6jPx7TpAvnSqBFtuCciKoNzaXoA3dqt9cuVFZTXzdXKqdt3cXcVJMNxY8RvKPVQHhUur94Lpo1nSpxf7BN5a5rHrbZFqoZszsZmiWikYPkLX72XUdw6NWjLrTBxSy7KuPYH86c6udPEXLo2xgN6XHMBMBJzt8FqqK7EcpNUBkuHm2AtpGkf9CABY3oSjDQoRF5n4vNLd3qUaxNsG4XJ12L9gJ7GrK273BxkfEA8fDdxPrb1gpespbgEnCTuZHqj1A"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "good": true,
-    "spent": 0,
-    "total": 100000000000
-  }
-}
-
-

In the example below, all wallet reserve has been proven:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_reserve_proof","params":{"address":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt","message":"I have 10 at least","signature":"...signature..."}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "good": true,
-    "spent": 0,
-    "total": 164113855714662789
-  }
-}
-
-

In the example below, the wrong message is used, avoiding the reserve to be proved:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_spend_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","message":"wrong message","signature":"SpendProofV1aSh8Todhk54736iXgV6vJAFP7egxByuMWZeyNDaN2JY737S95X5zz5mNMQSuCNSLjjhi5HJCsndpNWSNVsuThxwv285qy1KkUrLFRkxMSCjfL6bbycYN33ScZ5UB4Fzseceo1ndpL393T1q638VmcU3a56dhNHF1RPZFiGPS61FA78nXFSqE9uoKCCoHkEz83M1dQVhxZV5CEPF2P6VioGTKgprLCH9vvj9k1ivd4SX19L2VSMc3zD1u3mkR24ioETvxBoLeBSpxMoikyZ6inhuPm8yYo9YWyFtQK4XYfAV9mJ9knz5fUPXR8vvh7KJCAg4dqeJXTVb4mbMzYtsSZXHd6ouWoyCd6qMALdW8pKhgMCHcVYMWp9X9WHZuCo9rsRjRpg15sJUw7oJg1JoGiVgj8P4JeGDjnZHnmLVa5bpJhVCbMhyM7JLXNQJzFWTGC27TQBbthxCfQaKdusYnvZnKPDJWSeceYEFzepUnsWhQtyhbb73FzqgWC4eKEFKAZJqT2LuuSoxmihJ9acnFK7Ze23KTVYgDyMKY61VXADxmSrBvwUtxCaW4nQtnbMxiPMNnDMzeixqsFMBtN72j5UqhiLRY99k6SE7Qf5f29haNSBNSXCFFHChPKNTwJrehkofBdKUhh2VGPqZDNoefWUwfudeu83t85bmjv8Q3LrQSkFgFjRT5tLo8TMawNXoZCrQpyZrEvnodMDDUUNf3NL7rxyv3gM1KrTWjYaWXFU2RAsFee2Q2MTwUW7hR25cJvSFuB1BX2bfkoCbiMk923tHZGU2g7rSKF1GDDkXAc1EvFFD4iGbh1Q5t6hPRhBV8PEncdcCWGq5uAL5D4Bjr6VXG8uNeCy5oYWNgbZ5JRSfm7QEhPv8Fy9AKMgmCxDGMF9dVEaU6tw2BAnJavQdfrxChbDBeQXzCbCfep6oei6n2LZdE5Q84wp7eoQFE5Cwuo23tHkbJCaw2njFi3WGBbA7uGZaGHJPyB2rofTWBiSUXZnP2hiE9bjJghAcDm1M4LVLfWvhZmFEnyeru3VWMETnetz1BYLUC5MJGFXuhnHwWh7F6r74FDyhdswYop4eWPbyrXMXmUQEccTGd2NaT8g2VHADZ76gMC6BjWESvcnz2D4n8XwdmM7ZQ1jFwhuXrBfrb1dwRasyXxxHMGAC2onatNiExyeQ9G1W5LwqNLAh9hvcaNTGaYKYXoceVzLkgm6e5WMkLsCwuZXvB"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "good": false
-  }
-}
-
-

check_spend_proof

-

Prove a spend using a signature. Unlike proving a transaction, it does not requires the destination public address.

-

Alias: None.

-

Inputs:

-
    -
  • txid - string; transaction id.
  • -
  • message - string; (Optional) Should be the same message used in get_spend_proof.
  • -
  • signature - string; spend signature to confirm.
  • -
-

Outputs:

-
    -
  • good - boolean; States if the inputs proves the spend.
  • -
-

In the example below, the spend has been proven:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_spend_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","message":"this is my transaction","signature":"SpendProofV1aSh8Todhk54736iXgV6vJAFP7egxByuMWZeyNDaN2JY737S95X5zz5mNMQSuCNSLjjhi5HJCsndpNWSNVsuThxwv285qy1KkUrLFRkxMSCjfL6bbycYN33ScZ5UB4Fzseceo1ndpL393T1q638VmcU3a56dhNHF1RPZFiGPS61FA78nXFSqE9uoKCCoHkEz83M1dQVhxZV5CEPF2P6VioGTKgprLCH9vvj9k1ivd4SX19L2VSMc3zD1u3mkR24ioETvxBoLeBSpxMoikyZ6inhuPm8yYo9YWyFtQK4XYfAV9mJ9knz5fUPXR8vvh7KJCAg4dqeJXTVb4mbMzYtsSZXHd6ouWoyCd6qMALdW8pKhgMCHcVYMWp9X9WHZuCo9rsRjRpg15sJUw7oJg1JoGiVgj8P4JeGDjnZHnmLVa5bpJhVCbMhyM7JLXNQJzFWTGC27TQBbthxCfQaKdusYnvZnKPDJWSeceYEFzepUnsWhQtyhbb73FzqgWC4eKEFKAZJqT2LuuSoxmihJ9acnFK7Ze23KTVYgDyMKY61VXADxmSrBvwUtxCaW4nQtnbMxiPMNnDMzeixqsFMBtN72j5UqhiLRY99k6SE7Qf5f29haNSBNSXCFFHChPKNTwJrehkofBdKUhh2VGPqZDNoefWUwfudeu83t85bmjv8Q3LrQSkFgFjRT5tLo8TMawNXoZCrQpyZrEvnodMDDUUNf3NL7rxyv3gM1KrTWjYaWXFU2RAsFee2Q2MTwUW7hR25cJvSFuB1BX2bfkoCbiMk923tHZGU2g7rSKF1GDDkXAc1EvFFD4iGbh1Q5t6hPRhBV8PEncdcCWGq5uAL5D4Bjr6VXG8uNeCy5oYWNgbZ5JRSfm7QEhPv8Fy9AKMgmCxDGMF9dVEaU6tw2BAnJavQdfrxChbDBeQXzCbCfep6oei6n2LZdE5Q84wp7eoQFE5Cwuo23tHkbJCaw2njFi3WGBbA7uGZaGHJPyB2rofTWBiSUXZnP2hiE9bjJghAcDm1M4LVLfWvhZmFEnyeru3VWMETnetz1BYLUC5MJGFXuhnHwWh7F6r74FDyhdswYop4eWPbyrXMXmUQEccTGd2NaT8g2VHADZ76gMC6BjWESvcnz2D4n8XwdmM7ZQ1jFwhuXrBfrb1dwRasyXxxHMGAC2onatNiExyeQ9G1W5LwqNLAh9hvcaNTGaYKYXoceVzLkgm6e5WMkLsCwuZXvB"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "good": true
-  }
-}
-
-

In the example below, the wrong message is used, avoiding the spend to be proved:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_spend_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","message":"wrong message","signature":"SpendProofV1aSh8Todhk54736iXgV6vJAFP7egxByuMWZeyNDaN2JY737S95X5zz5mNMQSuCNSLjjhi5HJCsndpNWSNVsuThxwv285qy1KkUrLFRkxMSCjfL6bbycYN33ScZ5UB4Fzseceo1ndpL393T1q638VmcU3a56dhNHF1RPZFiGPS61FA78nXFSqE9uoKCCoHkEz83M1dQVhxZV5CEPF2P6VioGTKgprLCH9vvj9k1ivd4SX19L2VSMc3zD1u3mkR24ioETvxBoLeBSpxMoikyZ6inhuPm8yYo9YWyFtQK4XYfAV9mJ9knz5fUPXR8vvh7KJCAg4dqeJXTVb4mbMzYtsSZXHd6ouWoyCd6qMALdW8pKhgMCHcVYMWp9X9WHZuCo9rsRjRpg15sJUw7oJg1JoGiVgj8P4JeGDjnZHnmLVa5bpJhVCbMhyM7JLXNQJzFWTGC27TQBbthxCfQaKdusYnvZnKPDJWSeceYEFzepUnsWhQtyhbb73FzqgWC4eKEFKAZJqT2LuuSoxmihJ9acnFK7Ze23KTVYgDyMKY61VXADxmSrBvwUtxCaW4nQtnbMxiPMNnDMzeixqsFMBtN72j5UqhiLRY99k6SE7Qf5f29haNSBNSXCFFHChPKNTwJrehkofBdKUhh2VGPqZDNoefWUwfudeu83t85bmjv8Q3LrQSkFgFjRT5tLo8TMawNXoZCrQpyZrEvnodMDDUUNf3NL7rxyv3gM1KrTWjYaWXFU2RAsFee2Q2MTwUW7hR25cJvSFuB1BX2bfkoCbiMk923tHZGU2g7rSKF1GDDkXAc1EvFFD4iGbh1Q5t6hPRhBV8PEncdcCWGq5uAL5D4Bjr6VXG8uNeCy5oYWNgbZ5JRSfm7QEhPv8Fy9AKMgmCxDGMF9dVEaU6tw2BAnJavQdfrxChbDBeQXzCbCfep6oei6n2LZdE5Q84wp7eoQFE5Cwuo23tHkbJCaw2njFi3WGBbA7uGZaGHJPyB2rofTWBiSUXZnP2hiE9bjJghAcDm1M4LVLfWvhZmFEnyeru3VWMETnetz1BYLUC5MJGFXuhnHwWh7F6r74FDyhdswYop4eWPbyrXMXmUQEccTGd2NaT8g2VHADZ76gMC6BjWESvcnz2D4n8XwdmM7ZQ1jFwhuXrBfrb1dwRasyXxxHMGAC2onatNiExyeQ9G1W5LwqNLAh9hvcaNTGaYKYXoceVzLkgm6e5WMkLsCwuZXvB"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "good": false
-  }
-}
-
-

check_tx_key

-

Check a transaction in the blockchain with its secret key.

-

Alias: None.

-

Inputs:

-
    -
  • txid - string; transaction id.
  • -
  • tx_key - string; transaction secret key.
  • -
  • address - string; destination public address of the transaction.
  • -
-

Outputs:

-
    -
  • confirmations - unsigned int; Number of block mined after the one with the transaction.
  • -
  • in_pool - boolean; States if the transaction is still in pool or has been added to a block.
  • -
  • received - unsigned int; Amount of the transaction.
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_tx_key","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","tx_key":"feba662cf8fb6d0d0da18fc9b70ab28e01cc76311278fdd7fe7ab16360762b06","address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "confirmations": 0,
-    "in_pool": false,
-    "received": 1000000000000
-  }
-}
-
-

check_tx_proof

-

Prove a transaction by checking its signature.

-

Alias: None.

-

Inputs:

-
    -
  • txid - string; transaction id.
  • -
  • address - string; destination public address of the transaction.
  • -
  • message - string; (Optional) Should be the same message used in get_tx_proof.
  • -
  • signature - string; transaction signature to confirm.
  • -
-

Outputs:

-
    -
  • confirmations - unsigned int; Number of block mined after the one with the transaction.
  • -
  • good - boolean; States if the inputs proves the transaction.
  • -
  • in_pool - boolean; States if the transaction is still in pool or has been added to a block.
  • -
  • received - unsigned int; Amount of the transaction.
  • -
-

In the example below, the transaction has been proven:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_tx_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o","message":"this is my transaction","signature":"InProofV13vqBCT6dpSAXkypZmSEMPGVnNRFDX2vscUYeVS4WnSVnV5BwLs31T9q6Etfj9Wts6tAxSAS4gkMeSYzzLS7Gt4vvCSQRh9niGJMUDJsB5hTzb2XJiCkUzWkkcjLFBBRVD5QZ"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "confirmations": 482,
-    "good": true,
-    "in_pool": false,
-    "received": 1000000000000
-  }
-}
-
-

In the example below, the wrong message is used, avoiding the transaction to be proved:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_tx_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o","message":"wrong message","signature":"InProofV13vqBCT6dpSAXkypZmSEMPGVnNRFDX2vscUYeVS4WnSVnV5BwLs31T9q6Etfj9Wts6tAxSAS4gkMeSYzzLS7Gt4vvCSQRh9niGJMUDJsB5hTzb2XJiCkUzWkkcjLFBBRVD5QZ"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "confirmations": 0,
-    "good": false,
-    "in_pool": false,
-    "received": 0
-  }
-}
-
-

close_wallet

-

Close the currently opened wallet, after trying to save it.

-

Alias: None.

-

Inputs: None.

-

Outputs: None.

-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"close_wallet"}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-  }
-}
-
-

create_account

-

Create a new account with an optional label.

-

Alias: None.

-

Inputs:

-
    -
  • label - string; (Optional) Label for the account.
  • -
-

Outputs:

-
    -
  • account_index - unsigned int; Index of the new account.
  • -
  • address - string; Address for this account. Base58 representation of the public keys.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"create_account","params":{"label":"Secondary account"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "account_index": 1,
-    "address": "77Vx9cs1VPicFndSVgYUvTdLCJEZw9h81hXLMYsjBCXSJfUehLa9TDW3Ffh45SQa7xb6dUs18mpNxfUhQGqfwXPSMrvKhVp"
-  }
-}
-
-

create_address

-

Create a new address for an account. Optionally, label the new address.

-

Alias: None.

-

Inputs:

-
    -
  • account_index - unsigned int; Create a new address for this account.
  • -
  • label - string; (Optional) Label for the new address.
  • -
-

Outputs:

-
    -
  • address - string; Newly created address. Base58 representation of the public keys.
  • -
  • address_index - unsigned int; Index of the new address under the input account.
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"create_address","params":{"account_index":0,"label":"new-sub"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "address": "7BG5jr9QS5sGMdpbBrZEwVLZjSKJGJBsXdZLt8wiXyhhLjy7x2LZxsrAnHTgD8oG46ZtLjUGic2pWc96GFkGNPQQDA3Dt7Q",
-    "address_index": 5
-  }
-}
-
-

create_wallet

-

Create a new wallet. You need to have set the argument "–wallet-dir" when launching monero-wallet-rpc to make this work.

-

Alias: None.

-

Inputs:

-
    -
  • filename - string; Wallet file name.
  • -
  • password - string; (Optional) password to protect the wallet.
  • -
  • 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": {
-  }
-}
-
-

delete_address_book

-

Delete an entry from the address book.

-

Alias: None.

-

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":1}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-  }
-}
-
-

export_key_images

-

Export a signed set of key images.

-

Alias: None.

-

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": "cd35239b72a35e26a57ed17400c0b66944a55de9d5bda0f21190fed17f8ea876",
-      "signature": "c9d736869355da2538ab4af188279f84138c958edbae3c5caf388a63cd8e780b8c5a1aed850bd79657df659422c463608ea4e0c730ba9b662c906ae933816d00"
-    },{
-      "key_image": "65158a8ee5a3b32009b85a307d85b375175870e560e08de313531c7dbbe6fc19",
-      "signature": "c96e40d09dfc45cfc5ed0b76bfd7ca793469588bb0cf2b4d7b45ef23d40fd4036057b397828062e31700dc0c2da364f50cd142295a8405b9fe97418b4b745d0c"
-    },...]
-  }
-}
-
-

export_multisig_info

-

Export multisig info for other participants.

-

Alias: None.

-

Inputs: None.

-

Outputs:

-
    -
  • info - string; Multisig info in hex format for other participants.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"export_multisig_info"}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "info": "4d6f6e65726f206d756c7469736967206578706f72740105cf6442b09b75f5eca9d846771fe1a879c9a97ab0553ffbcec64b1148eb7832b51e7898d7944c41cee000415c5a98f4f80dc0efdae379a98805bb6eacae743446f6f421cd03e129eb5b27d6e3b73eb6929201507c1ae706c1a9ecd26ac8601932415b0b6f49cbbfd712e47d01262c59980a8f9a8be776f2bf585f1477a6df63d6364614d941ecfdcb6e958a390eb9aa7c87f056673d73bc7c5f0ab1f74a682e902e48a3322c0413bb7f6fd67404f13fb8e313f70a0ce568c853206751a334ef490068d3c8ca0e"
-  }
-}
-
-

export_outputs

-

Export all outputs in hex format.

-

Alias: None.

-

Inputs: None.

-

Outputs:

-
    -
  • outputs_data_hex - string; wallet outputs in hex format.
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"export_outputs"}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "outputs_data_hex": "...outputs..."
-  }
-}
-
-

finalize_multisig

-

Turn this wallet into a multisig wallet, extra step for N-1/N wallets.

-

Alias: None.

-

Inputs:

-
    -
  • multisig_info - array of string; List of multisig string from peers.
  • -
  • password - string; Wallet password
  • -
-

Outputs:

-
    -
  • address - string; multisig wallet address.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"finalize_multisig","params":{"multisig_info":["MultisigxV1JNC6Ja2oBt5Sqea9LN2YEF7WYZCpHqr2EKvPG89Trf3X4E8RWkLaGRf29fJ3stU471MELKxwufNYeigP7LoE4tn2McPr4SbL9q15xNvZT5uwC9YRr7UwjXqSZHmTWN9PBuZEKVAQ4HPPyQciSCdNjgwsuFRBzrskMdMUwNMgKst1debYfm37i6PSzDoS2tk4kYTYj83kkAdR7kdshet1axQPd6HQ","MultisigxV1Unma7Ko4zdd8Ps3Af4oZwtj2JdWKzwNfP6s2G9ZvXhMoSscwn5g7PyCfcBc1V4ffRHY3Kxqq6VocSCUTncpVeUskMcPr4SbL9q15xNvZT5uwC9YRr7UwjXqSZHmTWN9PBuZE1LTpWxLoC3vPMSrqVVcjnmL9LYfdCZz3fECjNZbCEDq3PHDiUuY5jurQTcNoGhDTio5WM9xaAdim9YByiS5KyqF4"]}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "address": "5B9gZUTDuHTcGGuY3nL3t8K2tDnEHeRVHSBQgLZUTQxtFYVLnho5JJjWJyFp5YZgZRQ44RiviJi1sPHgLVMbckRsDqDx1gV"
-  }
-}
-
-

get_account_tags

-

Get a list of user-defined account tags.

-

Alias: None.

-

Inputs: None.

-

Outputs:

-
    -
  • account_tags - array of account tag information:
      -
    • tag - string; Filter tag.
    • -
    • label - string; Label for the tag.
    • -
    • accounts - array of int; List of tagged account indices.
    • -
    -
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_account_tags","params":""}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "account_tags": [{
-      "accounts": [0],
-      "label": "Test tag",
-      "tag": "myTag"
-    }]
-  }
-}
-
-

get_accounts

-

Get all accounts for a wallet. Optionally filter accounts by tag.

-

Alias: None.

-

Inputs:

-
    -
  • tag - string; (Optional) Tag for filtering accounts.
  • -
-

Outputs:

-
    -
  • subaddress_accounts - array of subaddress account information:
      -
    • account_index - unsigned int; Index of the account.
    • -
    • balance - unsigned int; Balance of the account (locked or unlocked).
    • -
    • base_address - string; Base64 representation of the first subaddress in the account.
    • -
    • label - string; (Optional) Label of the account.
    • -
    • tag - string; (Optional) Tag for filtering accounts.
    • -
    • unlocked_balance - unsigned int; Unlocked balance for the account.
    • -
    -
  • -
  • total_balance - unsigned int; Total balance of the selected accounts (locked or unlocked).
  • -
  • total_unlocked_balance - unsigned int; Total unlocked balance of the selected accounts.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_accounts","params":{"tag":"myTag"}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "subaddress_accounts": [{
-      "account_index": 0,
-      "balance": 157663195572433688,
-      "base_address": "55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt",
-      "label": "Primary account",
-      "tag": "myTag",
-      "unlocked_balance": 157443303037455077
-    },{
-      "account_index": 1,
-      "balance": 0,
-      "base_address": "77Vx9cs1VPicFndSVgYUvTdLCJEZw9h81hXLMYsjBCXSJfUehLa9TDW3Ffh45SQa7xb6dUs18mpNxfUhQGqfwXPSMrvKhVp",
-      "label": "Secondary account",
-      "tag": "myTag",
-      "unlocked_balance": 0
-    }],
-    "total_balance": 157663195572433688,
-    "total_unlocked_balance": 157443303037455077
-  }
-}
-
-

get_address

-

Return the wallet's addresses for an account. Optionally filter for specific set of subaddresses.

-

Alias: getaddress.

-

Inputs:

-
    -
  • account_index - unsigned int; Return subaddresses for this account.
  • -
  • address_index - array of unsigned int; (Optional) List of subaddresses to return from an account.
  • -
-

Outputs:

-
    -
  • address - string; The 95-character hex address string of the monero-wallet-rpc in session.
  • -
  • addresses array of addresses informations
      -
    • address string; The 95-character hex (sub)address string.
    • -
    • label string; Label of the (sub)address
    • -
    • address_index unsigned int; index of the subaddress
    • -
    • used boolean; states if the (sub)address has already received funds
    • -
    -
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_address","params":{"account_index":0,"address_index":[0,1,4]}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "address": "55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt",
-    "addresses": [{
-      "address": "55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt",
-      "address_index": 0,
-      "label": "Primary account",
-      "used": true
-    },{
-      "address": "7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o",
-      "address_index": 1,
-      "label": "",
-      "used": true
-    },{
-      "address": "77xa6Dha7kzCQuvmd8iB5VYoMkdenwCNRU9khGhExXQ8KLL3z1N1ZATBD1sFPenyHWT9cm4fVFnCAUApY53peuoZFtwZiw5",
-      "address_index": 4,
-      "label": "test2",
-      "used": true
-    }]
-  }
-}
-
-

get_address_book

-

Retrieves entries from the address book.

-

Alias: None.

-

Inputs:

-
    -
  • entries - array of unsigned int; indices of the requested address book entries
  • -
-

Outputs:

-
    -
  • entries - array of entries:
      -
    • address - string; Public address of the entry
    • -
    • description - string; Description of this address entry
    • -
    • 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":[0,1]}}' -H 'Content-Type: application/json'
-{
-  "id": "0",
-  "jsonrpc": "2.0",
-  "result": {
-    "entries": [{
-      "address": "77Vx9cs1VPicFndSVgYUvTdLCJEZw9h81hXLMYsjBCXSJfUehLa9TDW3Ffh45SQa7xb6dUs18mpNxfUhQGqfwXPSMrvKhVp",
-      "description": "Second account",
-      "index": 0,
-      "payment_id": "0000000000000000000000000000000000000000000000000000000000000000"
-    },{
-      "address": "78P16M3XmFRGcWFCcsgt1WcTntA1jzcq31seQX1Eg92j8VQ99NPivmdKam4J5CKNAD7KuNWcq5xUPgoWczChzdba5WLwQ4j",
-      "description": "Third account",
-      "index": 1,
-      "payment_id": "0000000000000000000000000000000000000000000000000000000000000000"
-    }]
-  }
-}
-
-

get_address_index

-

Get account and address indexes from a specific (sub)address

-

Alias: None.

-

Inputs:

-
    -
  • address - String; (sub)address to look for.
  • -
-

Outputs:

-
    -
  • index - subaddress informations
      -
    • major unsigned int; Account index.
    • -
    • minor unsigned int; Address index.
    • -
    -
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_address_index","params":{"address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o"}}' -H 'Content-Type: application/json'
+ monero-wallet-rpc - Reference - Monero Documentation      

monero-wallet-rpc - Reference

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:

JSON RPC Methods:

add_address_book

Add an entry to the address book.

Alias: None.

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":"78P16M3XmFRGcWFCcsgt1WcTntA1jzcq31seQX1Eg92j8VQ99NPivmdKam4J5CKNAD7KuNWcq5xUPgoWczChzdba5WLwQ4j","description":"Third account"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "index": 1
+  }
+}
+

change_wallet_password

Change a wallet password.

Alias: None.

Inputs:

  • old_password - string; (Optional) Current wallet password, if defined.
  • new_password - string; (Optional) New wallet password, if not blank.

Outputs: None.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"change_wallet_password","params":{"old_password":"theCurrentSecretPassPhrase","new_password":"theNewSecretPassPhrase"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+  }
+}
+

check_reserve_proof

Proves a wallet has a disposable reserve using a signature.

Alias: None.

Inputs:

  • address - string; Public address of the wallet.
  • message - string; (Optional) Should be the same message used in get_reserve_proof.
  • signature - string; reserve signature to confirm.

Outputs:

  • good - boolean; States if the inputs proves the reserve.

In the example below, the reserve has been proven:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_reserve_proof","params":{"address":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt","signature":"ReserveProofV11BZ23sBt9sZJeGccf84mzyAmNCP3KzYbE1111112VKmH111118NfCYJQjZ6c46gT2kXgcHCaSSZeL8sRdzqjqx7i1e7FQfQGu2o113UYFVdwzHQi3iENDPa76Kn1BvywbKz3bMkXdZkBEEhBSF4kjjGaiMJ1ucKb6wvMVC4A8sA4nZEdL2Mk3wBucJCYTZwKqA8i1M113kqakDkG25FrjiDqdQTCYz2wDBmfKxF3eQiV5FWzZ6HmAyxnqTWUiMWukP9A3Edy3ZXqjP1b23dhz7Mbj39bBxe3ZeDNu9HnTSqYvHNRyqCkeUMJpHyQweqjGUJ1DSfFYr33J1E7MkhMnEi1o7trqWjVix32XLetYfePG73yvHbS24837L7Q64i5n1LSpd9yMiQZ3Dyaysi5y6jPx7TpAvnSqBFtuCciKoNzaXoA3dqt9cuVFZTXzdXKqdt3cXcVJMNxY8RvKPVQHhUur94Lpo1nSpxf7BN5a5rHrbZFqoZszsZmiWikYPkLX72XUdw6NWjLrTBxSy7KuPYH86c6udPEXLo2xgN6XHMBMBJzt8FqqK7EcpNUBkuHm2AtpGkf9CABY3oSjDQoRF5n4vNLd3qUaxNsG4XJ12L9gJ7GrK273BxkfEA8fDdxPrb1gpespbgEnCTuZHqj1A"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "good": true,
+    "spent": 0,
+    "total": 100000000000
+  }
+}
+

In the example below, all wallet reserve has been proven:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_reserve_proof","params":{"address":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt","message":"I have 10 at least","signature":"...signature..."}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "good": true,
+    "spent": 0,
+    "total": 164113855714662789
+  }
+}
+

In the example below, the wrong message is used, avoiding the reserve to be proved:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_spend_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","message":"wrong message","signature":"SpendProofV1aSh8Todhk54736iXgV6vJAFP7egxByuMWZeyNDaN2JY737S95X5zz5mNMQSuCNSLjjhi5HJCsndpNWSNVsuThxwv285qy1KkUrLFRkxMSCjfL6bbycYN33ScZ5UB4Fzseceo1ndpL393T1q638VmcU3a56dhNHF1RPZFiGPS61FA78nXFSqE9uoKCCoHkEz83M1dQVhxZV5CEPF2P6VioGTKgprLCH9vvj9k1ivd4SX19L2VSMc3zD1u3mkR24ioETvxBoLeBSpxMoikyZ6inhuPm8yYo9YWyFtQK4XYfAV9mJ9knz5fUPXR8vvh7KJCAg4dqeJXTVb4mbMzYtsSZXHd6ouWoyCd6qMALdW8pKhgMCHcVYMWp9X9WHZuCo9rsRjRpg15sJUw7oJg1JoGiVgj8P4JeGDjnZHnmLVa5bpJhVCbMhyM7JLXNQJzFWTGC27TQBbthxCfQaKdusYnvZnKPDJWSeceYEFzepUnsWhQtyhbb73FzqgWC4eKEFKAZJqT2LuuSoxmihJ9acnFK7Ze23KTVYgDyMKY61VXADxmSrBvwUtxCaW4nQtnbMxiPMNnDMzeixqsFMBtN72j5UqhiLRY99k6SE7Qf5f29haNSBNSXCFFHChPKNTwJrehkofBdKUhh2VGPqZDNoefWUwfudeu83t85bmjv8Q3LrQSkFgFjRT5tLo8TMawNXoZCrQpyZrEvnodMDDUUNf3NL7rxyv3gM1KrTWjYaWXFU2RAsFee2Q2MTwUW7hR25cJvSFuB1BX2bfkoCbiMk923tHZGU2g7rSKF1GDDkXAc1EvFFD4iGbh1Q5t6hPRhBV8PEncdcCWGq5uAL5D4Bjr6VXG8uNeCy5oYWNgbZ5JRSfm7QEhPv8Fy9AKMgmCxDGMF9dVEaU6tw2BAnJavQdfrxChbDBeQXzCbCfep6oei6n2LZdE5Q84wp7eoQFE5Cwuo23tHkbJCaw2njFi3WGBbA7uGZaGHJPyB2rofTWBiSUXZnP2hiE9bjJghAcDm1M4LVLfWvhZmFEnyeru3VWMETnetz1BYLUC5MJGFXuhnHwWh7F6r74FDyhdswYop4eWPbyrXMXmUQEccTGd2NaT8g2VHADZ76gMC6BjWESvcnz2D4n8XwdmM7ZQ1jFwhuXrBfrb1dwRasyXxxHMGAC2onatNiExyeQ9G1W5LwqNLAh9hvcaNTGaYKYXoceVzLkgm6e5WMkLsCwuZXvB"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "good": false
+  }
+}
+

check_spend_proof

Prove a spend using a signature. Unlike proving a transaction, it does not requires the destination public address.

Alias: None.

Inputs:

  • txid - string; transaction id.
  • message - string; (Optional) Should be the same message used in get_spend_proof.
  • signature - string; spend signature to confirm.

Outputs:

  • good - boolean; States if the inputs proves the spend.

In the example below, the spend has been proven:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_spend_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","message":"this is my transaction","signature":"SpendProofV1aSh8Todhk54736iXgV6vJAFP7egxByuMWZeyNDaN2JY737S95X5zz5mNMQSuCNSLjjhi5HJCsndpNWSNVsuThxwv285qy1KkUrLFRkxMSCjfL6bbycYN33ScZ5UB4Fzseceo1ndpL393T1q638VmcU3a56dhNHF1RPZFiGPS61FA78nXFSqE9uoKCCoHkEz83M1dQVhxZV5CEPF2P6VioGTKgprLCH9vvj9k1ivd4SX19L2VSMc3zD1u3mkR24ioETvxBoLeBSpxMoikyZ6inhuPm8yYo9YWyFtQK4XYfAV9mJ9knz5fUPXR8vvh7KJCAg4dqeJXTVb4mbMzYtsSZXHd6ouWoyCd6qMALdW8pKhgMCHcVYMWp9X9WHZuCo9rsRjRpg15sJUw7oJg1JoGiVgj8P4JeGDjnZHnmLVa5bpJhVCbMhyM7JLXNQJzFWTGC27TQBbthxCfQaKdusYnvZnKPDJWSeceYEFzepUnsWhQtyhbb73FzqgWC4eKEFKAZJqT2LuuSoxmihJ9acnFK7Ze23KTVYgDyMKY61VXADxmSrBvwUtxCaW4nQtnbMxiPMNnDMzeixqsFMBtN72j5UqhiLRY99k6SE7Qf5f29haNSBNSXCFFHChPKNTwJrehkofBdKUhh2VGPqZDNoefWUwfudeu83t85bmjv8Q3LrQSkFgFjRT5tLo8TMawNXoZCrQpyZrEvnodMDDUUNf3NL7rxyv3gM1KrTWjYaWXFU2RAsFee2Q2MTwUW7hR25cJvSFuB1BX2bfkoCbiMk923tHZGU2g7rSKF1GDDkXAc1EvFFD4iGbh1Q5t6hPRhBV8PEncdcCWGq5uAL5D4Bjr6VXG8uNeCy5oYWNgbZ5JRSfm7QEhPv8Fy9AKMgmCxDGMF9dVEaU6tw2BAnJavQdfrxChbDBeQXzCbCfep6oei6n2LZdE5Q84wp7eoQFE5Cwuo23tHkbJCaw2njFi3WGBbA7uGZaGHJPyB2rofTWBiSUXZnP2hiE9bjJghAcDm1M4LVLfWvhZmFEnyeru3VWMETnetz1BYLUC5MJGFXuhnHwWh7F6r74FDyhdswYop4eWPbyrXMXmUQEccTGd2NaT8g2VHADZ76gMC6BjWESvcnz2D4n8XwdmM7ZQ1jFwhuXrBfrb1dwRasyXxxHMGAC2onatNiExyeQ9G1W5LwqNLAh9hvcaNTGaYKYXoceVzLkgm6e5WMkLsCwuZXvB"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "good": true
+  }
+}
+

In the example below, the wrong message is used, avoiding the spend to be proved:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_spend_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","message":"wrong message","signature":"SpendProofV1aSh8Todhk54736iXgV6vJAFP7egxByuMWZeyNDaN2JY737S95X5zz5mNMQSuCNSLjjhi5HJCsndpNWSNVsuThxwv285qy1KkUrLFRkxMSCjfL6bbycYN33ScZ5UB4Fzseceo1ndpL393T1q638VmcU3a56dhNHF1RPZFiGPS61FA78nXFSqE9uoKCCoHkEz83M1dQVhxZV5CEPF2P6VioGTKgprLCH9vvj9k1ivd4SX19L2VSMc3zD1u3mkR24ioETvxBoLeBSpxMoikyZ6inhuPm8yYo9YWyFtQK4XYfAV9mJ9knz5fUPXR8vvh7KJCAg4dqeJXTVb4mbMzYtsSZXHd6ouWoyCd6qMALdW8pKhgMCHcVYMWp9X9WHZuCo9rsRjRpg15sJUw7oJg1JoGiVgj8P4JeGDjnZHnmLVa5bpJhVCbMhyM7JLXNQJzFWTGC27TQBbthxCfQaKdusYnvZnKPDJWSeceYEFzepUnsWhQtyhbb73FzqgWC4eKEFKAZJqT2LuuSoxmihJ9acnFK7Ze23KTVYgDyMKY61VXADxmSrBvwUtxCaW4nQtnbMxiPMNnDMzeixqsFMBtN72j5UqhiLRY99k6SE7Qf5f29haNSBNSXCFFHChPKNTwJrehkofBdKUhh2VGPqZDNoefWUwfudeu83t85bmjv8Q3LrQSkFgFjRT5tLo8TMawNXoZCrQpyZrEvnodMDDUUNf3NL7rxyv3gM1KrTWjYaWXFU2RAsFee2Q2MTwUW7hR25cJvSFuB1BX2bfkoCbiMk923tHZGU2g7rSKF1GDDkXAc1EvFFD4iGbh1Q5t6hPRhBV8PEncdcCWGq5uAL5D4Bjr6VXG8uNeCy5oYWNgbZ5JRSfm7QEhPv8Fy9AKMgmCxDGMF9dVEaU6tw2BAnJavQdfrxChbDBeQXzCbCfep6oei6n2LZdE5Q84wp7eoQFE5Cwuo23tHkbJCaw2njFi3WGBbA7uGZaGHJPyB2rofTWBiSUXZnP2hiE9bjJghAcDm1M4LVLfWvhZmFEnyeru3VWMETnetz1BYLUC5MJGFXuhnHwWh7F6r74FDyhdswYop4eWPbyrXMXmUQEccTGd2NaT8g2VHADZ76gMC6BjWESvcnz2D4n8XwdmM7ZQ1jFwhuXrBfrb1dwRasyXxxHMGAC2onatNiExyeQ9G1W5LwqNLAh9hvcaNTGaYKYXoceVzLkgm6e5WMkLsCwuZXvB"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "good": false
+  }
+}
+

check_tx_key

Check a transaction in the blockchain with its secret key.

Alias: None.

Inputs:

  • txid - string; transaction id.
  • tx_key - string; transaction secret key.
  • address - string; destination public address of the transaction.

Outputs:

  • confirmations - unsigned int; Number of block mined after the one with the transaction.
  • in_pool - boolean; States if the transaction is still in pool or has been added to a block.
  • received - unsigned int; Amount of the transaction.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_tx_key","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","tx_key":"feba662cf8fb6d0d0da18fc9b70ab28e01cc76311278fdd7fe7ab16360762b06","address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "confirmations": 0,
+    "in_pool": false,
+    "received": 1000000000000
+  }
+}
+

check_tx_proof

Prove a transaction by checking its signature.

Alias: None.

Inputs:

  • txid - string; transaction id.
  • address - string; destination public address of the transaction.
  • message - string; (Optional) Should be the same message used in get_tx_proof.
  • signature - string; transaction signature to confirm.

Outputs:

  • confirmations - unsigned int; Number of block mined after the one with the transaction.
  • good - boolean; States if the inputs proves the transaction.
  • in_pool - boolean; States if the transaction is still in pool or has been added to a block.
  • received - unsigned int; Amount of the transaction.

In the example below, the transaction has been proven:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_tx_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o","message":"this is my transaction","signature":"InProofV13vqBCT6dpSAXkypZmSEMPGVnNRFDX2vscUYeVS4WnSVnV5BwLs31T9q6Etfj9Wts6tAxSAS4gkMeSYzzLS7Gt4vvCSQRh9niGJMUDJsB5hTzb2XJiCkUzWkkcjLFBBRVD5QZ"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "confirmations": 482,
+    "good": true,
+    "in_pool": false,
+    "received": 1000000000000
+  }
+}
+

In the example below, the wrong message is used, avoiding the transaction to be proved:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"check_tx_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o","message":"wrong message","signature":"InProofV13vqBCT6dpSAXkypZmSEMPGVnNRFDX2vscUYeVS4WnSVnV5BwLs31T9q6Etfj9Wts6tAxSAS4gkMeSYzzLS7Gt4vvCSQRh9niGJMUDJsB5hTzb2XJiCkUzWkkcjLFBBRVD5QZ"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "confirmations": 0,
+    "good": false,
+    "in_pool": false,
+    "received": 0
+  }
+}
+

close_wallet

Close the currently opened wallet, after trying to save it.

Alias: None.

Inputs: None.

Outputs: None.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"close_wallet"}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+  }
+}
+

create_account

Create a new account with an optional label.

Alias: None.

Inputs:

  • label - string; (Optional) Label for the account.

Outputs:

  • account_index - unsigned int; Index of the new account.
  • address - string; Address for this account. Base58 representation of the public keys.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"create_account","params":{"label":"Secondary account"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "account_index": 1,
+    "address": "77Vx9cs1VPicFndSVgYUvTdLCJEZw9h81hXLMYsjBCXSJfUehLa9TDW3Ffh45SQa7xb6dUs18mpNxfUhQGqfwXPSMrvKhVp"
+  }
+}
+

create_address

Create a new address for an account. Optionally, label the new address.

Alias: None.

Inputs:

  • account_index - unsigned int; Create a new address for this account.
  • label - string; (Optional) Label for the new address.

Outputs:

  • address - string; Newly created address. Base58 representation of the public keys.
  • address_index - unsigned int; Index of the new address under the input account.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"create_address","params":{"account_index":0,"label":"new-sub"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "address": "7BG5jr9QS5sGMdpbBrZEwVLZjSKJGJBsXdZLt8wiXyhhLjy7x2LZxsrAnHTgD8oG46ZtLjUGic2pWc96GFkGNPQQDA3Dt7Q",
+    "address_index": 5
+  }
+}
+

create_wallet

Create a new wallet. You need to have set the argument "–wallet-dir" when launching monero-wallet-rpc to make this work.

Alias: None.

Inputs:

  • filename - string; Wallet file name.
  • password - string; (Optional) password to protect the wallet.
  • 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": {
+  }
+}
+

delete_address_book

Delete an entry from the address book.

Alias: None.

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":1}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+  }
+}
+

export_key_images

Export a signed set of key images.

Alias: None.

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": "cd35239b72a35e26a57ed17400c0b66944a55de9d5bda0f21190fed17f8ea876",
+      "signature": "c9d736869355da2538ab4af188279f84138c958edbae3c5caf388a63cd8e780b8c5a1aed850bd79657df659422c463608ea4e0c730ba9b662c906ae933816d00"
+    },{
+      "key_image": "65158a8ee5a3b32009b85a307d85b375175870e560e08de313531c7dbbe6fc19",
+      "signature": "c96e40d09dfc45cfc5ed0b76bfd7ca793469588bb0cf2b4d7b45ef23d40fd4036057b397828062e31700dc0c2da364f50cd142295a8405b9fe97418b4b745d0c"
+    },...]
+  }
+}
+

export_multisig_info

Export multisig info for other participants.

Alias: None.

Inputs: None.

Outputs:

  • info - string; Multisig info in hex format for other participants.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"export_multisig_info"}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "info": "4d6f6e65726f206d756c7469736967206578706f72740105cf6442b09b75f5eca9d846771fe1a879c9a97ab0553ffbcec64b1148eb7832b51e7898d7944c41cee000415c5a98f4f80dc0efdae379a98805bb6eacae743446f6f421cd03e129eb5b27d6e3b73eb6929201507c1ae706c1a9ecd26ac8601932415b0b6f49cbbfd712e47d01262c59980a8f9a8be776f2bf585f1477a6df63d6364614d941ecfdcb6e958a390eb9aa7c87f056673d73bc7c5f0ab1f74a682e902e48a3322c0413bb7f6fd67404f13fb8e313f70a0ce568c853206751a334ef490068d3c8ca0e"
+  }
+}
+

export_outputs

Export all outputs in hex format.

Alias: None.

Inputs: None.

Outputs:

  • outputs_data_hex - string; wallet outputs in hex format.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"export_outputs"}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "outputs_data_hex": "...outputs..."
+  }
+}
+

finalize_multisig

Turn this wallet into a multisig wallet, extra step for N-1/N wallets.

Alias: None.

Inputs:

  • multisig_info - array of string; List of multisig string from peers.
  • password - string; Wallet password

Outputs:

  • address - string; multisig wallet address.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"finalize_multisig","params":{"multisig_info":["MultisigxV1JNC6Ja2oBt5Sqea9LN2YEF7WYZCpHqr2EKvPG89Trf3X4E8RWkLaGRf29fJ3stU471MELKxwufNYeigP7LoE4tn2McPr4SbL9q15xNvZT5uwC9YRr7UwjXqSZHmTWN9PBuZEKVAQ4HPPyQciSCdNjgwsuFRBzrskMdMUwNMgKst1debYfm37i6PSzDoS2tk4kYTYj83kkAdR7kdshet1axQPd6HQ","MultisigxV1Unma7Ko4zdd8Ps3Af4oZwtj2JdWKzwNfP6s2G9ZvXhMoSscwn5g7PyCfcBc1V4ffRHY3Kxqq6VocSCUTncpVeUskMcPr4SbL9q15xNvZT5uwC9YRr7UwjXqSZHmTWN9PBuZE1LTpWxLoC3vPMSrqVVcjnmL9LYfdCZz3fECjNZbCEDq3PHDiUuY5jurQTcNoGhDTio5WM9xaAdim9YByiS5KyqF4"]}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "address": "5B9gZUTDuHTcGGuY3nL3t8K2tDnEHeRVHSBQgLZUTQxtFYVLnho5JJjWJyFp5YZgZRQ44RiviJi1sPHgLVMbckRsDqDx1gV"
+  }
+}
+

get_account_tags

Get a list of user-defined account tags.

Alias: None.

Inputs: None.

Outputs:

  • account_tags - array of account tag information:
    • tag - string; Filter tag.
    • label - string; Label for the tag.
    • accounts - array of int; List of tagged account indices.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_account_tags","params":""}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "account_tags": [{
+      "accounts": [0],
+      "label": "Test tag",
+      "tag": "myTag"
+    }]
+  }
+}
+

get_accounts

Get all accounts for a wallet. Optionally filter accounts by tag.

Alias: None.

Inputs:

  • tag - string; (Optional) Tag for filtering accounts.

Outputs:

  • subaddress_accounts - array of subaddress account information:
    • account_index - unsigned int; Index of the account.
    • balance - unsigned int; Balance of the account (locked or unlocked).
    • base_address - string; Base64 representation of the first subaddress in the account.
    • label - string; (Optional) Label of the account.
    • tag - string; (Optional) Tag for filtering accounts.
    • unlocked_balance - unsigned int; Unlocked balance for the account.
  • total_balance - unsigned int; Total balance of the selected accounts (locked or unlocked).
  • total_unlocked_balance - unsigned int; Total unlocked balance of the selected accounts.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_accounts","params":{"tag":"myTag"}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "subaddress_accounts": [{
+      "account_index": 0,
+      "balance": 157663195572433688,
+      "base_address": "55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt",
+      "label": "Primary account",
+      "tag": "myTag",
+      "unlocked_balance": 157443303037455077
+    },{
+      "account_index": 1,
+      "balance": 0,
+      "base_address": "77Vx9cs1VPicFndSVgYUvTdLCJEZw9h81hXLMYsjBCXSJfUehLa9TDW3Ffh45SQa7xb6dUs18mpNxfUhQGqfwXPSMrvKhVp",
+      "label": "Secondary account",
+      "tag": "myTag",
+      "unlocked_balance": 0
+    }],
+    "total_balance": 157663195572433688,
+    "total_unlocked_balance": 157443303037455077
+  }
+}
+

get_address

Return the wallet's addresses for an account. Optionally filter for specific set of subaddresses.

Alias: getaddress.

Inputs:

  • account_index - unsigned int; Return subaddresses for this account.
  • address_index - array of unsigned int; (Optional) List of subaddresses to return from an account.

Outputs:

  • address - string; The 95-character hex address string of the monero-wallet-rpc in session.
  • addresses array of addresses informations
    • address string; The 95-character hex (sub)address string.
    • label string; Label of the (sub)address
    • address_index unsigned int; index of the subaddress
    • used boolean; states if the (sub)address has already received funds

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_address","params":{"account_index":0,"address_index":[0,1,4]}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "address": "55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt",
+    "addresses": [{
+      "address": "55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt",
+      "address_index": 0,
+      "label": "Primary account",
+      "used": true
+    },{
+      "address": "7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o",
+      "address_index": 1,
+      "label": "",
+      "used": true
+    },{
+      "address": "77xa6Dha7kzCQuvmd8iB5VYoMkdenwCNRU9khGhExXQ8KLL3z1N1ZATBD1sFPenyHWT9cm4fVFnCAUApY53peuoZFtwZiw5",
+      "address_index": 4,
+      "label": "test2",
+      "used": true
+    }]
+  }
+}
+

get_address_book

Retrieves entries from the address book.

Alias: None.

Inputs:

  • entries - array of unsigned int; indices of the requested address book entries

Outputs:

  • entries - array of entries:
    • address - string; Public address of the entry
    • description - string; Description of this address entry
    • 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":[0,1]}}' -H 'Content-Type: application/json'
+{
+  "id": "0",
+  "jsonrpc": "2.0",
+  "result": {
+    "entries": [{
+      "address": "77Vx9cs1VPicFndSVgYUvTdLCJEZw9h81hXLMYsjBCXSJfUehLa9TDW3Ffh45SQa7xb6dUs18mpNxfUhQGqfwXPSMrvKhVp",
+      "description": "Second account",
+      "index": 0,
+      "payment_id": "0000000000000000000000000000000000000000000000000000000000000000"
+    },{
+      "address": "78P16M3XmFRGcWFCcsgt1WcTntA1jzcq31seQX1Eg92j8VQ99NPivmdKam4J5CKNAD7KuNWcq5xUPgoWczChzdba5WLwQ4j",
+      "description": "Third account",
+      "index": 1,
+      "payment_id": "0000000000000000000000000000000000000000000000000000000000000000"
+    }]
+  }
+}
+

get_address_index

Get account and address indexes from a specific (sub)address

Alias: None.

Inputs:

  • address - String; (sub)address to look for.

Outputs:

  • index - subaddress informations
    • major unsigned int; Account index.
    • minor unsigned int; Address index.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_address_index","params":{"address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -2691,20 +272,7 @@ curl \
     }
   }
 }
-
-

get_attribute

-

Get attribute value by name.

-

Alias: None.

-

Inputs:

-
    -
  • key - string; attribute name
  • -
-

Outputs:

-
    -
  • value - string; attribute value
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_attribute","params":{"key":"my_attribute"}}' -H 'Content-Type: application/json'
+

get_attribute

Get attribute value by name.

Alias: None.

Inputs:

  • key - string; attribute name

Outputs:

  • value - string; attribute value

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_attribute","params":{"key":"my_attribute"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -2712,34 +280,7 @@ curl \
     "value": "my_value"
   }
 }
-
-

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_paymentsbecause it has the same functionality but is more extendable. Either is fine for looking up transactions by a single payment ID.

-

Alias: None.

-

Inputs:

-
    -
  • payment_ids - array of: string; Payment IDs used to find the payments (16 characters hex).
  • -
  • min_block_height - unsigned int; The block height at which to start looking for payments.
  • -
-

Outputs:

-
    -
  • payments - list of:
      -
    • payment_id - string; Payment ID matching one of the input IDs.
    • -
    • tx_hash - string; Transaction hash used as the transaction ID.
    • -
    • amount - unsigned int; Amount for this payment.
    • -
    • block_height - unsigned int; Height of the block that first confirmed this payment.
    • -
    • unlock_time - unsigned int; Time (in block height) until this payment is safe to spend.
    • -
    • subaddr_index - subaddress index:
        -
      • major - unsigned int; Account index for the subaddress.
      • -
      • minor - unsigned int; Index of the subaddress in the account.
      • -
      -
    • -
    • address - string; Address receiving the payment; Base58 representation of the public keys.
    • -
    -
  • -
-

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":["60900e5603bf96e3"],"min_block_height":"120000"}}' -H 'Content-Type: application/json'
+

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_paymentsbecause it has the same functionality but is more extendable. Either is fine for looking up transactions by a single payment ID.

Alias: None.

Inputs:

  • payment_ids - array of: string; Payment IDs used to find the payments (16 characters hex).
  • min_block_height - unsigned int; The block height at which to start looking for payments.

Outputs:

  • payments - list of:
    • payment_id - string; Payment ID matching one of the input IDs.
    • tx_hash - string; Transaction hash used as the transaction ID.
    • amount - unsigned int; Amount for this payment.
    • block_height - unsigned int; Height of the block that first confirmed this payment.
    • unlock_time - unsigned int; Time (in block height) until this payment is safe to spend.
    • subaddr_index - subaddress index:
      • major - unsigned int; Account index for the subaddress.
      • minor - unsigned int; Index of the subaddress in the account.
    • address - string; Address receiving the payment; Base58 representation of the public keys.

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":["60900e5603bf96e3"],"min_block_height":"120000"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -2758,17 +299,7 @@ curl \
     }]
   }
 }
-
-

get_height

-

Returns the wallet's current block height.

-

Alias: getheight.

-

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":"get_height"}' -H 'Content-Type: application/json'
+

get_height

Returns the wallet's current block height.

Alias: getheight.

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":"get_height"}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -2776,17 +307,7 @@ curl \
     "height": 145545
   }
 }
-
-

get_languages

-

Get a list of available languages for your wallet's seed.

-

Alias: None.

-

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'
+

get_languages

Get a list of available languages for your wallet's seed.

Alias: None.

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",
@@ -2794,33 +315,7 @@ curl \
     "languages": ["Deutsch","English","Español","Français","Italiano","Nederlands","Português","русский язык","日本語","简体中文 (中国)","Esperanto","Lojban"]
   }
 }
-
-

get_payments

-

Get a list of incoming payments using a given payment id.

-

Alias: None.

-

Inputs:

-
    -
  • payment_id - string; Payment ID used to find the payments (16 characters hex).
  • -
-

Outputs:

-
    -
  • payments - list of:
      -
    • payment_id - string; Payment ID matching the input parameter.
    • -
    • tx_hash - string; Transaction hash used as the transaction ID.
    • -
    • amount - unsigned int; Amount for this payment.
    • -
    • block_height - unsigned int; Height of the block that first confirmed this payment.
    • -
    • unlock_time - unsigned int; Time (in block height) until this payment is safe to spend.
    • -
    • subaddr_index - subaddress index:
        -
      • major - unsigned int; Account index for the subaddress.
      • -
      • minor - unsigned int; Index of the subaddress in the account.
      • -
      -
    • -
    • address - string; Address receiving the payment; Base58 representation of the public keys.
    • -
    -
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_payments","params":{"payment_id":"60900e5603bf96e3"}}' -H 'Content-Type: application/json'
+

get_payments

Get a list of incoming payments using a given payment id.

Alias: None.

Inputs:

  • payment_id - string; Payment ID used to find the payments (16 characters hex).

Outputs:

  • payments - list of:
    • payment_id - string; Payment ID matching the input parameter.
    • tx_hash - string; Transaction hash used as the transaction ID.
    • amount - unsigned int; Amount for this payment.
    • block_height - unsigned int; Height of the block that first confirmed this payment.
    • unlock_time - unsigned int; Time (in block height) until this payment is safe to spend.
    • subaddr_index - subaddress index:
      • major - unsigned int; Account index for the subaddress.
      • minor - unsigned int; Index of the subaddress in the account.
    • address - string; Address receiving the payment; Base58 representation of the public keys.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_payments","params":{"payment_id":"60900e5603bf96e3"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -2839,23 +334,7 @@ curl \
     }]
   }
 }
-
-

get_reserve_proof

-

Generate a signature to prove of an available amount in a wallet.

-

Alias: None.

-

Inputs:

-
    -
  • all - boolean; Proves all wallet balance to be disposable.
  • -
  • account_index - unsigned int; Specify the account from witch to prove reserve. (ignored if all is set to true)
  • -
  • amount - unsigned int; Amount (in atomic units) to prove the account has for reserve. (ignored if all is set to true)
  • -
  • message - string; (Optional) add a message to the signature to further authenticate the prooving process.
  • -
-

Outputs:

-
    -
  • signature - string; reserve signature.
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_reserve_proof","params":{"all":false,"account_index":0,"amount":100000000000}}' -H 'Content-Type: application/json'
+

get_reserve_proof

Generate a signature to prove of an available amount in a wallet.

Alias: None.

Inputs:

  • all - boolean; Proves all wallet balance to be disposable.
  • account_index - unsigned int; Specify the account from witch to prove reserve. (ignored if all is set to true)
  • amount - unsigned int; Amount (in atomic units) to prove the account has for reserve. (ignored if all is set to true)
  • message - string; (Optional) add a message to the signature to further authenticate the prooving process.

Outputs:

  • signature - string; reserve signature.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_reserve_proof","params":{"all":false,"account_index":0,"amount":100000000000}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -2863,21 +342,7 @@ curl \
     "signature": "ReserveProofV11BZ23sBt9sZJeGccf84mzyAmNCP3KzYbE1111112VKmH111118NfCYJQjZ6c46gT2kXgcHCaSSZeL8sRdzqjqx7i1e7FQfQGu2o113UYFVdwzHQi3iENDPa76Kn1BvywbKz3bMkXdZkBEEhBSF4kjjGaiMJ1ucKb6wvMVC4A8sA4nZEdL2Mk3wBucJCYTZwKqA8i1M113kqakDkG25FrjiDqdQTCYz2wDBmfKxF3eQiV5FWzZ6HmAyxnqTWUiMWukP9A3Edy3ZXqjP1b23dhz7Mbj39bBxe3ZeDNu9HnTSqYvHNRyqCkeUMJpHyQweqjGUJ1DSfFYr33J1E7MkhMnEi1o7trqWjVix32XLetYfePG73yvHbS24837L7Q64i5n1LSpd9yMiQZ3Dyaysi5y6jPx7TpAvnSqBFtuCciKoNzaXoA3dqt9cuVFZTXzdXKqdt3cXcVJMNxY8RvKPVQHhUur94Lpo1nSpxf7BN5a5rHrbZFqoZszsZmiWikYPkLX72XUdw6NWjLrTBxSy7KuPYH86c6udPEXLo2xgN6XHMBMBJzt8FqqK7EcpNUBkuHm2AtpGkf9CABY3oSjDQoRF5n4vNLd3qUaxNsG4XJ12L9gJ7GrK273BxkfEA8fDdxPrb1gpespbgEnCTuZHqj1A"
   }
 }
-
-

get_spend_proof

-

Generate a signature to prove a spend. Unlike proving a transaction, it does not requires the destination public address.

-

Alias: None.

-

Inputs:

-
    -
  • txid - string; transaction id.
  • -
  • message - string; (Optional) add a message to the signature to further authenticate the prooving process.
  • -
-

Outputs:

-
    -
  • signature - string; spend signature.
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_spend_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","message":"this is my transaction"}}' -H 'Content-Type: application/json'
+

get_spend_proof

Generate a signature to prove a spend. Unlike proving a transaction, it does not requires the destination public address.

Alias: None.

Inputs:

  • txid - string; transaction id.
  • message - string; (Optional) add a message to the signature to further authenticate the prooving process.

Outputs:

  • signature - string; spend signature.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_spend_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","message":"this is my transaction"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -2885,46 +350,7 @@ curl \
     "signature": "SpendProofV1aSh8Todhk54736iXgV6vJAFP7egxByuMWZeyNDaN2JY737S95X5zz5mNMQSuCNSLjjhi5HJCsndpNWSNVsuThxwv285qy1KkUrLFRkxMSCjfL6bbycYN33ScZ5UB4Fzseceo1ndpL393T1q638VmcU3a56dhNHF1RPZFiGPS61FA78nXFSqE9uoKCCoHkEz83M1dQVhxZV5CEPF2P6VioGTKgprLCH9vvj9k1ivd4SX19L2VSMc3zD1u3mkR24ioETvxBoLeBSpxMoikyZ6inhuPm8yYo9YWyFtQK4XYfAV9mJ9knz5fUPXR8vvh7KJCAg4dqeJXTVb4mbMzYtsSZXHd6ouWoyCd6qMALdW8pKhgMCHcVYMWp9X9WHZuCo9rsRjRpg15sJUw7oJg1JoGiVgj8P4JeGDjnZHnmLVa5bpJhVCbMhyM7JLXNQJzFWTGC27TQBbthxCfQaKdusYnvZnKPDJWSeceYEFzepUnsWhQtyhbb73FzqgWC4eKEFKAZJqT2LuuSoxmihJ9acnFK7Ze23KTVYgDyMKY61VXADxmSrBvwUtxCaW4nQtnbMxiPMNnDMzeixqsFMBtN72j5UqhiLRY99k6SE7Qf5f29haNSBNSXCFFHChPKNTwJrehkofBdKUhh2VGPqZDNoefWUwfudeu83t85bmjv8Q3LrQSkFgFjRT5tLo8TMawNXoZCrQpyZrEvnodMDDUUNf3NL7rxyv3gM1KrTWjYaWXFU2RAsFee2Q2MTwUW7hR25cJvSFuB1BX2bfkoCbiMk923tHZGU2g7rSKF1GDDkXAc1EvFFD4iGbh1Q5t6hPRhBV8PEncdcCWGq5uAL5D4Bjr6VXG8uNeCy5oYWNgbZ5JRSfm7QEhPv8Fy9AKMgmCxDGMF9dVEaU6tw2BAnJavQdfrxChbDBeQXzCbCfep6oei6n2LZdE5Q84wp7eoQFE5Cwuo23tHkbJCaw2njFi3WGBbA7uGZaGHJPyB2rofTWBiSUXZnP2hiE9bjJghAcDm1M4LVLfWvhZmFEnyeru3VWMETnetz1BYLUC5MJGFXuhnHwWh7F6r74FDyhdswYop4eWPbyrXMXmUQEccTGd2NaT8g2VHADZ76gMC6BjWESvcnz2D4n8XwdmM7ZQ1jFwhuXrBfrb1dwRasyXxxHMGAC2onatNiExyeQ9G1W5LwqNLAh9hvcaNTGaYKYXoceVzLkgm6e5WMkLsCwuZXvB"
   }
 }
-
-

get_transfer_by_txid

-

Show information about a transfer to/from this address.

-

Alias: None.

-

Inputs:

-
    -
  • txid - string; Transaction ID used to find the transfer.
  • -
  • account_index - unsigned int; (Optional) Index of the account to query for the transfer.
  • -
-

Outputs:

-
    -
  • transfer - JSON object containing payment information:
      -
    • address - string; Address that transferred the funds. Base58 representation of the public keys.
    • -
    • amount - unsigned int; Amount of this transfer.
    • -
    • confirmations - unsigned int; Number of block mined since the block containing this transaction (or block height at which the transaction should be added to a block if not yet confirmed).
    • -
    • destinations - array of JSON objects containing transfer destinations:
        -
      • amount - unsigned int; Amount transferred to this destination.
      • -
      • address - string; Address for this destination. Base58 representation of the public keys.
      • -
      -
    • -
    • double_spend_seen - boolean; True if the key image(s) for the transfer have been seen before.
    • -
    • fee - unsigned int; Transaction fee for this transfer.
    • -
    • height - unsigned int; Height of the first block that confirmed this transfer.
    • -
    • note - string; Note about this transfer.
    • -
    • payment_id - string; Payment ID for this transfer.
    • -
    • subaddr_index - JSON object containing the major & minor subaddress index:
        -
      • major - unsigned int; Account index for the subaddress.
      • -
      • minor - unsigned int; Index of the subaddress under the account.
      • -
      -
    • -
    • suggested_confirmations_threshold - unsigned int; Estimation of the confirmations needed for the transaction to be included in a block.
    • -
    • timestamp - unsigned int; POSIX timestamp for the block that confirmed this transfer (or timestamp submission if not mined yet).
    • -
    • txid - string; Transaction ID of this transfer (same as input TXID).
    • -
    • type - string; Type of transfer, one of the following: "in", "out", "pending", "failed", "pool"
    • -
    • unlock_time - unsigned int; Number of blocks until transfer is safely spendable.
    • -
    -
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_transfer_by_txid","params":{"txid":"c36258a276018c3a4bc1f195a7fb530f50cd63a4fa765fb7c6f7f49fc051762a"}}' -H 'Content-Type: application/json'
+

get_transfer_by_txid

Show information about a transfer to/from this address.

Alias: None.

Inputs:

  • txid - string; Transaction ID used to find the transfer.
  • account_index - unsigned int; (Optional) Index of the account to query for the transfer.

Outputs:

  • transfer - JSON object containing payment information:
    • address - string; Address that transferred the funds. Base58 representation of the public keys.
    • amount - unsigned int; Amount of this transfer.
    • confirmations - unsigned int; Number of block mined since the block containing this transaction (or block height at which the transaction should be added to a block if not yet confirmed).
    • destinations - array of JSON objects containing transfer destinations:
      • amount - unsigned int; Amount transferred to this destination.
      • address - string; Address for this destination. Base58 representation of the public keys.
    • double_spend_seen - boolean; True if the key image(s) for the transfer have been seen before.
    • fee - unsigned int; Transaction fee for this transfer.
    • height - unsigned int; Height of the first block that confirmed this transfer.
    • note - string; Note about this transfer.
    • payment_id - string; Payment ID for this transfer.
    • subaddr_index - JSON object containing the major & minor subaddress index:
      • major - unsigned int; Account index for the subaddress.
      • minor - unsigned int; Index of the subaddress under the account.
    • suggested_confirmations_threshold - unsigned int; Estimation of the confirmations needed for the transaction to be included in a block.
    • timestamp - unsigned int; POSIX timestamp for the block that confirmed this transfer (or timestamp submission if not mined yet).
    • txid - string; Transaction ID of this transfer (same as input TXID).
    • type - string; Type of transfer, one of the following: "in", "out", "pending", "failed", "pool"
    • unlock_time - unsigned int; Number of blocks until transfer is safely spendable.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_transfer_by_txid","params":{"txid":"c36258a276018c3a4bc1f195a7fb530f50cd63a4fa765fb7c6f7f49fc051762a"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -2957,53 +383,7 @@ curl \
     }
   }
 }
-
-

get_transfers

-

Returns a list of transfers.

-

Alias: None.

-

Inputs:

-
    -
  • in - boolean; (Optional) Include incoming transfers.
  • -
  • out - boolean; (Optional) Include outgoing transfers.
  • -
  • pending - boolean; (Optional) Include pending transfers.
  • -
  • failed - boolean; (Optional) Include failed transfers.
  • -
  • pool - boolean; (Optional) Include transfers from the daemon's transaction pool.
  • -
  • filter_by_height - boolean; (Optional) Filter transfers by block height.
  • -
  • min_height - unsigned int; (Optional) Minimum block height to scan for transfers, if filtering by height is enabled.
  • -
  • max_height - unsigned int; (Opional) Maximum block height to scan for transfers, if filtering by height is enabled (defaults to max block height).
  • -
  • account_index - unsigned int; (Optional) Index of the account to query for transfers. (defaults to 0)
  • -
  • subaddr_indices - array of unsigned int; (Optional) List of subaddress indices to query for transfers. (defaults to 0)
  • -
-

Outputs:

-
    -
  • in array of transfers:
      -
    • address - string; Public address of the transfer.
    • -
    • amount - unsigned int; Amount transferred.
    • -
    • confirmations - unsigned int; Number of block mined since the block containing this transaction (or block height at which the transaction should be added to a block if not yet confirmed).
    • -
    • double_spend_seen - boolean; True if the key image(s) for the transfer have been seen before.
    • -
    • fee - unsigned int; Transaction fee for this transfer.
    • -
    • height - unsigned int; Height of the first block that confirmed this transfer (0 if not mined yet).
    • -
    • note - string; Note about this transfer.
    • -
    • payment_id - string; Payment ID for this transfer.
    • -
    • subaddr_index - JSON object containing the major & minor subaddress index:
        -
      • major - unsigned int; Account index for the subaddress.
      • -
      • minor - unsigned int; Index of the subaddress under the account.
      • -
      -
    • -
    • suggested_confirmations_threshold - unsigned int; Estimation of the confirmations needed for the transaction to be included in a block.
    • -
    • timestamp - unsigned int; POSIX timestamp for when this transfer was first confirmed in a block (or timestamp submission if not mined yet).
    • -
    • txid - string; Transaction ID for this transfer.
    • -
    • type - string; Transfer type: "in"
    • -
    • unlock_time - unsigned int; Number of blocks until transfer is safely spendable.
    • -
    -
  • -
  • out array of transfers (see above).
  • -
  • pending array of transfers (see above).
  • -
  • failed array of transfers (see above).
  • -
  • pool array of transfers (see above).
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_transfers","params":{"in":true,"account_index":1}}' -H 'Content-Type: application/json'
+

get_transfers

Returns a list of transfers.

Alias: None.

Inputs:

  • in - boolean; (Optional) Include incoming transfers.
  • out - boolean; (Optional) Include outgoing transfers.
  • pending - boolean; (Optional) Include pending transfers.
  • failed - boolean; (Optional) Include failed transfers.
  • pool - boolean; (Optional) Include transfers from the daemon's transaction pool.
  • filter_by_height - boolean; (Optional) Filter transfers by block height.
  • min_height - unsigned int; (Optional) Minimum block height to scan for transfers, if filtering by height is enabled.
  • max_height - unsigned int; (Opional) Maximum block height to scan for transfers, if filtering by height is enabled (defaults to max block height).
  • account_index - unsigned int; (Optional) Index of the account to query for transfers. (defaults to 0)
  • subaddr_indices - array of unsigned int; (Optional) List of subaddress indices to query for transfers. (defaults to 0)

Outputs:

  • in array of transfers:
    • address - string; Public address of the transfer.
    • amount - unsigned int; Amount transferred.
    • confirmations - unsigned int; Number of block mined since the block containing this transaction (or block height at which the transaction should be added to a block if not yet confirmed).
    • double_spend_seen - boolean; True if the key image(s) for the transfer have been seen before.
    • fee - unsigned int; Transaction fee for this transfer.
    • height - unsigned int; Height of the first block that confirmed this transfer (0 if not mined yet).
    • note - string; Note about this transfer.
    • payment_id - string; Payment ID for this transfer.
    • subaddr_index - JSON object containing the major & minor subaddress index:
      • major - unsigned int; Account index for the subaddress.
      • minor - unsigned int; Index of the subaddress under the account.
    • suggested_confirmations_threshold - unsigned int; Estimation of the confirmations needed for the transaction to be included in a block.
    • timestamp - unsigned int; POSIX timestamp for when this transfer was first confirmed in a block (or timestamp submission if not mined yet).
    • txid - string; Transaction ID for this transfer.
    • type - string; Transfer type: "in"
    • unlock_time - unsigned int; Number of blocks until transfer is safely spendable.
  • out array of transfers (see above).
  • pending array of transfers (see above).
  • failed array of transfers (see above).
  • pool array of transfers (see above).

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_transfers","params":{"in":true,"account_index":1}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3029,20 +409,7 @@ curl \
     }]
   }
 }
-
-

get_tx_key

-

Get transaction secret key from transaction id.

-

Alias: None.

-

Inputs:

-
    -
  • txid - string; transaction id.
  • -
-

Outputs:

-
    -
  • tx_key - string; transaction secret key.
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_tx_key","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be"}}' -H 'Content-Type: application/json'
+

get_tx_key

Get transaction secret key from transaction id.

Alias: None.

Inputs:

  • txid - string; transaction id.

Outputs:

  • tx_key - string; transaction secret key.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_tx_key","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3050,20 +417,7 @@ curl \
     "tx_key": "feba662cf8fb6d0d0da18fc9b70ab28e01cc76311278fdd7fe7ab16360762b06"
   }
 }
-
-

get_tx_notes

-

Get string notes for transactions.

-

Alias: None.

-

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":["3292e83ad28fc1cc7bc26dbd38862308f4588680fbf93eae3e803cddd1bd614f"]}}' -H 'Content-Type: application/json'
+

get_tx_notes

Get string notes for transactions.

Alias: None.

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":["3292e83ad28fc1cc7bc26dbd38862308f4588680fbf93eae3e803cddd1bd614f"]}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3071,22 +425,7 @@ curl \
     "notes": ["This is an example"]
   }
 }
-
-

get_tx_proof

-

Get transaction signature to prove it.

-

Alias: None.

-

Inputs:

-
    -
  • txid - string; transaction id.
  • -
  • address - string; destination public address of the transaction.
  • -
  • message - string; (Optional) add a message to the signature to further authenticate the prooving process.
  • -
-

Outputs:

-
    -
  • signature - string; transaction signature.
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_tx_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o","message":"this is my transaction"}}' -H 'Content-Type: application/json'
+

get_tx_proof

Get transaction signature to prove it.

Alias: None.

Inputs:

  • txid - string; transaction id.
  • address - string; destination public address of the transaction.
  • message - string; (Optional) add a message to the signature to further authenticate the prooving process.

Outputs:

  • signature - string; transaction signature.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_tx_proof","params":{"txid":"19d5089f9469db3d90aca9024dfcb17ce94b948300101c8345a5e9f7257353be","address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o","message":"this is my transaction"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3094,17 +433,7 @@ curl \
     "signature": "InProofV13vqBCT6dpSAXkypZmSEMPGVnNRFDX2vscUYeVS4WnSVnV5BwLs31T9q6Etfj9Wts6tAxSAS4gkMeSYzzLS7Gt4vvCSQRh9niGJMUDJsB5hTzb2XJiCkUzWkkcjLFBBRVD5QZ"
   }
 }
-
-

get_version

-

Get RPC version Major & Minor integer-format, where Major is the first 16 bits and Minor the last 16 bits.

-

Alias: None.

-

Inputs: None.

-

Outputs:

-
    -
  • version - unsigned int; RPC version, formatted with Major * 2^16 + Minor(Major encoded over the first 16 bits, and Minor over the last 16 bits).
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_version"}' -H 'Content-Type: application/json'
+

get_version

Get RPC version Major & Minor integer-format, where Major is the first 16 bits and Minor the last 16 bits.

Alias: None.

Inputs: None.

Outputs:

  • version - unsigned int; RPC version, formatted with Major * 2^16 + Minor(Major encoded over the first 16 bits, and Minor over the last 16 bits).

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_version"}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3112,26 +441,7 @@ curl \
     "version": 65539
   }
 }
-
-

import_key_images

-

Import signed key images list and verify their spent status.

-

Alias: None.

-

Inputs:

-
    -
  • signed_key_images - array of signed key images:
      -
    • key_image - string;
    • -
    • signature - string;
    • -
    -
  • -
-

Outputs:

-
    -
  • height - unsigned int;
  • -
  • spent - unsigned int; Amount (in atomic units) spent from those key images.
  • -
  • unspent - unsigned int; Amount (in atomic units) still available from those key images.
  • -
-

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":"cd35239b72a35e26a57ed17400c0b66944a55de9d5bda0f21190fed17f8ea876","signature":"c9d736869355da2538ab4af188279f84138c958edbae3c5caf388a63cd8e780b8c5a1aed850bd79657df659422c463608ea4e0c730ba9b662c906ae933816d00"},{"key_image":"65158a8ee5a3b32009b85a307d85b375175870e560e08de313531c7dbbe6fc19","signature":"c96e40d09dfc45cfc5ed0b76bfd7ca793469588bb0cf2b4d7b45ef23d40fd4036057b397828062e31700dc0c2da364f50cd142295a8405b9fe97418b4b745d0c"}]}}' -H 'Content-Type: application/json'
+

import_key_images

Import signed key images list and verify their spent status.

Alias: None.

Inputs:

  • signed_key_images - array of signed key images:
    • key_image - string;
    • signature - string;

Outputs:

  • height - unsigned int;
  • spent - unsigned int; Amount (in atomic units) spent from those key images.
  • unspent - unsigned int; Amount (in atomic units) still available from those key images.

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":"cd35239b72a35e26a57ed17400c0b66944a55de9d5bda0f21190fed17f8ea876","signature":"c9d736869355da2538ab4af188279f84138c958edbae3c5caf388a63cd8e780b8c5a1aed850bd79657df659422c463608ea4e0c730ba9b662c906ae933816d00"},{"key_image":"65158a8ee5a3b32009b85a307d85b375175870e560e08de313531c7dbbe6fc19","signature":"c96e40d09dfc45cfc5ed0b76bfd7ca793469588bb0cf2b4d7b45ef23d40fd4036057b397828062e31700dc0c2da364f50cd142295a8405b9fe97418b4b745d0c"}]}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3141,20 +451,7 @@ curl \
     "unspent": 0
   }
 }
-
-

import_multisig_info

-

Import multisig info from other participants.

-

Alias: None.

-

Inputs:

-
    -
  • info - array of string; List of multisig info in hex format from other participants.
  • -
-

Outputs:

-
    -
  • n_outputs - unsigned int; Number of outputs signed with those multisig info.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"import_multisig_info","params":{"info":["...multisig_info..."]}}' -H 'Content-Type: application/json'
+

import_multisig_info

Import multisig info from other participants.

Alias: None.

Inputs:

  • info - array of string; List of multisig info in hex format from other participants.

Outputs:

  • n_outputs - unsigned int; Number of outputs signed with those multisig info.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"import_multisig_info","params":{"info":["...multisig_info..."]}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3162,20 +459,7 @@ curl \
     "n_outputs": 35
   }
 }
-
-

import_outputs

-

Import outputs in hex format.

-

Alias: None.

-

Inputs:

-
    -
  • outputs_data_hex - string; wallet outputs in hex format.
  • -
-

Outputs:

-
    -
  • num_imported - unsigned int; number of outputs imported.
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"import_outputs","params":{"outputs_data_hex":"...outputs..."}}' -H 'Content-Type: application/json'
+

import_outputs

Import outputs in hex format.

Alias: None.

Inputs:

  • outputs_data_hex - string; wallet outputs in hex format.

Outputs:

  • num_imported - unsigned int; number of outputs imported.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"import_outputs","params":{"outputs_data_hex":"...outputs..."}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3183,31 +467,7 @@ curl \
     "num_imported": 6400
   }
 }
-
-

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.
  • -
  • account_index - unsigned int; (Optional) Return transfers for this account. (defaults to 0)
  • -
  • subaddr_indices - array of unsigned int; (Optional) Return transfers sent to these subaddresses.
  • -
  • verbose - boolean; (Optional) Enable verbose output, return key image if true.
  • -
-

Outputs:

-
    -
  • transfers - list of:
      -
    • amount - unsigned int; Amount of this transfer.
    • -
    • global_index - unsigned int; Mostly internal use, can be ignored by most users.
    • -
    • key_image - string; Key image for the incoming transfer's unspent output (empty unless verbose is true).
    • -
    • spent - boolean; Indicates if this transfer has been spent.
    • -
    • subaddr_index - unsigned int; Subaddress index for incoming transfer.
    • -
    • tx_hash - string; Several incoming transfers may share the same hash if they were in the same transaction.
    • -
    • tx_size - unsigned int; Size of transaction in bytes.
    • -
    -
  • -
-

Example, get all transfers:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"all","account_index":0,"subaddr_indices":[3],"verbose":true}}' -H 'Content-Type: application/json'
+

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.
  • account_index - unsigned int; (Optional) Return transfers for this account. (defaults to 0)
  • subaddr_indices - array of unsigned int; (Optional) Return transfers sent to these subaddresses.
  • verbose - boolean; (Optional) Enable verbose output, return key image if true.

Outputs:

  • transfers - list of:
    • amount - unsigned int; Amount of this transfer.
    • global_index - unsigned int; Mostly internal use, can be ignored by most users.
    • key_image - string; Key image for the incoming transfer's unspent output (empty unless verbose is true).
    • spent - boolean; Indicates if this transfer has been spent.
    • subaddr_index - unsigned int; Subaddress index for incoming transfer.
    • tx_hash - string; Several incoming transfers may share the same hash if they were in the same transaction.
    • tx_size - unsigned int; Size of transaction in bytes.

Example, get all transfers:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"all","account_index":0,"subaddr_indices":[3],"verbose":true}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3239,9 +499,7 @@ curl \
     }]
   }
 }
-
-

Example, get available transfers:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"available","account_index":0,"subaddr_indices":[3],"verbose":true}}' -H 'Content-Type: application/json'
+

Example, get available transfers:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"available","account_index":0,"subaddr_indices":[3],"verbose":true}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3265,9 +523,7 @@ curl \
     }]
   }
 }
-
-

Example, get unavailable transfers:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"unavailable","account_index":0,"subaddr_indices":[3],"verbose":true}}' -H 'Content-Type: application/json'
+

Example, get unavailable transfers:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"unavailable","account_index":0,"subaddr_indices":[3],"verbose":true}}' -H 'Content-Type: application/json'
 {
 "id": "0",
 "jsonrpc": "2.0",
@@ -3283,20 +539,7 @@ curl \
   }]
 }
 }
-
-

is_multisig

-

Check if a wallet is a multisig one.

-

Alias: None.

-

Inputs: None.

-

Outputs:

-
    -
  • multisig - boolean; States if the wallet is multisig
  • -
  • ready - boolean;
  • -
  • threshold - unsigned int; Amount of signature needed to sign a transfer.
  • -
  • total - unsigned int; Total amount of signature in the multisig wallet.
  • -
-

Example for a non-multisig wallet:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"is_multisig"}' -H 'Content-Type: application/json'
+

is_multisig

Check if a wallet is a multisig one.

Alias: None.

Inputs: None.

Outputs:

  • multisig - boolean; States if the wallet is multisig
  • ready - boolean;
  • threshold - unsigned int; Amount of signature needed to sign a transfer.
  • total - unsigned int; Total amount of signature in the multisig wallet.

Example for a non-multisig wallet:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"is_multisig"}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3307,9 +550,7 @@ curl \
     "total": 0
   }
 }
-
-

Example for a multisig wallet:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"is_multisig"}' -H 'Content-Type: application/json'                  {
+

Example for a multisig wallet:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"is_multisig"}' -H 'Content-Type: application/json'                  {
   "id": "0",
   "jsonrpc": "2.0",
   "result": {
@@ -3319,18 +560,7 @@ curl \
     "total": 2
   }
 }
-
-

label_account

-

Label an account.

-

Alias: None.

-

Inputs:

-
    -
  • account_index - unsigned int; Apply label to account at this index.
  • -
  • label - string; Label for the account.
  • -
-

Outputs: None.

-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"label_account","params":{"account_index":0,"label":"Primary account"}}' -H 'Content-Type: application/json'
+

label_account

Label an account.

Alias: None.

Inputs:

  • account_index - unsigned int; Apply label to account at this index.
  • label - string; Label for the account.

Outputs: None.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"label_account","params":{"account_index":0,"label":"Primary account"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3342,44 +572,14 @@ curl \
     }]
   }
 }
-
-

label_address

-

Label an address.

-

Alias: None.

-

Inputs:

-
    -
  • index - subaddress index; JSON Object containing the major & minor address index:
      -
    • major - unsigned int; Account index for the subaddress.
    • -
    • minor - unsigned int; Index of the subaddress in the account.
    • -
    -
  • -
  • label - string; Label for the address.
  • -
-

Outputs: None.

-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"label_address","params":{"index":{"major":0,"minor":5},"label":"myLabel"}}' -H 'Content-Type: application/json'
+

label_address

Label an address.

Alias: None.

Inputs:

  • index - subaddress index; JSON Object containing the major & minor address index:
    • major - unsigned int; Account index for the subaddress.
    • minor - unsigned int; Index of the subaddress in the account.
  • label - string; Label for the address.

Outputs: None.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"label_address","params":{"index":{"major":0,"minor":5},"label":"myLabel"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
   "result": {
   }
 }
-
-

make_integrated_address

-

Make an integrated address from the wallet address and a payment id.

-

Alias: None.

-

Inputs:

-
    -
  • standard_address - string; (Optional, defaults to primary address) Destination public address.
  • -
  • payment_id - string; (Optional, defaults to a random ID) 16 characters hex encoded.
  • -
-

Outputs:

-
    -
  • integrated_address - string
  • -
  • payment_id - string; hex encoded;
  • -
-

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":{"standard_address":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt"}}' -H 'Content-Type: application/json'
+

make_integrated_address

Make an integrated address from the wallet address and a payment id.

Alias: None.

Inputs:

  • standard_address - string; (Optional, defaults to primary address) Destination public address.
  • payment_id - string; (Optional, defaults to a random ID) 16 characters hex encoded.

Outputs:

  • integrated_address - string
  • payment_id - string; hex encoded;

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":{"standard_address":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3388,23 +588,7 @@ curl \
     "payment_id": "420fa29b2d9a49f5"
   }
 }
-
-

make_multisig

-

Make a wallet multisig by importing peers multisig string.

-

Alias: None.

-

Inputs:

-
    -
  • multisig_info - array of string; List of multisig string from peers.
  • -
  • threshold - unsigned int; Amount of signatures needed to sign a transfer. Must be less or equal than the amount of signature in multisig_info.
  • -
  • password - string; Wallet password
  • -
-

Outputs:

-
    -
  • address - string; multisig wallet address.
  • -
  • multisig_info - string; Multisig string to share with peers to create the multisig wallet (extra step for N-1/N wallets).
  • -
-

Example for 2/2 Multisig Wallet:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"make_multisig","params":{"multisig_info":["MultisigV1K4tGGe8QirZdHgTYoBZMumSug97fdDyM3Z63M3ZY5VXvAdoZvx16HJzPCP4Rp2ABMKUqLD2a74ugMdBfrVpKt4BwD8qCL5aZLrsYWoHiA7JJwDESuhsC3eF8QC9UMvxLXEMsMVh16o98GnKRYz1HCKXrAEWfcrCHyz3bLW1Pdggyowop"],"threshold":2}}' -H 'Content-Type: application/json'
+

make_multisig

Make a wallet multisig by importing peers multisig string.

Alias: None.

Inputs:

  • multisig_info - array of string; List of multisig string from peers.
  • threshold - unsigned int; Amount of signatures needed to sign a transfer. Must be less or equal than the amount of signature in multisig_info.
  • password - string; Wallet password

Outputs:

  • address - string; multisig wallet address.
  • multisig_info - string; Multisig string to share with peers to create the multisig wallet (extra step for N-1/N wallets).

Example for 2/2 Multisig Wallet:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"make_multisig","params":{"multisig_info":["MultisigV1K4tGGe8QirZdHgTYoBZMumSug97fdDyM3Z63M3ZY5VXvAdoZvx16HJzPCP4Rp2ABMKUqLD2a74ugMdBfrVpKt4BwD8qCL5aZLrsYWoHiA7JJwDESuhsC3eF8QC9UMvxLXEMsMVh16o98GnKRYz1HCKXrAEWfcrCHyz3bLW1Pdggyowop"],"threshold":2}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3413,9 +597,7 @@ curl \
     "multisig_info": ""
   }
 }
-
-

Example for 2/3 Multisig Wallet:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"make_multisig","params":{"multisig_info":["MultisigV1MTVm4DZAdJw1PyVutpSy8Q4WisZBCFRAaZY7hhQnMwr5AZ4swzThyaSiVVQM5FHj1JQi3zPKhQ4k81BZkPSEaFjwRJtbfqfJcVvCqRnmBVcWVxhnihX5s8fZWBCjKrzT3CS95spG4dzNzJSUcjheAkLzCpVmSzGtgwMhAS3Vuz9Pas24","MultisigV1TEx58ycKCd6ADCfxF8hALpcdSRAkhZTi1bu4Rs6FdRC98EdB1LY7TAkMxasM55khFgcxrSXivaSr5FCMyJGHmojm1eE4HpGWPeZKv6cgCTThRzC4u6bkkSoFQdbzWN92yn1XEjuP2XQrGHk81mG2LMeyB51MWKJAVF99Pg9mX2BpmYFj"],"threshold":2}}' -H 'Content-Type: application/json'
+

Example for 2/3 Multisig Wallet:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"make_multisig","params":{"multisig_info":["MultisigV1MTVm4DZAdJw1PyVutpSy8Q4WisZBCFRAaZY7hhQnMwr5AZ4swzThyaSiVVQM5FHj1JQi3zPKhQ4k81BZkPSEaFjwRJtbfqfJcVvCqRnmBVcWVxhnihX5s8fZWBCjKrzT3CS95spG4dzNzJSUcjheAkLzCpVmSzGtgwMhAS3Vuz9Pas24","MultisigV1TEx58ycKCd6ADCfxF8hALpcdSRAkhZTi1bu4Rs6FdRC98EdB1LY7TAkMxasM55khFgcxrSXivaSr5FCMyJGHmojm1eE4HpGWPeZKv6cgCTThRzC4u6bkkSoFQdbzWN92yn1XEjuP2XQrGHk81mG2LMeyB51MWKJAVF99Pg9mX2BpmYFj"],"threshold":2}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3424,24 +606,7 @@ curl \
     "multisig_info": "MultisigxV18jCaYAQQvzCMUJaAWMCaAbAoHpAD6WPmYDmLtBtazD654E8RWkLaGRf29fJ3stU471MELKxwufNYeigP7LoE4tn2Sscwn5g7PyCfcBc1V4ffRHY3Kxqq6VocSCUTncpVeUskaDKuTAWtdB9VTBGW7iG1cd7Zm1dYgur3CiemkGjRUAj9bL3xTEuyaKGYSDhtpFZFp99HQX57EawhiRHk3qq4hjWX"
   }
 }
-
-

make_uri

-

Create a payment URI using the official URI spec.

-

Alias: None.

-

Inputs:

-
    -
  • address - string; Wallet address
  • -
  • amount - unsigned int; (optional) the integer amount to receive, in atomicunits
  • -
  • payment_id - string; (optional) 16 or 64 character hexadecimal payment id
  • -
  • recipient_name - string; (optional) name of the payment recipient
  • -
  • tx_description - string; (optional) Description of the reason for the tx
  • -
-

Outputs:

-
    -
  • uri - string; This contains 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":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt","amount":10,"payment_id":"420fa29b2d9a49f5","tx_description":"Testing out the make_uri function.","recipient_name":"el00ruobuob Stagenet wallet"}}'  -H 'Content-Type: application/json'
+

make_uri

Create a payment URI using the official URI spec.

Alias: None.

Inputs:

  • address - string; Wallet address
  • amount - unsigned int; (optional) the integer amount to receive, in atomicunits
  • payment_id - string; (optional) 16 or 64 character hexadecimal payment id
  • recipient_name - string; (optional) name of the payment recipient
  • tx_description - string; (optional) Description of the reason for the tx

Outputs:

  • uri - string; This contains 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":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt","amount":10,"payment_id":"420fa29b2d9a49f5","tx_description":"Testing out the make_uri function.","recipient_name":"el00ruobuob Stagenet wallet"}}'  -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3449,45 +614,14 @@ curl \
     "uri": "monero:55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt?tx_payment_id=420fa29b2d9a49f5&tx_amount=0.000000000010&recipient_name=el00ruobuob%20Stagenet%20wallet&tx_description=Testing%20out%20the%20make_uri%20function."
   }
 }
-
-

open_wallet

-

Open a wallet. You need to have set the argument "–wallet-dir" when launching monero-wallet-rpc to make this work.

-

Alias: None.

-

Inputs:

-
    -
  • filename - string; wallet name stored in –wallet-dir.
  • -
  • password - string; (Optional) only needed if the wallet has a password defined.
  • -
-

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'
+

open_wallet

Open a wallet. You need to have set the argument "–wallet-dir" when launching monero-wallet-rpc to make this work.

Alias: None.

Inputs:

  • filename - string; wallet name stored in –wallet-dir.
  • password - string; (Optional) only needed if the wallet has a password defined.

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": {
   }
 }
-
-

parse_uri

-

Parse a payment URI to get payment information.

-

Alias: None.

-

Inputs:

-
    -
  • uri - string; This contains all the payment input information as a properly formatted payment URI
  • -
-

Outputs:

-
    -
  • uri - JSON object containing payment information:
      -
    • address - string; Wallet address
    • -
    • amount - unsigned int; Decimal amount to receive, in coin units (0 if not provided)
    • -
    • payment_id - string; 16 or 64 character hexadecimal payment id (empty if not provided)
    • -
    • recipient_name - string; Name of the payment recipient (empty if not provided)
    • -
    • tx_description - string; Description of 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:55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt?tx_payment_id=420fa29b2d9a49f5&tx_amount=0.000000000010&recipient_name=el00ruobuob%20Stagenet%20wallet&tx_description=Testing%20out%20the%20make_uri%20function."}}' -H 'Content-Type: application/json'
+

parse_uri

Parse a payment URI to get payment information.

Alias: None.

Inputs:

  • uri - string; This contains all the payment input information as a properly formatted payment URI

Outputs:

  • uri - JSON object containing payment information:
    • address - string; Wallet address
    • amount - unsigned int; Decimal amount to receive, in coin units (0 if not provided)
    • payment_id - string; 16 or 64 character hexadecimal payment id (empty if not provided)
    • recipient_name - string; Name of the payment recipient (empty if not provided)
    • tx_description - string; Description of 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:55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt?tx_payment_id=420fa29b2d9a49f5&tx_amount=0.000000000010&recipient_name=el00ruobuob%20Stagenet%20wallet&tx_description=Testing%20out%20the%20make_uri%20function."}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3501,17 +635,7 @@ curl \
     }
   }
 }
-
-

prepare_multisig

-

Prepare a wallet for multisig by generating a multisig string to share with peers.

-

Alias: None.

-

Inputs: None.

-

Outputs:

-
    -
  • multisig_info - string; Multisig string to share with peers to create the multisig wallet.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"prepare_multisig"}' -H 'Content-Type: application/json'
+

prepare_multisig

Prepare a wallet for multisig by generating a multisig string to share with peers.

Alias: None.

Inputs: None.

Outputs:

  • multisig_info - string; Multisig string to share with peers to create the multisig wallet.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"prepare_multisig"}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3519,20 +643,7 @@ curl \
     "multisig_info": "MultisigV1BFdxQ653cQHB8wsj9WJQd2VdnjxK89g5M94dKPBNw22reJnyJYKrz6rJeXdjFwJ3Mz6n4qNQLd6eqUZKLiNzJFi3UPNVcTjtkG2aeSys9sYkvYYKMZ7chCxvoEXVgm74KKUcUu4V8xveCBFadFuZs8shnxBWHbcwFr5AziLr2mE7KHJT"
   }
 }
-
-

query_key

-

Return the spend or view private key.

-

Alias: None.

-

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'
+

query_key

Return the spend or view private key.

Alias: None.

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",
@@ -3540,9 +651,7 @@ curl \
     "key": "0a1a38f6d246e894600a3e27238a064bf5e8d91801df47a17107596b1378e501"
   }
 }
-
-

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'
+

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",
@@ -3550,21 +659,7 @@ curl \
     "key": "vocal either anvil films dolphin zeal bacon cuisine quote syndrome rejoices envy okay pancakes tulips lair greater petals organs enmity dedicated oust thwart tomorrow tomorrow"
   }
 }
-
-

refresh

-

Refresh a wallet after openning.

-

Alias: None.

-

Inputs:

-
    -
  • start_height - unsigned int; (Optional) The block height from which to start refreshing.
  • -
-

Outputs:

-
    -
  • blocks_fetched - unsigned int; Number of new blocks scanned.
  • -
  • received_money - boolean; States if transactions to the wallet have been found in the blocks.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"refresh","params":{"start_height":100000}}' -H 'Content-Type: application/json'
+

refresh

Refresh a wallet after openning.

Alias: None.

Inputs:

  • start_height - unsigned int; (Optional) The block height from which to start refreshing.

Outputs:

  • blocks_fetched - unsigned int; Number of new blocks scanned.
  • received_money - boolean; States if transactions to the wallet have been found in the blocks.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"refresh","params":{"start_height":100000}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3573,20 +668,7 @@ curl \
     "received_money": true
   }
 }
-
-

relay_tx

-

Relay a transaction previously created with "do_not_relay":true.

-

Alias: None.

-

Inputs:

-
    -
  • hex - string; transaction metadata returned from a transfer method with get_tx_metadata set to true.
  • -
-

Outputs:

-
    -
  • tx_hash - String for the publically searchable transaction hash.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"relay_tx","params":{"hex":"...tx_metadata..."}}' -H 'Content-Type: application/json'
+

relay_tx

Relay a transaction previously created with "do_not_relay":true.

Alias: None.

Inputs:

  • hex - string; transaction metadata returned from a transfer method with get_tx_metadata set to true.

Outputs:

  • tx_hash - String for the publically searchable transaction hash.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"relay_tx","params":{"hex":"...tx_metadata..."}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3594,29 +676,14 @@ curl \
     "tx_hash": "1c42dcc5672bb09bccf33fb1e9ab4a498af59a6dbd33b3d0cfb289b9e0e25fa5"
   }
 }
-
-

rescan_blockchain

-

Rescan the blockchain from scratch, losing any information which can not be recovered from the blockchain itself.
-This includes destination addresses, tx secret keys, tx notes, etc.

-

Alias: None.

-

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'
+

rescan_blockchain

Rescan the blockchain from scratch, losing any information which can not be recovered from the blockchain itself.
This includes destination addresses, tx secret keys, tx notes, etc.

Alias: None.

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": {
   }
 }
-
-

rescan_spent

-

Rescan the blockchain for spent outputs.

-

Alias: None.

-

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'
+

rescan_spent

Rescan the blockchain for spent outputs.

Alias: None.

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",
@@ -3624,74 +691,28 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"result": { } } -
-

set_account_tag_description

-

Set description for an account tag.

-

Alias: None.

-

Inputs:

-
    -
  • tag - string; Set a description for this tag.
  • -
  • description - string; Description for the tag.
  • -
-

Outputs: None.

-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"set_account_tag_description","params":{"tag":"myTag","description":"Test tag"}}' -H 'Content-Type: application/json'
+

set_account_tag_description

Set description for an account tag.

Alias: None.

Inputs:

  • tag - string; Set a description for this tag.
  • description - string; Description for the tag.

Outputs: None.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"set_account_tag_description","params":{"tag":"myTag","description":"Test tag"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
   "result": {
   }
 }
-
-

set_attribute

-

Set arbitrary attribute.

-

Alias: None.

-

Inputs:

-
    -
  • key - string; attribute name
  • -
  • value - string; attribute value
  • -
-

Outputs: None.

-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"set_attribute","params":{"key":"my_attribute","value":"my_value"}}' -H 'Content-Type: application/json'
+

set_attribute

Set arbitrary attribute.

Alias: None.

Inputs:

  • key - string; attribute name
  • value - string; attribute value

Outputs: None.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"set_attribute","params":{"key":"my_attribute","value":"my_value"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
   "result": {
   }
 }
-
-

set_tx_notes

-

Set arbitrary string notes for transactions.

-

Alias: None.

-

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":["3292e83ad28fc1cc7bc26dbd38862308f4588680fbf93eae3e803cddd1bd614f"],"notes":["This is an example"]}}' -H 'Content-Type: application/json'
+

set_tx_notes

Set arbitrary string notes for transactions.

Alias: None.

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":["3292e83ad28fc1cc7bc26dbd38862308f4588680fbf93eae3e803cddd1bd614f"],"notes":["This is an example"]}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
   "result": {
   }
 }
-
-

sign

-

Sign a string.

-

Alias: None.

-

Inputs:

-
    -
  • data - string; Anything you need to sign.
  • -
-

Outputs:

-
    -
  • signature - string; Signature generated against the "data" and the account public address.
  • -
-

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'
+

sign

Sign a string.

Alias: None.

Inputs:

  • data - string; Anything you need to sign.

Outputs:

  • signature - string; Signature generated against the "data" and the account public address.

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",
@@ -3699,21 +720,7 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"signature": "SigV14K6G151gycjiGxjQ74tKX6A2LwwghvuHjcDeuRFQio5LS6Gb27BNxjYQY1dPuUvXkEbGQUkiHSVLPj4nJAHRrrw3" } } -
-

sign_multisig

-

Sign a transaction in multisig.

-

Alias: None.

-

Inputs:

-
    -
  • tx_data_hex - string; Multisig transaction in hex format, as returned by transfer under multisig_txset.
  • -
-

Outputs:

-
    -
  • tx_data_hex - string; Multisig transaction in hex format.
  • -
  • tx_hash_list - array of string; List of transaction Hash.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sign_multisig","params":{"tx_data_hex":"...multisig_txset..."}}' -H 'Content-Type: application/json'
+

sign_multisig

Sign a transaction in multisig.

Alias: None.

Inputs:

  • tx_data_hex - string; Multisig transaction in hex format, as returned by transfer under multisig_txset.

Outputs:

  • tx_data_hex - string; Multisig transaction in hex format.
  • tx_hash_list - array of string; List of transaction Hash.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sign_multisig","params":{"tx_data_hex":"...multisig_txset..."}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3722,24 +729,7 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"tx_hash_list": ["4996091b61c1be112c1097fd5e97d8ff8b28f0e5e62e1137a8c831bacf034f2d"] } } -
-

sign_transfer

-

Sign a transaction created on a read-only wallet (in cold-signing process)

-

Alias: None.

-

Inputs:

-
    -
  • unsigned_txset - string. Set of unsigned tx returned by "transfer" or "transfer_split" methods.
  • -
  • export_raw - boolean; (Optional) If true, return the raw transaction data. (Defaults to false)
  • -
-

Outputs:

-
    -
  • signed_txset - string. Set of signed tx to be used for submitting transfer.
  • -
  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • -
  • tx_raw_list - array of: string. The tx raw data of every transaction.
  • -
-

In the example below, we first generate an unsigned_txset on a read only wallet before signing it:

-

Generate unsigned_txset using the above "transfer" method on read-only wallet:

-
curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer","params":{"destinations":[{"amount":1000000000000,"address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o"}],"account_index":0,"subaddr_indices":[0],"priority":0,"ring_size":7,"do_not_relay":true,"get_tx_hex":true}}' -H 'Content-Type: application/json'
+

sign_transfer

Sign a transaction created on a read-only wallet (in cold-signing process)

Alias: None.

Inputs:

  • unsigned_txset - string. Set of unsigned tx returned by "transfer" or "transfer_split" methods.
  • export_raw - boolean; (Optional) If true, return the raw transaction data. (Defaults to false)

Outputs:

  • signed_txset - string. Set of signed tx to be used for submitting transfer.
  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • tx_raw_list - array of: string. The tx raw data of every transaction.

In the example below, we first generate an unsigned_txset on a read only wallet before signing it:

Generate unsigned_txset using the above "transfer" method on read-only wallet:

curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer","params":{"destinations":[{"amount":1000000000000,"address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o"}],"account_index":0,"subaddr_indices":[0],"priority":0,"ring_size":7,"do_not_relay":true,"get_tx_hex":true}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3754,9 +744,7 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"unsigned_txset": "...long_hex..." } } -
-

Sign tx using the previously generated unsigned_txset

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sign_transfer","params":{"unsigned_txset":...long_hex..."}}' -H 'Content-Type: application/json'
+

Sign tx using the previously generated unsigned_txset

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sign_transfer","params":{"unsigned_txset":...long_hex..."}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3765,22 +753,7 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"tx_hash_list": ["ff2e2d49fbfb1c9a55754f786576e171c8bf21b463a74438df604b7fa6cebc6d"] } } -
-

split_integrated_address

-

Retrieve the standard address and payment id corresponding to an integrated address.

-

Alias: None.

-

Inputs:

-
    -
  • integrated_address - string
  • -
-

Outputs:

-
    -
  • is_subaddress - boolean; States if the address is a subaddress
  • -
  • payment - string; hex encoded
  • -
  • standard_address - string
  • -
-

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": "5F38Rw9HKeaLQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZXCkbHUXdPHyiUeRyokn"}}' -H 'Content-Type: application/json'
+

split_integrated_address

Retrieve the standard address and payment id corresponding to an integrated address.

Alias: None.

Inputs:

  • integrated_address - string

Outputs:

  • is_subaddress - boolean; States if the address is a subaddress
  • payment - string; hex encoded
  • standard_address - string

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": "5F38Rw9HKeaLQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZXCkbHUXdPHyiUeRyokn"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3790,81 +763,35 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"standard_address": "55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt" } } -
-

start_mining

-

Start mining in the Monero daemon.

-

Alias: None.

-

Inputs:

-
    -
  • threads_count - unsigned int; Number of threads created for mining.
  • -
  • do_background_mining - boolean; Allow to start the miner in smart miningmode.
  • -
  • ignore_battery - boolean; Ignore battery status (for smart mining only)
  • -
-

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":false}}' -H 'Content-Type: application/json'
+

start_mining

Start mining in the Monero daemon.

Alias: None.

Inputs:

  • threads_count - unsigned int; Number of threads created for mining.
  • do_background_mining - boolean; Allow to start the miner in smart miningmode.
  • ignore_battery - boolean; Ignore battery status (for smart mining only)

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":false}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
   "result": {
   }
 }
-
-

stop_mining

-

Stop mining in the Monero daemon.

-

Alias: None.

-

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'
+

stop_mining

Stop mining in the Monero daemon.

Alias: None.

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": {
   }
 }
-
-

stop_wallet

-

Stops the wallet, storing the current state.

-

Alias: None.

-

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'
+

stop_wallet

Stops the wallet, storing the current state.

Alias: None.

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": {
   }
 }
-
-

store

-

Save the wallet file.

-

Alias: None.

-

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'
+

store

Save the wallet file.

Alias: None.

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": {
   }
 }
-
-

submit_multisig

-

Submit a signed multisig transaction.

-

Alias: None.

-

Inputs:

-
    -
  • tx_data_hex - string; Multisig transaction in hex format, as returned by sign_multisig under tx_data_hex.
  • -
-

Outputs:

-
    -
  • tx_hash_list - array of string; List of transaction Hash.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"submit_multisig","params":{"tx_data_hex":"...tx_data_hex..."}}' -H 'Content-Type: application/json'
+

submit_multisig

Submit a signed multisig transaction.

Alias: None.

Inputs:

  • tx_data_hex - string; Multisig transaction in hex format, as returned by sign_multisig under tx_data_hex.

Outputs:

  • tx_hash_list - array of string; List of transaction Hash.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"submit_multisig","params":{"tx_data_hex":"...tx_data_hex..."}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3872,20 +799,7 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"tx_hash_list": ["4996091b61c1be112c1097fd5e97d8ff8b28f0e5e62e1137a8c831bacf034f2d"] } } -
-

submit_transfer

-

Submit a previously signed transaction on a read-only wallet (in cold-signing process).

-

Alias: None.

-

Inputs:

-
    -
  • tx_data_hex - string; Set of signed tx returned by "sign_transfer"
  • -
-

Outputs:

-
    -
  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • -
-

In the example below, we submit the transfer using the signed_txset generated above:

-
curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"submit_transfer","params":{"tx_data_hex":...long_hex..."}}' -H 'Content-Type: application/json'
+

submit_transfer

Submit a previously signed transaction on a read-only wallet (in cold-signing process).

Alias: None.

Inputs:

  • tx_data_hex - string; Set of signed tx returned by "sign_transfer"

Outputs:

  • tx_hash_list - array of: string. The tx hashes of every transaction.

In the example below, we submit the transfer using the signed_txset generated above:

curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"submit_transfer","params":{"tx_data_hex":...long_hex..."}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3893,39 +807,7 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"tx_hash_list": ["40fad7c828bb383ac02648732f7afce9adc520ba5629e1f5d9c03f584ac53d74"] } } -
-

sweep_all

-

Send all unlocked balance to an address.

-

Alias: None.

-

Inputs:

-
    -
  • address - string; Destination public address.
  • -
  • account_index - unsigned int; Sweep transactions from this account.
  • -
  • subaddr_indices - array of unsigned int; (Optional) Sweep from this set of subaddresses in the account.
  • -
  • priority - unsigned int; (Optional) Priority for sending the sweep transfer, partially determines fee.
  • -
  • mixin - unsigned int; Number of outputs from the blockchain to mix with (0 means no mixing).
  • -
  • ring_size - unsigned int; Sets ringsize to n (mixin + 1).
  • -
  • 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) Include outputs below this amount.
  • -
  • do_not_relay - boolean; (Optional) If true, do not relay this sweep transfer. (Defaults to false)
  • -
  • get_tx_hex - boolean; (Optional) return the transactions as hex encoded string. (Defaults to false)
  • -
  • get_tx_metadata - boolean; (Optional) return the transaction metadata as a string. (Defaults to false)
  • -
-

Outputs:

-
    -
  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • -
  • tx_key_list - array of: string. The transaction keys for every transaction.
  • -
  • amount_list - array of: integer. The amount transferred for every transaction.
  • -
  • fee_list - array of: integer. The amount of fees paid for every transaction.
  • -
  • tx_blob_list - array of: string. The tx as hex string for every transaction.
  • -
  • tx_metadata_list - array of: string. List of transaction metadata needed to relay the transactions later.
  • -
  • multisig_txset - string. The set of signing keys used in a multisig transaction (empty for non-multisig).
  • -
  • unsigned_txset - string. Set of unsigned tx for cold-signing purposes.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sweep_all","params":{"address":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt","subaddr_indices":[4],"ring_size":7,"unlock_time":0,"get_tx_keys":true}}' -H 'Content-Type: application/json'
+

sweep_all

Send all unlocked balance to an address.

Alias: None.

Inputs:

  • address - string; Destination public address.
  • account_index - unsigned int; Sweep transactions from this account.
  • subaddr_indices - array of unsigned int; (Optional) Sweep from this set of subaddresses in the account.
  • priority - unsigned int; (Optional) Priority for sending the sweep transfer, partially determines fee.
  • mixin - unsigned int; Number of outputs from the blockchain to mix with (0 means no mixing).
  • ring_size - unsigned int; Sets ringsize to n (mixin + 1).
  • 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) Include outputs below this amount.
  • do_not_relay - boolean; (Optional) If true, do not relay this sweep transfer. (Defaults to false)
  • get_tx_hex - boolean; (Optional) return the transactions as hex encoded string. (Defaults to false)
  • get_tx_metadata - boolean; (Optional) return the transaction metadata as a string. (Defaults to false)

Outputs:

  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • tx_key_list - array of: string. The transaction keys for every transaction.
  • amount_list - array of: integer. The amount transferred for every transaction.
  • fee_list - array of: integer. The amount of fees paid for every transaction.
  • tx_blob_list - array of: string. The tx as hex string for every transaction.
  • tx_metadata_list - array of: string. List of transaction metadata needed to relay the transactions later.
  • multisig_txset - string. The set of signing keys used in a multisig transaction (empty for non-multisig).
  • unsigned_txset - string. Set of unsigned tx for cold-signing purposes.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sweep_all","params":{"address":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt","subaddr_indices":[4],"ring_size":7,"unlock_time":0,"get_tx_keys":true}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3938,30 +820,7 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"unsigned_txset": "" } } -
-

sweep_dust

-

Send all dust outputs back to the wallet's, to make them easier to spend (and mix).

-

Alias: sweep_unmixable.

-

Inputs:

-
    -
  • get_tx_keys - boolean; (Optional) Return the transaction keys after sending.
  • -
  • 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; (Optional) Return the transactions as hex string after sending. (Defaults to false)
  • -
  • get_tx_metadata - boolean; (Optional) Return list of transaction metadata needed to relay the transfer later. (Defaults to false)
  • -
-

Outputs:

-
    -
  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • -
  • tx_key_list - array of: string. The transaction keys for every transaction.
  • -
  • amount_list - array of: integer. The amount transferred for every transaction.
  • -
  • fee_list - array of: integer. The amount of fees paid for every transaction.
  • -
  • tx_blob_list - array of: string. The tx as hex string for every transaction.
  • -
  • tx_metadata_list - array of: string. List of transaction metadata needed to relay the transactions later.
  • -
  • multisig_txset - string. The set of signing keys used in a multisig transaction (empty for non-multisig).
  • -
  • unsigned_txset - string. Set of unsigned tx for cold-signing purposes.
  • -
-

Example (In this example, sweep_dust returns nothing because there are no funds to sweep):

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sweep_dust","params":{"get_tx_keys":true}}' -H 'Content-Type: application/json'
+

sweep_dust

Send all dust outputs back to the wallet's, to make them easier to spend (and mix).

Alias: sweep_unmixable.

Inputs:

  • get_tx_keys - boolean; (Optional) Return the transaction keys after sending.
  • 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; (Optional) Return the transactions as hex string after sending. (Defaults to false)
  • get_tx_metadata - boolean; (Optional) Return list of transaction metadata needed to relay the transfer later. (Defaults to false)

Outputs:

  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • tx_key_list - array of: string. The transaction keys for every transaction.
  • amount_list - array of: integer. The amount transferred for every transaction.
  • fee_list - array of: integer. The amount of fees paid for every transaction.
  • tx_blob_list - array of: string. The tx as hex string for every transaction.
  • tx_metadata_list - array of: string. List of transaction metadata needed to relay the transactions later.
  • multisig_txset - string. The set of signing keys used in a multisig transaction (empty for non-multisig).
  • unsigned_txset - string. Set of unsigned tx for cold-signing purposes.

Example (In this example, sweep_dust returns nothing because there are no funds to sweep):

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sweep_dust","params":{"get_tx_keys":true}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -3970,40 +829,7 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"unsigned_txset": "" } } -
-

sweep_single

-

Send all of a specific unlocked output to an address.

-

Alias: None.

-

Inputs:

-
    -
  • address - string; Destination public address.
  • -
  • account_index - unsigned int; Sweep transactions from this account.
  • -
  • subaddr_indices - array of unsigned int; (Optional) Sweep from this set of subaddresses in the account.
  • -
  • priority - unsigned int; (Optional) Priority for sending the sweep transfer, partially determines fee.
  • -
  • mixin - unsigned int; Number of outputs from the blockchain to mix with (0 means no mixing).
  • -
  • ring_size - unsigned int; Sets ringsize to n (mixin + 1).
  • -
  • 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.
  • -
  • key_image - string; Key image of specific output to sweep.
  • -
  • below_amount - unsigned int; (Optional) Include outputs below this amount.
  • -
  • do_not_relay - boolean; (Optional) If true, do not relay this sweep transfer. (Defaults to false)
  • -
  • get_tx_hex - boolean; (Optional) return the transactions as hex encoded string. (Defaults to false)
  • -
  • get_tx_metadata - boolean; (Optional) return the transaction metadata as a string. (Defaults to false)
  • -
-

Outputs:

-
    -
  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • -
  • tx_key_list - array of: string. The transaction keys for every transaction.
  • -
  • amount_list - array of: integer. The amount transferred for every transaction.
  • -
  • fee_list - array of: integer. The amount of fees paid for every transaction.
  • -
  • tx_blob_list - array of: string. The tx as hex string for every transaction.
  • -
  • tx_metadata_list - array of: string. List of transaction metadata needed to relay the transactions later.
  • -
  • multisig_txset - string. The set of signing keys used in a multisig transaction (empty for non-multisig).
  • -
  • unsigned_txset - string. Set of unsigned tx for cold-signing purposes.
  • -
-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sweep_single","params":{"address":"74Jsocx8xbpTBEjm3ncKE5LBQbiJouyCDaGhgSiebpvNDXZnTAbW2CmUR5SsBeae2pNk9WMVuz6jegkC4krUyqRjA6VjoLD","ring_size":7,"unlock_time":0,"key_image":"a7834459ef795d2efb6f665d2fd758c8d9288989d8d4c712a68f8023f7804a5e","get_tx_keys":true}}' -H 'Content-Type: application/json'
+

sweep_single

Send all of a specific unlocked output to an address.

Alias: None.

Inputs:

  • address - string; Destination public address.
  • account_index - unsigned int; Sweep transactions from this account.
  • subaddr_indices - array of unsigned int; (Optional) Sweep from this set of subaddresses in the account.
  • priority - unsigned int; (Optional) Priority for sending the sweep transfer, partially determines fee.
  • mixin - unsigned int; Number of outputs from the blockchain to mix with (0 means no mixing).
  • ring_size - unsigned int; Sets ringsize to n (mixin + 1).
  • 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.
  • key_image - string; Key image of specific output to sweep.
  • below_amount - unsigned int; (Optional) Include outputs below this amount.
  • do_not_relay - boolean; (Optional) If true, do not relay this sweep transfer. (Defaults to false)
  • get_tx_hex - boolean; (Optional) return the transactions as hex encoded string. (Defaults to false)
  • get_tx_metadata - boolean; (Optional) return the transaction metadata as a string. (Defaults to false)

Outputs:

  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • tx_key_list - array of: string. The transaction keys for every transaction.
  • amount_list - array of: integer. The amount transferred for every transaction.
  • fee_list - array of: integer. The amount of fees paid for every transaction.
  • tx_blob_list - array of: string. The tx as hex string for every transaction.
  • tx_metadata_list - array of: string. List of transaction metadata needed to relay the transactions later.
  • multisig_txset - string. The set of signing keys used in a multisig transaction (empty for non-multisig).
  • unsigned_txset - string. Set of unsigned tx for cold-signing purposes.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sweep_single","params":{"address":"74Jsocx8xbpTBEjm3ncKE5LBQbiJouyCDaGhgSiebpvNDXZnTAbW2CmUR5SsBeae2pNk9WMVuz6jegkC4krUyqRjA6VjoLD","ring_size":7,"unlock_time":0,"key_image":"a7834459ef795d2efb6f665d2fd758c8d9288989d8d4c712a68f8023f7804a5e","get_tx_keys":true}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -4018,60 +844,14 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"unsigned_txset": "" } } -
-

tag_accounts

-

Apply a filtering tag to a list of accounts.

-

Alias: None.

-

Inputs:

-
    -
  • tag - string; Tag for the accounts.
  • -
  • accounts - array of unsigned int; Tag this list of accounts.
  • -
-

Outputs: None.

-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"tag_accounts","params":{"tag":"myTag","accounts":[0,1]}}' -H 'Content-Type: application/json'
+

tag_accounts

Apply a filtering tag to a list of accounts.

Alias: None.

Inputs:

  • tag - string; Tag for the accounts.
  • accounts - array of unsigned int; Tag this list of accounts.

Outputs: None.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"tag_accounts","params":{"tag":"myTag","accounts":[0,1]}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
   "result": {
   }
 }
-
-

transfer

-

Send monero to a number of recipients.

-

Alias: None.

-

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.
    • -
    -
  • -
  • account_index - unsigned int; (Optional) Transfer from this account index. (Defaults to 0)
  • -
  • subaddr_indices - array of unsigned int; (Optional) Transfer from this set of subaddresses. (Defaults to 0)
  • -
  • priority - unsigned int; Set a priority for the transaction. Accepted Values are: 0-3 for: default, unimportant, normal, elevated, priority.
  • -
  • mixin - unsigned int; Number of outputs from the blockchain to mix with (0 means no mixing).
  • -
  • ring_size - unsigned int; Number of outputs to mix in the transaction (this output + N decoys from the blockchain).
  • -
  • 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.
  • -
  • 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 (Defaults to false)
  • -
  • get_tx_metadata - boolean; Return the metadata needed to relay the transaction. (Defaults to false)
  • -
-

Outputs:

-
    -
  • amount - Amount transferred for the transaction.
  • -
  • fee - Integer value of the fee charged for the txn.
  • -
  • multisig_txset - Set of multisig transactions in the process of being signed (empty for non-multisig).
  • -
  • tx_blob - Raw transaction represented as hex string, if get_tx_hex is true.
  • -
  • 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_metadata - Set of transaction metadata needed to relay this transfer later, if get_tx_metadata is true.
  • -
  • unsigned_txset - String. Set of unsigned tx for cold-signing purposes.
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer","params":{"destinations":[{"amount":100000000000,"address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o"},{"amount":200000000000,"address":"75sNpRwUtekcJGejMuLSGA71QFuK1qcCVLZnYRTfQLgFU5nJ7xiAHtR5ihioS53KMe8pBhH61moraZHyLoG4G7fMER8xkNv"}],"account_index":0,"subaddr_indices":[0],"priority":0,"ring_size":7,"get_tx_key": true}}' -H 'Content-Type: application/json'
+

transfer

Send monero to a number of recipients.

Alias: None.

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.
  • account_index - unsigned int; (Optional) Transfer from this account index. (Defaults to 0)
  • subaddr_indices - array of unsigned int; (Optional) Transfer from this set of subaddresses. (Defaults to 0)
  • priority - unsigned int; Set a priority for the transaction. Accepted Values are: 0-3 for: default, unimportant, normal, elevated, priority.
  • mixin - unsigned int; Number of outputs from the blockchain to mix with (0 means no mixing).
  • ring_size - unsigned int; Number of outputs to mix in the transaction (this output + N decoys from the blockchain).
  • 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.
  • 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 (Defaults to false)
  • get_tx_metadata - boolean; Return the metadata needed to relay the transaction. (Defaults to false)

Outputs:

  • amount - Amount transferred for the transaction.
  • fee - Integer value of the fee charged for the txn.
  • multisig_txset - Set of multisig transactions in the process of being signed (empty for non-multisig).
  • tx_blob - Raw transaction represented as hex string, if get_tx_hex is true.
  • 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_metadata - Set of transaction metadata needed to relay this transfer later, if get_tx_metadata is true.
  • unsigned_txset - String. Set of unsigned tx for cold-signing purposes.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer","params":{"destinations":[{"amount":100000000000,"address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o"},{"amount":200000000000,"address":"75sNpRwUtekcJGejMuLSGA71QFuK1qcCVLZnYRTfQLgFU5nJ7xiAHtR5ihioS53KMe8pBhH61moraZHyLoG4G7fMER8xkNv"}],"account_index":0,"subaddr_indices":[0],"priority":0,"ring_size":7,"get_tx_key": true}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -4086,43 +866,7 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"unsigned_txset": "" } } -
-

transfer_split

-

Same as transfer, but can split into more than one tx if necessary.

-

Alias: None.

-

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.
    • -
    -
  • -
  • account_index - unsigned int; (Optional) Transfer from this account index. (Defaults to 0)
  • -
  • subaddr_indices - array of unsigned int; (Optional) Transfer from this set of subaddresses. (Defaults to 0)
  • -
  • mixin - unsigned int; Number of outputs from the blockchain to mix with (0 means no mixing).
  • -
  • ring_size - unsigned int; Sets ringsize to n (mixin + 1).
  • -
  • 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.
  • -
  • 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.
  • -
  • get_tx_metadata - boolean; Return list of transaction metadata needed to relay the transfer later.
  • -
-

Outputs:

-
    -
  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • -
  • tx_key_list - array of: string. The transaction keys for every transaction.
  • -
  • amount_list - array of: integer. The amount transferred for every transaction.
  • -
  • fee_list - array of: integer. The amount of fees paid for every transaction.
  • -
  • tx_blob_list - array of: string. The tx as hex string for every transaction.
  • -
  • tx_metadata_list - array of: string. List of transaction metadata needed to relay the transactions later.
  • -
  • multisig_txset - string. The set of signing keys used in a multisig transaction (empty for non-multisig).
  • -
  • unsigned_txset - string. Set of unsigned tx for cold-signing purposes.
  • -
-

Example:

-
$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer_split","params":{"destinations":[{"amount":1000000000000,"address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o"},{"amount":2000000000000,"address":"75sNpRwUtekcJGejMuLSGA71QFuK1qcCVLZnYRTfQLgFU5nJ7xiAHtR5ihioS53KMe8pBhH61moraZHyLoG4G7fMER8xkNv"}],"account_index":0,"subaddr_indices":[0],"priority":0,"ring_size":7,"get_tx_key": true}}' -H 'Content-Type: application/json'
+

transfer_split

Same as transfer, but can split into more than one tx if necessary.

Alias: None.

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.
  • account_index - unsigned int; (Optional) Transfer from this account index. (Defaults to 0)
  • subaddr_indices - array of unsigned int; (Optional) Transfer from this set of subaddresses. (Defaults to 0)
  • mixin - unsigned int; Number of outputs from the blockchain to mix with (0 means no mixing).
  • ring_size - unsigned int; Sets ringsize to n (mixin + 1).
  • 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.
  • 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.
  • get_tx_metadata - boolean; Return list of transaction metadata needed to relay the transfer later.

Outputs:

  • tx_hash_list - array of: string. The tx hashes of every transaction.
  • tx_key_list - array of: string. The transaction keys for every transaction.
  • amount_list - array of: integer. The amount transferred for every transaction.
  • fee_list - array of: integer. The amount of fees paid for every transaction.
  • tx_blob_list - array of: string. The tx as hex string for every transaction.
  • tx_metadata_list - array of: string. List of transaction metadata needed to relay the transactions later.
  • multisig_txset - string. The set of signing keys used in a multisig transaction (empty for non-multisig).
  • unsigned_txset - string. Set of unsigned tx for cold-signing purposes.

Example:

$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer_split","params":{"destinations":[{"amount":1000000000000,"address":"7BnERTpvL5MbCLtj5n9No7J5oE5hHiB3tVCK5cjSvCsYWD2WRJLFuWeKTLiXo5QJqt2ZwUaLy2Vh1Ad51K7FNgqcHgjW85o"},{"amount":2000000000000,"address":"75sNpRwUtekcJGejMuLSGA71QFuK1qcCVLZnYRTfQLgFU5nJ7xiAHtR5ihioS53KMe8pBhH61moraZHyLoG4G7fMER8xkNv"}],"account_index":0,"subaddr_indices":[0],"priority":0,"ring_size":7,"get_tx_key": true}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -4134,39 +878,14 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"unsigned_txset": "" } } -
-

untag_accounts

-

Remove filtering tag from a list of accounts.

-

Alias: None.

-

Inputs:

-
    -
  • accounts - array of unsigned int; Remove tag from this list of accounts.
  • -
-

Outputs: None.

-

Example:

-
$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"untag_accounts","params":{"accounts":[1]}}' -H 'Content-Type: application/json'
+

untag_accounts

Remove filtering tag from a list of accounts.

Alias: None.

Inputs:

  • accounts - array of unsigned int; Remove tag from this list of accounts.

Outputs: None.

Example:

$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"untag_accounts","params":{"accounts":[1]}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
   "result": {
   }
 }
-
-

verify

-

Verify a signature on a string.

-

Alias: None.

-

Inputs:

-
    -
  • data - string; What should have been signed.
  • -
  • address - string; Public address of the wallet used to sign the data.
  • -
  • signature - string; signature generated by sign method.
  • -
-

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":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt","signature":"SigV14K6G151gycjiGxjQ74tKX6A2LwwghvuHjcDeuRFQio5LS6Gb27BNxjYQY1dPuUvXkEbGQUkiHSVLPj4nJAHRrrw3"}}' -H 'Content-Type: application/json'
+

verify

Verify a signature on a string.

Alias: None.

Inputs:

  • data - string; What should have been signed.
  • address - string; Public address of the wallet used to sign the data.
  • signature - string; signature generated by sign method.

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":"55LTR8KniP4LQGJSPtbYDacR7dz8RBFnsfAKMaMuwUNYX6aQbBcovzDPyrQF9KXF9tVU6Xk3K8no1BywnJX6GvZX8yJsXvt","signature":"SigV14K6G151gycjiGxjQ74tKX6A2LwwghvuHjcDeuRFQio5LS6Gb27BNxjYQY1dPuUvXkEbGQUkiHSVLPj4nJAHRrrw3"}}' -H 'Content-Type: application/json'
 {
   "id": "0",
   "jsonrpc": "2.0",
@@ -4174,81 +893,7 @@ This includes destination addresses, tx secret keys, tx notes, etc.

"good": true } } -
-

Sources:

-

Reworked from GetMonero.org

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/interacting/monerod-reference/index.html b/public/interacting/monerod-reference/index.html index b8889f2..0bf42f5 100644 --- a/public/interacting/monerod-reference/index.html +++ b/public/interacting/monerod-reference/index.html @@ -1,2300 +1,10 @@ - - - - - - - - - - - - - - - - - - - - - - - monerod - Reference - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

monerod - Reference

-

Overview

-

Connects you to Monero network

-

The Monero daemon monerod keeps your computer synced up with the Monero network.

-

It downloads and validates the blockchain from the p2p network.

-

Not aware of your private keys

-

monerod is entirely decoupled from your wallet.

-

monerod does not access your private keys - it is not aware of your transactions and balance.

-

This allows you to run monerod on a separate computer or in the cloud.

-

In fact, you can connect to a remote monerod instance provided by a semi-trusted 3rd party. Such 3rd party will not be able to steal your funds. This is very handy for learning and experimentation.

-

However, there are privacy and reliability implications to using a remote, untrusted node. For any real business you should be running your own full node.

-

Syntax

-

./monerod [options] [command]

-

Options define how the daemon should be working. Their names follow the --option-name pattern.

-

Commands give access to specific services provided by the daemon. Commands are executed against the running daemon. -Their names follow the command_name pattern.

-

Running

-

Go to directory where you unpacked Monero.

-

The stagenet is what your should be using for learning and experimentation.

-
./monerod --stagenet --detach                # run as a daemon in background
+ monerod - Reference - Monero Documentation      

monerod - Reference

Overview

Connects you to Monero network

The Monero daemon monerod keeps your computer synced up with the Monero network.

It downloads and validates the blockchain from the p2p network.

Not aware of your private keys

monerod is entirely decoupled from your wallet.

monerod does not access your private keys - it is not aware of your transactions and balance.

This allows you to run monerod on a separate computer or in the cloud.

In fact, you can connect to a remote monerod instance provided by a semi-trusted 3rd party. Such 3rd party will not be able to steal your funds. This is very handy for learning and experimentation.

However, there are privacy and reliability implications to using a remote, untrusted node. For any real business you should be running your own full node.

Syntax

./monerod [options] [command]

Options define how the daemon should be working. Their names follow the --option-name pattern.

Commands give access to specific services provided by the daemon. Commands are executed against the running daemon. Their names follow the command_name pattern.

Running

Go to directory where you unpacked Monero.

The stagenet is what your should be using for learning and experimentation.

./monerod --stagenet --detach                # run as a daemon in background
 tail -f ~/.bitmonero/stagenet/bitmonero.log  # watch the logs
 ./monerod --stagenet exit                    # ask daemon to exit gracefully
-
-

The mainnnet is when you want to deal with the real XMR.

-
./monerod --detach                           # run as a daemon in background
+

The mainnnet is when you want to deal with the real XMR.

./monerod --detach                           # run as a daemon in background
 tail -f ~/.bitmonero/bitmonero.log           # watch the logs
 ./monerod exit                               # ask daemon to exit gracefully
-
-

Options

-

Options define how the daemon should be working. Their names follow the --option-name pattern.

-

The following groups are only to make reference easier to follow. The daemon itself does not group options in any way.

-

Help and version

- - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--helpEnlist available options.
--versionShow monerod version to stdout. Example output:
Monero 'Oxygen Orion' (v0.17.1.8-release)
--os-versionShow build timestamp and target operating system. Example output:
OS: Linux #65-Ubuntu SMP Thu Dec 10 12:01:51 UTC 2020 5.4.0-59-generic.
--check-updatesOne of: disabled | notify | download (=notify by default). Check for new versions of Monero and optionally download it. You should probably prefer your OS package manager to do the update, if possible. There is also unimplemented update option shown by the help system.
-

Pick network

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
(missing)By default monerod assumes mainnet.
--stagenetRun on stagenet. Remember to run your wallet with --stagenet as well.
--testnetRun on testnet. Remember to run your wallet with --testnet as well.
-

Logging

- - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--log-fileFull path to the log file. Example (mind file permissions):
./monerod --log-file=/var/log/monero/mainnet/monerod.log
--log-level0-4 with 0 being minimal logging and 4 being full tracing. Defaults to 0. These are general presets and do not directly map to severity levels. For example, even with minimal 0, you may see some most important INFO entries. Temporarily changing to 1 allows for much better understanding of how the full node operates. Example:
./monerod --log-level=1
--max-log-file-sizeSoft limit in bytes for the log file (=104850000 by default, which is just under 100MB). Once log file grows past that limit, monerod creates the next log file with a UTC timestamp postfix -YYYY-MM-DD-HH-MM-SS.

In production deployments, you would probably prefer to use established solutions like logrotate instead. In that case, set --max-log-file-size=0 to prevent monerod from managing the log files.
--max-log-filesLimit on the number of log files (=50 by default). The oldest log files are removed. In production deployments, you would probably prefer to use established solutions like logrotate instead.
-

Server

-

monerod defaults are adjusted for running it occasionally on the same computer as your Monero wallet.

-

The following options will be helpful if you intend to have an always running node — most likely on a remote server or your own separate PC.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--config-fileFull path to the configuration file. By default monerod looks for bitmonero.conf in Monero data directory.
--data-dirFull path to data directory. This is where the blockchain, log files, and p2p network memory are stored. For defaults and details see data directory.
--pidfileFull path to the PID file. Works only with --detach. Example:
./monerod --detach --pidfile=/run/monero/monerod.pid
--detachGo to background (decouple from the terminal). This is useful for long-running / server scenarios. Typically, you will also want to manage monerod daemon with systemd or similar. By default monerod runs in a foreground.
--non-interactiveDo not require tty in a foreground mode. Helpful when running in a container. By default monerod runs in a foreground and opens stdin for reading. This breaks containerization because no tty gets assigned and monerod process crashes. You can make it run in a background with --detach but this is inconvenient in a containerized environment because the canonical usage is that the container waits on the main process to exist (forking makes things more complicated).
--no-zmqDisable ZMQ RPC server. You should use this option to limit attack surface and number of unnecessarily open ports (the ZMQ server is unfinished thing and you are unlikely to ever use it).
--no-igdDisable UPnP port mapping on the router ("Internet Gateway Device"). Add this option to improve security if you are not behind a NAT (you can bind directly to public IP or you run through Tor).
--max-txpool-weightSet maximum transactions pool size in bytes. By default 648000000 (~618MB). These are transactions pending for confirmations (not included in any block).
--enforce-dns-checkpointingThe emergency checkpoints set by MoneroPulse operators will be enforced. It is probably a good idea to set enforcing for unattended nodes.

If encountered block hash does not match corresponding checkpoint, the local blockchain will be rolled back a few blocks, effectively blocking following what MoneroPulse operators consider invalid fork. The log entry will be produced: ERROR Local blockchain failed to pass a checkpoint, rolling back! Eventually, the alternative ("fixed") fork will get heavier and the node will follow it, leaving the "invalid" fork behind.

By default checkpointing only notifies about discrepancy by producing the following log entry: ERROR WARNING: local blockchain failed to pass a MoneroPulse checkpoint, and you could be on a fork. You should either sync up from scratch, OR download a fresh blockchain bootstrap, OR enable checkpoint enforcing with the --enforce-dns-checkpointing command-line option.

Reference: source code.
--disable-dns-checkpointsThe MoneroPulse checkpoints set by core developers will be discarded. The checkpoints are apparently still fetched though.
-

P2P network

-

The following options define how your node participates in Monero peer-to-peer network. -This is for node-to-node communication. The following options do not affect wallet-to-node interface.

-

The node and peer words are used interchangeably.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--p2p-bind-ipIPv4 network interface to bind to for p2p network protocol. Default value 0.0.0.0 binds to all network interfaces. This is typically what you want.

You must change this if you want to constrain binding, for example to force working through Tor via torsocks:
DNS_PUBLIC=tcp://1.1.1.1 TORSOCKS_ALLOW_INBOUND=1 torsocks ./monerod --p2p-bind-ip 127.0.0.1  --no-igd  --hide-my-port
--p2p-bind-portTCP port to listen for p2p network connections. Defaults to 18080 for mainnet, 28080 for testnet, and 38080 for stagenet. You normally wouldn't change that. This is helpful to run several nodes on your machine to simulate private Monero p2p network (likely using private Testnet). Example:
./monerod --p2p-bind-port=48080
--p2p-external-portTCP port to listen for p2p network connections on your router. Relevant if you are behind a NAT and still want to accept incoming connections. You must then set this to relevant port on your router. This is to let monerod know what to advertise on the network. Default is 0.
--p2p-use-ipv6Enable IPv6 for p2p (disabled by default).
--p2p-bind-ipv6-addressIPv6 network interface to bind to for p2p network protocol. Default value :: binds to all network interfaces.
--p2p-ignore-ipv4Ignore unsuccessful IPv4 bind for p2p. Useful if you only want to use IPv6.
--igdSet UPnP port mapping on the router ("Internet Gateway Device"). One of: disabled | enabled | delayed (=delayed by default). Relevant if you are behind NAT and want to accept incoming P2P network connections. The delayed value means it will wait for incoming connections in hope UPnP may not be necessary. After a while w/o incoming connections found it will attempt to map ports with UPnP. If you know you need UPnP change it to enabled to fast track the process.
--hide-my-portmonerod will still open and listen on the p2p port. However, it will not announce itself as a peer list candidate. Technically, it will return port 0 in a response to p2p handshake (node_data.my_port = 0 in get_local_node_data function). In effect nodes you connect to won't spread your IP to other nodes. To sum up, it is not really hiding, it is more like "do not advertise".
--seed-nodeConnect to a node to retrieve other nodes' addresses, and disconnect. If not specified, monerod will use hardcoded seed nodes on the first run, and peers cached on disk on subsequent runs.
--add-peerManually add node to local peer list, host:port. Syntax supports IP addresses, domain names, onion and i2p hosts.
--add-priority-nodeSpecify list of nodes to connect to and then attempt to keep the connection open.

To add multiple nodes use the option several times. Example:
./monerod --add-priority-node=178.128.192.138:18081 --add-priority-node=144.76.202.167:18081
--add-exclusive-nodeSpecify list of nodes to connect to only. If this option is given the options --add-priority-node and --seed-node are ignored.

To add multiple nodes use the option several times. Example:
./monerod --add-exclusive-node=178.128.192.138:18081 --add-exclusive-node=144.76.202.167:18081
--out-peersSet max number of outgoing connections to other nodes. By default 12. Value -1 represents the code default.
--in-peersSet max number of incoming connections (nodes actively connecting to you). By default unlimited. Value -1 represents the code default.
--limit-rate-upSet outgoing data transfer limit [kB/s]. By default 2048 kB/s. Value -1 represents the code default.
--limit-rate-downSet incoming data transfer limit [kB/s]. By default 8192 kB/s. Value -1 represents the code default.
--limit-rateSet the same limit value for incoming and outgoing data transfer. By default (-1) the individual up/down default limits will be used. It is better to use --limit-rate-up and --limit-rate-down instead to avoid confusion.
--offlineDo not listen for peers, nor connect to any. Useful for working with a local, archival blockchain.
--allow-local-ipAllow adding local IP to peer list. Useful mostly for debug purposes when you may want to have multiple nodes on a single machine.
-

Tor/I2P

-

This is experimental. It may be best to start with this guide.

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--tx-proxySend out your local transactions through SOCKS5 proxy (Tor or I2P). Format:
<network-type>,<socks-ip:port>[,max_connections][,disable_noise]

Example:
./monerod --tx-proxy "tx-proxy=tor,127.0.0.1:9050,16"

This was introduced to make publishing transactions over Tor easier (no need for torsocks) while allowing clearnet for blocks at the same time (while torsocks affected everything).

Adding ,disable_noise disables Dandelion++ (will speed up tx broadcast but is otherwise not recommended).

Note that forwarded transactions (those not originating from connected wallet) will still be relayed over clearnet.

Requires multiple --add-peer to manually add onion-enabled p2p seed nodes - see Tor onion seed nodes for Monero P2P network. See this guide and commit.
--anonymous-inboundAllow anonymous incoming connections to your onionized P2P interface. Format:
<hidden-service-address>,<[bind-ip:]port>[,max_connections]

Example:
./monerod --anonymous-inbound "rveahdfho7wo4b2m.onion:18083,127.0.0.1:18083,100".

Obviously, you first need to setup the hidden service in your Tor config. See the guide.
--pad-transactionsPad relayed transactions to next 1024 bytes to help defend against traffic volume analysis. This only makes sense if you are behind Tor or I2P. See commit.
-

Node RPC API

-

monerod node offers powerful API. It serves 3 purposes:

-
    -
  • provides network data (stats, blocks, transactions, ...)
  • -
  • provides local node information (peer list, hash rate if mining, ...)
  • -
  • provides interface for wallets (send transactions, ...)
  • -
-

This API is typically referred to as "RPC" because it is mostly based on JSON/RPC standard.

-

The following options define how the API behaves.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--public-nodeAdvertise to other users they can use this node as a remote one for connecting their wallets. Requires --restricted-rpc, --rpc-bind-ip and --confirm-external-bind. Without --public-node the node can still be public (assuming other relevant options are set) but won't be advertised as such on the P2P network. This option will allow wallets to auto-discover public nodes (instead of requiring user to manually find one).
--rpc-bind-ipIP to listen on. By default 127.0.0.1 because API gives full administrative capabilities over the node. Set it to 0.0.0.0 to listen on all interfaces - but only in connection with one of *-restricted-* options and --confirm-external-bind.
--rpc-bind-portTCP port to listen on. By default 18081 (mainnet), 28081 (testnet), 38081 (stagenet).
--rpc-bind-ipv6-addressIPv6 to listen on. By default ::1 (localhost). All remarks for --rpc-bind-ip are applicable here as well.
--rpc-use-ipv6Enable IPv6 for RPC server (disabled by default).
--rpc-ignore-ipv4Ignore unsuccessful IPv4 bind for RPC. Useful if you only want to use IPv6.
--rpc-restricted-bind-ipIP to listen on with the limited version of API. The limited API can be made public to create an Open Node.
--rpc-restricted-bind-portTCP port to listen on with the limited version of API. To be used in combination with `--rpc-restricted-bind-port.
--confirm-external-bindConfirm you consciously set --rpc-bind-ip to non-localhost IP and you understand the consequences.
--restricted-rpcRestrict API to view only commands and do not return privacy sensitive data. Note this does not make sense with --rpc-restricted-bind-port because you would end up with two restricted APIs.
--rpc-sslEnable TLS on RPC connections. One of: enabled | disabled | autodetect (=autodetect by default). You should enable this if you connect a remote wallet.
--rpc-ssl-private-keyPath to server's private key in PEM format. Generate it with monero-gen-ssl-cert tool. This is to facilitate server authentication to client.
--rpc-ssl-certificatePath to server's certificate in PEM format. Generate it with monero-gen-ssl-cert tool. This is to facilitate server authentication to client.
--rpc-ssl-allowed-fingerprintsList of certificate fingerprints to accept. This is a way to authenticate clients.
--rpc-ssl-allow-any-certAllow any certificate of connecting client.
--rpc-ssl-ca-certificatesPath to file containing concatenated PEM format certificate(s) to replace system CA(s).
--rpc-ssl-allow-chainedAllow user chained certificates. This is only applicable if user has a "real" CA issued certificate.
--rpc-loginSpecify username[:password] required to connect to API.
--rpc-access-control-originsSpecify a comma separated list of origins to allow cross origin resource sharing. This is useful if you want to use monerod API directly from a web browser via JavaScript (say in a pure-fronted web appp scenario). With this option monerod will put proper HTTP CORS headers to its responses. You will also need to set --rpc-login if you use this option. Normally though, the API is used by backend app and this option isn't necessary.
-

Accepting Monero

-

These are network notifications offered by monerod. There are also wallet notifications like --tx-notify offered by monero-wallet-rpc here.

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--block-notify <arg>Run a program for each new block. The <arg> must be a full path. If the <arg> contains %s it will be replaced by the block hash. Example:
./monerod --block-notify="/usr/bin/echo %s"

Block notifications are good for immediate reaction. However, you should always assume you will miss some block notifications and you should independently poll the API to cover this up.

Mind blockchain reorganizations. Block notifications can revert to same and past heights. Small reorganizations are natural and happen every day.
--block-rate-notify <arg>Run a program when the number of blocks received in the recent past deviates significantly from the expectation. The <arg> must be a full path. The <arg> can contain any of %t, %b, %e symbols to interpolate:

%t: the number of minutes in the observation window

%b: the number of blocks observed in that window

%e: the ideal number of blocks expected in that window

The option will let you know if the network hash rate drops by a lot. This may be indicative of a large section of the network miners moving off to mine a private chain, to be later released to the network. Note that if this event triggers, it is not incontrovertible proof that this is happening. It might just be chance. The longer the window (the %t parameter), and the larger the distance between actual and expected number of blocks, the more indicative it is of a possible chain reorg double-spend attack being prepared.

Recommendation: unless you run economically significant Monero exchange or operation, do not act on this data. It is hard to calibrate and easy to misinterpret. If this is a real attack, it will target high-liquidity entities and not small merchants.
--reorg-notify <arg>Run a program when reorganization happens (ie, at least one block is removed from the top of the blockchain). The <arg> must be a full path. The <arg> can contain any of %s, %h, %n symbols to interpolate:

%s: the height at which the split occurs

%h: the height of the new blockchain

%d: the number of blocks discarded from the old chain

%n: the number of blocks being added

The option will let you know when a block is removed from the chain to be replaced by other blocks. This happens when a 51% attack occurs, but small reorgs also happen in the normal course of things. The %d parameter will be set to the number of blocks discarded from the old chain (so if this is higher than the number of confirmations you wait to act upon an incoming payment, that payment might have been cancelled). The %n parameter wil be set to the number of blocks in the new chain (so if this is higher than the number of confirmations you wait to act upon an incoming payment, any incoming payment in the first block will be automatically acted upon by your platform).

Recommendation: unless you run economically significant Monero exchange or operation, you do not need to bother with this option. Simply account for reorganizations by requiring at least 10 confirmations before shipping valuable goods.
-

Performance

-

These are advanced options that allow you to optimize performance of your monerod node, sometimes at the expense of reliability.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--prune-blockchainPruning saves 2/3 of disk space w/o degrading functionality. For maximum effect this should be used already on the first sync. If you add this option later the past data will only be pruned logically w/o shrinking the file size and the gain will be delayed.

If you already have unpruned blockchain, see the monero-blockchain-prune tool.

The drawback is that you will contribute less to Monero P2P network in terms of helping new nodes to sync up (up to 1/8 of normal contribution). You will still be useful regarding relaying new transactions and blocks though.
--sync-pruned-blocksAccept pruned blocks instead of pruning yourself. It should save network transfer when used with --prune-blockchain. See the commit and comments.
--db-sync-modeSpecify sync option, using format:
[safe|fast|fastest]:[sync|async]:[<nblocks_per_sync>[blocks]|<nbytes_per_sync>[bytes]]

The default is fast:async:250000000bytes.

The fast:async:* can corrupt blockchain database in case of a system crash. It should not corrupt if just monerod crashes. If you are concerned with system crashes use safe:sync.
--max-concurrencyMax number of threads to use for parallel jobs. The default value 0 uses the number of CPU threads.
--prep-blocks-threadsMax number of threads to use when computing block hashes (PoW) in groups. Defaults to 4. Decrease this if you don't want monerod hog your computer when syncing.
--fast-block-syncSync up most of the way by using embedded, "known" block hashes. Pass 1 to turn on and 0 to turn off. This is on (1) by default. Normally, for every block the full node must calculate the block hash to verify miner's proof of work. Because the CryptoNight PoW used in Monero is very expensive (even for verification), monerod offers skipping these calculations for old blocks. In other words, it's a mechanism to trust monerod binary regarding old blocks' PoW validity, to sync up faster.
--block-sync-sizeHow many blocks are processed in a single batch during chain synchronization. By default this is 20 blocks for newer history and 100 blocks for older history ("pre v4"). Default behavior is represented by value 0. Intuitively, the more resources you have, the bigger batch size you may want to try out. Example:
./monerod --block-sync-size=500
--bootstrap-daemon-addressThe host:port of a "bootstrap" remote open node that the connected wallets can use while this node is still not fully synced. Example:
./monerod --bootstrap-daemon-address=opennode.xmr-tw.org:18089. The node will forward selected RPC calls to the bootstrap node. The wallet will handle this automatically and transparently. Obviously, such bootstraping phase has privacy implications similar to directly using a remote node.
--bootstrap-daemon-loginSpecify username:password for the bootstrap daemon login (if required). This considers the RPC interface used by the wallet. Normally, open nodes do not require any credentials.
--no-syncDo not sync up. Continue using bootstrap daemon instead (if set). See commit.
-

Mining

-

The following options configure solo mining using CPU with the standard software stack monerod. This is mostly useful for:

-
    -
  • generating your stagenet or testnet coins
  • -
  • experimentation and learning
  • -
  • if you have super cheap access to vast CPU resources
  • -
-

Be advised though that real mining happens in pools and with high-end GPU-s instead of CPU-s.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--start-miningSpecify wallet address to mining for. This must be a standard address! It can be neither a subaddres nor integrated address.
--mining-threadsSpecify mining threads count. By default ony one thread will be used. For best results, set it to number of your physical cores.
--extra-messages-fileSpecify file for extra messages to include into coinbase transactions.
--bg-mining-enableEnable unobtrusive mining. In this mode mining will use a small percentage of your system resources to never noticeably slow down your computer. This is intended to encourage people to mine to improve decentralization. That being said chances of finding a block are diminishingly small with solo CPU mining, and even lesser with its unobtrusive version. You can tweak the unobtrusivness / power trade-offs with the further --bg-* options below.
--bg-mining-ignore-batteryIf true, assumes plugged in when unable to query system power status.
--bg-mining-min-idle-intervalSpecify min lookback interval in seconds for determining idle state.
--bg-mining-idle-thresholdSpecify minimum avg idle percentage over lookback interval.
--bg-mining-miner-targetSpecify maximum percentage cpu use by miner(s).
-

Testing Monero itself

-

These options are useful for Monero project developers and testers. Normal users shouldn't be concerned with these.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--keep-alt-blocksKeep alternative blocks on restart. May help with researching reorgs etc. Commit. Research project by noncesense research lab.
--test-drop-downloadFor net tests: in download, discard ALL blocks instead checking/saving them (very fast).
--test-drop-download-heightLike test-drop-download but discards only after around certain height. By default 0.
--regtestRun in a regression testing mode.
--keep-fakechainDon't delete any existing database when in fakechain mode.
--fixed-difficultyFixed difficulty used for testing. By default 0.
--test-dbg-lock-sleepSleep time in ms, defaults to 0 (off), used to debug before/after locking mutex. Values 100 to 1000 are good for tests.
--save-graphSave data for dr Monero.
-

Legacy

-

These options should no longer be necessary. They are still present in monerod for backwards compatibility.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
--ban-listSpecify ban list file, one IP address per line. This was introduced as an emergency measure to deal with large DDoS attacks on Monero p2p network in Dec 2020 / Jan 2021. Example:
./monerod --ban-list=block_tor.txt. Here is the popular block_tor.txt file.

It is not recommended to statically ban any IP addresses unless you absolutely need to. Banning IPs often excludes the most vulnerable users who are forced to operate entirely behind Tor or other anonymity networks.
--enable-dns-blocklistSimilar to --ban-list but instead of a static file uses dynamic IP blocklist available as DNS TXT entries. The DNS blocklist is centrally managed by Monero contributors. It is not recommended unless in emergency situations.
--fluffy-blocksRelay compact blocks. Default. Compact block is just a header and a list of transaction IDs.
--no-fluffy-blocksRelay classic full blocks. Classic block contains all transactions.
--show-time-statsOfficial docs say "Show time-stats when processing blocks/txs and disk synchronization" but it does not seem to produce any output during usual blockchain synchronization.
--zmq-rpc-bind-ipIP for ZMQ RPC server to listen on. By default 127.0.0.1. This is not yet widely used as ZMQ interface currently does not provide meaningful advantage over classic JSON-RPC interface.
--zmq-rpc-bind-portPort for ZMQ RPC server to listen on. By default 18082 for mainnet, 38082 for stagenet, and 28082 for testnet.
--zmq-pubAddress for ZMQ pub - tcp://ip:port or ipc://path
--db-typeSpecify database type. The default and only available: lmdb.
-

Commands

-

Commands give access to specific services provided by the daemon. -Commands are executed against the running daemon. -Their names follow the command_name pattern.

-

The following groups are only to make reference easier to follow. -The daemon itself does not group commands in any way.

-

See running for example usage. -You can also type commands directly in the console of the running monerod (if not detached).

-

Help, version, status

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
help [<command>]Show help for <command>.
versionShow version information. Example output:
Monero 'Boron Butterfly' (v0.14.0.0-release)
statusShow status. Example output:
Height: 186754/186754 (100.0%) on stagenet, not mining, net hash 317 H/s, v9, up to date, 8(out)+0(in) connections, uptime 0d 3h 48m 47s
-

P2P network

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
print_plShow the full peer list.
print_pl_statsShow the full peer list statistics (white vs gray peers). White peers are online and reachable. Grey peers are offline but your monerod remembers them from past sessions.
print_cnShow connected peers with connection initiative (incoming/outgoing) and other stats.
ban <IP> [<seconds>]Ban a given <IP> for a given amount of <seconds>. By default the ban is for 24h. Example:
./monerod ban 187.63.135.161.
unban <IP>Unban a given <IP>.
bansShow the currently banned IPs. Example output:
187.63.135.161 banned for 86397 seconds.
in_peers <max_number>Set the of incoming connections from other peers.
out_peers <max_number>Set the of outgoing connections to other peers.
limit [<kB/s>]Get or set the download and upload limit.
limit_down [<kB/s>]Get or set the download limit.
limit_up [<kB/s>]Get or set the upload limit.
-

Transaction pool

- - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
flush_txpool [<txid>]Flush specified transaction from transactions pool, or flush the whole transactions pool if was not provided.
print_poolPrint the transaction pool using a verbose format.
print_pool_shPrint the transaction pool using a short format.
print_pool_statsPrint the transaction pool's statistics (number of transactions, memory size, fees, double spend attempts etc).
-

Transactions

- - - - - - - - - - - - - - - - - - - - - -
OptionDescription
print_coinbase_tx_sum <start_height> [<block_count>]Show a sum of all emitted coins and paid fees within specified range. Example:
./monerod print_coinbase_tx_sum 0 1000000000000
print_tx <transaction_hash> [+hex] [+json]Show specified transaction as JSON and/or HEX.
relay_tx <txid>Force relaying the transaction. Useful if you want to rebroadcast the transaction for any reason or if transaction was previously created with "do_not_relay":true.
-

Blockchain

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
print_heightShow local blockchain height.
sync_infoShow blockchain sync progress and connected peers along with download / upload stats.
print_bc <begin_height> [<end_height>]Show blocks in range <begin_height>..<end_height>. The information will include block id, height, timestamp, version, size, weight, number of non-coinbase transactions, difficulty, nonce, and reward.
print_block <block_hash> | <block_height>Show detailed data of specified block.
hard_fork_infoShow current consensus version and future hard fork block height, if any.
is_key_image_spent <key_image>Check if specified key image is spent. Key image is a hash.
-

Manage daemon

- - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
exit, stop_daemonAsk daemon to exit gracefully. The exit and stop_daemon are identical (one is alias of the other).
set_log <level>|<{+,-,}categories>Set the current log level/categories where <level> is a number 0-4.
print_statusShow if daemon is running.
update (check|download)Check if update is available and optionally download it. The hash is SHA-256. On linux use sha256sum to verify. Example output:
Update available: v0.13.0.4: https://downloads.getmonero.org/cli/monero-linux-x64-v0.13.0.4.tar.bz2, hash 693e1a0210201f65138ace679d1ab1928aca06bb6e679c20d8b4d2d8717e50d6
Update downloaded to: /opt/monero-v0.13.0.2/monero-linux-x64-v0.13.0.4.tar.bz2
-

Mining

- - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
show_hrAsk monerod daemon to print current hash rate. Relevant only if monerod is mining.
hide_hrAsk monerod daemon to stop printing current hash rate. Relevant only if monerod is mining.
start_mining <addr> [<threads>] [do_background_mining] [ignore_battery]Ask moneroddaemon to start mining. Block reward will go to <addr>.
stop_miningAsk monerod daemon to stop mining.
-

Testing Monero itself

- - - - - - - - - - - - - - - - - -
OptionDescription
start_save_graphStart saving data for dr Monero.
stop_save_graphStop saving data for dr Monero.
-

Legacy

- - - - - - - - - - - - - - - - - -
OptionDescription
saveFlush blockchain data to disk. This is normally no longer necessary as monerod saves the blockchain automatically on exit.
output_histogram [@<amount>] <min_count> [<max_count>]Show number of outputs for each amount denomination. This was only relevant in the pre-RingCT era. The old wallet used this to determine which outputs can be used for the requested mixin. With RingCT denominations are irrelevant as amounts are hidden. More info in these SA answers.
- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/interacting/overview/index.html b/public/interacting/overview/index.html index 84bb4bc..38cc224 100644 --- a/public/interacting/overview/index.html +++ b/public/interacting/overview/index.html @@ -1,1027 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Interacting with Monero - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Interacting with Monero

-

You can interact with Monero via desktop GUI, commandline interface, and programming API.

-

On top of that, Monero nodes interact with each other in a peer-to-peer network.

-

Installation directory overview

-

Once unpacked you will see several executable files. You will also find a nice PDF guide for the GUI wallet.

-

Monero project nicely decouples network node logic from wallet logic. -Wallet logic is offered through three independent user interfaces - the GUI, the CLI, and the HTTP API.

-
# cd monero-gui-v0.17.1.9
+ Interacting with Monero - Monero Documentation      

Interacting with Monero

You can interact with Monero via desktop GUI, commandline interface, and programming API.

On top of that, Monero nodes interact with each other in a peer-to-peer network.

Installation directory overview

Once unpacked you will see several executable files. You will also find a nice PDF guide for the GUI wallet.

Monero project nicely decouples network node logic from wallet logic. Wallet logic is offered through three independent user interfaces - the GUI, the CLI, and the HTTP API.

# cd monero-gui-v0.17.1.9
 
 # ---- guide to Monero GUI ----
 
@@ -1052,242 +29,7 @@ extras/monero-blockchain-prune-known-spent-data
 extras/monero-blockchain-usage
 extras/monero-blockchain-ancestry
 extras/monero-blockchain-depth
-
-

Executables

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ExecutableDescription
monerodThe full node daemon. Does not require a wallet.
Documentation.
monero-wallet-guiWallet logic and graphical user interface.
Requires monerod running.
monero-wallet-cliWallet logic and commandline user interface.
Requires monerod running.
monero-wallet-rpcWallet logic and HTTP API (JSON-RPC protocol).
Requires monerod running.
monero-blockchain-prunePrune existing local blockchain. This saves 2/3 of disk space (down to 31GB as of Jan 2021). This is preferable over monerod --prune-blockchain which only logically releases space inside the file while the file remains large. The monero-blockchain-prune creates a shrinked copy of the blockchain file. See tutorial1, tutorial2.
monero-gen-ssl-certGenerate 4096 bit RSA private key and self signed TLS certificate for use with monerod RPC interface. Note, Monero daemon automatically generates TLS certificate on each restart. Manual generation with this tool is only useful if you want to pin TLS certificate fingerprint in your monero wallet. See the pull request.
monero-gen-trusted-multisigTool to generate a set of multisig wallets.
See chapter on multisignatures.
monero-blockchain-exportTool to export blockchain to blockchain.raw file.
monero-blockchain-importTool to import blockchain.raw - ideally your own trusted copy.
-

Executables - legacy

-

You most likely should not bother with these legacy or very specialized tools.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ExecutableDescription
monero-blockchain-statsGenerate stats like tx/day, blocks/day, bytes/day based on your local blockchain.
monero-blockchain-mark-spent-outputsAdvanced tool to mitigate potential privacy issues related to Monero forks. You normally shouldn't be concerned with that.
See the commit and pull request.
monero-blockchain-prune-known-spent-dataPrevious limited pruning tool to prune select "known spent" transaction outputs (from the before RCT era). Nowadays prefer monero-blockchain-prune. This only saves ~200 MB. See the commit.
monero-blockchain-usageAdvanced tool to mitigate potential privacy issues related to Monero forks. You normally shouldn't be concerned with that.
See the commit and the pull request.
monero-blockchain-ancestryAdvanced research tool to learn ancestors of a transaction, block or chain. Irrelevant for normal users. See this pull request.
monero-blockchain-depthAdvanced research tool to learn depth of a transaction, block or chain. Irrelevant for normal users. See this commit.
-

Interacting

-

There are quite a few ways you can interact with Monero software. -Perhaps the most surprising for newcomers is that monerod daemon accepts interactive keyboard commands while it is running.

-

Also, please note that HTTP API is split across monerod and monero-wallet-rpc. You need to run and call both daemons to explore the full API. -This follows the node-logic vs wallet-logic split mentioned earlier.

-

All wallet implementations depend on the monerod running.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Executablep2p networknode commands via keyboardnode HTTP APIwallet commands via keyboardwallet HTTP APIwallet via GUI
monerod
monero-wallet-cli
monero-wallet-rpc
monero-wallet-gui
-

Data directory

-

This is where the blockchain, log files, and p2p network memory are stored.

-

By default data directory is at:

-
    -
  • $HOME/.bitmonero/ on Linux and macOS
  • -
  • C:\ProgramData\bitmonero\ on Windows
  • -
-

Please mind:

-
    -
  • data directory is hidden as per OS convention
  • -
  • the bitmonero directory name is historical artefact from before Monero forked away from Bitmonero, about 2000 years Before Christ
  • -
-

Data directory contains:

-
    -
  • lmdb/ - the blockchain database directory
  • -
  • p2pstate.bin - saved memory of discovered and rated peers
  • -
  • bitmonero.log - log file
  • -
-

It can also contain subdirectories for stagenet and testnet, mirroring the same structure:

-
    -
  • stagenet/ - data directory for Stagenet
  • -
  • testnet/ - data directory for Testnet
  • -
- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/interacting/verify-monero-binaries/index.html b/public/interacting/verify-monero-binaries/index.html index 87c72ec..4a9d553 100644 --- a/public/interacting/verify-monero-binaries/index.html +++ b/public/interacting/verify-monero-binaries/index.html @@ -1,1024 +1,7 @@ - - - - - - - - - - - - - - - - - - - - - - - Verifying Monero Binaries Signature - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Verify Monero Binaries

-

Verification must be carried on before extracting the archive and before using Monero.

-

Instructions were tested on Linux. They should also work on macOS with slight modifications.

-

1. Import lead maintainer PGP key

-

This is a one time action. Skip this step for subsequent Monero releases.

-

Monero core developers sign a list of hashes of released binaries.

-

BinaryFate is Monero core developer who signs the releases. -His public key is available on GitHub in the project source code. -Import binaryFate's public key to your keyring:

-

curl https://raw.githubusercontent.com/monero-project/monero/master/utils/gpg_keys/binaryfate.asc | gpg --import

-

Trust binaryFate's public key (fingerprint must be exactly this):

-
gpg --edit-key '81AC591FE9C4B65C5806AFC3F0AF4D462A0BDF92'
+ Verifying Monero Binaries Signature - Monero Documentation      

Verify Monero Binaries

Verification must be carried on before extracting the archive and before using Monero.

Instructions were tested on Linux. They should also work on macOS with slight modifications.

1. Import lead maintainer PGP key

This is a one time action. Skip this step for subsequent Monero releases.

Monero core developers sign a list of hashes of released binaries.

BinaryFate is Monero core developer who signs the releases. His public key is available on GitHub in the project source code. Import binaryFate's public key to your keyring:

curl https://raw.githubusercontent.com/monero-project/monero/master/utils/gpg_keys/binaryfate.asc | gpg --import

Trust binaryFate's public key (fingerprint must be exactly this):

gpg --edit-key '81AC591FE9C4B65C5806AFC3F0AF4D462A0BDF92'
 trust
 4
-
-
-

Danger

-

If key with this fingerprint was not found then remove imported key immediately (gpg --delete-keys ...). -That would mean the key changed (likely was compromised).

-
-

2. Verify signature of hash list (hashes.txt)

-

The list of binaries and their hashes is published on getmonero.org and a few other places like release notes on r/monero. -Please note the publication channel does not matter as long as you properly verify the signature! u

-

To verify these are real hashes (not tampered with) run:

-

curl https://www.getmonero.org/downloads/hashes.txt | gpg --verify

-

The expected output should contain the line:

-

gpg: Good signature from "binaryFate <binaryfate@getmonero.org>"

-

3. Verify the hash

-

By this step we checked that published hashes were not tampered with.

-

The last step is to compare published hash with downloaded archive SHA-256 hash.

-

Download Monero if you didn't already (but do not unpack).

-

Replace the example file name with actual one:

-
file_name=monero-gui-linux-x64-v0.17.1.9.tar.bz2
+

Danger

If key with this fingerprint was not found then remove imported key immediately (gpg --delete-keys ...). That would mean the key changed (likely was compromised).

2. Verify signature of hash list (hashes.txt)

The list of binaries and their hashes is published on getmonero.org and a few other places like release notes on r/monero. Please note the publication channel does not matter as long as you properly verify the signature! u

To verify these are real hashes (not tampered with) run:

curl https://www.getmonero.org/downloads/hashes.txt | gpg --verify

The expected output should contain the line:

gpg: Good signature from "binaryFate <binaryfate@getmonero.org>"

3. Verify the hash

By this step we checked that published hashes were not tampered with.

The last step is to compare published hash with downloaded archive SHA-256 hash.

Download Monero if you didn't already (but do not unpack).

Replace the example file name with actual one:

file_name=monero-gui-linux-x64-v0.17.1.9.tar.bz2
 
 file_hash=`sha256sum $file_name | cut -c 1-64`
 
@@ -1029,84 +12,7 @@ gpg --verify /tmp/reference-hashes.txt
 
 # grep must print the hash (output cannot be empty)
 grep $file_hash /tmp/reference-hashes.txt
-
-
-

Danger

-

If the grep output is empty then double check everything because apparently the hashes don't match.

-
-

If grep printed filename and hash then everything is alright!

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/multisignature/index.html b/public/multisignature/index.html index e30fd8e..f0e5680 100644 --- a/public/multisignature/index.html +++ b/public/multisignature/index.html @@ -1,1207 +1,9 @@ - - - - - - - - - - - - - - - - - - - - - - - Multisignature - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Multisignature

-

In cryptocurrencies, multisig feature allows to sign a transaction with more than one private key. Funds protected with multisig can only be spent by signing with M-of-N keys.

-

Example use cases:

-
    -
  • shared account (1-of-2; both husband and wife individually have full access to their funds)
  • -
  • consensus account (2-of-2; both husband and wife must agree to spend their funds)
  • -
  • threshold account (2-of-3; an escrow service is involved as an independent 3rd party, to co-sign with either the seller, or with the buyer, if seller and buyer do not agree)
  • -
  • secure account (2-of-3; a single owner controlls all 3 keys but secures them via a different means to diversify risks)
  • -
  • arbitrary threshold account (M-of-N; some cryptocurrencies provide full flexibility on the number of signers)
  • -
-

Monero multisignature

-

Monero doesn't directly implement multisignatures (at least not in a classical sense). Monero emulates the feature by secret splitting.

-

Transactions are still signed with a single spend key. The spend key is a sum of all N private keys. The rationale for such design is to decouple multisig from ring signatures.

-

Let's consider the 2-of-3 scheme. We have 3 participants. Each participant is granted exactly 2 private keys in a way that pairs do not repeat between participants. This way any 2 participants together have all 3 private keys required to create the private spend key.

-

Multi-signing is a wallet-level feature. There is no way to learn from the blockchain which transactions were created using multiple signatures.

-

It is also worth noting in Monero there is no multisig addresses as such. Address structure does not care how the underlying private spend key got created.

-

After multisig wallet setup every participant ends up knowing the public address and private view key. This is necessary for participants to recognize and decipher transactions they are supposed to co-sign.

-

Multisig wallet setup

-

Multisig feature is only available via a command line wallet. You should be familiar with the CLI wallet before playing with multisig.

-

Let's consider a 2-of-3 scheme as it generalizes well.

-

0. Open your wallet

-

Access your (stagenet) wallet:

-
./monerod --stagenet --daemon                     # Run your full node; make sure it is fully synced    
+ Multisignature - Monero Documentation      

Multisignature

In cryptocurrencies, multisig feature allows to sign a transaction with more than one private key. Funds protected with multisig can only be spent by signing with M-of-N keys.

Example use cases:

  • shared account (1-of-2; both husband and wife individually have full access to their funds)
  • consensus account (2-of-2; both husband and wife must agree to spend their funds)
  • threshold account (2-of-3; an escrow service is involved as an independent 3rd party, to co-sign with either the seller, or with the buyer, if seller and buyer do not agree)
  • secure account (2-of-3; a single owner controlls all 3 keys but secures them via a different means to diversify risks)
  • arbitrary threshold account (M-of-N; some cryptocurrencies provide full flexibility on the number of signers)

Monero multisignature

Monero doesn't directly implement multisignatures (at least not in a classical sense). Monero emulates the feature by secret splitting.

Transactions are still signed with a single spend key. The spend key is a sum of all N private keys. The rationale for such design is to decouple multisig from ring signatures.

Let's consider the 2-of-3 scheme. We have 3 participants. Each participant is granted exactly 2 private keys in a way that pairs do not repeat between participants. This way any 2 participants together have all 3 private keys required to create the private spend key.

Multi-signing is a wallet-level feature. There is no way to learn from the blockchain which transactions were created using multiple signatures.

It is also worth noting in Monero there is no multisig addresses as such. Address structure does not care how the underlying private spend key got created.

After multisig wallet setup every participant ends up knowing the public address and private view key. This is necessary for participants to recognize and decipher transactions they are supposed to co-sign.

Multisig wallet setup

Multisig feature is only available via a command line wallet. You should be familiar with the CLI wallet before playing with multisig.

Let's consider a 2-of-3 scheme as it generalizes well.

0. Open your wallet

Access your (stagenet) wallet:

./monerod --stagenet --daemon                     # Run your full node; make sure it is fully synced    
 ./monero-wallet-cli --stagenet --wallet-file=...  # Run your wallet; make sure you have some funds to play with    
-
-

1. prepare_multisig

-

Every participant independently generates initialization data. This is not an address.

-

Every participant sends his initialization data manually to all other participants over secure channel.

-

2. make_multisig

-

Every participant applies initialization data from other participants. This results in a second round of initialization data. This is still not an address.

-

Every participants sends his second round of init data to all other participants over secure channel.

-

3. finalize_multisig

-

Every participant finalizes wallet creation by applying the second round of init data from all other participants. This finally results in a wallet public address and private view key to be known for all participants.

-

Please note actions are symmetric for all participants. Even though we considered a 2-of-3 scheme, every participant cooperates with everyone else. The secret splitting is performed internally by the wallet.

-

Secure sharing of initialization data between participants is manual. The wallet itself does not provide any secure communication channel. This is out of scope.

-

Receiving funds

-

Address built by multisig setup is like any other address.

-

You can generate integrated addresses and subaddresses based on it.

-

All participants are able to see incoming funds as they share the private view key.

-

With a CLI, use the following commands to see incoming payments:

-
address
+

1. prepare_multisig

Every participant independently generates initialization data. This is not an address.

Every participant sends his initialization data manually to all other participants over secure channel.

2. make_multisig

Every participant applies initialization data from other participants. This results in a second round of initialization data. This is still not an address.

Every participants sends his second round of init data to all other participants over secure channel.

3. finalize_multisig

Every participant finalizes wallet creation by applying the second round of init data from all other participants. This finally results in a wallet public address and private view key to be known for all participants.

Please note actions are symmetric for all participants. Even though we considered a 2-of-3 scheme, every participant cooperates with everyone else. The secret splitting is performed internally by the wallet.

Secure sharing of initialization data between participants is manual. The wallet itself does not provide any secure communication channel. This is out of scope.

Receiving funds

Address built by multisig setup is like any other address.

You can generate integrated addresses and subaddresses based on it.

All participants are able to see incoming funds as they share the private view key.

With a CLI, use the following commands to see incoming payments:

address
 refresh
 show_transfers
-
-

Spending funds

-

TODO

-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/proof-of-work/cryptonight/index.html b/public/proof-of-work/cryptonight/index.html index 937d404..90e9036 100644 --- a/public/proof-of-work/cryptonight/index.html +++ b/public/proof-of-work/cryptonight/index.html @@ -1,1394 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - CryptoNight - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - - - - -
-
- - - - - - - -

CryptoNight

-
-

CryptoNight is a memory hard hash function

-
-

Background

-

CryptoNight was originally designed around 2013 as part of the CryptoNote suite.

-

One design goal was to make it very friendly for the off-the-shelf CPU-s, by employing:

-
    -
  • native AES encryption
  • -
  • fast 64 bit multipliers
  • -
  • scratchpad fitting exactly the size of the per-core L3 cache on Intel CPUs (about 2MB)
  • -
-

More ambitious design goal was to make it inefficiently computable on ASIC-s. -This goal has since failed, as it inevitably happens with "ASIC hard" algorithms. -Efficient CryptoNight ASIC was developed in 2017 by Bitmain.

-

Monero inherited CryptoNight as its proof of work in 2014. -Since then Monero slightly evolved the algorithm to intentionally break compatibility with released ASIC-s. -Currently Monero implements CryptoNight v2, a third iteration of original CryptoNight (v0, v1, v2).

-

The goal is to find small-enough hash

-

In hashing based PoW algorithms the goal is to find small-enough hash.

-

Hash is simply an integer (normally, a very large integer). -Most hashing functions result in 256-bit hashes (integers between 0 and 2^256). -This includes Bitcoin's double-SHA-256 and Monero's CryptoNight.

-

Miner randomly tweaks input data until the hash fits under specified threshold. -The threshold (also a large integer) is established collectively by the network as part of the consensus mechanism. -The PoW is only considered valid (solved) if hash fits under the threshold.

-

Because hash functions are one-way, it is not possible to analytically calculate input data that would result in a small-enough hash. -The solution must be brute-forced by tweaking the input data and recalculating the hash over and over again.

-

Miners have a few areas of flexibility regarding input data - most importantly they can iterate with the nonce value. -They also have a power over which transactions are included in the block and how they are put together in a merkle tree.

-

Cryptographic primitives

-

CryptoNight is based on:

-
    -
  • AES encryption
  • -
  • 5 hashing functions, all of which were finalists in NIST SHA-3 competition:
      -
    • Keccak (the primary one)
    • -
    • BLAKE
    • -
    • Groestl
    • -
    • JH
    • -
    • Skein
    • -
    -
  • -
-

Input data

-

In Monero the input to hashing function is concatenation of:

-
    -
  • serialized block header (around 46 bytes; subject to varint representation)
  • -
  • merkle tree root (32 bytes)
  • -
  • number of transactions included in the block (around 1-2 bytes; subject to varint representation)
  • -
-

See get_block_hashing_blob() function to dig further.

-

Algorithm

-
-

Warning

-

The article attempts to give reader a high-level understanding of the CryptoNight algorithm. -For implementation details refer to CryptoNote Standard and Monero source code. -See references at the bottom.

-
-

Overview

-

CryptoNight attempts to make memory access a bottleneck for performance ("memory hardness"). It has three steps:

-
    -
  1. Initialize large area of memory with pseudo-random data. This memory is known as the scratchpad.
  2. -
  3. Perform numerous read/write operations at pseudo-random (but deterministic) addresses on the scratchpad.
  4. -
  5. Hash the entire scratchpad to produce the resulting value.
  6. -
-

Step 1: scratchpad initialization

-

Firstly, the input data is hashed with Keccak-1600. This results in 200 bytes of pseudorandom data (1600 bits == 200 bytes).

-

These 200 bytes become a seed to generate a larger, 2MB-wide buffer of pseudorandom data, -by applying AES-256 encryption.

-

The first 0..31 bytes of Keccak-1600 hash are used as AES key.

-

The encryption is performed on 128 bytes-long payloads until 2MB is ready. -The first payload are Keccak-1600 bytes 66..191. -The next payload is encryption result of the previous payload.

-

Each 128-byte payload is actually encrypted 10 times.

-

The details are a bit more nuanced, see "Scratchpad Initialization" in CryptoNote Standard.

-

Step 2: memory-hard loop

-

The second step is basically 524288 iterations of a simple stateful algorithm.

-

Each algorithm iteration reads from and writes back to the scratchpad, -at pseudorandom-but-deterministic locations.

-

Critically, next iteration depends on the state prepared by previous iterations. -It is not possible to directly calculate state of future iterations.

-

The specific operations include AES, XOR, 8byte_mul, 8byte_add - operations that are CPU-friendly (highly optimized on modern CPU-s).

-

The goal here is to make memory latency the bottleneck in attempt to close the gap between potential ASIC-s and general purpose CPU-s.

-

Step 3: hashing

-

The final step (simplifying) is to:

-
    -
  • combine original Keccak-1600 output with the whole scratchpad
  • -
  • pick the hashing algorithm based on 2 low-order bits of the result
      -
    • 0=BLAKE-256
    • -
    • 1=Groestl-256
    • -
    • 2=JH-256
    • -
    • 3=Skein-256
    • -
    -
  • -
  • hash the result with selected function
  • -
-

The resulting 256-bit hash is the final output of CryptoNight algorithm.

-

Monero specific modifications

-

CryptoNight v0

-

This is how Monero community refers to original implementation of CryptoNight.

-

CryptoNight v1

-

See the source code diff.

-

CryptoNight v2

-

See the rationale and the source code diff.

-

CryptoNight v3 aka CryptoNightR

-

See the rationale and the source code diff.

-

Critique

-
    -
  • CryptoNight hash is relatively expensive to verify. This poses a risk of DoS-ing nodes with incorrect proofs to process. See strong asymmetry requirement.
  • -
  • The hash function was designed from scratch with limited peer review. While CryptoNight is composed of proven and peer-reviewed primitives, combining secure primitives doesn't necessarily result in a secure cryptosystem.
  • -
  • CryptoNight ultimately failed to prevent ASIC-s.
  • -
  • Complexity of CryptoNight kills competition in ASIC manufacturing.
  • -
-

CryptoNight proof of work remains one of the most controversial aspect of Monero.

-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/proof-of-work/pow-in-cryptocurrencies/index.html b/public/proof-of-work/pow-in-cryptocurrencies/index.html index f2fa9eb..34ac868 100644 --- a/public/proof-of-work/pow-in-cryptocurrencies/index.html +++ b/public/proof-of-work/pow-in-cryptocurrencies/index.html @@ -1,1074 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Proof of Work in Cryptocurrencies - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Proof of Work in Cryptocurrencies

-
-

Proof of work is a Sybil protection mechanism

-
-

PoW protects against Sybil attack

-

In decentralized cryptocurrencies untrusted actors confirm (blocks of) transactions.

-

If threshold voting was employed then the scheme would break immediately. -This is because nothing prevents a single actor from creating arbitrary number of pseudonyms and take over the voting. -In distributed systems this is known as Sybil attack.

-

Instead, cryptocurrencies employ proof of work. In the proof of work scheme, -it is not the number of actors that counts. It is the amount of committed -computational resources.

-

This, of course, is much harder to game. -To endanger the scheme, an attacker would have to actually control majority (>50%) of computational resources. -In practice, attacker would need this control over significant period of time.

-

PoW is a leader election mechanism

-

In distributed systems "leader election" is a process of establishing which node is responsible for (temporarily) coordinating the system.

-

In cryptocurrencies PoW is used to elect the node that "wins" the next block.

-

Using PoW for leader election was one of the key inventions introduced by Bitcoin.

-

Competing nodes (known as "miners") work on a solution to artificial problem. -Every now and then, someone randomly finds the solution. -Chances are linearly proportional to committed computing power.

-

The winner uses its solution to "underwrite" the block it assembled. Only blocks with valid solutions are accepted by the network.

-

The winner also gets a reward for its work. The reward is a specific amount of cryptocurrency created "out of thin air" and assigned to self. The winner also gets all fees coming from transactions included in the block.

-

The difficulty of the PoW problem is dynamically adjusted by the network, with the goal of finding blocks with a roughly constant rate (typically, every couple of minutes).

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/proof-of-work/random-x/index.html b/public/proof-of-work/random-x/index.html index 10e10d6..91f8b97 100644 --- a/public/proof-of-work/random-x/index.html +++ b/public/proof-of-work/random-x/index.html @@ -1,993 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - RandomX - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

RandomX

-

For general information about RandomX you can read this article.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/proof-of-work/what-is-pow/index.html b/public/proof-of-work/what-is-pow/index.html index d1ef0d5..e0042e1 100644 --- a/public/proof-of-work/what-is-pow/index.html +++ b/public/proof-of-work/what-is-pow/index.html @@ -1,1098 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Proof of Work - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
- -
- - -
-
- - - - - - - -

Proof of Work

-
-

Proof of work is a way to legitimize untrusted party

-
-

What exactly is proof of work?

-

Proof of work is a cryptographic proof that untrusted party committed significant computational resources to solve artificial problem.

-

Technically, the "proof" is simply a solution to the problem at hand.

-

It's all about legitimizing untrusted party

-

How an untrusted party on the Internet could earn any level of your trust?

-

It can prove its commitment by solving agreed computationally hard problem.

-

For example, by requiring untrusted party to perform a hard computation before you accept their connection, you limit connections only to "committed" parties.

-

In another example, you could require PoW to be attached to incoming e-mails to make spam prohibitively expensive.

-

Work must be otherwise useless

-

The work on and solution to "computationally hard problem" cannot be useful in any other way than to prove the commitment.

-

If the work is useful elsewhere then it doesn't prove commitment to you.

-

The problem must be artificial. Otherwise incentives are skewed and the whole scheme breaks.

-

Strong asymmetry

-

The requirement for proof of work scheme is strong asymmetry for work vs verification resources.

-

The work must be arbitrarily hard. At the same time proof verification must remain dirt cheap (in terms of computational resources).

-

Cheap verification is critical because at this stage we are dealing with potentially huge number of untrusted parties, -who could DoS the verifier by submitting invalid proofs. Such proofs should be trivial to discard.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/public-address/integrated-address/index.html b/public/public-address/integrated-address/index.html index cb0af24..d46cb40 100644 --- a/public/public-address/integrated-address/index.html +++ b/public/public-address/integrated-address/index.html @@ -1,1142 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Integrated Address - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Integrated Address

-

Integrated addresses are ideal for accepting Monero in an automated fashion - like in online stores and exchanges.

-

Monero integrated address embeds a payment ID. This allows you to learn for what you are being paid.

-

Please note these are Monero technical payment IDs and must not be confused with business identifiers like order number or invoice number.

-

The transaction to integrated address will not reveal the payment ID publicly. -Payment ID in a transaction will be encrypted with a shared secret (one-time random key known only to sender and recipient). -Only the recipient will be able to match the transaction against payment ID.

-

Monero integrated address obsoletes the former practice of using full 32-bytes payment ID in a transaction extra field (where it was not encrypted).

-

Data structure (src):

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IndexSize in bytesDescription
01identifies the network and address type; 19 - main chain; 54 - test chain
132public spend key
3332public view key
658compact payment ID - 8 bytes randomly generated by the recipient; note that it does not need encryption in the address itself but it is hidden in a transaction paying to integrated address to prevent linking payment with the address by external observers
734checksum (Keccak-f[1600] hash of the previous 73 bytes, trimmed to first 4 bytes)
-

It totals to 77 bytes. The bytes are then encoded (src) in Monero specific Base58 format, resulting in a 106 chars long string. Example integrated address:

-

4LL9oSLmtpccfufTMvppY6JwXNouMBzSkbLYfpAV5Usx3skxNgYeYTRj5UzqtReoS44qo9mtmXCqY45DJ852K5Jv2bYXZKKQePHES9khPK

-

Integrated addresses vs subaddresses

-

Both types allow you to learn for what you are being paid.

-

Individuals should prefer subaddresses to receive payments. This is to improve privacy in certain scenarios. See article on subaddresses for details.

-

Businesses accepting payments in an automated way should prefer integrated addresses. The rationale is as follows:

-
    -
  • -

    Scenario where subaddresses improve privacy is not applicable to businesses b/c businesses have the same identity over time. Consequently, subaddresses provide no benefits over integrated addresses.

    -
  • -
  • -

    No private key is necessary to generate integrated address. This provides a strong security advantage because services that generate integrated addresses need no access to wallet. In contrast, to generate a subaddress, one needs a private view key.

    -
  • -
  • -

    No shared counter is necessary to generate integrated address. This allows individual services to independently generate integrated addresses w/o synchronizing on a common sequence. In contrast, subaddresses are generated sequentially, and so the sequence (the counter or index) is a coupling point between the wallet and all services that need to generate the address. Back to integrated addresses, note that embedded payment IDs are 64-bit. This means the space is large enough that one can simply generate them randomly and reliably assume uniqueness.

    -
  • -
  • -

    In very specific scenarios, preparation effort to monitor a very huge number of subaddresses, could became an issue. See this reddit thread for details.

    -
  • -
-

Caveats

-

There are some caveats:

-
    -
  • -

    Single transaction cannot pay to multiple integrated addresses.

    -
  • -
  • -

    As individual running a wallet you should generally prefer subaddresses. However, if you happen to use integrated addresses, you should allow Monero software to generate integrated addresses for you (instead of forcing your own payment IDs).

    -
  • -
-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/public-address/main-address/index.html b/public/public-address/main-address/index.html index 6a64f15..28b12b7 100644 --- a/public/public-address/main-address/index.html +++ b/public/public-address/main-address/index.html @@ -1,927 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Main address - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
- - - - - - - -

Main address

- - - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/public-address/standard-address/index.html b/public/public-address/standard-address/index.html index 8396249..d968325 100644 --- a/public/public-address/standard-address/index.html +++ b/public/public-address/standard-address/index.html @@ -1,1145 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Standard Address - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Address

-

Monero public address is what you publish to get paid.

-

An address can be generated offline and for free. It boils down to generating a large random number representing your private spending key.

-

Publishing your Monero address does not endanger your privacy. That's because in Monero transactions go to stealth addresses which are decoupled from your public address.

-

There are a few types of public addresses in Monero:

-
    -
  • Standard address - basic type of an address, also referred to as raw address
  • -
  • Subaddress - what you should be using by default
  • -
  • Integrated address - relevant for exchanges, merchants, and other businesses accepting Monero in a fully automated way
  • -
-

Standard address

-

Historically, raw address was the only available option. For that reason it is the most widely adopted and supported address type.

-

Its strength is simplicity. However, these days users should prefer receiving to subaddresses instead.

-

Technically, raw address is also a basis for creating subaddresses and integrated addresses.

-

Raw address is still useful for:

-
    -
  • accepting block reward in a solo-mining scenario as other addresses are not supported
  • -
  • accepting from senders who batch payouts (like mining pools); in this scenario the sender is paying multiple parties using a single transaction; such transaction has multiple outputs; subaddresses do not work in this scenario
  • -
  • accepting from senders who use legacy wallets (can't send to subaddress)
  • -
-

Monero raw address is composed of two public keys:

-
    -
  • public spend key
  • -
  • public view key
  • -
-

It also contains a checksum and a "network byte" which actually identifies both the network and the address type.

-

Data structure

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IndexSize in bytesDescription
01identifies the network and address type; 18 - main chain; 53 - test chain
132public spend key
3332public view key
654checksum (Keccak-f[1600] hash of the previous 65 bytes, trimmed to first 4 bytes)
-

It totals to 69 bytes. The bytes are then encoded (src) in Monero specific Base58 format, resulting in a 95 chars long string. Example standard address:

-

4AdUndXHHZ6cfufTMvppY6JwXNouMBzSkbLYfpAV5Usx3skxNgYeYTRj5UzqtReoS44qo9mtmXCqY45DJ852K5Jv2684Rge

-

See the source code.

-

Generating

-

Standard address is derived from the root private key. TODO.

-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/public-address/subaddress/index.html b/public/public-address/subaddress/index.html index 91da361..e672213 100644 --- a/public/public-address/subaddress/index.html +++ b/public/public-address/subaddress/index.html @@ -1,1330 +1,7 @@ - - - - - - - - - - - - - - - - - - - - - - - Subaddress - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - - - - -
-
- - - - - - - -

Subaddress

-

Subaddress is what you should be using by default to receive Monero.

-

Learn for what you are being paid

-

By providing a unique subaddress for each anticipated payment you will know for what you are being paid.

-

This use case overlaps with integrated addresses. Subaddresses are generally prefered for reasons outlined below.

-

Prevent payer from linking your payouts together

-

To prevent the payer from linking your payouts together simply generate a new subaddress for each payout. -This way specific service (like anonymous exchange) that sends you Monero won't (easilly) know it is you again receving Monero.

-

The exception to this is when a service (or group of colluding services) decides to actively attack you, one address at the time, with the so cold Janus attack, which risks them losing funds. If you need perfect unlinkability of your receivables, the only solution remains to use a separate seed (separate Monero wallet).

-

Also, note it won't help if you have an account with the service. Then your payouts are already linked in the service database, regardless of Monero.

-

Group funds into accounts

-

Accounts are a convenience wallet-level feature to group subaddresses under one label and balance.

-

You may want to organize your funds into accounts like "cash", "work", "trading", "mining", "donations", etc.

-

As accounts are only groupings of subaddresses, they themselves do not have an address.

-

Accounts are deterministically derived from the root private key along with subaddresses.

-

Accounts are similar to subaccounts in your classic bank account. There is a very important difference though. In Monero funds don't really sit on accounts or public addresses. Public addresses are conceptually a gateway or a routing mechanism. Funds sit on transactions' unspent outputs. Thus, a single transaction can - in principle - aggregate and spend outputs from multiple addresses (and by extension from multiple accounts). The CLI or GUI wallet may not directly support creating such transactions for simplicity.

-

In short, think of accounts as a soft grouping of your funds.

-

Why not multiple wallets?

-

The advantage over creating multiple wallets is that you only have a single seed to manage. -All subaddresses can be derived from the wallet seed.

-

Additionally, you conveniently manage your subaddresses within a single user interface.

-

Wallet level feature

-

Subaddresses and accounts are a wallet-level feature to construct and interpret transactions. They do not affect the consensus.

-

Data structure

-

Subaddress has a dedicated "network byte":

- - - - - - - - - - - - - - - -
IndexSize in bytesDescription
01identifies the network and address type; 42 - mainnet; 36 - stagenet; 63 - testnet
-

Otherwise the data structure is the same as for the standard address.

-

Generating

-

Each subaddress conceptually has:

-
    -
  • account index (also known as "major" index)
  • -
  • subaddress index within the account (also known as "minor" index)
  • -
-

The indexes are 0-based. By default wallets use account index 0.

-

The indexes are not directly included in the subaddress data structure. -Instead, they are used as input to generating subaddress keys.

-

Private view key

-

A per-subaddress scalar m is derived as follows:

-
m = Hs("SubAddr" || a || account_index || subaddress_index_within_account)
-
-

Where:

-
    -
  • Hs is a Keccak-256 hash function interpreted as integer and modulo l (maximum edwards25519 scalar)
  • -
  • || is a byte array concatenation operator
  • -
  • SubAddr is a 0-terminated fixed string (8 bytes total)
  • -
  • a is a private view key of the standard address (a 32 byte little endian unsigned integer)
  • -
  • account_index is index of an account (a 32 bit little endian unsigned integer)
  • -
  • subaddress_index_within_account is index of the subaddress within the account (a 32 bit little endian unsigned integer)
  • -
-

Deriving "sub view keys" from the main view key allows for creating a view only wallet that monitors the entire wallet including subaddresses.

-

Public spend key

-

The subaddress public spend key D is derived as follows:

-
D = B + m*G
-
-

Where:

-
    -
  • B is standard address public spend key
  • -
  • m is a per-subaddress scalar that is derived from the private spend key
  • -
  • G is the "base point"; this is simply a constant specific to edwards25519
  • -
-

Public view key

-

The subaddress public view key C is derived as follows:

-
C = a*D
-
-

Where:

-
    -
  • a is a private view key of the standard address
  • -
  • D is a public spend key of the subaddress
  • -
-

Special case for (0, 0)

-

The subaddress #0 on the account #0 is the standard address. -As standard address has different generation rules, this is simply implemented via an if statement.

-

Building the address string

-

The procedure is the same as for the standard address.

-

Caveats

-
    -
  • It is not recommended to sweep all the balances of subaddress to standard address in a single transaction. That links the subaddresses together on the blockchain. However, this only concerns privacy against specific sender and the situation will never get worse than not using subaddresses in the first place. If you need to join funds while preserving maximum privacy do it with individual transactions (one per subaddress).
  • -
  • Convenience labels are not preserved when recreating from seed.
  • -
-

Reference

- - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/r/accepting-monero-comparison-matrix/index.html b/public/r/accepting-monero-comparison-matrix/index.html index 93840b5..42ff28d 100644 --- a/public/r/accepting-monero-comparison-matrix/index.html +++ b/public/r/accepting-monero-comparison-matrix/index.html @@ -1,927 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Accepting monero comparison matrix - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
- - - - - - - -

Accepting monero comparison matrix

- - - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/running-node/open-node-tor-onion/index.html b/public/running-node/open-node-tor-onion/index.html index 1641baa..b27a46f 100644 --- a/public/running-node/open-node-tor-onion/index.html +++ b/public/running-node/open-node-tor-onion/index.html @@ -1,1357 +1,96 @@ - - - - - - - - - - - - - - - - - - - - - - - Running Monero Open Node with Tor Onion Support - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Running Monero Open Node + Tor Onion

-
-

Powerful setup

-

This is great contribution to Monero network and also a pretty sophisticated personal setup. If you are a beginner, you don't need this.

-
-
-

The end goal

-

You will publicly offer the following services, where xxx.yyy.zzz.vvv is your server IP address.

-
    -
  • xxx.yyy.zzz.vvv:18080 - clearnet P2P service (for other nodes)
  • -
  • xxx.yyy.zzz.vvv:18081 - clearnet RPC service (for wallets)
  • -
  • yourlongv3onionaddress.onion:18083 - onion P2P service (for other onion nodes)
  • -
  • yourlongv3onionaddress.onion:18081 - onion RPC service (for wallets connecting over Tor)
  • -
-

Why different P2P ports for clearnet and onion? This is a monerod requirement.

-
-
-

Broadcasting bad transactions from your IP

-

As with any public data broadcast or relay service, "bad traffic" or in this case "bad transactions" may appear to originate from your server IP address from an outside observer perspective - even though they really originate from a remote wallet user. This is a potential risk you need to keep in mind.

-
-

Why run this specific setup?

-

You will be able to connect your desktop and mobile Monero wallets to your own trusted Monero node, -in a secure and private way over Tor. Your node will be always ready w/o delays (always synced up, contrary to intermittently running node on a laptop).

-

Serving blocks and transactions in Monero P2P network helps new users to bootstrap and sync up their nodes. -It also strenghtens Monero P2P network against DDoS attacks and network partitioning.

-

Open wallet inteface (the "RPC") allows anyone to connect their wallets to Monero network through your node. -This is useful for beginner users who don't run their own nodes yet.

-

Tor onion for wallet interface is useful for wallet users connecting over Tor because it mitigates Tor exit nodes MiTM risks (which are very real). By connecting wallet to an onion service, no MiTM attack is realistic because within the Tor network connections are end-to-end TLS-ed.

-

Tor onion for P2P network is useful for other full node users as it allows them to broadcast transactions over Tor (using --tx-proxy option).

-

Assumptions

-

You understand basic Linux administration. You seek Monero specific guidance.

-

You have root access to a Linux server with 2GB+ RAM and 120GB+ SSD (or 50GB+ for the pruned node version). This is current for Jan 2021.

-

Some commands assume Ubuntu but you will easily translate them to your distribution.

-

Install Tor

-

Install Tor.

-

Modify /etc/tor/torrc as shown below.

-

Enable tor service with systemctl enable tor and restart it via systemctl restart tor

-

Verify the Tor is up systemctl status tor@default

-

A fresh onion address and corresponding key pair got created for you by the tor daemon in /var/lib/tor/monero/. You may want to backup these to secure control over your onion address. This happens on restart whenever you add new HiddenServiceDir to torrc config.

-

Monero daemon itself is not necessary at this point. The onion services (AKA hidden services) will just wait until localhost monerod shows up at specified ports 18081 and 18083.

-

/etc/tor/torrc

-
HiddenServiceDir /var/lib/tor/monero
-HiddenServicePort 18081 127.0.0.1:18081    # interface for wallet ("RPC")
-HiddenServicePort 18083 127.0.0.1:18083    # interface for P2P network
-
-
How Tor onion services work?

The tor daemon will simply pass over the traffic from virtual onion port to actual localhost port, where some service is listening (in our case, this will be monerod). A single onion address can offer multiple services at various virtual ports. We will use this to expose both P2P and RPC monerod services on a single onion. You could host any number of onion addresses at single server or IP address but we won't need that here.

-
-

Install Monero

-

Create monero user and group useradd --system monero

-

Create monero binaries directory (empty for now) mkdir -p /opt/monero and chown -R monero:monero /opt/monero

-

Create monero data directory mkdir -p /srv/monero and chown -R monero:monero /srv/monero

-

Create monero log directory mkdir -p /var/log/monero and chown -R monero:monero /var/log/monero

-

Feel free to adjust above to your preferred conventions, just remember to adjust the paths accordingly.

-

Download and verify the file.

-

Extract tar -xf monero-linux-x64-v0.17.1.9.tar.bz2 (adjust filename).

-

Move binaries to /opt/monero/ with mv monero-x86_64-linux-gnu-v0.17.1.9/* /opt/monero/ then chown -R monero:monero /opt/monero

-

Create /etc/monero.conf as shown below and paste your values in placeholders.

-

Create /etc/systemd/system/monero.service as shown below.

-

Enable monero service with systemctl enable monero and restart it with systemctl restart monero

-

Verify it is up systemctl status monero

-

Verify it is working as intended tail -n100 /var/log/monero/monero.log

-

/etc/monero.conf

-

This is just an example configuration and it is by no means authoritative. Feel free to modify, see monerod reference.

-

Modify paths if you changed them.

-

Print your onion address with cat /var/lib/tor/monero/hostname and paste it to anonymous-inbound option.

-
# /etc/monero.conf
-# 
-# Configuration file for monerod. For all available options see the MoneroDocs:
-# https://monerodocs.org/interacting/monerod-reference/
-
-# Data directory (blockchain db and indices)
+ Running Monero Open Node with Tor Onion Support - Monero Documentation      

Running Monero Open Node + Tor Onion

Powerful setup

This is great contribution to Monero network and also a pretty sophisticated personal setup. If you are a beginner, you don't need this.

The end goal

You will publicly offer the following services, where xxx.yyy.zzz.vvv is your server IP address.

  • xxx.yyy.zzz.vvv:18080 - clearnet P2P service (for other nodes)
  • xxx.yyy.zzz.vvv:18081 - clearnet RPC service (for wallets)
  • yourlongv3onionaddress.onion:18083 - onion P2P service (for other onion nodes)
  • yourlongv3onionaddress.onion:18081 - onion RPC service (for wallets connecting over Tor)

Why different P2P ports for clearnet and onion? This is a monerod requirement.

Broadcasting bad transactions from your IP

As with any public data broadcast or relay service, "bad traffic" or in this case "bad transactions" may appear to originate from your server IP address from an outside observer perspective - even though they really originate from a remote wallet user. This is a potential risk you need to keep in mind.

Why run this specific setup?

You will be able to connect your desktop and mobile Monero wallets to your own trusted Monero node, in a secure and private way over Tor. Your node will be always ready w/o delays (always synced up, contrary to intermittently running node on a laptop).

Serving blocks and transactions in Monero P2P network helps new users to bootstrap and sync up their nodes. It also strenghtens Monero P2P network against DDoS attacks and network partitioning.

Open wallet inteface (the "RPC") allows anyone to connect their wallets to Monero network through your node. This is useful for beginner users who don't run their own nodes yet.

Tor onion for wallet interface is useful for wallet users connecting over Tor because it mitigates Tor exit nodes MiTM risks (which are very real). By connecting wallet to an onion service, no MiTM attack is realistic because within the Tor network connections are end-to-end TLS-ed.

Tor onion for P2P network is useful for other full node users as it allows them to broadcast transactions over Tor (using --tx-proxy option).

Assumptions

You understand basic Linux administration. You seek Monero specific guidance.

You have root access to a Linux server with 2GB+ RAM and 120GB+ SSD (or 50GB+ for the pruned node version). This is current for Jan 2021.

Some commands assume Ubuntu but you will easily translate them to your distribution.

Install Tor

Install Tor.

Modify /etc/tor/torrc as shown below.

Enable tor service with systemctl enable tor and restart it via systemctl restart tor

Verify the Tor is up systemctl status tor@default

A fresh onion address and corresponding key pair got created for you by the tor daemon in /var/lib/tor/monero/. You may want to backup these to secure control over your onion address. This happens on restart whenever you add new HiddenServiceDir to torrc config.

Monero daemon itself is not necessary at this point. The onion services (AKA hidden services) will just wait until localhost monerod shows up at specified ports 18081 and 18083.

/etc/tor/torrc

HiddenServiceDir /var/lib/tor/monero
+HiddenServicePort 18081 127.0.0.1:18081    # interface for wallet ("RPC")
+HiddenServicePort 18083 127.0.0.1:18083    # interface for P2P network
+
How Tor onion services work?

The tor daemon will simply pass over the traffic from virtual onion port to actual localhost port, where some service is listening (in our case, this will be monerod). A single onion address can offer multiple services at various virtual ports. We will use this to expose both P2P and RPC monerod services on a single onion. You could host any number of onion addresses at single server or IP address but we won't need that here.

Install Monero

Create monero user and group useradd --system monero

Create monero binaries directory (empty for now) mkdir -p /opt/monero and chown -R monero:monero /opt/monero

Create monero data directory mkdir -p /srv/monero and chown -R monero:monero /srv/monero

Create monero log directory mkdir -p /var/log/monero and chown -R monero:monero /var/log/monero

Feel free to adjust above to your preferred conventions, just remember to adjust the paths accordingly.

Download and verify the file.

Extract tar -xf monero-linux-x64-v0.17.1.9.tar.bz2 (adjust filename).

Move binaries to /opt/monero/ with mv monero-x86_64-linux-gnu-v0.17.1.9/* /opt/monero/ then chown -R monero:monero /opt/monero

Create /etc/monero.conf as shown below and paste your values in placeholders.

Create /etc/systemd/system/monero.service as shown below.

Enable monero service with systemctl enable monero and restart it with systemctl restart monero

Verify it is up systemctl status monero

Verify it is working as intended tail -n100 /var/log/monero/monero.log

/etc/monero.conf

This is just an example configuration and it is by no means authoritative. Feel free to modify, see monerod reference.

Modify paths if you changed them.

Print your onion address with cat /var/lib/tor/monero/hostname and paste it to anonymous-inbound option.

# /etc/monero.conf
+# 
+# Configuration file for monerod. For all available options see the MoneroDocs:
+# https://monerodocs.org/interacting/monerod-reference/
+
+# Data directory (blockchain db and indices)
 data-dir=/srv/monero
 
 # Optional prunning
-# prune-blockchain=1           # Pruning saves 2/3 of disk space w/o degrading functionality but contributes less to the network
-# sync-pruned-blocks=1         # Allow downloading pruned blocks instead of prunning them yourself
+# prune-blockchain=1           # Pruning saves 2/3 of disk space w/o degrading functionality but contributes less to the network
+# sync-pruned-blocks=1         # Allow downloading pruned blocks instead of prunning them yourself
 
-check-updates=disabled         # Do not check DNS TXT records for a new version
+check-updates=disabled         # Do not check DNS TXT records for a new version
 
-# Log file
+# Log file
 log-file=/var/log/monero/monero.log
-log-level=0                    # Minimal logs, WILL NOT log peers or wallets connecting
-max-log-file-size=2147483648   # Set to 2GB to mitigate log trimming by monerod; configure logrotate instead
+log-level=0                    # Minimal logs, WILL NOT log peers or wallets connecting
+max-log-file-size=2147483648   # Set to 2GB to mitigate log trimming by monerod; configure logrotate instead
 
-# P2P full node
-p2p-bind-ip=0.0.0.0            # Bind to all interfaces (the default)
-p2p-bind-port=18080            # Bind to default port
+# P2P full node
+p2p-bind-ip=0.0.0.0            # Bind to all interfaces (the default)
+p2p-bind-port=18080            # Bind to default port
 
-# RPC open node
-public-node=1                  # Advertise to other users they can use this node as a remote one for connecting their wallets
-confirm-external-bind=1        # Open Node (confirm)
-rpc-bind-ip=0.0.0.0            # Bind to all interfaces (the Open Node)
-rpc-bind-port=18081            # Bind to default port (the Open Node)
-restricted-rpc=1               # Obligatory for Open Node interface
-no-igd=1                       # Disable UPnP port mapping
-no-zmq=1                       # Disable ZMQ RPC server to decrease attack surface (it's not used)
+# RPC open node
+public-node=1                  # Advertise to other users they can use this node as a remote one for connecting their wallets
+confirm-external-bind=1        # Open Node (confirm)
+rpc-bind-ip=0.0.0.0            # Bind to all interfaces (the Open Node)
+rpc-bind-port=18081            # Bind to default port (the Open Node)
+restricted-rpc=1               # Obligatory for Open Node interface
+no-igd=1                       # Disable UPnP port mapping
+no-zmq=1                       # Disable ZMQ RPC server to decrease attack surface (it's not used)
 
-# RPC TLS
-rpc-ssl=autodetect             # Use TLS if client wallet supports it (the default behavior); the certificate will be generated on the fly on every restart
+# RPC TLS
+rpc-ssl=autodetect             # Use TLS if client wallet supports it (the default behavior); the certificate will be generated on the fly on every restart
 
-# Mempool size
-max-txpool-weight=268435456    # Maximum unconfirmed transactions pool size in bytes (here 256MB, default ~618MB)
+# Mempool size
+max-txpool-weight=268435456    # Maximum unconfirmed transactions pool size in bytes (here 256MB, default ~618MB)
 
-# Slow but reliable db writes
+# Slow but reliable db writes
 db-sync-mode=safe
 
-out-peers=64              # This will enable much faster sync and tx awareness; the default 8 is suboptimal nowadays
-in-peers=64               # The default is unlimited; we prefer to put a cap on this
+out-peers=64              # This will enable much faster sync and tx awareness; the default 8 is suboptimal nowadays
+in-peers=64               # The default is unlimited; we prefer to put a cap on this
 
-limit-rate-up=1048576     # 1048576 kB/s == 1GB/s; a raise from default 2048 kB/s; contribute more to p2p network
-limit-rate-down=1048576   # 1048576 kB/s == 1GB/s; a raise from default 8192 kB/s; allow for faster initial sync
+limit-rate-up=1048576     # 1048576 kB/s == 1GB/s; a raise from default 2048 kB/s; contribute more to p2p network
+limit-rate-down=1048576   # 1048576 kB/s == 1GB/s; a raise from default 8192 kB/s; allow for faster initial sync
 
-# Tor: broadcast transactions originating from connected wallets over Tor (does not concern relayed transactions)
+# Tor: broadcast transactions originating from connected wallets over Tor (does not concern relayed transactions)
 tx-proxy=tor,127.0.0.1:9050,16
 
 # Tor: add P2P seed nodes for the Tor network
 add-peer=moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion:18080
 add-peer=monerozf6koypqrt.onion:18080
-add-peer=zbjkbsxc5munw3qusl7j2hpcmikhqocdf4pqhnhtpzw5nt5jrmofptid.onion:18083        # https://github.com/monero-project/monero/blob/master/src/p2p/net_node.inl
-add-peer=rno75kjcw3ein6i446sqby2xkyqjarb75oq36ah6c2mribyklzhurpyd.onion:28083        # it's mainnet despite the weird port, according to reddit
-add-peer=sqzrokz36lgkng2i2nlzgzns2ugcxqosflygsxbkybb4xn6gq3ouugqd.onion:18083        # very flaky, works 1 in 3 times
+add-peer=zbjkbsxc5munw3qusl7j2hpcmikhqocdf4pqhnhtpzw5nt5jrmofptid.onion:18083        # https://github.com/monero-project/monero/blob/master/src/p2p/net_node.inl
+add-peer=rno75kjcw3ein6i446sqby2xkyqjarb75oq36ah6c2mribyklzhurpyd.onion:28083        # it's mainnet despite the weird port, according to reddit
+add-peer=sqzrokz36lgkng2i2nlzgzns2ugcxqosflygsxbkybb4xn6gq3ouugqd.onion:18083        # very flaky, works 1 in 3 times
 
-# Tor: tell monerod your onion address so it can be advertised on P2P network
+# Tor: tell monerod your onion address so it can be advertised on P2P network
 anonymous-inbound=PASTE_YOUR_ONION_HOSTNAME:18083,127.0.0.1:18083,64
 
-# Tor: be forgiving to connecting wallets; suggested by http://xmrguide42y34onq.onion/remote_nodes
+# Tor: be forgiving to connecting wallets; suggested by http://xmrguide42y34onq.onion/remote_nodes
 disable-rpc-ban=1
-
-

/etc/.../monero.service

-
# /etc/systemd/system/monero.service
+

/etc/.../monero.service

# /etc/systemd/system/monero.service
 
-[Unit]
-Description=Monero Daemon
-After=network.target
-Wants=network.target
+[Unit]
+Description=Monero Daemon
+After=network.target
+Wants=network.target
 
-[Service]
-ExecStart=/opt/monero/monerod --detach --config-file /etc/monero.conf --pidfile /run/monero/monerod.pid
-ExecStartPost=/bin/sleep 0.1
-Type=forking
-PIDFile=/run/monero/monerod.pid
+[Service]
+ExecStart=/opt/monero/monerod --detach --config-file /etc/monero.conf --pidfile /run/monero/monerod.pid
+ExecStartPost=/bin/sleep 0.1
+Type=forking
+PIDFile=/run/monero/monerod.pid
 
-Restart=always
-RestartSec=16
+Restart=always
+RestartSec=16
 
-User=monero
-Group=monero
-RuntimeDirectory=monero
+User=monero
+Group=monero
+RuntimeDirectory=monero
 
-StandardOutput=journal
-StandardError=journal
+StandardOutput=journal
+StandardError=journal
 
-[Install]
-WantedBy=multi-user.target
-
-

Open firewall ports

-

If you use a firewall (and you should), open 18080 and 18081 ports for incoming TCP connections. These are for the incoming clearnet connections, P2P and RPC respectively.

-

You do not need to open any ports for Tor. The onion services work with virtual ports. The tor daemon does not directly accept incoming connections and so it needs no open ports.

-

For example, for popular ufw firewall, that would be:

-
ufw allow 18080/tcp
-ufw allow 18081/tcp
-
-

To verify, use ufw status. The output should be similar to the following (the 22 being default SSH port, unrelated to Monero):

-
To                         Action      From
+[Install]
+WantedBy=multi-user.target
+

Open firewall ports

If you use a firewall (and you should), open 18080 and 18081 ports for incoming TCP connections. These are for the incoming clearnet connections, P2P and RPC respectively.

You do not need to open any ports for Tor. The onion services work with virtual ports. The tor daemon does not directly accept incoming connections and so it needs no open ports.

For example, for popular ufw firewall, that would be:

ufw allow 18080/tcp
+ufw allow 18081/tcp
+

To verify, use ufw status. The output should be similar to the following (the 22 being default SSH port, unrelated to Monero):

To                         Action      From
 --                         ------      ----
 22/tcp                     LIMIT       Anywhere                  
 18080/tcp                  ALLOW       Anywhere                  
@@ -1359,119 +98,13 @@ ufw allow 18081/tcp
 22/tcp (v6)                LIMIT       Anywhere (v6)             
 18080/tcp (v6)             ALLOW       Anywhere (v6)             
 18081/tcp (v6)             ALLOW       Anywhere (v6)   
-
-

Testing

-

On server

-

List all services listening on ports and make sure it is what you expect:

-

sudo netstat -lntpu

-

The output should include these (in any order); obviously the PID values will differ.

-
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
+

Testing

On server

List all services listening on ports and make sure it is what you expect:

sudo netstat -lntpu

The output should include these (in any order); obviously the PID values will differ.

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
 ...
 tcp        0      0 0.0.0.0:18080           0.0.0.0:*               LISTEN      259255/monerod      
 tcp        0      0 0.0.0.0:18081           0.0.0.0:*               LISTEN      259255/monerod      
 tcp        0      0 127.0.0.1:18083         0.0.0.0:*               LISTEN      259255/monerod      
 tcp        0      0 127.0.0.1:9050          0.0.0.0:*               LISTEN      258786/tor          
-
-

On client machine

-

Finally, we want to test connections from your client machine.

-

Install tor and torsocks on your laptop, you will want them anyway for Monero wallet.

-

Just for testing, you will also need nmap and proxychains.

-

Test clearnet P2P connection:

-

nmap -Pn -p 18080 YOUR_IP_ADDRESS_HERE

-

Test clearnet RPC connection:

-

curl --digest -X POST http://YOUR_IP_ADDRESS_HERE:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_info"}' -H 'Content-Type: application/json'

-

Test onion P2P connection (skip if you don't have proxychains):

-

proxychains nmap -Pn -p 18083 YOUR_ONION_ADDRESS_HERE.onion

-

Test onion RPC connection:

-

torsocks curl --digest -X POST http://YOUR_ONION_ADDRESS_HERE.onion:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_info"}' -H 'Content-Type: application/json'

-

Debugging

-

Tor:

-
    -
  • Status: systemctl status tor@default
  • -
  • Logs: journalctl -xe --unit tor@default
  • -
-

Monero:

-
    -
  • Status: systemctl status monero
  • -
  • Logs: tail -n100 /var/log/monero/monero.log
  • -
  • Logs more info: change log-level=0 to log-level=1 in monero.conf (remember to revert once solved)
  • -
-

Further improvements

-

Periodic restarts

-

It's likely worthwhile to add peridic auto-restarting to both tor and monerod every couple hours. Neither daemon is perfect; they can get stuck or leak memory in edge case situations, -like the recent attacks on Tor v3 or DDoS attacks on the Monero network. One possible way would be to use systemd timers.

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/sitemap.xml b/public/sitemap.xml index 0703662..5cc95af 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -1,139 +1,139 @@ https://monerodocs.org/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/interacting/download-monero-binaries/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/interacting/verify-monero-binaries/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/interacting/overview/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/interacting/monero-config-file/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/interacting/monerod-reference/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/interacting/monero-wallet-cli-reference/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/interacting/monero-wallet-gui-reference/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/interacting/monero-wallet-rpc-reference/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/interacting/monero-blockchain-export-reference/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/interacting/monero-blockchain-import-reference/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/technical-specs/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/cryptography/introduction/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/cryptography/asymmetric/introduction/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/cryptography/asymmetric/private-key/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/cryptography/asymmetric/public-key/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/cryptography/asymmetric/edwards25519/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/cryptography/asymmetric/key-image/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/cryptography/base58/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/cryptography/prng/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/cryptography/keccak-256/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/public-address/standard-address/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/public-address/subaddress/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/public-address/integrated-address/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/proof-of-work/what-is-pow/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/proof-of-work/pow-in-cryptocurrencies/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/proof-of-work/cryptonight/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/proof-of-work/random-x/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/multisignature/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/infrastructure/networks/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/infrastructure/tor-onion-p2p-seed-nodes/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/infrastructure/monero-pulse/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/running-node/open-node-tor-onion/ - 2021-01-21 + 2021-01-22 daily https://monerodocs.org/accepting-monero/overview/ - 2021-01-21 + 2021-01-22 daily \ No newline at end of file diff --git a/public/sitemap.xml.gz b/public/sitemap.xml.gz index 088f92a7c362cb7f43832d3984726083e742dc5d..80ec6223ade97314b0af91793bed18252d30d9d6 100644 GIT binary patch delta 397 zcmV;80doGY1g``KABzYG8QThx2d#eIK&=UM?tag5`%Rel4pSoN|{>R~6 z$Uxd;{_fJ^6g+CH9zN>qf+hz^5+hHUYiG%X$cR@5lO(29E`yVkq>M9Qy1>jqi08B8CX(O#tp=IMXiwV^p? z>`2FcUXA5ARYLSw7xi zbO)jU&pN^JO%zh3(1`-NfHC@_s^gbuW37>>ttCiYIAt9yFZ@q~Fud_B6Ku%>cy2Su zQH~H>#pi@{DW_g%<&ugx$pU?2AjNsoBRb4TOO_;{j{F<)K^I)tXIWsx(Tan*J)3G6 zeRj!pLFbVKq~tB}0K{q9LK7e_VkKc%8A?2d#exZeDGxi|KXfpe6X(Snd2=mw#C9K6SZ_{Ex%C zkb$(x{N1I+DR|UYJ$%&J1x*f;Bu1Vx*Upj&krA&BCP_@ITn0nyI@LN4^60E0Xn{Bi z1;VLGdkxf)CC2%h?HN2)(x^~GnhU&qrFNI%+r6jYeRF) z*pZI?yeP>{BTI=v6qru)FhC|}UV<@_yXp+;0<&1e@$8+EObB+;WK(rK9^R!gvV6S3 z=ng~yo^^ubn<%76p%Vpk0b}$ - - - - - - - - - - - - - - - - - - - - - Monero Technical Specification - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - - - - -
-
- - - - - - - -

Monero Technical Specs

-

Live

-
    -
  • Monero blockchain is live since 18 April 2014
  • -
-

No premine, no instamine, no ICO, no token

-
    -
  • Monero had no premine or instamine
  • -
  • Monero did not sell any token
  • -
  • Monero had no presale of any kind
  • -
-

Proof of Work

-
    -
  • CryptoNight
      -
    • v0 since block height 0
    • -
    • v1 since block height 1546000 (forked on 2018-04-06)
    • -
    • v2 since block height 1685555 (forked on 2018-10-18)
    • -
    • v3 since block height 1788000 (forked on 2019-03-09); "CryptonightR"
    • -
    -
  • -
  • RandomX
      -
    • v0 since block height 1978433 (forked on 2019-11-30)
    • -
    -
  • -
-

Difficulty retarget

-
    -
  • every block
  • -
  • based on the last 720 blocks (24h), excluding 20% of the timestamp outliers
  • -
-

Block time

-
    -
  • 2 minutes
  • -
  • may change in the future as long as emission curve is preserved
  • -
-

Block reward

-
    -
  • smoothly decreasing and subject to penalties for blocks greater then median size of the last 100 blocks (M100)
  • -
  • ~1.6 XMR as of June 2020; for the current reward check the coinbase transaction of the latest block
  • -
-

Block size

-
    -
  • dynamic
  • -
  • maximum of two times the median size of the last 100 blocks (2 * M100)
  • -
  • ~50KB as of June 2020; check the latest block size
  • -
-

Emission curve

-

Main emission

-
    -
  • first, the main emission is about to produce ~18.132 million coins by the end of May 2022
  • -
  • as of June 2020 the emission is about 8 XMR per 10 minutes
  • -
  • see charts and details
  • -
-

Tail emission

-
    -
  • the tail emission kicks in once main emission is done
  • -
  • it will produce 0.6 XMR per 2-minute block
  • -
  • this translates to <1% inflation decreasing over time
  • -
-

Max supply

-
    -
  • ~18.132 million XMR + 0.6 XMR per 2 minutes
  • -
  • technically infinite but practically deflationary if accounted for lost coins
  • -
-

Divisibility

-
    -
  • Monero is divisible up to 12 digits
  • -
  • The smallest unit is called piconero and equals 1e-12 XMR, or 0.000000000001 XMR
  • -
-

Sender privacy

-
    -
  • ring signatures
      -
    • the ring size is 11 (10 decoys)
    • -
    -
  • -
  • assurance: probabilistic / plausible deniability
  • -
-

Recipient privacy

-
    -
  • stealth addresses
  • -
  • assurance: strong
  • -
-

Amount privacy

-
    -
  • ring confidential transactions
  • -
  • assurance: strong
  • -
-

IP address privacy

-

For the full node (monerod):

-
    -
  • dandelion++
  • -
  • assurance: won't protect against ISP/VPN provider, won't protect against the very first remote node in Dandellion++ protocol
  • -
  • for the full protection user must manually wrap monerod with Tor
  • -
-

For the wallet (monero-wallet-gui or monero-wallet-cli):

-
    -
  • typically wallet runs on the same machine as full node so there is no risk
  • -
  • if wallet connects to remote full node, there is no IP protection by default
      -
    • user must manually wrap wallet with Tor
    • -
    -
  • -
- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/todo/bulletproofs/index.html b/public/todo/bulletproofs/index.html index 152516c..486b292 100644 --- a/public/todo/bulletproofs/index.html +++ b/public/todo/bulletproofs/index.html @@ -1,952 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Bulletproofs - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
- - - - - - - -

Bulletproofs

- -

Pieter Wuille on Bulletproofs:

-

Bulletproofs is a general technology to implement zero-knowledge proofs.

-

Bitcoin does not use zero-knowledge proofs. There is no way you can just "plug in" Bulletproofs anywhere in Bitcoin.

-

Perhaps you are talking about confidential transactions (CT). This is a technique to permit a public ledger that makes the amounts hidden while still permitting everyone to verify the balances adds up. If that sounds like magic, that's because it is.

-

CT rely on zero-knowledge proofs. They could use Bulletproofs. They could also use other types of zero-knowledge proofs (there are several, zk-SNARKS is the well known, each with their own trade-offs). Certainly the invention of Bulletproofs made CT more accessible.

-

However... CT is still very different from how Bitcoin works right now. There is no obvious way to integrate them. My best hope would be using something like an extension block, where you can have coins on the "legacy" side or coins on the confidential side - with explicit operations to move them between the two.

-

However, that is far from simple, and AFAIK nobody is really working on it. Much as I love this technique and would be very excited to see it in Bitcoin, it's unrealistic to think that it will be usable anytime soon there.

-

Every system must lack at least one of unconditional soundness and unconditional blindness. It's perfectly possible to build a system that lacks both.

-

Bulletproofs are a general zero-knowledge proof technique. That means that they can be used to prove any statement over secret data without revealing that data.

-

You could prove you know 2 numbers that add up to 7.

-

You could prove that you know a string whose SHA256 hash is 16c28109a2719ebd4a123db11ff966f02d814354e3dc932449484f1c5a804af4, without revealing anything else about that string.

-

They could be used instead of zk-SNARKs in Zero-Knowledge Contingent Payments (swapping money for solutions to a problem). These can be done without any changes to Bitcoin.

-

You could (in theory, read on) use them to build a blockchain similar to ZCash (which heavily relies on zk-SNARKs for proving that their ledger makes sense), but without the trusted setup procedure or novel cryptography (Bulletproofs use very conservative security assumptions). Unfortunately, Bulletproof validation is much slower than zk-SNARK validation for complex problems, so it's not really comparable.

-

I expect that the most interesting applications are things we haven't considered yet. They suddenly bring zero-knowledge proofs into scope for a lot of problems and protocols where it wasn't really reasonable to go through the effort of using one of the existing proof systems.

-

++++

-

I'm pretty sure that Monero is not unconditionally sound. Even if it is, after switching to Bulletproofs they won't be (Bulletproofs cannot be made unconditionally sound).

-

Yes, with the old rangeproof construction there was an alternative that was unconditionally sound, but not unconditionally private.

-

This is not possible with Bulletproofs (and theoretically impossible with anything with similar compactness; unconditionally sound proofs cannot be small).

-

++++

-

Bulletproofs are a general zero-knowledge proof technique. That means that they can be used to prove any statement over secret data without revealing that data.

-

You could prove you know 2 numbers that add up to 7.

-

You could prove that you know a string whose SHA256 hash is 16c28109a2719ebd4a123db11ff966f02d814354e3dc932449484f1c5a804af4, without revealing anything else about that string.

-

They could be used instead of zk-SNARKs in Zero-Knowledge Contingent Payments (swapping money for solutions to a problem). These can be done without any changes to Bitcoin.

-

You could (in theory, read on) use them to build a blockchain similar to ZCash (which heavily relies on zk-SNARKs for proving that their ledger makes sense), but without the trusted setup procedure or novel cryptography (Bulletproofs use very conservative security assumptions). Unfortunately, Bulletproof validation is much slower than zk-SNARK validation for complex problems, so it's not really comparable.

-

I expect that the most interesting applications are things we haven't considered yet. They suddenly bring zero-knowledge proofs into scope for a lot of problems and protocols where it wasn't really reasonable to go through the effort of using one of the existing proof systems.

-

++++

-

Practical zero-knowledge proofs have existed for a few years now, and ZKCPs are indeed an application of them.

-

Bulletproofs are just a new type of zero-knowledge proof. Compared to zk-SNARKS, they're much more conservative in their security assumptions, and don't need a complicated setup procedure before proofs can be created. On the other hand, they're also larger and slower for complicated problsms. And they don't do anything that couldn't be done before - they're just more practical depending on your requirements.

- - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/todo/confidential-transactions/index.html b/public/todo/confidential-transactions/index.html index a13aab2..4408dfb 100644 --- a/public/todo/confidential-transactions/index.html +++ b/public/todo/confidential-transactions/index.html @@ -1,945 +1,10 @@ - - - - - - - - - - - - - - - - - - - - - - - Confidential transactions - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
- - - - - - - -

Confidential transactions

- -

Pieter Wuille on CT:

-

In a system that uses CT, if someone finds a break in the fundamental security of elliptic curve cryptography (ECC), he can print money. Worse, because the amounts are all private, he can do so undetectably. That's an existential threat for a currency which has controlled inflation as prime goal.

-

Such a break would be dangerous for Bitcoin (even without CT) regardless, as it relies on ECC for protecting against theft. However, Bitcoin can migrate to use a different signature scheme if necessary. It would be chaotic, but not necessarily pose an existential risk.

-

There are people who agree with this perspective. It's a mathematical fact that any privacy system that hides amounts and is built on top of ECC will at least have one of the properties below:

-
An ECC break will permit printing money undetectaby.
+ Confidential transactions - Monero Documentation     

Confidential transactions

Pieter Wuille on CT:

In a system that uses CT, if someone finds a break in the fundamental security of elliptic curve cryptography (ECC), he can print money. Worse, because the amounts are all private, he can do so undetectably. That's an existential threat for a currency which has controlled inflation as prime goal.

Such a break would be dangerous for Bitcoin (even without CT) regardless, as it relies on ECC for protecting against theft. However, Bitcoin can migrate to use a different signature scheme if necessary. It would be chaotic, but not necessarily pose an existential risk.

There are people who agree with this perspective. It's a mathematical fact that any privacy system that hides amounts and is built on top of ECC will at least have one of the properties below:

An ECC break will permit printing money undetectaby.
 
 An ECC break will permit deanonymizing amounts in the historical chain.
-
-

In other words:

-
An ECC break means the currency can undetectably be inflated (going forward).
+

In other words:

An ECC break means the currency can undetectably be inflated (going forward).
 
 An ECC break means the ledger's history can retroactively be deanonymized (goin backward).
-
-

So we are faced with a choice between those two regardless if we want better privacy. Some people believe the second is worse than the first, and choosing the first actually allows for more efficient technology. This is a choice that Zcash, Monero, Grin, all make. CT with Bulletproofs would do the same.

-

However, regardless of your own opinion in this matter, Bitcoin's evolution is a large collaborative process, where such fundamental changes need buy-in from large parts of the ecosystem. My fear is that the question of giving up the ability to exactly audit the monetary supply is going to make it hard to make CT acceptable.

-

Furthermore, there are other challenges. CT makes transactions larger, slower to verify, and poses a very significant engineering challenge to incorporate into Bitcoin without breaking backward compatibility.

-

++++

-
-

Also, is there any possible system that can have unconditional soundness and privacy at the same time (something other than ECC obviously)?

-
-

No, that's mathematically impossible.

- - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/todo/p2p/index.html b/public/todo/p2p/index.html index d8ac274..9255684 100644 --- a/public/todo/p2p/index.html +++ b/public/todo/p2p/index.html @@ -1,927 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - P2p - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
- - - - - - - -

P2p

- - - - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/todo/pedersen-commitment/index.html b/public/todo/pedersen-commitment/index.html index 0c9e988..009666a 100644 --- a/public/todo/pedersen-commitment/index.html +++ b/public/todo/pedersen-commitment/index.html @@ -1,948 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Pedersen Commitment - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Pedersen Commitment

-

https://www.reddit.com/r/Monero/comments/9ed7vb/pedersen_commitment/

-

https://monero.stackexchange.com/questions/10177/who-generates-parameters-g-h-for-pedersen-commitment-in-monero

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/todo/risks-of-using-remote-node/index.html b/public/todo/risks-of-using-remote-node/index.html index 4586baf..6ccfd5f 100644 --- a/public/todo/risks-of-using-remote-node/index.html +++ b/public/todo/risks-of-using-remote-node/index.html @@ -1,968 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Risks of using remote node - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Risks of using remote node

-

https://monero.stackexchange.com/questions/38/what-privacy-or-security-trade-offs-are-associated-with-not-running-your-own-ful/

-

https://monero.stackexchange.com/questions/1482/how-much-information-is-passed-from-the-daemon-to-simplewallet-when-scanning-for?rq=1%20

-

https://monero.stackexchange.com/questions/1134/is-it-safe-to-share-a-daemon-with-a-roommate?noredirect=1&lq=1

-

Reference

- - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/todo/stealth-address/index.html b/public/todo/stealth-address/index.html index a402174..14924ab 100644 --- a/public/todo/stealth-address/index.html +++ b/public/todo/stealth-address/index.html @@ -1,1073 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Stealth Address - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - - - - -
-
- - - - - - - -

Stealth Address

-

Hides recipient

-

Stealth address is a privacy technique to hide the recipient.

-

Even though blockchain is public, observer has no way to link the payment to the recipient.

-

Payments simply do not go to recipient address. Instead payments go to one-time "stealth" addresses.

-

One-time, per payment

-

Stealth address is generated for each individual payment and must not be reused.

-

In Bitcoin, should stealth address be reused, the payments are linked. -Observer would learn these payments were to the same person. -This wouldn't be end of the world though, as most users would link the outputs anyway when spending from the wallet.

-

In Monero, stealth address reuse leads to lose of funds. -If sender re-uses stealth address, then recipient will only be able to claim one of the payments. -See key image to learn why this is the case. -Practically, to re-use stealth address, sender would have to manually craft a malicious transaction. -Recipient would simply not acknowledge receiving the payment, as if sender never paid.

-

Wallet level feature

-

Stealth addresses are not part of the consensus layer. For transaction to be valid, -it does not matter how the key pairs were generated.

-

Stealth address is non-interactive protocol between sender and recipient.

-

Elliptic curves magic properties

-

Before going further understand the following properties of elliptic curves.

-

Once you internalize these critical properties, -you will be able to easily come up with a stealth address scheme yourself.

-

It is possible to establish a shared secret without sharing a secret

-

Two parties can come up with the same secret number w/o sending anything except their public keys.

-

Specifically, having 2 unrelated key pairs, you can exchange public keys, and then each party can independently calculate the same secret number, simply by multiplying own private key with other party's public key:

-

s = aB = bA, where:

-
    -
  • s - the secret (256-bit number)
  • -
  • a - Alice private key
  • -
  • A - Alice public key
  • -
  • b - Bob private key
  • -
  • B - Bob public key
  • -
-

A new key pair can be derived by multiplying both keys

-

Having a key pair, you can derive a new key pair, simply by multiplying both keys by an integer.

-

Surprisingly, the new key pair will be valid, i.e. the private key will match the public key.

-

Stealth address protocol

-
    -
  1. -

    Sender Alice generates a new key pair. Note this is entirely local to the sender.

    -
  2. -
  3. -

    a - private key

    -
  4. -
  5. -

    A - public key

    -
  6. -
  7. -

    Sender Alice gets receiver's (Bob) public key from his address, B.

    -
  8. -
  9. -

    Sender calculates the secret:

    -
  10. -
-

s = rB

-

Reference

-

http://www.scitepress.org/DigitalLibrary/Link.aspx?doi=10.5220/0006270005590566

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/todo/tx/index.html b/public/todo/tx/index.html index d70e5a6..0aa4b89 100644 --- a/public/todo/tx/index.html +++ b/public/todo/tx/index.html @@ -1,948 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - Transaction - Monero Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -
- -
- - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - -
-
-
- - -
-
- - - - - - - -

Monero transaction

-

https://monero.stackexchange.com/questions/2136/understanding-the-structure-of-a-monero-transaction?noredirect=1&lq=1 -https://monero.stackexchange.com/questions/6736/how-does-input-reference-the-output-of-some-transaction?noredirect=1&lq=1

- - - - - - - - - -
-
-
-
- - - - -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file