The primary purpose and functionality of this PR is RingCt. However, there are many other (mostly) related changes and improvements.
Highlights:
multisig no longer supported because blst_ringct does not (yet?) support it. Dbcs are owned by a single SecretKey
Rng is passed to all random-using fns. So code can be 100% deterministic.
issuing genesis Dbc requires that mintnodes use the same deterministic seed.
AmountSecrets is now a wrapper for blst_ringct::RevealedCommitment
A mock spentbook is included which generates SpentProofShares and also can generate a random list of DecoyInput
The MintNodes now must trust pubkey of all SpentBook (sections) in order to validate tx SpentProofs.
Dbc is now a clent-side only data structure.
Dbc can optionally be bearer and include the SecretKey inside them.
Dbc have a base Owner and a derived one-time-use Owner. the base owner is for interacting with third parties. The one-time owner is for interacting with mint and spentbook. The spentbook enforces that a one-time-owner pubkey may only be spent once.
The spentbook validates Tx of incoming spends. This serves to keep entries in the SpentBook valid/clean, and also it means that the SpentBook section(s) and Mint reissuing section are double-checking eachother.
serde support is now behind feature flag "serdes"
mint-repl now has a nifty reissue_auto command that can generate lots of dbcs randomly.
There is now a GenesisBuilderMock for easily constructing mintnodes, spentbooks, and the genesis dbc. Very useful for tests, examples, benches.
The primary purpose and functionality of this PR is RingCt. However, there are many other (mostly) related changes and improvements.
Highlights: