11

In monero, there are three types of RingCT transactions:

enum {
  RCTTypeNull = 0,
  RCTTypeFull = 1,
  RCTTypeSimple = 2,
};

They can be observed in https://xmrchain.net/

But it's not clear what differences there are among the three types, and why there are three types at all. Why not only one type?

kenshi84
  • 2,485
  • 1
  • 14
  • 33

1 Answers1

10
  • Null is used for coinbase transactions. There are no inputs to sign, so no signatures can be provided. If a miner uses this mode (as opposed to tx.version == 1) then the coinbase output can be used as a dummy input in any rct transaction (AFAIK, primarily due to how it is stored in a database).
  • Simple is currently used when a transaction has multiple inputs. There is a LSAG signature for each input. Each LSAG is smaller in size than a tx.version == 1 signature, so there is still some space savings over the original signature method.
  • Full is used when the transaction has a single input. The MRL-005 discusses this mode in the MLSAG section - it is a signature over all inputs. This allows for more space savings over Simple mode when there are multiple inputs. However, Full mode requires that all "real" inputs be at the same offset within the ring, and therefore has not been enabled primarily due to privacy concerns (along with one subtle implementation detail).

Edit - Some clarification:

  • Full mode is used, but only when a transaction has 1 input.
  • Simple mode is actually a collection of MLSAG signatures, each of which links the commitment to zero with the key image / previous output address.
Lee Clagett
  • 906
  • 6
  • 10