snarkvm_console_network_environment/
environment.rs1use crate::prelude::{Deserialize, DeserializeOwned, Serialize};
17use snarkvm_curves::{
18 AffineCurve,
19 MontgomeryParameters,
20 PairingEngine,
21 ProjectiveCurve,
22 TwistedEdwardsParameters,
23 bls12_377::Bls12_377,
24 edwards_bls12::{EdwardsAffine, EdwardsParameters},
25};
26use snarkvm_fields::{PrimeField, SquareRootField};
27use snarkvm_utilities::BigInteger;
28
29use core::{fmt::Debug, hash::Hash};
30use zeroize::Zeroize;
31
32pub trait Environment:
33 'static + Copy + Clone + Debug + PartialEq + Eq + Hash + Serialize + DeserializeOwned + Send + Sync
34{
35 type Affine: AffineCurve<
36 Projective = Self::Projective,
37 BaseField = Self::Field,
38 ScalarField = Self::Scalar,
39 Coordinates = (Self::Field, Self::Field),
40 >;
41 type BigInteger: BigInteger;
42 type Field: PrimeField<BigInteger = Self::BigInteger> + SquareRootField + Copy + Zeroize;
43 type PairingCurve: PairingEngine<Fr = Self::Field>;
44 type Projective: ProjectiveCurve<Affine = Self::Affine, BaseField = Self::Field, ScalarField = Self::Scalar>;
45 type Scalar: PrimeField<BigInteger = Self::BigInteger> + Copy + Zeroize;
46
47 const EDWARDS_A: Self::Field;
49 const EDWARDS_D: Self::Field;
51
52 const MONTGOMERY_A: Self::Field;
54 const MONTGOMERY_B: Self::Field;
56
57 const MAX_STRING_BYTES: u32 = u8::MAX as u32;
59
60 fn halt<S: Into<String>, T>(message: S) -> T {
62 panic!("{}", message.into())
63 }
64}
65
66#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
67pub struct Console;
68
69impl Environment for Console {
70 type Affine = EdwardsAffine;
71 type BigInteger = <Self::Field as PrimeField>::BigInteger;
72 type Field = <Self::Affine as AffineCurve>::BaseField;
73 type PairingCurve = Bls12_377;
74 type Projective = <Self::Affine as AffineCurve>::Projective;
75 type Scalar = <Self::Affine as AffineCurve>::ScalarField;
76
77 const EDWARDS_A: Self::Field = <EdwardsParameters as TwistedEdwardsParameters>::EDWARDS_A;
79 const EDWARDS_D: Self::Field = <EdwardsParameters as TwistedEdwardsParameters>::EDWARDS_D;
81 const MONTGOMERY_A: Self::Field = <EdwardsParameters as MontgomeryParameters>::MONTGOMERY_A;
83 const MONTGOMERY_B: Self::Field = <EdwardsParameters as MontgomeryParameters>::MONTGOMERY_B;
85}