Skip to content

Commit 7864eb2

Browse files
committed
Update csl
1 parent c60e631 commit 7864eb2

File tree

13 files changed

+395
-266
lines changed

13 files changed

+395
-266
lines changed

plutus-ledger-api/Cargo.lock

Lines changed: 254 additions & 113 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plutus-ledger-api/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ linked-hash-map = "~0.5.6"
2121
num-traits = "~0.2.17"
2222
impl_ops = "0.1.1"
2323
chrono = { version = "0.4.34", optional = true }
24-
cardano-serialization-lib = "11.5.0"
24+
cardano-serialization-lib = "12.1.0"
2525
anyhow = "1.0.86"
2626

2727
[features]

plutus-ledger-api/src/csl/csl_to_pla.rs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ where
5252
}
5353
}
5454

55-
impl FromCSL<csl::utils::BigNum> for BigInt {
56-
fn from_csl(value: &csl::utils::BigNum) -> Self {
55+
impl FromCSL<csl::BigNum> for BigInt {
56+
fn from_csl(value: &csl::BigNum) -> Self {
5757
let x: u64 = From::from(*value);
5858
BigInt::from(x)
5959
}
@@ -65,30 +65,18 @@ impl FromCSL<u32> for BigInt {
6565
}
6666
}
6767

68-
impl TryFromCSL<csl::utils::BigInt> for BigInt {
69-
fn try_from_csl(value: &csl::utils::BigInt) -> Result<Self, TryFromCSLError> {
68+
impl TryFromCSL<csl::BigInt> for BigInt {
69+
fn try_from_csl(value: &csl::BigInt) -> Result<Self, TryFromCSLError> {
7070
BigInt::from_str(&value.to_str()).map_err(TryFromCSLError::InvalidBigInt)
7171
}
7272
}
7373

74-
impl FromCSL<csl::utils::Int> for BigInt {
75-
fn from_csl(value: &csl::utils::Int) -> Self {
74+
impl FromCSL<csl::Int> for BigInt {
75+
fn from_csl(value: &csl::Int) -> Self {
7676
if value.is_positive() {
7777
BigInt::from_csl(&value.as_positive().unwrap())
7878
} else {
7979
BigInt::from_csl(&value.as_negative().unwrap()).neg()
8080
}
8181
}
8282
}
83-
84-
impl FromCSL<csl::NativeScripts> for Vec<csl::NativeScript> {
85-
fn from_csl(value: &csl::NativeScripts) -> Self {
86-
(0..value.len()).map(|idx| value.get(idx)).collect()
87-
}
88-
}
89-
90-
impl FromCSL<csl::plutus::PlutusScripts> for Vec<csl::plutus::PlutusScript> {
91-
fn from_csl(value: &csl::plutus::PlutusScripts) -> Self {
92-
(0..value.len()).map(|idx| value.get(idx)).collect()
93-
}
94-
}

plutus-ledger-api/src/csl/pla_to_csl.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ use num_traits::sign::Signed;
55
#[derive(Debug, thiserror::Error)]
66
pub enum TryFromPLAError {
77
#[error("{0}")]
8-
CSLDeserializeError(csl::error::DeserializeError),
8+
CSLDeserializeError(csl::DeserializeError),
99

1010
#[error("{0}")]
11-
CSLJsError(csl::error::JsError),
11+
CSLJsError(csl::JsError),
1212

1313
#[error("Unable to cast BigInt {0} into type {1}: value is out of bound")]
1414
BigIntOutOfRange(BigInt, String),
@@ -48,15 +48,15 @@ where
4848
}
4949
}
5050

51-
impl TryFromPLA<u64> for csl::utils::BigNum {
51+
impl TryFromPLA<u64> for csl::BigNum {
5252
fn try_from_pla(val: &u64) -> Result<Self, TryFromPLAError> {
5353
// BigNum(s) are u64 under the hood.
5454

55-
Ok(csl::utils::BigNum::from(*val))
55+
Ok(csl::BigNum::from(*val))
5656
}
5757
}
5858

59-
impl TryFromPLA<BigInt> for csl::utils::BigNum {
59+
impl TryFromPLA<BigInt> for csl::BigNum {
6060
fn try_from_pla(val: &BigInt) -> Result<Self, TryFromPLAError> {
6161
// BigNum(s) are u64 under the hood.
6262
let x: u64 = val
@@ -70,30 +70,30 @@ impl TryFromPLA<BigInt> for csl::utils::BigNum {
7070
}
7171
}
7272

73-
impl TryFromPLA<BigInt> for csl::utils::BigInt {
73+
impl TryFromPLA<BigInt> for csl::BigInt {
7474
fn try_from_pla(val: &BigInt) -> Result<Self, TryFromPLAError> {
7575
Ok(val.to_owned().into())
7676
}
7777
}
7878

79-
impl TryFromPLA<BigInt> for csl::utils::Int {
79+
impl TryFromPLA<BigInt> for csl::Int {
8080
fn try_from_pla(val: &BigInt) -> Result<Self, TryFromPLAError> {
8181
if val.is_negative() {
82-
Ok(csl::utils::Int::new_negative(&(val.abs()).try_to_csl()?))
82+
Ok(csl::Int::new_negative(&(val.abs()).try_to_csl()?))
8383
} else {
84-
Ok(csl::utils::Int::new(&val.try_to_csl()?))
84+
Ok(csl::Int::new(&val.try_to_csl()?))
8585
}
8686
}
8787
}
8888

89-
impl TryFromPLA<i64> for csl::utils::Int {
89+
impl TryFromPLA<i64> for csl::Int {
9090
fn try_from_pla(val: &i64) -> Result<Self, TryFromPLAError> {
9191
if val.is_negative() {
92-
Ok(csl::utils::Int::new_negative(&csl::utils::to_bignum(
92+
Ok(csl::Int::new_negative(&csl::BigNum::from(
9393
val.unsigned_abs(),
9494
)))
9595
} else {
96-
Ok(csl::utils::Int::new(&csl::utils::to_bignum(*val as u64)))
96+
Ok(csl::Int::new(&csl::BigNum::from(*val as u64)))
9797
}
9898
}
9999
}

plutus-ledger-api/src/plutus_data.rs

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -558,79 +558,86 @@ where
558558
}
559559
}
560560

561-
impl TryFromCSL<csl::plutus::PlutusData> for PlutusData {
562-
fn try_from_csl(value: &csl::plutus::PlutusData) -> Result<Self, TryFromCSLError> {
561+
impl TryFromCSL<csl::PlutusData> for PlutusData {
562+
fn try_from_csl(value: &csl::PlutusData) -> Result<Self, TryFromCSLError> {
563563
Ok(match value.kind() {
564-
csl::plutus::PlutusDataKind::ConstrPlutusData => {
564+
csl::PlutusDataKind::ConstrPlutusData => {
565565
let constr_data = value.as_constr_plutus_data().unwrap();
566566
let tag = BigInt::from_csl(&constr_data.alternative());
567567
let args = constr_data.data().try_to_pla()?;
568568
PlutusData::Constr(tag, args)
569569
}
570-
csl::plutus::PlutusDataKind::Map => {
571-
PlutusData::Map(value.as_map().unwrap().try_to_pla()?)
572-
}
573-
csl::plutus::PlutusDataKind::List => {
574-
PlutusData::List(value.as_list().unwrap().try_to_pla()?)
575-
}
576-
csl::plutus::PlutusDataKind::Integer => {
570+
csl::PlutusDataKind::Map => PlutusData::Map(value.as_map().unwrap().try_to_pla()?),
571+
csl::PlutusDataKind::List => PlutusData::List(value.as_list().unwrap().try_to_pla()?),
572+
csl::PlutusDataKind::Integer => {
577573
PlutusData::Integer(value.as_integer().unwrap().try_to_pla()?)
578574
}
579-
csl::plutus::PlutusDataKind::Bytes => PlutusData::Bytes(value.as_bytes().unwrap()),
575+
csl::PlutusDataKind::Bytes => PlutusData::Bytes(value.as_bytes().unwrap()),
580576
})
581577
}
582578
}
583579

584-
impl TryFromCSL<csl::plutus::PlutusList> for Vec<PlutusData> {
585-
fn try_from_csl(value: &csl::plutus::PlutusList) -> Result<Self, TryFromCSLError> {
580+
impl TryFromCSL<csl::PlutusList> for Vec<PlutusData> {
581+
fn try_from_csl(value: &csl::PlutusList) -> Result<Self, TryFromCSLError> {
586582
(0..value.len())
587583
.map(|idx| value.get(idx).try_to_pla())
588584
.collect()
589585
}
590586
}
591587

592-
impl TryFromCSL<csl::plutus::PlutusMap> for Vec<(PlutusData, PlutusData)> {
593-
fn try_from_csl(c_map: &csl::plutus::PlutusMap) -> Result<Self, TryFromCSLError> {
588+
impl TryFromCSL<csl::PlutusMap> for Vec<(PlutusData, PlutusData)> {
589+
fn try_from_csl(c_map: &csl::PlutusMap) -> Result<Self, TryFromCSLError> {
594590
let keys = c_map.keys();
595-
(0..keys.len())
596-
.map(|idx| {
597-
let key = keys.get(idx);
598-
let value = c_map.get(&key).unwrap();
599-
Ok((key.try_to_pla()?, value.try_to_pla()?))
600-
})
601-
.collect()
591+
(0..keys.len()).try_fold(Vec::new(), |mut vector, idx| {
592+
let key = keys.get(idx);
593+
let values = c_map.get(&key).unwrap();
594+
595+
for value_idx in 0..values.len() {
596+
vector.push((
597+
key.clone().try_to_pla()?,
598+
values.get(value_idx).unwrap().try_to_pla()?,
599+
))
600+
}
601+
602+
Ok(vector)
603+
})
602604
}
603605
}
604606

605-
impl TryFromPLA<PlutusData> for csl::plutus::PlutusData {
607+
impl TryFromPLA<PlutusData> for csl::PlutusData {
606608
fn try_from_pla(val: &PlutusData) -> Result<Self, TryFromPLAError> {
607609
match val {
608-
PlutusData::Constr(tag, args) => Ok(csl::plutus::PlutusData::new_constr_plutus_data(
609-
&csl::plutus::ConstrPlutusData::new(&tag.try_to_csl()?, &args.try_to_csl()?),
610+
PlutusData::Constr(tag, args) => Ok(csl::PlutusData::new_constr_plutus_data(
611+
&csl::ConstrPlutusData::new(&tag.try_to_csl()?, &args.try_to_csl()?),
610612
)),
611-
PlutusData::Map(l) => Ok(csl::plutus::PlutusData::new_map(&l.try_to_csl()?)),
612-
PlutusData::List(l) => Ok(csl::plutus::PlutusData::new_list(&l.try_to_csl()?)),
613-
PlutusData::Integer(i) => Ok(csl::plutus::PlutusData::new_integer(&i.try_to_csl()?)),
614-
PlutusData::Bytes(b) => Ok(csl::plutus::PlutusData::new_bytes(b.to_owned())),
613+
PlutusData::Map(l) => Ok(csl::PlutusData::new_map(&l.try_to_csl()?)),
614+
PlutusData::List(l) => Ok(csl::PlutusData::new_list(&l.try_to_csl()?)),
615+
PlutusData::Integer(i) => Ok(csl::PlutusData::new_integer(&i.try_to_csl()?)),
616+
PlutusData::Bytes(b) => Ok(csl::PlutusData::new_bytes(b.to_owned())),
615617
}
616618
}
617619
}
618620

619-
impl TryFromPLA<Vec<PlutusData>> for csl::plutus::PlutusList {
621+
impl TryFromPLA<Vec<PlutusData>> for csl::PlutusList {
620622
fn try_from_pla(val: &Vec<PlutusData>) -> Result<Self, TryFromPLAError> {
621623
val.iter()
622624
// traverse
623625
.map(|x| x.try_to_csl())
624-
.collect::<Result<Vec<csl::plutus::PlutusData>, TryFromPLAError>>()
626+
.collect::<Result<Vec<csl::PlutusData>, TryFromPLAError>>()
625627
.map(|x| x.into())
626628
}
627629
}
628630

629-
impl TryFromPLA<Vec<(PlutusData, PlutusData)>> for csl::plutus::PlutusMap {
631+
impl TryFromPLA<Vec<(PlutusData, PlutusData)>> for csl::PlutusMap {
630632
fn try_from_pla(val: &Vec<(PlutusData, PlutusData)>) -> Result<Self, TryFromPLAError> {
631633
val.iter()
632-
.try_fold(csl::plutus::PlutusMap::new(), |mut acc, (k, v)| {
633-
acc.insert(&k.try_to_csl()?, &v.try_to_csl()?);
634+
.try_fold(csl::PlutusMap::new(), |mut acc, (k, v)| {
635+
let mut values = match acc.get(&k.try_to_csl()?) {
636+
Some(existing_values) => existing_values,
637+
None => csl::PlutusMapValues::new(),
638+
};
639+
values.add(&v.try_to_csl()?);
640+
acc.insert(&k.try_to_csl()?, &values);
634641
Ok(acc)
635642
})
636643
}

0 commit comments

Comments
 (0)