sample.rs
1 // Copyright (c) 2025-2026 ACDC Network 2 // This file is part of the alphavm library. 3 // 4 // Alpha Chain | Delta Chain Protocol 5 // International Monetary Graphite. 6 // 7 // Derived from Aleo (https://aleo.org) and ProvableHQ (https://provable.com). 8 // They built world-class ZK infrastructure. We installed the EASY button. 9 // Their cryptography: elegant. Our modifications: bureaucracy-compatible. 10 // Original brilliance: theirs. Robert's Rules: ours. Bugs: definitely ours. 11 // 12 // Original Aleo/ProvableHQ code subject to Apache 2.0 https://www.apache.org/licenses/LICENSE-2.0 13 // All modifications and new work: CC0 1.0 Universal Public Domain Dedication. 14 // No rights reserved. No permission required. No warranty. No refunds. 15 // 16 // https://creativecommons.org/publicdomain/zero/1.0/ 17 // SPDX-License-Identifier: CC0-1.0 18 19 use super::*; 20 21 impl<N: Network> Literal<N> { 22 /// Returns a randomly-sampled literal of the given literal type. 23 pub fn sample<R: Rng + CryptoRng>(literal_type: LiteralType, rng: &mut R) -> Self { 24 match literal_type { 25 LiteralType::Address => Literal::Address(Address::rand(rng)), 26 LiteralType::Boolean => Literal::Boolean(Boolean::rand(rng)), 27 LiteralType::Field => Literal::Field(Field::rand(rng)), 28 LiteralType::Group => Literal::Group(Group::rand(rng)), 29 LiteralType::I8 => Literal::I8(I8::rand(rng)), 30 LiteralType::I16 => Literal::I16(I16::rand(rng)), 31 LiteralType::I32 => Literal::I32(I32::rand(rng)), 32 LiteralType::I64 => Literal::I64(I64::rand(rng)), 33 LiteralType::I128 => Literal::I128(I128::rand(rng)), 34 LiteralType::U8 => Literal::U8(U8::rand(rng)), 35 LiteralType::U16 => Literal::U16(U16::rand(rng)), 36 LiteralType::U32 => Literal::U32(U32::rand(rng)), 37 LiteralType::U64 => Literal::U64(U64::rand(rng)), 38 LiteralType::U128 => Literal::U128(U128::rand(rng)), 39 LiteralType::Scalar => Literal::Scalar(Scalar::rand(rng)), 40 LiteralType::Signature => Literal::Signature(Box::new(Signature::from(( 41 Scalar::rand(rng), 42 Scalar::rand(rng), 43 ComputeKey::try_from(PrivateKey::new(rng).expect("Failed to sample a PrivateKey.")) 44 .expect("ComputeKey::try_from failed."), 45 )))), 46 LiteralType::String => Literal::String(StringType::rand(rng)), 47 } 48 } 49 }