Blockchain, Zero Knowledge Proofs, Crypto, Rust, Cryptography.
implementation as a parameter, rather than creating it internally, means that applications perform domain separation by default (by passing a label when they initialize the transcript). Because an application can commit its own messages to the transcript before passing it to the proof