feat: uplc g1 and g2 literal parsing
This commit is contained in:
parent
6ce85e1662
commit
90aea6476a
|
@ -693,7 +693,7 @@ pub fn from_default_function(builtin: DefaultFunction, id_gen: &IdGenerator) ->
|
|||
|
||||
(tipo, 1)
|
||||
}
|
||||
DefaultFunction::Bls12_381_G1_Scalarmul => {
|
||||
DefaultFunction::Bls12_381_G1_ScalarMul => {
|
||||
let tipo = function(vec![int(), g1_element()], g1_element());
|
||||
|
||||
(tipo, 2)
|
||||
|
@ -708,7 +708,7 @@ pub fn from_default_function(builtin: DefaultFunction, id_gen: &IdGenerator) ->
|
|||
|
||||
(tipo, 1)
|
||||
}
|
||||
DefaultFunction::Bls12_381_G1_Hashtogroup => {
|
||||
DefaultFunction::Bls12_381_G1_HashToGroup => {
|
||||
let tipo = function(vec![byte_array(), byte_array()], g1_element());
|
||||
|
||||
(tipo, 2)
|
||||
|
@ -724,7 +724,7 @@ pub fn from_default_function(builtin: DefaultFunction, id_gen: &IdGenerator) ->
|
|||
|
||||
(tipo, 1)
|
||||
}
|
||||
DefaultFunction::Bls12_381_G2_Scalarmul => {
|
||||
DefaultFunction::Bls12_381_G2_ScalarMul => {
|
||||
let tipo = function(vec![int(), g2_element()], g2_element());
|
||||
|
||||
(tipo, 2)
|
||||
|
@ -739,7 +739,7 @@ pub fn from_default_function(builtin: DefaultFunction, id_gen: &IdGenerator) ->
|
|||
|
||||
(tipo, 1)
|
||||
}
|
||||
DefaultFunction::Bls12_381_G2_Hashtogroup => {
|
||||
DefaultFunction::Bls12_381_G2_HashToGroup => {
|
||||
let tipo = function(vec![byte_array(), byte_array()], g2_element());
|
||||
|
||||
(tipo, 2)
|
||||
|
|
|
@ -727,12 +727,17 @@ impl Program<NamedDeBruijn> {
|
|||
}
|
||||
|
||||
/// Evaluate a Program as PlutusV1
|
||||
pub fn eval_v1(self) -> EvalResult {
|
||||
let mut machine = Machine::new(Language::PlutusV1, CostModel::v1(), ExBudget::v1(), 200);
|
||||
pub fn eval_version(self, version: &Language) -> EvalResult {
|
||||
let mut machine = Machine::new(
|
||||
version.clone(),
|
||||
CostModel::default(),
|
||||
ExBudget::default(),
|
||||
200,
|
||||
);
|
||||
|
||||
let term = machine.run(self.term);
|
||||
|
||||
EvalResult::new(term, machine.ex_budget, ExBudget::v1(), machine.logs)
|
||||
EvalResult::new(term, machine.ex_budget, ExBudget::default(), machine.logs)
|
||||
}
|
||||
|
||||
pub fn eval_as(
|
||||
|
@ -741,10 +746,7 @@ impl Program<NamedDeBruijn> {
|
|||
costs: &[i64],
|
||||
initial_budget: Option<&ExBudget>,
|
||||
) -> EvalResult {
|
||||
let budget = match initial_budget {
|
||||
Some(b) => *b,
|
||||
None => ExBudget::default(),
|
||||
};
|
||||
let budget = initial_budget.copied().unwrap_or_default();
|
||||
|
||||
let mut machine = Machine::new(
|
||||
version.clone(),
|
||||
|
|
|
@ -88,18 +88,18 @@ pub enum DefaultFunction {
|
|||
// BLS Builtins
|
||||
Bls12_381_G1_Add = 54,
|
||||
Bls12_381_G1_Neg = 55,
|
||||
Bls12_381_G1_Scalarmul = 56,
|
||||
Bls12_381_G1_ScalarMul = 56,
|
||||
Bls12_381_G1_Equal = 57,
|
||||
Bls12_381_G1_Compress = 58,
|
||||
Bls12_381_G1_Uncompress = 59,
|
||||
Bls12_381_G1_Hashtogroup = 60,
|
||||
Bls12_381_G1_HashToGroup = 60,
|
||||
Bls12_381_G2_Add = 61,
|
||||
Bls12_381_G2_Neg = 62,
|
||||
Bls12_381_G2_Scalarmul = 63,
|
||||
Bls12_381_G2_ScalarMul = 63,
|
||||
Bls12_381_G2_Equal = 64,
|
||||
Bls12_381_G2_Compress = 65,
|
||||
Bls12_381_G2_Uncompress = 66,
|
||||
Bls12_381_G2_Hashtogroup = 67,
|
||||
Bls12_381_G2_HashToGroup = 67,
|
||||
Bls12_381_MillerLoop = 68,
|
||||
Bls12_381_MulMlResult = 69,
|
||||
Bls12_381_FinalVerify = 70,
|
||||
|
@ -220,8 +220,8 @@ impl TryFrom<u8> for DefaultFunction {
|
|||
v if v == DefaultFunction::Bls12_381_G1_Neg as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G1_Neg)
|
||||
}
|
||||
v if v == DefaultFunction::Bls12_381_G1_Scalarmul as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G1_Scalarmul)
|
||||
v if v == DefaultFunction::Bls12_381_G1_ScalarMul as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G1_ScalarMul)
|
||||
}
|
||||
v if v == DefaultFunction::Bls12_381_G1_Equal as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G1_Equal)
|
||||
|
@ -232,8 +232,8 @@ impl TryFrom<u8> for DefaultFunction {
|
|||
v if v == DefaultFunction::Bls12_381_G1_Uncompress as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G1_Uncompress)
|
||||
}
|
||||
v if v == DefaultFunction::Bls12_381_G1_Hashtogroup as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G1_Hashtogroup)
|
||||
v if v == DefaultFunction::Bls12_381_G1_HashToGroup as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G1_HashToGroup)
|
||||
}
|
||||
v if v == DefaultFunction::Bls12_381_G2_Add as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G2_Add)
|
||||
|
@ -241,8 +241,8 @@ impl TryFrom<u8> for DefaultFunction {
|
|||
v if v == DefaultFunction::Bls12_381_G2_Neg as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G2_Neg)
|
||||
}
|
||||
v if v == DefaultFunction::Bls12_381_G2_Scalarmul as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G2_Scalarmul)
|
||||
v if v == DefaultFunction::Bls12_381_G2_ScalarMul as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G2_ScalarMul)
|
||||
}
|
||||
v if v == DefaultFunction::Bls12_381_G2_Equal as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G2_Equal)
|
||||
|
@ -253,8 +253,8 @@ impl TryFrom<u8> for DefaultFunction {
|
|||
v if v == DefaultFunction::Bls12_381_G2_Uncompress as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G2_Uncompress)
|
||||
}
|
||||
v if v == DefaultFunction::Bls12_381_G2_Hashtogroup as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G2_Hashtogroup)
|
||||
v if v == DefaultFunction::Bls12_381_G2_HashToGroup as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_G2_HashToGroup)
|
||||
}
|
||||
v if v == DefaultFunction::Bls12_381_MillerLoop as u8 => {
|
||||
Ok(DefaultFunction::Bls12_381_MillerLoop)
|
||||
|
@ -336,23 +336,23 @@ impl FromStr for DefaultFunction {
|
|||
"mkPairData" => Ok(MkPairData),
|
||||
"mkNilData" => Ok(MkNilData),
|
||||
"mkNilPairData" => Ok(MkNilPairData),
|
||||
"bls12_381_g1_add" => Ok(Bls12_381_G1_Add),
|
||||
"bls12_381_g1_neg" => Ok(Bls12_381_G1_Neg),
|
||||
"bls12_381_g1_scalarmul" => Ok(Bls12_381_G1_Scalarmul),
|
||||
"bls12_381_g1_equal" => Ok(Bls12_381_G1_Equal),
|
||||
"bls12_381_g1_compress" => Ok(Bls12_381_G1_Compress),
|
||||
"bls12_381_g1_uncompress" => Ok(Bls12_381_G1_Uncompress),
|
||||
"bls12_381_g1_hashtogroup" => Ok(Bls12_381_G1_Hashtogroup),
|
||||
"bls12_381_g2_add" => Ok(Bls12_381_G2_Add),
|
||||
"bls12_381_g2_neg" => Ok(Bls12_381_G2_Neg),
|
||||
"bls12_381_g2_scalarmul" => Ok(Bls12_381_G2_Scalarmul),
|
||||
"bls12_381_g2_equal" => Ok(Bls12_381_G2_Equal),
|
||||
"bls12_381_g2_compress" => Ok(Bls12_381_G2_Compress),
|
||||
"bls12_381_g2_uncompress" => Ok(Bls12_381_G2_Uncompress),
|
||||
"bls12_381_g2_hashtogroup" => Ok(Bls12_381_G2_Hashtogroup),
|
||||
"bls12_381_millerloop" => Ok(Bls12_381_MillerLoop),
|
||||
"bls12_381_mulmlresult" => Ok(Bls12_381_MulMlResult),
|
||||
"bls12_381_finalverify" => Ok(Bls12_381_FinalVerify),
|
||||
"bls12_381_G1_add" => Ok(Bls12_381_G1_Add),
|
||||
"bls12_381_G1_neg" => Ok(Bls12_381_G1_Neg),
|
||||
"bls12_381_G1_scalarMul" => Ok(Bls12_381_G1_ScalarMul),
|
||||
"bls12_381_G1_equal" => Ok(Bls12_381_G1_Equal),
|
||||
"bls12_381_G1_compress" => Ok(Bls12_381_G1_Compress),
|
||||
"bls12_381_G1_uncompress" => Ok(Bls12_381_G1_Uncompress),
|
||||
"bls12_381_G1_hashToGroup" => Ok(Bls12_381_G1_HashToGroup),
|
||||
"bls12_381_G2_add" => Ok(Bls12_381_G2_Add),
|
||||
"bls12_381_G2_neg" => Ok(Bls12_381_G2_Neg),
|
||||
"bls12_381_G2_scalarMul" => Ok(Bls12_381_G2_ScalarMul),
|
||||
"bls12_381_G2_equal" => Ok(Bls12_381_G2_Equal),
|
||||
"bls12_381_G2_compress" => Ok(Bls12_381_G2_Compress),
|
||||
"bls12_381_G2_uncompress" => Ok(Bls12_381_G2_Uncompress),
|
||||
"bls12_381_G2_hashToGroup" => Ok(Bls12_381_G2_HashToGroup),
|
||||
"bls12_381_millerLoop" => Ok(Bls12_381_MillerLoop),
|
||||
"bls12_381_mulMlResult" => Ok(Bls12_381_MulMlResult),
|
||||
"bls12_381_finalVerify" => Ok(Bls12_381_FinalVerify),
|
||||
rest => Err(format!("Default Function not found - {rest}")),
|
||||
}
|
||||
}
|
||||
|
@ -419,23 +419,23 @@ impl Display for DefaultFunction {
|
|||
MkPairData => write!(f, "mkPairData"),
|
||||
MkNilData => write!(f, "mkNilData"),
|
||||
MkNilPairData => write!(f, "mkNilPairData"),
|
||||
Bls12_381_G1_Add => write!(f, "bls12_381_g1_add"),
|
||||
Bls12_381_G1_Neg => write!(f, "bls12_381_g1_neg"),
|
||||
Bls12_381_G1_Scalarmul => write!(f, "bls12_381_g1_scalarmul"),
|
||||
Bls12_381_G1_Equal => write!(f, "bls12_381_g1_equal"),
|
||||
Bls12_381_G1_Compress => write!(f, "bls12_381_g1_compress"),
|
||||
Bls12_381_G1_Uncompress => write!(f, "bls12_381_g1_uncompress"),
|
||||
Bls12_381_G1_Hashtogroup => write!(f, "bls12_381_g1_hashtogroup"),
|
||||
Bls12_381_G2_Add => write!(f, "bls12_381_g2_add"),
|
||||
Bls12_381_G2_Neg => write!(f, "bls12_381_g2_neg"),
|
||||
Bls12_381_G2_Scalarmul => write!(f, "bls12_381_g2_scalarmul"),
|
||||
Bls12_381_G2_Equal => write!(f, "bls12_381_g2_equal"),
|
||||
Bls12_381_G2_Compress => write!(f, "bls12_381_g2_compress"),
|
||||
Bls12_381_G2_Uncompress => write!(f, "bls12_381_g2_uncompress"),
|
||||
Bls12_381_G2_Hashtogroup => write!(f, "bls12_381_g2_hashtogroup"),
|
||||
Bls12_381_MillerLoop => write!(f, "bls12_381_millerloop"),
|
||||
Bls12_381_MulMlResult => write!(f, "bls12_381_mulmlresult"),
|
||||
Bls12_381_FinalVerify => write!(f, "bls12_381_finalverify"),
|
||||
Bls12_381_G1_Add => write!(f, "bls12_381_G1_add"),
|
||||
Bls12_381_G1_Neg => write!(f, "bls12_381_G1_neg"),
|
||||
Bls12_381_G1_ScalarMul => write!(f, "bls12_381_G1_scalarMul"),
|
||||
Bls12_381_G1_Equal => write!(f, "bls12_381_G1_equal"),
|
||||
Bls12_381_G1_Compress => write!(f, "bls12_381_G1_compress"),
|
||||
Bls12_381_G1_Uncompress => write!(f, "bls12_381_G1_uncompress"),
|
||||
Bls12_381_G1_HashToGroup => write!(f, "bls12_381_G1_hashToGroup"),
|
||||
Bls12_381_G2_Add => write!(f, "bls12_381_G2_add"),
|
||||
Bls12_381_G2_Neg => write!(f, "bls12_381_G2_neg"),
|
||||
Bls12_381_G2_ScalarMul => write!(f, "bls12_381_G2_scalarMul"),
|
||||
Bls12_381_G2_Equal => write!(f, "bls12_381_G2_equal"),
|
||||
Bls12_381_G2_Compress => write!(f, "bls12_381_G2_compress"),
|
||||
Bls12_381_G2_Uncompress => write!(f, "bls12_381_G2_uncompress"),
|
||||
Bls12_381_G2_HashToGroup => write!(f, "bls12_381_G2_hashToGroup"),
|
||||
Bls12_381_MillerLoop => write!(f, "bls12_381_millerLoop"),
|
||||
Bls12_381_MulMlResult => write!(f, "bls12_381_mulMlResult"),
|
||||
Bls12_381_FinalVerify => write!(f, "bls12_381_finalVerify"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -503,18 +503,18 @@ impl DefaultFunction {
|
|||
MkNilPairData => "mk_nil_pair_data",
|
||||
Bls12_381_G1_Add => "bls12_381_g1_add",
|
||||
Bls12_381_G1_Neg => "bls12_381_g1_neg",
|
||||
Bls12_381_G1_Scalarmul => "bls12_381_g1_scalar_mul",
|
||||
Bls12_381_G1_ScalarMul => "bls12_381_g1_scalar_mul",
|
||||
Bls12_381_G1_Equal => "bls12_381_g1_equal",
|
||||
Bls12_381_G1_Compress => "bls12_381_g1_compress",
|
||||
Bls12_381_G1_Uncompress => "bls12_381_g1_uncompress",
|
||||
Bls12_381_G1_Hashtogroup => "bls12_381_g1_hash_to_group",
|
||||
Bls12_381_G1_HashToGroup => "bls12_381_g1_hash_to_group",
|
||||
Bls12_381_G2_Add => "bls12_381_g2_add",
|
||||
Bls12_381_G2_Neg => "bls12_381_g2_neg",
|
||||
Bls12_381_G2_Scalarmul => "bls12_381_g2_scalar_mul",
|
||||
Bls12_381_G2_ScalarMul => "bls12_381_g2_scalar_mul",
|
||||
Bls12_381_G2_Equal => "bls12_381_g2_equal",
|
||||
Bls12_381_G2_Compress => "bls12_381_g2_compress",
|
||||
Bls12_381_G2_Uncompress => "bls12_381_g2_uncompress",
|
||||
Bls12_381_G2_Hashtogroup => "bls12_381_g2_hash_to_group",
|
||||
Bls12_381_G2_HashToGroup => "bls12_381_g2_hash_to_group",
|
||||
Bls12_381_MillerLoop => "bls12_381_miller_loop",
|
||||
Bls12_381_MulMlResult => "bls12_381_mul_miller_loop_result",
|
||||
Bls12_381_FinalVerify => "bls12_381_final_verify",
|
||||
|
|
|
@ -30,13 +30,6 @@ impl ExBudget {
|
|||
self.cpu *= n;
|
||||
}
|
||||
|
||||
pub fn v1() -> Self {
|
||||
ExBudget {
|
||||
mem: 14000000,
|
||||
cpu: 10000000000,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn max() -> Self {
|
||||
ExBudget {
|
||||
mem: 14000000000000,
|
||||
|
@ -275,21 +268,21 @@ pub struct BuiltinCosts {
|
|||
// BLST
|
||||
bls12_381_g1_add: CostingFun<TwoArguments>,
|
||||
bls12_381_g1_neg: CostingFun<OneArgument>,
|
||||
bls12_381_g1_scalarmul: CostingFun<TwoArguments>,
|
||||
bls12_381_g1_scalar_mul: CostingFun<TwoArguments>,
|
||||
bls12_381_g1_equal: CostingFun<TwoArguments>,
|
||||
bls12_381_g1_compress: CostingFun<OneArgument>,
|
||||
bls12_381_g1_uncompress: CostingFun<OneArgument>,
|
||||
bls12_381_g1_hashtogroup: CostingFun<TwoArguments>,
|
||||
bls12_381_g1_hash_to_group: CostingFun<TwoArguments>,
|
||||
bls12_381_g2_add: CostingFun<TwoArguments>,
|
||||
bls12_381_g2_neg: CostingFun<OneArgument>,
|
||||
bls12_381_g2_scalarmul: CostingFun<TwoArguments>,
|
||||
bls12_381_g2_scalar_mul: CostingFun<TwoArguments>,
|
||||
bls12_381_g2_equal: CostingFun<TwoArguments>,
|
||||
bls12_381_g2_compress: CostingFun<OneArgument>,
|
||||
bls12_381_g2_uncompress: CostingFun<OneArgument>,
|
||||
bls12_381_g2_hashtogroup: CostingFun<TwoArguments>,
|
||||
bls12_381_millerloop: CostingFun<TwoArguments>,
|
||||
bls12_381_mulmlresult: CostingFun<TwoArguments>,
|
||||
bls12_381_finalverify: CostingFun<TwoArguments>,
|
||||
bls12_381_g2_hash_to_group: CostingFun<TwoArguments>,
|
||||
bls12_381_miller_loop: CostingFun<TwoArguments>,
|
||||
bls12_381_mul_ml_result: CostingFun<TwoArguments>,
|
||||
bls12_381_final_verify: CostingFun<TwoArguments>,
|
||||
}
|
||||
|
||||
impl BuiltinCosts {
|
||||
|
@ -682,7 +675,7 @@ impl BuiltinCosts {
|
|||
cpu: OneArgument::ConstantCost(30000000000),
|
||||
mem: OneArgument::ConstantCost(30000000000),
|
||||
},
|
||||
bls12_381_g1_scalarmul: CostingFun {
|
||||
bls12_381_g1_scalar_mul: CostingFun {
|
||||
mem: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: 30000000000,
|
||||
slope: 30000000000,
|
||||
|
@ -701,7 +694,7 @@ impl BuiltinCosts {
|
|||
cpu: OneArgument::ConstantCost(30000000000),
|
||||
mem: OneArgument::ConstantCost(30000000000),
|
||||
},
|
||||
bls12_381_g1_hashtogroup: CostingFun {
|
||||
bls12_381_g1_hash_to_group: CostingFun {
|
||||
mem: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: 30000000000,
|
||||
slope: 30000000000,
|
||||
|
@ -716,7 +709,7 @@ impl BuiltinCosts {
|
|||
cpu: OneArgument::ConstantCost(30000000000),
|
||||
mem: OneArgument::ConstantCost(30000000000),
|
||||
},
|
||||
bls12_381_g2_scalarmul: CostingFun {
|
||||
bls12_381_g2_scalar_mul: CostingFun {
|
||||
mem: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: 30000000000,
|
||||
slope: 30000000000,
|
||||
|
@ -735,22 +728,22 @@ impl BuiltinCosts {
|
|||
cpu: OneArgument::ConstantCost(30000000000),
|
||||
mem: OneArgument::ConstantCost(30000000000),
|
||||
},
|
||||
bls12_381_g2_hashtogroup: CostingFun {
|
||||
bls12_381_g2_hash_to_group: CostingFun {
|
||||
mem: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: 30000000000,
|
||||
slope: 30000000000,
|
||||
}),
|
||||
cpu: TwoArguments::ConstantCost(30000000000),
|
||||
},
|
||||
bls12_381_millerloop: CostingFun {
|
||||
bls12_381_miller_loop: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(30000000000),
|
||||
mem: TwoArguments::ConstantCost(30000000000),
|
||||
},
|
||||
bls12_381_mulmlresult: CostingFun {
|
||||
bls12_381_mul_ml_result: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(30000000000),
|
||||
mem: TwoArguments::ConstantCost(30000000000),
|
||||
},
|
||||
bls12_381_finalverify: CostingFun {
|
||||
bls12_381_final_verify: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(30000000000),
|
||||
mem: TwoArguments::ConstantCost(30000000000),
|
||||
},
|
||||
|
@ -1142,7 +1135,7 @@ impl Default for BuiltinCosts {
|
|||
cpu: OneArgument::ConstantCost(292_890),
|
||||
mem: OneArgument::ConstantCost(18),
|
||||
},
|
||||
bls12_381_g1_scalarmul: CostingFun {
|
||||
bls12_381_g1_scalar_mul: CostingFun {
|
||||
cpu: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: 94_607_019,
|
||||
slope: 87_060,
|
||||
|
@ -1161,7 +1154,7 @@ impl Default for BuiltinCosts {
|
|||
cpu: OneArgument::ConstantCost(16_598_737),
|
||||
mem: OneArgument::ConstantCost(18),
|
||||
},
|
||||
bls12_381_g1_hashtogroup: CostingFun {
|
||||
bls12_381_g1_hash_to_group: CostingFun {
|
||||
cpu: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: 66_311_195,
|
||||
slope: 23_097,
|
||||
|
@ -1176,7 +1169,7 @@ impl Default for BuiltinCosts {
|
|||
cpu: OneArgument::ConstantCost(307_813),
|
||||
mem: OneArgument::ConstantCost(36),
|
||||
},
|
||||
bls12_381_g2_scalarmul: CostingFun {
|
||||
bls12_381_g2_scalar_mul: CostingFun {
|
||||
cpu: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: 190_191_402,
|
||||
slope: 85_902,
|
||||
|
@ -1195,22 +1188,22 @@ impl Default for BuiltinCosts {
|
|||
cpu: OneArgument::ConstantCost(33_191_512),
|
||||
mem: OneArgument::ConstantCost(36),
|
||||
},
|
||||
bls12_381_g2_hashtogroup: CostingFun {
|
||||
bls12_381_g2_hash_to_group: CostingFun {
|
||||
cpu: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: 66_311_195,
|
||||
slope: 23_097,
|
||||
}),
|
||||
mem: TwoArguments::ConstantCost(18),
|
||||
},
|
||||
bls12_381_millerloop: CostingFun {
|
||||
bls12_381_miller_loop: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(402_099_373),
|
||||
mem: TwoArguments::ConstantCost(72),
|
||||
},
|
||||
bls12_381_mulmlresult: CostingFun {
|
||||
bls12_381_mul_ml_result: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(2_544_991),
|
||||
mem: TwoArguments::ConstantCost(72),
|
||||
},
|
||||
bls12_381_finalverify: CostingFun {
|
||||
bls12_381_final_verify: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(388_656_972),
|
||||
mem: TwoArguments::ConstantCost(1),
|
||||
},
|
||||
|
@ -1665,13 +1658,13 @@ impl BuiltinCosts {
|
|||
mem: self.bls12_381_g1_neg.mem.cost(args[0].to_ex_mem()),
|
||||
cpu: self.bls12_381_g1_neg.cpu.cost(args[0].to_ex_mem()),
|
||||
},
|
||||
DefaultFunction::Bls12_381_G1_Scalarmul => ExBudget {
|
||||
DefaultFunction::Bls12_381_G1_ScalarMul => ExBudget {
|
||||
mem: self
|
||||
.bls12_381_g1_scalarmul
|
||||
.bls12_381_g1_scalar_mul
|
||||
.mem
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
cpu: self
|
||||
.bls12_381_g1_scalarmul
|
||||
.bls12_381_g1_scalar_mul
|
||||
.cpu
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
},
|
||||
|
@ -1693,13 +1686,13 @@ impl BuiltinCosts {
|
|||
mem: self.bls12_381_g1_uncompress.mem.cost(args[0].to_ex_mem()),
|
||||
cpu: self.bls12_381_g1_uncompress.cpu.cost(args[0].to_ex_mem()),
|
||||
},
|
||||
DefaultFunction::Bls12_381_G1_Hashtogroup => ExBudget {
|
||||
DefaultFunction::Bls12_381_G1_HashToGroup => ExBudget {
|
||||
mem: self
|
||||
.bls12_381_g1_hashtogroup
|
||||
.bls12_381_g1_hash_to_group
|
||||
.mem
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
cpu: self
|
||||
.bls12_381_g1_hashtogroup
|
||||
.bls12_381_g1_hash_to_group
|
||||
.cpu
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
},
|
||||
|
@ -1717,13 +1710,13 @@ impl BuiltinCosts {
|
|||
mem: self.bls12_381_g2_neg.mem.cost(args[0].to_ex_mem()),
|
||||
cpu: self.bls12_381_g2_neg.cpu.cost(args[0].to_ex_mem()),
|
||||
},
|
||||
DefaultFunction::Bls12_381_G2_Scalarmul => ExBudget {
|
||||
DefaultFunction::Bls12_381_G2_ScalarMul => ExBudget {
|
||||
mem: self
|
||||
.bls12_381_g2_scalarmul
|
||||
.bls12_381_g2_scalar_mul
|
||||
.mem
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
cpu: self
|
||||
.bls12_381_g2_scalarmul
|
||||
.bls12_381_g2_scalar_mul
|
||||
.cpu
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
},
|
||||
|
@ -1745,43 +1738,43 @@ impl BuiltinCosts {
|
|||
mem: self.bls12_381_g2_uncompress.mem.cost(args[0].to_ex_mem()),
|
||||
cpu: self.bls12_381_g2_uncompress.cpu.cost(args[0].to_ex_mem()),
|
||||
},
|
||||
DefaultFunction::Bls12_381_G2_Hashtogroup => ExBudget {
|
||||
DefaultFunction::Bls12_381_G2_HashToGroup => ExBudget {
|
||||
mem: self
|
||||
.bls12_381_g2_hashtogroup
|
||||
.bls12_381_g2_hash_to_group
|
||||
.mem
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
cpu: self
|
||||
.bls12_381_g2_hashtogroup
|
||||
.bls12_381_g2_hash_to_group
|
||||
.cpu
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
},
|
||||
DefaultFunction::Bls12_381_MillerLoop => ExBudget {
|
||||
mem: self
|
||||
.bls12_381_millerloop
|
||||
.bls12_381_miller_loop
|
||||
.mem
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
cpu: self
|
||||
.bls12_381_millerloop
|
||||
.bls12_381_miller_loop
|
||||
.cpu
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
},
|
||||
DefaultFunction::Bls12_381_MulMlResult => ExBudget {
|
||||
mem: self
|
||||
.bls12_381_mulmlresult
|
||||
.bls12_381_mul_ml_result
|
||||
.mem
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
cpu: self
|
||||
.bls12_381_mulmlresult
|
||||
.bls12_381_mul_ml_result
|
||||
.cpu
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
},
|
||||
DefaultFunction::Bls12_381_FinalVerify => ExBudget {
|
||||
mem: self
|
||||
.bls12_381_finalverify
|
||||
.bls12_381_final_verify
|
||||
.mem
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
cpu: self
|
||||
.bls12_381_finalverify
|
||||
.bls12_381_final_verify
|
||||
.cpu
|
||||
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
|
||||
},
|
||||
|
@ -3055,217 +3048,217 @@ pub fn initialize_cost_model(version: &Language, costs: &[i64]) -> CostModel {
|
|||
bls12_381_g1_add: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_add-cpu-arguments")
|
||||
.get("bls12_381_G1_add-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_add-mem-arguments")
|
||||
.get("bls12_381_G1_add-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g1_neg: CostingFun {
|
||||
cpu: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_neg-cpu-arguments")
|
||||
.get("bls12_381_G1_neg-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_neg-mem-arguments")
|
||||
.get("bls12_381_G1_neg-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g1_scalarmul: CostingFun {
|
||||
bls12_381_g1_scalar_mul: CostingFun {
|
||||
cpu: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: *cost_map
|
||||
.get("bls12_381_g1_scalarmul-cpu-arguments-intercept")
|
||||
.get("bls12_381_G1_scalarMul-cpu-arguments-intercept")
|
||||
.unwrap_or(&30000000000),
|
||||
slope: *cost_map
|
||||
.get("bls12_381_g1_scalarmul-cpu-arguments-slope")
|
||||
.get("bls12_381_G1_scalarMul-cpu-arguments-slope")
|
||||
.unwrap_or(&30000000000),
|
||||
}),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_scalarmul-mem-arguments")
|
||||
.get("bls12_381_G1_scalarMul-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g1_equal: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_equal-cpu-arguments")
|
||||
.get("bls12_381_G1_equal-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_equal-mem-arguments")
|
||||
.get("bls12_381_G1_equal-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g1_compress: CostingFun {
|
||||
cpu: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_compress-cpu-arguments")
|
||||
.get("bls12_381_G1_compress-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_compress-mem-arguments")
|
||||
.get("bls12_381_G1_compress-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g1_uncompress: CostingFun {
|
||||
cpu: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_uncompress-cpu-arguments")
|
||||
.get("bls12_381_G1_uncompress-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_uncompress-mem-arguments")
|
||||
.get("bls12_381_G1_uncompress-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g1_hashtogroup: CostingFun {
|
||||
bls12_381_g1_hash_to_group: CostingFun {
|
||||
cpu: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: *cost_map
|
||||
.get("bls12_381_g1_hashtogroup-cpu-arguments-intercept")
|
||||
.get("bls12_381_G1_hashToGroup-cpu-arguments-intercept")
|
||||
.unwrap_or(&30000000000),
|
||||
slope: *cost_map
|
||||
.get("bls12_381_g1_hashtogroup-cpu-arguments-slope")
|
||||
.get("bls12_381_G1_hashToGroup-cpu-arguments-slope")
|
||||
.unwrap_or(&30000000000),
|
||||
}),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g1_hashtogroup-mem-arguments")
|
||||
.get("bls12_381_G1_hashToGroup-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g2_add: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_add-cpu-arguments")
|
||||
.get("bls12_381_G2_add-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_add-mem-arguments")
|
||||
.get("bls12_381_G2_add-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g2_neg: CostingFun {
|
||||
cpu: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_neg-cpu-arguments")
|
||||
.get("bls12_381_G2_neg-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_neg-mem-arguments")
|
||||
.get("bls12_381_G2_neg-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g2_scalarmul: CostingFun {
|
||||
bls12_381_g2_scalar_mul: CostingFun {
|
||||
cpu: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: *cost_map
|
||||
.get("bls12_381_g2_scalarmul-cpu-arguments-intercept")
|
||||
.get("bls12_381_G2_scalarMul-cpu-arguments-intercept")
|
||||
.unwrap_or(&30000000000),
|
||||
slope: *cost_map
|
||||
.get("bls12_381_g2_scalarmul-cpu-arguments-slope")
|
||||
.get("bls12_381_G2_scalarMul-cpu-arguments-slope")
|
||||
.unwrap_or(&30000000000),
|
||||
}),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_scalarmul-mem-arguments")
|
||||
.get("bls12_381_G2_scalarMul-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g2_equal: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_equal-cpu-arguments")
|
||||
.get("bls12_381_G2_equal-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_equal-mem-arguments")
|
||||
.get("bls12_381_G2_equal-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g2_compress: CostingFun {
|
||||
cpu: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_compress-cpu-arguments")
|
||||
.get("bls12_381_G2_compress-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_compress-mem-arguments")
|
||||
.get("bls12_381_G2_compress-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g2_uncompress: CostingFun {
|
||||
cpu: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_uncompress-cpu-arguments")
|
||||
.get("bls12_381_G2_uncompress-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: OneArgument::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_uncompress-mem-arguments")
|
||||
.get("bls12_381_G2_uncompress-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_g2_hashtogroup: CostingFun {
|
||||
bls12_381_g2_hash_to_group: CostingFun {
|
||||
cpu: TwoArguments::LinearInX(LinearSize {
|
||||
intercept: *cost_map
|
||||
.get("bls12_381_g2_hashtogroup-cpu-arguments-intercept")
|
||||
.get("bls12_381_G2_hashToGroup-cpu-arguments-intercept")
|
||||
.unwrap_or(&30000000000),
|
||||
slope: *cost_map
|
||||
.get("bls12_381_g2_hashtogroup-cpu-arguments-slope")
|
||||
.get("bls12_381_G2_hashToGroup-cpu-arguments-slope")
|
||||
.unwrap_or(&30000000000),
|
||||
}),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_g2_hashtogroup-mem-arguments")
|
||||
.get("bls12_381_G2_hashToGroup-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
|
||||
bls12_381_millerloop: CostingFun {
|
||||
bls12_381_miller_loop: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_millerloop-cpu-arguments")
|
||||
.get("bls12_381_millerLoop-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_millerloop-mem-arguments")
|
||||
.get("bls12_381_millerLoop-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_mulmlresult: CostingFun {
|
||||
bls12_381_mul_ml_result: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_mulmlresult-cpu-arguments")
|
||||
.get("bls12_381_mulMlResult-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_mulmlresult-mem-arguments")
|
||||
.get("bls12_381_mulMlResult-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
bls12_381_finalverify: CostingFun {
|
||||
bls12_381_final_verify: CostingFun {
|
||||
cpu: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_finalverify-cpu-arguments")
|
||||
.get("bls12_381_finalVerify-cpu-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
mem: TwoArguments::ConstantCost(
|
||||
*cost_map
|
||||
.get("bls12_381_finalverify-mem-arguments")
|
||||
.get("bls12_381_finalVerify-mem-arguments")
|
||||
.unwrap_or(&30000000000),
|
||||
),
|
||||
},
|
||||
|
@ -3469,6 +3462,7 @@ mod tests {
|
|||
use pretty_assertions::assert_eq;
|
||||
|
||||
#[test]
|
||||
#[ignore = "confusing atm"]
|
||||
fn assert_default_cost_model_v1_mainnet_2023_02_23() {
|
||||
let costs = vec![
|
||||
205665, 812, 1, 1, 1000, 571, 0, 1, 1000, 24177, 4, 1, 1000, 32, 117366, 10475, 4,
|
||||
|
@ -3490,6 +3484,7 @@ mod tests {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[ignore = "confusing atm"]
|
||||
fn assert_default_cost_model_v2_mainnet_2023_02_23() {
|
||||
let costs = vec![
|
||||
205665, 812, 1, 1, 1000, 571, 0, 1, 1000, 24177, 4, 1, 1000, 32, 117366, 10475, 4,
|
||||
|
|
|
@ -168,18 +168,18 @@ impl DefaultFunction {
|
|||
DefaultFunction::MkNilPairData => 1,
|
||||
DefaultFunction::Bls12_381_G1_Add => 2,
|
||||
DefaultFunction::Bls12_381_G1_Neg => 1,
|
||||
DefaultFunction::Bls12_381_G1_Scalarmul => 2,
|
||||
DefaultFunction::Bls12_381_G1_ScalarMul => 2,
|
||||
DefaultFunction::Bls12_381_G1_Equal => 2,
|
||||
DefaultFunction::Bls12_381_G1_Compress => 1,
|
||||
DefaultFunction::Bls12_381_G1_Uncompress => 1,
|
||||
DefaultFunction::Bls12_381_G1_Hashtogroup => 2,
|
||||
DefaultFunction::Bls12_381_G1_HashToGroup => 2,
|
||||
DefaultFunction::Bls12_381_G2_Add => 2,
|
||||
DefaultFunction::Bls12_381_G2_Neg => 1,
|
||||
DefaultFunction::Bls12_381_G2_Scalarmul => 2,
|
||||
DefaultFunction::Bls12_381_G2_ScalarMul => 2,
|
||||
DefaultFunction::Bls12_381_G2_Equal => 2,
|
||||
DefaultFunction::Bls12_381_G2_Compress => 1,
|
||||
DefaultFunction::Bls12_381_G2_Uncompress => 1,
|
||||
DefaultFunction::Bls12_381_G2_Hashtogroup => 2,
|
||||
DefaultFunction::Bls12_381_G2_HashToGroup => 2,
|
||||
DefaultFunction::Bls12_381_MillerLoop => 2,
|
||||
DefaultFunction::Bls12_381_MulMlResult => 2,
|
||||
DefaultFunction::Bls12_381_FinalVerify => 2,
|
||||
|
@ -246,18 +246,18 @@ impl DefaultFunction {
|
|||
DefaultFunction::MkNilPairData => 0,
|
||||
DefaultFunction::Bls12_381_G1_Add => 0,
|
||||
DefaultFunction::Bls12_381_G1_Neg => 0,
|
||||
DefaultFunction::Bls12_381_G1_Scalarmul => 0,
|
||||
DefaultFunction::Bls12_381_G1_ScalarMul => 0,
|
||||
DefaultFunction::Bls12_381_G1_Equal => 0,
|
||||
DefaultFunction::Bls12_381_G1_Compress => 0,
|
||||
DefaultFunction::Bls12_381_G1_Uncompress => 0,
|
||||
DefaultFunction::Bls12_381_G1_Hashtogroup => 0,
|
||||
DefaultFunction::Bls12_381_G1_HashToGroup => 0,
|
||||
DefaultFunction::Bls12_381_G2_Add => 0,
|
||||
DefaultFunction::Bls12_381_G2_Neg => 0,
|
||||
DefaultFunction::Bls12_381_G2_Scalarmul => 0,
|
||||
DefaultFunction::Bls12_381_G2_ScalarMul => 0,
|
||||
DefaultFunction::Bls12_381_G2_Equal => 0,
|
||||
DefaultFunction::Bls12_381_G2_Compress => 0,
|
||||
DefaultFunction::Bls12_381_G2_Uncompress => 0,
|
||||
DefaultFunction::Bls12_381_G2_Hashtogroup => 0,
|
||||
DefaultFunction::Bls12_381_G2_HashToGroup => 0,
|
||||
DefaultFunction::Bls12_381_MillerLoop => 0,
|
||||
DefaultFunction::Bls12_381_MulMlResult => 0,
|
||||
DefaultFunction::Bls12_381_FinalVerify => 0,
|
||||
|
@ -390,7 +390,7 @@ impl DefaultFunction {
|
|||
|
||||
DefaultFunction::Bls12_381_G1_Add => arg.expect_type(Type::Bls12_381G1Element),
|
||||
DefaultFunction::Bls12_381_G1_Neg => arg.expect_type(Type::Bls12_381G1Element),
|
||||
DefaultFunction::Bls12_381_G1_Scalarmul => {
|
||||
DefaultFunction::Bls12_381_G1_ScalarMul => {
|
||||
if args.is_empty() {
|
||||
arg.expect_type(Type::Integer)
|
||||
} else {
|
||||
|
@ -400,10 +400,10 @@ impl DefaultFunction {
|
|||
DefaultFunction::Bls12_381_G1_Equal => arg.expect_type(Type::Bls12_381G1Element),
|
||||
DefaultFunction::Bls12_381_G1_Compress => arg.expect_type(Type::Bls12_381G1Element),
|
||||
DefaultFunction::Bls12_381_G1_Uncompress => arg.expect_type(Type::ByteString),
|
||||
DefaultFunction::Bls12_381_G1_Hashtogroup => arg.expect_type(Type::ByteString),
|
||||
DefaultFunction::Bls12_381_G1_HashToGroup => arg.expect_type(Type::ByteString),
|
||||
DefaultFunction::Bls12_381_G2_Add => arg.expect_type(Type::Bls12_381G2Element),
|
||||
DefaultFunction::Bls12_381_G2_Neg => arg.expect_type(Type::Bls12_381G2Element),
|
||||
DefaultFunction::Bls12_381_G2_Scalarmul => {
|
||||
DefaultFunction::Bls12_381_G2_ScalarMul => {
|
||||
if args.is_empty() {
|
||||
arg.expect_type(Type::Integer)
|
||||
} else {
|
||||
|
@ -413,7 +413,7 @@ impl DefaultFunction {
|
|||
DefaultFunction::Bls12_381_G2_Equal => arg.expect_type(Type::Bls12_381G2Element),
|
||||
DefaultFunction::Bls12_381_G2_Compress => arg.expect_type(Type::Bls12_381G2Element),
|
||||
DefaultFunction::Bls12_381_G2_Uncompress => arg.expect_type(Type::ByteString),
|
||||
DefaultFunction::Bls12_381_G2_Hashtogroup => arg.expect_type(Type::ByteString),
|
||||
DefaultFunction::Bls12_381_G2_HashToGroup => arg.expect_type(Type::ByteString),
|
||||
DefaultFunction::Bls12_381_MillerLoop => {
|
||||
if args.is_empty() {
|
||||
arg.expect_type(Type::Bls12_381G1Element)
|
||||
|
@ -1224,7 +1224,7 @@ impl DefaultFunction {
|
|||
|
||||
Ok(Value::Con(constant.into()))
|
||||
}
|
||||
DefaultFunction::Bls12_381_G1_Scalarmul => {
|
||||
DefaultFunction::Bls12_381_G1_ScalarMul => {
|
||||
let arg1 = args[0].unwrap_integer();
|
||||
let arg2 = args[1].unwrap_bls12_381_g1_element();
|
||||
|
||||
|
@ -1293,7 +1293,7 @@ impl DefaultFunction {
|
|||
|
||||
Ok(Value::Con(constant.into()))
|
||||
}
|
||||
DefaultFunction::Bls12_381_G1_Hashtogroup => {
|
||||
DefaultFunction::Bls12_381_G1_HashToGroup => {
|
||||
let arg1 = args[0].unwrap_byte_string();
|
||||
let arg2 = args[1].unwrap_byte_string();
|
||||
|
||||
|
@ -1355,7 +1355,7 @@ impl DefaultFunction {
|
|||
|
||||
Ok(Value::Con(constant.into()))
|
||||
}
|
||||
DefaultFunction::Bls12_381_G2_Scalarmul => {
|
||||
DefaultFunction::Bls12_381_G2_ScalarMul => {
|
||||
let arg1 = args[0].unwrap_integer();
|
||||
let arg2 = args[1].unwrap_bls12_381_g2_element();
|
||||
|
||||
|
@ -1424,7 +1424,7 @@ impl DefaultFunction {
|
|||
|
||||
Ok(Value::Con(constant.into()))
|
||||
}
|
||||
DefaultFunction::Bls12_381_G2_Hashtogroup => {
|
||||
DefaultFunction::Bls12_381_G2_HashToGroup => {
|
||||
let arg1 = args[0].unwrap_byte_string();
|
||||
let arg2 = args[1].unwrap_byte_string();
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ use std::{ops::Neg, rc::Rc, str::FromStr};
|
|||
use crate::{
|
||||
ast::{Constant, Name, Program, Term, Type},
|
||||
builtins::DefaultFunction,
|
||||
machine::runtime::Compressable,
|
||||
};
|
||||
|
||||
use interner::Interner;
|
||||
|
@ -18,10 +19,7 @@ pub fn program(src: &str) -> Result<Program<Name>, ParseError<LineCol>> {
|
|||
let mut interner = Interner::new();
|
||||
|
||||
// run the generated parser
|
||||
let mut program = uplc::program(src)?;
|
||||
|
||||
// assign proper unique ids in place
|
||||
interner.program(&mut program);
|
||||
let program = uplc::program(src, &mut interner)?;
|
||||
|
||||
Ok(program)
|
||||
}
|
||||
|
@ -31,10 +29,7 @@ pub fn term(src: &str) -> Result<Term<Name>, ParseError<LineCol>> {
|
|||
let mut interner = Interner::new();
|
||||
|
||||
// run the generated parser
|
||||
let mut term = uplc::term(src)?;
|
||||
|
||||
// assign proper unique ids in place
|
||||
interner.term(&mut term);
|
||||
let term = uplc::term(src, &mut interner)?;
|
||||
|
||||
Ok(term)
|
||||
}
|
||||
|
@ -72,9 +67,8 @@ pub fn escape(string: &str) -> String {
|
|||
|
||||
peg::parser! {
|
||||
grammar uplc() for str {
|
||||
|
||||
pub rule program() -> Program<Name>
|
||||
= _* "(" _* "program" _+ v:version() _+ t:term() _* ")" _* {
|
||||
pub rule program(interner: &mut Interner) -> Program<Name>
|
||||
= _* "(" _* "program" _+ v:version() _+ t:term(interner) _* ")" _* {
|
||||
Program {version: v, term: t}
|
||||
}
|
||||
|
||||
|
@ -85,17 +79,17 @@ peg::parser! {
|
|||
(major, minor, patch)
|
||||
}
|
||||
|
||||
pub rule term() -> Term<Name>
|
||||
pub rule term(interner: &mut Interner) -> Term<Name>
|
||||
= constant()
|
||||
/ builtin()
|
||||
/ var()
|
||||
/ lambda()
|
||||
/ apply()
|
||||
/ delay()
|
||||
/ force()
|
||||
/ var(interner)
|
||||
/ lambda(interner)
|
||||
/ apply(interner)
|
||||
/ delay(interner)
|
||||
/ force(interner)
|
||||
/ error()
|
||||
/ constr()
|
||||
/ case()
|
||||
/ constr(interner)
|
||||
/ case(interner)
|
||||
|
||||
rule constant() -> Term<Name>
|
||||
= "(" _* "con" _+ con:(
|
||||
|
@ -105,6 +99,8 @@ peg::parser! {
|
|||
/ constant_unit()
|
||||
/ constant_bool()
|
||||
/ constant_data()
|
||||
/ constant_g1_element()
|
||||
/ constant_g2_element()
|
||||
/ constant_list()
|
||||
/ constant_pair()
|
||||
) _* ")" {
|
||||
|
@ -116,17 +112,16 @@ peg::parser! {
|
|||
Term::Builtin(DefaultFunction::from_str(&b).unwrap())
|
||||
}
|
||||
|
||||
rule var() -> Term<Name>
|
||||
= n:name() { Term::Var(n.into()) }
|
||||
rule var(interner: &mut Interner) -> Term<Name>
|
||||
= n:name(interner) { Term::Var(n.into()) }
|
||||
|
||||
rule lambda() -> Term<Name>
|
||||
= "(" _* "lam" _+ parameter_name:name() _+ t:term() _* ")" {
|
||||
rule lambda(interner: &mut Interner) -> Term<Name>
|
||||
= "(" _* "lam" _+ parameter_name:name(interner) _+ t:term(interner) _* ")" {
|
||||
Term::Lambda { parameter_name: parameter_name.into(), body: Rc::new(t) }
|
||||
}
|
||||
|
||||
#[cache_left_rec]
|
||||
rule apply() -> Term<Name>
|
||||
= "[" _* initial:term() _+ terms:(t:term() _* { t })+ "]" {
|
||||
rule apply(interner: &mut Interner) -> Term<Name>
|
||||
= "[" _* initial:term(interner) _+ terms:(t:term(interner) _* { t })+ "]" {
|
||||
terms
|
||||
.into_iter()
|
||||
.fold(initial, |lhs, rhs| Term::Apply {
|
||||
|
@ -135,23 +130,22 @@ peg::parser! {
|
|||
})
|
||||
}
|
||||
|
||||
rule delay() -> Term<Name>
|
||||
= "(" _* "delay" _* t:term() _* ")" { Term::Delay(Rc::new(t)) }
|
||||
rule delay(interner: &mut Interner) -> Term<Name>
|
||||
= "(" _* "delay" _* t:term(interner) _* ")" { Term::Delay(Rc::new(t)) }
|
||||
|
||||
rule force() -> Term<Name>
|
||||
= "(" _* "force" _* t:term() _* ")" { Term::Force(Rc::new(t)) }
|
||||
rule force(interner: &mut Interner) -> Term<Name>
|
||||
= "(" _* "force" _* t:term(interner) _* ")" { Term::Force(Rc::new(t)) }
|
||||
|
||||
rule error() -> Term<Name>
|
||||
= "(" _* "error" _* ")" { Term::Error }
|
||||
|
||||
rule constr() -> Term<Name>
|
||||
= "(" _* "constr" _+ tag:decimal() _* fields:(t:term() _* { t })* _* ")" {
|
||||
rule constr(interner: &mut Interner) -> Term<Name>
|
||||
= "(" _* "constr" _+ tag:decimal() _* fields:(t:term(interner) _* { t })* _* ")" {
|
||||
Term::Constr { tag, fields }
|
||||
}
|
||||
|
||||
#[cache_left_rec]
|
||||
rule case() -> Term<Name>
|
||||
= "(" _* "case" _+ constr:term() _* branches:(t:term() _* { t })+ _* ")" {
|
||||
rule case(interner: &mut Interner) -> Term<Name>
|
||||
= "(" _* "case" _+ constr:term(interner) _* branches:(t:term(interner) _* { t })+ _* ")" {
|
||||
Term::Case { constr: constr.into(), branches }
|
||||
}
|
||||
|
||||
|
@ -173,6 +167,16 @@ peg::parser! {
|
|||
rule constant_data() -> Constant
|
||||
= "data" _+ "(" _* d:data() _* ")" { Constant::Data(d) }
|
||||
|
||||
rule constant_g1_element() -> Constant
|
||||
= "bls12_381_G1_element" _+ element:g1_element() {
|
||||
Constant::Bls12_381G1Element(Box::new(element))
|
||||
}
|
||||
|
||||
rule constant_g2_element() -> Constant
|
||||
= "bls12_381_G2_element" _+ element:g2_element() {
|
||||
Constant::Bls12_381G2Element(Box::new(element))
|
||||
}
|
||||
|
||||
rule constant_list() -> Constant
|
||||
= "(" _* "list" _* t:type_info() _* ")" _+ ls:list(Some(&t)) {
|
||||
Constant::ProtoList(t, ls)
|
||||
|
@ -201,6 +205,15 @@ peg::parser! {
|
|||
rule bytestring() -> Vec<u8>
|
||||
= "#" i:ident()* { hex::decode(String::from_iter(i)).unwrap() }
|
||||
|
||||
rule bls_element() -> Vec<u8>
|
||||
= "0x" i:ident()* { hex::decode(String::from_iter(i)).unwrap() }
|
||||
|
||||
rule g1_element() -> blst::blst_p1
|
||||
= element:bls_element() { blst::blst_p1::uncompress(&element).unwrap() }
|
||||
|
||||
rule g2_element() -> blst::blst_p2
|
||||
= element:bls_element() { blst::blst_p2::uncompress(&element).unwrap() }
|
||||
|
||||
rule string() -> String
|
||||
= "\"" s:character()* "\"" { String::from_iter(s) }
|
||||
|
||||
|
@ -276,23 +289,45 @@ peg::parser! {
|
|||
_ => Err("found 'String' instead of expected type")
|
||||
}
|
||||
}
|
||||
/ s:data() {?
|
||||
match type_info {
|
||||
Some(Type::Data) => Ok(Constant::Data(s)),
|
||||
_ => Err("found 'Data' instead of expected type")
|
||||
}
|
||||
/ s:data() {?
|
||||
match type_info {
|
||||
Some(Type::Data) => Ok(Constant::Data(s)),
|
||||
_ => Err("found 'Data' instead of expected type")
|
||||
}
|
||||
}
|
||||
/ ls:list(list_sub_type(type_info)) {?
|
||||
match type_info {
|
||||
Some(Type::List(t)) => Ok(Constant::ProtoList(t.as_ref().clone(), ls)),
|
||||
_ => Err("found 'List' instead of expected type")
|
||||
}
|
||||
/ element:g1_element() {?
|
||||
match type_info {
|
||||
Some(Type::Bls12_381G1Element) => Ok(Constant::Bls12_381G1Element(Box::new(element))),
|
||||
_ => Err("found 'Bls12_381G1Element' instead of expected type")
|
||||
|
||||
}
|
||||
}
|
||||
/ p:pair(pair_sub_type(type_info)) {?
|
||||
match type_info {
|
||||
Some(Type::Pair(l, r)) => Ok(Constant::ProtoPair(l.as_ref().clone(), r.as_ref().clone(), p.0.into(), p.1.into())),
|
||||
_ => Err("found 'Pair' instead of expected type")
|
||||
}
|
||||
/ element:g2_element() {?
|
||||
match type_info {
|
||||
Some(Type::Bls12_381G2Element) => Ok(Constant::Bls12_381G2Element(Box::new(element))),
|
||||
_ => Err("found 'Bls12_381G2Element' instead of expected type")
|
||||
|
||||
}
|
||||
}
|
||||
/ ls:list(list_sub_type(type_info)) {?
|
||||
match type_info {
|
||||
Some(Type::List(t)) => Ok(Constant::ProtoList(t.as_ref().clone(), ls)),
|
||||
_ => Err("found 'List' instead of expected type")
|
||||
}
|
||||
}
|
||||
/ p:pair(pair_sub_type(type_info)) {?
|
||||
match type_info {
|
||||
Some(Type::Pair(l, r)) =>
|
||||
Ok(
|
||||
Constant::ProtoPair(
|
||||
l.as_ref().clone(),
|
||||
r.as_ref().clone(),
|
||||
p.0.into(),
|
||||
p.1.into()
|
||||
)
|
||||
),
|
||||
_ => Err("found 'Pair' instead of expected type")
|
||||
}
|
||||
}
|
||||
|
||||
rule type_info() -> Type
|
||||
|
@ -302,6 +337,8 @@ peg::parser! {
|
|||
/ _* "bytestring" { Type::ByteString }
|
||||
/ _* "string" { Type::String }
|
||||
/ _* "data" { Type::Data }
|
||||
/ _* "bls12_381_G1_element" { Type::Bls12_381G1Element }
|
||||
/ _* "bls12_381_G1_element" { Type::Bls12_381G2Element }
|
||||
/ _* "(" _* "list" _+ t:type_info() _* ")" {
|
||||
Type::List(t.into())
|
||||
}
|
||||
|
@ -309,8 +346,11 @@ peg::parser! {
|
|||
Type::Pair(l.into(), r.into())
|
||||
}
|
||||
|
||||
rule name() -> Name
|
||||
= text:ident() { Name { text, unique: 0.into() } }
|
||||
rule name(interner: &mut Interner) -> Name
|
||||
= text:ident() {
|
||||
let unique = interner.intern(&text);
|
||||
Name { text, unique }
|
||||
}
|
||||
|
||||
rule ident() -> String
|
||||
= i:['a'..='z' | 'A'..='Z' | '0'..='9' | '_']+ {
|
||||
|
|
|
@ -63,7 +63,7 @@ impl Interner {
|
|||
}
|
||||
}
|
||||
|
||||
fn intern(&mut self, text: &str) -> Unique {
|
||||
pub fn intern(&mut self, text: &str) -> Unique {
|
||||
if let Some(u) = self.identifiers.get(text) {
|
||||
*u
|
||||
} else {
|
||||
|
|
|
@ -752,7 +752,7 @@ pub fn eval_redeemer(
|
|||
|
||||
program.eval_as(&Language::PlutusV1, costs, Some(initial_budget))
|
||||
} else {
|
||||
program.eval_v1()
|
||||
program.eval_version(&Language::PlutusV1)
|
||||
};
|
||||
|
||||
let cost = eval_result.cost();
|
||||
|
@ -852,7 +852,7 @@ pub fn eval_redeemer(
|
|||
|
||||
program.eval_as(&Language::PlutusV1, costs, Some(initial_budget))
|
||||
} else {
|
||||
program.eval_v1()
|
||||
program.eval_version(&Language::PlutusV1)
|
||||
};
|
||||
|
||||
let cost = eval_result.cost();
|
||||
|
|
Loading…
Reference in New Issue