From 983cc334a8bddcc9ebdccb0cb66d7d691ff0a8f7 Mon Sep 17 00:00:00 2001 From: rehrar Date: Wed, 20 Dec 2017 14:10:10 -0700 Subject: [PATCH] Finished multi-lingual implementation - Updated README to accomodate for changes - Updated footer and roadmap for multi-lingual readiness - Updated yml files for an 'untranslated' string - Added an 'untranslated' snippet to all untranslated files - Added a 'template' language for new languages to be made easily - Added link to Monerujo site to Downloads page - CSS updates --- README.md | 123 +- _data/lang/es/navigation.yml | 2 +- _data/lang/es/roadmap.yml | 2 +- _data/lang/template/footer-1.yml | 50 + _data/lang/template/footer-2.yml | 6 + _data/lang/template/navigation.yml | 54 + _data/lang/template/roadmap.yml | 109 ++ _i18n/en.yml | 1 + _i18n/en/downloads.md | 5 +- _i18n/en/get-started/mining.md | 6 + _i18n/en/resources/roadmap.md | 22 +- _i18n/es.yml | 1 + _i18n/es/community/events.md | 1 + _i18n/es/community/hangouts.md | 98 +- _i18n/es/community/merchants.md | 1 + _i18n/es/community/sponsorships.md | 1 + _i18n/es/community/team.md | 1 + _i18n/es/downloads.md | 6 +- _i18n/es/get-started/accepting.md | 49 +- _i18n/es/get-started/contributing.md | 3 +- _i18n/es/get-started/faq.md | 1 + _i18n/es/get-started/mining.md | 8 +- _i18n/es/get-started/using.md | 27 +- _i18n/es/get-started/what-is-monero.md | 40 +- _i18n/es/index.md | 62 +- _i18n/es/press-kit.md | 1 + _i18n/es/resources/about.md | 1 + _i18n/es/resources/developer-guides.md | 1 + .../resources/developer-guides/daemon-rpc.md | 1 + .../resources/developer-guides/wallet-rpc.md | 1 + _i18n/es/resources/moneropedia/00-base-00 | 10 + _i18n/es/resources/moneropedia/account.md | 82 ++ .../es/resources/moneropedia/address-book.md | 35 + _i18n/es/resources/moneropedia/address.md | 22 + _i18n/es/resources/moneropedia/airgap.md | 12 + .../resources/moneropedia/base32-address.md | 27 + .../resources/moneropedia/base64-address.md | 22 + _i18n/es/resources/moneropedia/block.md | 16 + _i18n/es/resources/moneropedia/blockchain.md | 13 + .../moneropedia/canonically-unique-host.md | 23 + _i18n/es/resources/moneropedia/change.md | 16 + _i18n/es/resources/moneropedia/clearnet.md | 33 + _i18n/es/resources/moneropedia/coinbase.md | 10 + _i18n/es/resources/moneropedia/consensus.md | 10 + .../resources/moneropedia/cryptocurrency.md | 22 + .../resources/moneropedia/data-directory.md | 22 + .../es/resources/moneropedia/denominations.md | 36 + _i18n/es/resources/moneropedia/destination.md | 19 + _i18n/es/resources/moneropedia/eepsite.md | 30 + _i18n/es/resources/moneropedia/encryption.md | 35 + _i18n/es/resources/moneropedia/floodfill.md | 15 + _i18n/es/resources/moneropedia/fungibility.md | 16 + .../moneropedia/garlic-encryption.md | 25 + .../resources/moneropedia/garlic-routing.md | 45 + _i18n/es/resources/moneropedia/i2np.md | 28 + _i18n/es/resources/moneropedia/i2p.md | 31 + _i18n/es/resources/moneropedia/i2pcontrol.md | 17 + _i18n/es/resources/moneropedia/in-net.md | 15 + _i18n/es/resources/moneropedia/index.md | 21 + _i18n/es/resources/moneropedia/java-i2p.md | 15 + .../es/resources/moneropedia/jump-service.md | 34 + _i18n/es/resources/moneropedia/kovri.md | 62 + _i18n/es/resources/moneropedia/lease-set.md | 25 + _i18n/es/resources/moneropedia/lease.md | 15 + .../moneropedia/locally-unique-host.md | 22 + _i18n/es/resources/moneropedia/message.md | 33 + _i18n/es/resources/moneropedia/miners.md | 20 + .../es/resources/moneropedia/mnemonicseed.md | 20 + .../resources/moneropedia/network-database.md | 25 + _i18n/es/resources/moneropedia/node.md | 25 + _i18n/es/resources/moneropedia/ntcp.md | 34 + _i18n/es/resources/moneropedia/openalias.md | 20 + _i18n/es/resources/moneropedia/paperwallet.md | 7 + _i18n/es/resources/moneropedia/paymentid.md | 25 + .../moneropedia/pedersen-commitment.md | 24 + _i18n/es/resources/moneropedia/reseed.md | 17 + _i18n/es/resources/moneropedia/ring-size.md | 11 + _i18n/es/resources/moneropedia/ringCT.md | 24 + .../resources/moneropedia/ringsignatures.md | 18 + _i18n/es/resources/moneropedia/router-info.md | 68 + _i18n/es/resources/moneropedia/scalability.md | 10 + _i18n/es/resources/moneropedia/signature.md | 10 + _i18n/es/resources/moneropedia/smartmining.md | 17 + _i18n/es/resources/moneropedia/spendkey.md | 16 + _i18n/es/resources/moneropedia/ssu.md | 26 + .../resources/moneropedia/stealthaddress.md | 16 + .../es/resources/moneropedia/subscription.md | 47 + .../es/resources/moneropedia/tail-emission.md | 16 + _i18n/es/resources/moneropedia/transaction.md | 21 + _i18n/es/resources/moneropedia/transports.md | 20 + _i18n/es/resources/moneropedia/tunnel.md | 37 + _i18n/es/resources/moneropedia/unlocktime.md | 14 + _i18n/es/resources/moneropedia/viewkey.md | 16 + _i18n/es/resources/moneropedia/wallet.md | 19 + _i18n/es/resources/research-lab.md | 1 + _i18n/es/resources/roadmap.md | 23 +- _i18n/es/technical-specs.md | 1 + _i18n/es/the-monero-project.md | 1 + _strings_en.yml => _i18n/template.yml | 193 ++- _i18n/template/community/events.md | 28 + _i18n/template/community/hangouts.md | 97 ++ _i18n/template/community/merchants.md | 27 + _i18n/template/community/sponsorships.md | 97 ++ _i18n/template/community/team.md | 181 +++ _i18n/template/downloads.md | 142 ++ _i18n/template/get-started/accepting.md | 90 ++ _i18n/template/get-started/contributing.md | 93 ++ _i18n/template/get-started/faq.md | 136 ++ _i18n/template/get-started/mining.md | 86 ++ _i18n/template/get-started/using.md | 98 ++ _i18n/template/get-started/what-is-monero.md | 114 ++ _i18n/template/index.md | 191 +++ _i18n/template/press-kit.md | 70 + _i18n/template/resources/about.md | 57 + _i18n/template/resources/developer-guides.md | 20 + .../resources/developer-guides/daemon-rpc.md | 832 +++++++++++ .../resources/developer-guides/wallet-rpc.md | 1216 +++++++++++++++++ .../template/resources/moneropedia/00-base-00 | 10 + .../template/resources/moneropedia/account.md | 82 ++ .../resources/moneropedia/address-book.md | 35 + .../template/resources/moneropedia/address.md | 22 + .../template/resources/moneropedia/airgap.md | 12 + .../resources/moneropedia/base32-address.md | 27 + .../resources/moneropedia/base64-address.md | 22 + _i18n/template/resources/moneropedia/block.md | 16 + .../resources/moneropedia/blockchain.md | 13 + .../moneropedia/canonically-unique-host.md | 23 + .../template/resources/moneropedia/change.md | 16 + .../resources/moneropedia/clearnet.md | 33 + .../resources/moneropedia/coinbase.md | 10 + .../resources/moneropedia/consensus.md | 10 + .../resources/moneropedia/cryptocurrency.md | 22 + .../resources/moneropedia/data-directory.md | 22 + .../resources/moneropedia/denominations.md | 36 + .../resources/moneropedia/destination.md | 19 + .../template/resources/moneropedia/eepsite.md | 30 + .../resources/moneropedia/encryption.md | 35 + .../resources/moneropedia/floodfill.md | 15 + .../resources/moneropedia/fungibility.md | 16 + .../moneropedia/garlic-encryption.md | 25 + .../resources/moneropedia/garlic-routing.md | 45 + _i18n/template/resources/moneropedia/i2np.md | 28 + _i18n/template/resources/moneropedia/i2p.md | 31 + .../resources/moneropedia/i2pcontrol.md | 17 + .../template/resources/moneropedia/in-net.md | 15 + _i18n/template/resources/moneropedia/index.md | 21 + .../resources/moneropedia/java-i2p.md | 15 + .../resources/moneropedia/jump-service.md | 34 + _i18n/template/resources/moneropedia/kovri.md | 62 + .../resources/moneropedia/lease-set.md | 25 + _i18n/template/resources/moneropedia/lease.md | 15 + .../moneropedia/locally-unique-host.md | 22 + .../template/resources/moneropedia/message.md | 33 + .../template/resources/moneropedia/miners.md | 20 + .../resources/moneropedia/mnemonicseed.md | 20 + .../resources/moneropedia/network-database.md | 25 + _i18n/template/resources/moneropedia/node.md | 25 + _i18n/template/resources/moneropedia/ntcp.md | 34 + .../resources/moneropedia/openalias.md | 20 + .../resources/moneropedia/paperwallet.md | 7 + .../resources/moneropedia/paymentid.md | 25 + .../moneropedia/pedersen-commitment.md | 24 + .../template/resources/moneropedia/reseed.md | 17 + .../resources/moneropedia/ring-size.md | 11 + .../template/resources/moneropedia/ringCT.md | 24 + .../resources/moneropedia/ringsignatures.md | 18 + .../resources/moneropedia/router-info.md | 68 + .../resources/moneropedia/scalability.md | 10 + .../resources/moneropedia/signature.md | 10 + .../resources/moneropedia/smartmining.md | 17 + .../resources/moneropedia/spendkey.md | 16 + _i18n/template/resources/moneropedia/ssu.md | 26 + .../resources/moneropedia/stealthaddress.md | 16 + .../resources/moneropedia/subscription.md | 47 + .../resources/moneropedia/tail-emission.md | 16 + .../resources/moneropedia/transaction.md | 21 + .../resources/moneropedia/transports.md | 20 + .../template/resources/moneropedia/tunnel.md | 37 + .../resources/moneropedia/unlocktime.md | 14 + .../template/resources/moneropedia/viewkey.md | 16 + .../template/resources/moneropedia/wallet.md | 19 + _i18n/template/resources/research-lab.md | 164 +++ _i18n/template/resources/roadmap.md | 130 ++ ...e-Monero-XMR-without-a-mining-equipment.md | 49 + .../resources/user-guides/Offline_Backup.md | 37 + .../resources/user-guides/create_wallet.md | 61 + .../resources/user-guides/easiest_buy.md | 65 + .../user-guides/howto_fix_stuck_funds.md | 31 + .../user-guides/importing_blockchain.md | 57 + _i18n/template/resources/user-guides/index.md | 82 ++ .../resources/user-guides/mine-to-pool.md | 114 ++ .../mining_with_xmrig_and_docker.md | 37 + .../user-guides/monero-wallet-cli.md | 146 ++ .../resources/user-guides/monero_tools.md | 18 + .../user-guides/png/create_wallet/1.png | Bin 0 -> 220509 bytes .../user-guides/png/create_wallet/10.png | Bin 0 -> 104197 bytes .../user-guides/png/create_wallet/11.png | Bin 0 -> 195411 bytes .../user-guides/png/create_wallet/12.png | Bin 0 -> 157209 bytes .../user-guides/png/create_wallet/13.png | Bin 0 -> 45653 bytes .../user-guides/png/create_wallet/14.png | Bin 0 -> 50256 bytes .../user-guides/png/create_wallet/15.png | Bin 0 -> 65266 bytes .../user-guides/png/create_wallet/16.png | Bin 0 -> 84420 bytes .../user-guides/png/create_wallet/17.png | Bin 0 -> 84498 bytes .../user-guides/png/create_wallet/18.png | Bin 0 -> 84537 bytes .../user-guides/png/create_wallet/19.png | Bin 0 -> 93204 bytes .../user-guides/png/create_wallet/2.png | Bin 0 -> 243127 bytes .../user-guides/png/create_wallet/20.png | Bin 0 -> 81434 bytes .../user-guides/png/create_wallet/21.png | Bin 0 -> 83656 bytes .../user-guides/png/create_wallet/22.png | Bin 0 -> 72046 bytes .../user-guides/png/create_wallet/23.png | Bin 0 -> 80826 bytes .../user-guides/png/create_wallet/3.png | Bin 0 -> 50968 bytes .../user-guides/png/create_wallet/4.png | Bin 0 -> 92230 bytes .../user-guides/png/create_wallet/5.png | Bin 0 -> 15751 bytes .../user-guides/png/create_wallet/6.png | Bin 0 -> 97287 bytes .../user-guides/png/create_wallet/7.png | Bin 0 -> 14592 bytes .../user-guides/png/create_wallet/8.png | Bin 0 -> 24417 bytes .../user-guides/png/create_wallet/9.png | Bin 0 -> 128365 bytes .../user-guides/png/easiest_way/01.png | Bin 0 -> 424597 bytes .../user-guides/png/easiest_way/02.png | Bin 0 -> 35956 bytes .../user-guides/png/easiest_way/03.png | Bin 0 -> 84400 bytes .../user-guides/png/easiest_way/04.png | Bin 0 -> 31070 bytes .../user-guides/png/easiest_way/05.png | Bin 0 -> 373033 bytes .../user-guides/png/easiest_way/06.png | Bin 0 -> 177534 bytes .../user-guides/png/easiest_way/07.png | Bin 0 -> 118386 bytes .../user-guides/png/easiest_way/08.png | Bin 0 -> 78005 bytes .../user-guides/png/easiest_way/09.png | Bin 0 -> 68481 bytes .../user-guides/png/easiest_way/10.png | Bin 0 -> 54776 bytes .../user-guides/png/easiest_way/11.png | Bin 0 -> 100205 bytes .../user-guides/png/easiest_way/12.png | Bin 0 -> 60701 bytes .../user-guides/png/easiest_way/13.png | Bin 0 -> 68924 bytes .../user-guides/png/mine_to_pool/1.png | Bin 0 -> 63108 bytes .../user-guides/png/mine_to_pool/2.png | Bin 0 -> 98268 bytes .../user-guides/png/mine_to_pool/3.png | Bin 0 -> 89103 bytes .../user-guides/png/mine_to_pool/4.png | Bin 0 -> 100870 bytes .../remote_node/remote-node-screenshot.png | Bin 0 -> 100258 bytes .../user-guides/png/solo_mine_GUI/01.PNG | Bin 0 -> 59159 bytes .../user-guides/png/solo_mine_GUI/02.PNG | Bin 0 -> 65197 bytes .../user-guides/png/solo_mine_GUI/03.PNG | Bin 0 -> 65500 bytes .../resources/user-guides/prove-payment.md | 52 + .../resources/user-guides/remote_node_gui.md | 11 + .../resources/user-guides/restore_account.md | 23 + .../user-guides/restore_from_keys.md | 19 + .../user-guides/securely_purchase.md | 82 ++ .../resources/user-guides/solo_mine_GUI.md | 16 + .../resources/user-guides/view_only.md | 13 + .../resources/user-guides/vps_run_node.md | 48 + _i18n/template/technical-specs.md | 133 ++ _i18n/template/the-monero-project.md | 45 + _includes/untranslated.html | 3 + css/custom.css | 28 +- img/Monerujo-wallet.png | Bin 0 -> 252380 bytes 251 files changed, 8777 insertions(+), 239 deletions(-) create mode 100644 _data/lang/template/footer-1.yml create mode 100644 _data/lang/template/footer-2.yml create mode 100644 _data/lang/template/navigation.yml create mode 100644 _data/lang/template/roadmap.yml create mode 100644 _i18n/es/resources/moneropedia/00-base-00 create mode 100644 _i18n/es/resources/moneropedia/account.md create mode 100644 _i18n/es/resources/moneropedia/address-book.md create mode 100644 _i18n/es/resources/moneropedia/address.md create mode 100644 _i18n/es/resources/moneropedia/airgap.md create mode 100644 _i18n/es/resources/moneropedia/base32-address.md create mode 100644 _i18n/es/resources/moneropedia/base64-address.md create mode 100644 _i18n/es/resources/moneropedia/block.md create mode 100644 _i18n/es/resources/moneropedia/blockchain.md create mode 100644 _i18n/es/resources/moneropedia/canonically-unique-host.md create mode 100644 _i18n/es/resources/moneropedia/change.md create mode 100644 _i18n/es/resources/moneropedia/clearnet.md create mode 100644 _i18n/es/resources/moneropedia/coinbase.md create mode 100644 _i18n/es/resources/moneropedia/consensus.md create mode 100644 _i18n/es/resources/moneropedia/cryptocurrency.md create mode 100644 _i18n/es/resources/moneropedia/data-directory.md create mode 100644 _i18n/es/resources/moneropedia/denominations.md create mode 100644 _i18n/es/resources/moneropedia/destination.md create mode 100644 _i18n/es/resources/moneropedia/eepsite.md create mode 100644 _i18n/es/resources/moneropedia/encryption.md create mode 100644 _i18n/es/resources/moneropedia/floodfill.md create mode 100644 _i18n/es/resources/moneropedia/fungibility.md create mode 100644 _i18n/es/resources/moneropedia/garlic-encryption.md create mode 100644 _i18n/es/resources/moneropedia/garlic-routing.md create mode 100644 _i18n/es/resources/moneropedia/i2np.md create mode 100644 _i18n/es/resources/moneropedia/i2p.md create mode 100644 _i18n/es/resources/moneropedia/i2pcontrol.md create mode 100644 _i18n/es/resources/moneropedia/in-net.md create mode 100644 _i18n/es/resources/moneropedia/index.md create mode 100644 _i18n/es/resources/moneropedia/java-i2p.md create mode 100644 _i18n/es/resources/moneropedia/jump-service.md create mode 100644 _i18n/es/resources/moneropedia/kovri.md create mode 100644 _i18n/es/resources/moneropedia/lease-set.md create mode 100644 _i18n/es/resources/moneropedia/lease.md create mode 100644 _i18n/es/resources/moneropedia/locally-unique-host.md create mode 100644 _i18n/es/resources/moneropedia/message.md create mode 100644 _i18n/es/resources/moneropedia/miners.md create mode 100644 _i18n/es/resources/moneropedia/mnemonicseed.md create mode 100644 _i18n/es/resources/moneropedia/network-database.md create mode 100644 _i18n/es/resources/moneropedia/node.md create mode 100644 _i18n/es/resources/moneropedia/ntcp.md create mode 100644 _i18n/es/resources/moneropedia/openalias.md create mode 100644 _i18n/es/resources/moneropedia/paperwallet.md create mode 100644 _i18n/es/resources/moneropedia/paymentid.md create mode 100644 _i18n/es/resources/moneropedia/pedersen-commitment.md create mode 100644 _i18n/es/resources/moneropedia/reseed.md create mode 100644 _i18n/es/resources/moneropedia/ring-size.md create mode 100644 _i18n/es/resources/moneropedia/ringCT.md create mode 100644 _i18n/es/resources/moneropedia/ringsignatures.md create mode 100644 _i18n/es/resources/moneropedia/router-info.md create mode 100644 _i18n/es/resources/moneropedia/scalability.md create mode 100644 _i18n/es/resources/moneropedia/signature.md create mode 100644 _i18n/es/resources/moneropedia/smartmining.md create mode 100644 _i18n/es/resources/moneropedia/spendkey.md create mode 100644 _i18n/es/resources/moneropedia/ssu.md create mode 100644 _i18n/es/resources/moneropedia/stealthaddress.md create mode 100644 _i18n/es/resources/moneropedia/subscription.md create mode 100644 _i18n/es/resources/moneropedia/tail-emission.md create mode 100644 _i18n/es/resources/moneropedia/transaction.md create mode 100644 _i18n/es/resources/moneropedia/transports.md create mode 100644 _i18n/es/resources/moneropedia/tunnel.md create mode 100644 _i18n/es/resources/moneropedia/unlocktime.md create mode 100644 _i18n/es/resources/moneropedia/viewkey.md create mode 100644 _i18n/es/resources/moneropedia/wallet.md rename _strings_en.yml => _i18n/template.yml (76%) create mode 100644 _i18n/template/community/events.md create mode 100644 _i18n/template/community/hangouts.md create mode 100644 _i18n/template/community/merchants.md create mode 100644 _i18n/template/community/sponsorships.md create mode 100644 _i18n/template/community/team.md create mode 100644 _i18n/template/downloads.md create mode 100644 _i18n/template/get-started/accepting.md create mode 100644 _i18n/template/get-started/contributing.md create mode 100644 _i18n/template/get-started/faq.md create mode 100644 _i18n/template/get-started/mining.md create mode 100644 _i18n/template/get-started/using.md create mode 100644 _i18n/template/get-started/what-is-monero.md create mode 100644 _i18n/template/index.md create mode 100644 _i18n/template/press-kit.md create mode 100644 _i18n/template/resources/about.md create mode 100644 _i18n/template/resources/developer-guides.md create mode 100644 _i18n/template/resources/developer-guides/daemon-rpc.md create mode 100644 _i18n/template/resources/developer-guides/wallet-rpc.md create mode 100644 _i18n/template/resources/moneropedia/00-base-00 create mode 100644 _i18n/template/resources/moneropedia/account.md create mode 100644 _i18n/template/resources/moneropedia/address-book.md create mode 100644 _i18n/template/resources/moneropedia/address.md create mode 100644 _i18n/template/resources/moneropedia/airgap.md create mode 100644 _i18n/template/resources/moneropedia/base32-address.md create mode 100644 _i18n/template/resources/moneropedia/base64-address.md create mode 100644 _i18n/template/resources/moneropedia/block.md create mode 100644 _i18n/template/resources/moneropedia/blockchain.md create mode 100644 _i18n/template/resources/moneropedia/canonically-unique-host.md create mode 100644 _i18n/template/resources/moneropedia/change.md create mode 100644 _i18n/template/resources/moneropedia/clearnet.md create mode 100644 _i18n/template/resources/moneropedia/coinbase.md create mode 100644 _i18n/template/resources/moneropedia/consensus.md create mode 100644 _i18n/template/resources/moneropedia/cryptocurrency.md create mode 100644 _i18n/template/resources/moneropedia/data-directory.md create mode 100644 _i18n/template/resources/moneropedia/denominations.md create mode 100644 _i18n/template/resources/moneropedia/destination.md create mode 100644 _i18n/template/resources/moneropedia/eepsite.md create mode 100644 _i18n/template/resources/moneropedia/encryption.md create mode 100644 _i18n/template/resources/moneropedia/floodfill.md create mode 100644 _i18n/template/resources/moneropedia/fungibility.md create mode 100644 _i18n/template/resources/moneropedia/garlic-encryption.md create mode 100644 _i18n/template/resources/moneropedia/garlic-routing.md create mode 100644 _i18n/template/resources/moneropedia/i2np.md create mode 100644 _i18n/template/resources/moneropedia/i2p.md create mode 100644 _i18n/template/resources/moneropedia/i2pcontrol.md create mode 100644 _i18n/template/resources/moneropedia/in-net.md create mode 100644 _i18n/template/resources/moneropedia/index.md create mode 100644 _i18n/template/resources/moneropedia/java-i2p.md create mode 100644 _i18n/template/resources/moneropedia/jump-service.md create mode 100644 _i18n/template/resources/moneropedia/kovri.md create mode 100644 _i18n/template/resources/moneropedia/lease-set.md create mode 100644 _i18n/template/resources/moneropedia/lease.md create mode 100644 _i18n/template/resources/moneropedia/locally-unique-host.md create mode 100644 _i18n/template/resources/moneropedia/message.md create mode 100644 _i18n/template/resources/moneropedia/miners.md create mode 100644 _i18n/template/resources/moneropedia/mnemonicseed.md create mode 100644 _i18n/template/resources/moneropedia/network-database.md create mode 100644 _i18n/template/resources/moneropedia/node.md create mode 100644 _i18n/template/resources/moneropedia/ntcp.md create mode 100644 _i18n/template/resources/moneropedia/openalias.md create mode 100644 _i18n/template/resources/moneropedia/paperwallet.md create mode 100644 _i18n/template/resources/moneropedia/paymentid.md create mode 100644 _i18n/template/resources/moneropedia/pedersen-commitment.md create mode 100644 _i18n/template/resources/moneropedia/reseed.md create mode 100644 _i18n/template/resources/moneropedia/ring-size.md create mode 100644 _i18n/template/resources/moneropedia/ringCT.md create mode 100644 _i18n/template/resources/moneropedia/ringsignatures.md create mode 100644 _i18n/template/resources/moneropedia/router-info.md create mode 100644 _i18n/template/resources/moneropedia/scalability.md create mode 100644 _i18n/template/resources/moneropedia/signature.md create mode 100644 _i18n/template/resources/moneropedia/smartmining.md create mode 100644 _i18n/template/resources/moneropedia/spendkey.md create mode 100644 _i18n/template/resources/moneropedia/ssu.md create mode 100644 _i18n/template/resources/moneropedia/stealthaddress.md create mode 100644 _i18n/template/resources/moneropedia/subscription.md create mode 100644 _i18n/template/resources/moneropedia/tail-emission.md create mode 100644 _i18n/template/resources/moneropedia/transaction.md create mode 100644 _i18n/template/resources/moneropedia/transports.md create mode 100644 _i18n/template/resources/moneropedia/tunnel.md create mode 100644 _i18n/template/resources/moneropedia/unlocktime.md create mode 100644 _i18n/template/resources/moneropedia/viewkey.md create mode 100644 _i18n/template/resources/moneropedia/wallet.md create mode 100644 _i18n/template/resources/research-lab.md create mode 100644 _i18n/template/resources/roadmap.md create mode 100644 _i18n/template/resources/user-guides/How-to-mine-Monero-XMR-without-a-mining-equipment.md create mode 100644 _i18n/template/resources/user-guides/Offline_Backup.md create mode 100644 _i18n/template/resources/user-guides/create_wallet.md create mode 100644 _i18n/template/resources/user-guides/easiest_buy.md create mode 100644 _i18n/template/resources/user-guides/howto_fix_stuck_funds.md create mode 100644 _i18n/template/resources/user-guides/importing_blockchain.md create mode 100644 _i18n/template/resources/user-guides/index.md create mode 100644 _i18n/template/resources/user-guides/mine-to-pool.md create mode 100644 _i18n/template/resources/user-guides/mining_with_xmrig_and_docker.md create mode 100644 _i18n/template/resources/user-guides/monero-wallet-cli.md create mode 100644 _i18n/template/resources/user-guides/monero_tools.md create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/1.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/10.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/11.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/12.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/13.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/14.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/15.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/16.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/17.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/18.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/19.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/2.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/20.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/21.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/22.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/23.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/3.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/4.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/5.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/6.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/7.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/8.png create mode 100644 _i18n/template/resources/user-guides/png/create_wallet/9.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/01.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/02.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/03.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/04.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/05.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/06.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/07.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/08.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/09.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/10.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/11.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/12.png create mode 100644 _i18n/template/resources/user-guides/png/easiest_way/13.png create mode 100644 _i18n/template/resources/user-guides/png/mine_to_pool/1.png create mode 100644 _i18n/template/resources/user-guides/png/mine_to_pool/2.png create mode 100644 _i18n/template/resources/user-guides/png/mine_to_pool/3.png create mode 100644 _i18n/template/resources/user-guides/png/mine_to_pool/4.png create mode 100644 _i18n/template/resources/user-guides/png/remote_node/remote-node-screenshot.png create mode 100644 _i18n/template/resources/user-guides/png/solo_mine_GUI/01.PNG create mode 100644 _i18n/template/resources/user-guides/png/solo_mine_GUI/02.PNG create mode 100644 _i18n/template/resources/user-guides/png/solo_mine_GUI/03.PNG create mode 100644 _i18n/template/resources/user-guides/prove-payment.md create mode 100644 _i18n/template/resources/user-guides/remote_node_gui.md create mode 100644 _i18n/template/resources/user-guides/restore_account.md create mode 100644 _i18n/template/resources/user-guides/restore_from_keys.md create mode 100644 _i18n/template/resources/user-guides/securely_purchase.md create mode 100644 _i18n/template/resources/user-guides/solo_mine_GUI.md create mode 100644 _i18n/template/resources/user-guides/view_only.md create mode 100644 _i18n/template/resources/user-guides/vps_run_node.md create mode 100644 _i18n/template/technical-specs.md create mode 100644 _i18n/template/the-monero-project.md create mode 100644 _includes/untranslated.html create mode 100644 img/Monerujo-wallet.png diff --git a/README.md b/README.md index c27e6041..e5169940 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,9 @@ Copyright (c) 2014-2018, The Monero Project +## IMPORTANT MULTILANGUAGE UPDATE NOTICE +The multilingual update has recently been rolled out. The website now requires more steps to update so everyone can have a smooth experience. Please read all instructions carefully and follow them all! If they are not all followed, this leads to a ton of work for the website maintainers. A warning will be issued to repeat offenders. + ## Table of Contents 1.0 Introduction @@ -28,11 +31,15 @@ Copyright (c) 2014-2018, The Monero Project 12.0 How to add a question to the FAQ -13.0 License +13.0 How to translate a page + +14.0 How to add a new language + +15.0 License ## 1.0 Introduction -This README here to walk you through everything you need to know to make changes, edits, or even completely new pages for the new [getmonero.org website](https://getmonero.org/). It'll definitely be a bit of a ride, so strap yourself in. Please note that translations are not available yet, but when they are added, this document will be updated with instructions on how to translate the content of [getmonero.org website](https://getmonero.org/). In the meantime, any help translating this document into another language is greatly appreciated. +This README here to walk you through everything you need to know to make changes, edits, or even completely new pages for the new [getmonero.org website](https://getmonero.org/). It'll definitely be a bit of a ride, so strap yourself in. Feel free to skip down to a relevant section if you already know what you need. So to go to the 'How to make a User Guide' section use your find function and type '5.0'. @@ -71,10 +78,16 @@ Every section from here on out will talk about how to make a specific type of we A few random points of note: - All external links must have http:// or https:// in front of them or they will not redirect properly. -- If you want to add a new page to the navigation, you should note that there are two menus in `header.html`. One for mobile and one for desktop. Your page must be added in the appropriate place in BOTH navigations. +- If you want to add a new page to the navigation, you should go to ALL LANGUAGES in the `_data/lang` folder including `template` and add the page. - It is strongly strongly STRONGLY encouraged that you if you make a change, you - at the minimum - test it on your local machine before submitting a PR. Sometimes unexpected things may happen due to a change. If you change a page, check the whole page on multiple screen sizes and browsers to make sure there wasn't any collateral damage. ### 3.1 Housekeeping + +#### Editing the Site +When you make an edit to ANY page on the English language of this website, PLEASE copy your changes into the corresponding `/_i18n/template/` file as well. + +The Monero Translation workgroup will do their best to keep tabs on all changes of the site, but it'd be nice to notify them that you've changed a page so they can make sure the equivalent pages are changed accordingly in the other languages. + #### GitHub Issues We ask that if you open an issue on the site that you remain available for clarifying questions or corrections. We do our best to close issues that are resolved when we make changes to the site, but If your issue is resolved by a contributer and the issue is not closed we ask that you close it in a timely manner. A contributer (rehrar, SamsungGalaxyPlayer, or other community members, etc) may ask you to close an issue after it's confirmed fixed. Please review the changes to the site and close your issue if you can verify that it's fixed. @@ -119,42 +132,63 @@ You're all done. Submit a PR and wait for it to be reviewed and merged. Be sure ### 5.1 Quick Start -* Make file in /resources/user-guides with an .md ending and no spaces in filename. -* Front Matter as in 5.3 +* Create file in /resources/user-guides with an .md ending and no spaces in filename. +* File content as in 5.3 +* Create file in /_i18n/en/resources/user-guides with the exact same filename as above ending in .md * Write User Guide -* Add guide using markdown in the correct category in /resources/user-guides/index.md being careful not to mess with any indentation +* Copy User Guide file to ALL LANGUAGES in /_i18n/[ALL LANGUAGES]/resources/user-guides +* Paste `{% include untranslated.html %}` into the top of each language version of your User Guide, except the original language +* Add guide using markdown in the correct category in ALL LANGUAGES to /_i18n/[ALL LANGUAGES]/resources/user-guides/index.md being careful not to mess with any indentation * Test/Build * Submit PR ### 5.2 Make a file Navigate to the /resources/user-guides folder and make a new file. Be sure the file name has no spaces and the ending is .md -### 5.3 Front Matter +### 5.3 Content of file ``` --- -layout: static_page +layout: user-guide title: TITLE OF YOUR USER GUIDE +permalink: /resources/user-guides/NAME-OF-FILE-GOES-HERE.html --- + +{% tf resources/user-guides/NAME-OF-FILE-GOES-HERE.md %} ``` -### 5.4 Write +Copy this exactly and merely change the files names where indicated. + +### 5.4 Create file in localization folders +Navigate to the /i18n/ folder and choose the correct folder for your language. Navigate further into the `resources/user-guides` folders and make a .md file with the EXACT SAME filename as the you made before. + +### 5.5 Write Write your user guide. Be succinct but thorough. Remember, people will be using your guides when they need help. Make sure all the information is there. Feel free to use images or screenshots if necessary to help get your point across. -### 5.5 Add Guide to the 'User Guide' landing page -In the /resources/user-guides folder, find the file labeled index.md and open it. +The title should be at the top of the User Guide using a single `#` for an H1 tag. Titles will not be automatically put on these pages as with other pages. There should be NO front matter on this file. + +### 5.5 Copy User Guide file into all languages +Copy your file and navigate to each language file in the /i18n folder. In each language folder (INCLUDING template) go to the resources/user-guides folder and paste your user guide (don't worry, you don't have to translate it) there. This is very important, and the site will not build if the file with the same name is not in each language folder. + +As you paste into each folder, open up the file and paste the following snippet at the top of the file (before your title): +`{% include untranslated.html %}`. This does not need to be done in the original language that the User Guide was written in. + +### 5.6 Add Guide to the 'User Guide' landing page of EACH LANGUAGE +In the /_i18n/[ORIGINAL LANGUAGE OF USER GUIDE]/resources/user-guides folder, find the file labeled index.md and open it. DO NOT CHANGE ANYTHING IN THIS DOCUMENT BESIDES WHAT YOU ARE INSTRUCTED TO. This file will look quite different because it's HTML. Don't panic. Simply Ctrl + F (i.e. the find feature) and search for the category that you want to put your User Guide in. You will see there are some sections that are not indented like the others. They are flush with the left side of the screen. **Do not change the indentation.** You can put markdown in these areas. -Once you've identified the non-indented area under the category you would like your User Guide to be under, you can use markdown to insert your link underneath the others. `[TITLE OF USER GUIDE](LINK-TO-USER-GUIDE.html)`. Please note that the file name in between the parentheses must be EXACTLY the same name as the file name you made in step 5.2, but with a `.html` at the end instead of `.md`. +Once you've identified the non-indented area under the category you would like your User Guide to be under, you can use markdown to insert your link underneath the others. `[TITLE OF USER GUIDE]({{site.baseurl}}/LINK-TO-USER-GUIDE.html)`. Please note that the file name in between the parentheses must be EXACTLY the same name as the permalink you made in step 5.3, but with a `.html` at the end instead of `.md` and the snippet `{{site.baseurl}}/` before the link. In the event that you think your User Guide should be in a new Category that doesn't exist yet, contact rehrar to make one for you. -### 5.6 Build/Test +Repeat the above process for each language version of this index page INCLUDING THE template. + +### 5.7 Build/Test Build your website using `jekyll serve` if it's not rebuilding automatically and test that your link appears in the correct category and that it leads to your User Guide when clicked. Test your User Guide in the browser and contact rehrar if there are any bugs. -### 5.7 Submit Pull Request +### 5.8 Submit Pull Request You're all done. Submit a PR and wait for it to be reviewed and merged. Be sure to make any changes if requested. ## 6.0 How to make a Moneropedia Entry @@ -422,7 +456,66 @@ Build your website using `jekyll serve` if it's not rebuilding automatically. If ### 12.3 Submit a Pull Request You're all done. Submit a PR and wait for it to be reviewed and merged. Be sure to make any changes if requested. -## 13.0 Website License +## 13.0 How to translate a page + +### 13.1 Quickstart +* Navigate to the correct language in the /i18n folder and find the page you wish to translate +* Click the file and translate the page, not touching any HTML or markdown. +* Remove `{% include untranslated.html %}` from the page +* Test/Build +* Submit PR + +### 13.2 Naviate to correct file +Go to the /i18n folder and find the two letter code for the language you wish to translate for. Enter that folder and find the file you wish to translate. The filenames are all in English and MUST NOT BE CHANGED. + +### 13.3 Translate the file +Here you can do your translation. Depending on the page, you may have to maneuver around some HTML or markdown. In general, anything between two tags (such as `

TRANSLATE THIS

`) should be fine. Testing is VERY important, so do NOT skip step 13.4. If during testing, the page appears different from the original English page (besides the translated text of course), you did something wrong and may have to start again. + +### 13.4 Remove the 'untranslated' snippet +Somewhere on the page (usually the top) should be a snippet that says `{% include untranslated.html %}`. Simply delete this completely from the file. This will remove the orange bar from the bottom saying the page is untranslated. + +### 13.5 Build/Test +Build your website using `jekyll serve` if it's not rebuilding automatically. + +If the build is successful, go to the correct page in the correct language and check to see that everything is translated, and that the page looks identical to the original English page (besides the translated text). Test the page and let rehrar know if there are any bugs. + +### 13.6 Submit a Pull Request +You're all done. Submit a PR and wait for it to be reviewed and merged. Be sure to make any changes if requested. + +## 14.0 How to add a new language +Whoo boy, this is the big one. Please follow all directions exactly. + +### 14.1 _config.yml file +Navigate to the root folder of the whole website and find the file labeled `_config.yml`. Open it and find the line that says `languages:`. Add your two letter language code (Google it if you don't know it) in between the brackets after the others already present. You will need to put a comma after the previous last one. + +Example: +``` +languages: ["en", "es", "NEW LANG HERE"] +``` +Save and exit the file. + +### 14.2 _data folder +Navigate to the `_data/lang` folder and copy the `template` folder. Paste it into the same folder and the copy renamed to the two letter language code of the language you will be translated to. +**The template folder itself should still be there. It should not be renamed. There should be a new folder in addition to the ones that were already there.** + +Translate the content of the files. Do not touch anything labeled `url`, and in the roadmap.yml ONLY translate the `name:` content. + +### 14.3 _i18n folder +Navigate to the _i18n folder and duplicate the template.yml file. Rename the duplicate to the two letter language code of your language with a `.yml` at the end. Repeat this process with the `template` folder as well. +**The template folder and yml file themselves should still be there. They should not be renamed. There should be a new folder and yml file in addition to the ones that were already there.** + +Enter the .yml file and translate everything there. + +### 14.3 Translate +If you will be translating the content, please refer to section 13.0 in this README for instructions on translating pages. + +### 14.4 Build/Test +Build your website using `jekyll serve`. If the build is successful, navigate to any page on the site and check to make sure that your language is appearing in the dropdown for languages on both mobile and desktop. + +### 14.5 Submit a Pull Request +You're all done. Submit a PR and wait for it to be reviewed and merged. Be sure to make any changes if requested. + +## 15.0 Website License Copyright (c) 2014-2017, The Monero Project diff --git a/_data/lang/es/navigation.yml b/_data/lang/es/navigation.yml index 75cd1abf..a37f92f3 100644 --- a/_data/lang/es/navigation.yml +++ b/_data/lang/es/navigation.yml @@ -51,4 +51,4 @@ - page: Guías de desarrolladores url: resources/developer-guides - page: Especificaciones técnicas - url: resources/technical-specs \ No newline at end of file + url: technical-specs \ No newline at end of file diff --git a/_data/lang/es/roadmap.yml b/_data/lang/es/roadmap.yml index bd2faf02..4852b209 100644 --- a/_data/lang/es/roadmap.yml +++ b/_data/lang/es/roadmap.yml @@ -1,6 +1,6 @@ - year: 2014 accomplishments: - - name: Launched Boi!!! + - name: Launched on Bitcointalk date: 2014-04-18 status: completed - name: Renamed from Bitmonero to Monero diff --git a/_data/lang/template/footer-1.yml b/_data/lang/template/footer-1.yml new file mode 100644 index 00000000..2d0408f8 --- /dev/null +++ b/_data/lang/template/footer-1.yml @@ -0,0 +1,50 @@ +- title: Resources + subfolderitems: + - name: About Monero + url: resources/about/ + - name: Moneropedia + url: resources/moneropedia/ + - name: Developer Guides + url: resources/developer-guides/ + - name: User Guides + url: resources/user-guides/ + - name: RSS Feed + url: https://getmonero.org/feed.xml +- title: IRC Channels + subfolderitems: + - name: monero + url: irc://chat.freenode.net/#monero + - name: monero-dev + url: irc://chat.freenode.net/#monero-dev + - name: monero-markets + url: irc://chat.freenode.net/#monero-markets + - name: monero-pools + url: irc://chat.freenode.net/#monero-pools + - name: monero-community + url: irc://chat.freenode.net/#monero-community + - name: monero-translations + url: irc://chat.freenode.net/#monero-translations + - name: monero-hardware + url: irc://chat.freenode.net/#monero-hardware +- title: Community + subfolderitems: + - name: Reddit + url: https://reddit.com/r/monero + - name: Stack Exchange + url: https://monero.stackexchange.com/ + - name: BitcoinTalk Thread + url: https://bitcointalk.org/index.php?topic=583449.0 + - name: Mattermost Chat + url: https://mattermost.getmonero.org/ + - name: Telegram Chat + url: https://telegram.me/bitmonero +- title: The Monero Project + subfolderitems: + - name: Open Alias + url: https://openalias.org/ + - name: Kovri + url: https://getkovri.org/ + - name: Monero Research Lab + url: resources/research-lab/ + - name: Monero Press Kit + url: press-kit \ No newline at end of file diff --git a/_data/lang/template/footer-2.yml b/_data/lang/template/footer-2.yml new file mode 100644 index 00000000..5f750fc1 --- /dev/null +++ b/_data/lang/template/footer-2.yml @@ -0,0 +1,6 @@ +- name: Legal + url: legal +- name: Source Code + url: https://github.com/monero-project +- name: Technical Specs + url: technical-specs/ \ No newline at end of file diff --git a/_data/lang/template/navigation.yml b/_data/lang/template/navigation.yml new file mode 100644 index 00000000..18681a7e --- /dev/null +++ b/_data/lang/template/navigation.yml @@ -0,0 +1,54 @@ +- title: Get Started + subfolderitems: + - page: What is Monero? + url: get-started/what-is-monero + - page: Using + url: get-started/using + - page: Accepting + url: get-started/accepting + - page: Contributing + url: get-started/contributing + - page: Mining + url: get-started/mining + - page: FAQ + url: get-started/faq +- title: Downloads + url: downloads/ +- title: Recent News + subfolderitems: + - page: All Posts + url: blog + - page: Missives + url: blog/tags/monero%20missives.html + - page: Meeting Logs + url: blog/tags/dev%20diaries.html + - page: Releases + url: blog/tags/releases.html +- title: Community + subfolderitems: + - page: Team + url: community/team + - page: Hangouts + url: community/hangouts + - page: Events + url: community/events + - page: Sponsorships + url: community/sponsorships + - page: Merchants + url: community/merchants +- title: Resources + subfolderitems: + - page: About + url: resources/about + - page: Roadmap + url: resources/roadmap + - page: Research Lab + url: resources/research-lab + - page: Moneropedia + url: resources/moneropedia + - page: User Guides + url: resources/user-guides + - page: Developer Guides + url: resources/developer-guides + - page: Technical Specs + url: technical-specs \ No newline at end of file diff --git a/_data/lang/template/roadmap.yml b/_data/lang/template/roadmap.yml new file mode 100644 index 00000000..4852b209 --- /dev/null +++ b/_data/lang/template/roadmap.yml @@ -0,0 +1,109 @@ +- year: 2014 + accomplishments: + - name: Launched on Bitcointalk + date: 2014-04-18 + status: completed + - name: Renamed from Bitmonero to Monero + date: 2014-04-23 + status: completed + - name: Recovered from a spam attack + date: 2014-09-04 + status: completed + - name: Monero Research Lab Papers 1 and 2 published + date: 2014-09-12 + status: completed + - name: Monero Research Lab Paper 3 published + date: 2014-09-25 + status: completed + - name: 0.8.8.6 released + date: 2014-12-08 + status: completed +- year: 2015 + accomplishments: + - name: Monero Research Lab Paper 4 published + date: 2015-01-26 + status: completed +- year: 2016 + accomplishments: + - name: 0.9.0 Hydrogen Helix released + date: 2016-01-01 + status: completed + - name: Monero Research Lab Paper 5 published + date: 2016-02-10 + status: completed + - name: Hardfork to require minimum ringsize of 3 on all transactions + date: 2016-03-22 + status: completed + - name: 0.10.0 Wolfram Warptangent released + date: 2016-09-18 + status: completed + - name: Hardfork to split coinbase into denominations + date: 2016-09-21 + status: completed + - name: 0.10.1 Wolfram Warptangent released + date: 2016-12-14 + status: completed + - name: Official GUI Beta 1 released + date: 2016-12-22 + status: completed +- year: 2017 + accomplishments: + - name: Hardfork to enable RingCT transactions + date: 2017-01-05 + status: completed + - name: 0.10.2 released; critical vulnerability patched + date: 2017-02-22 + status: completed + - name: 0.10.3.1 Wolfram Warptangent released + date: 2017-03-27 + status: completed + - name: Hardfork to adjust minimum blocksize and dynamic fee algorithm + date: 2017-04-15 + status: completed + - name: Website redesigned + date: 2017-07-04 + status: completed + - name: 0.11.0.0 Helium Hydra released + date: 2017-09-07 + status: completed + - name: Fluffy blocks + date: 2017-09-07 + status: completed + - name: GUI out of beta + date: 2017-09-10 + status: completed + - name: Hardfork to increase minimum ringsize to 5 and require RingCT transactions + date: 2017-09-15 + status: completed + - name: 0MQ/ZeroMQ + date: September, 2017 + status: completed + - name: Fluffy blocks + date: + status: ongoing + - name: GUI port to android + date: + status: ongoing + - name: Forum Funding System redesign + date: + status: ongoing + - name: Subaddresses + date: + status: ongoing + - name: Multi-signatures (multisig) + date: + status: ongoing + - name: Kovri alpha release + date: + status: upcoming +- year: 2018 + accomplishments: + - name: Additional MRL research papers + date: + status: upcoming + - name: Second-layer solutions for speed and scalability + date: + status: upcoming + - name: More efficient range proofs for RingCT to reduce transaction sizes + date: + status: upcoming diff --git a/_i18n/en.yml b/_i18n/en.yml index d5bddc7c..e7f5d1ae 100644 --- a/_i18n/en.yml +++ b/_i18n/en.yml @@ -18,6 +18,7 @@ global: privacy: Privacy copyright: Copyright edit: Edit This Page + untranslated: This page is not yet translated. If you would like to help translate it, please see the titles: index: Home whatismonero: What is Monero (XMR)? diff --git a/_i18n/en/downloads.md b/_i18n/en/downloads.md index 2f42d514..7590aa6f 100644 --- a/_i18n/en/downloads.md +++ b/_i18n/en/downloads.md @@ -83,9 +83,12 @@ If you'd prefer to use a blockchain bootstrap, instead of syncing from scratch,
-
+
MyMonero Logo
+
+ Monerujo Logo +
diff --git a/_i18n/en/get-started/mining.md b/_i18n/en/get-started/mining.md index ce648307..2a944229 100644 --- a/_i18n/en/get-started/mining.md +++ b/_i18n/en/get-started/mining.md @@ -66,8 +66,14 @@

XMR Stak

+
+

XMRig

+
+

XMRig AMD

+
+

XMRig NVIDIA

diff --git a/_i18n/en/resources/roadmap.md b/_i18n/en/resources/roadmap.md index f60d69b1..270031bc 100644 --- a/_i18n/en/resources/roadmap.md +++ b/_i18n/en/resources/roadmap.md @@ -42,8 +42,7 @@

2015

- {% for toplevel in site.data.roadmap %} - + {% for toplevel in site.data.lang[site.lang].roadmap %} {% if toplevel.year == 2015 %} {% for roadlist in toplevel.accomplishments %}
@@ -54,18 +53,15 @@

{{roadlist.date}}: {{roadlist.name}}

- {%endfor%} {%endif%} - {%endfor%}

2016

- {% for toplevel in site.data.roadmap %} - + {% for toplevel in site.data.lang[site.lang].roadmap %} {% if toplevel.year == 2016 %} {% for roadlist in toplevel.accomplishments %}
@@ -76,18 +72,15 @@

{{roadlist.date}}: {{roadlist.name}}

- {%endfor%} {%endif%} - {%endfor%}

2017

- {% for toplevel in site.data.roadmap %} - + {% for toplevel in site.data.lang[site.lang].roadmap %} {% if toplevel.year == 2017 %} {% for roadlist in toplevel.accomplishments %}
@@ -102,18 +95,15 @@ {%endif%}
- {%endfor%} {%endif%} - {%endfor%}

Future

- {% for toplevel in site.data.roadmap %} - + {% for toplevel in site.data.lang[site.lang].roadmap %} {% if toplevel.year == 2018 %} {% for roadlist in toplevel.accomplishments %}
@@ -128,16 +118,12 @@ {%endif%}
- {%endfor%} {%endif%} - {%endfor%} - - \ No newline at end of file diff --git a/_i18n/es.yml b/_i18n/es.yml index 1e0beccb..64f18818 100644 --- a/_i18n/es.yml +++ b/_i18n/es.yml @@ -18,6 +18,7 @@ global: privacy: Privacy copyright: Copyright edit: Edit This Page + untranslated: Esta pagina is not yet translated. If you would like to help translate it, please see the titles: index: Inicio whatismonero: ¿Qué es Monero (XMR)? diff --git a/_i18n/es/community/events.md b/_i18n/es/community/events.md index f24325d3..417d8061 100644 --- a/_i18n/es/community/events.md +++ b/_i18n/es/community/events.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
Monero people are always down to get together and have a good time. Check below to see Monero-related events happening in your area.
diff --git a/_i18n/es/community/hangouts.md b/_i18n/es/community/hangouts.md index 4123698d..35e6a3f5 100644 --- a/_i18n/es/community/hangouts.md +++ b/_i18n/es/community/hangouts.md @@ -1 +1,97 @@ -

No

\ No newline at end of file +{% include untranslated.html %} +
+The Monero community is diverse and varied. We come from all over, but we definitely have some places we like to hang out together. You'll find most of them below. Join us! +
+ +
+
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ +
+
+ +
+
+
+
+
+

Workgroup Resources

+
+
+
+

In an effort to support organic workgroups, Monero has several resources that the community can use to meet and plan projects. Mattermost even has relays into the most popular Monero-related IRC channels.

+
+
+
+

Slack

+
+ +
+

Taiga

+
+
+
+
+
+
+

IRC Channels

+
+
+
+

The Monero community utilizes a lot of IRC channels that each serve different purposes. Some to work, and some just to hang out. You'll find the more popular ones below.

+
+
+ {% for channel in site.data.irc %} +
+ #{{ channel.channel }} +

{{ channel.description }}

+
+ {% endfor %} +
+
+
+
+ + + + + +
+
+ +
diff --git a/_i18n/es/community/merchants.md b/_i18n/es/community/merchants.md index 07047110..41e4816c 100644 --- a/_i18n/es/community/merchants.md +++ b/_i18n/es/community/merchants.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
Merchants of all kinds have come to value the financial privacy that Monero brings. Below is a list of the merchants that we know of that currently accept Monero for their goods and services. If a company no longer accepts Monero or you would like your business to be listed, please [open a GitHub issue and let us know](https://github.com/monero-project/monero-site/issues).
diff --git a/_i18n/es/community/sponsorships.md b/_i18n/es/community/sponsorships.md index d2d4d7b0..d301dcf8 100644 --- a/_i18n/es/community/sponsorships.md +++ b/_i18n/es/community/sponsorships.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
The following businesses have supported the Monero Project in its goal to bring financial privacy to the world. We couldn't be more grateful for their contributions. If you would like to sponsor the Monero Project and be listed on this page, please send an email to dev@getmonero.org.
diff --git a/_i18n/es/community/team.md b/_i18n/es/community/team.md index a654cb9a..341d2a19 100644 --- a/_i18n/es/community/team.md +++ b/_i18n/es/community/team.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
diff --git a/_i18n/es/downloads.md b/_i18n/es/downloads.md index 2f42d514..ae8003b2 100644 --- a/_i18n/es/downloads.md +++ b/_i18n/es/downloads.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
@@ -83,9 +84,12 @@ If you'd prefer to use a blockchain bootstrap, instead of syncing from scratch,
-
+
MyMonero Logo
+
+ Monerujo Logo +
diff --git a/_i18n/es/get-started/accepting.md b/_i18n/es/get-started/accepting.md index e607e8d3..1a6f315f 100644 --- a/_i18n/es/get-started/accepting.md +++ b/_i18n/es/get-started/accepting.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
@@ -5,25 +6,25 @@
-

Instrucciones para la interfaz de línea de comandos (CLI)

+

Instructions for the Command-Line Interface

-### Los fundamentos +### The Basics -Monero funciona de una manera un poco diferente de otras criptomonedas. En el caso de una moneda digital como Bitcoin y sus derivativos, los sistemas de pago de comerciantes usualmente crean una nueva dirección de destinatario para cada pago o para cada usuario. +Monero works a little differently to what you may have become accustomed to from other @cryptocurrencies. In the case of a digital currency like Bitcoin and its many derivatives merchant payment systems will usually create a new recipient @address for each payment or user. -Puesto que Monero usa direcciones ocultadas, no hay necesidad en tener direcciones de destinatario separadas para cada pago o usuario. La dirección de una sola cuenta puede ser publicada. Para recibir pagos, un comerciante proporcionará un cliente con una ID de pago. - -Una ID de pago es una cadena de 64 caracteres hexadecimales que se crea de manera aleatoria por un comerciante. Un ejemplo de ID de pago es: +However, because Monero has @stealth-addresses there is no need to have separate recipient addresses for each payment or user, and a single @account address can be published. Instead, when receiving payments a merchant will provide the person paying with a "payment ID". +A @payment-ID is a hexadecimal string that is 64 characters long, and is normally randomly created by the merchant. An example of a payment ID is: ``` 666c75666679706f6e7920697320746865206265737420706f6e792065766572 ``` -### Verificar un pago en monero-wallet-cli -Si quiere verificar un pago usando monero-wallet-cli, puede usar el comando de “payments” seguido por una o varas ID de pago que quiere verificar. Por ejemplo: +### Checking for a Payment in monero-wallet-cli + +If you want to check for a payment using monero-wallet-cli you can use the "payments" command followed by the payment ID or payment IDs you want to check. For example: ``` [wallet 49VNLa]: payments 666c75666679706f6e7920697320746865206265737420706f6e792065766572 @@ -32,23 +33,23 @@ Si quiere verificar un pago usando monero-wallet-cli, puede usar el comando de [wallet 49VNLa]: █ ``` -Si quiere verificar pagos mediante programación, véase la siguiente sección. +If you need to check for payments programmatically, then details follow the next section. -### Recibir pagos paso a paso +### Receiving a Payment Step-by-Step -* Generar una cadena de 64 caracteres hexadecimales aleatorios para el pago -* Pasar la ID de pago y la dirección de Monero al individuo que realiza el pago -* Verificar el pago usando “payments” en monero-wallet-cli +* Generate a random 64 character hexadecimal string for the payment +* Communicate the payment ID and Monero address to the individual who is making payment +* Check for the payment using the "payments" command in monero-wallet-cli -### Verificar el pago mediante programación +### Checking for a Payment Programmatically -Para verificar un pago mediante programación, puede usar las llamadas de JSON RPC API get_payments o get_bulk_payments. +In order to check for a payment programmatically you can use the get_payments or get_bulk_payments JSON RPC API calls. -*get_payments: esto requiere a un parámetro con una sola ID de pago. +*get_payments*: this requires a payment_id parameter with a single payment ID. -*get_bulk_payments: esto es un método preferido. Requiere dos parámetros, payments_ids - un array de JSON de IDs de pagos - y un óptimo min_block_height - la altura de bloque a escanear. +*get_bulk_payments*: this is the preferred method, and requires two parameters, payment_ids - a JSON array of payment IDs - and an optional min_block_height - the block height to scan from. -Un ejemplo de los datos devueltos: +An example of returned data is as follows: ``` [ monero->~ ]$ curl -X POST http://127.0.0.1:18500/json_rpc -d '{"jsonrpc":"2.0","method":"get_bulk_payments","id":"test", "params":{"payment_ids": ["666c75666679706f6e7920697320746865206265737420706f6e792065766572"]}}' -H "Content-Type: application/json" @@ -67,15 +68,15 @@ Un ejemplo de los datos devueltos: } ``` -Es importante notar que los importes devueltos se presentan usando las unidades básicas de Monero y no las unidades de display que normalmente se usan en aplicaciones de usuario final. Además, puesto que una transacción típicamente tendrá varias salidas que se añaden al total requerido de pago, los importes deben agruparse por el tx_hash o el payment_id y deben añadirse. Asimismo, puesto que salidas múltiples pueden tener el mismo importe, es imprescindible que no trate de filtrar los datos devueltos de una sola llamada get_bulk_payments. +It is important to note that the amounts returned are in base Monero units and not in the display units normally used in end-user applications. Also, since a transaction will typically have multiple outputs that add up to the total required for the payment, the amounts should be grouped by the tx_hash or the payment_id and added together. Additionally, as multiple outputs can have the same amount, it is imperative not to try and filter out the returned data from a single get_bulk_payments call. -Antes de buscar pagos, es necesario usar el demonio RPC API (la llamada RPC get_info) para verificar si se haya recibido bloques adicionales. +Before scanning for payments it is useful to check against the daemon RPC API (the get_info RPC call) to see if additional blocks have been received. Typically you would want to then scan only from that received block on by specifying it as the min_block_height to get_bulk_payments. -### Buscar pagos mediante programación +### Programatically Scanning for Payments -* Obtener la altura actual de bloque del demonio y proceder sólo si ha aumentado desde su última búsqueda -* Ejecute la llamada de RPC API get_bulk_payments con la última altura de bloque escaneada y la lista de todas IDs de pagos en el sistema -* Guardar la altura actual de bloque como la última altura escaneada +* Get the current block height from the daemon, only proceed if it has increased since our last scan +* Call the get_bulk_payments RPC API call with our last scanned height and the list of all payment IDs in our system +* Store the current block height as our last scanned height * Remove duplicates based on transaction hashes we have already received and processed
diff --git a/_i18n/es/get-started/contributing.md b/_i18n/es/get-started/contributing.md index 72a02ab1..ac8467a1 100644 --- a/_i18n/es/get-started/contributing.md +++ b/_i18n/es/get-started/contributing.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
Monero is an open-source, community-driven project. Described below are several ways to support the project.
@@ -49,7 +50,7 @@ Mining ensures the Monero network remains decentralized and secure. In the Moner
-

Ongoing development is supported by donations and sponsorships.

+

Ongoing development is supported by donations and sponsorships.

diff --git a/_i18n/es/get-started/faq.md b/_i18n/es/get-started/faq.md index c6b2d175..4aa8d532 100644 --- a/_i18n/es/get-started/faq.md +++ b/_i18n/es/get-started/faq.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
diff --git a/_i18n/es/get-started/mining.md b/_i18n/es/get-started/mining.md index 321332b3..2a944229 100644 --- a/_i18n/es/get-started/mining.md +++ b/_i18n/es/get-started/mining.md @@ -16,7 +16,7 @@
@@ -66,8 +66,14 @@

XMR Stak

+
+

XMRig

+
+

XMRig AMD

+
+

XMRig NVIDIA

diff --git a/_i18n/es/get-started/using.md b/_i18n/es/get-started/using.md index 29931282..8d13dae7 100644 --- a/_i18n/es/get-started/using.md +++ b/_i18n/es/get-started/using.md @@ -1,5 +1,6 @@ +{% include untranslated.html %}
-

Es fácil hacer transacciones con Monero. Esta página sirve para mostrar cómo realizarlo.

+

Transacting with Monero can be made easy. This page is designed to guide users in that process.

@@ -9,11 +10,11 @@
-

1. Aprender

+

1. Learn

-

Monero es la criptomoneda segura, privada y no rastreable. Los desarrolladores y la comunidad están dedicados a proteger estos valores. Aprenda más sobre Monero en la página ¿Qué es Monero?. El código original también está disponible para revisión y discusión.

+

Monero is a secure, private, and untraceable cryptocurrency. The developers and community are committed to protecting these values. Learn more by reading the What is Monero page. The source code is also available for review and discussion.

@@ -26,11 +27,11 @@
-

2. Pedir ayuda

+

2. Request Support

-

La comunidad grande y alentador le asistirá si tiene una dificultad o pregunta.Véase la página de Canales de comunicación para más información.

+

There is a large and supportive community that will assist if you experience any difficulty. See the Hangouts page for more information.

@@ -38,11 +39,11 @@
-

3. Crear una billetera

+

3. Generate a Wallet

-

Se requiere crear una billetera para mantener sus fondos seguros. Vaya a la página de Descargas para ver las billeteras electrónicas disponibles.

+

A Monero wallet is required to secure your own funds. See the Downloads page for a listing of available wallets.

@@ -55,11 +56,11 @@
-

4. Adquerir Monero

+

4. Acquire Monero

-

Se compra Monero en una plataforma de intercambio with fiat or other cryptocurrencies. con monedas fiduciarias o otras criptomonedas. Un modo alternativo de adquirir Monero es minar, lo cual es el proceso computacional complejo de recordar las transacciones en la cadena de bloque inmutablemente..

+

Monero may be purchased on an exchange with fiat or other cryptocurrencies. An alternate way of acquiring Monero is via mining, the computationally-complex process whereby transactions are immutably recorded on the blockchain.

@@ -72,11 +73,11 @@
-

5. Enviar y recibir Monero

+

5. Send and Receive Monero

-

Aprenda cómo enviar y recibir Monero con esta guía.

+

Learn how to send and receive Monero by viewing the guide.

@@ -84,11 +85,11 @@
-

6. Usar Monero

+

6. Transact with Monero

-

Se puede usar Monero para pagar por varios bienes y servicios. Véase la lista de comerciantes que aceptan Monero.

+

Monero may be used to purchase many goods and services. For a listing, see the Merchants page.

diff --git a/_i18n/es/get-started/what-is-monero.md b/_i18n/es/get-started/what-is-monero.md index f254b47e..cb8f0c30 100644 --- a/_i18n/es/get-started/what-is-monero.md +++ b/_i18n/es/get-started/what-is-monero.md @@ -1,16 +1,17 @@ +{% include untranslated.html %}
-

Qué hay que saber

+

What you need to know

-

Monero es la criptomoneda líder que se enfoque en las transacciones privadas y resistentes a la censura.

-

La mayoría de criptomonedas, incluso Bitcoin y Ethereum, tiene las cadenas de bloques transparentes, lo cual significa que cualquier persona las puede verificar y rastrear. Asimismo, las direcciones enviadas y recibidos de estas transacciones pueden revelar la identidad real de una persona.

-

Monero usa criptografía para ocultar las direcciones y los importes de transacciones.

+

Monero is the leading cryptocurrency with a focus on private and censorship-resistant transactions.

+

Most existing cryptocurrencies, including Bitcoin and Ethereum, have transparent blockchains, meaning that transactions are openly verifiable and traceable by anyone in the world. Furthermore, sending and receiving addresses for these transactions may potentially be linkable to a person's real-world identity.

+

Monero uses cryptography to shield sending and receiving addresses, as well as transacted amounts.

Encrypted lock @@ -21,18 +22,19 @@ Classified document
-

Transacciones de Monero son confidenciales y no rastreables.

-

En cada transacción de Monero, por defecto se ofuscan el envío y la recepción de direcciones así como los importes tramitados. Esta tecnología de privacidad asegura que cada actividad del usuario de Monero mejore la privacidad de otros usuarios, a diferencia de criptomonedas que lo hacen de manera selectiva (por ejemplo, Z-Cash).

-

Monero es fungible. Por el beneficio de ofuscación, Monero no puede mancharse por la participación en transacciones previas. Es decir, Monero siempre será aceptado sin censura.

-

The Kovri Project, el cual está en el estado de desarrollo, enviará y encriptará las transacciones a través de los nodos del proyecto del Internet invisible I2P . Esta tecnología ofuscará la dirección IP del usuario y proporcionará la protección adicional contra la supervisión de la red.

+

Monero transactions are confidential and untraceable.

+

Every Monero transaction, by default, obfuscates sending and receiving addresses as well as transacted amounts. This always-on privacy means that every Monero user's activity enhances the privacy of all other users, unlike selectively transparent cryptocurrencies (e.g. Z-Cash).

+

Monero is fungible. By virtue of obfuscation, Monero cannot become tainted through participation in previous transactions. This means Monero will always be accepted without the risk of censorship.

+

The Kovri Project, currently in development, will route and encrypt transactions via I2P Invisible Internet Project nodes. This will obfuscate a transactor's IP address and provide further protection against network monitoring.

+
-

Monero es la comunidad viva que atrae a los mejores investigadores e ingenieros del mundo en el campo de criptomonedas.

-

Más de 240 desarrolladores incluso 30 desarrolladores claves, han contribuido al proyecto Monero. La gente en los foros y canales de chat es amable y activa.

-

El Laboratorio de investigación de Monero, el Equipo principal de desarrollo y los desarrolladores de comunidad siempre siguen probando los límites de la privacidad y seguridad en el área de criptomoneda.

-

Monero no es una corporación. Se maneja por los expertos en la criptografía y en los sistemas distribuidos de todas partes del mundo. Donan su tiempo a Monero o son financiados por la comunidad. Eso significa que el proyecto Monero no puede ser cerrado por ningún país y no se limita por ningún jurisdicción legal particular.

+

Monero is a grassroots community attracting the world's best cryptocurrency researchers and engineering talent.

+

Over 240 developers have contributed to the Monero project, including 30 core developers. Forums and chat channels are welcoming and active.

+

Monero's Research Lab, Core Development Team and Community Developers are constantly pushing the frontier of what is possible with cryptocurrency privacy and security.

+

Monero is not a corporation. It is developed by cryptography and distributed systems experts from all over the world that donate their time or are funded by community donations. This means that Monero can't be shut down by any one country and is not constrained by any particular legal jurisdiction.

Academic growth @@ -43,8 +45,8 @@ Electronic cash
-

Monero es dinero electrónico que facilita los pagos rápidos con comisiones muy bajas por todo el mundo.

-

No hay períodos largos de tenencia ni riesgo de reembolso fraudulento. Es protegido de “los controles de capitales”, los que son las medidas para restringir el flujo de criptomonedas tradicionales, a veces a un punto extremo, en los países con la inestabilidad económica.

+

Monero is electronic cash that allows fast, inexpensive payments to and from anywhere in the world.

+

There are no multi-day holding periods and no risk of fraudulent chargebacks. It is safe from ‘capital controls’ - these are measures that restrict the flow of traditional currencies, sometimes to an extreme degree, in countries experiencing economic instability.

@@ -52,7 +54,7 @@
-

Videos sobre Monero

+

Monero Videos

+

Monero

-

Moneda Digital Privada

-

Monero es una moneda privada, segura y no rastreable. Tiene el código abierto y está disponible para todos. Con Monero, usted es su propio banco. Sólo usted controla sus finanzas. Sus cuentas y transacciones están cubiertas de ojos curiosos.

-

Empezar

+

Moneda digital privada

+

Monero es una moneda privada, segura y no rastreable. Es de código abierto y está disponible para todos. Con Monero, tú eres tu propio banco. Sólo tú controlas tus finanzas. Tus cuentas y transacciones están protegidas de ojos curiosos.

+

Comenzar

@@ -25,12 +25,12 @@
-

Porque Monero es diferente

+

Por qué Monero es diferente

-

Monero es segura.

-

Monero es una criptomoneda descentralizada. Es decir, es dinero digital seguro dirigido por la red de usuarios. Transacciones son confirmadas por el consenso distribuido y luego son registradas inmutablemente en la cadena de bloques. Para mantener su dinero seguro, no hay que tener confianza en un tercero.

+

Monero es segura

+

Monero es una criptomoneda descentralizada. Es decir, es dinero digital seguro operado por su propia red de usuarios. Las transacciones son confirmadas por consenso distribuido y luego registradas inmutablemente en la cadena de bloques. De esta manera, mantiene tu dinero seguro sin necesidad de terceras partes.

Secure safe @@ -41,14 +41,14 @@ No surveillance
-

Monero es privada.

-

Monero usa la tecnología de firmas de anillo y transacciones confidenciales de anillo (RingCT) para ofuscar los importes, orígenes y destinaciones de todas las transacciones. Monero proporciona los beneficios de una criptomoneda descentralizada sin comprometer la privacidad.

+

Monero es privada

+

Monero usa las tecnologías de firmas de círculo y transacciones confidenciales de círculo (RingCT) para ofuscar el importe, orígen y destino cada transacción. Monero ofrece los beneficios de una criptomoneda descentralizada sin comprometer la privacidad.

-

Monero es no rastreable.

-

El enviar y el recibir Monero se ofuscan por defecto. Las transacciones en la cadena de bloques no pueden identificar a un usuario particular o una persona real.

+

Monero is untraceable

+

Sending and receiving addresses as well as transacted amounts are obfuscated by default. Transactions on the Monero blockchain cannot be linked to a particular user or real-world identity.

Untraceable Monero paths @@ -59,21 +59,26 @@ Monero gold
-

Monero es fungible.

-

Monero es fungible porque es privada por defecto. En su estado actual, es casi imposible que Monero sea puesta en listo negro por vendedores o plataformas de intercambios por la asociación con transacciones previas.

+

Monero es fungible

+

Monero es fungible porque es privada por defecto. Eso provoca que unidades de Monero no pueden ser etiquetadas o deprivadas de su valor por provenir de transacciones específicas.

- + + + + + +
-

Descargas

+

Downloads

-

¿Usa otro sistema operativo? Véase todas descargas disponibles aquí.

+

¿Usas otro sistema operativo? Mira todas las descargas disponibles aquí.

+ {% endfor %} + +

Más noticias

@@ -123,8 +131,11 @@
+ + +
@@ -133,33 +144,35 @@

Moneropedia

-

¿Quisiera ver las definiciones de términos y conceptos usados en Monero? Aquí encontrará la lista alfabética de términos de los proyectos Monero y Kovri y sus significados.

+

¿Quieres ver las definiciones de términos y conceptos usados en Monero? Aquí encontrarás una lista alfabética de términos de los proyectos Monero y Kovri y sus significados.

Leer Moneropedia

+ +
+ - + \ No newline at end of file diff --git a/_i18n/es/press-kit.md b/_i18n/es/press-kit.md index 0f6e7b28..b7bf3e2f 100644 --- a/_i18n/es/press-kit.md +++ b/_i18n/es/press-kit.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}

Here you'll find the Monero symbol and logo below. You can choose any size that you want, or download the .ai file to mess with the logo yourself. Note that the white background options have a white background under the Monero symbol ONLY, not as a background to the whole image. Lastly, you can download everything on this page in one zip file by clicking here.

diff --git a/_i18n/es/resources/about.md b/_i18n/es/resources/about.md index d978ad6e..ada9fe4c 100644 --- a/_i18n/es/resources/about.md +++ b/_i18n/es/resources/about.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
diff --git a/_i18n/es/resources/developer-guides.md b/_i18n/es/resources/developer-guides.md index 01f64533..d219203a 100644 --- a/_i18n/es/resources/developer-guides.md +++ b/_i18n/es/resources/developer-guides.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
diff --git a/_i18n/es/resources/developer-guides/daemon-rpc.md b/_i18n/es/resources/developer-guides/daemon-rpc.md index 23e17581..5648536c 100644 --- a/_i18n/es/resources/developer-guides/daemon-rpc.md +++ b/_i18n/es/resources/developer-guides/daemon-rpc.md @@ -1,3 +1,4 @@ +{% include untranslated.html %} ## Introduction This is a list of the monerod daemon RPC calls, their inputs and outputs, and examples of each. diff --git a/_i18n/es/resources/developer-guides/wallet-rpc.md b/_i18n/es/resources/developer-guides/wallet-rpc.md index e2cf8bc9..59776a56 100644 --- a/_i18n/es/resources/developer-guides/wallet-rpc.md +++ b/_i18n/es/resources/developer-guides/wallet-rpc.md @@ -1,3 +1,4 @@ +{% include untranslated.html %} ## 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. diff --git a/_i18n/es/resources/moneropedia/00-base-00 b/_i18n/es/resources/moneropedia/00-base-00 new file mode 100644 index 00000000..ccfa1781 --- /dev/null +++ b/_i18n/es/resources/moneropedia/00-base-00 @@ -0,0 +1,10 @@ +--- +layout: moneropedia +entry: "" +terms: ["", ""] +summary: "" +--- + +### The Basics + +{{ page.summary | capitalize }}. \ No newline at end of file diff --git a/_i18n/es/resources/moneropedia/account.md b/_i18n/es/resources/moneropedia/account.md new file mode 100644 index 00000000..8014c8ee --- /dev/null +++ b/_i18n/es/resources/moneropedia/account.md @@ -0,0 +1,82 @@ +--- +layout: moneropedia +entry: "Account" +terms: ["account", "accounts", "wallet", "wallets"] +summary: "similar in function to a bank account, contains all of your sent and received transactions" +--- + +### The Basics + +Those familiar with Monero's predecessors will be more familiar with the term *wallet* to describe this. In Monero we call this an account, and it is a private account owned and operated by a Monero user. + +Your account contains all of the Monero @transactions you have sent and received. Your account balance is a sum of all the Monero you've received, less the Monero you've sent. When using Monero you may notice that your account has two balances, a locked and an unlocked balance. The unlocked balance contains funds that can be spent immediately, and the locked balance contains funds that you can't spend right now. You may receive a transaction that has an @unlock-time set, or you may have sent some Monero and are waiting for the @change to come back to your wallet, both situations that could lead to those funds being locked for a time. + +A key difference between traditional electronic currency and Monero is that your account resides only under your control, normally on your computer, and cannot be accessed by anyone else if you [practice good security](#practicing-good-security). + +### Multiple Accounts + +There are no costs attached to creating a Monero account, and there are no fees charged except for individual @transaction fees that go to @miners. + +This means that individuals can easily create a Monero account for themselves as well as a joint account to share with their partner, and individual accounts for their children. Similarly, a business could create separate accounts for each division or group. Since Monero's @transaction fees are quite low, moving funds between accounts is not an expensive exercise. + +### Cryptographic Keys + +Monero relies heavily on a cryptography principle known as *public/private key cryptography* or *asymmetric cryptography*, which is thoroughly detailed in [this Wikipedia article](https://en.wikipedia.org/wiki/Public-key_cryptography). + +Your account is based on two keys, a @spend-key and a @view-key. The @spend-key is special in that it is the single key required to spend your Monero funds, whereas the @view-key allows you to reveal your @transactions to a third party, for example for auditing or accounting purposes. These keys in your account also play an important role in Monero's @transaction-privacy. + +The private keys for both of these must be protected by you in order to retain your account privacy. On the other hand, the public keys are obviously public (they are part of your Monero account address). For normal public/private key cryptography someone could send you a private message by encrypting it with either of your public keys, and you would then be the only one able to decrypt it with your private keys. + +### Backing Up Your Account + +When you manage your own Monero Account with the private @spend-key, you are solely responsible for the security of your funds. Thankfully, Monero makes it very easy to backup your account. When creating a Monero account for the first time you will be given a unique @mnemonic-seed for your account that consists of 13 or 25 words in the language of your choosing. **This seed is the only thing you need to backup for your account**, and so it is imperative that it is written down and stored securely. Never store this seed in a form or location that would allow someone else to see it! + +``` +List of available languages for your wallet's seed: +0 : Deutsch +1 : English +2 : Español +3 : Français +4 : Italiano +5 : Nederlands +6 : Português +7 : русский язык +8 : 日本語 +9 : 简体中文 (中国) +10 : Esperanto +Enter the number corresponding to the language of your choice: 1 +Generated new wallet: 4B15ZjveuttEaTmfZjLVioPVw7bfSmRLpSgB33CJbuC6BoGtZrug9TDAmhZEWD6XoFDGz55bgzisT9Dnv61sbsA6Sa47TYu +view key: 4130fa26463d9451781771a8baa5d0b8085c47c4500cefe4746bab48f1d15903 +********************************************************************** +Your wallet has been generated. +To start synchronizing with the daemon, use "refresh" command. +Use "help" command to see the list of available commands. +Always use "exit" command when closing monero-wallet-cli to save your +current session's state. Otherwise, you might need to synchronize +your wallet again (your wallet keys are NOT at risk in any case). + +PLEASE NOTE: the following 25 words can be used to recover access to your wallet. Please write them down and store them somewhere safe and secure. Please do not store them in your email or on file storage services outside of your immediate control. + +aunt knuckle italics moisture hawk thorn iris abort +chlorine smog uphill glass aptitude nowhere sewage plywood +dual relic fierce divers anvil nodes bubble cabin abort +********************************************************************** +Starting refresh... +Refresh done, blocks received: 21939 +Balance: 0.000000000000, unlocked balance: 0.000000000000 +Background refresh thread started +[wallet 4B15Zj]: █ + +``` + +As the example above indicates, it is incredibly important to store these words in safe locations. If you are concerned about the risk of critical loss at your home, for instance, you may want to store a second copy of your seed with your attorney or in a safety deposit box. It is also recommended that it is stored in a way that does not make it obvious that it is your seed, so writing it into a letter or as part of other notes is advisable. + +### Practicing Good Security + +Over and above backing up your @mnemonic-seed so that you have access to your account in the event of critical data loss, it is also important to practice good security. Use a secure password when creating a local Monero account (not used on [MyMonero](https://mymonero.com) or other web-based account systems). + +Don't ever give your Monero account password to anyone, as this can be used to access the Monero on your computer without knowing your @mnemonic-seed. Similarly, make sure you have running and up-to-date antivirus, especially on Windows computers. Finally, be careful when clicking links in emails or on unknown and untrusted websites, as malware installed on your computer can sit and wait for you to access your Monero account before taking the funds from it. + +### Leaving Your Account to Next of Kin + +Providing access to your Monero account to your next of kin is just as easy as it is to backup your Monero account. Simply leave your @mnemonic-seed to them in your will, or store it somewhere safe where it will be given to them upon the execution of your will. A key advantage to this is that your next of kin won't have to wait for months for a third party to release the funds to them. diff --git a/_i18n/es/resources/moneropedia/address-book.md b/_i18n/es/resources/moneropedia/address-book.md new file mode 100644 index 00000000..43b159c9 --- /dev/null +++ b/_i18n/es/resources/moneropedia/address-book.md @@ -0,0 +1,35 @@ +--- +layout: moneropedia +entry: "Address Book" +tags: ["kovri"] +terms: ["Address-Book"] +summary: "Allows you to visit I2P websites/services that have the .i2p domain" +--- + +### The Basics + +In order to browse @I2P sites or services with @Kovri, you'll need an address book. An address book will allow you to translate @I2P websites/services that use the `.i2p` [top-level domain](https://en.wikipedia.org/wiki/Top_level_domain) into an address that @I2P network will understand. + +Without an address book, you would be stuck using a @base32-address every time you visit an @I2P website/service - and that's not fun! + +### In-depth information + +Since [DNS](https://en.wikipedia.org/wiki/DNS) does not exist on the @I2P network, @Kovri also does **not** use DNS or any sort of @canonically-unique-host resolution. Instead, Kovri pairs a @locally-unique-host to a @base64-address @destination in a @subscription. Once your address book is filled with a @subscription, you can resolve your favorite `.i2p` domain site into a usable @I2P destination. + +### Creating an Address Book + +By default, your installation will come with a default public @subscription called `hosts.txt` in your @data-directory. When @Kovri starts, it loads this subscription and fetches any other subscriptions you've specified. Once loaded, your address book will be appropriately filled. For details on how to manage subscriptions, see @subscription. + +### Updating the Address Book + +Currently, there are several ways to update your address book: + +1. Use a @jump-service to insert I2P addresses into your address book +2. Use a @jump-service to copy/paste an address into your private @subscription +3. Manually add or subtract from a private @subscription + +**Note: Kovri is in heavy development. In the future there *will* be easier ways to update the address book** + +### Address Book / Naming specification + +For specification details and more, visit the [Address Book and Naming Specification](https://geti2p.net/en/docs/naming) diff --git a/_i18n/es/resources/moneropedia/address.md b/_i18n/es/resources/moneropedia/address.md new file mode 100644 index 00000000..ed33f15a --- /dev/null +++ b/_i18n/es/resources/moneropedia/address.md @@ -0,0 +1,22 @@ +--- +layout: moneropedia +entry: "Address" +terms: ["address", "addresses"] +summary: "either an alias, such as donate.getmonero.org, or a set of 95 characters starting with a 4" +--- + +### The Basics + +When you send Monero to someone you only need one piece of information, and that is their Monero address. A *raw* Monero address is a set of 95 characters starting with a '4'. The Monero donation address, for instance, is 44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A. + +Because those addresses are long and complex you will often encounter an @OpenAlias address instead. For example, Monero donations can be sent to donate@getmonero.org or donate.getmonero.org. + +If you would like to get an @OpenAlias address of your own then there is some information on the [OpenAlias page](/knowledge-base/openalias). + +### Integrated address + +An integrated address is an address combined with an encrypted 64-bit @payment-ID. A raw integrated address is 106 characters long. + +### In-depth Information + +The address is actually the concatenation, in Base58 format, of the *public* @spend-key and the *public* @view-key, prefixed with the network byte (the number 18 for Monero) and suffixed with the first four bytes of the Keccac-256 hash of the whole string (used as a checksum). diff --git a/_i18n/es/resources/moneropedia/airgap.md b/_i18n/es/resources/moneropedia/airgap.md new file mode 100644 index 00000000..f3107cf2 --- /dev/null +++ b/_i18n/es/resources/moneropedia/airgap.md @@ -0,0 +1,12 @@ +--- +layout: moneropedia +entry: "Airgap" +terms: ["airgap"] +summary: "An airgap is a security measure to physically separate a computer or device from all other networks, such as the Internet." +--- + +### The Basics + +"An air gap, air wall or air gapping is a network security measure employed on one or more computers to ensure that a secure computer network is physically isolated from unsecured networks, such as the public Internet or an unsecured local area network.[2] The name arises from the technique of creating a network that is physically separated (with a conceptual air gap) from all other networks. The air gap may not be completely literal, as networks employing the use of dedicated cryptographic devices that can tunnel packets over untrusted networks while avoiding packet rate or size variation can be considered air gapped, as there is no ability for computers on opposite sides of the gap to communicate." + +Taken from https://en.wikipedia.org/wiki/Air_gap_(networking) diff --git a/_i18n/es/resources/moneropedia/base32-address.md b/_i18n/es/resources/moneropedia/base32-address.md new file mode 100644 index 00000000..ef38e414 --- /dev/null +++ b/_i18n/es/resources/moneropedia/base32-address.md @@ -0,0 +1,27 @@ +--- +layout: moneropedia +entry: "Base32 address" +tags: ["kovri"] +terms: ["Base32-address", "Base32-addresses"] +summary: "Base32 encoded hash of a Base64 address" +--- + +### The Basics + +A Base32 address is a shortened, encoded version of an @I2P address. The Base32 address is the first part in a `.b32.i2p` hostname. + +Example: + +`i35yftyyb22xhcvghmev46t5knefur5v66qzekkajatwfwhyklvq.b32.i2p` + +where + +`i35yftyyb22xhcvghmev46t5knefur5v66qzekkajatwfwhyklvq` is the Base32 address. + +### In-depth Information + +Ultimately, a Base32 address is a 52 character [Base32 encoded representation](https://en.wikipedia.org/wiki/Base32) of the full SHA-256 hash of an @I2P @base64-address. + +### Notes + +**Note: `.b32` is not a sub-domain of `.i2p`** diff --git a/_i18n/es/resources/moneropedia/base64-address.md b/_i18n/es/resources/moneropedia/base64-address.md new file mode 100644 index 00000000..edd34593 --- /dev/null +++ b/_i18n/es/resources/moneropedia/base64-address.md @@ -0,0 +1,22 @@ +--- +layout: moneropedia +entry: "Base64 address" +tags: ["kovri"] +terms: ["Base64-address", "Base64-addresses"] +summary: "Base64 encoded I2P destination" +--- + +### The Basics + +A @base64-address is a 516-character [Base64 encoded](https://en.wikipedia.org/wiki/Base64) @I2P @destination. @base64-addresses are primarily used for @address-book, @jump-service, and also internally. + +Example: + +``` +AQZGLAMpI9Q0l0kmMj1vpJJYK3CjLp~fE3MfvE-e7KMKjI5cPOH6EN8m794uHJ6b09qM8mb9VEv1lVLEov~usVliTSXCSHuRBOCIwIOuDNU0AbVa4BpIx~2sU4TxKhoaA3zQ6VzINoduTdR2IJhPvI5xzezp7dR21CEQGGTbenDslXeQ4iLHFA2~bzp1f7etSl9T2W9RID-KH78sRQmzWnv7dbhNodMbpO6xsf1vENf6bMRzqD5vgHEHZu2aSoNuPyYxDU1eM6--61b2xp9mt1k3ud-5WvPVg89RaU9ugU5cxaHgR927lHMCAEU2Ax~zUb3DbrvgQBOTHnJEx2Fp7pOK~PnP6ylkYKQMfLROosLDXinxOoSKP0UYCh2WgIUPwE7WzJH3PiJVF0~WZ1dZ9mg00c~gzLgmkOxe1NpFRNg6XzoARivNVB5NuWqNxr5WKWMLBGQ9YHvHO1OHhUJTowb9X90BhtHnLK2AHwO6fV-iHWxRJyDabhSMj1kuYpVUBQAEAAcAAA== +``` + + +### In-depth Information + +See @destination for details behind @base64-address diff --git a/_i18n/es/resources/moneropedia/block.md b/_i18n/es/resources/moneropedia/block.md new file mode 100644 index 00000000..cadae194 --- /dev/null +++ b/_i18n/es/resources/moneropedia/block.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Block" +terms: ["block", "blocks"] +summary: "a container of transactions, a sequence of which forms a blockchain" +--- + +### The Basics + +A block is a container of @transactions, with a new block being added to the @blockchain once every 2 minutes (see constant `DIFFICULTY_TARGET_V2` defined as 120 seconds), on average. + +Blocks also contain a special type of transaction, the @coinbase-transaction, which add newly created Monero to the network. + +Blocks are created through the process of @mining, and the @node that successfully mines the block then broadcasts it to each of the @nodes connected to it, who subsequently re-broadcast the block until the entire Monero network has received it. + +Fake or bad blocks generally cannot be created, as @nodes that receive blocks always verify the @transactions they contain against a set of consensus rules that all nodes adhere to, including validating the cryptographic @signatures on each transaction. diff --git a/_i18n/es/resources/moneropedia/blockchain.md b/_i18n/es/resources/moneropedia/blockchain.md new file mode 100644 index 00000000..d20e8cf7 --- /dev/null +++ b/_i18n/es/resources/moneropedia/blockchain.md @@ -0,0 +1,13 @@ +--- +layout: moneropedia +entry: "Blockchain" +terms: ["blockchain", "blockchains"] +summary: "a distributed ledger of all transactions both past and present, without revealing who the funds came from or went to" + +--- + +### The Basics +A @blockchain is a distributed database that continuously grows with a record of all of the transactions that have occurred with a given cryptocurrency. This database is often referred to as a ledger because the data contains a large list of transactions that have taken place. In Monero, these transactions are packaged together into 'blocks' every 2 minutes (on average) and all miners and nodes on the network have copies of these blocks. + +### Monero's @Blockchain +Unlike Bitcoin and other cryptocurrencies, transactions in the Monero @blockchain do not reveal where funds came from or went to, providing anonymity and making the currency completely @fungible. Additionally, the amounts of all transactions are hidden by @RingCT, a feature of Monero. For auditing or other transparency purposes a user can share a @view-key to prove they control certain amounts of @Moneroj. diff --git a/_i18n/es/resources/moneropedia/canonically-unique-host.md b/_i18n/es/resources/moneropedia/canonically-unique-host.md new file mode 100644 index 00000000..c1138992 --- /dev/null +++ b/_i18n/es/resources/moneropedia/canonically-unique-host.md @@ -0,0 +1,23 @@ +--- +layout: moneropedia +entry: "Canonically-unique host" +tags: ["kovri"] +terms: ["Canonically-unique-host"] +summary: "A host that is canonically resolved to an address or set of addresses" +--- + +### The Basics + +A Canonically-unique host is a [FQDN](https://en.wikipedia.org/wiki/FQDN) that will canonically resolve to a designated address or set of addresses. Not to be confused with a @locally-unique-host. + +### In-depth information + +A Canonically-unique host is defined by remote authoritative sources; usually through [DNS](https://en.wikipedia.org/wiki/DNS). When resolving a peer's hostname, you will most likely use an external source for resolution unless you have the following implemented: + +- a database file similar to a [hosts file](https://en.wikipedia.org/wiki/etc/hosts) +- an internal-network resolver (which eventually pulls from external sources) + +### Notes + +- Monero primarily uses @canonically-unique-host resolution while @I2P only uses @locally-unique-host resolution. +- @I2P's and @Kovri's self-assigned top-level domain is currently `.i2p` and @Kovri intends to only process/use the `.i2p` [top-level domain](https://en.wikipedia.org/wiki/Top_level_domain) diff --git a/_i18n/es/resources/moneropedia/change.md b/_i18n/es/resources/moneropedia/change.md new file mode 100644 index 00000000..08163292 --- /dev/null +++ b/_i18n/es/resources/moneropedia/change.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Change" +terms: ["change"] +summary: "Monero sent as part of a transaction, that returns to your account instead of going to another recipient" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +### More Information + +The @wallet in the the Monero software makes change automatically, but when you send a transaction, you are taking an @input that you control and telling the Monero network what to do with it. The @input is a "deposit" to your account that you are able to spend. @Outputs are the part of the transaction that tells the Monero network where to send the funds. + +You might have multiple inputs in your account, in many different denominations (For example: you deposited 0.5 XMR on Friday, and 0.75 XMR on Saturday). So, when have a transaction with an input of 0.5 XMR, but you only want to send 0.1 XMR, your transaction will include a @fee to pay the @miner, an output for 0.1 XMR to send to the recipient, and the rest that you want to send back to yourself will be an output back to you (this is called "change"). Once the transaction is completed, the change becomes available to you as an input that you can again split and send with a new transaction. diff --git a/_i18n/es/resources/moneropedia/clearnet.md b/_i18n/es/resources/moneropedia/clearnet.md new file mode 100644 index 00000000..9200e69a --- /dev/null +++ b/_i18n/es/resources/moneropedia/clearnet.md @@ -0,0 +1,33 @@ +--- +layout: moneropedia +entry: "Clearnet" +tags: ["kovri"] +terms: ["Clearnet"] +summary: "The internet in which anonymous overlay networks are built upon" +--- + +### The Basics + +When you use the internet for things like news, email, social media, and even Monero, you are most likely using a clearnet connection. This means that *all* of your connections can be tracked, traced, and monitored by: + +- your [ISP](https://en.wikipedia.org/wiki/ISP) +- the website/service/person you're communicating with +- possibly a [Five Eyes](https://en.wikipedia.org/wiki/5_Eyes) capable entity + +and even if you use [HTTPS](https://en.wikipedia.org/wiki/HTTPS) or similar (which *encrypts* your transmission), your route is not hidden nor is it anonymous, thus; it is in the *clear*. + +### In-depth information + +Since a traditional [VPN](https://en.wikipedia.org/wiki/VPN) cannot save you from clearnet (as you are still using *clearnet* (though you are more proxied than without a VPN)), you should use an *anonymous overlay network* to avoid using clearnet directly: + +- @Kovri +- @Java-I2P +- [Tor](https://torproject.org/) + +These technologies protect you from clearnet by building an anonymous network **over** clearnet to keep your transmissions both encrypted **and** anonymous. + +Here is an accurate, [interactive diagram](https://www.eff.org/pages/tor-and-https) provided by the [EFF](https://www.eff.org/) which describes *clearnet* as it relates to **Tor**. The concept also (somewhat) applies to @Kovri and @I2P in terms of anonymity with the exception that: + +- @Kovri does not use exit nodes when connecting to an @eepsite +- Your traffic never need to leave the @I2P network +- You do not need HTTPS to use @Kovri (with the exception of @reseed) diff --git a/_i18n/es/resources/moneropedia/coinbase.md b/_i18n/es/resources/moneropedia/coinbase.md new file mode 100644 index 00000000..4c564e4b --- /dev/null +++ b/_i18n/es/resources/moneropedia/coinbase.md @@ -0,0 +1,10 @@ +--- +layout: moneropedia +entry: "Coinbase Transaction" +terms: ["coinbase-transaction"] +summary: "a special type of transaction included in each block, which contains a small amount of Monero sent to the miner as a reward for their mining work" +--- + +### The Basics + +{{ page.summary | capitalize }}. \ No newline at end of file diff --git a/_i18n/es/resources/moneropedia/consensus.md b/_i18n/es/resources/moneropedia/consensus.md new file mode 100644 index 00000000..192e9d9e --- /dev/null +++ b/_i18n/es/resources/moneropedia/consensus.md @@ -0,0 +1,10 @@ +--- +layout: moneropedia +entry: "Consensus" +terms: ["consensus", "consensus-network"] +summary: "consensus describes a property of distributed networks like Monero where most of the participants follow the rules, and thus reject bad participants" +--- + +### The Basics + +{{ page.summary | capitalize }}. \ No newline at end of file diff --git a/_i18n/es/resources/moneropedia/cryptocurrency.md b/_i18n/es/resources/moneropedia/cryptocurrency.md new file mode 100644 index 00000000..45d736c2 --- /dev/null +++ b/_i18n/es/resources/moneropedia/cryptocurrency.md @@ -0,0 +1,22 @@ +--- +layout: moneropedia +entry: "Cryptocurrency" +terms: ["cryptocurrency", "cryptocurrencies", "altcoin", "altcoins"] +summary: "a digital currency in which encryption techniques are used to regulate the generation of units of currency and verify the transfer of funds, usually operating independently of a central bank" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +### More Information + +Cryptocurrency is the generic term for a large set of digital assets that use encryption techniques to generate units of currency, verify the transactions, and transfer value. Generally, cryptocurrencies are considered to be decentralized. Cryptocurrency should not be confused with virtual currency which is a type of digital money that is usually controlled by it's creators or developers. (Some examples of virtual currency are gametime in World of Warcraft, ROBUX in Roblox, reward points programs, or Ripple, all of which can be exchanged for currency or cash value, but are not considered cryptocurrency because they are centalized and controlled/issued by a single entity). + +Monero is one of many cryptocurrencies currently available. Other examples are Bitcoin, Litecoin, Dogecoin, Dash, Zcash, etc, but nearly all other cryptocurrencies lack features that make them a true money (most importantly @fungability which is a requirement for it to be a @store-of-value). + +Not all cryptocurrencies operate the same, but they usually share the properties of @decentralization, encryption, and the ability to send and receive transactions. Most are irreversible, pseudonymous, global, and permissionless. Most aim to be a @store-of-value or be digital cash that allows you to transact. + +Most cryptocurrencies (including Monero) use a distributed ledger (called a @blockchain) to keep track of previous transactions . The blockchain serves to tell other users on the network that transactions have happened. There are many different ways for cryptocurrencies to create their blockchain, and not all are the same. Monero uses @proof-of-work to craft blocks, where other cryptocurrencies may use proof-of-stake or other consolidated methods. + +Ultimately, cryptocurrency is an attempt to create @trustless value; that is free from borders, governments, and banks. Whether that be to transact or to be digital gold is up to the users of each. diff --git a/_i18n/es/resources/moneropedia/data-directory.md b/_i18n/es/resources/moneropedia/data-directory.md new file mode 100644 index 00000000..e66f6959 --- /dev/null +++ b/_i18n/es/resources/moneropedia/data-directory.md @@ -0,0 +1,22 @@ +--- +layout: moneropedia +entry: "Data Directory" +tags: ["kovri"] +terms: ["Data-Directory"] +summary: "Where essential kovri data for runtime is stored" +--- + +### The Basics + +Depending on your OS, @Kovri currently stores all run-time data in the following directory: + +- Linux/FreeBSD: + - `$HOME/.kovri` + +- OSX: + - `$HOME/Library/Application\ Support/Kovri` + +- Windows: + - `"$APPDATA"\\Kovri` + +This includes all configuration files, @address-book, certificates, and resources. diff --git a/_i18n/es/resources/moneropedia/denominations.md b/_i18n/es/resources/moneropedia/denominations.md new file mode 100644 index 00000000..24bda241 --- /dev/null +++ b/_i18n/es/resources/moneropedia/denominations.md @@ -0,0 +1,36 @@ +--- +layout: moneropedia +entry: "Denominations" +terms: ["denominations", "subunits", "tacoshi", "piconero", "nanonero", "micronero", "millinero", "centinero", "decinero","decanero","hectonero","kilonero","meganero","giganero"] +summary: "A denomination is a proper description of a currency amount. It is oftentimes a sub-unit of the currency. For example, traditionally a cent is 1/100th of a a particular unit of currency.)" +--- + +### The Basics + +A denomination is a proper description of a currency amount, oftentimes a sub-unit of the currency (for example, traditionally a cent is 1/100th of a a unit of currency). Monero denomination names add SI prefixes after dropping the initial "mo" for ease of use. The smallest unit of Monero is 1 piconero (0.000000000001 XMR). + +### Denominations of Monero + +|------------+----------+-------------------| +| Name | Base 10 | Amount | +|-----------:|:--------:| -----------------:| +| piconero | 10^-12 | 0.000000000001 | +| nanonero | 10^-9 | 0.000000001 | +| micronero | 10^-6 | 0.000001 | +| millinero | 10^-3 | 0.001 | +| centinero | 10^-2 | 0.01 | +| decinero | 10^-1 | 0.1 | +|============+==========+===================| +| **monero** | **10^0** | **1** | +|============+==========+===================| +| decanero | 10^1 | 10 | +| hectonero | 10^2 | 100 | +| kilonero | 10^3 | 1,000 | +| meganero | 10^6 | 1,000,000 | +|------------+----------+-------------------| + +### In-depth Information + +Support for input using SI prefixes was [added to the Monero codebase](https://github.com/monero-project/monero/pull/1826) on March 3, 2017 by [Moneromooo](https://github.com/moneromooo-monero). The smallest unit of monero (10^-12 XMR) was originally called a tacoshi in honor of user [Tacotime](https://bitcointalk.org/index.php?action=profile;u=19270), an early Monero contributor and was later renamed for ease of use and consistancy. + +{{ page.summary | capitalize }}. diff --git a/_i18n/es/resources/moneropedia/destination.md b/_i18n/es/resources/moneropedia/destination.md new file mode 100644 index 00000000..a999bebf --- /dev/null +++ b/_i18n/es/resources/moneropedia/destination.md @@ -0,0 +1,19 @@ +--- +layout: moneropedia +entry: "Destination" +tags: ["kovri"] +terms: ["Destination", "Destinations"] +summary: "A in-net address that serves as a final endpoint (either local or remote)" +--- + +### The Basics + +A @destination is the @I2P @in-net address of the final endpoint you are trying to connect to (example: an @I2P website, service, or Monero node). This can also include a *local destination* of which *other* peers need to connect to in order to make contact for communication (similar to how, in @clearnet, your IP address is given to a website when you connect so it knows *where* to send the information back to). + +### In-depth Information + +An @I2P destination can be encoded into a @base32-address or @base64-address. Most users will only care about @base32-address or a `.i2p` hostname while, internally, @Kovri / @I2P @address-book uses @base64-addresses. Ultimately, all @destinations in @I2P are 516-byte (or longer) keys: + +`256-byte public key + 128-byte signing key + a null certificate = 516 bytes in Base64 representation` + +Note: certificates are not used now but, if they were, the keys would be longer. diff --git a/_i18n/es/resources/moneropedia/eepsite.md b/_i18n/es/resources/moneropedia/eepsite.md new file mode 100644 index 00000000..5fbb9545 --- /dev/null +++ b/_i18n/es/resources/moneropedia/eepsite.md @@ -0,0 +1,30 @@ +--- +layout: moneropedia +entry: "Eepsite" +tags: ["kovri"] +terms: ["Eepsite", "Hidden-Service", "Garlic-Site", "Garlic-Service"] +summary: "A website or service hosted within the I2P network" +--- + +### The Basics + +Is it [**EEP!** *(in response to the site's content)*](https://en.wikipedia.org/wiki/Onomatopoeia), or **end-to-end protocol**, or something else entirely different? + +While the original definition of eepsite has been lost with time, its use-case remains: an eepsite is a website or service that is hosted within (and only accessible by) the @I2P network. + +### In-depth Information + +Alternate names include: + +1. *Hidden Service* + - because the site/service is *hidden* within the @I2P network and can only be visited within the network +2. *Garlic Site* + - because the website utilizes @I2P's @garlic-routing technology as a means of communicating with a client + - because the service is hosted as a website and not any other type of service +3. *Garlic Service* + - because the service utilizes @I2P's @garlic-routing technology as a means of communicating with a client + - because the service is specific to services like IRC, email, or a Monero peer (but may also include websites) + +### Notes + +To learn how to setup an Eepsite (Hidden Service, Garlic Site, Garlic Service) visit the @Kovri [user-guide](https://github.com/monero-project/kovri/blob/master/doc/USER_GUIDE.md). diff --git a/_i18n/es/resources/moneropedia/encryption.md b/_i18n/es/resources/moneropedia/encryption.md new file mode 100644 index 00000000..d9356c4b --- /dev/null +++ b/_i18n/es/resources/moneropedia/encryption.md @@ -0,0 +1,35 @@ +--- +layout: moneropedia +entry: "Encryption" +tags: ["kovri"] +terms: ["encryption", "encrypted", "encrypting", "decryption", "decrypted", "decrypting"] +summary: "The process of encoding messages or information in a way that only authorized parties can decode and read" +--- + +### The Basics + +From [Encryption](https://en.wikipedia.org/wiki/Encryption): + +> +In cryptography, encryption is the process of encoding messages or information in such a way that only authorized parties can decode and read what is sent. Encryption does not of itself prevent interception, but denies the message content to the interceptor. + +### In-depth information + +From [Encryption](https://en.wikipedia.org/wiki/Encryption): + +> + In an encryption scheme, the intended communication information or message (referred to as *plaintext*), is encrypted using an encryption algorithm, generating ciphertext that can only be read if decrypted. For technical reasons, an encryption scheme usually uses a pseudo-random encryption key generated by an algorithm. It is in principle possible to decrypt the message without possessing the key, but, for a well-designed encryption scheme, large computational resources and skill are required. An authorized recipient can easily decrypt the message with the key provided by the originator to recipients, but not to unauthorized interceptors. + +> +The purpose of encryption is to ensure that only somebody who is authorized to access data (e.g. a text message or a file), will be able to read it, using the decryption key. Somebody who is not authorized can be excluded, because he or she does not have the required key, without which it is impossible to read the encrypted information. + +### Kovri + +@Kovri implements various types of encryption in *at least* 4 essential capacities: + +- @Reseed for bootstrapping +- @Garlic-routing: three layers of encryption (@garlic-encryption) are used to verify the secure delivery of @messages to the recipient/peer/@destination +- @Tunnel encryption: garlic messages are passed through a @tunnel and encrypted by the @tunnel gateway to the @tunnel endpoint +- @Transport layer encryption prevents the ability to decrypt @messages at the [media layer](https://en.wikipedia.org/wiki/OSI_model) + +For details on the types of encryption and cryptographic @signatures used in @Kovri and @I2P, visit @Java-I2P's [Cryptography](https://geti2p.net/spec/cryptography) diff --git a/_i18n/es/resources/moneropedia/floodfill.md b/_i18n/es/resources/moneropedia/floodfill.md new file mode 100644 index 00000000..e3fbf54f --- /dev/null +++ b/_i18n/es/resources/moneropedia/floodfill.md @@ -0,0 +1,15 @@ +--- +layout: moneropedia +entry: "Floodfill" +tags: ["kovri"] +terms: ["Floodfill"] +summary: "An I2P router which maintains a distributed network-database" +--- + +### The Basics + +By actively managing a distributed network-database, a router with *floodfill* capability has the ability to help maintain network stability and resiliancy while also being decentralized and trust-less. + +### In-depth information + +Though floodfill itself is a simple storage system, the technical underpinnings of floodfill as it relates to @network-database and other protocols within @I2P are much more complex. Visit the [Network Database](https://geti2p.net/en/docs/how/network-database) page for details. diff --git a/_i18n/es/resources/moneropedia/fungibility.md b/_i18n/es/resources/moneropedia/fungibility.md new file mode 100644 index 00000000..47ca7d01 --- /dev/null +++ b/_i18n/es/resources/moneropedia/fungibility.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Fungibility" +terms: ["fungibility"] +summary: "property of a currency whereby two units can be substituted in place of one another" +--- + +### The Basics + +Fungibility means that two units of a currency can be mutually substituted and the substituted currency is equal to another unit of the same size. For example, two $10 bills can be exchanged and they are functionally identical to any other $10 bills in circulation (although $10 bills have unique ID numbers and are therefore not completely fungible). Gold is probably a closer example of true fungibility, where any 1 oz. of gold of the same grade is worth the same as another 1 oz of gold. Monero is fungible due to the nature of the currency which provides no way to link transactions together nor trace the history of any particular XMR. 1 XMR is functionally identical to any other 1 XMR. + +Fungibility is an advantage Monero has over Bitcoin and almost every other cryptocurrency, due to the privacy inherent in the Monero @blockchain and the permanently traceable nature of the Bitcoin blockchain. With Bitcoin, any BTC can be tracked by anyone back to it's creation @coinbase-transaction. Therefore, if a coin has been used for an illegal purpose in the past, this history will be contained in the @blockchain in perpetuity. This lack of fungibility means that certain businesses will be obligated to avoid accepting BTC that have been previously used for purposes which are illegal, or simply run afoul of their Terms of Service. Currently some large Bitcoin companies are blocking, suspending, or closing accounts that have received Bitcoin used in online gambling or other purposes deemed unsavory by said companies. + +Monero has been built specifically to address the problem of traceability and non-fungability inherent in other cryptocurrencies. By having completely private transactions Monero is truly fungible and there can be no blacklisting of certain XMR, while at the same time providing all the benefits of a secure, decentralized, permanent blockchain. + +{{ page.summary | capitalize }}. diff --git a/_i18n/es/resources/moneropedia/garlic-encryption.md b/_i18n/es/resources/moneropedia/garlic-encryption.md new file mode 100644 index 00000000..3364f521 --- /dev/null +++ b/_i18n/es/resources/moneropedia/garlic-encryption.md @@ -0,0 +1,25 @@ +--- +layout: moneropedia +entry: "Garlic-Encryption" +tags: ["kovri"] +terms: ["Garlic-Encryption", "Layered-Encryption"] +summary: "Layered encryption as implemented in Kovri / I2P" +--- + +### The Basics + +@garlic-encryption is @I2P's implementation of @message based @layered-encryption (similar to flow-based [Onion-Routing](https://en.wikipedia.org/wiki/Onion_routing)). + +By @encrypting @messages in layers, this allows a @message to be routed through a sequence of proxies without allowing the proxies (or any intermediaries) to read the contents of the @message. @Layered-Encryption is a fundamental feature in @Kovri, @I2P, and [Tor](https://torproject.org) and is the cornerstone for securing anonymity within these overlay-networks. + +### In-depth information + +For @garlic-encryption, the primary difference between @Kovri/@I2P and Tor is: + +- @Kovri/@I2P bundles multiple @messages together to form garlic "cloves" + - any number of messages can be contained in a "clove" instead of *only* a single message +- @Kovri/@I2P uses [ElGamal](https://en.wikipedia.org/wiki/ElGamal)/[AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) @encryption for @messages and @transports + +### Notes + +For details, see @garlic-routing. diff --git a/_i18n/es/resources/moneropedia/garlic-routing.md b/_i18n/es/resources/moneropedia/garlic-routing.md new file mode 100644 index 00000000..55cd2122 --- /dev/null +++ b/_i18n/es/resources/moneropedia/garlic-routing.md @@ -0,0 +1,45 @@ +--- +layout: moneropedia +entry: "Garlic Routing" +tags: ["kovri"] +terms: ["Garlic-Routing"] +summary: "Routing technology as implemented in Kovri" +--- + +### The Basics + +The term *@garlic-routing* has a diverse history of varying interpretations. As it currently stands, Monero defines *@garlic-routing* as the method in which @Kovri and @I2P create a @message-based anonymous overlay network of internet peers. + +The @Garlic-Encryption of @Garlic-Routing is similar to the @Layered-Encryption of [Onion Routing](https://en.wikipedia.org/wiki/Onion_routing) and effectively conceals the IP address of the sender and secures information sent from the sender to its @destination (and vice-versa). + +### History + +In written form, the term *@garlic-routing* can be seen as early as June of 2000 in Roger Dingledine's [Free Haven Master's thesis](http://www.freehaven.net/papers.html) (Section 8.1.1) as derived from the term Onion Routing. + +As recent as October of 2016, [#tor-dev](https://oftc.net/WebChat/) has offered insight into the creation of the term *@garlic-routing*: + +[Nick Mathewson](https://en.wikipedia.org/wiki/The_Tor_Project,_Inc): +>[I think that there was some attempt to come up with a plant whose structure resembled the 'leaky-pipe' topology of tor, but I don't believe we ever settled on one.] + +[Roger Dingledine](https://en.wikipedia.org/wiki/Roger_Dingledine): +>during the free haven brainstorming, there was a moment where we described a routing mechanism, and somebody said "garlic routing!", and everybody laughed. +so we for sure thought we had invented the name, at the time. + +*Note: permission to use the aforementioned quotes was granted by Nick Mathewson and Roger Dingledine* + +### In-depth Information + +In technical terms, for @Kovri and @I2P, *@garlic-routing* translates to any/all of the following: + +- @Layered-Encryption (similar to the @layered-encryption in Onion Routing) +- Bundling multiple @messages together (garlic cloves) +- ElGamal/AES @encryption + +*Note: though [Tor](https://torproject.org/) uses @layered-encryption, Tor does not use ElGamal and is not message-based.* + +**Read more in @garlic-encryption.** + +### Notes + +- In terms of Onion/Garlic Routing, another way to envision layered @encryption is by replacing the onion/garlic with a [Matryoshka doll](https://en.wikipedia.org/wiki/Matryoshka_doll) - with each outer/inner doll having a lock and public key to the next/previous doll +- For more technical details on Garlic Routing, read the @Java-I2P entry on [Garlic Routing](https://geti2p.net/en/docs/how/garlic-routing) diff --git a/_i18n/es/resources/moneropedia/i2np.md b/_i18n/es/resources/moneropedia/i2np.md new file mode 100644 index 00000000..d05c17aa --- /dev/null +++ b/_i18n/es/resources/moneropedia/i2np.md @@ -0,0 +1,28 @@ +--- +layout: moneropedia +entry: "I2NP" +tags: ["kovri"] +terms: ["I2NP"] +summary: "The I2P Network Protocol: the mechanism in which I2NP messages are sent over the I2P network" +--- + +### The Basics + +From @Java-I2P: + +> +@I2NP manages the routing and mixing of messages between routers, as well as the selection of what transports to use when communicating with a peer for which there are multiple common transports supported + +### In-depth information + +From @Java-I2P: + +> +@I2NP (@I2P Network Protocol) @messages can be used for one-hop, router-to-router, point-to-point @messages. By @encrypting and wrapping @messages in other @messages, they can be sent in a secure way through multiple hops to the ultimate @destination. @I2NP does not specify nor require any particular @transport layer but does require at least one @transport in use. + +> +Whenever a @destination wants to send a message to to another @destination, it provides its local router with both the @destination structure and the raw bytes of the message to be sent. The router then determines where to send it, delivers it through outbound @tunnels, instructing the end point to pass it along to the appropriate inbound @tunnel, where it is passed along again to that @tunnel's end point and made available to the target for reception. + +### Notes + +Read more about the @I2NP [protocol](https://geti2p.net/en/docs/protocol/i2np) and [specification](https://geti2p.net/spec/i2np). diff --git a/_i18n/es/resources/moneropedia/i2p.md b/_i18n/es/resources/moneropedia/i2p.md new file mode 100644 index 00000000..2778db30 --- /dev/null +++ b/_i18n/es/resources/moneropedia/i2p.md @@ -0,0 +1,31 @@ +--- +layout: moneropedia +entry: "I2P" +tags: ["kovri"] +terms: ["I2P"] +summary: "The Invisible Internet Project: an anonymizing overlay network" +--- + +### Monero + +For Monero's implementation of @I2P, see @Kovri. For a comparison of @I2P to [Tor](https://torproject.org/), read the [Comparison](https://geti2p.net/en/comparison/tor) page. + +### The Basics + +From @Java-I2P: + +>The I2P network provides strong privacy protections for communication over the Internet. Many activities that would risk your privacy on the public Internet can be conducted anonymously inside I2P. + +### In-depth information + +From @Java-I2P: + +>I2P is an anonymous overlay network - a network within a network. It is intended to protect communication from dragnet surveillance and monitoring by third parties such as ISPs. + +>I2P is used by many people who care about their privacy: activists, oppressed people, journalists and whistleblowers, as well as the average person. + +>No network can be "perfectly anonymous". The continued goal of I2P is to make attacks more and more difficult to mount. Its anonymity will get stronger as the size of the network increases and with ongoing academic review. + +### Notes + +@I2P documentation and specifications are available [here](https://geti2p.net/docs/). diff --git a/_i18n/es/resources/moneropedia/i2pcontrol.md b/_i18n/es/resources/moneropedia/i2pcontrol.md new file mode 100644 index 00000000..481d9eae --- /dev/null +++ b/_i18n/es/resources/moneropedia/i2pcontrol.md @@ -0,0 +1,17 @@ +--- +layout: moneropedia +entry: "I2PControl" +tags: ["kovri"] +terms: ["I2PControl"] +summary: "An API inteface for Kovri and Java-I2P that allows simple remote control" +--- + +### The Basics + +@I2Pcontrol is [JSONRPC2](https://en.wikipedia.org/wiki/JSON-RPC) [API](https://en.wikipedia.org/wiki/Application_programming_interface) for @Kovri and @Java-I2P which allows an @I2PControl client to remote control/monitor a running instance. + +Two available @I2PControl clients are: [qtoopie](https://github.com/EinMByte/qtoopie) (C++ client) and [itoopie](https://github.com/i2p/i2p.itoopie) (Java client). Read `kovri.conf` to configure @I2PControl for @Kovri. + +### In-depth information + +Details and specification available on the [I2PControl](https://geti2p.net/en/docs/api/i2pcontrol) page. diff --git a/_i18n/es/resources/moneropedia/in-net.md b/_i18n/es/resources/moneropedia/in-net.md new file mode 100644 index 00000000..92404f08 --- /dev/null +++ b/_i18n/es/resources/moneropedia/in-net.md @@ -0,0 +1,15 @@ +--- +layout: moneropedia +entry: "In-net" +tags: ["kovri"] +terms: ["In-net"] +summary: "Within the I2P network" +--- + +### The Basics + +**In-net** is a [colloquial](https://en.wikipedia.org/wiki/Colloquial) term of which describes activities, protocols, or functionality that exist *only* within the @I2P network. + +### In-depth information + +Example: *in-net download* would be defined as downloading *only* within @I2P. diff --git a/_i18n/es/resources/moneropedia/index.md b/_i18n/es/resources/moneropedia/index.md new file mode 100644 index 00000000..4489586c --- /dev/null +++ b/_i18n/es/resources/moneropedia/index.md @@ -0,0 +1,21 @@ +--- +layout: full +title: "Moneropedia" +title-pre-kick: "Moneropedia - The " +title-kick: "Monero Wiki" +title-post-kick: "" +kick-class: "softyellow-kicks" +icon: "icon_wiki" +attribution: "" +--- + + +
+ +@moneropedia + +
+ +

Add New Entry

+ +If there is an entry you'd like to modify or be added, please [open an issue on this website's Github repository](https://github.com/monero-project/monero-site/issues) or submit changes via pull request. \ No newline at end of file diff --git a/_i18n/es/resources/moneropedia/java-i2p.md b/_i18n/es/resources/moneropedia/java-i2p.md new file mode 100644 index 00000000..e040579b --- /dev/null +++ b/_i18n/es/resources/moneropedia/java-i2p.md @@ -0,0 +1,15 @@ +--- +layout: moneropedia +entry: "Java I2P" +tags: ["kovri"] +terms: ["Java-I2P"] +summary: "The original implementation of I2P - written in Java" +--- + +### The Basics + +The term "Java I2P" is often used to describe the original @I2P implementation currently most known and used today. There are various other @I2P implementations, including @Kovri; all of which look up to the original Java implementation. + +### Notes + +To download/learn more about the Java implementation, visit their [website](https://geti2p.net/). diff --git a/_i18n/es/resources/moneropedia/jump-service.md b/_i18n/es/resources/moneropedia/jump-service.md new file mode 100644 index 00000000..228ebb98 --- /dev/null +++ b/_i18n/es/resources/moneropedia/jump-service.md @@ -0,0 +1,34 @@ +--- +layout: moneropedia +entry: "Jump Service" +tags: ["kovri"] +terms: ["Jump-Service"] +summary: "An I2P website service that adds addresses to your address book" +--- + +### The Basics + +In your @I2P configured web browser, you can use a Jump Service to *jump* to an @I2P address that you don't have in your @address-book. Once you've *jumped* to the address, the address will be saved into your @address-book. + +### In-depth Information + +In an @I2P configured browser, visit: http://stats.i2p/i2p/lookup.html (courtesy of @Java-I2P's lead developer *zzz*) + +Then, you'll have two options: + +1. *Hostname lookup* the address you wish to visit and then manually copy/paste the result +2. *Jump* to the @I2P website by entering the @I2P hostname (**recommended**) + +### Using hostname lookup + +For example, entering `pinkpaste.i2p` into the *Hostname lookup* box (and then submitting) will return: + +``` +pinkpaste.i2p=m-HrPrIAsdxts0WM~P4mE8mt9P7g-QTaBvu7Gc6Nl0UX7Vwck-i~RvOPfK6W~kfdRvwhNTqevkBL2UF5l36We02Aiywu7kB2xOHRkze68h-Tg2ewvRVwokohguCD2G3wwAEz~7FVda2avYDCb9-N6TfuzxKLnmhPMvbNSjGL7ZsD2p-h207R3-2kvuMV9bfu-K~w9NI9XJhIyufvUnFYc2jnTVg8PbaR4UP57cNaOO2YIMPkbr6~yTcIu9B1sUfHK6-N~6virQDOxW4M-62rjnZkLpaCtkOsXslmCwZI--TkZ6hKi1kXZvNmJRE1rYfffYRFn38zhaqszeETX8HiIvahZhXF5fNumBziYdmLdw8hkuN1A~emU6Xz9g~a1Ixfsq1Qr~guYoOtaw-0rOFxNRS9yMehE-2LCb8c-cAg6z5OdlN4qJDl~ZHgru4d~EHp~BpAK3v7u2Gi-8l1ygVW-1CHVna~fwnbOPN3ANPwh6~~yUit0Cx1f54XiNRn6-nPBQAEAAcAAA== +``` + +Copy/paste this host=@base64-address pairing into your **private** @subscription. + +### Directly jumping + +For example, entering `pinkpaste.i2p` into the *Jump* box (and then submitting) will automatically redirect you to the website **and** insert the @locally-unique-host into @address-book. diff --git a/_i18n/es/resources/moneropedia/kovri.md b/_i18n/es/resources/moneropedia/kovri.md new file mode 100644 index 00000000..6002cdd6 --- /dev/null +++ b/_i18n/es/resources/moneropedia/kovri.md @@ -0,0 +1,62 @@ +--- +layout: moneropedia +entry: "Kovri" +tags: ["kovri"] +terms: ["Kovri"] +summary: "Monero's C++ router implementation of the I2P network" +--- + +### The Basics + +[Kovri](https://github.com/monero-project/kovri/) is a C++ implementation of the @I2P network. @Kovri is currently in heavy, active development and not yet integrated with Monero. When Kovri is integrated into your Monero @node, your transactions will be more secure than ever before. + +### In-depth information + +Kovri will protect you and Monero from: + +- @Node partitioning attacks +- Associations between a particular txid and your IP address +- Mining and/or running a node in highly adversarial environments +- Metadata leakage (e.g., @OpenAlias lookups) + +...and much more. + +Read [anonimal's FFS proposal](https://forum.getmonero.org/9/work-in-progress/86967/anonimal-s-kovri-full-time-development-funding-thread) for more details and for reasoning behind the project. Also read the FAQ and User Guide in the [Kovri repository](https://github.com/monero-project/kovri/). + +### @Kovri / @I2P Terminology + +#### Client + API + +- @Address-Book +- @Base32-address +- @Base64-address +- @Canonically-unique-host +- @Eepsite (@Hidden-Service, @Garlic-Site, @Garlic-Service) +- @I2PControl +- @Jump-Service +- @Locally-unique-host +- @Reseed +- @Subscription + +#### Core + Router + +- @Clearnet +- @Data-Directory +- @Destination +- @Encryption +- @Floodfill +- @Garlic-Encryption +- @Garlic-Routing +- @I2NP +- @In-net +- @Java-I2P +- @Layered-Encryption +- @Lease +- @LeaseSet +- @Message @Messages +- @NTCP +- @Network-Database +- @Router-Info +- @SSU +- @Transports +- @Tunnel diff --git a/_i18n/es/resources/moneropedia/lease-set.md b/_i18n/es/resources/moneropedia/lease-set.md new file mode 100644 index 00000000..99165a03 --- /dev/null +++ b/_i18n/es/resources/moneropedia/lease-set.md @@ -0,0 +1,25 @@ +--- +layout: moneropedia +entry: "Lease-Set" +tags: ["kovri"] +terms: ["LeaseSet", "LeaseSets"] +summary: "Contains all currently authorized Leases for a particular I2P Destination" +--- + +### The Basics + +A Lease-Set contains a set of authorized @leases (and other related information) for a particular @destination. + +### In-depth information + +A Lease-Set contains: + +- all of the currently authorized @leases for a particular @destination +- the public key to which garlic messages can be encrypted (see @garlic-routing) +- the signing public key that can be used to revoke this particular version of the structure + +The Lease-Set is one of the two structures stored in the @network-database (the other being @router-info), and is keyed under the SHA256 of the contained @destination. + +### Notes + +For further details, read @Java-I2P's [LeaseSet](https://geti2p.net/en/docs/how/network-database#leaseSet) diff --git a/_i18n/es/resources/moneropedia/lease.md b/_i18n/es/resources/moneropedia/lease.md new file mode 100644 index 00000000..d3cdc545 --- /dev/null +++ b/_i18n/es/resources/moneropedia/lease.md @@ -0,0 +1,15 @@ +--- +layout: moneropedia +entry: "Lease" +tags: ["kovri"] +terms: ["Lease", "Leases"] +summary: "Authorizes an I2P tunnel to receive messages targeting a destination" +--- + +### The Basics + +A lease defines the authorization for a particular @I2P @tunnel to receive a @messages targeting a @destination. + +### In-depth information + +For further details, read @Java-I2P's [Lease](https://geti2p.net/spec/common-structures#lease) diff --git a/_i18n/es/resources/moneropedia/locally-unique-host.md b/_i18n/es/resources/moneropedia/locally-unique-host.md new file mode 100644 index 00000000..3ce7f860 --- /dev/null +++ b/_i18n/es/resources/moneropedia/locally-unique-host.md @@ -0,0 +1,22 @@ +--- +layout: moneropedia +entry: "Locally-unique host" +tags: ["kovri"] +terms: ["Locally-unique-host"] +summary: "A host defined by you and resolved only by you" +--- + +### The Basics + +A locally-unique host is a [FQDN](https://en.wikipedia.org/wiki/FQDN) defined by **you** and resolved only by you; similar to how a [hosts file](https://en.wikipedia.org/wiki/etc/hosts) is implemented. Not to be confused with @canonically-unique-host. + +### In-depth information + +You have the option to share your interpretation of how the host is resolved (e.g., `localhost` always resolves to `127.0.0.1`) but the resolution is not canonically enforced (e.g., someone else can map `localhost` to any arbitrary IP address). + +Hosts in a public subscription can be considered @canonically-unique-host's within the @I2P network but, ultimately, you are free to re-define them as you wish. + +### Notes + +- Monero primarily uses @canonically-unique-host resolution while @I2P only uses @locally-unique-host resolution. +- @I2P's and @Kovri's assigned top-level domain is currently `.i2p` and @Kovri intends to only process/use the `.i2p` [top-level domain](https://en.wikipedia.org/wiki/Top_level_domain) diff --git a/_i18n/es/resources/moneropedia/message.md b/_i18n/es/resources/moneropedia/message.md new file mode 100644 index 00000000..c9504d54 --- /dev/null +++ b/_i18n/es/resources/moneropedia/message.md @@ -0,0 +1,33 @@ +--- +layout: moneropedia +entry: "Message" +tags: ["kovri"] +terms: ["Message", "Messages"] +summary: "The mechanisms in which information travels within I2P" +--- + +### The Basics + +*Messages* (which exist on top of the @transports layer), contain varying types of information that are needed for the network but, most importantly, everything you see, do, send, or receive, will come and go in the form of *messages*. + +There are 2 essential types of *messages* in @I2P: + +- @Tunnel messages +- @I2NP messages + +Essentially: *@tunnel messages* **contain** @I2NP **message fragments** which are then [reassembled](https://geti2p.net/en/docs/tunnels/implementation) at certain points within a @tunnel's path. + +### In-depth information + +@I2NP messages have a close relationship with @tunnel @messages so it is easy to get the term *messages* confused when reading @Java-I2P specifications: + +> +1. First, the tunnel gateway accumulates a number of I2NP messages and preprocesses them into tunnel messages for delivery. +2. Next, that gateway encrypts that preprocessed data, then forwards it to the first hop. +3. That peer, and subsequent tunnel participants, unwrap a layer of the encryption, verifying that it isn't a duplicate, then forward it on to the next peer. +4. Eventually, the tunnel messages arrive at the endpoint where the I2NP messages originally bundled by the gateway are reassembled and forwarded on as requested. + +### Notes + +- @I2NP @messages need to be fragmented because they are variable in size (from 0 to almost 64 KB) and @tunnel @messages are fixed-size (approximately 1 KB). +- For details and specifications, visit the [I2NP spec](https://geti2p.net/spec/i2np) and [Tunnel Message spec](https://geti2p.net/spec/tunnel-message) diff --git a/_i18n/es/resources/moneropedia/miners.md b/_i18n/es/resources/moneropedia/miners.md new file mode 100644 index 00000000..5937ce6d --- /dev/null +++ b/_i18n/es/resources/moneropedia/miners.md @@ -0,0 +1,20 @@ +--- +layout: moneropedia +entry: "Mining" +terms: ["mining", "miner", "miners"] +summary: "the process of cryptographically computing a mathematical proof for a block, containing a number of transactions, which is then added to the blockchain" +--- + +### The Basics + +Mining is the distributed process of confirming transactions on the public ledger of all transactions, aka @blockchain. Monero nodes use the block chain to distinguish legitimate transactions from attempts to re-spend coins that have already been spent elsewhere. + +Monero is powered strictly by Proof of Work. It employs a mining algorithm that has the potential to be efficiently tasked to billions of existing devices (any modern x86 CPU and many GPU's). Monero uses the @CryptoNight Proof of Work (@PoW) algorithm, which is designed for use in ordinary CPUs and GPUs. + +The smart mining feature allows transparent CPU mining on the user's computer, far from the de facto centralization of mining farms and pool mining, pursuing Satoshi Nakamoto's original vision of a true P2P currency. + +As of June 2017, botnets made of hacked computers account for a not-insignificant portion of the miners on the Monero network. This is due to the profitability of mining on CPUs via the @CryptoNight algorithm. + + + +{{ page.summary | capitalize }}. diff --git a/_i18n/es/resources/moneropedia/mnemonicseed.md b/_i18n/es/resources/moneropedia/mnemonicseed.md new file mode 100644 index 00000000..608f8d8b --- /dev/null +++ b/_i18n/es/resources/moneropedia/mnemonicseed.md @@ -0,0 +1,20 @@ +--- +layout: moneropedia +entry: "Mnemonic Seed" +terms: ["mnemonic-seed", "mnemonic"] +summary: "a 13 or 25 word phrase used to backup a Monero account, available in a number of languages" +--- + +### The Basics + +{{ page.summary | capitalize }}. This 25-word phrase (13 words in the case of MyMonero) has all the information needed to view and spend funds from a Monero @account. + +### In-depth Information + +In the official wallet, the mnemonic seed comprises 25 words with the last word being used as a checksum. Those words correspond to a 256-bit integer, which is the account's *private* @spend-key. The *private* @view-key is derived by hashing the private spend key with Keccak-256, producing a second 256-bit integer. The corresponding *public* keys are then derived from the private keys. + +By storing the 25 word mnemonic key in a secure location, you have a backup of your private keys and hence all of your Moneroj. Sharing this 25 word key is the equivalent of allowing another person complete access to your funds. + +It's not a good idea to store more than you want to lose in a "hot wallet" aka a wallet which is currently or has ever been connected to the internet or loaded onto any device that has or may in the future be connected to the internet or any untrusted source! + +By creating a cold, or @paper-wallet you can safely store Moneroj. diff --git a/_i18n/es/resources/moneropedia/network-database.md b/_i18n/es/resources/moneropedia/network-database.md new file mode 100644 index 00000000..a5bb078c --- /dev/null +++ b/_i18n/es/resources/moneropedia/network-database.md @@ -0,0 +1,25 @@ +--- +layout: moneropedia +entry: "Network Database" +tags: ["kovri"] +terms: ["Network-Database"] +summary: "A distributed database which contains needed router information so the network can stay intact" +--- + +### The Basics + +@network-database is a [distributed database](https://en.wikipedia.org/wiki/Distributed_database) which contains router information that peers must use so the network can stay intact. + +### In-depth information + +From @Java-I2P: + +> +@I2P's @network-database is a specialized distributed database, containing just two types of data - router contact information (@Router-Infos) and @destination contact information (@LeaseSets). Each piece of data is signed by the appropriate party and verified by anyone who uses or stores it. In addition, the data has liveliness information within it, allowing irrelevant entries to be dropped, newer entries to replace older ones, and protection against certain classes of attack. + +> +The @network-database is distributed with a simple technique called "@floodfill", where a subset of all routers, called "@floodfill routers", maintains the distributed database. + +### Notes + +Read [Network-Database](https://geti2p.net/en/docs/how/network-database) for details. diff --git a/_i18n/es/resources/moneropedia/node.md b/_i18n/es/resources/moneropedia/node.md new file mode 100644 index 00000000..dde76903 --- /dev/null +++ b/_i18n/es/resources/moneropedia/node.md @@ -0,0 +1,25 @@ +--- +layout: moneropedia +entry: "Node" +terms: ["node", "nodes", "full-node", "full-nodes"] +summary: "a device on the Internet running the Monero software, with a full copy of the Monero blockchain, actively assisting the Monero network" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +### More Information + +Nodes participate in the Monero network and secure @transactions by enforcing the rules of the network. Nodes download the entire @blockchain to know what transactions have taken place. Nodes assist the network by relaying transactions to other nodes on the network. Nodes may also choose contribute to the Monero network by participating in crafting @blocks (this is called @mining). + +Mining is the process by which nodes create a block from the previously accepted block, transactions that are waiting to be processed in the @tx-pool, and the @coinbase. When a node believes it has crafted a valid block it will transmit the completed block to other nodes on the network and those nodes signal agreement by working on the next block in the chain. + +The rules that nodes follow are built into the Monero software; When all nodes agree about the rules to follow this is called @consensus). Consensus is necessary for a cryptocurrency because it is how the blockchain is built; If nodes don't agree about which blocks are valid, for example people who have not updated their Monero software, those nodes that don't agree will no longer be able to participate in the Monero network. + +The Monero Core Team plans for a @hardforks every 6 months, to occur in September and March of each year. At that time, if you are running a node it must be updated to the most recent version of the Monero software or it will no longer be able to participate in the network. + +--- + +##### Other Resources +1. *Fluffypony gives a great explanation of why mandatory hardforks are good for Monero.* ([Monero Missives for the Week of 2016-06-20](https://getmonero.org/2016/06/20/monero-missive-for-the-week-of-2016-06-20.html)) diff --git a/_i18n/es/resources/moneropedia/ntcp.md b/_i18n/es/resources/moneropedia/ntcp.md new file mode 100644 index 00000000..69f3152c --- /dev/null +++ b/_i18n/es/resources/moneropedia/ntcp.md @@ -0,0 +1,34 @@ +--- +layout: moneropedia +entry: "NTCP" +tags: ["kovri"] +terms: ["NTCP"] +summary: "NIO-Based TCP (Non-blocking I/O based TCP): one of two Kovri transports" +--- + +### The Basics + +*NIO-Based TCP (Non-blocking I/O based TCP)* is one of two encrypted @transports for @Kovri. + +Similar to @SSU, @NTCP's *primary* purpose is to securely transmit @in-net @I2NP messages through @tunnels but, unlike @SSU, @NTCP functions solely over encrypted [TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol). + +### In-depth information + + - Passes along individual @I2NP messages (both Standard and Time Sync) after: + - TCP has been established + - Establishment Sequence has been completed + - Uses the following @encryption: + - 2048-bit [Diffie-Hellman](https://en.wikipedia.org/wiki/Diffie-hellman) + - [AES-256](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)/[CBC](https://en.wikipedia.org/wiki/Block_cipher_modes_of_operation) + - Establishment Sequence has the following *states*: + - Pre-establishment + - Establishment + - Post-establishment or "Established" + - Uses the following from the @network-database: + - Transport name: NTCP + - Host: IP (IPv4 or IPv6) or host name (shortened IPv6 address (with "::") is allowed) + - Port: 1024 - 65535 + +### Notes + +For further details, read @Java-I2P's [NTCP](https://geti2p.net/en/docs/transport/ntcp) diff --git a/_i18n/es/resources/moneropedia/openalias.md b/_i18n/es/resources/moneropedia/openalias.md new file mode 100644 index 00000000..2410130c --- /dev/null +++ b/_i18n/es/resources/moneropedia/openalias.md @@ -0,0 +1,20 @@ +--- +layout: moneropedia +entry: "OpenAlias" +terms: ["OpenAlias"] +summary: "a standard that allows you to use an email or domain syntax to pay someone instead of an address, eg. donate@getmonero.org or donate.getmonero.org" +--- + +### The Basics + +The Monero Core Team released a standard called OpenAlias which permits much more human-readable addresses and "squares" the Zooko's triangle. OpenAlias can be used for any cryptocurrency and is already implemented in Monero, Bitcoin (in latest Electrum versions) and HyperStake. + +OpenAlias seeks to provide a way to simplify aliasing amidst a rapidly shifting technology climate. Users are trying to cross the bridge to private and cryptographically secure infrastructure and systems, but many of them have just barely started remembering the email addresses of their friends and family. + +As part of the ongoing development of the Monero cryptocurrency project, we asked ourselves: how can we simplify payments for users unfamiliar with cryptocurrency? Monero stealth addresses are at least 95 characters long - memorizing them is not an option, and asking someone to send a payment to <95-character-string> is only going to lead to confusion. + +At its most basic, OpenAlias is a TXT DNS record on a FQDN (fully qualified domain name). By combining this with DNS-related technologies we have created an aliasing standard that is extensible for developers, intuitive and familiar for users, and can interoperate with both centralized and decentralized domain systems. + +{{ page.summary | capitalize }}. + +More information can be found on the [OpenAlias page](/knowledge-base/openalias) or on the [OpenAlias website](https://openalias.org) diff --git a/_i18n/es/resources/moneropedia/paperwallet.md b/_i18n/es/resources/moneropedia/paperwallet.md new file mode 100644 index 00000000..95ff00ba --- /dev/null +++ b/_i18n/es/resources/moneropedia/paperwallet.md @@ -0,0 +1,7 @@ +--- +layout: moneropedia +entry: "Paper Wallet" +terms: ["paperwallet", "paperwallets", "paper-wallet", "paper-wallets"] +summary: "A paper wallet stores the information necessary to send and receive Monero" +--- + diff --git a/_i18n/es/resources/moneropedia/paymentid.md b/_i18n/es/resources/moneropedia/paymentid.md new file mode 100644 index 00000000..fba888fa --- /dev/null +++ b/_i18n/es/resources/moneropedia/paymentid.md @@ -0,0 +1,25 @@ +--- +layout: moneropedia +entry: "Payment ID" +terms: ["payment-ID", "payment-IDs"] +summary: "an optional flag that is added to identify transactions to merchants, consisting of 64 hexadecimal characters" +--- + +### The Basics + +Payment ID is an **arbitrary** and **optional** transaction attachment that consists of 32 bytes (64 hexadecimal characters) or 8 bytes (in the case of integrated addresses). + +The Payment ID is usually used to identify transactions to merchants and exchanges: Given the intrinsic privacy features built into Monero, where a single public address is usually used for incoming transactions, the Payment ID is especially useful to tie incoming payments with user accounts. + +### Compact Payment ID's and Integrated Addresses + +Since the 0.9 Hydrogen Helix version, the Payment IDs can be encrypted and embedded in a payment address. The payment ID's of this type should be 64-bits and are encrypted with a random one-time key known only to the sender and receiver. + +### Creating a Payment ID +It is recommended to use the official wallet's `integrated_address` command to automatically generate Integrated Addresses that contain Compact Payment ID's. If you want to use the command line, you can generate Payment ID's as follows: + +Creating a compact Payment ID for an Integrated Address: +```# openssl rand -hex 8``` + +Creating an old-style Payment ID: +```# openssl rand -hex 32``` diff --git a/_i18n/es/resources/moneropedia/pedersen-commitment.md b/_i18n/es/resources/moneropedia/pedersen-commitment.md new file mode 100644 index 00000000..a7ff98ba --- /dev/null +++ b/_i18n/es/resources/moneropedia/pedersen-commitment.md @@ -0,0 +1,24 @@ +--- +layout: moneropedia +entry: "Pedersen Commitment" +terms: ["commitments", "commitment", "pedersen"] +summary: "Pedersen commitments are cryptographic algorythms that allow a prover to commit to a certain value without revealing it or being able to change it." +--- + +### The Basics + +When you spend Monero, the value of the inputs that you are spending and the value of the outputs you are sending are encrypted and opaque to everyone except the recipient of each of those outputs. Pedersen commitments allow you to send Monero without revealing the value of the transactions. Pedersen commitments also make it possible for people to verify that transactions on the blockchain are valid and not creating Monero out of thin air. + +### What It Means + +As long as the encrypted output amounts created, which include an output for the recipient and a change output back to the sender, and the unencrypted transaction fee is equal to the sum of the inputs that are being spent, it is a legitimate transaction and can be confirmed to not be creating Monero out of thin air. + +Pedersen commitments mean that the sums can be verified as being equal, but the Monero value of each of the sums and the Monero value of the inputs and outputs individually are undeterminable. Pedersen commitments also mean that even the ratio of one input to another, or one output to another is undeterminable. + +Even though it's unclear which inputs are really being spent (the ring signature lists both the real inputs being spent and decoy inputs therefore you don't actually know which input Pedersen commitments you need to sum) that's okay, because the RingCT ring signature only has to prove is that for one combination of the inputs the outputs are equal to the sum of the inputs. For mathematical reasons, this is impossible to forge. + +### In-depth Information + +See information in [Ring Confidential Transactions paper](https://eprint.iacr.org/2015/1098.pdf) by Shen Noether of the Monero Research Lab. + +{{ page.summary | capitalize }}. diff --git a/_i18n/es/resources/moneropedia/reseed.md b/_i18n/es/resources/moneropedia/reseed.md new file mode 100644 index 00000000..eb3b5d98 --- /dev/null +++ b/_i18n/es/resources/moneropedia/reseed.md @@ -0,0 +1,17 @@ +--- +layout: moneropedia +entry: "Reseed" +tags: ["kovri"] +terms: ["Reseed"] +summary: "The method of which Kovri uses to bootstrap into the I2P network" +--- + +### The Basics + +When you start @Kovri for the first time (or if it's been offline for a long time), @Kovri will need a list of peers to connect to so it can [bootstrap](https://en.wikipedia.org/wiki/Bootstrap) into the @I2P network. @Kovri gets these peers from a special file stored on a reseed server. On this file are all the various pieces of information @Kovri needs in order to connect with @I2P peers. + +### In-depth information + +@Kovri has a list of [hard-coded](https://en.wikipedia.org/wiki/Hard-coded) reseed servers available to fetch from. These servers securely serve an [SU3](https://geti2p.net/spec/updates#su3) file (signed with a cryptographic @signature) over @clearnet with [HTTPS](https://en.wikipedia.org/wiki/HTTPS). This SU3 file contains information that's used to verify both the integrity of the file and its content. + +Aside from the technical elements needed to verify and process the file, the file's main contents consist of a series of @router-info files which @Kovri and @I2P routers use to locate and communicate with other @I2P peers. These peers are then stored into a @network-database. diff --git a/_i18n/es/resources/moneropedia/ring-size.md b/_i18n/es/resources/moneropedia/ring-size.md new file mode 100644 index 00000000..a1601651 --- /dev/null +++ b/_i18n/es/resources/moneropedia/ring-size.md @@ -0,0 +1,11 @@ +--- +layout: moneropedia +entry: "Ring Size" +terms: ["ring-size"] +summary: "total number of possible signers in a ring signature" +--- + +### The Basics +Ring size refers to the total number of possible signers in a @ring-signature. If a ring size of 4 is selected for a given @transaction, this means that there are 3 foreign outputs in addition to your “real” output. A higher ring size number will typically provide more privacy than a lower number. However, reusing an odd, recognizable ring size number for transactions could possibly make transactions stand out. + +`Ring size = foreign outputs + 1 (your output)` \ No newline at end of file diff --git a/_i18n/es/resources/moneropedia/ringCT.md b/_i18n/es/resources/moneropedia/ringCT.md new file mode 100644 index 00000000..77b9bf32 --- /dev/null +++ b/_i18n/es/resources/moneropedia/ringCT.md @@ -0,0 +1,24 @@ +--- +layout: moneropedia +entry: "Ring CT" +terms: ["ringCT", "ring-CT"] +summary: "a way to hide the amount sent in a Monero transaction" +--- + +### The Basics +RingCT, short for Ring Confidential Transactions, is how transaction amounts are hidden in Monero. + +Ring CT was implemented in block #1220516 in January 2017. After September 2017, this feature became mandatory for all transactions on the network. + +RingCT introduces an improved version of @ring-signatures called A Multi-layered Linkable Spontaneous Anonymous Group signature, which allows for hidden amounts, origins and destinations of transactions with reasonable efficiency and verifiable, trustless coin generation. + +For more information, please read the creator Shen Noether's paper [here](https://eprint.iacr.org/2015/1098). + + +{{ page.summary | capitalize }}. + + + + + + diff --git a/_i18n/es/resources/moneropedia/ringsignatures.md b/_i18n/es/resources/moneropedia/ringsignatures.md new file mode 100644 index 00000000..fee368c8 --- /dev/null +++ b/_i18n/es/resources/moneropedia/ringsignatures.md @@ -0,0 +1,18 @@ +--- +layout: moneropedia +entry: "Ring Signature" +terms: ["ring-signature", "ring-signatures"] +summary: "a group of cryptographic signatures with at least one real participant, but no way to tell which in the group is the real one as they all appear valid" +--- + +### The Basics + +In cryptography, a ring signature is a type of digital signature that can be performed by any member of a group of users that each have keys. Therefore, a message signed with a ring signature is endorsed by someone in a particular group of people. One of the security properties of a ring signature is that it should be computationally infeasible to determine *which* of the group members' keys was used to produce the signature. + +For instance, a ring signature could be used to provide an anonymous signature from "a high-ranking White House official", without revealing which official signed the message. Ring signatures are right for this application because the anonymity of a ring signature cannot be revoked, and because the group for a ring signature can be improvised (requires no prior setup). + +### Application to Monero + +A ring signature makes use of your @account keys and a number of public keys (also known as outputs) pulled from the @blockchain using a triangular distribution method. Over the course of time, past outputs could be used multiple times to form possible signer participants. In a "ring" of possible signers, all ring members are equal and valid. There is no way an outside observer can tell which of the possible signers in a signature group belongs to your @account. So, ring signatures ensure that transaction outputs are untraceable. Moreover, there are no fungibility issues with Monero given that every transaction output has plausible deniability (e.g. the network can not tell which outputs are spent or unspent). + +To read how Monero gives you privacy by default (unlinkability), see @stealth-addresses. \ No newline at end of file diff --git a/_i18n/es/resources/moneropedia/router-info.md b/_i18n/es/resources/moneropedia/router-info.md new file mode 100644 index 00000000..f7c45c06 --- /dev/null +++ b/_i18n/es/resources/moneropedia/router-info.md @@ -0,0 +1,68 @@ +--- +layout: moneropedia +entry: "Router-Info" +tags: ["kovri"] +terms: ["Router-Info", "Router-infos"] +summary: "A data structure or file which contains an I2P peer's needed network information" +--- + +### The Basics + +@Router-Info is a data structure (periodically written to a [binary file](https://en.wikipedia.org/wiki/Binary_file)) which contains all needed information to locate, identify, and communicate with an @I2P peer. @Router-Info includes IP address, router identity, other misc. technical details; is needed for @network-database and is published to @floodfill routers. + +### In-depth information + +In human-readable form, Router-Info may look like this: + +``` +Identity: [RouterIdentity: +Hash: nYZ5Qe7gQ-~QgfgJVRUG4c0JnVeVqzM~duUX1EGT1ek= +Certificate: [Certificate: type: Key certificate +Crypto type: 0 +Sig type: 7 (EdDSA_SHA512_Ed25519)] +PublicKey: [PublicKey: size: 256] +SigningPublicKey: [SigningPublicKey EdDSA_SHA512_Ed25519: size: 32] +Padding: 96 bytes] +Signature: [Signature EdDSA_SHA512_Ed25519: size: 64] +Published: Sun Oct 09 01:34:59 UTC 2016 +Options (5): + [caps] = [LfR] + [netId] = [2] + [netdb.knownLeaseSets] = [37] + [netdb.knownRouters] = [2435] + [router.version] = [0.9.26] +Addresses (4): +[RouterAddress: +Type: SSU +Cost: 4 +Options (5): + [caps] = [BC] + [host] = [2a01:e35:8b5c:b240:71a2:6750:8d4:47fa] + [key] = [nYZ5Qe7gQ-~QgfgJVRUG4c0JnVeVqzM~duUX1EGT1ek=] + [mtu] = [1472] + [port] = [22244]] +[RouterAddress: +Type: NTCP +Cost: 9 +Options (2): + [host] = [2a01:e35:8b5c:b240:71a2:6750:8d4:47fa] + [port] = [22244]] +[RouterAddress: +Type: SSU +Cost: 6 +Options (4): + [caps] = [BC] + [host] = [88.181.203.36] + [key] = [nYZ5Qe7gQ-~QgfgJVRUG4c0JnVeVqzM~duUX1EGT1ek=] + [port] = [22244]] +[RouterAddress: +Type: NTCP +Cost: 11 +Options (2): + [host] = [88.181.203.36] + [port] = [22244]]] +``` + +### Notes + +For details and specification, visit @Java-I2P [Network Database](https://geti2p.net/en/docs/how/network-database) page. diff --git a/_i18n/es/resources/moneropedia/scalability.md b/_i18n/es/resources/moneropedia/scalability.md new file mode 100644 index 00000000..efce0202 --- /dev/null +++ b/_i18n/es/resources/moneropedia/scalability.md @@ -0,0 +1,10 @@ +--- +layout: moneropedia +entry: "Scalability" +terms: ["scalability"] +summary: "Growth potential of Monero, resources required, and methods of increasing efficiency" +--- + +### The Basics + +Monero has no hardcoded maximum block size, which means that unlike Bitcoin it does not have a 1 MB block size limit preventing scaling. However, a block reward penalty mechanism is built into the protocol to avoid a too excessive block size increase: The new block's size (NBS) is compared to the median size M100 of the last 100 blocks. If NBS>M100, the block reward gets reduced in quadratic dependency of how much NBS exceeds M100. E.g. if NBS is [10%, 50%, 80%, 100%] greater than M100, the nominal block reward gets reduced by [1%, 25%, 64%, 100%]. Generally, blocks greater than 2*M100 are not allowed, and blocks <= 60kB are always free of any block reward penalties. diff --git a/_i18n/es/resources/moneropedia/signature.md b/_i18n/es/resources/moneropedia/signature.md new file mode 100644 index 00000000..638b7c5b --- /dev/null +++ b/_i18n/es/resources/moneropedia/signature.md @@ -0,0 +1,10 @@ +--- +layout: moneropedia +entry: "Cryptographic Signature" +terms: ["signature", "signatures"] +summary: "a cryptographic method for proving ownership of a piece of information, as well as proving that the information has not been modified after being signed" +--- + +### The Basics + +{{ page.summary | capitalize }}. \ No newline at end of file diff --git a/_i18n/es/resources/moneropedia/smartmining.md b/_i18n/es/resources/moneropedia/smartmining.md new file mode 100644 index 00000000..c4f7a6d2 --- /dev/null +++ b/_i18n/es/resources/moneropedia/smartmining.md @@ -0,0 +1,17 @@ +--- +layout: moneropedia +entry: "Smart Mining" +terms: ["smart-mining"] +summary: "a process of having a throttled miner mine when it otherwise does not cause drawbacks" +--- + +### The Basics + +Smart mining is the process of having a throttled miner mine when it otherwise does not cause drawbacks. +Drawbacks include increases heat, slower machine, depleting battery, etc. The intent of smart mining is to increase network security by allowing as many people as possible to let the smart miner on all the time. For this to work, the miner must prove unobtrusive, or it will be turned off, depriving the Monero network from a little bit of security. As such, it is likely that a smart miner will mine slower than a normal miner on the same hardware. + +Smart mining is available in the official CLI and GUI wallet, which are available in the [downloads page](https://getmonero.org/downloads/). + +It is hoped that the relative slowness of a smart miner (especially on low-power machines) will be offset by the large amount of people running a miner for a possible "lottery win", and thus increase the Monero network security by a non trivial amount. The increased hash rate from many different sources helps keep the Monero network decentralized. + +{{ page.summary | capitalize }}. diff --git a/_i18n/es/resources/moneropedia/spendkey.md b/_i18n/es/resources/moneropedia/spendkey.md new file mode 100644 index 00000000..d57544d1 --- /dev/null +++ b/_i18n/es/resources/moneropedia/spendkey.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Spend Key" +terms: ["spend-key", "spend-keys"] +summary: "one of the two pairs of private and public cryptographic keys that each account has, with the *private* spend key used to spend any funds in the account" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +### In-depth Information + +The *private* spend key is a 256-bit integer that is used to sign Monero transactions. With the current deterministic key derivation method of the official wallet, the private spend key is also an alternate representation of the @mnemonic-seed. It can be used to derive all other account keys. + + diff --git a/_i18n/es/resources/moneropedia/ssu.md b/_i18n/es/resources/moneropedia/ssu.md new file mode 100644 index 00000000..665f9c44 --- /dev/null +++ b/_i18n/es/resources/moneropedia/ssu.md @@ -0,0 +1,26 @@ +--- +layout: moneropedia +entry: "SSU" +tags: ["kovri"] +terms: ["SSU"] +summary: "Secure Semi-reliable UDP: one of two Kovri transports" +--- + +### The Basics + +*Secure Semi-reliable UDP* is one of two encrypted @transports for @Kovri. + +Similar to @NTCP, @SSU's *primary* purpose is to securely transmit @in-net @I2NP messages through @tunnels but, unlike @NTCP, @SSU functions solely over encrypted [UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol). + +### In-depth information + +- Like @NTCP, @SSU is a connection-oriented, point-to-point data transport +- Termed *semi-reliable* because @SSU will repeatedly retransmit *unacknowledged* messages (up to maximum number then dropped) +- @SSU also provides several unique services (in addition to its function as a @transport layer): + - IP detection (local inspection or with [peer testing](https://geti2p.net/en/docs/transport/ssu#peerTesting)) + - [NAT](https://en.wikipedia.org/wiki/Network_address_translation) traversal (using [introducers](https://geti2p.net/en/docs/transport/ssu#introduction)) + - [Firewall](https://en.wikipedia.org/wiki/Firewall_%28computing%29) status and, if implemented, @SSU can notify @NTCP if the external address or firewall status changes + +### Notes + +For further details, read @Java-I2P's [SSU](https://geti2p.net/en/docs/transport/ssu) diff --git a/_i18n/es/resources/moneropedia/stealthaddress.md b/_i18n/es/resources/moneropedia/stealthaddress.md new file mode 100644 index 00000000..61892d1b --- /dev/null +++ b/_i18n/es/resources/moneropedia/stealthaddress.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Stealth Address" +terms: ["stealth-address", "stealth-addresses"] +summary: "automatic one-time addresses for every transaction" +--- + +### The Basics + +Stealth addresses are an important part of Monero's inherent privacy. They allow and require the sender to create random one-time addresses for every @transaction on behalf of the recipient. The recipient can publish just one address, yet have all of his/her incoming payments go to unique addresses on the @blockchain, where they cannot be linked back to either the recipient's published address or any other transactions' addresses. By using stealth addresses, only the sender and receiver can determine where a payment was sent. + +When you create a Monero account you’ll have a private @view-key, a private @spend-key, and a Public Address. The @spend-key is used to send payments, the @view-key is used to display incoming transactions destined for your account, and the Public Address is for receiving payments. Both the @spend-key and @view-key are used to build your Monero address. You can have a “watch only” wallet that only uses the @view-key. This feature can be used for accounting or auditing purposes but is currently unreliable due to the inability to track outgoing transactions. You can decide who can see your Monero balance by sharing your @view-key. Monero is private by default and optionally semi-transparent! + +When using the Monero Wallet all this is handled by the software. Sending Monero is as easy as entering the destination address, the amount, and pressing Send. To recieve Monero, simply provide the sender your Public Address. + +To learn how Monero prevents tracking history (untraceability), see @ring-signatures. diff --git a/_i18n/es/resources/moneropedia/subscription.md b/_i18n/es/resources/moneropedia/subscription.md new file mode 100644 index 00000000..b7411df5 --- /dev/null +++ b/_i18n/es/resources/moneropedia/subscription.md @@ -0,0 +1,47 @@ +--- +layout: moneropedia +entry: "Subscription" +tags: ["kovri"] +terms: ["Subscription"] +summary: "A file used by address book which contains I2P hosts paired with I2P destinations" +--- + +### The Basics + +A subscription is a file which contains a list of `.i2p` hosts paired with their respective @destination. Subscriptions are used by the @address-book. + +### In-depth information + +Similar to how a [hosts file](https://en.wikipedia.org/wiki/etc/hosts) can map an internet hostname to a specified address, a subscription matches a `.i2p` address to @base64-address by using the following format (no spaces allowed): `host=address` + +More specifically, a subscription pairs a @locally-unique-host to @base64-address. + +Example: + +``` +anonimal.i2p=AQZGLAMpI9Q0l0kmMj1vpJJYK3CjLp~fE3MfvE-e7KMKjI5cPOH6EN8m794uHJ6b09qM8mb9VEv1lVLEov~usVliTSXCSHuRBOCIwIOuDNU0AbVa4BpIx~2sU4TxKhoaA3zQ6VzINoduTdR2IJhPvI5xzezp7dR21CEQGGTbenDslXeQ4iLHFA2~bzp1f7etSl9T2W9RID-KH78sRQmzWnv7dbhNodMbpO6xsf1vENf6bMRzqD5vgHEHZu2aSoNuPyYxDU1eM6--61b2xp9mt1k3ud-5WvPVg89RaU9ugU5cxaHgR927lHMCAEU2Ax~zUb3DbrvgQBOTHnJEx2Fp7pOK~PnP6ylkYKQMfLROosLDXinxOoSKP0UYCh2WgIUPwE7WzJH3PiJVF0~WZ1dZ9mg00c~gzLgmkOxe1NpFRNg6XzoARivNVB5NuWqNxr5WKWMLBGQ9YHvHO1OHhUJTowb9X90BhtHnLK2AHwO6fV-iHWxRJyDabhSMj1kuYpVUBQAEAAcAAA== +``` + +1. `anonimal.i2p` is the @locally-unique-host +2. `=` is the separator +3. Everything that remains is the @base64-address + +### Subscription types + +For @Kovri, there are two types of subscription files: *public* and *private*. + +A *public* subscription: +- is used when bootstrapping to use essential services (IRC, email, Monero, etc.) +- is static and is refreshed every 12 hours from Monero's @address-book server +- allows you to safely share the subscription with everyone as it is publically available (anyone who shares the same public subscription will also be able to resolve the same hostname to the same destination as you) + +A *private* subscription: +- is used exclusively by you and is not shared with others unless you explicitly choose to share the file +- default file is `private_hosts.txt` in your @data-directory + +### Updating a private subscription + +You can use a @jump-service to manually update your private subscription. The updated subscription will then be fed into the @address-book for you to use. + +### Notes +To learn how to subscribe to multiple subscriptions, see the [user-guide](https://github.com/monero-project/kovri/blob/master/doc/USER_GUIDE.md). diff --git a/_i18n/es/resources/moneropedia/tail-emission.md b/_i18n/es/resources/moneropedia/tail-emission.md new file mode 100644 index 00000000..019e6fe1 --- /dev/null +++ b/_i18n/es/resources/moneropedia/tail-emission.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Tail Emission" +terms: ["Tail-Emission"] +summary: "the block reward at the end of the emission curve" +--- + +### The Basics + +Monero block rewards will never drop to zero. Block rewards will gradually drop until tail emission commences at the end of May 2022. At this point, rewards will be fixed at 0.6 XMR per block. + +### Why + +Miners need an incentive to mine. Because of the dynamic blocksize, competition between miners will cause fees to decrease. If mining is not profitable due to a high cost and low reward, miners lose their incentive and will stop mining, reducing the security of the network. + +Tail emission ensures that a dynamic block size and fee market can develop. diff --git a/_i18n/es/resources/moneropedia/transaction.md b/_i18n/es/resources/moneropedia/transaction.md new file mode 100644 index 00000000..0064cb50 --- /dev/null +++ b/_i18n/es/resources/moneropedia/transaction.md @@ -0,0 +1,21 @@ +--- +layout: moneropedia +entry: "Transactions" +terms: ["transaction", "transactions"] +summary: "a cryptographically signed container that details the transfer of Monero to a recipient (or recipients)" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +The parameters of a transaction contain one or more recipient addresses with corresponding amounts of funds and a `mixin_count` parameter that specifies the number of foreign outputs bound to the transaction. The more outputs that are used, a higher degree of obfuscation is possible, but that comes with a cost. Since a transaction gets larger with more outputs, the transaction fee would be higher. It is possible to form a transaction offline, which is a huge benefit for privacy. + +A transaction can be uniquely identified with the use of an optional Transaction ID, which is usually represented by a 32-byte string (64 hexadecimal characters). + +### In-depth Information +Every transaction involves two keys: a public @spend-key, and a public @view-key. The destination for an output in a transaction is actually a one-time public key computed from these two keys. + +When a wallet is scanning for incoming transactions, every transaction is scanned to see if it is for "you". This only requires your private view key and your public spend key, and this check is immutable and cannot be faked. You cannot receive transactions and identify them without a corresponding private view key. + +In order to spend the funds you have to compute a one-time private spend key for that output. This is almost always done automatically by the Monero Wallet software. diff --git a/_i18n/es/resources/moneropedia/transports.md b/_i18n/es/resources/moneropedia/transports.md new file mode 100644 index 00000000..59504f99 --- /dev/null +++ b/_i18n/es/resources/moneropedia/transports.md @@ -0,0 +1,20 @@ +--- +layout: moneropedia +entry: "Transports" +tags: ["kovri"] +terms: ["Transports", "Transport"] +summary: "The two encrypted transport layers for Kovri" +--- + +### The Basics + +@I2P comes with two encrypted transport layer technologies that allow @Kovri to securely use [TCP/IP](https://en.wikipedia.org/wiki/Tcp/ip) connections. These technologies (@SSU and @NTCP) are called *@transports*. + +### In-depth information + +@SSU is encrypted [UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol) and @NTCP is encrypted [TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol). They provide @encryption at the [transport layer](https://en.wikipedia.org/wiki/Transport_layer) so higher level @messages can be sent through @tunnels across the @I2P network. + +### Notes + +- Read about @I2P's transports on the [Transport](https://geti2p.net/en/docs/transport) page +- Read about the transports layer within the [OSI model](https://en.wikipedia.org/wiki/OSI_model) diff --git a/_i18n/es/resources/moneropedia/tunnel.md b/_i18n/es/resources/moneropedia/tunnel.md new file mode 100644 index 00000000..d22e2b94 --- /dev/null +++ b/_i18n/es/resources/moneropedia/tunnel.md @@ -0,0 +1,37 @@ +--- +layout: moneropedia +entry: "Tunnel" +tags: ["kovri"] +terms: ["Tunnel", "Tunnels"] +summary: "Uni-directional virtual paths that pass messages through a defined sequence of I2P routers" +--- + +### The Basics + +When you communicate over @I2P (visit an @eepsite / use a @garlic-service), you'll first need to connect to a peer by using @transports and then build virtual *tunnels*. These virtual tunnels are temporary, uni-directional paths that pass information through a defined sequence of @I2P routers to your @destination. Tunnels are built, and then used, with layered @garlic-encryption and are a general-purpose mechanism to transport all @I2NP @messages. + +Each peer builds, at a minimum, *two* uni-directional tunnels: one for **outbound traffic**, and one for **inbound traffic**. These tunnels are classified as either **inbound tunnels** (where @messages come toward the creator of the tunnel) or **outbound tunnels** (where the tunnel creator sends @messages away from the creator of the tunnel). Thus, *four* tunnels are required for a single round-trip @message and reply to your @destination (two for your, two for your destination). + +### In-depth information + +From @Java-I2P: + +> +Within I2P, @messages are passed in one direction through a virtual tunnel of peers, using whatever means are available to pass the @message on to the next hop. Messages arrive at the tunnel's gateway, get bundled up and/or fragmented into fixed-size @tunnel @messages, and are forwarded on to the next hop in the tunnel, which processes and verifies the validity of the @message and sends it on to the next hop, and so on, until it reaches the @tunnel endpoint. That endpoint takes the messages bundled up by the gateway and forwards them as instructed - either to another router, to another tunnel on another router, or locally. + +> +Tunnels all work the same, but can be segmented into two different groups - inbound tunnels and outbound tunnels. The inbound tunnels have an untrusted gateway which passes messages down towards the tunnel creator, which serves as the tunnel endpoint. For outbound tunnels, the tunnel creator serves as the gateway, passing messages out to the remote endpoint. + +> +The tunnel's creator selects exactly which peers will participate in the tunnel, and provides each with the necessary configuration data. They may have any number of hops. It is the intent to make it hard for either participants or third parties to determine the length of a tunnel, or even for colluding participants to determine whether they are a part of the same tunnel at all (barring the situation where colluding peers are next to each other in the tunnel). + +### Notes + +From @Java-I2P: + +> +@I2P is an inherently packet switched network, even with these tunnels, allowing it to take advantage of multiple tunnels running in parallel, increasing resilience and balancing load. Even though the tunnels within I2P bear a resemblance to a circuit switched network, everything within I2P is strictly message based - tunnels are merely accounting tricks to help organize the delivery of messages. No assumptions are made regarding reliability or ordering of messages, and retransmissions are left to higher levels (e.g. I2P's client layer streaming library). + +### Documentation + +For specification and detailed documentation, visit the [Tunnel-Routing](https://geti2p.net/en/docs/how/tunnel-routing) and [Tunnel-Implementation](https://geti2p.net/en/docs/tunnels/implementation) page. diff --git a/_i18n/es/resources/moneropedia/unlocktime.md b/_i18n/es/resources/moneropedia/unlocktime.md new file mode 100644 index 00000000..08a35f8e --- /dev/null +++ b/_i18n/es/resources/moneropedia/unlocktime.md @@ -0,0 +1,14 @@ +--- +layout: moneropedia +entry: "Transaction Unlock Time" +terms: ["unlock-time"] +summary: "a special transaction where the recipient can only spend the funds after a future date, as set by the sender" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +Unlock time allows you to send a transaction to someone, such that they can not spend it until after a certain number of blocks, or until a certain time. + +Note that this works differently than Bitcoin's [nLockTime](https://en.bitcoin.it/wiki/NLockTime), in which the transaction is not valid until the given time. diff --git a/_i18n/es/resources/moneropedia/viewkey.md b/_i18n/es/resources/moneropedia/viewkey.md new file mode 100644 index 00000000..719a96b9 --- /dev/null +++ b/_i18n/es/resources/moneropedia/viewkey.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "View Key" +terms: ["view-key", "view-keys"] +summary: "one of two sets of private and public cryptographic keys that each account has, with the private view key required to view all transactions related to the account" +--- + +### The Basics + +Monero features an opaque blockchain (with an explicit allowance system called the @view-key), in sharp contrast with transparent blockchains used by any other cryptocurrency not based on @CryptoNote. Thus, Monero is said to be "private, optionally transparent". + +Every Monero address has a private viewkey which can be shared. By sharing a viewkey a person is allowing access to view every incoming transaction for that address. However, outgoing transactions cannot be reliably viewed as of June 2017. Therefore the balance of a Monero address as shown via a viewkey should not be relied upon. + + + +{{ page.summary | capitalize }}. diff --git a/_i18n/es/resources/moneropedia/wallet.md b/_i18n/es/resources/moneropedia/wallet.md new file mode 100644 index 00000000..759b018d --- /dev/null +++ b/_i18n/es/resources/moneropedia/wallet.md @@ -0,0 +1,19 @@ +--- +layout: moneropedia +entry: "Wallet" +terms: ["wallet", "wallets"] +summary: "A wallet stores the information necessary to send and receive Monero" +--- + +### The Basics + +A Monero account, or wallet, stores the information necessary to send and receive Moneroj. In addition to sending and receiving, the Monero Wallet software keeps a private history of your transactions and allows you to cryptographically sign messages. It also includes Monero mining software and an address book. + +The term "hot wallet" describes a Monero @account which is connected to the Internet. You can send funds easily but security is much lower than a cold wallet. Never store large amounts of cryptocurrency in a hot wallet! + +A cold wallet is generated on a trusted device or computer via an @airgap. If the device is to be reused, the data storage should be securely overwritten. As soon as a cold wallet is connected to the internet or its mnemonic phrase or @spend-key is entered on an internet-connected device, it's no longer "cold" and should be considered "hot". + +A Monero @paper-wallet can be generated by downloading the source code of https://moneroaddress.org/. Verify the signature of the code on a trusted airgapped device. Create the wallet and print or store it on the media of your choice. + +Monero accounts and paper-wallets can be stored on any media - paper, USB drive, CD/DVD, or a hardware wallet device (none available for Monero as of June 2017). + diff --git a/_i18n/es/resources/research-lab.md b/_i18n/es/resources/research-lab.md index 6b257e05..61b4617c 100644 --- a/_i18n/es/resources/research-lab.md +++ b/_i18n/es/resources/research-lab.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}

Monero is not only committed to making a fungible currency, but also to continued research into the realm of financial privacy as it involves cryptocurrencies. Below you'll find the work of our very own Monero Research Lab, with more papers to come.

diff --git a/_i18n/es/resources/roadmap.md b/_i18n/es/resources/roadmap.md index f60d69b1..267b3867 100644 --- a/_i18n/es/resources/roadmap.md +++ b/_i18n/es/resources/roadmap.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
@@ -42,8 +43,7 @@

2015

- {% for toplevel in site.data.roadmap %} - + {% for toplevel in site.data.lang[site.lang].roadmap %} {% if toplevel.year == 2015 %} {% for roadlist in toplevel.accomplishments %}
@@ -54,18 +54,15 @@

{{roadlist.date}}: {{roadlist.name}}

- {%endfor%} {%endif%} - {%endfor%}

2016

- {% for toplevel in site.data.roadmap %} - + {% for toplevel in site.data.lang[site.lang].roadmap %} {% if toplevel.year == 2016 %} {% for roadlist in toplevel.accomplishments %}
@@ -76,18 +73,15 @@

{{roadlist.date}}: {{roadlist.name}}

- {%endfor%} {%endif%} - {%endfor%}

2017

- {% for toplevel in site.data.roadmap %} - + {% for toplevel in site.data.lang[site.lang].roadmap %} {% if toplevel.year == 2017 %} {% for roadlist in toplevel.accomplishments %}
@@ -102,18 +96,15 @@ {%endif%}
- {%endfor%} {%endif%} - {%endfor%}

Future

- {% for toplevel in site.data.roadmap %} - + {% for toplevel in site.data.lang[site.lang].roadmap %} {% if toplevel.year == 2018 %} {% for roadlist in toplevel.accomplishments %}
@@ -128,16 +119,12 @@ {%endif%}
- {%endfor%} {%endif%} - {%endfor%}
- - \ No newline at end of file diff --git a/_i18n/es/technical-specs.md b/_i18n/es/technical-specs.md index 5174e3c6..57224b68 100644 --- a/_i18n/es/technical-specs.md +++ b/_i18n/es/technical-specs.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
diff --git a/_i18n/es/the-monero-project.md b/_i18n/es/the-monero-project.md index e3fb357d..06fac4f5 100644 --- a/_i18n/es/the-monero-project.md +++ b/_i18n/es/the-monero-project.md @@ -1,3 +1,4 @@ +{% include untranslated.html %}
diff --git a/_strings_en.yml b/_i18n/template.yml similarity index 76% rename from _strings_en.yml rename to _i18n/template.yml index 5e065e8c..e7f5d1ae 100644 --- a/_strings_en.yml +++ b/_i18n/template.yml @@ -1,97 +1,96 @@ -global: - date: '%Y/%m/%d' - monero: Monero - getting_started: Getting Started - copyright: Copyright - monero_project: The Monero Project - sitename: getmonero.org, The Monero Project - wiki: Moneropedia - tags: Articles By Tag - wikimeta: on Moneropedia, the open encyclopedia of Monero knowledge - tagsmeta: All Monero blog articles that are tagged - titlemeta: on the home of Monero, a digital currency that is secure, private, and untraceable - terms: Terms - privacy: Privacy - copyright: Copyright - edit: Edit This Page -menu: - forum: Forum - blog: Blog - knowledge_base: Knowledge Base - community: Community - bitcointalk: Bitcointalk Thread - reddit: Reddit - allblog: All Blog Posts - devdiaries: Dev Diaries - missives: Monero Missives - uncategorised: Uncategorized - choose: How to Choose a Monero Client - running: How to Run a Monero Node - donations: Donating and Sponsorships - contribute: Contributing to Monero - downloads: All Monero Downloads - github: GitHub - merchants: Merchants and Services Directory - accepting: Accepting Monero Payments - about: About Monero - people: The People Behind Monero - userguides: User Guides - developerguides: Developer Guides - vrp: Vulnerability Response Process - goals: Design & Development Goals - openalias: The OpenAlias Project - lab: Monero Research Lab - alternative: Alternative Clients - projects: External Projects - stackexchange: StackExchange Q&A - slack: Slack Chat - telegram: Telegram Chat - irc: IRC on Freenode - irc-general: "#monero (General)" - irc-development: "#monero-dev (Development)" - irc-trading: "#monero-otc (OTC Trading)" - irc-markets: "#monero-markets (Markets)" - irc-mining: "#monero-pools (Mining)" -index: - page_title: "Monero - secure, private, untraceable" - what_is_1: What is - what_is_2: " ?" - what_is_orange_block: "Monero is a secure, private, untraceable currency that is open-source and freely available for anyone to use." - what_is_text_block_1: "With Monero, you are your own bank; You have complete control over your funds. With Monero, your accounts and transactions are kept private." - what_is_text_block_2: "Want to find out more? An overview of Monero's main features are below. If you'd like to try Monero for yourself the" - what_is_text_block_3: "Getting Started" - what_is_text_block_4: "section is an excellent launching point." - news: News - the_latest: The Latest - private: Private - secure: Secure - untraceable: Untraceable - private_text: "Monero uses hidden amounts, origins and destinations of @transactions. This means that nobody knows how much you're sending in a transaction except you. This ensures that your purchases and other transfers remain private by default." - untraceable_text: "By taking advantage of @ring-signatures, Monero allows you to send and receive funds privately. Even though your transactions are publicly verifiable on the @blockchain, transactions use digital signatures that specify a group of signers such that the person verifying can’t tell which person actually produced the signature. Because it's ambiguous which funds have been spent, your transaction remains private and cannot be traced back to you." - secure_text: "Monero uses a distributed peer-to-peer @consensus network and every transaction is cryptographically signed. Your coins are safely stored on the @blockchain and can be restored at any time with the use of a 25 word @mnemonic-seed on any computer with the Monero software. Wallet files are encrypted on disk and locked with a passphrase, rendering them useless if stolen." - how_do_i_1: "How do I " - how_do_i_2: " ?" - get_started: get started - get_started_1: "The fastest way to start using Monero is with a web @account manager such as " - mymonero: "MyMonero" - get_started_2: "." - get_started_3: "Alternatively, if you would like to run a [full Monero node](/getting-started/running) you can download the client and a kick-starter @blockchain (to bring your local client up to speed) using the download link on the right." - where_can_i: Where can I - download_1: download - download_2: " ?" - different_os: "Need it for a different operating system?" - all_downloads: View all available downloads here - c_download: Download - monero_for: Monero for - latest_blockchain: Latest @Blockchain -blog: - title_1: All - title_2: Blog - title_3: Posts - tagged: Tagged under - author: Posted by - date: Posted at - forum: Click here to join the discussion for this entry on the Monero Forum -tags: - all: Articles by Tag - notags: There are no posts for this tag. +langs: + en: English + es: Español + +global: + date: '%Y/%m/%d' + monero: Monero + getting_started: Getting Started + copyright: Copyright + monero_project: The Monero Project + sitename: getmonero.org, The Monero Project + wiki: Moneropedia + tags: Articles By Tag + wikimeta: on Moneropedia, the open encyclopedia of Monero knowledge + tagsmeta: All Monero blog articles that are tagged + titlemeta: on the home of Monero, a digital currency that is secure, private, and untraceable + terms: Terms + privacy: Privacy + copyright: Copyright + edit: Edit This Page + untranslated: This page is not yet translated. If you would like to help translate it, please see the +titles: + index: Home + whatismonero: What is Monero (XMR)? + using: Using Monero + accepting: Accepting Monero + contributing: Improing Monero + mining: Mining Monero + faq: FAQ + downloads: Downloads + allposts: All Blog Posts + team: Monero Team + hangouts: Hangouts + events: Events + sponsorships: Sponsorships + merchants: Merchants & Services + about: About Monero + roadmap: Roadmap + researchlab: Monero Research Lab + moneropedia: Moneropedia + userguides: User Guides + developerguides: Developer Guides + technicalspecs: Technical Specs + themoneroproject: The Monero Project + presskit: Monero Press Kit + legal: Legal + ffs: Forum Funding System + ffs-cp: Completed Proposals + ffs-fr: Funding Required + ffs-ideas: Ideas + ffs-ot: Open Tasks + ffs-wip: Work in Progress + blogbytag: Blog by Tag +index: + page_title: "Monero - secure, private, untraceable" + what_is_1: What is + what_is_2: " ?" + what_is_orange_block: "Monero is a secure, private, untraceable currency that is open-source and freely available for anyone to use." + what_is_text_block_1: "With Monero, you are your own bank; You have complete control over your funds. With Monero, your accounts and transactions are kept private." + what_is_text_block_2: "Want to find out more? An overview of Monero's main features are below. If you'd like to try Monero for yourself the" + what_is_text_block_3: "Getting Started" + what_is_text_block_4: "section is an excellent launching point." + news: News + the_latest: The Latest + private: Private + secure: Secure + untraceable: Untraceable + private_text: "Monero uses hidden amounts, origins and destinations of @transactions. This means that nobody knows how much you're sending in a transaction except you. This ensures that your purchases and other transfers remain private by default." + untraceable_text: "By taking advantage of @ring-signatures, Monero allows you to send and receive funds privately. Even though your transactions are publicly verifiable on the @blockchain, transactions use digital signatures that specify a group of signers such that the person verifying can’t tell which person actually produced the signature. Because it's ambiguous which funds have been spent, your transaction remains private and cannot be traced back to you." + secure_text: "Monero uses a distributed peer-to-peer @consensus network and every transaction is cryptographically signed. Your coins are safely stored on the @blockchain and can be restored at any time with the use of a 25 word @mnemonic-seed on any computer with the Monero software. Wallet files are encrypted on disk and locked with a passphrase, rendering them useless if stolen." + how_do_i_1: "How do I " + how_do_i_2: " ?" + get_started: get started + get_started_1: "The fastest way to start using Monero is with a web @account manager such as " + mymonero: "MyMonero" + get_started_2: "." + get_started_3: "Alternatively, if you would like to run a [full Monero node](/getting-started/running) you can download the client and a kick-starter @blockchain (to bring your local client up to speed) using the download link on the right." + where_can_i: Where can I + download_1: download + download_2: " ?" + different_os: "Need it for a different operating system?" + all_downloads: View all available downloads here + c_download: Download + monero_for: Monero for + latest_blockchain: Latest @Blockchain +blog: + title_1: All + title_2: Blog + title_3: Posts + tagged: Tagged under + author: Posted by + date: Posted at + forum: Click here to join the discussion for this entry on the Monero Forum +tags: + all: Articles by Tag + notags: There are no posts for this tag. diff --git a/_i18n/template/community/events.md b/_i18n/template/community/events.md new file mode 100644 index 00000000..417d8061 --- /dev/null +++ b/_i18n/template/community/events.md @@ -0,0 +1,28 @@ +{% include untranslated.html %} +
+Monero people are always down to get together and have a good time. Check below to see Monero-related events happening in your area. +
+ +{% for toplevel in site.data.events %} + +
+
+
+
+
+

{{toplevel.event}}

+

Where

+

{{toplevel.where}}

+

When

+

{{toplevel.when}}

+

Description

+

{{toplevel.description}}

+

Link

+ {{toplevel.link}} +
+
+
+
+
+ +{%endfor%} \ No newline at end of file diff --git a/_i18n/template/community/hangouts.md b/_i18n/template/community/hangouts.md new file mode 100644 index 00000000..35e6a3f5 --- /dev/null +++ b/_i18n/template/community/hangouts.md @@ -0,0 +1,97 @@ +{% include untranslated.html %} +
+The Monero community is diverse and varied. We come from all over, but we definitely have some places we like to hang out together. You'll find most of them below. Join us! +
+ +
+
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ +
+
+ +
+
+
+
+
+

Workgroup Resources

+
+
+
+

In an effort to support organic workgroups, Monero has several resources that the community can use to meet and plan projects. Mattermost even has relays into the most popular Monero-related IRC channels.

+
+
+
+

Slack

+
+ +
+

Taiga

+
+
+
+
+
+
+

IRC Channels

+
+
+
+

The Monero community utilizes a lot of IRC channels that each serve different purposes. Some to work, and some just to hang out. You'll find the more popular ones below.

+
+
+ {% for channel in site.data.irc %} +
+ #{{ channel.channel }} +

{{ channel.description }}

+
+ {% endfor %} +
+
+
+
+ + + + + +
+
+ +
diff --git a/_i18n/template/community/merchants.md b/_i18n/template/community/merchants.md new file mode 100644 index 00000000..41e4816c --- /dev/null +++ b/_i18n/template/community/merchants.md @@ -0,0 +1,27 @@ +{% include untranslated.html %} +
+Merchants of all kinds have come to value the financial privacy that Monero brings. Below is a list of the merchants that we know of that currently accept Monero for their goods and services. If a company no longer accepts Monero or you would like your business to be listed, please [open a GitHub issue and let us know](https://github.com/monero-project/monero-site/issues). +
+
+{% for toplevel in site.data.merchants %} +
+
+

{{toplevel.category}}

+
+ {% assign sortedMerchants = toplevel.merchants | sort: 'name' %} + {% for merchants in sortedMerchants %} + + {% endfor %} +
+
+
+{%endfor%} + + +
+ +
+*Please note: these links are being provided as a convenience and for informational purposes only; they do not constitute an endorsement by the Monero community of any products, services or opinions of the corporations or organizations or individuals listed. The Monero community bears no responsibility for the accuracy, legality, or content of these external sites. Contact the external site for answers to questions regarding its content. As always, caveat emptor ("buyer beware"); you are responsible for doing your own research. Always use judgement when making online purchases.* +
diff --git a/_i18n/template/community/sponsorships.md b/_i18n/template/community/sponsorships.md new file mode 100644 index 00000000..d301dcf8 --- /dev/null +++ b/_i18n/template/community/sponsorships.md @@ -0,0 +1,97 @@ +{% include untranslated.html %} +
+The following businesses have supported the Monero Project in its goal to bring financial privacy to the world. We couldn't be more grateful for their contributions. If you would like to sponsor the Monero Project and be listed on this page, please send an email to dev@getmonero.org. +
+ +
+
+
+ + + +
+
+ + + + + +
+
+
+
+
+
+

Navicat

+ +
+
+
+
+
+
+
+
+

Symas

+ +
+
+
+
+
+
+
\ No newline at end of file diff --git a/_i18n/template/community/team.md b/_i18n/template/community/team.md new file mode 100644 index 00000000..341d2a19 --- /dev/null +++ b/_i18n/template/community/team.md @@ -0,0 +1,181 @@ +{% include untranslated.html %} +
+ +
+
+
+
+ + +

Core

+
+
+ {% for toplevel in site.data.team %} + {% if toplevel.area == "Core" %} + {% for member in toplevel.member %} +
+
+
+

{{member.name}}

+
+
+

{{member.email}}

+
+
+ {% if member.github %} + + {%endif%} + {% if member.twitter %} + + {%endif%} + {% if member.reddit %} + + {%endif%} +
+
+
+ {%endfor%} + {%endif%} + {%endfor%} +
+
+ + +

Developers

+
+
+
+
+
+

The Monero Project has had well over 200 contributors over the life of the project. For a complete list, please see the OpenHub contributors page. Below you'll find some individuals that have gone above and beyond for Monero.

+
+
+
+
+
+ {% for toplevel in site.data.team %} + {% if toplevel.area == "Developers" %} + {% for member in toplevel.member %} +
+
+
+

{{member.name}}

+
+
+ {% if member.github %} + + {%endif%} + {% if member.twitter %} + + {%endif%} + {% if member.reddit %} + + {%endif%} +
+
+
+ {%endfor%} + {%endif%} + {%endfor%} +
+
+ + +

Community

+
+
+ {% for toplevel in site.data.team %} + {% if toplevel.area == "Community" %} + {% for member in toplevel.member %} +
+
+
+

{{member.name}}

+
+
+ {% if member.github %} + + {%endif%} + {% if member.twitter %} + + {%endif%} + {% if member.reddit %} + + {%endif%} +
+
+
+ {%endfor%} + {%endif%} + {%endfor%} +
+
+ + +

Research Lab

+
+
+ {% for toplevel in site.data.team %} + {% if toplevel.area == "Monero Research Lab" %} + {% for member in toplevel.member %} +
+
+
+

{{member.name}}

+
+
+ {% if member.github %} + + {%endif%} + {% if member.twitter %} + + {%endif%} + {% if member.reddit %} + + {%endif%} +
+
+
+ {%endfor%} + {%endif%} + {%endfor%} +
+
+ + +

Special Thanks

+
+
+ {% for toplevel in site.data.team %} + {% if toplevel.area == "Special Thanks" %} + {% for member in toplevel.member %} +
+
+
+

{{member.name}}

+
+
+ {% if member.github %} + + {%endif%} + {% if member.twitter %} + + {%endif%} + {% if member.reddit %} + + {%endif%} +
+
+
+ {%endfor%} + {%endif%} + {%endfor%} +
+
+
+
+
+
+ + +
\ No newline at end of file diff --git a/_i18n/template/downloads.md b/_i18n/template/downloads.md new file mode 100644 index 00000000..ae8003b2 --- /dev/null +++ b/_i18n/template/downloads.md @@ -0,0 +1,142 @@ +{% include untranslated.html %} +
+ +
+ +If you need help choosing the correct application, please click [here](https://www.reddit.com/r/Monero/comments/64b5lf/what_is_the_best_monero_wallet/) for a quick answer, then select the appropriate release for your operating system below. +Note: the SHA256 hashes are listed by the downloads for convenience, but a GPG-signed list of the hashes is at [getmonero.org/downloads/hashes.txt](https://getmonero.org/downloads/hashes.txt) and should be treated as canonical, with the signature checked against the appropriate GPG key in the source code (in /utils/gpg_keys). + +
+ + +
+
+ +
+
+ + +
+ +{% for data_downloads in site.data.downloads %} + +
+
+

+ {% if data_downloads.icon != null %} + + {% endif %} + {{data_downloads.platform}} +

+ {% if data_downloads.version != null %} +

Current Version: {{ data_downloads.version }} {{ data_downloads.tag }}

+ {%endif%} + + + +{% if data_downloads.cli_hash == "source" %} +
+
+

+ Source Code +

+
+
+If you'd prefer to use a blockchain bootstrap, instead of syncing from scratch, you can [use this link for the most current bootstrap](https://downloads.getmonero.org/blockchain.raw). It is typically much faster to sync from scratch, however, and it also takes a lot less RAM (import is very greedy). +
+
+{% elsif data_downloads.id == "hardware" %} +
+
+

The Monero community has just funded a Dedicated Hardware Wallet which is now in progress. As well, Ledger is working on integrating Monero into their hardware wallets.

+
+ +{% elsif data_downloads.id == "mobilelight" %} +
+
+

The following are mobile or light wallets that are deemed safe by trusted members of the community. If there is a wallet that is not on here, you can request the community check it out. Go to our Hangouts page to see where we are.

+
+
+
+
+ MyMonero Logo +
+
+ Monerujo Logo +
+
+ + +{% elsif data_downloads.gui_hash == nil and data_downloads.cli_hash != nil %} + +
+

SHA256 Hash:

{{ data_downloads.cli_hash }}

+
+{% elsif data_downloads.gui_hash != nil and data_downloads.cli_hash == nil %} + +
+

SHA256 Hash:

{{ data_downloads.gui_hash }}

+
+{% elsif data_downloads.gui_hash != nil and data_downloads.cli_hash != nil %} +
+
+ +

+ {{ data_downloads.platform }} +

+

SHA256 Hash (GUI):

{{ data_downloads.gui_hash }}

+ +
+ +
+

+ {{ data_downloads.platform }} (Command-Line Tools Only) +

+

SHA256 Hash (CLI):

{{ data_downloads.cli_hash }}

+
+
+{% endif %} +
+
+ +{% endfor %} + +
+ + +
+ + + diff --git a/_i18n/template/get-started/accepting.md b/_i18n/template/get-started/accepting.md new file mode 100644 index 00000000..1a6f315f --- /dev/null +++ b/_i18n/template/get-started/accepting.md @@ -0,0 +1,90 @@ +{% include untranslated.html %} +
+
+ +
+
+
+
+

Instructions for the Command-Line Interface

+
+
+
+ +### The Basics + +Monero works a little differently to what you may have become accustomed to from other @cryptocurrencies. In the case of a digital currency like Bitcoin and its many derivatives merchant payment systems will usually create a new recipient @address for each payment or user. + +However, because Monero has @stealth-addresses there is no need to have separate recipient addresses for each payment or user, and a single @account address can be published. Instead, when receiving payments a merchant will provide the person paying with a "payment ID". + +A @payment-ID is a hexadecimal string that is 64 characters long, and is normally randomly created by the merchant. An example of a payment ID is: +``` +666c75666679706f6e7920697320746865206265737420706f6e792065766572 +``` + +### Checking for a Payment in monero-wallet-cli + +If you want to check for a payment using monero-wallet-cli you can use the "payments" command followed by the payment ID or payment IDs you want to check. For example: + +``` +[wallet 49VNLa]: payments 666c75666679706f6e7920697320746865206265737420706f6e792065766572 + payment transaction height amount unlock time + 666c75666679706f6e79206973207 7ba4cd810c9b4096869849458181e98e 441942 30.00000 0 +[wallet 49VNLa]: █ +``` + +If you need to check for payments programmatically, then details follow the next section. + +### Receiving a Payment Step-by-Step + +* Generate a random 64 character hexadecimal string for the payment +* Communicate the payment ID and Monero address to the individual who is making payment +* Check for the payment using the "payments" command in monero-wallet-cli + +### Checking for a Payment Programmatically + +In order to check for a payment programmatically you can use the get_payments or get_bulk_payments JSON RPC API calls. + +*get_payments*: this requires a payment_id parameter with a single payment ID. + +*get_bulk_payments*: this is the preferred method, and requires two parameters, payment_ids - a JSON array of payment IDs - and an optional min_block_height - the block height to scan from. + +An example of returned data is as follows: + +``` +[ monero->~ ]$ curl -X POST http://127.0.0.1:18500/json_rpc -d '{"jsonrpc":"2.0","method":"get_bulk_payments","id":"test", "params":{"payment_ids": ["666c75666679706f6e7920697320746865206265737420706f6e792065766572"]}}' -H "Content-Type: application/json" +{ + "id": "test", + "jsonrpc": "2.0", + "result": { + "payments": [{ + "amount": 30000000000000, + "block_height": 441942, + "payment_id": "666c75666679706f6e7920697320746865206265737420706f6e792065766572", + "tx_hash": "7ba4cd810c9b4096869849458181e98e18b6474ab66415de0f4ccf7ab1162fdf", + "unlock_time": 0 + }] + } +} +``` + +It is important to note that the amounts returned are in base Monero units and not in the display units normally used in end-user applications. Also, since a transaction will typically have multiple outputs that add up to the total required for the payment, the amounts should be grouped by the tx_hash or the payment_id and added together. Additionally, as multiple outputs can have the same amount, it is imperative not to try and filter out the returned data from a single get_bulk_payments call. + +Before scanning for payments it is useful to check against the daemon RPC API (the get_info RPC call) to see if additional blocks have been received. Typically you would want to then scan only from that received block on by specifying it as the min_block_height to get_bulk_payments. + +### Programatically Scanning for Payments + +* Get the current block height from the daemon, only proceed if it has increased since our last scan +* Call the get_bulk_payments RPC API call with our last scanned height and the list of all payment IDs in our system +* Store the current block height as our last scanned height +* Remove duplicates based on transaction hashes we have already received and processed + +
+
+
+ + + +
+
+ \ No newline at end of file diff --git a/_i18n/template/get-started/contributing.md b/_i18n/template/get-started/contributing.md new file mode 100644 index 00000000..ac8467a1 --- /dev/null +++ b/_i18n/template/get-started/contributing.md @@ -0,0 +1,93 @@ +{% include untranslated.html %} +
+Monero is an open-source, community-driven project. Described below are several ways to support the project. +
+ +
+
+
+ +
+
+
+

Support the Network

+
+
+ +### Develop +Monero is primarily written in C++. As it is a decentralized project, anyone is welcome to add or make changes to existing code. Pull requests are merged based on community consensus. See the repositories and outstanding issues. + +### Run a Full Node +Run monerod with port 18080 open. Running a full node ensures maximum privacy when transacting with Monero. It also improves distribution of the blockchain to new users. + +### Mine +Mining ensures the Monero network remains decentralized and secure. In the Monero graphical user interface and command-line interface, background mining may be activated. Additional resources for mining may be viewed [here](https://reddit.com/r/MoneroMining). + +
+
+
+ + +
+
+
+
+

View the Forum Funding System

+
+
+
+

Monero utilizes a forum funding system whereby projects are proposed for development and community-funded. Funding is held in escrow and remunerated to developers once programming milestones are achieved. Anyone may generate new proposals or fund existing ones.

+
+
+
+ + +
+
+
+
+

Donate

+
+
+
+

Ongoing development is supported by donations and sponsorships.

+
+
+
+ +
+
+ +
+
+
+
+

Donating Monero

+

Donations may be sent to donate.getmonero.org or 44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A

+
+
+
+
+

Donating Bitcoin

+

Donations may be sent to donate.getmonero.org or 1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H

+
+
+
+
+

Other

+

E-mail dev@getmonero.org for alternative means of donating or if you would like to become a sponsor for the Monero Project.

+
+
+
+
+ + + + + + + +
+
+ +
diff --git a/_i18n/template/get-started/faq.md b/_i18n/template/get-started/faq.md new file mode 100644 index 00000000..4aa8d532 --- /dev/null +++ b/_i18n/template/get-started/faq.md @@ -0,0 +1,136 @@ +{% include untranslated.html %} +
+ + + +
+ +Monero has value because people are willing to buy it. If no one is willing to buy Monero, then it will not have any value. Monero’s price increases if demand exceeds supply, and it decreases if supply exceeds demand. + +
+ +
+ +
+ + + +
+ +You can buy Monero from an exchange or from an individual. Alternatively, you can try mining Monero to get coins from the block reward. +
+ +
+ +
+ + + +
+ +A mnemonic seed is a set of 25 words that can be used to restore your account anywhere. Keep these words safe and do not share them with someone else. You can use this seed to restore your account, even if your computer crashes. +
+ +
+ +
+ + + +
+ +Monero uses three different privacy technologies: ring signatures, ring confidential transactions (RingCT), and stealth addresses. These hide the sender, amount, and receiver in the transaction, respectively. All transactions on the network are private by mandate; there is no way to accidentally send a transparent transaction. This feature is exclusive to Monero. You do not need to trust anyone else with your privacy. +
+ +
+ +
+ + + +
+ +If you are running a full node locally, you need to copy the entire blockchain to your computer. This can take a long time, especially on an old hard drive or slow internet connection. If you are using a remote node, your computer still needs to request a copy of all the outputs, which can take several hours. Be patient, and if you would like to sacrifice some privacy for faster sync times, consider using a lightweight wallet instead. +
+ +
+ +
+ + + +
+ +For a lightweight wallet, you give your view key to a node, who scans the blockchain and looks for incoming transactions to your account on your behalf. This node will know when you receive money, but it will not know how much you receive, who you received it from, or who you are sending money to. Depending on your wallet software, you may be able to use a node you control to avoid privacy leaks. For more privacy, use a normal wallet, which can be used with your own node. +
+ +
+ +
+ + + +
+ +Monero is not based on Bitcoin. It is based on the CryptoNote protocol. Bitcoin is a completely transparent system, where people can see exactly how much money is being sent from one user to another. Monero hides this information to protect user privacy in all transactions. It also has a dynamic block size and dynamic fees, an ASIC-resistant proof of work, and a tail coin emission, among several other changes. +
+ +
+ +
+ + + +
+ +No, Monero does not have a hard block size limit. Instead, the block size can increase or decrease over time based on demand. It is capped at a certain growth rate to prevent outrageous growth. +
+ +
+ +
+ + + +
+ +A blockchain is a system that stores a copy of all transaction history on the Monero network. Every two minutes, a new block with the latest transaction information is added to the blockchain. This chain allows the network to verify the amount of money accounts have and make it resilient to attacks and centralization attempts. +
+ +
+ +
+ + + +
+ +Kovri is an I2P router written in C++. I2P is a hidden network like Tor with several technical differences. Kovri is an independent project of Monero, but it will work with Monero and several other projects. Kovri hides the transaction broadcast, so other nodes do not know who created transactions. In adversarial conditions, Kovri can be used to hide all Monero traffic through I2P, which would prevent people from knowing Monero is being used. Kovri is currently in alpha, and it is not yet fully integrated in Monero. Learn more about Kovri at the [project website.](https://getkovri.org) +
+ +
+ +
+ + + +
+ +Fungibility is a simple property of money such that there are no differences between two amounts of the same value. If two people exchanged a 10 and two 5’s, then no one would lose out. However, let’s suppose that everyone knows the 10 was previously used in a ransomware attack. Is the other person still going to make the trade? Probably not, even if the person with the 10 has no connection with the ransomware. This is a problem, since the receiver of money needs to constantly check the money they are receiving to not end up with tainted coins. Monero is fungible, which means people do not need to go through this effort. +
+ +
+ +
+ + + +
+In Monero, every transaction output is uniquely associated with a key image that can only be generated by the holder of that output. Key images that are used more than once are rejected by the miners as double-spends and cannot be added to a valid block. When a new transaction is received, miners verify that the key image does not already exist for a previous transaction to ensure it's not a double-spend. + +We can also know that transaction amounts are valid even though the value of the inputs that you are spending and the value of the outputs you are sending are encrypted (these are hidden to everyone except the recipient). Because the amounts are encrypted using Pedersen commitments what this means is that no observers can tell the amounts of the inputs and outputs, but they can do math on the Pedersen commitments to determine that no Monero was created out of thin air. + +As long as the encrypted output amounts you create is equal to the sum of the inputs that are being spent (which include an output for the recipient and a change output back to yourself and the unencrypted transaction fee), then you have a legitimate transaction and know no Monero is being created out of thin air. Pedersen commitments mean that the sums can be verified as being equal, but the Monero value of each of the sums and the Monero value of the inputs and outputs individually are undeterminable. +
+ +
diff --git a/_i18n/template/get-started/mining.md b/_i18n/template/get-started/mining.md new file mode 100644 index 00000000..2a944229 --- /dev/null +++ b/_i18n/template/get-started/mining.md @@ -0,0 +1,86 @@ +
+
+

Monero is a cryptocurrency that relies on proof-of-work mining to achieve distributed consensus. Below you'll find some information and resources on how to begin mining.

+ +

The Monero Project does not endorse any particular pool, software, or hardware, and the content below is provided for informational purposes only.

+
+ +
+
+ +
+
+
+
+

Support

+
+
+ +
+
+ +
+
+
+
+
+
+
+
+

Pools

+
+
+
+

A listing of trusted Monero pools is found here.

+
+
+
+
+
+
+
+

Hardware Benchmarking

+
+
+
+

See here for a listing of GPUs/CPUs and their respective hashrates.

+
+
+
+
+
+
+
+ +
+
+
+
+

Mining Software

+
+
+
+

Note that some miners may have developer fees.

+
+
+

XMR Stak

+
+
+

XMRig

+
+
+

XMRig AMD

+
+ +
+
+ +
+
+ + +
\ No newline at end of file diff --git a/_i18n/template/get-started/using.md b/_i18n/template/get-started/using.md new file mode 100644 index 00000000..8d13dae7 --- /dev/null +++ b/_i18n/template/get-started/using.md @@ -0,0 +1,98 @@ +{% include untranslated.html %} +
+

Transacting with Monero can be made easy. This page is designed to guide users in that process.

+
+
+
+
+ +
+
+
+
+

1. Learn

+
+
+
+

Monero is a secure, private, and untraceable cryptocurrency. The developers and community are committed to protecting these values. Learn more by reading the What is Monero page. The source code is also available for review and discussion.

+
+
+
+ +
+
+
+
+
+
+
+
+

2. Request Support

+
+
+
+

There is a large and supportive community that will assist if you experience any difficulty. See the Hangouts page for more information.

+
+
+
+
+
+
+
+

3. Generate a Wallet

+
+
+
+

A Monero wallet is required to secure your own funds. See the Downloads page for a listing of available wallets.

+
+
+
+
+
+
+
+ +
+
+
+
+

4. Acquire Monero

+
+
+
+

Monero may be purchased on an exchange with fiat or other cryptocurrencies. An alternate way of acquiring Monero is via mining, the computationally-complex process whereby transactions are immutably recorded on the blockchain.

+
+
+
+ +
+
+
+
+
+
+
+
+

5. Send and Receive Monero

+
+
+
+

Learn how to send and receive Monero by viewing the guide.

+
+
+
+
+
+
+
+

6. Transact with Monero

+
+
+
+

Monero may be used to purchase many goods and services. For a listing, see the Merchants page.

+
+
+
+
+
+
diff --git a/_i18n/template/get-started/what-is-monero.md b/_i18n/template/get-started/what-is-monero.md new file mode 100644 index 00000000..74e23f88 --- /dev/null +++ b/_i18n/template/get-started/what-is-monero.md @@ -0,0 +1,114 @@ +{% include untranslated.html %} +
+
+
+
+
+
+

What you need to know

+
+
+
+

Monero is the leading cryptocurrency with a focus on private and censorship-resistant transactions.

+

Most existing cryptocurrencies, including Bitcoin and Ethereum, have transparent blockchains, meaning that transactions are openly verifiable and traceable by anyone in the world. Furthermore, sending and receiving addresses for these transactions may potentially be linkable to a person's real-world identity.

+

Monero uses cryptography to shield sending and receiving addresses, as well as transacted amounts.

+
+
+ Encrypted lock +
+
+
+
+ Classified document +
+
+

Monero transactions are confidential and untraceable.

+

Every Monero transaction, by default, obfuscates sending and receiving addresses as well as transacted amounts. This always-on privacy means that every Monero user's activity enhances the privacy of all other users, unlike selectively transparent cryptocurrencies (e.g. Z-Cash).

+

Monero is fungible. By virtue of obfuscation, Monero cannot become tainted through participation in previous transactions. This means Monero will always be accepted without the risk of censorship.

+

The Kovri Project, currently in development, will route and encrypt transactions via I2P Invisible Internet Project nodes. This will obfuscate a transactor's IP address and provide further protection against network monitoring.

+
+ +
+
+
+

Monero is a grassroots community attracting the world's best cryptocurrency researchers and engineering talent.

+

Over 240 developers have contributed to the Monero project, including 30 core developers. Forums and chat channels are welcoming and active.

+

Monero's Research Lab, Core Development Team and Community Developers are constantly pushing the frontier of what is possible with cryptocurrency privacy and security.

+

Monero is not a corporation. It is developed by cryptography and distributed systems experts from all over the world that donate their time or are funded by community donations. This means that Monero can't be shut down by any one country and is not constrained by any particular legal jurisdiction.

+
+
+ Academic growth +
+
+
+
+ Electronic cash +
+
+

Monero is electronic cash that allows fast, inexpensive payments to and from anywhere in the world.

+

There are no multi-day holding periods and no risk of fraudulent chargebacks. It is safe from ‘capital controls’ - these are measures that restrict the flow of traditional currencies, sometimes to an extreme degree, in countries experiencing economic instability.

+
+
+
+
+
+
+
+

Monero Videos

+
+
+ +
+
+
+ +
+
+
diff --git a/_i18n/template/index.md b/_i18n/template/index.md new file mode 100644 index 00000000..ad0774aa --- /dev/null +++ b/_i18n/template/index.md @@ -0,0 +1,191 @@ +{% include untranslated.html %} +
+
+
+
+
+
+ + +
+ +
+
+
+

Monero

+

Private Digital Currency

+

Monero is a secure, private, and untraceable cryptocurrency. It is open-source and accessible to all. With Monero, you are your own bank. Only you control and are responsible for your funds. Your accounts and transactions are kept private from prying eyes.

+

Get Started

+
+
+
+
+
+ + + +
+
+
+

Why Monero is different

+
+
+
+

Monero is secure

+

Monero is a decentralized cryptocurrency, meaning it is secure digital cash operated by a network of users. Transactions are confirmed by distributed consensus and then immutably recorded on the blockchain. Third-parties do not need to be trusted to keep your Monero safe.

+
+
+ Secure safe +
+
+
+
+ No surveillance +
+
+

Monero is private

+

Monero uses ring signatures, ring confidential transactions, and stealth addresses to obfuscate the origins, amounts, and destinations of all transactions. Monero provides all the benefits of a decentralized cryptocurrency, without any of the typical privacy concessions.

+
+ +
+
+
+

Monero is untraceable

+

Sending and receiving addresses as well as transacted amounts are obfuscated by default. Transactions on the Monero blockchain cannot be linked to a particular user or real-world identity.

+
+
+ Untraceable Monero paths +
+
+
+
+ Monero gold +
+
+

Monero is fungible

+

Monero is fungible because it is private by default. Units of Monero cannot be blacklisted by vendors or exchanges due to their association in previous transactions.

+
+
+
+
+ + + + + + + +
+
+ +
+
+
+

Downloads

+
+ + +
+

Need it for a different operating system? View all available downloads here.

+
+
+
+
+ + + + + +
+
+ + + + + +
+
+ + + + + + + + + + + +
+
+ + +
\ No newline at end of file diff --git a/_i18n/template/press-kit.md b/_i18n/template/press-kit.md new file mode 100644 index 00000000..b7bf3e2f --- /dev/null +++ b/_i18n/template/press-kit.md @@ -0,0 +1,70 @@ +{% include untranslated.html %} +
+

Here you'll find the Monero symbol and logo below. You can choose any size that you want, or download the .ai file to mess with the logo yourself. Note that the white background options have a white background under the Monero symbol ONLY, not as a background to the whole image. Lastly, you can download everything on this page in one zip file by clicking here.

+
+
+
+
+
+
+
+

Monero Symbol

+
+
+
+ +
+
+
+

No background (PNG)

+ Small + Medium + Large +
+
+

White background (PNG)

+ Small + Medium + Large +
+
+ +
+
+
+
+
+
+

Monero Logo

+
+
+
+
+ +
+
+
+
+

No background (PNG)

+ Small + Medium + Large +
+
+

White background (PNG)

+ Small + Medium + Large +
+
+
+ +
+
+
+
+
\ No newline at end of file diff --git a/_i18n/template/resources/about.md b/_i18n/template/resources/about.md new file mode 100644 index 00000000..7f0abc42 --- /dev/null +++ b/_i18n/template/resources/about.md @@ -0,0 +1,57 @@ +{% include untranslated.html %} +
+
+
+ +
+
+
+
+

A Brief History

+
+
+
+ +Monero was launched in April 2014. It was a fair, pre-announced launch of the CryptoNote reference code. There was no premine or instantmine, and no portion of the block reward goes to development. See the original Bitcointalk thread here. The founder, thankful_for_today, proposed some controversial changes that the community disagreed with. A fallout ensued, and the Monero Core Team forked the project with the community following this new Core Team. This Core Team has provided oversight since. + +Monero has made several large improvements since launch. The blockchain was migrated to a different database structure to provide greater efficiency and flexibility, minimum ring signature sizes were set so that all transactions were private by mandate, and RingCT was implemented to hide the transaction amounts. Nearly all improvements have provided improvements to security or privacy, or they have facilitated use. Monero continues to develop with goals of privacy and security first, ease of use and efficiency second. + +
+
+
+ +
+
+ +
+
+
+
+

Our Values

+
+
+ +
+ +Monero is more than just a technology. It’s also what the technology stands for. Some of the important guiding philosophies are listed below. + +### Security + +Users must be able to trust Monero with their transactions, without risk of error or attack. Monero gives the full block reward to the miners, who are the most critical members of the network who provide this security. Transactions are cryptographically secure using the latest and most resilient encryption tools available. + +### Privacy + +Monero takes privacy seriously. Monero needs to be able to protect users in a court of law and, in extreme cases, from the death penalty. This level of privacy must be completely accessible to all users, whether they are technologically competent or have no idea how Monero works. A user needs to confidently trust Monero in a way that this person does not feel pressured into changing their spending habits for risk of others finding out. + +### Decentralization + +Monero is committed to providing the maximum amount of decentralization. With Monero, you do not have to trust anyone else on the network, and it is not run by any large group. An accessible “Proof of Work” algorithm makes it easy to mine Monero on normal computers, which makes it more difficult for someone to purchase a large amount of mining power. Nodes connect to each other with I2P to lower the risks of revealing sensitive transaction information and censorship (tba). Development decisions are extremely clear and open to public discussion. Developer meeting logs are published online in their entirety and visible by all. + +
+
+
+ + + +
+
\ No newline at end of file diff --git a/_i18n/template/resources/developer-guides.md b/_i18n/template/resources/developer-guides.md new file mode 100644 index 00000000..d219203a --- /dev/null +++ b/_i18n/template/resources/developer-guides.md @@ -0,0 +1,20 @@ +{% include untranslated.html %} +
+ +
+

Please note: the guides below are currently out of date, but are considered a good starting point for most calls.

+
+ +
+
+

RPC Documetation

+
+ +[Daemon RPC Documentation](daemon-rpc.html) +[Wallet RPC Documentation](wallet-rpc.html) + +More coming soon... +
+
+
+
\ No newline at end of file diff --git a/_i18n/template/resources/developer-guides/daemon-rpc.md b/_i18n/template/resources/developer-guides/daemon-rpc.md new file mode 100644 index 00000000..5648536c --- /dev/null +++ b/_i18n/template/resources/developer-guides/daemon-rpc.md @@ -0,0 +1,832 @@ +{% include untranslated.html %} +## Introduction + +This is a list of the monerod daemon RPC calls, their inputs and outputs, and examples of each. + +Many RPC calls use the daemon's JSON RPC interface while others use their own interfaces, as demonstrated below. + +Note: "atomic units" refer to the smallest fraction of 1 XMR according to the monerod implementation. **1 XMR = 1e12 atomic units.** + +### [JSON RPC Methods](#json-rpc-methods): + +* [getblockcount](#getblockcount) +* [on_getblockhash](#on_getblockhash) +* [getblocktemplate](#getblocktemplate) +* [submitblock](#submitblock) +* [getlastblockheader](#getlastblockheader) +* [getblockheaderbyhash](#getblockheaderbyhash) +* [getblockheaderbyheight](#getblockheaderbyheight) +* [getblock](#getblock) +* [get_connections](#get_connections) +* [get_info](#get_info) +* [hard_fork_info](#hard_fork_info) +* [setbans](#setbans) +* [getbans](#getbans) + +### [Other RPC Methods](#other-daemon-rpc-calls): + +* [/getheight](#getheight) +* [/gettransactions](#gettransactions) +* [/is_key_image_spent](#is_key_image_spent) +* [/sendrawtransaction](#sendrawtransaction) +* [/get_transaction_pool](#get_transaction_pool) +* [/stop_daemon](#stop_daemon) + + +--- + +## JSON RPC Methods + +The majority of monerod RPC calls use the daemon's `json_rpc` interface to request various bits of information. These methods all follow a similar structure, for example: + +``` +IP=127.0.0.1 +PORT=18081 +METHOD='getblockheaderbyheight' +PARAMS='{"height":912345}' +curl \ + -X POST http://$IP:$PORT/json_rpc \ + -d '{"jsonrpc":"2.0","id":"0","method":"'$METHOD'","params":'$PARAMS'}' \ + -H 'Content-Type: application/json' +``` + +Some methods include parameters, while others do not. Examples of each JSON RPC method follow. + +### **getblockcount** + +Look up how many blocks are in the longest chain known to the node. + +Inputs: *None*. + +Outputs: + +* *count* - unsigned int; Number of blocks in longest chain seen by the node. +* *status* - string; General RPC error code. "OK" means everything looks good. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblockcount"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "count": 993163, + "status": "OK" + } +} +``` + + +### **on_getblockhash** + +Look up a block's hash by its height. + +Inputs: + +* block height (int array of length 1) + +Outputs: + +* block hash (string) + +Example: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"on_getblockhash","params":[912345]}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": "e22cf75f39ae720e8b71b3d120a5ac03f0db50bba6379e2850975b4859190bc6" +} +``` + + +### **getblocktemplate** + +Inputs: + +* *wallet_address* - string; Address of wallet to receive coinbase transactions if block is successfully mined. +* *reserve_size* - unsigned int; Reserve size. + +Outputs: + +* *blocktemplate_blob* - string; Blob on which to try to mine a new block. +* *difficulty* - unsigned int; Difficulty of next block. +* *height* - unsigned int; Height on which to mine. +* *prev_hash* - string; Hash of the most recent block on which to mine the next block. +* *reserved_offset* - unsigned int; Reserved offset. +* *status* - string; General RPC error code. "OK" means everything looks good. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblocktemplate","params":{"wallet_address":"44GBHzv6ZyQdJkjqZje6KLZ3xSyN1hBSFAnLP6EAqJtCRVzMzZmeXTC2AHKDS9aEDTRKmo6a6o9r9j86pYfhCWDkKjbtcns","reserve_size":60}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "blocktemplate_blob": "01029af88cb70568b84a11dc9406ace9e635918ca03b008f7728b9726b327c1b482a98d81ed83000000000018bd03c01ffcfcf3c0493d7cec7020278dfc296544f139394e5e045fcda1ba2cca5b69b39c9ddc90b7e0de859fdebdc80e8eda1ba01029c5d518ce3cc4de26364059eadc8220a3f52edabdaf025a9bff4eec8b6b50e3d8080dd9da417021e642d07a8c33fbe497054cfea9c760ab4068d31532ff0fbb543a7856a9b78ee80c0f9decfae01023ef3a7182cb0c260732e7828606052a0645d3686d7a03ce3da091dbb2b75e5955f01ad2af83bce0d823bf3dbbed01ab219250eb36098c62cbb6aa2976936848bae53023c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f12d7c87346d6b84e17680082d9b4a1d84e36dd01bd2c7f3b3893478a8d88fb3", + "difficulty": 982540729, + "height": 993231, + "prev_hash": "68b84a11dc9406ace9e635918ca03b008f7728b9726b327c1b482a98d81ed830", + "reserved_offset": 246, + "status": "OK" + } +} +``` + + +### **submitblock** + +Submit a mined block to the network. + +Inputs: + +* Block blob data - string + +Outputs: + +* *status* - string; Block submit status. + + +### **getlastblockheader** + +Block header information for the most recent block is easily retrieved with this method. No inputs are needed. + +Inputs: *None*. + +Outputs: + +* *block_header* - A structure containing block header information. + * *depth* - unsigned int; The number of blocks succeeding this block on the blockchain. A larger number means an older block. + * *difficulty* - unsigned int; The strength of the Monero network based on mining power. + * *hash* - string; The hash of this block. + * *height* - unsigned int; The number of blocks preceding this block on the blockchain. + * *major_version* - unsigned int; The major version of the monero protocol at this block height. + * *minor_version* - unsigned int; The minor version of the monero protocol at this block height. + * *nonce* - unsigned int; a cryptographic random one-time number used in mining a Monero block. + * *orphan_status* - boolean; Usually `false`. If `true`, this block is not part of the longest chain. + * *prev_hash* - string; The hash of the block immediately preceding this block in the chain. + * *reward* - unsigned int; The amount of new atomic units generated in this block and rewarded to the miner. Note: 1 XMR = 1e12 atomic units. + * *timestamp* - unsigned int; The time the block was recorded into the blockchain. +* *status* - string; General RPC error code. "OK" means everything looks good. + +In this example, the most recent block (990793 at the time) is returned: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getlastblockheader"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "block_header": { + "depth": 0, + "difficulty": 746963928, + "hash": "ac0f1e226268d45c99a16202fdcb730d8f7b36ea5e5b4a565b1ba1a8fc252eb0", + "height": 990793, + "major_version": 1, + "minor_version": 1, + "nonce": 1550, + "orphan_status": false, + "prev_hash": "386575e3b0b004ed8d458dbd31bff0fe37b280339937f971e06df33f8589b75c", + "reward": 6856609225169, + "timestamp": 1457589942 + }, + "status": "OK" + } +} +``` + + +### **getblockheaderbyhash** + +Block header information can be retrieved using either a block's hash or height. This method includes a block's hash as an input parameter to retrieve basic information about the block. + +Inputs: + +* *hash* - string; The block's sha256 hash. + +Outputs: + +* *block_header* - A structure containing block header information. See [getlastblockheader](#getlastblockheader). + +In this example, block 912345 is looked up by its hash: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblockheaderbyhash","params":{"hash":"e22cf75f39ae720e8b71b3d120a5ac03f0db50bba6379e2850975b4859190bc6"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "block_header": { + "depth": 78376, + "difficulty": 815625611, + "hash": "e22cf75f39ae720e8b71b3d120a5ac03f0db50bba6379e2850975b4859190bc6", + "height": 912345, + "major_version": 1, + "minor_version": 2, + "nonce": 1646, + "orphan_status": false, + "prev_hash": "b61c58b2e0be53fad5ef9d9731a55e8a81d972b8d90ed07c04fd37ca6403ff78", + "reward": 7388968946286, + "timestamp": 1452793716 + }, + "status": "OK" + } +} +``` + + +### **getblockheaderbyheight** + +Similar to `getblockheaderbyhash` above, this method includes a block's height as an input parameter to retrieve basic information about the block. + +Inputs: + +* *height* - unsigned int; The block's height. + +Outputs: + +* *block_header* - A structure containing block header information. See [getlastblockheader](#getlastblockheader). + +In this example, block 912345 is looked up by its height (notice that the returned information is the save as in the previous example): + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblockheaderbyheight","params":{"height":912345}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "block_header": { + "depth": 78376, + "difficulty": 815625611, + "hash": "e22cf75f39ae720e8b71b3d120a5ac03f0db50bba6379e2850975b4859190bc6", + "height": 912345, + "major_version": 1, + "minor_version": 2, + "nonce": 1646, + "orphan_status": false, + "prev_hash": "b61c58b2e0be53fad5ef9d9731a55e8a81d972b8d90ed07c04fd37ca6403ff78", + "reward": 7388968946286, + "timestamp": 1452793716 + }, + "status": "OK" + } +} +``` + + +### **getblock** + +Full block information can be retrieved by either block height or hash, like with the above block header calls. For full block information, both lookups use the same method, but with different input parameters. + +Inputs (pick one of the following): + +* *height* - unsigned int; The block's height. +* *hash* - string; The block's hash. + +Outputs: + +* *blob* - string; Hexadecimal blob of block information. +* *block_header* - A structure containing block header information. See [getlastblockheader](#getlastblockheader). +* *json* - json string; JSON formatted block details: + * *major_version* - Same as in block header. + * *minor_version* - Same as in block header. + * *timestamp* - Same as in block header. + * *prev_id* - Same as `prev_hash` in block header. + * *nonce* - Same as in block header. + * *miner_tx* - Miner transaction information + * *version* - Transaction version number. + * *unlock_time* - The block height when the coinbase transaction becomes spendable. + * *vin* - List of transaction inputs: + * *gen* - Miner txs are coinbase txs, or "gen". + * *height* - This block height, a.k.a. when the coinbase is generated. + * *vout* - List of transaction outputs. Each output contains: + * *amount* - The amount of the output, in atomic units. + * *target* - + * *key* - + * *extra* - Usually called the "transaction ID" but can be used to include any random 32 byte/64 character hex string. + * *signatures* - Contain signatures of tx signers. Coinbased txs do not have signatures. + * *tx_hashes* - List of hashes of non-coinbase transactions in the block. If there are no other transactions, this will be an empty list. +* *status* - string; General RPC error code. "OK" means everything looks good. + +**Look up by height:** + +In the following example, block 912345 is looked up by its height. Note that block 912345 does not have any non-coinbase transactions. (See the next example for a block with extra transactions): + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblock","params":{"height":912345}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "blob": "...", + "block_header": { + "depth": 80694, + "difficulty": 815625611, + "hash": "e22cf75f39ae720e8b71b3d120a5ac03f0db50bba6379e2850975b4859190bc6", + "height": 912345, + "major_version": 1, + "minor_version": 2, + "nonce": 1646, + "orphan_status": false, + "prev_hash": "b61c58b2e0be53fad5ef9d9731a55e8a81d972b8d90ed07c04fd37ca6403ff78", + "reward": 7388968946286, + "timestamp": 1452793716 + }, + "json": "{\n \"major_version\": 1, \n \"minor_version\": 2, \n \"timestamp\": 1452793716, \n \"prev_id\": \"b61c58b2e0be53fad5ef9d9731a55e8a81d972b8d90ed07c04fd37ca6403ff78\", \n \"nonce\": 1646, \n \"miner_tx\": {\n \"version\": 1, \n \"unlock_time\": 912405, \n \"vin\": [ {\n \"gen\": {\n \"height\": 912345\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 8968946286, \n \"target\": {\n \"key\": \"378b043c1724c92c69d923d266fe86477d3a5ddd21145062e148c64c57677008\"\n }\n }, {\n \"amount\": 80000000000, \n \"target\": {\n \"key\": \"73733cbd6e6218bda671596462a4b062f95cfe5e1dbb5b990dacb30e827d02f2\"\n }\n }, {\n \"amount\": 300000000000, \n \"target\": {\n \"key\": \"47a5dab669770da69a860acde21616a119818e1a489bb3c4b1b6b3c50547bc0c\"\n }\n }, {\n \"amount\": 7000000000000, \n \"target\": {\n \"key\": \"1f7e4762b8b755e3e3c72b8610cc87b9bc25d1f0a87c0c816ebb952e4f8aff3d\"\n }\n }\n ], \n \"extra\": [ 1, 253, 10, 119, 137, 87, 244, 243, 16, 58, 131, 138, 253, 164, 136, 195, 205, 173, 242, 105, 123, 61, 52, 173, 113, 35, 66, 130, 178, 250, 217, 16, 14, 2, 8, 0, 0, 0, 11, 223, 194, 193, 108\n ], \n \"signatures\": [ ]\n }, \n \"tx_hashes\": [ ]\n}", + "status": "OK" + } +} +``` + +**Look up by hash:** + +In the following example, block 993056 is looked up by its hash. Note that block 993056 has 3 non-coinbase transactions: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getblock","params":{"hash":"510ee3c4e14330a7b96e883c323a60ebd1b5556ac1262d0bc03c24a3b785516f"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "blob": "...", + "block_header": { + "depth": 12, + "difficulty": 964985344, + "hash": "510ee3c4e14330a7b96e883c323a60ebd1b5556ac1262d0bc03c24a3b785516f", + "height": 993056, + "major_version": 1, + "minor_version": 2, + "nonce": 2036, + "orphan_status": false, + "prev_hash": "0ea4af6547c05c965afc8df6d31509ff3105dc7ae6b10172521d77e09711fd6d", + "reward": 6932043647005, + "timestamp": 1457720227 + }, + "json": "{\n \"major_version\": 1, \n \"minor_version\": 2, \n \"timestamp\": 1457720227, \n \"prev_id\": \"0ea4af6547c05c965afc8df6d31509ff3105dc7ae6b10172521d77e09711fd6d\", \n \"nonce\": 2036, \n \"miner_tx\": {\n \"version\": 1, \n \"unlock_time\": 993116, \n \"vin\": [ {\n \"gen\": {\n \"height\": 993056\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 2043647005, \n \"target\": {\n \"key\": \"59e9d685b3484886bc7b47c133e6099ecdf212d5eaa16ce19cd58e8c3c1e590a\"\n }\n }, {\n \"amount\": 30000000000, \n \"target\": {\n \"key\": \"4c5e2f542d25513c46b9e3b7d40140a22d0ae5314bfcae492ad9f56fff8185f0\"\n }\n }, {\n \"amount\": 900000000000, \n \"target\": {\n \"key\": \"13dd8ffdac9e6a2f71e327dad65328198dc879a492d145eae72677c0703a3515\"\n }\n }, {\n \"amount\": 6000000000000, \n \"target\": {\n \"key\": \"62bda00341681dccbc066757862da593734395745bdfe1fdc89b5948c86a5d4c\"\n }\n }\n ], \n \"extra\": [ 1, 182, 145, 133, 28, 240, 87, 185, 195, 2, 163, 219, 202, 135, 158, 28, 186, 76, 196, 80, 97, 202, 85, 170, 166, 224, 60, 220, 103, 171, 158, 69, 80, 2, 8, 0, 0, 0, 12, 97, 127, 223, 22\n ], \n \"signatures\": [ ]\n }, \n \"tx_hashes\": [ \"79c6b9f00db027bde151705aafe85c495883aae2597d5cb8e1adb2e0f3ae1d07\", \"d715db73331abc3ec588ef07c7bb195786a4724b08dff431b51ffa32a4ce899b\", \"b197066426c0ed89f0b431fe171f7fd62bc95dd29943daa7cf3585cf1fdfc99d\"\n ]\n}", + "status": "OK", + "tx_hashes": ["79c6b9f00db027bde151705aafe85c495883aae2597d5cb8e1adb2e0f3ae1d07","d715db73331abc3ec588ef07c7bb195786a4724b08dff431b51ffa32a4ce899b","b197066426c0ed89f0b431fe171f7fd62bc95dd29943daa7cf3585cf1fdfc99d"] + } +} +``` + + +### **get_connections** + +Retrieve information about incoming and outgoing connections to your node. + +Inputs: *None*. + +Outputs: + +* *connections* - List of all connections and their info: + * *avg_download* - unsigned int; Average bytes of data downloaded by node. + * *avg_upload* - unsigned int; Average bytes of data uploaded by node. + * *current_download* - unsigned int; Current bytes downloaded by node. + * *current_upload* - unsigned int; Current bytes uploaded by node. + * *incoming* - boolean; Is the node getting information from your node? + * *ip* - string; The node's IP address. + * *live_time* - unsigned int + * *local_ip* - boolean + * *localhost* - boolean + * *peer_id* - string; The node's ID on the network. + * *port* - stringl The port that the node is using to connect to the network. + * *recv_count* - unsigned int + * *recv_idle_time* - unsigned int + * *send_count* - unsigned int + * *send_idle_time* - unsigned int + * *state* - string + +Following is an example of `get_connections` and it's return: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_connections"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "connections": [{ + "avg_download": 0, + "avg_upload": 0, + "current_download": 0, + "current_upload": 0, + "incoming": false, + "ip": "76.173.170.133", + "live_time": 1865, + "local_ip": false, + "localhost": false, + "peer_id": "3bfe29d6b1aa7c4c", + "port": "18080", + "recv_count": 116396, + "recv_idle_time": 23, + "send_count": 176893, + "send_idle_time": 1457726610, + "state": "state_normal" + },{ + ... + }], + "status": "OK" + } +} +``` + + +### **get_info** + +Retrieve general information about the state of your node and the network. + +Inputs: *None*. + +Outputs: + +* *alt_blocks_count* - unsigned int; Number of alternative blocks to main chain. +* *difficulty* - unsigned int; Network difficulty (analogous to the strength of the network) +* *grey_peerlist_size* - unsigned int; Grey Peerlist Size +* *height* - unsigned int; Current length of longest chain known to daemon. +* *incoming_connections_count* - unsigned int; Number of peers connected to and pulling from your node. +* *outgoing_connections_count* - unsigned int; Number of peers that you are connected to and getting information from. +* *status* - string; General RPC error code. "OK" means everything looks good. +* *target* - unsigned int; Current target for next proof of work. +* *target_height* - unsigned int; The height of the next block in the chain. +* *testnet* - boolean; States if the node is on the testnet (true) or mainnet (false). +* *top_block_hash* - string; Hash of the highest block in the chain. +* *tx_count* - unsigned int; Total number of non-coinbase transaction in the chain. +* *tx_pool_siz* - unsigned int; Number of transactions that have been broadcast but not included in a block. +* *white_peerlist_size* - unsigned int; White Peerlist Size + +Following is an example `get_info` call and its return: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_info"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "alt_blocks_count": 5, + "difficulty": 972165250, + "grey_peerlist_size": 2280, + "height": 993145, + "incoming_connections_count": 0, + "outgoing_connections_count": 8, + "status": "OK", + "target": 60, + "target_height": 993137, + "testnet": false, + "top_block_hash": "", + "tx_count": 564287, + "tx_pool_size": 45, + "white_peerlist_size": 529 + } +} +``` + + +### **hard_fork_info** + +Look up information regarding hard fork voting and readiness. + +Inputs: *None*. + +Outputs: + +* *earliest_height* - unsigned int; Block height at which hard fork would be enabled if voted in. +* *enabled* - boolean; Tells if hard fork is enforced. +* *state* - unsigned int; Current hard fork state: 0 (There is likely a hard fork), 1 (An update is needed to fork properly), or 2 (Everything looks good). +* *status* - string; General RPC error code. "OK" means everything looks good. +* *threshold* - unsigned int; Minimum percent of votes to trigger hard fork. Default is 80. +* *version* - unsigned int; The major block version for the fork. +* *votes* - unsigned int; Number of votes towards hard fork. +* *voting* - unsigned int; Hard fork voting status. +* *window* - unsigned int; Number of blocks over which current votes are cast. Default is 10080 blocks. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"hard_fork_info"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "earliest_height": 1009827, + "enabled": false, + "state": 2, + "status": "OK", + "threshold": 0, + "version": 1, + "votes": 7277, + "voting": 2, + "window": 10080 + } +} +``` + + +### **setbans** + +Ban another node by IP. + +Inputs: + +* *bans* - A list of nodes to ban: + * *ip* - unsigned int; IP address to ban, in Int format. + * *ban* - boolean; Set `true` to ban. + * *seconds* - unsigned int; Number of seconds to ban node. + +Outputs: + +* *status* - string; General RPC error code. "OK" means everything looks good. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"setbans","params":{"bans":[{"ip":838969536,"ban":true,"seconds":30}]}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "status": "OK" + } +} +``` + + +### **getbans** + +Inputs: *None*. + +Outputs: + +* *bans* - List of banned nodes: + * *ip* - unsigned int; Banned IP address, in Int format. + * *seconds* - unsigned int; Local Unix time that IP is banned until. +* *status* - string; General RPC error code. "OK" means everything looks good. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getbans"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "bans": [{ + "ip": 838969536, + "seconds": 1457748792 + }], + "status": "OK" + } +} +``` + + +--- + +## Other Daemon RPC Calls + +Not all daemon RPC calls use the JSON_RPC interface. This section gives examples of these calls. + +The data structure for these calls is different than the JSON RPC calls. Whereas the JSON RPC methods were called using the `/json_rpc` extension and specifying a method, these methods are called at their own extensions. For example: + + IP=127.0.0.1 + PORT=18081 + METHOD='gettransactions' + PARAMS='{"txs_hashes":["d6e48158472848e6687173a91ae6eebfa3e1d778e65252ee99d7515d63090408"]}' + curl \ + -X POST http://$IP:$PORT/$METHOD \ + -d $PARAMS \ + -H 'Content-Type: application/json' + +Note: It is recommended to use JSON RPC where such alternatives exist, rather than the following methods. For example, the recommended way to get a node's height is via the JSON RPC methods [get_info](#getinfo) or [getlastblockheader](#getlastblockheader), rather than [getheight](#getheight) below. + + +### **/getheight** + +Get the node's current height. + +Inputs: *None*. + +Outputs: + +* *height* - unsigned int; Current length of longest chain known to daemon. + +``` +$ curl -X POST http://127.0.0.1:18081/getheight -H 'Content-Type: application/json' + +{ + "height": 993488, + "status": "OK" +} +``` + + +### **/gettransactions** + +Look up one or more transactions by hash. + +Inputs: + +* *txs_hashes* - string list; List of transaction hashes to look up. +* *decode_as_json* - boolean; Optional. If set `true`, the returned transaction information will be decoded rather than binary. + +Outputs: + +* *status* - General RPC error code. "OK" means everything looks good. +* *txs_as_hex* - string; Full transaction information as a hex string. +* *txs_as_json* - json string; (Optional - returned if set in inputs.) List of transaction info: + * *version* - Transaction version + * *unlock_time* - If not 0, this tells when a transaction output is spendable. + * *vin* - List of inputs into transaction: + * *key* - The public key of the previous output spent in this transaction. + * *amount* - The amount of the input, in atomic units. + * *key_offsets* - A list of integer offets to the input. + * *k_image* - The key image for the given input + * *vout* - List of outputs from transaction: + * *amount* - Amount of transaction output, in atomic units. + * *target* - Output destination information: + * *key* - The stealth public key of the receiver. Whoever owns the private key associated with this key controls this transaction output. + * *extra* - Usually called the "payment ID" but can be used to include any random 32 bytes. + * *signatures* - List of ignatures used in ring signature to hide the true origin of the transaction. +Example 1: Return transaction information in binary format. + +``` +$ curl -X POST http://127.0.0.1:18081/gettransactions -d '{"txs_hashes":["d6e48158472848e6687173a91ae6eebfa3e1d778e65252ee99d7515d63090408"]}' -H 'Content-Type: application/json' + +{ + "status": "OK", + "txs_as_hex": ["..."] +} +``` + + +Example 2: Decode returned transaction information in JSON format. Note: the "vout" list has been truncated in the displayed return for space considerations. + +``` +$ curl -X POST http://127.0.0.1:18081/gettransactions -d '{"txs_hashes":["d6e48158472848e6687173a91ae6eebfa3e1d778e65252ee99d7515d63090408"],"decode_as_json":true}' -H 'Content-Type: application/json' + +{ + "status": "OK", + "txs_as_hex": ["..."], + "txs_as_json": ["{\n \"version\": 1, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 70000000, \n \"key_offsets\": [ 35952\n ], \n \"k_image\": \"d16908468dff9438a9814fe96bdaa575f06fe8da85772b72e54926428712293d\"\n }\n }, {\n \"key\": {\n \"amount\": 400000000000000, \n \"key_offsets\": [ 6830\n ], \n \"k_image\": \"c7a7024b763df1181ae6fe821b70669735e38a68162ac02362e33acbe829b605\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 50000, \n \"target\": {\n \"key\": \"f6be43f7be4f06adcb1d06f4a07c637c7359e009cf3e57bb32b8c9ea636509c3\"\n }\n }, {\n \"amount\": 200000, \n \"target\": {\n \"key\": \"b0a7a8e32f2b5302552bcd8d85112c62838b1f56cccd844eb9b63e0a732d0353\"\n }\n }, ... \n ], \n \"extra\": [ 1, 225, 240, 98, 34, 169, 73, 47, 237, 117, 192, 30, 192, 60, 155, 47, 4, 115, 20, 21, 11, 13, 252, 219, 129, 13, 174, 37, 36, 78, 191, 141, 109\n ], \n \"signatures\": [ \"e6a3be8003d481d2855c8127f56871de3d28a4fb52385b999eb986c831c5cc08361c126b0db24a21b6c4299b438ee2be201d44d57a371230b9cd04395ab8c400\", \"8309851abaf2cf2a7091e0cdb9c83704fa7d68838a7a8ef8c178bb55a1e93a038dd18bb4a7549dc056b7a70e037cabd80911a03f427e36f712756d4c00f38f0b\"]\n}"] +} +``` + + +### **/is_key_image_spent** + +Check if outputs have been spent using the key image associated with the output. + +Inputs: + +* *key_images* - string list; List of key image hex strings to check. + +Outputs: + +* *spent_status* - unsigned int list; List of statuses for each image checked. Statuses are follows: 0 = unspent, 1 = spent in blockchain, 2 = spent in transaction pool +* *status* - string; General RPC error code. "OK" means everything looks good. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18081/is_key_image_spent -d '{"key_images":["8d1bd8181bf7d857bdb281e0153d84cd55a3fcaa57c3e570f4a49f935850b5e3","7319134bfc50668251f5b899c66b005805ee255c136f0e1cecbb0f3a912e09d4"]}' -H 'Content-Type: application/json' + +{ + "spent_status": [1,2], + "status": "OK" +} +``` + + +### **/sendrawtransaction** + +Broadcast a raw transaction to the network. + +Inputs: + +* *tx_as_hex* - string; Full transaction information as hexidecimal string. + +Outputs: + +* *status* - string; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. +* *double_spend* - boolean; Transaction is a double spend (`true`) or not (`false`). +* *fee_too_low* - boolean; Fee is too low (`true`) or OK (`false`). +* *invalid_input* - boolean; Input is invalid (`true`) or valid (`false`). +* *invalid_output* - boolean; Output is invalid (`true`) or valid (`false`). +* *low_mixin* - boolean; Mixin count is too low (`true`) or OK (`false`). +* *not_rct* - boolean; Transaction is not a ring transaction (`true`) or a ring transaction (`false`). +* *not_relayed* - boolean; Transaction was not relayed (`true`) or relayed (`false`). +* *overspend* - boolean; Transaction uses more money than available (`true`) or not (`false`). +* *reason* - string; Additional information. Currently empty or "Not relayed" if transaction was accepted but not relayed. +* *too_big* - boolean; Transaction size is too big (`true`) or OK (`false`). + + +Example (No return information included here.): + + +``` +$ curl -X POST http://127.0.0.1:18081/sendrawtransaction -d '{"tx_as_hex":"de6a3..."}' -H 'Content-Type: application/json' +``` + + +### **/get_transaction_pool** + +Show information about valid transactions seen by the node but not yet mined into a block, as well as spent key image information in the node's memory. + +Inputs: *None*. + +Outputs: + +* *spent_key_images* - List of spent output key images: + * *id_hash* - string; Key image ID hash. + * *txs_hashes* - string list; Key image transaction hashes. +* *status* - string; General RPC error code. "OK" means everything looks good. +* *transactions* - List of transactions in the mempool that have not been included in a block: + * *blob_size* - unsigned int; The size of the full transaction blob. + * *fee* - unsigned int; The amount of the mining fee included in the transaction, in atomic units. + * *id_hash* - string; The transaction ID hash. + * *kept_by_block* - boolean; We do not accept transactions that timed out before, unless set `true`. + * *last_failed_height* - unsigned int; If the transaction has previously timed out, this tells at what height that occured. + * *last_failed_id_hash* - string; Like the previous, this tells the previous transaction ID hash. + * *max_used_block_height* - unsigned int; Tells the height of the most recent block with an output used in this transaction. + * *max_used_block_hash* - string; Tells the hash of the most recent block with an output used in this transaction. + * *receive_time* - unsigned int; The Unix time that the transaction was first seen on the network by the node. + * *tx_json* - json string; JSON structure of all information in the transaction: + * *version* - Transaction version + * *unlock_time* - If not 0, this tells when a transaction output is spendable. + * *vin* - List of inputs into transaction: + * *key* - The public key of the previous output spent in this transaction. + * *amount* - The amount of the input, in atomic units. + * *key_offsets* - A list of integer offets to the input. + * *k_image* - The key image for the given input + * *vout* - List of outputs from transaction: + * *amount* - Amount of transaction output, in atomic units. + * *target* - Output destination information: + * *key* - The stealth public key of the receiver. Whoever owns the private key associated with this key controls this transaction output. + * *extra* - Usually called the "transaction ID" but can be used to include any random 32 bytes. + * *signatures* - List of ignatures used in ring signature to hide the true origin of the transaction. + +Example (Note: Some lists in the returned information have been truncated for display reasons): + +``` +$ curl -X POST http://127.0.0.1:18081/get_transaction_pool -H 'Content-Type: application/json' + +{ + "spent_key_images": [{ + "id_hash": "1edb9ecc39602040282d326070ad22cb473c952c0d6280c9c4c3b853fb34f3bc", + "txs_hashes": ["409911b2be02e3f0e930b326c67ab9e74675885ce23d71bb3bd28b62bc3e7803"] + },{ + "id_hash": "4adb4bb63b3397027340ca4e6c45f4ce2147dfb3a4e0fafdec18834ae594a05e", + "txs_hashes": ["946f1f4c52e3426a41959c93b60078f314813bc4bdebcf69b8ee11d593b2bd14"] + }, + ...], + "status": "OK", + "transactions": [{ + "blob_size": 25761, + "fee": 290000000000, + "id_hash": "11d4cff23e610fac6a2b89187ad61d429a5e226652693dcac5d83d506eb92b96", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "max_used_block_height": 954508, + "max_used_block_id_hash": "03f96b374778bc059e47b96e2beec2e6d4d9e0ad39afeabdbcd77e1bd5a62f81", + "receive_time": 1457676127, + "tx_json": "{\n \"version\": 1, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 70000000000, \n \"key_offsets\": [ 63408, 18978, 78357, 16560\n ], \n \"k_image\": \"7319134bfc50668251f5b899c66b005805ee255c136f0e1cecbb0f3a912e09d4\"\n }\n }, ... ], \n \"vout\": [ {\n \"amount\": 80000000000, \n \"target\": {\n \"key\": \"094e6a1b187385533665f89db741149f42d95fdc50bdd2a2384bcd1dc5209c55\"\n }\n }, ... ], \n \"extra\": [ 2, 33, 0, 15, 56, 190, 21, 169, 77, 13, 182, 209, 51, 35, 54, 96, 89, 237, 96, 23, 24, 107, 240, 79, 40, 86, 64, 68, 45, 166, 119, 192, 17, 225, 23, 1, 31, 159, 145, 15, 173, 255, 165, 192, 55, 84, 127, 154, 163, 25, 85, 204, 212, 127, 147, 133, 118, 218, 166, 52, 78, 188, 131, 235, 9, 159, 105, 158\n ], \n \"signatures\": [ \"966e5a67fbdbf72d7dc0364b705121a58e0ced7e2ab45747b6b154c05a1afe04fac4aac7f64faa2dc6dd4d51b8277f11e2f2ec7729fac225088befe3b8399c0b71a4cb55b9d0e20f93d305c78cebceff1bcfcfaf225428dfcfaaec630c88720ab65bf5d3399dd1ac82ea0ecf308b3f80d9780af7742fb157692cd60515a7e2086878f082117fa80fff3d257de7d3a2e9cc8b3472ef4a5e545d90e1159523a60f38d16cece783579627124776813334bdb2a2df4171ef1fa12bf415da338ce5085c01e7a715638ef5505aebec06a0625aaa72d13839838f7d4f981673c8f05f08408e8b372f900af7227c49cfb1e1febab6c07dd42b7c26f921cf010832841205\", ... ]\n}" + }, + ...] +} +``` + + +### **/stop_daemon** + +Send a command to the daemon to safely disconnect and shut down. + +Inputs: *None*. + +Outputs: + +* *status* - string; General RPC error code. "OK" means everything looks good. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18081/stop_daemon -H 'Content-Type: application/json' + +{ + "status": "OK" +} +``` \ No newline at end of file diff --git a/_i18n/template/resources/developer-guides/wallet-rpc.md b/_i18n/template/resources/developer-guides/wallet-rpc.md new file mode 100644 index 00000000..59776a56 --- /dev/null +++ b/_i18n/template/resources/developer-guides/wallet-rpc.md @@ -0,0 +1,1216 @@ +{% include untranslated.html %} +## Introduction + +This is a list of the monero-wallet-rpc calls, their inputs and outputs, and examples of each. The program monero-wallet-rpc replaced the rpc interface that was in simplewallet and then monero-wallet-cli. + +All monero-wallet-rpc methods use the same JSON RPC interface. For example: + +``` +IP=127.0.0.1 +PORT=18082 +METHOD="make_integrated_address" +PARAMS="{\"payment_id\":\"1234567890123456789012345678900012345678901234567890123456789000\"}" +curl \ + -X POST http://$IP:$PORT/json_rpc \ + -d '{"jsonrpc":"2.0","id":"0","method":"'$METHOD'","params":'"$PARAMS"'}' \ + -H 'Content-Type: application/json' +``` + +If the monero-wallet-rpc was executed with the `--rpc-login` argument as `username:password`, then follow this example: + +``` +IP=127.0.0.1 +PORT=18082 +METHOD="make_integrated_address" +PARAMS="{\"payment_id\":\"1234567890123456789012345678900012345678901234567890123456789000\"}" +curl \ + -u username:password --digest \ + -X POST http://$IP:$PORT/json_rpc \ + -d '{"jsonrpc":"2.0","id":"0","method":"'$METHOD'","params":'"$PARAMS"'}' \ + -H 'Content-Type: application/json' +``` + +Note: "atomic units" refer to the smallest fraction of 1 XMR according to the monerod implementation. **1 XMR = 1e12 atomic units.** + +### Index of JSON RPC Methods: + +* [getbalance](#getbalance) +* [getaddress](#getaddress) +* [getheight](#getheight) +* [transfer](#transfer) +* [transfer_split](#transfer_split) +* [sweep_dust](#sweep_dust) +* [sweep_all](#sweep_all) +* [store](#store) +* [get_payments](#get_payments) +* [get_bulk_payments](#get_bulk_payments) +* [get_transfers](#get_transfers) +* [get_transfer_by_txid](#get_transfer_by_txid) +* [incoming_transfers](#incoming_transfers) +* [query_key](#query_key) +* [make_integrated_address](#make_integrated_address) +* [split_integrated_address](#split_integrated_address) +* [stop_wallet](#stop_wallet) +* [make_uri](#make_uri) +* [parse_uri](#parse_uri) +* [rescan_blockchain](#rescan_blockchain) +* [set_tx_notes](#set_tx_notes) +* [get_tx_notes](#get_tx_notes) +* [sign](#sign) +* [verify](#verify) +* [export_key_images](#export_key_images) +* [import_key_images](#import_key_images) +* [get_address_book](#get_address_book) +* [add_address_book](#add_address_book) +* [delete_address_book](#delete_address_book) +* [rescan_spent](#rescan_spent) +* [start_mining](#start_mining) +* [stop_mining](#stop_mining) +* [get_languages](#get_languages) +* [create_wallet](#create_wallet) +* [open_wallet](#open_wallet) + +--- + +## JSON RPC Methods: + +### **getbalance** + +Return the wallet's balance. + +Inputs: *None*. + +Outputs: + +* *balance* - unsigned int; The total balance of the current monero-wallet-rpc in session. +* *unlocked_balance* - unsigned int; Unlocked funds are those funds that are sufficiently deep enough in the Monero blockchain to be considered safe to spend. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getbalance"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "balance": 140000000000, + "unlocked_balance": 50000000000 + } +} +``` + + +### **getaddress** + +Return the wallet's address. + +Inputs: *None*. + +Outputs: + +* *address* - string; The 95-character hex address string of the monero-wallet-rpc in session. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getaddress"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "address": "427ZuEhNJQRXoyJAeEoBaNW56ScQaLXyyQWgxeRL9KgAUhVzkvfiELZV7fCPBuuB2CGuJiWFQjhnhhwiH1FsHYGQGaDsaBA" + } +} +``` + + +### **getheight** + +Returns the wallet's current block height. + +Inputs: *None*. + +Outputs: + +* *height* - unsigned int; The current monero-wallet-rpc's blockchain height. If the wallet has been offline for a long time, it may need to catch up with the daemon. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getheight"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "height": 994310 + } +} +``` + + +### **transfer** + +Send monero to a number of recipients. + +Inputs: + +* *destinations* - array of destinations to receive XMR: + * *amount* - unsigned int; Amount to send to each destination, in atomic units. + * *address* - string; Destination public address. +* *fee* - unsigned int; Ignored, will be automatically calculated. +* *mixin* - unsigned int; Number of outpouts from the blockchain to mix with (0 means no mixing). +* *unlock_time* - unsigned int; Number of blocks before the monero can be spent (0 to not add a lock). +* *payment_id* - string; (Optional) Random 32-byte/64-character hex string to identify a transaction. +* *get_tx_key* - boolean; (Optional) Return the transaction key after sending. +* *priority* - unsigned int; Set a priority for the transaction. Accepted Values are: 0-3 for: default, unimportant, normal, elevated, priority. +* *do_not_relay* - boolean; (Optional) If true, the newly created transaction will not be relayed to the monero network. (Defaults to false) +* *get_tx_hex* - boolean; Return the transaction as hex string after sending + + +Outputs: + +* *fee* - Integer value of the fee charged for the txn. +* *tx_hash* - String for the publically searchable transaction hash +* *tx_key* - String for the transaction key if get_tx_key is true, otherwise, blank string. +* *tx_blob* - Transaction as hex string if get_tx_hex is true + + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer","params":{"destinations":[{"amount":100000000,"address":"9wNgSYy2F9qPZu7KBjvsFgZLTKE2TZgEpNFbGka9gA5zPmAXS35QzzYaLKJRkYTnzgArGNX7TvSqZC87tBLwtaC5RQgJ8rm"},{"amount":200000000,"address":"9vH5D7Fv47mbpCpdcthcjU34rqiiAYRCh1tYywmhqnEk9iwCE9yppgNCXAyVHG5qJt2kExa42TuhzQfJbmbpeGLkVbg8xit"}],"mixin":4,"get_tx_key": true}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "fee": 48958481211, + "tx_hash": "985180f468637bc6d2f72ee054e1e34b8d5097988bb29a2e0cb763e4464db23c", + "tx_key": "8d62e5637f1fcc9a8904057d6bed6c697618507b193e956f77c31ce662b2ee07" + } +} +``` + + +### **transfer_split** + +Same as transfer, but can split into more than one tx if necessary. + +Inputs: + +* *destinations* - array of destinations to receive XMR: + * *amount* - unsigned int; Amount to send to each destination, in atomic units. + * *address* - string; Destination public address. +* *fee* - unsigned int; Ignored, will be automatically calculated. +* *mixin* - unsigned int; Number of outpouts from the blockchain to mix with (0 means no mixing). +* *unlock_time* - unsigned int; Number of blocks before the monero can be spent (0 to not add a lock). +* *payment_id* - string; (Optional) Random 32-byte/64-character hex string to identify a transaction. +* *get_tx_keys* - boolean; (Optional) Return the transaction keys after sending. -- Ignored +* *priority* - unsigned int; Set a priority for the transactions. Accepted Values are: 0-3 for: default, unimportant, normal, elevated, priority. +* *do_not_relay* - boolean; (Optional) If true, the newly created transaction will not be relayed to the monero network. (Defaults to false) +* *get_tx_hex* - boolean; Return the transactions as hex string after sending +* *new_algorithm* - boolean; True to use the new transaction construction algorithm, defaults to false. + +Outputs: + +* *fee_list* - array of: integer. The amount of fees paid for every transaction. +* *tx_hash_list* - array of: string. The tx hashes of every transaction. +* *tx_blob_list* - array of: string. The tx as hex string for every transaction. +* *amount_list* - array of: integer. The amount transferred for every transaction.. +* *tx_key_list* - array of: string. The transaction keys for every transaction. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer_split","params":{"destinations":[{"amount":100000000,"address":"9wNgSYy2F9qPZu7KBjvsFgZLTKE2TZgEpNFbGka9gA5zPmAXS35QzzYaLKJRkYTnzgArGNX7TvSqZC87tBwtaC5RQgJ8rm"},{"amount":200000000,"address":"9vH5D7Fv47mbpCpdcthcjU34rqiiAYRCh1tYywmhqnEk9iwCE9yppgNCXAyVHG5qJt2kExa42TuhzQfJbmbpeGLkVbg8xit"},{"amount":200000000,"address":"9vC5Q25cR1d3WzKX6dpTaLJaqZyDrtTnfadTmVuB1Wue2tyFGxUhiE4RGa74pEDJv7gSySzcd1Ao6G1nzSaqp78vLfP6MPj"},{"amount":200000000,"address":"A2MSrn49ziBPJBh8ZNEhhbfyLMou6mao4C1F5TLGUatmUnCxZArDYkcbAnVkVEopWVeak2rKDrmc8JpoS7n5dvfN9YDPBTG"},{"amount":200000000,"address":"9tEDyVQ8zgRQbDYiykTdpw5kZ6qWQWcKfExEj9eQshjpGb3sdr3UyWE2AHWzUGzJjaH9HN1DdGBdyQQ4AqGMc7rr5xYwZWW"}],"mixin":4,"get_tx_key": true, "new_algorithm": true}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "fee_list": [97916962422], + "tx_hash_list": ["c5c389846e701c27aaf1f7ab8b9dc457b471fcea5bc9710e8020d51275afbc54"] + } +} +``` + + +### **sweep_dust** + +Send all dust outputs back to the wallet's, to make them easier to spend (and mix). + +Inputs: *None*. + +Outputs: + +* *tx_hash_list* - list of: string + +Example (In this example, `sweep_dust` returns an error due to insufficient funds to sweep): + + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sweep_dust"}' -H 'Content-Type: application/json' + +{ + "error": { + "code": -4, + "message": "not enough money" + }, + "id": "0", + "jsonrpc": "2.0" +} +``` + +### **sweep_all** + +Send all unlocked balance to an address. + +Inputs: + +* *address* - string; Destination public address. +* *priority* - unsigned int; (Optional) +* *mixin* - unsigned int; Number of outpouts from the blockchain to mix with (0 means no mixing). +* *unlock_time* - unsigned int; Number of blocks before the monero can be spent (0 to not add a lock). +* *payment_id* - string; (Optional) Random 32-byte/64-character hex string to identify a transaction. +* *get_tx_keys* - boolean; (Optional) Return the transaction keys after sending. +* *below_amount* - unsigned int; (Optional) +* *do_not_relay* - boolean; (Optional) +* *get_tx_hex* - boolean; (Optional) return the transactions as hex encoded string. + +Outputs: + +* *tx_hash_list* - array of string; +* *tx_key_list* - array of string; +* *tx_blob_list* - array of string; + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sweep_all","params":{"address":"9sS8eRU2b5ZbN2FPSrpkiab1bjbHE5XtL6Ti6We3Fhw5aQPudRfVVypjgzKDNkxtvTQSPs122NKggb2mqcqkKSeMNVu59S","mixin":2,"unlock_time":0,"get_tx_keys":true}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "tx_hash_list": ["53a3648797d5524dd037d4105e067fa61468faecab41927fc43adbb26c202d22"], + "tx_key_list": ["e83b3b78235e36cd7e4d9695efd81a3b3e64c7d1f1ebd61892f0a7add6a50301"] + } +} +``` + +### **store** + +Save the blockchain. + +Inputs: *None*. + +Outputs: *None*. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"store"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` + + +### **get_payments** + +Get a list of incoming payments using a given payment id. + +Inputs: + +* *payment_id* - string + +Outputs: + +* *payments* - list of: + * *payment_id* - string + * *tx_hash* - string + * *amount* - unsigned int + * *block_height* - unsigned int + * *unlock_time* - unsigned int + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_payments","params":{"payment_id":"4279257e0a20608e25dba8744949c9e1caff4fcdafc7d5362ecf14225f3d9030"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "payments": [{ + "amount": 10350000000000, + "block_height": 994327, + "payment_id": "4279257e0a20608e25dba8744949c9e1caff4fcdafc7d5362ecf14225f3d9030", + "tx_hash": "c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1", + "unlock_time": 0 + }] + } +} +``` + + +### **get_bulk_payments** + +Get a list of incoming payments using a given payment id, or a list of payments ids, from a given height. This method is the preferred method over `get_payments` because it has the same functionality but is more extendable. Either is fine for looking up transactions by a single payment ID. + +Inputs: + +* *payment_ids* - array of: string + * *min_block_height* - unsigned int; The block height at which to start looking for payments. + +Outputs: + +* *payments* - list of: + * *payment_id* - string + * *tx_hash* - string + * *amount* - unsigned int + * *block_height* - unsigned int + * *unlock_time* - unsigned int + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_bulk_payments","params":{"payment_ids":["4279257e0a20608e25dba8744949c9e1caff4fcdafc7d5362ecf14225f3d9030"],"min_block_height":990000}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "payments": [{ + "amount": 10350000000000, + "block_height": 994327, + "payment_id": "4279257e0a20608e25dba8744949c9e1caff4fcdafc7d5362ecf14225f3d9030", + "tx_hash": "c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1", + "unlock_time": 0 + }] + } +} +``` + + +### **get_transfers** + +Returns a list of transfers. + +Inputs: + +* *in* - boolean; +* *out* - boolean; +* *pending* - boolean; +* *failed* - boolean; +* *pool* - boolean; +* *filter_by_height* - boolean; +* *min_height* - unsigned int; +* *max_height* - unsigned int; + +Outputs: + +* *in* array of transfers: + * *txid* - string; + * *payment_id* - string; + * *height* - unsigned int; + * *timestamp* - unsigned int; + * *amount* - unsigned int; + * *fee* - unsigned int; + * *note* - string; + * *destinations* - std::list; + * *type* - string; +* *out* array of transfers +* *pending* array of transfers +* *failed* array of transfers +* *pool* array of transfers + + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_transfers","params":{"pool":true}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "pool": [{ + "amount": 500000000000, + "fee": 0, + "height": 0, + "note": "", + "payment_id": "758d9b225fda7b7f", + "timestamp": 1488312467, + "txid": "da7301d5423efa09fabacb720002e978d114ff2db6a1546f8b820644a1b96208", + "type": "pool" + }] + } +} +``` + +### **get_transfer_by_txid** + +Show information about a transfer to/from this address. + +Inputs: + +* *txid* - string + +Outputs: + +* *transfer* - JSON object containing parment information: + * *amount* - unsigned int + * *fee* - unsigned int + * *height* - unsigned int + * *note* - string + * *payment_id* - string + * *timestamp* - unsigned int + * *txid* - string + * *type* - string + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_transfer_by_txid","params":{"txid":"f2d33ba969a09941c6671e6dfe7e9456e5f686eca72c1a94a3e63ac6d7f27baf"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "transfer": { + "amount": 10000000000000, + "fee": 0, + "height": 1316388, + "note": "", + "payment_id": "0000000000000000", + "timestamp": 1495539310, + "txid": "f2d33ba969a09941c6671e6dfe7e9456e5f686eca72c1a94a3e63ac6d7f27baf", + "type": "in" + } + } +} +``` + + +### **incoming_transfers** + +Return a list of incoming transfers to the wallet. + +Inputs: + +* *transfer_type* - string; "all": all the transfers, "available": only transfers which are not yet spent, OR "unavailable": only transfers which are already spent. + +Outputs: + +* *transfers* - list of: + * *amount* - unsigned int + * *spent* - boolean + * *global_index* - unsigned int; Mostly internal use, can be ignored by most users. + * *tx_hash* - string; Several incoming transfers may share the same hash if they were in the same transaction. + * *tx_size* - unsigned int + +Example (Return "all" transaction types): + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"all"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "transfers": [{ + "amount": 10000000000000, + "global_index": 711506, + "spent": false, + "tx_hash": "<c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1>", + "tx_size": 5870 + },{ + "amount": 300000000000, + "global_index": 794232, + "spent": false, + "tx_hash": "<c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1>", + "tx_size": 5870 + },{ + "amount": 50000000000, + "global_index": 213659, + "spent": false, + "tx_hash": "<c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1>", + "tx_size": 5870 + }] + } +} +``` + +Example (Return "available" transactions): + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"available"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "transfers": [{ + "amount": 10000000000000, + "global_index": 711506, + "spent": false, + "tx_hash": "<c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1>", + "tx_size": 5870 + },{ + "amount": 300000000000, + "global_index": 794232, + "spent": false, + "tx_hash": "<c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1>", + "tx_size": 5870 + },{ + "amount": 50000000000, + "global_index": 213659, + "spent": false, + "tx_hash": "<c391089f5b1b02067acc15294e3629a463412af1f1ed0f354113dd4467e4f6c1>", + "tx_size": 5870 + }] + } +} +``` + +Example (Return "unavailable" transaction. Note that this particular example returns 0 unavailable transactions): + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"incoming_transfers","params":{"transfer_type":"unavailable"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` + + +### **query_key** + +Return the spend or view private key. + +Inputs: + +* *key_type* - string; Which key to retrieve: "mnemonic" - the mnemonic seed (older wallets do not have one) OR "view_key" - the view key + +Outputs: + +* *key* - string; The view key will be hex encoded, while the mnemonic will be a string of words. + +Example (Query view key): + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"query_key","params":{"key_type":"view_key"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "key": "7e341d..." + } +} +``` + +Example (Query mnemonic key): + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"query_key","params":{"key_type":"mnemonic"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "key": "adapt adapt nostril ..." + } +} +``` + + +### **make_integrated_address** + +Make an integrated address from the wallet address and a payment id. + +Inputs: + +* *payment_id* - string; hex encoded; can be empty, in which case a random payment id is generated + +Outputs: + +* *integrated_address* - string + +Example (Payment ID is empty, use a random ID): + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"make_integrated_address","params":{"payment_id":""}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "integrated_address": "4BpEv3WrufwXoyJAeEoBaNW56ScQaLXyyQWgxeRL9KgAUhVzkvfiELZV7fCPBuuB2CGuJiWFQjhnhhwiH1FsHYGQQ8H2RRJveAtUeiFs6J" + } +} +``` + + +### **split_integrated_address** + +Retrieve the standard address and payment id corresponding to an integrated address. + +Inputs: + +* *integrated_address* - string + +Outputs: + +* *standard_address* - string +* *payment* - string; hex encoded + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"split_integrated_address","params":{"integrated_address": "4BpEv3WrufwXoyJAeEoBaNW56ScQaLXyyQWgxeRL9KgAUhVzkvfiELZV7fCPBuuB2CGuJiWFQjhnhhwiH1FsHYGQQ8H2RRJveAtUeiFs6J"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "payment_id": "<420fa29b2d9a49f5>", + "standard_address": "427ZuEhNJQRXoyJAeEoBaNW56ScQaLXyyQWgxeRL9KgAUhVzkvfiELZV7fCPBuuB2CGuJiWFQjhnhhwiH1FsHYGQGaDsaBA" + } +} +``` + + +### **stop_wallet** + +Stops the wallet, storing the current state. + +Inputs: *None*. + +Outputs: *None*. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"stop_wallet"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` + + +### **make_uri** + +Create a payment URI using the official URI spec. + +Inputs: + +* *address* - wallet address string +* *amount* (optional) - the integer amount to receive, in **atomic** units +* *payment_id* (optional) - 16 or 64 character hexadecimal payment id string +* *recipient_name* (optional) - string name of the payment recipient +* *tx_description* (optional) - string describing the reason for the tx + +Outputs: + +* *uri* - a string containing all the payment input information as a properly formatted payment URI + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"make_uri","params":{"address":"44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A","amount":10,"payment_id":"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef","tx_description":"Testing out the make_uri function.","recipient_name":"Monero Project donation address"}}' -H 'Content-Type: application/json' + +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "uri": "monero:44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A?tx_payment_id=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&tx_amount=0.000000000010&recipient_name=Monero%20Project%20donation%20address&tx_description=Testing%20out%20the%20make_uri%20function." + } +} +``` + + +### **parse_uri** + +Parse a payment URI to get payment information. + +Inputs: + +* *uri* - a string containing all the payment input information as a properly formatted payment URI + +Outputs: + +* *uri* - JSON object containing payment information: + * *address* - wallet address string + * *amount* - the decimal amount to receive, in **coin** units (0 if not provided) + * *payment_id* - 16 or 64 character hexadecimal payment id string (empty if not provided) + * *recipient_name* - string name of the payment recipient (empty if not provided) + * *tx_description* - string describing the reason for the tx (empty if not provided) + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"parse_uri","params":{"uri":"monero:44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A?tx_payment_id=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&tx_amount=0.000000000010&recipient_name=Monero%20Project%20donation%20address&tx_description=Testing%20out%20the%20make_uri%20function."}}' -H 'Content-Type: application/json' + +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "uri": { + "address": "44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A", + "amount": 10, + "payment_id": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + "recipient_name": "Monero Project donation address", + "tx_description": "Testing out the make_uri function." + } + } +} +``` + + +### **rescan_blockchain** + +Rescan blockchain from scratch. + +Inputs: *None*. + +Outputs: *None*. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"rescan_blockchain" -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` + + +### **set_tx_notes** + +Set arbitrary string notes for transactions. + +Inputs: + +* *txids* - array of string; transaction ids +* *notes* - array of string; notes for the transactions + +Outputs: *None*. + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"set_tx_notes","params":{"txids":["6a1a100c079c236e2cbf36f7760e8ef1a9e8357c434aa790a8c78de653ec4cf2"],"notes":["This is an example"]}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` + + +### **get_tx_notes** + +Get string notes for transactions. + +Inputs: + +* *txids* - array of string; transaction ids + +Outputs: + +* *notes* - array of string; notes for the transactions + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_tx_notes","params":{"txids":["6a1a100c079c236e2cbf36f7760e8ef1a9e8357c434aa790a8c78de653ec4cf2"]}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "notes": ["This is an example"] + } +} +``` + + +### **sign** + +Sign a string. + +Inputs: + +* *data* - string; + +Outputs: + +* *signature* - string; + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"sign","params":{"data":"This is sample data to be signed"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "signature": "SigV1Xp61ZkGguxSCHpkYEVw9eaWfRfSoAf36PCsSCApx4DUrKWHEqM9CdNwjeuhJii6LHDVDFxvTPijFsj3L8NDQp1TV" + } +} +``` + + +### **verify** + +Verify a signature on a string. + +Inputs: + +* *data* - string; +* *address* - string; +* *signature* - string; + +Outputs: + +* *good* - boolean; + +Example: + +``` +$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"verify","params":{"data":"This is sample data to be signed","address":"9sS8eRU2b5ZbN2FPSrpkiab1bjbHE5XtL6Ti6We3Fhw5aQPudRfVVypjgzKDNkxtvTQZSPs122NKggb2mqcqkKSeMNVu59S","signature":"SigV1Xp61ZkGguxSCHpkYEVw9eaWfRfSoAf36PCsSCApx4DUrKWHEqM9CdNwjeuhJii6LHDVDFxvTPijFsj3L8NDQp1TV"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "good": true + } +} +``` + + +### **export_key_images** + +Export a signed set of key images. + +Inputs: *None*. + +Outputs: + +* *signed_key_images* - array of signed key images: + * *key_image* - string; + * *signature* - string; + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"export_key_images"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "signed_key_images": [{ + "key_image": "62b83df78baad99e23b5ad3f667bc6f8d388a13d9e84c7bb6c223a556dfd34af", + "signature": "b87b7e989aa85aa3a2a7cd8adcb3a848d3512ff718b168e15217ff3e5da29c0183c0328b97cc052fcb5ee3548aa5e41e530ba9d854199ea19d7ddaf6a54a4c0a" + }] + } +} +``` + + +### **import_key_images** + +Import signed key images list and verify their spent status. + +Inputs: + +* *signed_key_images* - array of signed key images: + * *key_image* - string; + * *signature* - string; + +Outputs: + +* *height* - unsigned int; +* *spent* - unsigned int; +* *unspent* - unsigned int; + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"import_key_images", "params":{"signed_key_images":[{"key_image":"63b83df78cafd99e23b5ad3f667bc6f8d38813d9e84c7bb6c223a556dfd34af","signature":"b87b7e989aa86aa2a7a7cd8adcb3a848d3512ff718b168e15217ff3e5da29c0183c0328b97cc052fcb5ee3548aa5e41e530ba9d854199ea19d7ddaf6a54a4c0a"},{"key_image":"44ec12fbc56c533a30b09de8ae26febd515528c4957dfe875430377a7e212b4e","signature":"91105f15be0b25bc2a94bd78a7e261608974d6d888080b9f1815655b98af190340325ea1a0840a5951dacf913d4de1b2bd33ea59c1cb7bce1b6648afa7133d03"}]}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "height": 986050, + "spent": 10000100000000, + "unspent": 4979852760000 + } +} +``` + + +### **get_address_book** + +Retrieves entries from the address book. + +Inputs: + +* *entries* - array of unsigned int; indices of the requested address book entries + +Outputs: + +* *entries* - array of entries: + * *address* - string; + * *description* - string; + * *index* - unsigned int; + * *payment_id* - string; + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_address_book","params":{"entries":[1,2]}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "entries": [{ + "address": "A135xq3GVMdU5qtAm4hN7zjPgz8bRaiSUQmtuDdjZ6CgXayvQruJy3WPe95qj873JhK4YdTQjoR39Leg6esznQk8PckhjRN", + "description": "", + "index": 1, + "payment_id": "0000000000000000000000000000000000000000000000000000000000000000" + },{ + "address": "A135xq3GVMdU5qtAm4hN7zjPgz8bRaiSUQmtuDdjZ6CgXayvQruJy3WPe95qj873JhK4YdTQjoR39Leg6esznQk8PckhjRN", + "description": "", + "index": 2, + "payment_id": "0000000000000000000000000000000000000000000000000000000000000000" + }] + } +} +``` + + +### **add_address_book** + +Add an entry to the address book. + +Inputs: + +* *address* - string; +* *payment_id* - (optional) string, defaults to "0000000000000000000000000000000000000000000000000000000000000000"; +* *description* - (optional) string, defaults to ""; + +Outputs: + +* *index* - unsigned int; The index of the address book entry. + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"add_address_book","params":{"address":"44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A","description":"Donation address for the Monero project"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "index": 2 + } +} +``` + + +### **delete_address_book** + +Delete an entry from the address book. + +Inputs: + +* *index* - unsigned int; The index of the address book entry. + +Outputs: *None*. + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"delete_address_book","params":{"index":0}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` + + +### **rescan_spent** + +Rescan the blockchain for spent outputs. + +Inputs: *None*. + +Outputs: *None*. + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"rescan_spent"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` + + +### **start_mining** + +Start mining in the Monero daemon. + +Inputs: + +* *threads_count* - unsigned int; Number of threads created for mining +* *do_background_mining* - boolean; +* *ignore_battery* - boolean; + +Outputs: *None*. + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"start_mining","params":{"threads_count":1,"do_background_mining":true,"ignore_battery":true}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` + + +### **stop_mining** + +Stop mining in the Monero daemon. + +Inputs: *None*. + +Outputs: *None*. + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"stop_mining"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` + + +### **get_languages** + +Get a list of available languages for your wallet's seed. + +Inputs: *None*. + +Outputs: + +* *languages* - array of string; List of available languages + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_languages"}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "languages": ["Deutsch","English","Español","Français","Italiano","Nederlands","Português","русский язык","日本語","简体中文 (中国)","Esperanto"] + } +} +``` + + +### **create_wallet** + +Create a new wallet. You need to have set the argument "--wallet-dir" when launching monero-wallet-rpc to make this work. + +Inputs: + +* *filename* - string; +* *password* - string; +* *language* - string; Language for your wallets' seed. + +Outputs: *None*. + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"create_wallet","params":{"filename":"mytestwallet","password":"mytestpassword","language":"English"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` + + +### **open_wallet** + +Open a wallet. You need to have set the argument "--wallet-dir" when launching monero-wallet-rpc to make this work. + +Inputs: + +* *filename* - string; +* *password* - string; + +Outputs: *None*. + +Example: + +``` +$ curl -X POST http://localhost:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"open_wallet","params":{"filename":"mytestwallet","password":"mytestpassword"}}' -H 'Content-Type: application/json' + +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + } +} +``` diff --git a/_i18n/template/resources/moneropedia/00-base-00 b/_i18n/template/resources/moneropedia/00-base-00 new file mode 100644 index 00000000..ccfa1781 --- /dev/null +++ b/_i18n/template/resources/moneropedia/00-base-00 @@ -0,0 +1,10 @@ +--- +layout: moneropedia +entry: "" +terms: ["", ""] +summary: "" +--- + +### The Basics + +{{ page.summary | capitalize }}. \ No newline at end of file diff --git a/_i18n/template/resources/moneropedia/account.md b/_i18n/template/resources/moneropedia/account.md new file mode 100644 index 00000000..8014c8ee --- /dev/null +++ b/_i18n/template/resources/moneropedia/account.md @@ -0,0 +1,82 @@ +--- +layout: moneropedia +entry: "Account" +terms: ["account", "accounts", "wallet", "wallets"] +summary: "similar in function to a bank account, contains all of your sent and received transactions" +--- + +### The Basics + +Those familiar with Monero's predecessors will be more familiar with the term *wallet* to describe this. In Monero we call this an account, and it is a private account owned and operated by a Monero user. + +Your account contains all of the Monero @transactions you have sent and received. Your account balance is a sum of all the Monero you've received, less the Monero you've sent. When using Monero you may notice that your account has two balances, a locked and an unlocked balance. The unlocked balance contains funds that can be spent immediately, and the locked balance contains funds that you can't spend right now. You may receive a transaction that has an @unlock-time set, or you may have sent some Monero and are waiting for the @change to come back to your wallet, both situations that could lead to those funds being locked for a time. + +A key difference between traditional electronic currency and Monero is that your account resides only under your control, normally on your computer, and cannot be accessed by anyone else if you [practice good security](#practicing-good-security). + +### Multiple Accounts + +There are no costs attached to creating a Monero account, and there are no fees charged except for individual @transaction fees that go to @miners. + +This means that individuals can easily create a Monero account for themselves as well as a joint account to share with their partner, and individual accounts for their children. Similarly, a business could create separate accounts for each division or group. Since Monero's @transaction fees are quite low, moving funds between accounts is not an expensive exercise. + +### Cryptographic Keys + +Monero relies heavily on a cryptography principle known as *public/private key cryptography* or *asymmetric cryptography*, which is thoroughly detailed in [this Wikipedia article](https://en.wikipedia.org/wiki/Public-key_cryptography). + +Your account is based on two keys, a @spend-key and a @view-key. The @spend-key is special in that it is the single key required to spend your Monero funds, whereas the @view-key allows you to reveal your @transactions to a third party, for example for auditing or accounting purposes. These keys in your account also play an important role in Monero's @transaction-privacy. + +The private keys for both of these must be protected by you in order to retain your account privacy. On the other hand, the public keys are obviously public (they are part of your Monero account address). For normal public/private key cryptography someone could send you a private message by encrypting it with either of your public keys, and you would then be the only one able to decrypt it with your private keys. + +### Backing Up Your Account + +When you manage your own Monero Account with the private @spend-key, you are solely responsible for the security of your funds. Thankfully, Monero makes it very easy to backup your account. When creating a Monero account for the first time you will be given a unique @mnemonic-seed for your account that consists of 13 or 25 words in the language of your choosing. **This seed is the only thing you need to backup for your account**, and so it is imperative that it is written down and stored securely. Never store this seed in a form or location that would allow someone else to see it! + +``` +List of available languages for your wallet's seed: +0 : Deutsch +1 : English +2 : Español +3 : Français +4 : Italiano +5 : Nederlands +6 : Português +7 : русский язык +8 : 日本語 +9 : 简体中文 (中国) +10 : Esperanto +Enter the number corresponding to the language of your choice: 1 +Generated new wallet: 4B15ZjveuttEaTmfZjLVioPVw7bfSmRLpSgB33CJbuC6BoGtZrug9TDAmhZEWD6XoFDGz55bgzisT9Dnv61sbsA6Sa47TYu +view key: 4130fa26463d9451781771a8baa5d0b8085c47c4500cefe4746bab48f1d15903 +********************************************************************** +Your wallet has been generated. +To start synchronizing with the daemon, use "refresh" command. +Use "help" command to see the list of available commands. +Always use "exit" command when closing monero-wallet-cli to save your +current session's state. Otherwise, you might need to synchronize +your wallet again (your wallet keys are NOT at risk in any case). + +PLEASE NOTE: the following 25 words can be used to recover access to your wallet. Please write them down and store them somewhere safe and secure. Please do not store them in your email or on file storage services outside of your immediate control. + +aunt knuckle italics moisture hawk thorn iris abort +chlorine smog uphill glass aptitude nowhere sewage plywood +dual relic fierce divers anvil nodes bubble cabin abort +********************************************************************** +Starting refresh... +Refresh done, blocks received: 21939 +Balance: 0.000000000000, unlocked balance: 0.000000000000 +Background refresh thread started +[wallet 4B15Zj]: █ + +``` + +As the example above indicates, it is incredibly important to store these words in safe locations. If you are concerned about the risk of critical loss at your home, for instance, you may want to store a second copy of your seed with your attorney or in a safety deposit box. It is also recommended that it is stored in a way that does not make it obvious that it is your seed, so writing it into a letter or as part of other notes is advisable. + +### Practicing Good Security + +Over and above backing up your @mnemonic-seed so that you have access to your account in the event of critical data loss, it is also important to practice good security. Use a secure password when creating a local Monero account (not used on [MyMonero](https://mymonero.com) or other web-based account systems). + +Don't ever give your Monero account password to anyone, as this can be used to access the Monero on your computer without knowing your @mnemonic-seed. Similarly, make sure you have running and up-to-date antivirus, especially on Windows computers. Finally, be careful when clicking links in emails or on unknown and untrusted websites, as malware installed on your computer can sit and wait for you to access your Monero account before taking the funds from it. + +### Leaving Your Account to Next of Kin + +Providing access to your Monero account to your next of kin is just as easy as it is to backup your Monero account. Simply leave your @mnemonic-seed to them in your will, or store it somewhere safe where it will be given to them upon the execution of your will. A key advantage to this is that your next of kin won't have to wait for months for a third party to release the funds to them. diff --git a/_i18n/template/resources/moneropedia/address-book.md b/_i18n/template/resources/moneropedia/address-book.md new file mode 100644 index 00000000..43b159c9 --- /dev/null +++ b/_i18n/template/resources/moneropedia/address-book.md @@ -0,0 +1,35 @@ +--- +layout: moneropedia +entry: "Address Book" +tags: ["kovri"] +terms: ["Address-Book"] +summary: "Allows you to visit I2P websites/services that have the .i2p domain" +--- + +### The Basics + +In order to browse @I2P sites or services with @Kovri, you'll need an address book. An address book will allow you to translate @I2P websites/services that use the `.i2p` [top-level domain](https://en.wikipedia.org/wiki/Top_level_domain) into an address that @I2P network will understand. + +Without an address book, you would be stuck using a @base32-address every time you visit an @I2P website/service - and that's not fun! + +### In-depth information + +Since [DNS](https://en.wikipedia.org/wiki/DNS) does not exist on the @I2P network, @Kovri also does **not** use DNS or any sort of @canonically-unique-host resolution. Instead, Kovri pairs a @locally-unique-host to a @base64-address @destination in a @subscription. Once your address book is filled with a @subscription, you can resolve your favorite `.i2p` domain site into a usable @I2P destination. + +### Creating an Address Book + +By default, your installation will come with a default public @subscription called `hosts.txt` in your @data-directory. When @Kovri starts, it loads this subscription and fetches any other subscriptions you've specified. Once loaded, your address book will be appropriately filled. For details on how to manage subscriptions, see @subscription. + +### Updating the Address Book + +Currently, there are several ways to update your address book: + +1. Use a @jump-service to insert I2P addresses into your address book +2. Use a @jump-service to copy/paste an address into your private @subscription +3. Manually add or subtract from a private @subscription + +**Note: Kovri is in heavy development. In the future there *will* be easier ways to update the address book** + +### Address Book / Naming specification + +For specification details and more, visit the [Address Book and Naming Specification](https://geti2p.net/en/docs/naming) diff --git a/_i18n/template/resources/moneropedia/address.md b/_i18n/template/resources/moneropedia/address.md new file mode 100644 index 00000000..ed33f15a --- /dev/null +++ b/_i18n/template/resources/moneropedia/address.md @@ -0,0 +1,22 @@ +--- +layout: moneropedia +entry: "Address" +terms: ["address", "addresses"] +summary: "either an alias, such as donate.getmonero.org, or a set of 95 characters starting with a 4" +--- + +### The Basics + +When you send Monero to someone you only need one piece of information, and that is their Monero address. A *raw* Monero address is a set of 95 characters starting with a '4'. The Monero donation address, for instance, is 44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A. + +Because those addresses are long and complex you will often encounter an @OpenAlias address instead. For example, Monero donations can be sent to donate@getmonero.org or donate.getmonero.org. + +If you would like to get an @OpenAlias address of your own then there is some information on the [OpenAlias page](/knowledge-base/openalias). + +### Integrated address + +An integrated address is an address combined with an encrypted 64-bit @payment-ID. A raw integrated address is 106 characters long. + +### In-depth Information + +The address is actually the concatenation, in Base58 format, of the *public* @spend-key and the *public* @view-key, prefixed with the network byte (the number 18 for Monero) and suffixed with the first four bytes of the Keccac-256 hash of the whole string (used as a checksum). diff --git a/_i18n/template/resources/moneropedia/airgap.md b/_i18n/template/resources/moneropedia/airgap.md new file mode 100644 index 00000000..f3107cf2 --- /dev/null +++ b/_i18n/template/resources/moneropedia/airgap.md @@ -0,0 +1,12 @@ +--- +layout: moneropedia +entry: "Airgap" +terms: ["airgap"] +summary: "An airgap is a security measure to physically separate a computer or device from all other networks, such as the Internet." +--- + +### The Basics + +"An air gap, air wall or air gapping is a network security measure employed on one or more computers to ensure that a secure computer network is physically isolated from unsecured networks, such as the public Internet or an unsecured local area network.[2] The name arises from the technique of creating a network that is physically separated (with a conceptual air gap) from all other networks. The air gap may not be completely literal, as networks employing the use of dedicated cryptographic devices that can tunnel packets over untrusted networks while avoiding packet rate or size variation can be considered air gapped, as there is no ability for computers on opposite sides of the gap to communicate." + +Taken from https://en.wikipedia.org/wiki/Air_gap_(networking) diff --git a/_i18n/template/resources/moneropedia/base32-address.md b/_i18n/template/resources/moneropedia/base32-address.md new file mode 100644 index 00000000..ef38e414 --- /dev/null +++ b/_i18n/template/resources/moneropedia/base32-address.md @@ -0,0 +1,27 @@ +--- +layout: moneropedia +entry: "Base32 address" +tags: ["kovri"] +terms: ["Base32-address", "Base32-addresses"] +summary: "Base32 encoded hash of a Base64 address" +--- + +### The Basics + +A Base32 address is a shortened, encoded version of an @I2P address. The Base32 address is the first part in a `.b32.i2p` hostname. + +Example: + +`i35yftyyb22xhcvghmev46t5knefur5v66qzekkajatwfwhyklvq.b32.i2p` + +where + +`i35yftyyb22xhcvghmev46t5knefur5v66qzekkajatwfwhyklvq` is the Base32 address. + +### In-depth Information + +Ultimately, a Base32 address is a 52 character [Base32 encoded representation](https://en.wikipedia.org/wiki/Base32) of the full SHA-256 hash of an @I2P @base64-address. + +### Notes + +**Note: `.b32` is not a sub-domain of `.i2p`** diff --git a/_i18n/template/resources/moneropedia/base64-address.md b/_i18n/template/resources/moneropedia/base64-address.md new file mode 100644 index 00000000..edd34593 --- /dev/null +++ b/_i18n/template/resources/moneropedia/base64-address.md @@ -0,0 +1,22 @@ +--- +layout: moneropedia +entry: "Base64 address" +tags: ["kovri"] +terms: ["Base64-address", "Base64-addresses"] +summary: "Base64 encoded I2P destination" +--- + +### The Basics + +A @base64-address is a 516-character [Base64 encoded](https://en.wikipedia.org/wiki/Base64) @I2P @destination. @base64-addresses are primarily used for @address-book, @jump-service, and also internally. + +Example: + +``` +AQZGLAMpI9Q0l0kmMj1vpJJYK3CjLp~fE3MfvE-e7KMKjI5cPOH6EN8m794uHJ6b09qM8mb9VEv1lVLEov~usVliTSXCSHuRBOCIwIOuDNU0AbVa4BpIx~2sU4TxKhoaA3zQ6VzINoduTdR2IJhPvI5xzezp7dR21CEQGGTbenDslXeQ4iLHFA2~bzp1f7etSl9T2W9RID-KH78sRQmzWnv7dbhNodMbpO6xsf1vENf6bMRzqD5vgHEHZu2aSoNuPyYxDU1eM6--61b2xp9mt1k3ud-5WvPVg89RaU9ugU5cxaHgR927lHMCAEU2Ax~zUb3DbrvgQBOTHnJEx2Fp7pOK~PnP6ylkYKQMfLROosLDXinxOoSKP0UYCh2WgIUPwE7WzJH3PiJVF0~WZ1dZ9mg00c~gzLgmkOxe1NpFRNg6XzoARivNVB5NuWqNxr5WKWMLBGQ9YHvHO1OHhUJTowb9X90BhtHnLK2AHwO6fV-iHWxRJyDabhSMj1kuYpVUBQAEAAcAAA== +``` + + +### In-depth Information + +See @destination for details behind @base64-address diff --git a/_i18n/template/resources/moneropedia/block.md b/_i18n/template/resources/moneropedia/block.md new file mode 100644 index 00000000..cadae194 --- /dev/null +++ b/_i18n/template/resources/moneropedia/block.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Block" +terms: ["block", "blocks"] +summary: "a container of transactions, a sequence of which forms a blockchain" +--- + +### The Basics + +A block is a container of @transactions, with a new block being added to the @blockchain once every 2 minutes (see constant `DIFFICULTY_TARGET_V2` defined as 120 seconds), on average. + +Blocks also contain a special type of transaction, the @coinbase-transaction, which add newly created Monero to the network. + +Blocks are created through the process of @mining, and the @node that successfully mines the block then broadcasts it to each of the @nodes connected to it, who subsequently re-broadcast the block until the entire Monero network has received it. + +Fake or bad blocks generally cannot be created, as @nodes that receive blocks always verify the @transactions they contain against a set of consensus rules that all nodes adhere to, including validating the cryptographic @signatures on each transaction. diff --git a/_i18n/template/resources/moneropedia/blockchain.md b/_i18n/template/resources/moneropedia/blockchain.md new file mode 100644 index 00000000..d20e8cf7 --- /dev/null +++ b/_i18n/template/resources/moneropedia/blockchain.md @@ -0,0 +1,13 @@ +--- +layout: moneropedia +entry: "Blockchain" +terms: ["blockchain", "blockchains"] +summary: "a distributed ledger of all transactions both past and present, without revealing who the funds came from or went to" + +--- + +### The Basics +A @blockchain is a distributed database that continuously grows with a record of all of the transactions that have occurred with a given cryptocurrency. This database is often referred to as a ledger because the data contains a large list of transactions that have taken place. In Monero, these transactions are packaged together into 'blocks' every 2 minutes (on average) and all miners and nodes on the network have copies of these blocks. + +### Monero's @Blockchain +Unlike Bitcoin and other cryptocurrencies, transactions in the Monero @blockchain do not reveal where funds came from or went to, providing anonymity and making the currency completely @fungible. Additionally, the amounts of all transactions are hidden by @RingCT, a feature of Monero. For auditing or other transparency purposes a user can share a @view-key to prove they control certain amounts of @Moneroj. diff --git a/_i18n/template/resources/moneropedia/canonically-unique-host.md b/_i18n/template/resources/moneropedia/canonically-unique-host.md new file mode 100644 index 00000000..c1138992 --- /dev/null +++ b/_i18n/template/resources/moneropedia/canonically-unique-host.md @@ -0,0 +1,23 @@ +--- +layout: moneropedia +entry: "Canonically-unique host" +tags: ["kovri"] +terms: ["Canonically-unique-host"] +summary: "A host that is canonically resolved to an address or set of addresses" +--- + +### The Basics + +A Canonically-unique host is a [FQDN](https://en.wikipedia.org/wiki/FQDN) that will canonically resolve to a designated address or set of addresses. Not to be confused with a @locally-unique-host. + +### In-depth information + +A Canonically-unique host is defined by remote authoritative sources; usually through [DNS](https://en.wikipedia.org/wiki/DNS). When resolving a peer's hostname, you will most likely use an external source for resolution unless you have the following implemented: + +- a database file similar to a [hosts file](https://en.wikipedia.org/wiki/etc/hosts) +- an internal-network resolver (which eventually pulls from external sources) + +### Notes + +- Monero primarily uses @canonically-unique-host resolution while @I2P only uses @locally-unique-host resolution. +- @I2P's and @Kovri's self-assigned top-level domain is currently `.i2p` and @Kovri intends to only process/use the `.i2p` [top-level domain](https://en.wikipedia.org/wiki/Top_level_domain) diff --git a/_i18n/template/resources/moneropedia/change.md b/_i18n/template/resources/moneropedia/change.md new file mode 100644 index 00000000..08163292 --- /dev/null +++ b/_i18n/template/resources/moneropedia/change.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Change" +terms: ["change"] +summary: "Monero sent as part of a transaction, that returns to your account instead of going to another recipient" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +### More Information + +The @wallet in the the Monero software makes change automatically, but when you send a transaction, you are taking an @input that you control and telling the Monero network what to do with it. The @input is a "deposit" to your account that you are able to spend. @Outputs are the part of the transaction that tells the Monero network where to send the funds. + +You might have multiple inputs in your account, in many different denominations (For example: you deposited 0.5 XMR on Friday, and 0.75 XMR on Saturday). So, when have a transaction with an input of 0.5 XMR, but you only want to send 0.1 XMR, your transaction will include a @fee to pay the @miner, an output for 0.1 XMR to send to the recipient, and the rest that you want to send back to yourself will be an output back to you (this is called "change"). Once the transaction is completed, the change becomes available to you as an input that you can again split and send with a new transaction. diff --git a/_i18n/template/resources/moneropedia/clearnet.md b/_i18n/template/resources/moneropedia/clearnet.md new file mode 100644 index 00000000..9200e69a --- /dev/null +++ b/_i18n/template/resources/moneropedia/clearnet.md @@ -0,0 +1,33 @@ +--- +layout: moneropedia +entry: "Clearnet" +tags: ["kovri"] +terms: ["Clearnet"] +summary: "The internet in which anonymous overlay networks are built upon" +--- + +### The Basics + +When you use the internet for things like news, email, social media, and even Monero, you are most likely using a clearnet connection. This means that *all* of your connections can be tracked, traced, and monitored by: + +- your [ISP](https://en.wikipedia.org/wiki/ISP) +- the website/service/person you're communicating with +- possibly a [Five Eyes](https://en.wikipedia.org/wiki/5_Eyes) capable entity + +and even if you use [HTTPS](https://en.wikipedia.org/wiki/HTTPS) or similar (which *encrypts* your transmission), your route is not hidden nor is it anonymous, thus; it is in the *clear*. + +### In-depth information + +Since a traditional [VPN](https://en.wikipedia.org/wiki/VPN) cannot save you from clearnet (as you are still using *clearnet* (though you are more proxied than without a VPN)), you should use an *anonymous overlay network* to avoid using clearnet directly: + +- @Kovri +- @Java-I2P +- [Tor](https://torproject.org/) + +These technologies protect you from clearnet by building an anonymous network **over** clearnet to keep your transmissions both encrypted **and** anonymous. + +Here is an accurate, [interactive diagram](https://www.eff.org/pages/tor-and-https) provided by the [EFF](https://www.eff.org/) which describes *clearnet* as it relates to **Tor**. The concept also (somewhat) applies to @Kovri and @I2P in terms of anonymity with the exception that: + +- @Kovri does not use exit nodes when connecting to an @eepsite +- Your traffic never need to leave the @I2P network +- You do not need HTTPS to use @Kovri (with the exception of @reseed) diff --git a/_i18n/template/resources/moneropedia/coinbase.md b/_i18n/template/resources/moneropedia/coinbase.md new file mode 100644 index 00000000..4c564e4b --- /dev/null +++ b/_i18n/template/resources/moneropedia/coinbase.md @@ -0,0 +1,10 @@ +--- +layout: moneropedia +entry: "Coinbase Transaction" +terms: ["coinbase-transaction"] +summary: "a special type of transaction included in each block, which contains a small amount of Monero sent to the miner as a reward for their mining work" +--- + +### The Basics + +{{ page.summary | capitalize }}. \ No newline at end of file diff --git a/_i18n/template/resources/moneropedia/consensus.md b/_i18n/template/resources/moneropedia/consensus.md new file mode 100644 index 00000000..192e9d9e --- /dev/null +++ b/_i18n/template/resources/moneropedia/consensus.md @@ -0,0 +1,10 @@ +--- +layout: moneropedia +entry: "Consensus" +terms: ["consensus", "consensus-network"] +summary: "consensus describes a property of distributed networks like Monero where most of the participants follow the rules, and thus reject bad participants" +--- + +### The Basics + +{{ page.summary | capitalize }}. \ No newline at end of file diff --git a/_i18n/template/resources/moneropedia/cryptocurrency.md b/_i18n/template/resources/moneropedia/cryptocurrency.md new file mode 100644 index 00000000..45d736c2 --- /dev/null +++ b/_i18n/template/resources/moneropedia/cryptocurrency.md @@ -0,0 +1,22 @@ +--- +layout: moneropedia +entry: "Cryptocurrency" +terms: ["cryptocurrency", "cryptocurrencies", "altcoin", "altcoins"] +summary: "a digital currency in which encryption techniques are used to regulate the generation of units of currency and verify the transfer of funds, usually operating independently of a central bank" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +### More Information + +Cryptocurrency is the generic term for a large set of digital assets that use encryption techniques to generate units of currency, verify the transactions, and transfer value. Generally, cryptocurrencies are considered to be decentralized. Cryptocurrency should not be confused with virtual currency which is a type of digital money that is usually controlled by it's creators or developers. (Some examples of virtual currency are gametime in World of Warcraft, ROBUX in Roblox, reward points programs, or Ripple, all of which can be exchanged for currency or cash value, but are not considered cryptocurrency because they are centalized and controlled/issued by a single entity). + +Monero is one of many cryptocurrencies currently available. Other examples are Bitcoin, Litecoin, Dogecoin, Dash, Zcash, etc, but nearly all other cryptocurrencies lack features that make them a true money (most importantly @fungability which is a requirement for it to be a @store-of-value). + +Not all cryptocurrencies operate the same, but they usually share the properties of @decentralization, encryption, and the ability to send and receive transactions. Most are irreversible, pseudonymous, global, and permissionless. Most aim to be a @store-of-value or be digital cash that allows you to transact. + +Most cryptocurrencies (including Monero) use a distributed ledger (called a @blockchain) to keep track of previous transactions . The blockchain serves to tell other users on the network that transactions have happened. There are many different ways for cryptocurrencies to create their blockchain, and not all are the same. Monero uses @proof-of-work to craft blocks, where other cryptocurrencies may use proof-of-stake or other consolidated methods. + +Ultimately, cryptocurrency is an attempt to create @trustless value; that is free from borders, governments, and banks. Whether that be to transact or to be digital gold is up to the users of each. diff --git a/_i18n/template/resources/moneropedia/data-directory.md b/_i18n/template/resources/moneropedia/data-directory.md new file mode 100644 index 00000000..e66f6959 --- /dev/null +++ b/_i18n/template/resources/moneropedia/data-directory.md @@ -0,0 +1,22 @@ +--- +layout: moneropedia +entry: "Data Directory" +tags: ["kovri"] +terms: ["Data-Directory"] +summary: "Where essential kovri data for runtime is stored" +--- + +### The Basics + +Depending on your OS, @Kovri currently stores all run-time data in the following directory: + +- Linux/FreeBSD: + - `$HOME/.kovri` + +- OSX: + - `$HOME/Library/Application\ Support/Kovri` + +- Windows: + - `"$APPDATA"\\Kovri` + +This includes all configuration files, @address-book, certificates, and resources. diff --git a/_i18n/template/resources/moneropedia/denominations.md b/_i18n/template/resources/moneropedia/denominations.md new file mode 100644 index 00000000..24bda241 --- /dev/null +++ b/_i18n/template/resources/moneropedia/denominations.md @@ -0,0 +1,36 @@ +--- +layout: moneropedia +entry: "Denominations" +terms: ["denominations", "subunits", "tacoshi", "piconero", "nanonero", "micronero", "millinero", "centinero", "decinero","decanero","hectonero","kilonero","meganero","giganero"] +summary: "A denomination is a proper description of a currency amount. It is oftentimes a sub-unit of the currency. For example, traditionally a cent is 1/100th of a a particular unit of currency.)" +--- + +### The Basics + +A denomination is a proper description of a currency amount, oftentimes a sub-unit of the currency (for example, traditionally a cent is 1/100th of a a unit of currency). Monero denomination names add SI prefixes after dropping the initial "mo" for ease of use. The smallest unit of Monero is 1 piconero (0.000000000001 XMR). + +### Denominations of Monero + +|------------+----------+-------------------| +| Name | Base 10 | Amount | +|-----------:|:--------:| -----------------:| +| piconero | 10^-12 | 0.000000000001 | +| nanonero | 10^-9 | 0.000000001 | +| micronero | 10^-6 | 0.000001 | +| millinero | 10^-3 | 0.001 | +| centinero | 10^-2 | 0.01 | +| decinero | 10^-1 | 0.1 | +|============+==========+===================| +| **monero** | **10^0** | **1** | +|============+==========+===================| +| decanero | 10^1 | 10 | +| hectonero | 10^2 | 100 | +| kilonero | 10^3 | 1,000 | +| meganero | 10^6 | 1,000,000 | +|------------+----------+-------------------| + +### In-depth Information + +Support for input using SI prefixes was [added to the Monero codebase](https://github.com/monero-project/monero/pull/1826) on March 3, 2017 by [Moneromooo](https://github.com/moneromooo-monero). The smallest unit of monero (10^-12 XMR) was originally called a tacoshi in honor of user [Tacotime](https://bitcointalk.org/index.php?action=profile;u=19270), an early Monero contributor and was later renamed for ease of use and consistancy. + +{{ page.summary | capitalize }}. diff --git a/_i18n/template/resources/moneropedia/destination.md b/_i18n/template/resources/moneropedia/destination.md new file mode 100644 index 00000000..a999bebf --- /dev/null +++ b/_i18n/template/resources/moneropedia/destination.md @@ -0,0 +1,19 @@ +--- +layout: moneropedia +entry: "Destination" +tags: ["kovri"] +terms: ["Destination", "Destinations"] +summary: "A in-net address that serves as a final endpoint (either local or remote)" +--- + +### The Basics + +A @destination is the @I2P @in-net address of the final endpoint you are trying to connect to (example: an @I2P website, service, or Monero node). This can also include a *local destination* of which *other* peers need to connect to in order to make contact for communication (similar to how, in @clearnet, your IP address is given to a website when you connect so it knows *where* to send the information back to). + +### In-depth Information + +An @I2P destination can be encoded into a @base32-address or @base64-address. Most users will only care about @base32-address or a `.i2p` hostname while, internally, @Kovri / @I2P @address-book uses @base64-addresses. Ultimately, all @destinations in @I2P are 516-byte (or longer) keys: + +`256-byte public key + 128-byte signing key + a null certificate = 516 bytes in Base64 representation` + +Note: certificates are not used now but, if they were, the keys would be longer. diff --git a/_i18n/template/resources/moneropedia/eepsite.md b/_i18n/template/resources/moneropedia/eepsite.md new file mode 100644 index 00000000..5fbb9545 --- /dev/null +++ b/_i18n/template/resources/moneropedia/eepsite.md @@ -0,0 +1,30 @@ +--- +layout: moneropedia +entry: "Eepsite" +tags: ["kovri"] +terms: ["Eepsite", "Hidden-Service", "Garlic-Site", "Garlic-Service"] +summary: "A website or service hosted within the I2P network" +--- + +### The Basics + +Is it [**EEP!** *(in response to the site's content)*](https://en.wikipedia.org/wiki/Onomatopoeia), or **end-to-end protocol**, or something else entirely different? + +While the original definition of eepsite has been lost with time, its use-case remains: an eepsite is a website or service that is hosted within (and only accessible by) the @I2P network. + +### In-depth Information + +Alternate names include: + +1. *Hidden Service* + - because the site/service is *hidden* within the @I2P network and can only be visited within the network +2. *Garlic Site* + - because the website utilizes @I2P's @garlic-routing technology as a means of communicating with a client + - because the service is hosted as a website and not any other type of service +3. *Garlic Service* + - because the service utilizes @I2P's @garlic-routing technology as a means of communicating with a client + - because the service is specific to services like IRC, email, or a Monero peer (but may also include websites) + +### Notes + +To learn how to setup an Eepsite (Hidden Service, Garlic Site, Garlic Service) visit the @Kovri [user-guide](https://github.com/monero-project/kovri/blob/master/doc/USER_GUIDE.md). diff --git a/_i18n/template/resources/moneropedia/encryption.md b/_i18n/template/resources/moneropedia/encryption.md new file mode 100644 index 00000000..d9356c4b --- /dev/null +++ b/_i18n/template/resources/moneropedia/encryption.md @@ -0,0 +1,35 @@ +--- +layout: moneropedia +entry: "Encryption" +tags: ["kovri"] +terms: ["encryption", "encrypted", "encrypting", "decryption", "decrypted", "decrypting"] +summary: "The process of encoding messages or information in a way that only authorized parties can decode and read" +--- + +### The Basics + +From [Encryption](https://en.wikipedia.org/wiki/Encryption): + +> +In cryptography, encryption is the process of encoding messages or information in such a way that only authorized parties can decode and read what is sent. Encryption does not of itself prevent interception, but denies the message content to the interceptor. + +### In-depth information + +From [Encryption](https://en.wikipedia.org/wiki/Encryption): + +> + In an encryption scheme, the intended communication information or message (referred to as *plaintext*), is encrypted using an encryption algorithm, generating ciphertext that can only be read if decrypted. For technical reasons, an encryption scheme usually uses a pseudo-random encryption key generated by an algorithm. It is in principle possible to decrypt the message without possessing the key, but, for a well-designed encryption scheme, large computational resources and skill are required. An authorized recipient can easily decrypt the message with the key provided by the originator to recipients, but not to unauthorized interceptors. + +> +The purpose of encryption is to ensure that only somebody who is authorized to access data (e.g. a text message or a file), will be able to read it, using the decryption key. Somebody who is not authorized can be excluded, because he or she does not have the required key, without which it is impossible to read the encrypted information. + +### Kovri + +@Kovri implements various types of encryption in *at least* 4 essential capacities: + +- @Reseed for bootstrapping +- @Garlic-routing: three layers of encryption (@garlic-encryption) are used to verify the secure delivery of @messages to the recipient/peer/@destination +- @Tunnel encryption: garlic messages are passed through a @tunnel and encrypted by the @tunnel gateway to the @tunnel endpoint +- @Transport layer encryption prevents the ability to decrypt @messages at the [media layer](https://en.wikipedia.org/wiki/OSI_model) + +For details on the types of encryption and cryptographic @signatures used in @Kovri and @I2P, visit @Java-I2P's [Cryptography](https://geti2p.net/spec/cryptography) diff --git a/_i18n/template/resources/moneropedia/floodfill.md b/_i18n/template/resources/moneropedia/floodfill.md new file mode 100644 index 00000000..e3fbf54f --- /dev/null +++ b/_i18n/template/resources/moneropedia/floodfill.md @@ -0,0 +1,15 @@ +--- +layout: moneropedia +entry: "Floodfill" +tags: ["kovri"] +terms: ["Floodfill"] +summary: "An I2P router which maintains a distributed network-database" +--- + +### The Basics + +By actively managing a distributed network-database, a router with *floodfill* capability has the ability to help maintain network stability and resiliancy while also being decentralized and trust-less. + +### In-depth information + +Though floodfill itself is a simple storage system, the technical underpinnings of floodfill as it relates to @network-database and other protocols within @I2P are much more complex. Visit the [Network Database](https://geti2p.net/en/docs/how/network-database) page for details. diff --git a/_i18n/template/resources/moneropedia/fungibility.md b/_i18n/template/resources/moneropedia/fungibility.md new file mode 100644 index 00000000..47ca7d01 --- /dev/null +++ b/_i18n/template/resources/moneropedia/fungibility.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Fungibility" +terms: ["fungibility"] +summary: "property of a currency whereby two units can be substituted in place of one another" +--- + +### The Basics + +Fungibility means that two units of a currency can be mutually substituted and the substituted currency is equal to another unit of the same size. For example, two $10 bills can be exchanged and they are functionally identical to any other $10 bills in circulation (although $10 bills have unique ID numbers and are therefore not completely fungible). Gold is probably a closer example of true fungibility, where any 1 oz. of gold of the same grade is worth the same as another 1 oz of gold. Monero is fungible due to the nature of the currency which provides no way to link transactions together nor trace the history of any particular XMR. 1 XMR is functionally identical to any other 1 XMR. + +Fungibility is an advantage Monero has over Bitcoin and almost every other cryptocurrency, due to the privacy inherent in the Monero @blockchain and the permanently traceable nature of the Bitcoin blockchain. With Bitcoin, any BTC can be tracked by anyone back to it's creation @coinbase-transaction. Therefore, if a coin has been used for an illegal purpose in the past, this history will be contained in the @blockchain in perpetuity. This lack of fungibility means that certain businesses will be obligated to avoid accepting BTC that have been previously used for purposes which are illegal, or simply run afoul of their Terms of Service. Currently some large Bitcoin companies are blocking, suspending, or closing accounts that have received Bitcoin used in online gambling or other purposes deemed unsavory by said companies. + +Monero has been built specifically to address the problem of traceability and non-fungability inherent in other cryptocurrencies. By having completely private transactions Monero is truly fungible and there can be no blacklisting of certain XMR, while at the same time providing all the benefits of a secure, decentralized, permanent blockchain. + +{{ page.summary | capitalize }}. diff --git a/_i18n/template/resources/moneropedia/garlic-encryption.md b/_i18n/template/resources/moneropedia/garlic-encryption.md new file mode 100644 index 00000000..3364f521 --- /dev/null +++ b/_i18n/template/resources/moneropedia/garlic-encryption.md @@ -0,0 +1,25 @@ +--- +layout: moneropedia +entry: "Garlic-Encryption" +tags: ["kovri"] +terms: ["Garlic-Encryption", "Layered-Encryption"] +summary: "Layered encryption as implemented in Kovri / I2P" +--- + +### The Basics + +@garlic-encryption is @I2P's implementation of @message based @layered-encryption (similar to flow-based [Onion-Routing](https://en.wikipedia.org/wiki/Onion_routing)). + +By @encrypting @messages in layers, this allows a @message to be routed through a sequence of proxies without allowing the proxies (or any intermediaries) to read the contents of the @message. @Layered-Encryption is a fundamental feature in @Kovri, @I2P, and [Tor](https://torproject.org) and is the cornerstone for securing anonymity within these overlay-networks. + +### In-depth information + +For @garlic-encryption, the primary difference between @Kovri/@I2P and Tor is: + +- @Kovri/@I2P bundles multiple @messages together to form garlic "cloves" + - any number of messages can be contained in a "clove" instead of *only* a single message +- @Kovri/@I2P uses [ElGamal](https://en.wikipedia.org/wiki/ElGamal)/[AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) @encryption for @messages and @transports + +### Notes + +For details, see @garlic-routing. diff --git a/_i18n/template/resources/moneropedia/garlic-routing.md b/_i18n/template/resources/moneropedia/garlic-routing.md new file mode 100644 index 00000000..55cd2122 --- /dev/null +++ b/_i18n/template/resources/moneropedia/garlic-routing.md @@ -0,0 +1,45 @@ +--- +layout: moneropedia +entry: "Garlic Routing" +tags: ["kovri"] +terms: ["Garlic-Routing"] +summary: "Routing technology as implemented in Kovri" +--- + +### The Basics + +The term *@garlic-routing* has a diverse history of varying interpretations. As it currently stands, Monero defines *@garlic-routing* as the method in which @Kovri and @I2P create a @message-based anonymous overlay network of internet peers. + +The @Garlic-Encryption of @Garlic-Routing is similar to the @Layered-Encryption of [Onion Routing](https://en.wikipedia.org/wiki/Onion_routing) and effectively conceals the IP address of the sender and secures information sent from the sender to its @destination (and vice-versa). + +### History + +In written form, the term *@garlic-routing* can be seen as early as June of 2000 in Roger Dingledine's [Free Haven Master's thesis](http://www.freehaven.net/papers.html) (Section 8.1.1) as derived from the term Onion Routing. + +As recent as October of 2016, [#tor-dev](https://oftc.net/WebChat/) has offered insight into the creation of the term *@garlic-routing*: + +[Nick Mathewson](https://en.wikipedia.org/wiki/The_Tor_Project,_Inc): +>[I think that there was some attempt to come up with a plant whose structure resembled the 'leaky-pipe' topology of tor, but I don't believe we ever settled on one.] + +[Roger Dingledine](https://en.wikipedia.org/wiki/Roger_Dingledine): +>during the free haven brainstorming, there was a moment where we described a routing mechanism, and somebody said "garlic routing!", and everybody laughed. +so we for sure thought we had invented the name, at the time. + +*Note: permission to use the aforementioned quotes was granted by Nick Mathewson and Roger Dingledine* + +### In-depth Information + +In technical terms, for @Kovri and @I2P, *@garlic-routing* translates to any/all of the following: + +- @Layered-Encryption (similar to the @layered-encryption in Onion Routing) +- Bundling multiple @messages together (garlic cloves) +- ElGamal/AES @encryption + +*Note: though [Tor](https://torproject.org/) uses @layered-encryption, Tor does not use ElGamal and is not message-based.* + +**Read more in @garlic-encryption.** + +### Notes + +- In terms of Onion/Garlic Routing, another way to envision layered @encryption is by replacing the onion/garlic with a [Matryoshka doll](https://en.wikipedia.org/wiki/Matryoshka_doll) - with each outer/inner doll having a lock and public key to the next/previous doll +- For more technical details on Garlic Routing, read the @Java-I2P entry on [Garlic Routing](https://geti2p.net/en/docs/how/garlic-routing) diff --git a/_i18n/template/resources/moneropedia/i2np.md b/_i18n/template/resources/moneropedia/i2np.md new file mode 100644 index 00000000..d05c17aa --- /dev/null +++ b/_i18n/template/resources/moneropedia/i2np.md @@ -0,0 +1,28 @@ +--- +layout: moneropedia +entry: "I2NP" +tags: ["kovri"] +terms: ["I2NP"] +summary: "The I2P Network Protocol: the mechanism in which I2NP messages are sent over the I2P network" +--- + +### The Basics + +From @Java-I2P: + +> +@I2NP manages the routing and mixing of messages between routers, as well as the selection of what transports to use when communicating with a peer for which there are multiple common transports supported + +### In-depth information + +From @Java-I2P: + +> +@I2NP (@I2P Network Protocol) @messages can be used for one-hop, router-to-router, point-to-point @messages. By @encrypting and wrapping @messages in other @messages, they can be sent in a secure way through multiple hops to the ultimate @destination. @I2NP does not specify nor require any particular @transport layer but does require at least one @transport in use. + +> +Whenever a @destination wants to send a message to to another @destination, it provides its local router with both the @destination structure and the raw bytes of the message to be sent. The router then determines where to send it, delivers it through outbound @tunnels, instructing the end point to pass it along to the appropriate inbound @tunnel, where it is passed along again to that @tunnel's end point and made available to the target for reception. + +### Notes + +Read more about the @I2NP [protocol](https://geti2p.net/en/docs/protocol/i2np) and [specification](https://geti2p.net/spec/i2np). diff --git a/_i18n/template/resources/moneropedia/i2p.md b/_i18n/template/resources/moneropedia/i2p.md new file mode 100644 index 00000000..2778db30 --- /dev/null +++ b/_i18n/template/resources/moneropedia/i2p.md @@ -0,0 +1,31 @@ +--- +layout: moneropedia +entry: "I2P" +tags: ["kovri"] +terms: ["I2P"] +summary: "The Invisible Internet Project: an anonymizing overlay network" +--- + +### Monero + +For Monero's implementation of @I2P, see @Kovri. For a comparison of @I2P to [Tor](https://torproject.org/), read the [Comparison](https://geti2p.net/en/comparison/tor) page. + +### The Basics + +From @Java-I2P: + +>The I2P network provides strong privacy protections for communication over the Internet. Many activities that would risk your privacy on the public Internet can be conducted anonymously inside I2P. + +### In-depth information + +From @Java-I2P: + +>I2P is an anonymous overlay network - a network within a network. It is intended to protect communication from dragnet surveillance and monitoring by third parties such as ISPs. + +>I2P is used by many people who care about their privacy: activists, oppressed people, journalists and whistleblowers, as well as the average person. + +>No network can be "perfectly anonymous". The continued goal of I2P is to make attacks more and more difficult to mount. Its anonymity will get stronger as the size of the network increases and with ongoing academic review. + +### Notes + +@I2P documentation and specifications are available [here](https://geti2p.net/docs/). diff --git a/_i18n/template/resources/moneropedia/i2pcontrol.md b/_i18n/template/resources/moneropedia/i2pcontrol.md new file mode 100644 index 00000000..481d9eae --- /dev/null +++ b/_i18n/template/resources/moneropedia/i2pcontrol.md @@ -0,0 +1,17 @@ +--- +layout: moneropedia +entry: "I2PControl" +tags: ["kovri"] +terms: ["I2PControl"] +summary: "An API inteface for Kovri and Java-I2P that allows simple remote control" +--- + +### The Basics + +@I2Pcontrol is [JSONRPC2](https://en.wikipedia.org/wiki/JSON-RPC) [API](https://en.wikipedia.org/wiki/Application_programming_interface) for @Kovri and @Java-I2P which allows an @I2PControl client to remote control/monitor a running instance. + +Two available @I2PControl clients are: [qtoopie](https://github.com/EinMByte/qtoopie) (C++ client) and [itoopie](https://github.com/i2p/i2p.itoopie) (Java client). Read `kovri.conf` to configure @I2PControl for @Kovri. + +### In-depth information + +Details and specification available on the [I2PControl](https://geti2p.net/en/docs/api/i2pcontrol) page. diff --git a/_i18n/template/resources/moneropedia/in-net.md b/_i18n/template/resources/moneropedia/in-net.md new file mode 100644 index 00000000..92404f08 --- /dev/null +++ b/_i18n/template/resources/moneropedia/in-net.md @@ -0,0 +1,15 @@ +--- +layout: moneropedia +entry: "In-net" +tags: ["kovri"] +terms: ["In-net"] +summary: "Within the I2P network" +--- + +### The Basics + +**In-net** is a [colloquial](https://en.wikipedia.org/wiki/Colloquial) term of which describes activities, protocols, or functionality that exist *only* within the @I2P network. + +### In-depth information + +Example: *in-net download* would be defined as downloading *only* within @I2P. diff --git a/_i18n/template/resources/moneropedia/index.md b/_i18n/template/resources/moneropedia/index.md new file mode 100644 index 00000000..4489586c --- /dev/null +++ b/_i18n/template/resources/moneropedia/index.md @@ -0,0 +1,21 @@ +--- +layout: full +title: "Moneropedia" +title-pre-kick: "Moneropedia - The " +title-kick: "Monero Wiki" +title-post-kick: "" +kick-class: "softyellow-kicks" +icon: "icon_wiki" +attribution: "" +--- + + +
+ +@moneropedia + +
+ +

Add New Entry

+ +If there is an entry you'd like to modify or be added, please [open an issue on this website's Github repository](https://github.com/monero-project/monero-site/issues) or submit changes via pull request. \ No newline at end of file diff --git a/_i18n/template/resources/moneropedia/java-i2p.md b/_i18n/template/resources/moneropedia/java-i2p.md new file mode 100644 index 00000000..e040579b --- /dev/null +++ b/_i18n/template/resources/moneropedia/java-i2p.md @@ -0,0 +1,15 @@ +--- +layout: moneropedia +entry: "Java I2P" +tags: ["kovri"] +terms: ["Java-I2P"] +summary: "The original implementation of I2P - written in Java" +--- + +### The Basics + +The term "Java I2P" is often used to describe the original @I2P implementation currently most known and used today. There are various other @I2P implementations, including @Kovri; all of which look up to the original Java implementation. + +### Notes + +To download/learn more about the Java implementation, visit their [website](https://geti2p.net/). diff --git a/_i18n/template/resources/moneropedia/jump-service.md b/_i18n/template/resources/moneropedia/jump-service.md new file mode 100644 index 00000000..228ebb98 --- /dev/null +++ b/_i18n/template/resources/moneropedia/jump-service.md @@ -0,0 +1,34 @@ +--- +layout: moneropedia +entry: "Jump Service" +tags: ["kovri"] +terms: ["Jump-Service"] +summary: "An I2P website service that adds addresses to your address book" +--- + +### The Basics + +In your @I2P configured web browser, you can use a Jump Service to *jump* to an @I2P address that you don't have in your @address-book. Once you've *jumped* to the address, the address will be saved into your @address-book. + +### In-depth Information + +In an @I2P configured browser, visit: http://stats.i2p/i2p/lookup.html (courtesy of @Java-I2P's lead developer *zzz*) + +Then, you'll have two options: + +1. *Hostname lookup* the address you wish to visit and then manually copy/paste the result +2. *Jump* to the @I2P website by entering the @I2P hostname (**recommended**) + +### Using hostname lookup + +For example, entering `pinkpaste.i2p` into the *Hostname lookup* box (and then submitting) will return: + +``` +pinkpaste.i2p=m-HrPrIAsdxts0WM~P4mE8mt9P7g-QTaBvu7Gc6Nl0UX7Vwck-i~RvOPfK6W~kfdRvwhNTqevkBL2UF5l36We02Aiywu7kB2xOHRkze68h-Tg2ewvRVwokohguCD2G3wwAEz~7FVda2avYDCb9-N6TfuzxKLnmhPMvbNSjGL7ZsD2p-h207R3-2kvuMV9bfu-K~w9NI9XJhIyufvUnFYc2jnTVg8PbaR4UP57cNaOO2YIMPkbr6~yTcIu9B1sUfHK6-N~6virQDOxW4M-62rjnZkLpaCtkOsXslmCwZI--TkZ6hKi1kXZvNmJRE1rYfffYRFn38zhaqszeETX8HiIvahZhXF5fNumBziYdmLdw8hkuN1A~emU6Xz9g~a1Ixfsq1Qr~guYoOtaw-0rOFxNRS9yMehE-2LCb8c-cAg6z5OdlN4qJDl~ZHgru4d~EHp~BpAK3v7u2Gi-8l1ygVW-1CHVna~fwnbOPN3ANPwh6~~yUit0Cx1f54XiNRn6-nPBQAEAAcAAA== +``` + +Copy/paste this host=@base64-address pairing into your **private** @subscription. + +### Directly jumping + +For example, entering `pinkpaste.i2p` into the *Jump* box (and then submitting) will automatically redirect you to the website **and** insert the @locally-unique-host into @address-book. diff --git a/_i18n/template/resources/moneropedia/kovri.md b/_i18n/template/resources/moneropedia/kovri.md new file mode 100644 index 00000000..6002cdd6 --- /dev/null +++ b/_i18n/template/resources/moneropedia/kovri.md @@ -0,0 +1,62 @@ +--- +layout: moneropedia +entry: "Kovri" +tags: ["kovri"] +terms: ["Kovri"] +summary: "Monero's C++ router implementation of the I2P network" +--- + +### The Basics + +[Kovri](https://github.com/monero-project/kovri/) is a C++ implementation of the @I2P network. @Kovri is currently in heavy, active development and not yet integrated with Monero. When Kovri is integrated into your Monero @node, your transactions will be more secure than ever before. + +### In-depth information + +Kovri will protect you and Monero from: + +- @Node partitioning attacks +- Associations between a particular txid and your IP address +- Mining and/or running a node in highly adversarial environments +- Metadata leakage (e.g., @OpenAlias lookups) + +...and much more. + +Read [anonimal's FFS proposal](https://forum.getmonero.org/9/work-in-progress/86967/anonimal-s-kovri-full-time-development-funding-thread) for more details and for reasoning behind the project. Also read the FAQ and User Guide in the [Kovri repository](https://github.com/monero-project/kovri/). + +### @Kovri / @I2P Terminology + +#### Client + API + +- @Address-Book +- @Base32-address +- @Base64-address +- @Canonically-unique-host +- @Eepsite (@Hidden-Service, @Garlic-Site, @Garlic-Service) +- @I2PControl +- @Jump-Service +- @Locally-unique-host +- @Reseed +- @Subscription + +#### Core + Router + +- @Clearnet +- @Data-Directory +- @Destination +- @Encryption +- @Floodfill +- @Garlic-Encryption +- @Garlic-Routing +- @I2NP +- @In-net +- @Java-I2P +- @Layered-Encryption +- @Lease +- @LeaseSet +- @Message @Messages +- @NTCP +- @Network-Database +- @Router-Info +- @SSU +- @Transports +- @Tunnel diff --git a/_i18n/template/resources/moneropedia/lease-set.md b/_i18n/template/resources/moneropedia/lease-set.md new file mode 100644 index 00000000..99165a03 --- /dev/null +++ b/_i18n/template/resources/moneropedia/lease-set.md @@ -0,0 +1,25 @@ +--- +layout: moneropedia +entry: "Lease-Set" +tags: ["kovri"] +terms: ["LeaseSet", "LeaseSets"] +summary: "Contains all currently authorized Leases for a particular I2P Destination" +--- + +### The Basics + +A Lease-Set contains a set of authorized @leases (and other related information) for a particular @destination. + +### In-depth information + +A Lease-Set contains: + +- all of the currently authorized @leases for a particular @destination +- the public key to which garlic messages can be encrypted (see @garlic-routing) +- the signing public key that can be used to revoke this particular version of the structure + +The Lease-Set is one of the two structures stored in the @network-database (the other being @router-info), and is keyed under the SHA256 of the contained @destination. + +### Notes + +For further details, read @Java-I2P's [LeaseSet](https://geti2p.net/en/docs/how/network-database#leaseSet) diff --git a/_i18n/template/resources/moneropedia/lease.md b/_i18n/template/resources/moneropedia/lease.md new file mode 100644 index 00000000..d3cdc545 --- /dev/null +++ b/_i18n/template/resources/moneropedia/lease.md @@ -0,0 +1,15 @@ +--- +layout: moneropedia +entry: "Lease" +tags: ["kovri"] +terms: ["Lease", "Leases"] +summary: "Authorizes an I2P tunnel to receive messages targeting a destination" +--- + +### The Basics + +A lease defines the authorization for a particular @I2P @tunnel to receive a @messages targeting a @destination. + +### In-depth information + +For further details, read @Java-I2P's [Lease](https://geti2p.net/spec/common-structures#lease) diff --git a/_i18n/template/resources/moneropedia/locally-unique-host.md b/_i18n/template/resources/moneropedia/locally-unique-host.md new file mode 100644 index 00000000..3ce7f860 --- /dev/null +++ b/_i18n/template/resources/moneropedia/locally-unique-host.md @@ -0,0 +1,22 @@ +--- +layout: moneropedia +entry: "Locally-unique host" +tags: ["kovri"] +terms: ["Locally-unique-host"] +summary: "A host defined by you and resolved only by you" +--- + +### The Basics + +A locally-unique host is a [FQDN](https://en.wikipedia.org/wiki/FQDN) defined by **you** and resolved only by you; similar to how a [hosts file](https://en.wikipedia.org/wiki/etc/hosts) is implemented. Not to be confused with @canonically-unique-host. + +### In-depth information + +You have the option to share your interpretation of how the host is resolved (e.g., `localhost` always resolves to `127.0.0.1`) but the resolution is not canonically enforced (e.g., someone else can map `localhost` to any arbitrary IP address). + +Hosts in a public subscription can be considered @canonically-unique-host's within the @I2P network but, ultimately, you are free to re-define them as you wish. + +### Notes + +- Monero primarily uses @canonically-unique-host resolution while @I2P only uses @locally-unique-host resolution. +- @I2P's and @Kovri's assigned top-level domain is currently `.i2p` and @Kovri intends to only process/use the `.i2p` [top-level domain](https://en.wikipedia.org/wiki/Top_level_domain) diff --git a/_i18n/template/resources/moneropedia/message.md b/_i18n/template/resources/moneropedia/message.md new file mode 100644 index 00000000..c9504d54 --- /dev/null +++ b/_i18n/template/resources/moneropedia/message.md @@ -0,0 +1,33 @@ +--- +layout: moneropedia +entry: "Message" +tags: ["kovri"] +terms: ["Message", "Messages"] +summary: "The mechanisms in which information travels within I2P" +--- + +### The Basics + +*Messages* (which exist on top of the @transports layer), contain varying types of information that are needed for the network but, most importantly, everything you see, do, send, or receive, will come and go in the form of *messages*. + +There are 2 essential types of *messages* in @I2P: + +- @Tunnel messages +- @I2NP messages + +Essentially: *@tunnel messages* **contain** @I2NP **message fragments** which are then [reassembled](https://geti2p.net/en/docs/tunnels/implementation) at certain points within a @tunnel's path. + +### In-depth information + +@I2NP messages have a close relationship with @tunnel @messages so it is easy to get the term *messages* confused when reading @Java-I2P specifications: + +> +1. First, the tunnel gateway accumulates a number of I2NP messages and preprocesses them into tunnel messages for delivery. +2. Next, that gateway encrypts that preprocessed data, then forwards it to the first hop. +3. That peer, and subsequent tunnel participants, unwrap a layer of the encryption, verifying that it isn't a duplicate, then forward it on to the next peer. +4. Eventually, the tunnel messages arrive at the endpoint where the I2NP messages originally bundled by the gateway are reassembled and forwarded on as requested. + +### Notes + +- @I2NP @messages need to be fragmented because they are variable in size (from 0 to almost 64 KB) and @tunnel @messages are fixed-size (approximately 1 KB). +- For details and specifications, visit the [I2NP spec](https://geti2p.net/spec/i2np) and [Tunnel Message spec](https://geti2p.net/spec/tunnel-message) diff --git a/_i18n/template/resources/moneropedia/miners.md b/_i18n/template/resources/moneropedia/miners.md new file mode 100644 index 00000000..5937ce6d --- /dev/null +++ b/_i18n/template/resources/moneropedia/miners.md @@ -0,0 +1,20 @@ +--- +layout: moneropedia +entry: "Mining" +terms: ["mining", "miner", "miners"] +summary: "the process of cryptographically computing a mathematical proof for a block, containing a number of transactions, which is then added to the blockchain" +--- + +### The Basics + +Mining is the distributed process of confirming transactions on the public ledger of all transactions, aka @blockchain. Monero nodes use the block chain to distinguish legitimate transactions from attempts to re-spend coins that have already been spent elsewhere. + +Monero is powered strictly by Proof of Work. It employs a mining algorithm that has the potential to be efficiently tasked to billions of existing devices (any modern x86 CPU and many GPU's). Monero uses the @CryptoNight Proof of Work (@PoW) algorithm, which is designed for use in ordinary CPUs and GPUs. + +The smart mining feature allows transparent CPU mining on the user's computer, far from the de facto centralization of mining farms and pool mining, pursuing Satoshi Nakamoto's original vision of a true P2P currency. + +As of June 2017, botnets made of hacked computers account for a not-insignificant portion of the miners on the Monero network. This is due to the profitability of mining on CPUs via the @CryptoNight algorithm. + + + +{{ page.summary | capitalize }}. diff --git a/_i18n/template/resources/moneropedia/mnemonicseed.md b/_i18n/template/resources/moneropedia/mnemonicseed.md new file mode 100644 index 00000000..608f8d8b --- /dev/null +++ b/_i18n/template/resources/moneropedia/mnemonicseed.md @@ -0,0 +1,20 @@ +--- +layout: moneropedia +entry: "Mnemonic Seed" +terms: ["mnemonic-seed", "mnemonic"] +summary: "a 13 or 25 word phrase used to backup a Monero account, available in a number of languages" +--- + +### The Basics + +{{ page.summary | capitalize }}. This 25-word phrase (13 words in the case of MyMonero) has all the information needed to view and spend funds from a Monero @account. + +### In-depth Information + +In the official wallet, the mnemonic seed comprises 25 words with the last word being used as a checksum. Those words correspond to a 256-bit integer, which is the account's *private* @spend-key. The *private* @view-key is derived by hashing the private spend key with Keccak-256, producing a second 256-bit integer. The corresponding *public* keys are then derived from the private keys. + +By storing the 25 word mnemonic key in a secure location, you have a backup of your private keys and hence all of your Moneroj. Sharing this 25 word key is the equivalent of allowing another person complete access to your funds. + +It's not a good idea to store more than you want to lose in a "hot wallet" aka a wallet which is currently or has ever been connected to the internet or loaded onto any device that has or may in the future be connected to the internet or any untrusted source! + +By creating a cold, or @paper-wallet you can safely store Moneroj. diff --git a/_i18n/template/resources/moneropedia/network-database.md b/_i18n/template/resources/moneropedia/network-database.md new file mode 100644 index 00000000..a5bb078c --- /dev/null +++ b/_i18n/template/resources/moneropedia/network-database.md @@ -0,0 +1,25 @@ +--- +layout: moneropedia +entry: "Network Database" +tags: ["kovri"] +terms: ["Network-Database"] +summary: "A distributed database which contains needed router information so the network can stay intact" +--- + +### The Basics + +@network-database is a [distributed database](https://en.wikipedia.org/wiki/Distributed_database) which contains router information that peers must use so the network can stay intact. + +### In-depth information + +From @Java-I2P: + +> +@I2P's @network-database is a specialized distributed database, containing just two types of data - router contact information (@Router-Infos) and @destination contact information (@LeaseSets). Each piece of data is signed by the appropriate party and verified by anyone who uses or stores it. In addition, the data has liveliness information within it, allowing irrelevant entries to be dropped, newer entries to replace older ones, and protection against certain classes of attack. + +> +The @network-database is distributed with a simple technique called "@floodfill", where a subset of all routers, called "@floodfill routers", maintains the distributed database. + +### Notes + +Read [Network-Database](https://geti2p.net/en/docs/how/network-database) for details. diff --git a/_i18n/template/resources/moneropedia/node.md b/_i18n/template/resources/moneropedia/node.md new file mode 100644 index 00000000..dde76903 --- /dev/null +++ b/_i18n/template/resources/moneropedia/node.md @@ -0,0 +1,25 @@ +--- +layout: moneropedia +entry: "Node" +terms: ["node", "nodes", "full-node", "full-nodes"] +summary: "a device on the Internet running the Monero software, with a full copy of the Monero blockchain, actively assisting the Monero network" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +### More Information + +Nodes participate in the Monero network and secure @transactions by enforcing the rules of the network. Nodes download the entire @blockchain to know what transactions have taken place. Nodes assist the network by relaying transactions to other nodes on the network. Nodes may also choose contribute to the Monero network by participating in crafting @blocks (this is called @mining). + +Mining is the process by which nodes create a block from the previously accepted block, transactions that are waiting to be processed in the @tx-pool, and the @coinbase. When a node believes it has crafted a valid block it will transmit the completed block to other nodes on the network and those nodes signal agreement by working on the next block in the chain. + +The rules that nodes follow are built into the Monero software; When all nodes agree about the rules to follow this is called @consensus). Consensus is necessary for a cryptocurrency because it is how the blockchain is built; If nodes don't agree about which blocks are valid, for example people who have not updated their Monero software, those nodes that don't agree will no longer be able to participate in the Monero network. + +The Monero Core Team plans for a @hardforks every 6 months, to occur in September and March of each year. At that time, if you are running a node it must be updated to the most recent version of the Monero software or it will no longer be able to participate in the network. + +--- + +##### Other Resources +1. *Fluffypony gives a great explanation of why mandatory hardforks are good for Monero.* ([Monero Missives for the Week of 2016-06-20](https://getmonero.org/2016/06/20/monero-missive-for-the-week-of-2016-06-20.html)) diff --git a/_i18n/template/resources/moneropedia/ntcp.md b/_i18n/template/resources/moneropedia/ntcp.md new file mode 100644 index 00000000..69f3152c --- /dev/null +++ b/_i18n/template/resources/moneropedia/ntcp.md @@ -0,0 +1,34 @@ +--- +layout: moneropedia +entry: "NTCP" +tags: ["kovri"] +terms: ["NTCP"] +summary: "NIO-Based TCP (Non-blocking I/O based TCP): one of two Kovri transports" +--- + +### The Basics + +*NIO-Based TCP (Non-blocking I/O based TCP)* is one of two encrypted @transports for @Kovri. + +Similar to @SSU, @NTCP's *primary* purpose is to securely transmit @in-net @I2NP messages through @tunnels but, unlike @SSU, @NTCP functions solely over encrypted [TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol). + +### In-depth information + + - Passes along individual @I2NP messages (both Standard and Time Sync) after: + - TCP has been established + - Establishment Sequence has been completed + - Uses the following @encryption: + - 2048-bit [Diffie-Hellman](https://en.wikipedia.org/wiki/Diffie-hellman) + - [AES-256](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)/[CBC](https://en.wikipedia.org/wiki/Block_cipher_modes_of_operation) + - Establishment Sequence has the following *states*: + - Pre-establishment + - Establishment + - Post-establishment or "Established" + - Uses the following from the @network-database: + - Transport name: NTCP + - Host: IP (IPv4 or IPv6) or host name (shortened IPv6 address (with "::") is allowed) + - Port: 1024 - 65535 + +### Notes + +For further details, read @Java-I2P's [NTCP](https://geti2p.net/en/docs/transport/ntcp) diff --git a/_i18n/template/resources/moneropedia/openalias.md b/_i18n/template/resources/moneropedia/openalias.md new file mode 100644 index 00000000..2410130c --- /dev/null +++ b/_i18n/template/resources/moneropedia/openalias.md @@ -0,0 +1,20 @@ +--- +layout: moneropedia +entry: "OpenAlias" +terms: ["OpenAlias"] +summary: "a standard that allows you to use an email or domain syntax to pay someone instead of an address, eg. donate@getmonero.org or donate.getmonero.org" +--- + +### The Basics + +The Monero Core Team released a standard called OpenAlias which permits much more human-readable addresses and "squares" the Zooko's triangle. OpenAlias can be used for any cryptocurrency and is already implemented in Monero, Bitcoin (in latest Electrum versions) and HyperStake. + +OpenAlias seeks to provide a way to simplify aliasing amidst a rapidly shifting technology climate. Users are trying to cross the bridge to private and cryptographically secure infrastructure and systems, but many of them have just barely started remembering the email addresses of their friends and family. + +As part of the ongoing development of the Monero cryptocurrency project, we asked ourselves: how can we simplify payments for users unfamiliar with cryptocurrency? Monero stealth addresses are at least 95 characters long - memorizing them is not an option, and asking someone to send a payment to <95-character-string> is only going to lead to confusion. + +At its most basic, OpenAlias is a TXT DNS record on a FQDN (fully qualified domain name). By combining this with DNS-related technologies we have created an aliasing standard that is extensible for developers, intuitive and familiar for users, and can interoperate with both centralized and decentralized domain systems. + +{{ page.summary | capitalize }}. + +More information can be found on the [OpenAlias page](/knowledge-base/openalias) or on the [OpenAlias website](https://openalias.org) diff --git a/_i18n/template/resources/moneropedia/paperwallet.md b/_i18n/template/resources/moneropedia/paperwallet.md new file mode 100644 index 00000000..95ff00ba --- /dev/null +++ b/_i18n/template/resources/moneropedia/paperwallet.md @@ -0,0 +1,7 @@ +--- +layout: moneropedia +entry: "Paper Wallet" +terms: ["paperwallet", "paperwallets", "paper-wallet", "paper-wallets"] +summary: "A paper wallet stores the information necessary to send and receive Monero" +--- + diff --git a/_i18n/template/resources/moneropedia/paymentid.md b/_i18n/template/resources/moneropedia/paymentid.md new file mode 100644 index 00000000..fba888fa --- /dev/null +++ b/_i18n/template/resources/moneropedia/paymentid.md @@ -0,0 +1,25 @@ +--- +layout: moneropedia +entry: "Payment ID" +terms: ["payment-ID", "payment-IDs"] +summary: "an optional flag that is added to identify transactions to merchants, consisting of 64 hexadecimal characters" +--- + +### The Basics + +Payment ID is an **arbitrary** and **optional** transaction attachment that consists of 32 bytes (64 hexadecimal characters) or 8 bytes (in the case of integrated addresses). + +The Payment ID is usually used to identify transactions to merchants and exchanges: Given the intrinsic privacy features built into Monero, where a single public address is usually used for incoming transactions, the Payment ID is especially useful to tie incoming payments with user accounts. + +### Compact Payment ID's and Integrated Addresses + +Since the 0.9 Hydrogen Helix version, the Payment IDs can be encrypted and embedded in a payment address. The payment ID's of this type should be 64-bits and are encrypted with a random one-time key known only to the sender and receiver. + +### Creating a Payment ID +It is recommended to use the official wallet's `integrated_address` command to automatically generate Integrated Addresses that contain Compact Payment ID's. If you want to use the command line, you can generate Payment ID's as follows: + +Creating a compact Payment ID for an Integrated Address: +```# openssl rand -hex 8``` + +Creating an old-style Payment ID: +```# openssl rand -hex 32``` diff --git a/_i18n/template/resources/moneropedia/pedersen-commitment.md b/_i18n/template/resources/moneropedia/pedersen-commitment.md new file mode 100644 index 00000000..a7ff98ba --- /dev/null +++ b/_i18n/template/resources/moneropedia/pedersen-commitment.md @@ -0,0 +1,24 @@ +--- +layout: moneropedia +entry: "Pedersen Commitment" +terms: ["commitments", "commitment", "pedersen"] +summary: "Pedersen commitments are cryptographic algorythms that allow a prover to commit to a certain value without revealing it or being able to change it." +--- + +### The Basics + +When you spend Monero, the value of the inputs that you are spending and the value of the outputs you are sending are encrypted and opaque to everyone except the recipient of each of those outputs. Pedersen commitments allow you to send Monero without revealing the value of the transactions. Pedersen commitments also make it possible for people to verify that transactions on the blockchain are valid and not creating Monero out of thin air. + +### What It Means + +As long as the encrypted output amounts created, which include an output for the recipient and a change output back to the sender, and the unencrypted transaction fee is equal to the sum of the inputs that are being spent, it is a legitimate transaction and can be confirmed to not be creating Monero out of thin air. + +Pedersen commitments mean that the sums can be verified as being equal, but the Monero value of each of the sums and the Monero value of the inputs and outputs individually are undeterminable. Pedersen commitments also mean that even the ratio of one input to another, or one output to another is undeterminable. + +Even though it's unclear which inputs are really being spent (the ring signature lists both the real inputs being spent and decoy inputs therefore you don't actually know which input Pedersen commitments you need to sum) that's okay, because the RingCT ring signature only has to prove is that for one combination of the inputs the outputs are equal to the sum of the inputs. For mathematical reasons, this is impossible to forge. + +### In-depth Information + +See information in [Ring Confidential Transactions paper](https://eprint.iacr.org/2015/1098.pdf) by Shen Noether of the Monero Research Lab. + +{{ page.summary | capitalize }}. diff --git a/_i18n/template/resources/moneropedia/reseed.md b/_i18n/template/resources/moneropedia/reseed.md new file mode 100644 index 00000000..eb3b5d98 --- /dev/null +++ b/_i18n/template/resources/moneropedia/reseed.md @@ -0,0 +1,17 @@ +--- +layout: moneropedia +entry: "Reseed" +tags: ["kovri"] +terms: ["Reseed"] +summary: "The method of which Kovri uses to bootstrap into the I2P network" +--- + +### The Basics + +When you start @Kovri for the first time (or if it's been offline for a long time), @Kovri will need a list of peers to connect to so it can [bootstrap](https://en.wikipedia.org/wiki/Bootstrap) into the @I2P network. @Kovri gets these peers from a special file stored on a reseed server. On this file are all the various pieces of information @Kovri needs in order to connect with @I2P peers. + +### In-depth information + +@Kovri has a list of [hard-coded](https://en.wikipedia.org/wiki/Hard-coded) reseed servers available to fetch from. These servers securely serve an [SU3](https://geti2p.net/spec/updates#su3) file (signed with a cryptographic @signature) over @clearnet with [HTTPS](https://en.wikipedia.org/wiki/HTTPS). This SU3 file contains information that's used to verify both the integrity of the file and its content. + +Aside from the technical elements needed to verify and process the file, the file's main contents consist of a series of @router-info files which @Kovri and @I2P routers use to locate and communicate with other @I2P peers. These peers are then stored into a @network-database. diff --git a/_i18n/template/resources/moneropedia/ring-size.md b/_i18n/template/resources/moneropedia/ring-size.md new file mode 100644 index 00000000..a1601651 --- /dev/null +++ b/_i18n/template/resources/moneropedia/ring-size.md @@ -0,0 +1,11 @@ +--- +layout: moneropedia +entry: "Ring Size" +terms: ["ring-size"] +summary: "total number of possible signers in a ring signature" +--- + +### The Basics +Ring size refers to the total number of possible signers in a @ring-signature. If a ring size of 4 is selected for a given @transaction, this means that there are 3 foreign outputs in addition to your “real” output. A higher ring size number will typically provide more privacy than a lower number. However, reusing an odd, recognizable ring size number for transactions could possibly make transactions stand out. + +`Ring size = foreign outputs + 1 (your output)` \ No newline at end of file diff --git a/_i18n/template/resources/moneropedia/ringCT.md b/_i18n/template/resources/moneropedia/ringCT.md new file mode 100644 index 00000000..77b9bf32 --- /dev/null +++ b/_i18n/template/resources/moneropedia/ringCT.md @@ -0,0 +1,24 @@ +--- +layout: moneropedia +entry: "Ring CT" +terms: ["ringCT", "ring-CT"] +summary: "a way to hide the amount sent in a Monero transaction" +--- + +### The Basics +RingCT, short for Ring Confidential Transactions, is how transaction amounts are hidden in Monero. + +Ring CT was implemented in block #1220516 in January 2017. After September 2017, this feature became mandatory for all transactions on the network. + +RingCT introduces an improved version of @ring-signatures called A Multi-layered Linkable Spontaneous Anonymous Group signature, which allows for hidden amounts, origins and destinations of transactions with reasonable efficiency and verifiable, trustless coin generation. + +For more information, please read the creator Shen Noether's paper [here](https://eprint.iacr.org/2015/1098). + + +{{ page.summary | capitalize }}. + + + + + + diff --git a/_i18n/template/resources/moneropedia/ringsignatures.md b/_i18n/template/resources/moneropedia/ringsignatures.md new file mode 100644 index 00000000..fee368c8 --- /dev/null +++ b/_i18n/template/resources/moneropedia/ringsignatures.md @@ -0,0 +1,18 @@ +--- +layout: moneropedia +entry: "Ring Signature" +terms: ["ring-signature", "ring-signatures"] +summary: "a group of cryptographic signatures with at least one real participant, but no way to tell which in the group is the real one as they all appear valid" +--- + +### The Basics + +In cryptography, a ring signature is a type of digital signature that can be performed by any member of a group of users that each have keys. Therefore, a message signed with a ring signature is endorsed by someone in a particular group of people. One of the security properties of a ring signature is that it should be computationally infeasible to determine *which* of the group members' keys was used to produce the signature. + +For instance, a ring signature could be used to provide an anonymous signature from "a high-ranking White House official", without revealing which official signed the message. Ring signatures are right for this application because the anonymity of a ring signature cannot be revoked, and because the group for a ring signature can be improvised (requires no prior setup). + +### Application to Monero + +A ring signature makes use of your @account keys and a number of public keys (also known as outputs) pulled from the @blockchain using a triangular distribution method. Over the course of time, past outputs could be used multiple times to form possible signer participants. In a "ring" of possible signers, all ring members are equal and valid. There is no way an outside observer can tell which of the possible signers in a signature group belongs to your @account. So, ring signatures ensure that transaction outputs are untraceable. Moreover, there are no fungibility issues with Monero given that every transaction output has plausible deniability (e.g. the network can not tell which outputs are spent or unspent). + +To read how Monero gives you privacy by default (unlinkability), see @stealth-addresses. \ No newline at end of file diff --git a/_i18n/template/resources/moneropedia/router-info.md b/_i18n/template/resources/moneropedia/router-info.md new file mode 100644 index 00000000..f7c45c06 --- /dev/null +++ b/_i18n/template/resources/moneropedia/router-info.md @@ -0,0 +1,68 @@ +--- +layout: moneropedia +entry: "Router-Info" +tags: ["kovri"] +terms: ["Router-Info", "Router-infos"] +summary: "A data structure or file which contains an I2P peer's needed network information" +--- + +### The Basics + +@Router-Info is a data structure (periodically written to a [binary file](https://en.wikipedia.org/wiki/Binary_file)) which contains all needed information to locate, identify, and communicate with an @I2P peer. @Router-Info includes IP address, router identity, other misc. technical details; is needed for @network-database and is published to @floodfill routers. + +### In-depth information + +In human-readable form, Router-Info may look like this: + +``` +Identity: [RouterIdentity: +Hash: nYZ5Qe7gQ-~QgfgJVRUG4c0JnVeVqzM~duUX1EGT1ek= +Certificate: [Certificate: type: Key certificate +Crypto type: 0 +Sig type: 7 (EdDSA_SHA512_Ed25519)] +PublicKey: [PublicKey: size: 256] +SigningPublicKey: [SigningPublicKey EdDSA_SHA512_Ed25519: size: 32] +Padding: 96 bytes] +Signature: [Signature EdDSA_SHA512_Ed25519: size: 64] +Published: Sun Oct 09 01:34:59 UTC 2016 +Options (5): + [caps] = [LfR] + [netId] = [2] + [netdb.knownLeaseSets] = [37] + [netdb.knownRouters] = [2435] + [router.version] = [0.9.26] +Addresses (4): +[RouterAddress: +Type: SSU +Cost: 4 +Options (5): + [caps] = [BC] + [host] = [2a01:e35:8b5c:b240:71a2:6750:8d4:47fa] + [key] = [nYZ5Qe7gQ-~QgfgJVRUG4c0JnVeVqzM~duUX1EGT1ek=] + [mtu] = [1472] + [port] = [22244]] +[RouterAddress: +Type: NTCP +Cost: 9 +Options (2): + [host] = [2a01:e35:8b5c:b240:71a2:6750:8d4:47fa] + [port] = [22244]] +[RouterAddress: +Type: SSU +Cost: 6 +Options (4): + [caps] = [BC] + [host] = [88.181.203.36] + [key] = [nYZ5Qe7gQ-~QgfgJVRUG4c0JnVeVqzM~duUX1EGT1ek=] + [port] = [22244]] +[RouterAddress: +Type: NTCP +Cost: 11 +Options (2): + [host] = [88.181.203.36] + [port] = [22244]]] +``` + +### Notes + +For details and specification, visit @Java-I2P [Network Database](https://geti2p.net/en/docs/how/network-database) page. diff --git a/_i18n/template/resources/moneropedia/scalability.md b/_i18n/template/resources/moneropedia/scalability.md new file mode 100644 index 00000000..efce0202 --- /dev/null +++ b/_i18n/template/resources/moneropedia/scalability.md @@ -0,0 +1,10 @@ +--- +layout: moneropedia +entry: "Scalability" +terms: ["scalability"] +summary: "Growth potential of Monero, resources required, and methods of increasing efficiency" +--- + +### The Basics + +Monero has no hardcoded maximum block size, which means that unlike Bitcoin it does not have a 1 MB block size limit preventing scaling. However, a block reward penalty mechanism is built into the protocol to avoid a too excessive block size increase: The new block's size (NBS) is compared to the median size M100 of the last 100 blocks. If NBS>M100, the block reward gets reduced in quadratic dependency of how much NBS exceeds M100. E.g. if NBS is [10%, 50%, 80%, 100%] greater than M100, the nominal block reward gets reduced by [1%, 25%, 64%, 100%]. Generally, blocks greater than 2*M100 are not allowed, and blocks <= 60kB are always free of any block reward penalties. diff --git a/_i18n/template/resources/moneropedia/signature.md b/_i18n/template/resources/moneropedia/signature.md new file mode 100644 index 00000000..638b7c5b --- /dev/null +++ b/_i18n/template/resources/moneropedia/signature.md @@ -0,0 +1,10 @@ +--- +layout: moneropedia +entry: "Cryptographic Signature" +terms: ["signature", "signatures"] +summary: "a cryptographic method for proving ownership of a piece of information, as well as proving that the information has not been modified after being signed" +--- + +### The Basics + +{{ page.summary | capitalize }}. \ No newline at end of file diff --git a/_i18n/template/resources/moneropedia/smartmining.md b/_i18n/template/resources/moneropedia/smartmining.md new file mode 100644 index 00000000..c4f7a6d2 --- /dev/null +++ b/_i18n/template/resources/moneropedia/smartmining.md @@ -0,0 +1,17 @@ +--- +layout: moneropedia +entry: "Smart Mining" +terms: ["smart-mining"] +summary: "a process of having a throttled miner mine when it otherwise does not cause drawbacks" +--- + +### The Basics + +Smart mining is the process of having a throttled miner mine when it otherwise does not cause drawbacks. +Drawbacks include increases heat, slower machine, depleting battery, etc. The intent of smart mining is to increase network security by allowing as many people as possible to let the smart miner on all the time. For this to work, the miner must prove unobtrusive, or it will be turned off, depriving the Monero network from a little bit of security. As such, it is likely that a smart miner will mine slower than a normal miner on the same hardware. + +Smart mining is available in the official CLI and GUI wallet, which are available in the [downloads page](https://getmonero.org/downloads/). + +It is hoped that the relative slowness of a smart miner (especially on low-power machines) will be offset by the large amount of people running a miner for a possible "lottery win", and thus increase the Monero network security by a non trivial amount. The increased hash rate from many different sources helps keep the Monero network decentralized. + +{{ page.summary | capitalize }}. diff --git a/_i18n/template/resources/moneropedia/spendkey.md b/_i18n/template/resources/moneropedia/spendkey.md new file mode 100644 index 00000000..d57544d1 --- /dev/null +++ b/_i18n/template/resources/moneropedia/spendkey.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Spend Key" +terms: ["spend-key", "spend-keys"] +summary: "one of the two pairs of private and public cryptographic keys that each account has, with the *private* spend key used to spend any funds in the account" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +### In-depth Information + +The *private* spend key is a 256-bit integer that is used to sign Monero transactions. With the current deterministic key derivation method of the official wallet, the private spend key is also an alternate representation of the @mnemonic-seed. It can be used to derive all other account keys. + + diff --git a/_i18n/template/resources/moneropedia/ssu.md b/_i18n/template/resources/moneropedia/ssu.md new file mode 100644 index 00000000..665f9c44 --- /dev/null +++ b/_i18n/template/resources/moneropedia/ssu.md @@ -0,0 +1,26 @@ +--- +layout: moneropedia +entry: "SSU" +tags: ["kovri"] +terms: ["SSU"] +summary: "Secure Semi-reliable UDP: one of two Kovri transports" +--- + +### The Basics + +*Secure Semi-reliable UDP* is one of two encrypted @transports for @Kovri. + +Similar to @NTCP, @SSU's *primary* purpose is to securely transmit @in-net @I2NP messages through @tunnels but, unlike @NTCP, @SSU functions solely over encrypted [UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol). + +### In-depth information + +- Like @NTCP, @SSU is a connection-oriented, point-to-point data transport +- Termed *semi-reliable* because @SSU will repeatedly retransmit *unacknowledged* messages (up to maximum number then dropped) +- @SSU also provides several unique services (in addition to its function as a @transport layer): + - IP detection (local inspection or with [peer testing](https://geti2p.net/en/docs/transport/ssu#peerTesting)) + - [NAT](https://en.wikipedia.org/wiki/Network_address_translation) traversal (using [introducers](https://geti2p.net/en/docs/transport/ssu#introduction)) + - [Firewall](https://en.wikipedia.org/wiki/Firewall_%28computing%29) status and, if implemented, @SSU can notify @NTCP if the external address or firewall status changes + +### Notes + +For further details, read @Java-I2P's [SSU](https://geti2p.net/en/docs/transport/ssu) diff --git a/_i18n/template/resources/moneropedia/stealthaddress.md b/_i18n/template/resources/moneropedia/stealthaddress.md new file mode 100644 index 00000000..61892d1b --- /dev/null +++ b/_i18n/template/resources/moneropedia/stealthaddress.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Stealth Address" +terms: ["stealth-address", "stealth-addresses"] +summary: "automatic one-time addresses for every transaction" +--- + +### The Basics + +Stealth addresses are an important part of Monero's inherent privacy. They allow and require the sender to create random one-time addresses for every @transaction on behalf of the recipient. The recipient can publish just one address, yet have all of his/her incoming payments go to unique addresses on the @blockchain, where they cannot be linked back to either the recipient's published address or any other transactions' addresses. By using stealth addresses, only the sender and receiver can determine where a payment was sent. + +When you create a Monero account you’ll have a private @view-key, a private @spend-key, and a Public Address. The @spend-key is used to send payments, the @view-key is used to display incoming transactions destined for your account, and the Public Address is for receiving payments. Both the @spend-key and @view-key are used to build your Monero address. You can have a “watch only” wallet that only uses the @view-key. This feature can be used for accounting or auditing purposes but is currently unreliable due to the inability to track outgoing transactions. You can decide who can see your Monero balance by sharing your @view-key. Monero is private by default and optionally semi-transparent! + +When using the Monero Wallet all this is handled by the software. Sending Monero is as easy as entering the destination address, the amount, and pressing Send. To recieve Monero, simply provide the sender your Public Address. + +To learn how Monero prevents tracking history (untraceability), see @ring-signatures. diff --git a/_i18n/template/resources/moneropedia/subscription.md b/_i18n/template/resources/moneropedia/subscription.md new file mode 100644 index 00000000..b7411df5 --- /dev/null +++ b/_i18n/template/resources/moneropedia/subscription.md @@ -0,0 +1,47 @@ +--- +layout: moneropedia +entry: "Subscription" +tags: ["kovri"] +terms: ["Subscription"] +summary: "A file used by address book which contains I2P hosts paired with I2P destinations" +--- + +### The Basics + +A subscription is a file which contains a list of `.i2p` hosts paired with their respective @destination. Subscriptions are used by the @address-book. + +### In-depth information + +Similar to how a [hosts file](https://en.wikipedia.org/wiki/etc/hosts) can map an internet hostname to a specified address, a subscription matches a `.i2p` address to @base64-address by using the following format (no spaces allowed): `host=address` + +More specifically, a subscription pairs a @locally-unique-host to @base64-address. + +Example: + +``` +anonimal.i2p=AQZGLAMpI9Q0l0kmMj1vpJJYK3CjLp~fE3MfvE-e7KMKjI5cPOH6EN8m794uHJ6b09qM8mb9VEv1lVLEov~usVliTSXCSHuRBOCIwIOuDNU0AbVa4BpIx~2sU4TxKhoaA3zQ6VzINoduTdR2IJhPvI5xzezp7dR21CEQGGTbenDslXeQ4iLHFA2~bzp1f7etSl9T2W9RID-KH78sRQmzWnv7dbhNodMbpO6xsf1vENf6bMRzqD5vgHEHZu2aSoNuPyYxDU1eM6--61b2xp9mt1k3ud-5WvPVg89RaU9ugU5cxaHgR927lHMCAEU2Ax~zUb3DbrvgQBOTHnJEx2Fp7pOK~PnP6ylkYKQMfLROosLDXinxOoSKP0UYCh2WgIUPwE7WzJH3PiJVF0~WZ1dZ9mg00c~gzLgmkOxe1NpFRNg6XzoARivNVB5NuWqNxr5WKWMLBGQ9YHvHO1OHhUJTowb9X90BhtHnLK2AHwO6fV-iHWxRJyDabhSMj1kuYpVUBQAEAAcAAA== +``` + +1. `anonimal.i2p` is the @locally-unique-host +2. `=` is the separator +3. Everything that remains is the @base64-address + +### Subscription types + +For @Kovri, there are two types of subscription files: *public* and *private*. + +A *public* subscription: +- is used when bootstrapping to use essential services (IRC, email, Monero, etc.) +- is static and is refreshed every 12 hours from Monero's @address-book server +- allows you to safely share the subscription with everyone as it is publically available (anyone who shares the same public subscription will also be able to resolve the same hostname to the same destination as you) + +A *private* subscription: +- is used exclusively by you and is not shared with others unless you explicitly choose to share the file +- default file is `private_hosts.txt` in your @data-directory + +### Updating a private subscription + +You can use a @jump-service to manually update your private subscription. The updated subscription will then be fed into the @address-book for you to use. + +### Notes +To learn how to subscribe to multiple subscriptions, see the [user-guide](https://github.com/monero-project/kovri/blob/master/doc/USER_GUIDE.md). diff --git a/_i18n/template/resources/moneropedia/tail-emission.md b/_i18n/template/resources/moneropedia/tail-emission.md new file mode 100644 index 00000000..019e6fe1 --- /dev/null +++ b/_i18n/template/resources/moneropedia/tail-emission.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "Tail Emission" +terms: ["Tail-Emission"] +summary: "the block reward at the end of the emission curve" +--- + +### The Basics + +Monero block rewards will never drop to zero. Block rewards will gradually drop until tail emission commences at the end of May 2022. At this point, rewards will be fixed at 0.6 XMR per block. + +### Why + +Miners need an incentive to mine. Because of the dynamic blocksize, competition between miners will cause fees to decrease. If mining is not profitable due to a high cost and low reward, miners lose their incentive and will stop mining, reducing the security of the network. + +Tail emission ensures that a dynamic block size and fee market can develop. diff --git a/_i18n/template/resources/moneropedia/transaction.md b/_i18n/template/resources/moneropedia/transaction.md new file mode 100644 index 00000000..0064cb50 --- /dev/null +++ b/_i18n/template/resources/moneropedia/transaction.md @@ -0,0 +1,21 @@ +--- +layout: moneropedia +entry: "Transactions" +terms: ["transaction", "transactions"] +summary: "a cryptographically signed container that details the transfer of Monero to a recipient (or recipients)" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +The parameters of a transaction contain one or more recipient addresses with corresponding amounts of funds and a `mixin_count` parameter that specifies the number of foreign outputs bound to the transaction. The more outputs that are used, a higher degree of obfuscation is possible, but that comes with a cost. Since a transaction gets larger with more outputs, the transaction fee would be higher. It is possible to form a transaction offline, which is a huge benefit for privacy. + +A transaction can be uniquely identified with the use of an optional Transaction ID, which is usually represented by a 32-byte string (64 hexadecimal characters). + +### In-depth Information +Every transaction involves two keys: a public @spend-key, and a public @view-key. The destination for an output in a transaction is actually a one-time public key computed from these two keys. + +When a wallet is scanning for incoming transactions, every transaction is scanned to see if it is for "you". This only requires your private view key and your public spend key, and this check is immutable and cannot be faked. You cannot receive transactions and identify them without a corresponding private view key. + +In order to spend the funds you have to compute a one-time private spend key for that output. This is almost always done automatically by the Monero Wallet software. diff --git a/_i18n/template/resources/moneropedia/transports.md b/_i18n/template/resources/moneropedia/transports.md new file mode 100644 index 00000000..59504f99 --- /dev/null +++ b/_i18n/template/resources/moneropedia/transports.md @@ -0,0 +1,20 @@ +--- +layout: moneropedia +entry: "Transports" +tags: ["kovri"] +terms: ["Transports", "Transport"] +summary: "The two encrypted transport layers for Kovri" +--- + +### The Basics + +@I2P comes with two encrypted transport layer technologies that allow @Kovri to securely use [TCP/IP](https://en.wikipedia.org/wiki/Tcp/ip) connections. These technologies (@SSU and @NTCP) are called *@transports*. + +### In-depth information + +@SSU is encrypted [UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol) and @NTCP is encrypted [TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol). They provide @encryption at the [transport layer](https://en.wikipedia.org/wiki/Transport_layer) so higher level @messages can be sent through @tunnels across the @I2P network. + +### Notes + +- Read about @I2P's transports on the [Transport](https://geti2p.net/en/docs/transport) page +- Read about the transports layer within the [OSI model](https://en.wikipedia.org/wiki/OSI_model) diff --git a/_i18n/template/resources/moneropedia/tunnel.md b/_i18n/template/resources/moneropedia/tunnel.md new file mode 100644 index 00000000..d22e2b94 --- /dev/null +++ b/_i18n/template/resources/moneropedia/tunnel.md @@ -0,0 +1,37 @@ +--- +layout: moneropedia +entry: "Tunnel" +tags: ["kovri"] +terms: ["Tunnel", "Tunnels"] +summary: "Uni-directional virtual paths that pass messages through a defined sequence of I2P routers" +--- + +### The Basics + +When you communicate over @I2P (visit an @eepsite / use a @garlic-service), you'll first need to connect to a peer by using @transports and then build virtual *tunnels*. These virtual tunnels are temporary, uni-directional paths that pass information through a defined sequence of @I2P routers to your @destination. Tunnels are built, and then used, with layered @garlic-encryption and are a general-purpose mechanism to transport all @I2NP @messages. + +Each peer builds, at a minimum, *two* uni-directional tunnels: one for **outbound traffic**, and one for **inbound traffic**. These tunnels are classified as either **inbound tunnels** (where @messages come toward the creator of the tunnel) or **outbound tunnels** (where the tunnel creator sends @messages away from the creator of the tunnel). Thus, *four* tunnels are required for a single round-trip @message and reply to your @destination (two for your, two for your destination). + +### In-depth information + +From @Java-I2P: + +> +Within I2P, @messages are passed in one direction through a virtual tunnel of peers, using whatever means are available to pass the @message on to the next hop. Messages arrive at the tunnel's gateway, get bundled up and/or fragmented into fixed-size @tunnel @messages, and are forwarded on to the next hop in the tunnel, which processes and verifies the validity of the @message and sends it on to the next hop, and so on, until it reaches the @tunnel endpoint. That endpoint takes the messages bundled up by the gateway and forwards them as instructed - either to another router, to another tunnel on another router, or locally. + +> +Tunnels all work the same, but can be segmented into two different groups - inbound tunnels and outbound tunnels. The inbound tunnels have an untrusted gateway which passes messages down towards the tunnel creator, which serves as the tunnel endpoint. For outbound tunnels, the tunnel creator serves as the gateway, passing messages out to the remote endpoint. + +> +The tunnel's creator selects exactly which peers will participate in the tunnel, and provides each with the necessary configuration data. They may have any number of hops. It is the intent to make it hard for either participants or third parties to determine the length of a tunnel, or even for colluding participants to determine whether they are a part of the same tunnel at all (barring the situation where colluding peers are next to each other in the tunnel). + +### Notes + +From @Java-I2P: + +> +@I2P is an inherently packet switched network, even with these tunnels, allowing it to take advantage of multiple tunnels running in parallel, increasing resilience and balancing load. Even though the tunnels within I2P bear a resemblance to a circuit switched network, everything within I2P is strictly message based - tunnels are merely accounting tricks to help organize the delivery of messages. No assumptions are made regarding reliability or ordering of messages, and retransmissions are left to higher levels (e.g. I2P's client layer streaming library). + +### Documentation + +For specification and detailed documentation, visit the [Tunnel-Routing](https://geti2p.net/en/docs/how/tunnel-routing) and [Tunnel-Implementation](https://geti2p.net/en/docs/tunnels/implementation) page. diff --git a/_i18n/template/resources/moneropedia/unlocktime.md b/_i18n/template/resources/moneropedia/unlocktime.md new file mode 100644 index 00000000..08a35f8e --- /dev/null +++ b/_i18n/template/resources/moneropedia/unlocktime.md @@ -0,0 +1,14 @@ +--- +layout: moneropedia +entry: "Transaction Unlock Time" +terms: ["unlock-time"] +summary: "a special transaction where the recipient can only spend the funds after a future date, as set by the sender" +--- + +### The Basics + +{{ page.summary | capitalize }}. + +Unlock time allows you to send a transaction to someone, such that they can not spend it until after a certain number of blocks, or until a certain time. + +Note that this works differently than Bitcoin's [nLockTime](https://en.bitcoin.it/wiki/NLockTime), in which the transaction is not valid until the given time. diff --git a/_i18n/template/resources/moneropedia/viewkey.md b/_i18n/template/resources/moneropedia/viewkey.md new file mode 100644 index 00000000..719a96b9 --- /dev/null +++ b/_i18n/template/resources/moneropedia/viewkey.md @@ -0,0 +1,16 @@ +--- +layout: moneropedia +entry: "View Key" +terms: ["view-key", "view-keys"] +summary: "one of two sets of private and public cryptographic keys that each account has, with the private view key required to view all transactions related to the account" +--- + +### The Basics + +Monero features an opaque blockchain (with an explicit allowance system called the @view-key), in sharp contrast with transparent blockchains used by any other cryptocurrency not based on @CryptoNote. Thus, Monero is said to be "private, optionally transparent". + +Every Monero address has a private viewkey which can be shared. By sharing a viewkey a person is allowing access to view every incoming transaction for that address. However, outgoing transactions cannot be reliably viewed as of June 2017. Therefore the balance of a Monero address as shown via a viewkey should not be relied upon. + + + +{{ page.summary | capitalize }}. diff --git a/_i18n/template/resources/moneropedia/wallet.md b/_i18n/template/resources/moneropedia/wallet.md new file mode 100644 index 00000000..759b018d --- /dev/null +++ b/_i18n/template/resources/moneropedia/wallet.md @@ -0,0 +1,19 @@ +--- +layout: moneropedia +entry: "Wallet" +terms: ["wallet", "wallets"] +summary: "A wallet stores the information necessary to send and receive Monero" +--- + +### The Basics + +A Monero account, or wallet, stores the information necessary to send and receive Moneroj. In addition to sending and receiving, the Monero Wallet software keeps a private history of your transactions and allows you to cryptographically sign messages. It also includes Monero mining software and an address book. + +The term "hot wallet" describes a Monero @account which is connected to the Internet. You can send funds easily but security is much lower than a cold wallet. Never store large amounts of cryptocurrency in a hot wallet! + +A cold wallet is generated on a trusted device or computer via an @airgap. If the device is to be reused, the data storage should be securely overwritten. As soon as a cold wallet is connected to the internet or its mnemonic phrase or @spend-key is entered on an internet-connected device, it's no longer "cold" and should be considered "hot". + +A Monero @paper-wallet can be generated by downloading the source code of https://moneroaddress.org/. Verify the signature of the code on a trusted airgapped device. Create the wallet and print or store it on the media of your choice. + +Monero accounts and paper-wallets can be stored on any media - paper, USB drive, CD/DVD, or a hardware wallet device (none available for Monero as of June 2017). + diff --git a/_i18n/template/resources/research-lab.md b/_i18n/template/resources/research-lab.md new file mode 100644 index 00000000..61b4617c --- /dev/null +++ b/_i18n/template/resources/research-lab.md @@ -0,0 +1,164 @@ +{% include untranslated.html %} +
+

Monero is not only committed to making a fungible currency, but also to continued research into the realm of financial privacy as it involves cryptocurrencies. Below you'll find the work of our very own Monero Research Lab, with more papers to come.

+
+ +
+
+ +
+
+
+

Monero Research Lab Papers

+
+
+ + +
+

Abstract: This research bulletin describes a plausible attack on a ring-signature based + anonymity system. We use as motivation the cryptocurrency protocol CryptoNote + 2.0 ostensibly published by Nicolas van Saberhagen in 2012. It has been + previously demonstrated that the untraceability obscuring a one-time key pair can + be dependent upon the untraceability of all of the keys used in composing that + ring signature. This allows for the possibility of chain reactions in traceability + between ring signatures, causing a critical loss in untraceability across the whole + network if parameters are poorly chosen and if an attacker owns a sufficient + percentage of the network. The signatures are still one-time, however, and any + such attack will still not necessarily violate the anonymity of users. However, such + an attack could plausibly weaken the resistance CryptoNote demonstrates against + blockchain analysis. This research bulletin has not undergone peer review, and + reflects only the results of internal investigation. +
+
+ Read Paper +

+
+
+
+ + +
+

Abstract: On 4 September 2014, an unusual and novel attack was executed against the + Monero cryptocurrency network. This attack partitioned the network into two + distinct subsets which refused to accept the legitimacy of the other subset. This + had myriad effects, not all of which are yet known. The attacker had a short + window of time during which a sort of counterfeiting could occur, for example. + This research bulletin describes deficiencies in the CryptoNote reference code + allowing for this attack, describes the solution initially put forth by Rafal Freeman + from Tigusoft.pl and subsequently by the CryptoNote team, describes the current + fix in the Monero code base, and elaborates upon exactly what the offending + block did to the network. This research bulletin has not undergone peer review, + and reflects only the results of internal investigation.
+
+ Read Paper

+ +
+
+
+ + +
+

Introduction: Recently, there have been some vague fears about the CryptoNote source code and + protocol floating around the internet based on the fact that it is a more complicated + protocol than, for instance, Bitcoin. The purpose of this note is to try and clear + up some misconceptions, and hopefully remove some of the mystery surrounding + Monero Ring Signatures. I will start by comparing the mathematics involved in + CryptoNote ring signatures (as described in [CN]) to the mathematics in [FS], on + which CryptoNote is based. After this, I will compare the mathematics of the ring + signature to what is actually in the CryptoNote codebase.
+
+ Read Paper

+
+
+
+ + +
+

Abstract: We identify several blockchain analysis attacks available to degrade the +untraceability of the CryptoNote 2.0 protocol. We analyze possible solutions, +discuss the relative merits and drawbacks to those solutions, and recommend +improvements to the Monero protocol that will hopefully provide long-term +resistance of the cryptocurrency against blockchain analysis. Our recommended +improvements to Monero include a protocol-level network-wide minimum mix-in +policy of +n += 2 +foreign outputs per ring signature, a protocol-level increase of this +value to +n += 4 +after two years, and a wallet-level default value of +n += 4 +in the +interim. We also recommend a torrent-style method of sending Monero output. +We also discuss a non-uniform, age-dependent mix-in selection method to +mitigate the other forms of blockchain analysis identified herein, but we make no +formal recommendations on implementation for a variety of reasons. The +ramifications following these improvements are also discussed in some detail. +This research bulletin has not undergone peer review, and reflects only the +results of internal investigation.
+
+ Read Paper

+
+
+
+ + +
+

Abstract: This article introduces a method of hiding transaction amounts in the strongly +decentralized anonymous cryptocurrency Monero. Similar to Bitcoin, Monero is a +cryptocurrency which is distributed through a proof of work “mining” process. +The original Monero protocol was based on CryptoNote, which uses ring +signatures and one-time keys to hide the destination and origin of transactions. +Recently the technique of using a commitment scheme to hide the amount of a +transaction has been discussed and implemented by Bitcoin Core Developer +Gregory Maxwell. In this article, a new type of ring signature, A Multi-layered +Linkable Spontaneous Anonymous Group signature is described which allows for +hidden amounts, origins and destinations of transactions with reasonable +efficiency and verifiable, trustless coin generation. Some extensions of the +protocol are provided, such as Aggregate Schnorr Range Proofs, and Ring +Multisignature. The author would like to note that early drafts of this were +publicized in the Monero Community and on the bitcoin research irc channel. +Blockchain hashed drafts are available in [14] showing that this work was started +in Summer 2015, and completed in early October 2015. An eprint is also +available at +http://eprint.iacr.org/2015/1098 +.
+
+ Read Paper

+
+
+
+
+ + + + + +
+
diff --git a/_i18n/template/resources/roadmap.md b/_i18n/template/resources/roadmap.md new file mode 100644 index 00000000..267b3867 --- /dev/null +++ b/_i18n/template/resources/roadmap.md @@ -0,0 +1,130 @@ +{% include untranslated.html %} +
+
+
+
+
  • +

    Completed task

    +
    +
    +
  • +

    Ongoing task

    +
    +
    +
  • +

    Upcoming task

    +
    +
    +
    +
    +
    +
    +
    + + +

    2014

    +
    + {% for toplevel in site.data.lang[site.lang].roadmap %} + {% if toplevel.year == 2014 %} + {% for roadlist in toplevel.accomplishments %} +
    +
    + +
    +
    +

    {{roadlist.date}}: {{roadlist.name}}

    +
    +
    + {%endfor%} + {%endif%} + {%endfor%} +
    + + +

    2015

    +
    + {% for toplevel in site.data.lang[site.lang].roadmap %} + {% if toplevel.year == 2015 %} + {% for roadlist in toplevel.accomplishments %} +
    +
    + +
    +
    +

    {{roadlist.date}}: {{roadlist.name}}

    +
    +
    + {%endfor%} + {%endif%} + {%endfor%} +
    + + +

    2016

    +
    + {% for toplevel in site.data.lang[site.lang].roadmap %} + {% if toplevel.year == 2016 %} + {% for roadlist in toplevel.accomplishments %} +
    +
    + +
    +
    +

    {{roadlist.date}}: {{roadlist.name}}

    +
    +
    + {%endfor%} + {%endif%} + {%endfor%} +
    + + +

    2017

    +
    + {% for toplevel in site.data.lang[site.lang].roadmap %} + {% if toplevel.year == 2017 %} + {% for roadlist in toplevel.accomplishments %} +
    +
    + +
    +
    + {% if roadlist.date %} +

    {{roadlist.date}}: {{roadlist.name}}

    + {%else%} +

    {{roadlist.name}}

    + {%endif%} +
    +
    + {%endfor%} + {%endif%} + {%endfor%} +
    + + +

    Future

    +
    + {% for toplevel in site.data.lang[site.lang].roadmap %} + {% if toplevel.year == 2018 %} + {% for roadlist in toplevel.accomplishments %} +
    +
    + +
    +
    + {% if roadlist.date %} +

    {{roadlist.date}}: {{roadlist.name}}

    + {%else%} +

    {{roadlist.name}}

    + {%endif%} +
    +
    + {%endfor%} + {%endif%} + {%endfor%} +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/_i18n/template/resources/user-guides/How-to-mine-Monero-XMR-without-a-mining-equipment.md b/_i18n/template/resources/user-guides/How-to-mine-Monero-XMR-without-a-mining-equipment.md new file mode 100644 index 00000000..ca382b6a --- /dev/null +++ b/_i18n/template/resources/user-guides/How-to-mine-Monero-XMR-without-a-mining-equipment.md @@ -0,0 +1,49 @@ +{% include untranslated.html %} +## How to mine Monero (XMR) without a mining equipment? + +If you don’t have a profitable mining equipment, nor time or +money to invest into building it, you can still mine Monero with NiceHash. + +NiceHash is a hashing power marketplace. Sellers of hashing +power, i.e. miners, provide the hashing power for buyers (those who want to buy +a service of mining a certain coin). Hence, NiceHash can provide you a massive +hashing power in short amount of time. You won’t have to wait for years to see +if you will make a profit or not and you can control which coin, at which pool, +and for how long you want to mine. + +### **Step 1:** Create new account at NiceHash + +Visit [registration +page](https://www.nicehash.com/?p=register) and register with your e-mail address. + +### **Step 2:** Deposit some Bitcoins to your account + +You will mine Monero, but you can buy hashing power at +NiceHash only with Bitcoins. You can always withdraw unspent Bitcoins from your +account back to any Bitcoin wallet. + +Visit your [wallet +page](https://www.nicehash.com/?p=wallet) and make a deposit. Note that the minimum price for placing an order +equals 0.01 BTC. + +### **Step 3:** Find a suitable pool for mining and add it to your pool list + +Selection of the pool plays a big role in the final amount +of mined cryptocurrency. Make sure the pool you have selected can handle +massive hashing rate and loads of shares, especially from a single connection. +You can find a list of Monero pools [here](https://bitcointalk.org/index.php?topic=583449.0). + +Note that you will probably have to register an account at +selected pool as well. The pool will provide you with all the information you need. +You can save your favorite pools at [this page](https://www.nicehash.com/?p=managepools). + +### **Step 4:** Create new order and start mining + +When creating a [new order](https://www.nicehash.com/?p=orders&new), make sure you +select CryptoNight algorithm for mining Monero. If you want to first learn more +about placing an order with NiceHash, we recommend you to read this [frequently asked question](https://www.nicehash.com/?p=faq#faqb0). + +If you want to bid on +hashing power select Standard (bidding) order type and if you want a fixed +order that cannot be outbid, select Fixed order type. The status of marketplace +and approximate prices of mining can be checked at [live marketplace](https://www.nicehash.com/index.jsp?p=orders).  \ No newline at end of file diff --git a/_i18n/template/resources/user-guides/Offline_Backup.md b/_i18n/template/resources/user-guides/Offline_Backup.md new file mode 100644 index 00000000..089d20fc --- /dev/null +++ b/_i18n/template/resources/user-guides/Offline_Backup.md @@ -0,0 +1,37 @@ +{% include untranslated.html %} +## Operating Systems: Various versions of Linux and Windows 7, 8 + +### Wallet Software: Simplewallet + +#### Resource for Creating Bootable Disks: [Linux](http://www.pendrivelinux.com/), [Windows](https://www.microsoft.com/en-us/download/windows-usb-dvd-download-tool) + +#### Resource for Monero Binaries: [Monero Binaries](https://getmonero.org/downloads/) + +- Take any computer you have lying around, even your normal workstation. You may find it easier to use an older computer that has no wifi or bluetooth if you're particularly paranoid + +- Create a Linux or Windows bootable disk, and make sure you have the Monero binaries on the same disk or on a second disk (for Linux make sure you have also downloaded copies of the dependencies you will need, libboost1.55 and miniupnpc for instance) + +- Disconnect the network and/or Internet cables from your computer, physically remove the wifi card or switch the wifi/bluetooth off on a laptop if possible + +- Boot into your bootable OS, install the dependencies if necessary + +- Copy the Monero binaries to a RAM disk (/dev/shm in Linux, Windows bootable ISOs normally have a Z: drive or something) + +- Don't run the Monero daemon. Instead, using the command line, use monero-wallet-cli to create a new Monero @account + +- When prompted for a name, give it any name, it doesn't really matter + +- When prompted for a password, type in like 50 - 100 random characters. Don't worry that you don't know the password, just make it LONG + +- **CRITICAL STEP**: Write down (on paper) your 25 word @mnemonic-seed +**WARNING**: If you forget to write down this information your funds may be lost forever + +- Write down (on your phone, on paper, on another computer, wherever you want) your address and view key + +- Switch off the computer, remove the battery if there is one, and leave it physically off for a few hours + +The account you've created was created in RAM, and the digital files are now inaccessible. If some adversary manages to somehow obtain the data, they will lack the long password to open it. If you need to receive payments, you have your public address, and you have the view key if needed. If you need access to it, you have your 25 word @mnemonic-seed, and you can now write out several copies of it, including an offsite copy (e.g. a bank deposit box). + +Credit: Riccardo Spagni + +Related: [Offline Account Generator](http://moneroaddress.org/) diff --git a/_i18n/template/resources/user-guides/create_wallet.md b/_i18n/template/resources/user-guides/create_wallet.md new file mode 100644 index 00000000..8386529e --- /dev/null +++ b/_i18n/template/resources/user-guides/create_wallet.md @@ -0,0 +1,61 @@ +{% include untranslated.html %} +### Operating Systems: Ubuntu + +- Download the [official binaries](https://getmonero.org/downloads/) or compile the last source available on [Github](https://github.com/monero-project/bitmonero) + +![image1](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/1.png) +![image2](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/2.png) + +- Extract the files with the archive manager (same as Winzip on Windows). Note the path where the files "monerod" and "monero-wallet-cli" are + +![image3](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/3.png) +![image4](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/4.png) + +- You only need to do this step once : open a terminal (ctrl+alt+t) and install the required dependencies by typing : "*sudo apt-get install libboost-all-dev libssl-dev libevent-dev libdb++-dev*". When asked, press the Y key and then Enter to continue + +![image5](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/5.png) +![image6](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/6.png) + +- Open a terminal and load the path where your binaries are extracted (cf. step 2) by typing : "*cd yourPathFromStep2*" + +![image7](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/7.png) + +- Load monerod by typing in your terminal : "*./monerod*". Wait for the synchronization with the network (monerod is updating the blockchain you have downloaded in step 4 or is downloading it from scratch). This can take a lot of time the first time, so be patient + +![image8](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/8.png) +![image9](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/9.png) +![image10](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/10.png) +![image11](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/11.png) + +- Once monerod is synchronized with the network, open a new terminal, change the directory (cf. step 5), and launch monero-wallet-cli by typing "*./monero-wallet-cli*" + +![image12](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/12.png) + +- Enter the name you want for your portfolio and follow the instructions from the terminal + +![image13](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/13.png) +![image14](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/14.png) +![image15](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/15.png) +![image16](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/16.png) + +*This is your private key. Write it down and keep it in a safe place!* + +![image17](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/17.png) + +*This is your view key. You need it to create a view only wallet (cf. associated user guide)* + +![image18](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/18.png) + +*This is the address of your wallet* + +![image19](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/19.png) +![image20](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/20.png) +![image21](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/21.png) +![image22](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/22.png) +![image23](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/create_wallet/23.png) + +- To exit monerod or monero-wallet-cli just type "*exit*" in the associated terminal + +Now to access the portfolio you have just created you will have to launch monerod, wait for it to be synchronized with the network, launch monero-wallet-cli, and type the name of your portfolio and your password. + + diff --git a/_i18n/template/resources/user-guides/easiest_buy.md b/_i18n/template/resources/user-guides/easiest_buy.md new file mode 100644 index 00000000..4b360c5a --- /dev/null +++ b/_i18n/template/resources/user-guides/easiest_buy.md @@ -0,0 +1,65 @@ +{% include untranslated.html %} +## How to obtain Monero + +This is a guide to obtain your own Monero as of 20150919. This is perhaps the easiest way to purchase and hold Monero. + +####Step 1: Buy Bitcoin + +There are many ways to buy Bitcoin. Perhaps the easiest way is through circle.com. Once you have purchased some Bitcoin, you are ready to buy some Monero! Buying Bitcoin is straightforward. Please goto circle.com and just follow the instructions there. + +####Step 2: Set up a mymonero.com account + +MyMonero.com is an online wallet for Monero, maintained by Monero Core Developer Ricardo Spagni (fluffpony). It is the easiest wallet to use. Simply go to MyMonero.com and click on the "Create an Account" button. + +![image1](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/01.png) + +After clicking the button, you will see your private key. This key is what gives you access to your funds. Never share this key with anyone! + +### WRITE DOWN THIS KEY IMMEDIATELY! + +![image2](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/02.png) + +Type in your private key in the box below, and click the button. + +On the next page, you will see your address. + +![image3](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/03.png) + +Copy your address to the clipboard by highlighting the whole thing and hitting ctrl+c (or edit menu, copy), or clicking the little icon next to your address. Save your address somewhere. This is how others will send Monero to you, and what you will use to deposit Monero into your account! + +#### Step 3: Buy Monero and transfer the Monero to your new address + +Go to www.shapeshift.io . On the righthand side, of the screen, click icon under "Receive" to select Monero. + +![image5](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/05.png) +![image6](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/06.png) + +Paste your address into the field under the Monero logo. Select the "agree to terms" button, then hit "Start" + +![image7](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/07.png) + +In the new screen that pops up, copy the Deposit Address into your clipboard (select and hit ctrl+c or edit-copy) + +![image8](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/08.png) + +Go back to your circle.com page, hit the "transfer" button, and paste the Bitcoin address into the field +Enter the amount of Bitcoin you would like to spend. + +![image4](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/04.png) +![image9](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/09.png) + +You will get a text message verification code. Enter code and hit send. + +![image10](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/10.png) + +You will see the shapeshift change to "awaiting exchange" + +![image11](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/11.png) + +Then it will change to COMPLETE! + +![image12](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/12.png) + +After a while you will see it in your Monero account + +![image13](https://github.com/luuul/monero-site/blob/master/knowledge-base/user-guides/png/easiest_way/13.png) diff --git a/_i18n/template/resources/user-guides/howto_fix_stuck_funds.md b/_i18n/template/resources/user-guides/howto_fix_stuck_funds.md new file mode 100644 index 00000000..53200446 --- /dev/null +++ b/_i18n/template/resources/user-guides/howto_fix_stuck_funds.md @@ -0,0 +1,31 @@ +{% include untranslated.html %} +Sometimes, your funds will become stuck - you will have some locked funds that never become unlocked. This is how you fix it. + +- Load your wallet in monero-wallet-cli. + +- Type + +> seed + +into the command prompt. Write down your 25 word seed, if you haven't already. This is the best way to make sure you don't loose access to your funds. + +- Close monero-wallet-cli by typing + +> exit + +- Backup all of your wallet related files. These include: + +> yourwalletname.bin +> yourwalletname.bin.keys +> yourwalletname.bin.address.txt + +This can be done by copying the files to a new folder. + +Sometimes, when creating your wallet, you might have named it something without the .bin part. In that case, the wallet file will be called yourwalletname without the .bin at the end. + +- Delete yourwallet.bin + +- Load monero-wallet-cli, type in the name of the wallet you just deleted + +- Enter password. The wallet will now refresh and hopefully your locked funds will now become unlocked. + diff --git a/_i18n/template/resources/user-guides/importing_blockchain.md b/_i18n/template/resources/user-guides/importing_blockchain.md new file mode 100644 index 00000000..43eb5823 --- /dev/null +++ b/_i18n/template/resources/user-guides/importing_blockchain.md @@ -0,0 +1,57 @@ +{% include untranslated.html %} +# Importing the Blockchain to Monero GUI wallet (Windows) + +### Step 1 + +Download the Current bootstrap from https://downloads.getmonero.org/blockchain.raw; you can skip this step if you are importing the Blockchain from another source. + +### Step 2 + +Find the path of your Monero wallet (the folder where you extracted your wallet). For example mine is: + +`D:\monero-gui-0.10.3.1` + +Your path may be different depending on where you decided to download your wallet and what version of the Monero wallet you have. + +### Step 3 + +Find the path of your downloaded Blockchain for example mine was: + +`C:\Users\KeeJef\Downloads\blockchain.raw` + +Yours might be different depending on where you downloaded the Blockchain to. + +### Step 4 + +Open a Command Prompt window. You can do this by pressing the Windows key + R, and then typing in the popup box `CMD` + +### Step 5 + +Now you need to navigate using the CMD window to the path of your Monero wallet. You can do this by typing: + +`cd C:\YOUR\MONERO\WALLET\FILE\PATH\HERE` + +It should look something like: + +`cd D:\monero-gui-0.10.3.1` + +If your Monero wallet is on another drive you can use `DriveLetter:` for example if your Monero wallet was on your D drive then before using the cd command you would do `D:` + +### Step 6 + +Now type in your command prompt window: + +`monero-blockchain-import --verify 1 --input-file C:\YOUR\BLOCKCHAIN\FILE\PATH\HERE` + +For example I would type : + +`monero-blockchain-import --verify 1 --input-file C:\Users\KeeJef\Downloads\blockchain.raw` + +If you downloaded the Blockchain from a trusted, reputable source you may set `verify 0` this will reduce the amount of time to sync the Blockchain. + +### Step 7 + +After the the Blockchain has finished syncing up you can open your Monero wallet normally. Your downloaded blockchain.raw can be deleted. + + +Author: Kee Jefferys \ No newline at end of file diff --git a/_i18n/template/resources/user-guides/index.md b/_i18n/template/resources/user-guides/index.md new file mode 100644 index 00000000..cd1c1161 --- /dev/null +++ b/_i18n/template/resources/user-guides/index.md @@ -0,0 +1,82 @@ +{% include untranslated.html %} +
    +
    +
    +
    +
    +
    +
    +

    General

    +
    +
    +
    + +[Monero Tools]({{site.baseurl}}/resources/user-guides/monero_tools.html) +[How to make an offline backup]({{site.baseurl}}/resources/user-guides/Offline_Backup.html) +[Importing the Monero blockchain]({{site.baseurl}}/resources/user-guides/importing_blockchain.html) +[How to run a node on VPS]({{site.baseurl}}/resources/user-guides/vps_run_node.html) +[Securely purchasing and storing Monero]({{site.baseurl}}/resources/user-guides/securely_purchase.html) + +
    +
    +
    +
    +
    +
    +
    +

    Wallets

    +
    +
    +
    + +[Getting started with the CLI wallet]({{site.baseurl}}/resources/user-guides/monero-wallet-cli.html) +[How to make a view-only wallet]({{site.baseurl}}/resources/user-guides/view_only.html) +[How to prove payment]({{site.baseurl}}/resources/user-guides/prove-payment.html) +[Restoring wallet from keys]({{site.baseurl}}/resources/user-guides/restore_from_keys.html) +[How to connect to a remote node within GUI wallet]({{site.baseurl}}/resources/user-guides/remote_node_gui.html) + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    Recovery

    +
    +
    +
    + +[How to fix locked up funds]({{site.baseurl}}/resources/user-guides/howto_fix_stuck_funds.html) +[How to restore your account]({{site.baseurl}}/resources/user-guides/restore_account.html) + +
    +
    +
    +
    +
    +
    +
    +

    Mining

    +
    +
    +
    + +[How to solo mine with the GUI]({{site.baseurl}}/resources/user-guides/solo_mine_GUI.html) +[How to mine on a pool with xmr-stak-cpu]({{site.baseurl}}/resources/user-guides/mine-to-pool.html) +[Mining with Docker and XMRig]({{site.baseurl}}/resources/user-guides/mining_with_xmrig_and_docker.html) + +
    +
    +
    +
    + + + +
    +
    \ No newline at end of file diff --git a/_i18n/template/resources/user-guides/mine-to-pool.md b/_i18n/template/resources/user-guides/mine-to-pool.md new file mode 100644 index 00000000..d39075d2 --- /dev/null +++ b/_i18n/template/resources/user-guides/mine-to-pool.md @@ -0,0 +1,114 @@ +{% include untranslated.html %} +# Selecting a pool + +There are many pools to choose from, a list is available at +[moneropools.com](https://moneropools.com). Mining on a larger pool could mean +more frequent payouts, but mining on a smaller pool helps to keep the network +decentralized. + +# Selecting a CPU miner + +Just like pools, there are a lot of miners to choose from. The one that you +should pick depends on the hardware you want to mine on. This guide will only +use a CPU miner, and will be using +[xmr-stak-cpu](https://github.com/fireice-uk/xmr-stak-cpu). Alternatives include +[wolf's CPUMiner](https://github.com/wolf9466/cpuminer-multi) and +[sgminer-gm](https://github.com/genesismining/sgminer-gm). However, their +configuration is slightly different and will not be covered in this guide. + +## For Windows Systems + +If you are using a Windows system, the developer of xmr-stak-cpu provides +binaries to download on the +[GitHub release page](https://github.com/fireice-uk/xmr-stak-cpu/releases). + +Download `xmr-stak-cpu-win64.zip` and extract it somewhere you'll be able to +find it again. + +## For Other Operating Systems + +If you're not using Windows, you will have to compile xmr-stak-cpu for yourself, +luckily this isn't as hard as it sounds. Before you can compile the miner, you +will need to install some of its prerequisites. + +For Debian-based distros: + + sudo apt-get install libmicrohttpd-dev libssl-dev cmake build-essential + +For Red Hat based distros: + + sudo yum install openssl-devel cmake gcc-c++ libmicrohttpd-devel + + + +Following this, you just need to use cmake to generate the build files, run +make and copy the config file: + + mkdir build-$(gcc -dumpmachine) + cd $_ + cmake ../ + make -j$(nproc) + cp ../config.txt bin/ + cd bin + +Don't celebrate just yet, as the miner needs to be configured. Running the miner +now should give you a block of text to copy and paste: + +![image1](png/mine_to_pool/1.png) + +Open `config.txt` and *replace* the two `"cpu_threads_conf"` lines with the text +you just copied. It should look something like this afterwards: + +![image2](png/mine_to_pool/2.png) + +Scroll down in the file until you see the lines containing `"pool_address"`. +*Replace* the contents of the second set of quotes with the address and port of +the pool you chose earlier. You can find this information on the pool's website. + +Put your wallet address between the quotes on the wallet address. You may leave +the password blank unless the pool specifies otherwise. + +After this, your config should look something like this: + +![image3](png/mine_to_pool/3.png) + +# Running the miner + +**Save the config** file and run the miner! + +![image4](png/mine_to_pool/4.png) + +Some pools allow you to monitor your hashrate by pasting your address into their +website. You can also monitor your hashrate by pressing the `h` key. + +# Tuning the miner + +You might see nasty messages like this: + + [2017-07-09 12:04:02] : MEMORY ALLOC FAILED: mmap failed + +This means that you can get around a 20% hashrate boost by enabling large pages. + +## Large pages on Linux + +Firstly stop the miner (if it's running), run the following commands to enable +large pages and then start the miner as root: + + sudo sysctl -w vm.nr_hugepages=128 + sudo ./xmr-stak-cpu + +## Large pages on Windows + +Taken from `config.txt`: + +>By default we will try to allocate large pages. This means you need to "Run As Administrator" on Windows +You need to edit your system's group policies to enable locking large pages. Here are the steps from MSDN +1. On the Start menu, click Run. In the Open box, type gpedit.msc. +2. On the Local Group Policy Editor console, expand Computer Configuration, and then expand Windows Settings. +3. Expand Security Settings, and then expand Local Policies. +4. Select the User Rights Assignment folder. +5. The policies will be displayed in the details pane. +6. In the pane, double-click Lock pages in memory. +7. In the Local Security Setting – Lock pages in memory dialog box, click Add User or Group. +8. In the Select Users, Service Accounts, or Groups dialog box, add an account that you will run the miner on +9. Reboot for change to take effect. diff --git a/_i18n/template/resources/user-guides/mining_with_xmrig_and_docker.md b/_i18n/template/resources/user-guides/mining_with_xmrig_and_docker.md new file mode 100644 index 00000000..fcad1cf4 --- /dev/null +++ b/_i18n/template/resources/user-guides/mining_with_xmrig_and_docker.md @@ -0,0 +1,37 @@ +{% include untranslated.html %} +## Introduction + +This guide is two fold, ease of use for mining on Linux distributions and some extra security around mining as most of these miners have not had security auditing. + +At the end of this guide you will be able to sleep a little easier knowing that if the miner gets exploited it will not migrate to your OS. + +### Why Docker + +[Docker](https://www.docker.com/) is being used as it is the most well known and has the biggest chance to be already installed. + +The container I an using is [alpine-xmrig](https://hub.docker.com/r/bitnn/alpine-xmrig/) as per the name it is built on the [Alpine Linux](https://www.alpinelinux.org/) image. + +If you are interested in getting started with Docker, here are some really good starting references. +* Arch Linux Wiki [Docker Page](https://wiki.archlinux.org/index.php/Docker) +* Container Solutions [Security Cheat Sheet](http://container-solutions.com/content/uploads/2015/06/15.06.15_DockerCheatSheet_A2.pdf) +* Digital Oceans [Dockerfile Howto](https://www.digitalocean.com/community/tutorials/docker-explained-using-dockerfiles-to-automate-building-of-images). + +For distribution specific installation please refer to the [Docker Docs](https://docs.docker.com/engine/installation/) website. + +### Why XMRig + +[XMRig](https://github.com/xmrig/xmrig) is just a really solid miner to me. Nice output and statistics, no flashy web-ui's or dependencies. The XMRig container is only ~4MB what makes it extremely portable. + +#### Step 1: Mining with XMRig + +Run the following + +```bash +# docker run --restart unless-stopped --read-only -m 50M -c 512 bitnn/alpine-xmrig -o POOL01 -o POOL02 -u WALLET -p PASSWORD -k +# docker run --restart unless-stopped --read-only -m 50M -c 512 bitnn/alpine-xmrig -o pool.supportxmr.com:7777 -u 45CJVagd6WwQAQfAkS91EHiTyfVaJn12uM4Su8iz6S2SHZ3QthmFM9BSPHVZY388ASWx8G9Wbz4BA24RQZUpGczb35fnnJz -p docker:secret -k +``` + +#### Step 2: There is no Step 2 + +You have already done everything you need to do. You are now mining in a docker container with XMRig `ctrl+c` to exit the miner or add `-d` just after `docker run` to background the miner. + diff --git a/_i18n/template/resources/user-guides/monero-wallet-cli.md b/_i18n/template/resources/user-guides/monero-wallet-cli.md new file mode 100644 index 00000000..155a82d1 --- /dev/null +++ b/_i18n/template/resources/user-guides/monero-wallet-cli.md @@ -0,0 +1,146 @@ +{% include untranslated.html %} +# monero-wallet-cli + +`monero-wallet-cli` is the wallet software that ships with the Monero tree. It is a console program, +and manages an account. While a bitcoin wallet manages both an account and the blockchain, +Monero separates these: `monerod` handles the blockchain, and `monero-wallet-cli` handles the account. + +This guide will show how to perform various operations from the `monero-wallet-cli` UI. The guide assumes you are using the most recent version of Monero and have already created an account according to the other guides. + + +## Checking your balance + +Since the blockchain handling and the wallet are separate programs, many uses of `monero-wallet-cli` +need to work with the daemon. This includes looking for incoming transactions to your address. +Once you are running both `monero-wallet-cli` and `monerod`, enter `balance`. + +Example: + +This will pull blocks from the daemon the wallet did not yet see, and update your balance +to match. This process will normally be done in the background every minute or so. To see the +balance without refreshing: + + balance + Balance: 64.526198850000, unlocked balance: 44.526198850000, including unlocked dust: 0.006198850000 + +In this example, `Balance` is your total balance. The `unlocked balance` is the amount currently available to spend. Newly received transactions require 10 confirmations on the blockchain before being unlocked. `unlocked dust` refers to very small amounts of unspent outputs that may have accumulated in your account. + +## Sending monero + +You will need the standard address you want to send to (a long string starting with '4'), and +possibly a payment ID, if the receiving party requires one. In that latter case, that party +may instead give you an integrated address, which is both of these packed into a single address. + +### Sending to a standard address: + + transfer ADDRESS AMOUNT PAYMENTID + +Replace `ADDRESS` with the address you want to send to, `AMOUNT` with how many monero you want to send, +and `PAYMENTID` with the payment ID you were given. Payment ID's are optional. If the receiving party doesn't need one, just +omit it. + +### Sending to an integrated address: + + transfer ADDRESS AMOUNT + +The payment ID is implicit in the integrated address in that case. + +### Specify the number of outputs for a transaction: + + transfer MIXIN ADDRESS AMOUNT + +Replace `MIXIN` with the number of outputs you wish to use. **If not specified, the default is 4.** It's a good idea to use the default, but you can increase the number if you want to include more outputs. The higher the number, the larger the transaction, and higher fees are needed. + + +## Receiving monero + +If you have your own Monero address, you just need to give your standard address to someone. + +You can find out your address with: + + address + +Since Monero is anonymous, you won't see the origin address the funds you receive came from. If you +want to know, for instance to credit a particular customer, you'll have to tell the sender to use +a payment ID, which is an arbitrary optional tag which gets attached to a transaction. To make life +easier, you can generate an address that already includes a random payment ID: + + integrated_address + +This will generate a random payment ID, and give you the address that includes your own account +and that payment ID. If you want to select a particular payment ID, you can do that too: + + integrated_address 12346780abcdef00 + +Payments made to an integrated address generated from your account will go to your account, +with that payment id attached, so you can tell payments apart. + + +## Proving to a third party you paid someone + +If you pay a merchant, and the merchant claims to not have received the funds, you may need +to prove to a third party you did send the funds - or even to the merchant, if it is a honest +mistake. Monero is private, so you can't just point to your transaction in the blockchain, +as you can't tell who sent it, and who received it. However, by supplying the per-transaction +private key to a party, that party can tell whether that transaction sent monero to that +particular address. Note that storing these per-transaction keys is disabled by default, and +you will have to enable it before sending, if you think you may need it: + + set store-tx-info 1 + +You can retrieve the tx key from an earlier transaction: + + get_tx_key 1234567890123456789012345678901212345678901234567890123456789012 + +Pass in the transaction ID you want the key for. Remember that a payment might have been +split in more than one transaction, so you may need several keys. You can then send that key, +or these keys, to whoever you want to provide proof of your transaction, along with the +transaction id and the address you sent to. Note that this third party, if knowing your +own address, will be able to see how much change was returned to you as well. + +If you are the third party (that is, someone wants to prove to you that they sent monero +to an address), then you can check this way: + + check_tx_key TXID TXKEY ADDRESS + +Replace `TXID`, `TXKEY` and `ADDRESS` with the transaction ID, per-transaction key, and destination +address which were supplied to you, respectively. monero-wallet-cli will check that transaction +and let you know how much monero this transaction paid to the given address. + + +## Getting a chance to confirm/cancel payments + +If you want to get a last chance confirmation when sending a payment: + + set always-confirm-transfers 1 + + +## How to find a payment to you + +If you received a payment using a particular payment ID, you can look it up: + + payments PAYMENTID + +You can give more than one payment ID too. + +More generally, you can review incoming and outgoing payments: + + show_transfers + +You can give an optional height to list only recent transactions, and request +only incoming or outgoing transactions. For example, + + show_transfers in 650000 + +will only incoming transfers after block 650000. You can also give a height +range. + +If you want to mine, you can do so from the wallet: + + start_mining 2 + +This will start mining on the daemon usin two threads. Note that this is solo mining, +and may take a while before you find a block. To stop mining: + + stop_mining + diff --git a/_i18n/template/resources/user-guides/monero_tools.md b/_i18n/template/resources/user-guides/monero_tools.md new file mode 100644 index 00000000..67d60a04 --- /dev/null +++ b/_i18n/template/resources/user-guides/monero_tools.md @@ -0,0 +1,18 @@ +{% include untranslated.html %} +# Monero tools + +These tools can be used to gain information about the Monero network or your transaction data in the blockchain. + +### [Check that a recipient has received your funds](http://xmrtests.llcoins.net/checktx.html) + +### [Tools for monero address generation](https://xmr.llcoins.net/) + +### [Monero node count](http://moneronodes.i2p.xyz/) + +### [Monero node map](https://monerohash.com/nodes-distribution.html) + +### [Monero offline wallet generator](http://moneroaddress.org/) + +### [Monero network statistics](http://moneroblocks.info/stats) + +### [Monero.how statistics](https://www.monero.how/) \ No newline at end of file diff --git a/_i18n/template/resources/user-guides/png/create_wallet/1.png b/_i18n/template/resources/user-guides/png/create_wallet/1.png new file mode 100644 index 0000000000000000000000000000000000000000..44acf51b19ea9435af2dc466ed05514b7543564d GIT binary patch literal 220509 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%0A{)dZ7z=KWar-g%ZIFVX?*R)3u>AIX50Vm| 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

    *K7?oq$1J+1@WP-zlfF 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

    ((mo$?E_zn**aX(@nMqY@kCMYI5GQRMj z0SlQa)ni_sU25jOPJz-cwaiU>slTkzfw-(N70-cLV;>XGznBnO0(FcZd%Dv3G-Z#} z1Bm03!~Fv*@-Jl;@GoJOPuRNI?M#tbi!n+-!%J{gQV$Lww>{FWW3-v=+8}2TMaHCO_m?(T)kB0wyLsf#%yt zrgQ;HF=N8Fa{qlH9@02aABPz=PV;xNPWT!c7_+-_9uhRmUg!S9kC;Gc@-;=6=kB2 z0gmWrv!Q#J#PvoQqNV2W0O=C9)AJl`*3Z+Jk_BqV|BeWdzN`<@!D^TJ8R=BpSb;~o z@z(5Xyt?mOV7i-@9=k0f;XSN9$zDz`yFx}R~X5OuD+72(vZ|3nvF^*4_ z#IiVpEk~d|kh`p|t$C8yIQ#tN8LP!t$<$VJq{*Oj3|&pIHWwn8|2_OGjKi27XX7y! zNKQ~1rMD>MLP|S4F6aivKM%3F)vJ1oN3ZqLPSfeBkCdJHgf$_k8c(A55#nh;cp9svDAM&HmhZV$9aJf5EE(0j*eOv^ z3DA$8D;|e`;oGPYt!Sk8yl5L|qs1oJzdwk1OqaY?&^jdxblBEhSZ9otKfJx0K3YA6 zP!_nk?ct%uE8b>7@Z+1sKIP`jFXOQl`W_bZ|1U{O%D?6p|JNDdRGYhx%*7yjCXHUr z=4(G~HXmPuBX|J~iu8N0?f1ph6pmj_SGGJfnw2hW%NdzvE8H5;9=Fc*JE}=kC$tI- zT*-L1vYnGoGwd?^_3j&6hdZStt4EC=l9A8f+Mc~`>royAHOjJo`pzec09d!&HR}x)QZ%ErQ=;IO9uQwzezzbS@^!?V>i~GW60l- zPT)G7oaLVu93`B!u4Ut`6h;lK!ZY+Yt%baseU0uSNEaFOV?u{EO%|H0lc{Kp6Ssr+ z3XDcitpmRH%NTf~YY*wS6Q7LlEgh|3kc`bme;xChI`@Jq+mrjGD!m&imqhV_|G50g zIpHjXK432fyJwgGk_243d;UWlK$i@A{GDm&hNWV59M}DyP3cZN-px3^V9b9W;!@S?*MB0}dTU$sS|vdOGwzkF#3o|#StgeMjvtpd0#)%D z+&dvS)R!3DXUfP`?uoQIR->9{pG`Bz40kMGa=-6o=9Q|*IU?gU?~F%mxX9ughY4Is zT~o?hCaOJ|eb*@&EknV&gqWJ|^tFW%FSE?m`Gk~5y1%Dq@x4<&Au7Z>FaAIhe@$*+ zff58@QBBs>QOC^c#_B%l#{HTW1Bw&BIj?B;OImMEdhFZjHRtVRs(NWq*Ur&=pCiO( zDUZ5M9yz&*!;8eU{VC|CB&5D>mG%UidyCO%$rY0OG`8byY<6(tjOQ9HN1>&xy;s@*nvh+|=Q8)T&0gxhVn{HCNt|0FZjmn?D} z%Uqa=={`my+ysbFOqIFP|IXi&QQc%3y}Eg)P&Q#f0a?tNmg|Jn zXchZ#W-GS3UIp!8Ifrg-KqQ$pFq@43yx9ubk}KCYsy(pzMDCY0p1{3F<+xY&ASU?Z z8tgSm{VN7mLH<#0vSf%Bk_1U(=837o2*C((zu0N*K^jd>;da@~8^NIFL?fDPL__5* z6gevPcb1)^UQrAVk}tQHUK`q{*2GEGw*53EDJ#s zYby=Z|GpNdQ4jtnA|KWb?*5di2*R`R1nh1jQn{{!avsPX^+ literal 0 HcmV?d00001 diff --git a/_i18n/template/resources/user-guides/png/create_wallet/11.png b/_i18n/template/resources/user-guides/png/create_wallet/11.png new file mode 100644 index 0000000000000000000000000000000000000000..f8bb9989a3dfac8d717ae20c23b14aaaf987876d GIT binary patch literal 195411 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 z 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%0AlQ(_EuY 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