For example, we have RCTTypeNull, RCTTypeSimple and RCTTypeFull.

If I were to make a change that was not backwards compatible to RCTTypeSimple, is this versioned in some way, or is another type of tx created?

I ask if another type of tx is created because we also have RCTTypeBulletproof and RCTTypeBulletproof2.

1 Answer 1


Transactions have a version field (see here and here, which is currently 2, RingCT). However RingCT signatures also specify a type in rct_signatures.type. RCTTypeSimple etc, are the type of RingCT signature used and are defined here.

Therefore it depends what you intend on changing (transaction / signatures), that would determine which field(s) you should change to ensure backwards compatibility.

If you intend on doing away with RingCT altogether, you would of course change the transaction version field.

If you intend on creating a new type of RingCT signature, you would create a new signature type.

  • So there is really only one transaction type? While RCTTypeSimple is not a tx type, but a signature type? Jun 24, 2019 at 22:57
  • I must be wrong as this question/answer seems to imply that RCTTypeSimple is a tx type: monero.stackexchange.com/questions/3348/… Jun 24, 2019 at 23:00
  • 1
    "Oh so we have a coinbase tx (1) and ringct (2)" <- No. a coinbase tx is still a RingCT tx (version 2), it's type is RCTTypeNull.
    – jtgrassie
    Jun 25, 2019 at 2:53
  • 1
    "Does this mean that if we make any changes to RCTTypeSimple, then we will need to create a new signature type called RCTTypeSimple2?" <- Call it whatever you like, but it has to be named differently so as not to break existing RCTTypeSimple txs.
    – jtgrassie
    Jun 25, 2019 at 2:55
  • 1
    No. Pre-RingCT (v1) and RingCT (v2)
    – jtgrassie
    Jun 25, 2019 at 15:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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