diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2016-08-12 18:45:07 +0100 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2016-08-28 21:30:26 +0100 |
commit | c3b3260ae5b5acde445fa88a6f0909f582903754 (patch) | |
tree | 7b8b6977d84045568980b8d01169281c4a79c073 /src/ringct/rctTypes.h | |
parent | rct: log why verification fails (diff) | |
download | monero-c3b3260ae5b5acde445fa88a6f0909f582903754.tar.xz |
New "Halfway RingCT" outputs for coinbase transactions
When RingCT is enabled, outputs from coinbase transactions
are created as a single output, and stored as RingCT output,
with a fake mask. Their amount is not hidden on the blockchain
itself, but they are then able to be used as fake inputs in
a RingCT ring. Since the output amounts are hidden, their
"dustiness" is not an obstacle anymore to mixing, and this
makes the coinbase transactions a lot smaller, as well as
helping the TXO set to grow more slowly.
Also add a new "Null" type of rct signature, which decreases
the size required when no signatures are to be stored, as
in a coinbase tx.
Diffstat (limited to 'src/ringct/rctTypes.h')
-rw-r--r-- | src/ringct/rctTypes.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/ringct/rctTypes.h b/src/ringct/rctTypes.h index da2e3808c..58e08b0f7 100644 --- a/src/ringct/rctTypes.h +++ b/src/ringct/rctTypes.h @@ -174,8 +174,9 @@ namespace rct { // outPk contains public keypairs which are destinations (P, C), // P = address, C = commitment to amount enum { - RCTTypeFull = 0, - RCTTypeSimple = 1, + RCTTypeNull = 0, + RCTTypeFull = 1, + RCTTypeSimple = 2, }; struct rctSigBase { uint8_t type; @@ -189,6 +190,8 @@ namespace rct { BEGIN_SERIALIZE() FIELD(type) + if (type == RCTTypeNull) + return true; // FIELD(message) - not serialized, it can be reconstructed // FIELD(mixRing) - not serialized, it can be reconstructed if (type == RCTTypeSimple) @@ -224,6 +227,8 @@ namespace rct { BEGIN_SERIALIZE_OBJECT() FIELDS(*static_cast<rctSigBase *>(this)) + if (type == RCTTypeNull) + return true; FIELDS(p); END_SERIALIZE() }; |