Commit 249f86f5 authored by Riccardo Spagni's avatar Riccardo Spagni
Browse files

Merge pull request #52 from Gingeropolous/master

Some work on the about pages and some user tutorials
parents 8b8bd663 cd5cf20f
......@@ -9,4 +9,47 @@ icon: "icon_about"
attribution: "<!-- Icon is based on work by Freepik ( and is licensed under Creative Commons BY 3.0 -->"
### Work in Progress
\ No newline at end of file
### What is Monero?
In order to effectively learn about Monero, it is important to assess your current understanding of cryptocurrencies. Therefore, this document has been broken down into 3 primary sections that you can use to learn about Monero based on your current knowledge. These sections build on each other, and by the time you reach the end of the document, you will hopefully be a master of the ideas behind both Monero and cryptocurrencies in general. It should be noted that this document will not be technical - instead, it will discuss the fundamentals of the technology and links will be provided for further explanation. The three sections are:
- I know nothing about cryptocurrencies.
- I know about bitcoin, but I don't really understand how it works
- I know how bitcoin works
I hope you enjoy this document, and I hope you find that Monero holds the potential to be a viable alternative to contemporary monetary systems.
### I know nothing about cryptocurrencies
Welcome to the future of money! There are many ways to describe cryptocurrencies and explain how they work. One of the fundamental components of cryptocurrencies is a very fancy type of ledger called a blockchain.
***What is a ledger?***
A ledger is a document in which people record information by adding information to the document. This is such a fundamental component of cryptocurrencies that this point must be repeated, because it is easy to think that something digital (any file) can be modified in any imaginable way. By design, a ledger can only be modified by adding things to it. Think of the difference between the following: There's 10 dollars in my wallet at the start of the day, and during the day I spend 5$ and receive 10$. If I wanted to record the amount of money I had at any given time, this could be done it two ways.
A. At the start of the day, I could write down 10$. At the end of the day, I could erase that and write down the current amount in my wallet, which is 15$.
B. At the start of the day, I could write down 10$ on line 1. When I spend 5$, I write on line 2 that I use the 10$ bill and that 5$ is given back to me as change. Later, when someone gives me 10$, I write down that I recieved 10$. At the end of the day, I can then look at my ledger and see how many of the dollars are mine.
( For those that are catching on, you can see the difference between A and B is that A treats money as a thing, whereas B treats money as a unit of account)
***What is so special about a cryptocurrency ledger?***
The problem with a ledger is that you have to trust the person keeping the ledger. Imagine if you borrow money (cash) from your friend. You and your friend both write down how much cash you borrowed. Over time, you need to borrow more and you make some payments on your debt. You and your friend both keep records of this activity. Imagine that many years have passed and you finally make your final payment, only to learn that your friend thinks you owe more money based on the numbers in *their* ledger. But according to *your* ledger, your debt is paid. Who has the correct ledger?
This problem of trust is solved in cryptocurrencies by using a *distributed* ledger. This means that all of the transactions that occur are recorded by everyone using the cryptocurrency, so they can each keep their own copy of the ledger. In our cash borrowing example from above, you and your friend could have used the same approach by asking 10 people to record every credit and payment between you and your friend. If you and your friend had done this, you compare your ledger to the 10 other peoples, and if their ledger matched yours, then your debt was indeed paid off.
***Okay, I understand that a distributed ledger solves the trust issue. But how do I know that other people won't work together to make forged copies of the ledger, and then distribute the fake ledger?***
This is where the cryptocurrency ledger becomes very fancy, and is indeed the point where the term @blockchain, which I'm sure you've heard a lot about, will be introduced. In order to secure the ledger - to ensure that all copies of it are the same and cannot be tampered with - the cryptocurrency protocol adds information to the ledger in large chunks known as blocks. In our example from above, imagine that you were recording your payments on pieces of paper. At the end of each month, you would add this piece of paper to a book. The piece of paper is a block, and the book is a chain of these blocks - each new piece of paper is placed on top of an old one.
***How is a stack of paper a blockchain?***
It's not a blockchain yet. In order to become a blockchain, you need to link each block to each other - hence the use of the word "chain". And this is where the explanation may get a little technical. In order to link a new block to an old one, the new block includes the results of a complex math equation that uses all of the data in a previous block as its starting material. This is what is known as a @cryptographic hash of the previous block. These math problems are unique in that they are impossible to reverse, yet each results of the math problem is unique to the information entered into the problem. Look at the difference of the following - if I want to add the numbers 2 and 4, the result of that math problem will be 6. There are many ways to get 6 as a result of a math problem. If I want to **hash** the numbers 2 and 6, the result of the hash is
> c2356069e9d1e79ca924378153cfbbfb4d4416b1f99d41a2940bfdb66c5319db
There is no way to go from that "number" above back to a 2 and a 4, and there is nothing except a 2 and a 4 that will produce the number above. To get a sense of how hashing behaves, you can explore the function [here](
(note to self - use the analogy of taking pictures, and introduce the proof of work as finding specifically shaped rocks to include in the picture)
layout: static_page
title: "About Monero"
title-pre-kick: "About "
title-kick: "Monero"
title-post-kick: ""
kick-class: "kicks"
icon: "icon_about"
attribution: "<!-- Icon is based on work by Freepik ( and is licensed under Creative Commons BY 3.0 -->"
## About Monero
To most people, financial privacy is very important. Yet in recent years, we have seen a staggering amount of big corporations, banks and governments having their records compromised, at every time leaking information about their users, their practices, their balance sheets. The unfortunate but undeniable conclusion is that there is no safe place to conduct private transactions.
There was no safe place to conduct private transactions. Monero provides a place where your financial activities are private.
Monero is one of the leading cryptocurrencies in the post-Bitcoin world, and it is built on principles of privacy, decentralization, and scalability.
Read on to find out how Monero is helping to solve real problems and limitations of existing cryptocurrencies, and building a more private blockchain.
Monero seeks to provide absolute transactional privacy in an effort to create true electronic cash.
With Bitcoin, as well as with the vast majority of cryptocurrencies that have been established since, any and all transactions are entirely traceable. Any casual observer can read through the Bitcoin blockchain, and for any transaction, this observer can find out the exact amount that was transacted, as well as the precise transaction origin (sender address) and destination (recipient address).
With Monero, for any private transaction[1], the same observer has no means to uncover the origin, destination, or amount transacted. As such, transactions on the Monero blockchain, are private and fundamentally untraceable.
But Monero is more than a currency. Driving the official slogan: “secure, private, untraceable”, there are a multitude of applications where the parties involved wish to remain private. The Monero blockchain can keep confidential contracts, well… confidential. While the forthcoming, blockchain-powered internet of things will certainly place the cloud all around us, it is then increasingly important that open access tools exist to provide a secure boundary for private settlements.
An often overlooked, but nonetheless important layer of privacy in a connected world, is that of the networking infrastructure. We have teamed up with Privacy Solutions, and development is well underway to incorporate an i2p router in Monero. In a world where ill intentioned governments and ISPs can void an individual’s basic privacy rights on a whim, it then becomes necessary to establish a private communication platform.
The underlying technologies and cryptography upon which Monero is built, has been (and continues to be) the subject of extensive analysis and review by numerous individuals and research groups. It has garnered favorable attention by some of the most prominent figures of the Bitcoin & cryptography world, such as Andrew Poelstra (andytoshi), Gregory Maxwell & Nicolas Courtois.
[1] With Monero, transactions are private by default. However, each user has the ability to select different levels of privacy, optionally exposing the amount of a given (own) transaction, or even provide audit access (view only) to his full Monero account.
While most cryptocurrencies align to theoretical principles of decentralization, the reality is, that most fall short of such a claim. More often than not, it is not just one branch of a cryptocurrency system that is centralized in one form or another, is that that many branches are so.
With Proof of Stake currencies, irregular emission and distribution models cause most of the staking power to end up in the hand of a privileged few. Participants of lesser weight are reduced to second class citizens, with little chance of ever obtaining similar returns.
With Proof of Work currencies, of which Bitcoin remains the most significant reference, the mining process is largely concentrated in a handful of pools. This centralization of mining power, combined with a transparent blockchain, has already lead to various occurrences of transaction censorship.
Other currencies opt for a closed development model, thus centralizing the invention process itself. These closed platforms commonly fail to meet any form of public audit or expert review. More importantly, these are platforms that will anytime swing left and right, in order to satisfy the interests of the restricted group that holds control of development.
Monero contrasts with these examples in various and meaningful ways.
Monero is powered strictly by Proof of Work, but specifically, it employs a mining algorithm that has the potential to be efficiently tasked to billions of existing devices (any modern x86 CPU).
This very characteristic, and more so once it is coupled with Smart Mining[2], has the potential to ensure that for long years to come, the process of mining new Monero coins is within reach of the common individual, and not an exclusive opportunity to the owners of large mining operations.
Further, as transactions are private by default on the Monero blockchain, transaction censorship is inherently void.
The Monero development landscape on the other hand, is very much the opposite of a closed or restricted access model. The core branch currently enjoys more than 30 contributors, pushing 1000+ commits over the past year {there has to be better stats to put in there}. The project is happy to take on new contributors and any future plans, long term direction and priorities are openly discussed with the community. Indeed, the policy that governs contribution to the Monero codebase is exhaustingly inclusive - all contributions are accepted into the development branch, where new code can be scrutinized and tested by the entire community.
Most contributors in the Monero development landscape are quite passionate for an open source philosophy, and in this rich creative environment, new projects have sparked to life. OpenAlias[3] is one notable example, which has seen adoption by (amongst others) a major Bitcoin related software product.
[2] {Insert a neat description of Smart Mining here.}
[3] {Insert a neat description of Open Alias here.}
\ No newline at end of file
layout: static_page
title: "Protocol Explanation"
title-pre-kick: "Protocol "
title-kick: "Explanation"
title-post-kick: ""
kick-class: "kicks"
icon: "icon_about"
attribution: "<!-- Icon is based on work by Freepik ( and is licensed under Creative Commons BY 3.0 -->"
(insert that protocol image here)
Bob wants to spend XMR he received in his account and send it to Carol.
How is the transaction made?
A: Bob gets access to his "real input" that was send to his "stealth address"
1. Bob needs the public key from the transaction that contains the output he received and wants to send - Bob needs to @ECDH this key with his private view key
2. Bob also selects the exact number of the output from the transaction that contains the output he wants to send. The other output(s) in this transaction is/are change (Bob doesn't have the private key for those other outputs) Note: typically, due to @auto-denomination, Bob will have more than one output per transaction that belongs to him.
3. Bob needs the "master" private key of his account - private spend key, to be precise
4. 1,2 and 3 are used to calculate the private key for the specific output he wants to send. (the public key for the transaction can be calculated from this private key - This is correct, but the public key is also stored on the blockchain.)
B: To protects Carol's identity, Bob will do the folowing to generate a "one time" public key for this transaction, making it impossible for others to link all transactions send to Carol to the same "stealth address"
5. Bob generates a random number scalar, this one isn't clear from the graphic at all
6. this random number is hashed into the transaction public key the transaction private key, and is scalar mult'd into the transaction public key
7. he selects the number associated with the outputs (due to auto-denom) that Carol will receive, the other output(s) is/are change that goes back to Bob.
8. he needs the "master" public key from Carol to be able to send it to her stealth address - Carol's public view key
9. 6,7 and 8 are used to calculate the public key for the specific outputs he wants to send
C: to "mix" the inputs, Bob creates a ring signature
10. He selects the actual public key (+ that output's private key) from the output he wants to send, but he also adds other public keys into the mix.
11. to prevent double spending, Bob needs to send a valid "key image" together with the public keys of the outputs (or inputs if you prefer)
12. he signs the combination of inputs and the key image with his private key, prooving the key image is valid (Bob owns the private key associated with the key image) and that (somehow? I don't know how this works) one of the public keys is used to generate this key image, but as a spectator of the blockchain, we can't know which of the used outputs is "the real one that is being transferred". His private key and the other chosen public key(s) are used to create a ring signature; they'll be one signature for each input, collectively making a ring signature. The key image is an additional public key computed from the output private key (not public key) that's actually being spent.
13. This is the collection of outputs that is signed. He grabbed the "fake ones" from the blockchain. He doesn't need permission from the owners for that. This isn't quite right: those are the outputs that are doing the signing. A hash of the TX prefix is "what" is actually being signed.
14. This is the key image he signed. If Bob ever tries to send the same output again, the exact same key image will be generated and thus the double spend will be detected.
15. this "ring signature" is added to the transaction containing the publi keys that are used in the transaction and proving Bob's ownership of one of those inputs.
layout: static_page
title: "How to fix stuck funds"
title-pre-kick: "Fix "
title-kick: "Stuck funds"
title-post-kick: ""
kick-class: "kicks"
icon: "icon_about"
attribution: "<!-- Icon is based on work by Freepik ( and is licensed under Creative Commons BY 3.0 -->"
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 simplewallet.
- 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 simplewallet 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 simplewallet, 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.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment