10

When I receive monero they are unavailable to be spent for 10 blocks because of the CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE (Required confirmations before newly received Monero can be spent).

Why is this the case?

With other cryptocurrencies the receiver can decide when to use an output again. With Bitcoin, the network even accepts unconfirmed inputs.

If the spendable age makes Monero insecure why is that the case?

What is the reason 10 confirmations was chosen as the spendable age requirement?

2 Answers 2

12

Cryptonote is more sensitive to reorganizations than Bitcoin.

In Bitcoin, if N blocks are reverted, all the transactions they contain are now ready to be mined again (or might already be included in blocks that replace those N blocks).

In Cryptonote, if N blocks are reverted, any transaction that include an output created in those N blocks is also (probably) invalid, since outputs are refered to by their index within an amount. This means those transactions will be rejected, and will have to be recreated. Bear in mind that, due to ring signatures, the recipient of a coin is not the only one to include it in a subsequent transaction. Third parties also do.

Now, there are ways around that. The simplest is to prevent outputs from being used within a given number of blocks. Another would be to include public keys of inputs in a transaction, instead of indices. This would increase the size of a transaction markedly, though an optimization could be made when storing the transaction (turning public keys into their index). However, this is a bit complex, since you have to keep the public keys for a while, in case those outputs end up in a reorg.

As a last point: this has to be both a wallet and daemon rule, otherwise someone would be able to tell whether an input that was created very recently is the real one or not.

6

To the best of my extremely limited knowledge, I don't know if a limitation in the cryptonote protocol that would keep you from attempting to spend unconfirmed transaction outputs.

I'd conclude from the above that it's simply a design choice to lower the chance of possible user confusion, similar to how simple wallet shows "locked/unlocked" balance, which is really confirmed/unconfirmed.

10 was most likely chosen as a reasonable block depth where the chance of being overwritten is negligible (similar to bitcoins 6 confirmations being considered irreversible).

2
  • 3
    This is correct, it protects from transaction replacement and Finney attacks.
    – user20
    Aug 18, 2016 at 21:01
  • 1
    Okey but if i send coins to myself i can be sure that i didn't try to steal them. So with simplewallet i can't even decide if i would like to accept 0 or less than 10 confirmations? And to protection is only in the wallet and not in the node itself? So i would be able to send a raw transaction and the monero network would accept it right?
    – onefox
    Aug 19, 2016 at 7:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.