Skip to content

Instantly share code, notes, and snippets.

@davebryson
Created July 18, 2022 15:46
Show Gist options
  • Save davebryson/d37cf73783965f045add40c9a757584d to your computer and use it in GitHub Desktop.
Save davebryson/d37cf73783965f045add40c9a757584d to your computer and use it in GitHub Desktop.

OpenCBDC Secure Minting (UTXO)

Requirements

  • The ability to mint money
  • Only select entities can mint
  • A minter can mint more than once
  • Must follow the same validation requirements as a normal transaction
  • Must support test environments

Mint vs. Normal Transaction

  • A mint transaction has no associated inputs to reference. This changes the validation flow
  • The public key used to verify the signature on a mint transaction must be known in advance and deemed as authorized to do so

Challenges

  • How do you identify keys used for mint transactions? This is important for both the minter and validator
  • A mint transaction has no inputs. The validation flow in both architectures check inputs.
  • If authorized keys are listed in the configuration file, how does this impact runtime changes?

Areas impacted

  • Wallet: Needs to support both normal and mint keys
  • Sentinel: Validation
  • Configuration: Needs to list authorized minter keys
  • Coordinator: Checks attestation for transactions which includes looking at inputs

Potential Ideas:

  • Could a BIP32 style HD wallet along with BIP43 (purpose of the keys) be used?
  • Should a mint transaction include 1 input, where the input has a unique marker (like a coinbase transaction) to signify a minting transaction?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment