message: Allow transaction::Builder RNG to be configured
diff: @@ -178,8 +178,8 @@ impl TransactionMetadata {
  }
  /// Generates a [`Transaction`] from its inputs and outputs.
  -pub struct Builder {
  - rng: OsRng,
  +pub struct Builder<R: RngCore + CryptoRng> {
  + rng: R,
  mtx: TransactionData,
  fee: Amount,
  anchor: Option<Fr>,
  @@ -188,9 +188,9 @@ pub struct Builder {
  change_address: Option<(OutgoingViewingKey, PaymentAddress<Bls12>)>,
  }
  -impl Builder {
  +impl Builder<OsRng> {
  /// Creates a new `Builder` targeted for inclusion in the block with the given height,
  - /// using default values for general transaction fields.
  + /// using default values for general transaction fields and the default OS random.
  ///
  /// # Default values
  ///
  @@ -198,12 +198,27 @@ impl Builder {
  /// expiry delta (20 blocks).
  ///
  /// The fee will be set to the default fee (0.0001 ZEC).
  - pub fn new(height: u32) -> Builder {
  + pub fn new(height: u32) -> Self {
  + Builder::new_with_rng(height, OsRng)
  + }
  +}
  +
  +impl<R: RngCore + CryptoRng> Builder<R> {
  + /// Creates a new `Builder` targeted for inclusion in the block with the given height
  + /// and randomness source, using default values for general transaction fields.
  + ///
  + /// # Default values
  + ///
  + /// The expiry height will be set to the given height plus the default transaction
  + /// expiry delta (20 blocks).
  + ///
  + /// The fee will be set to the default fee (0.0001 ZEC).
  + pub fn new_with_rng(height: u32, rng: R) -> Builder<R> {
  let mut mtx = TransactionData::new();
  mtx.expiry_height = height + DEFAULT_TX_EXPIRY_DELTA;
  Builder {
  - rng: OsRng,
  + rng,
  mtx,
  fee: DEFAULT_FEE,
  anchor: None,
  