Skip to content

Commit 651c851

Browse files
authored
D-parameter and permissioned candidates transactions offchain
1 parent 56ad7cf commit 651c851

File tree

12 files changed

+1033
-9
lines changed

12 files changed

+1033
-9
lines changed

Cargo.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

changelog.md

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ on how to create these new data sources see `node/src/main_chain_follower.rs` fi
2727
* `partner-chains-cli` does not use `pc-contracts-cli` in `prepare-configuration` wizard, it uses `partner-chains-cardano-offchain` crate instead.
2828
* Update cardano-node to 10.1.2
2929
* Bumped `partner-chains-smart-contracts` version to v6.2.2
30+
* Added d-parameter and permissioned-candidates transaction building (not wired in)
3031

3132
## Removed
3233

primitives/plutus-data/src/d_param.rs

+20-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::{DataDecodingError, DecodingResult, PlutusDataExtensions};
2-
use cardano_serialization_lib::PlutusData;
2+
use cardano_serialization_lib::{PlutusData, PlutusList};
33

44
#[derive(Clone, Debug, PartialEq)]
55
pub enum DParamDatum {
@@ -24,6 +24,13 @@ impl From<DParamDatum> for sidechain_domain::DParameter {
2424
}
2525
}
2626

27+
pub fn d_parameter_to_plutus_data(d_param: &sidechain_domain::DParameter) -> PlutusData {
28+
let mut list = PlutusList::new();
29+
list.add(&PlutusData::new_integer(&d_param.num_permissioned_candidates.into()));
30+
list.add(&PlutusData::new_integer(&d_param.num_registered_candidates.into()));
31+
PlutusData::new_list(&list)
32+
}
33+
2734
/// Parses plutus data schema that was used before datum versioning was added. Kept for backwards compatibility.
2835
fn decode_legacy_d_parameter_datum(datum: PlutusData) -> DecodingResult<DParamDatum> {
2936
let d_parameter = datum
@@ -62,4 +69,16 @@ mod tests {
6269

6370
assert_eq!(DParamDatum::try_from(plutus_data).unwrap(), expected_datum)
6471
}
72+
73+
#[test]
74+
fn domain_d_param_to_csl() {
75+
let d_param = sidechain_domain::DParameter {
76+
num_permissioned_candidates: 1,
77+
num_registered_candidates: 2,
78+
};
79+
80+
let expected_plutus_data = test_plutus_data!({"list": [{"int": 1}, {"int": 2}]});
81+
82+
assert_eq!(d_parameter_to_plutus_data(&d_param), expected_plutus_data)
83+
}
6584
}

primitives/plutus-data/src/permissioned_candidates.rs

+55
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ impl TryFrom<PlutusData> for PermissionedCandidateDatums {
2323
}
2424
}
2525

26+
pub fn permissioned_candidates_to_plutus_data(
27+
candidates: &[PermissionedCandidateData],
28+
) -> PlutusData {
29+
let mut list = PlutusList::new();
30+
for candidate in candidates {
31+
let mut candidate_datum = PlutusList::new();
32+
candidate_datum.add(&PlutusData::new_bytes(candidate.sidechain_public_key.0.clone()));
33+
candidate_datum.add(&PlutusData::new_bytes(candidate.aura_public_key.0.clone()));
34+
candidate_datum.add(&PlutusData::new_bytes(candidate.grandpa_public_key.0.clone()));
35+
list.add(&PlutusData::new_list(&candidate_datum));
36+
}
37+
PlutusData::new_list(&list)
38+
}
39+
2640
/// Parses plutus data schema that was used before datum versioning was added. Kept for backwards compatibility.
2741
fn decode_legacy_permissioned_candidates_datums(
2842
datum: PlutusData,
@@ -112,4 +126,45 @@ mod tests {
112126

113127
assert_eq!(PermissionedCandidateDatums::try_from(plutus_data).unwrap(), expected_datum)
114128
}
129+
130+
#[test]
131+
fn permissioned_candidates_to_datum() {
132+
let input = vec![
133+
PermissionedCandidateData {
134+
sidechain_public_key: SidechainPublicKey(
135+
hex!("cb6df9de1efca7a3998a8ead4e02159d5fa99c3e0d4fd6432667390bb4726854").into(),
136+
),
137+
aura_public_key: AuraPublicKey(
138+
hex!("bf20afa1c1a72af3341fa7a447e3f9eada9f3d054a7408fb9e49ad4d6e6559ec").into(),
139+
),
140+
grandpa_public_key: GrandpaPublicKey(
141+
hex!("9042a40b0b1baa9adcead024432a923eac706be5e1a89d7f2f2d58bfa8f3c26d").into(),
142+
),
143+
},
144+
PermissionedCandidateData {
145+
sidechain_public_key: SidechainPublicKey(
146+
hex!("79c3b7fc0b7697b9414cb87adcb37317d1cab32818ae18c0e97ad76395d1fdcf").into(),
147+
),
148+
aura_public_key: AuraPublicKey(
149+
hex!("56d1da82e56e4cb35b13de25f69a3e9db917f3e13d6f786321f4b0a9dc153b19").into(),
150+
),
151+
grandpa_public_key: GrandpaPublicKey(
152+
hex!("7392f3ea668aa2be7997d82c07bcfbec3ee4a9a4e01e3216d92b8f0d0a086c32").into(),
153+
),
154+
},
155+
];
156+
let expected_plutus_data = test_plutus_data!({"list": [
157+
{"list": [
158+
{"bytes": "cb6df9de1efca7a3998a8ead4e02159d5fa99c3e0d4fd6432667390bb4726854"},
159+
{"bytes": "bf20afa1c1a72af3341fa7a447e3f9eada9f3d054a7408fb9e49ad4d6e6559ec"},
160+
{"bytes": "9042a40b0b1baa9adcead024432a923eac706be5e1a89d7f2f2d58bfa8f3c26d"}
161+
]},
162+
{"list": [
163+
{"bytes": "79c3b7fc0b7697b9414cb87adcb37317d1cab32818ae18c0e97ad76395d1fdcf"},
164+
{"bytes": "56d1da82e56e4cb35b13de25f69a3e9db917f3e13d6f786321f4b0a9dc153b19"},
165+
{"bytes": "7392f3ea668aa2be7997d82c07bcfbec3ee4a9a4e01e3216d92b8f0d0a086c32"}
166+
]}
167+
]});
168+
assert_eq!(permissioned_candidates_to_plutus_data(&input), expected_plutus_data)
169+
}
115170
}

toolkit/offchain/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ minicbor = { workspace = true }
2424
ogmios-client = { workspace = true, features = ["jsonrpsee-client"] }
2525
pallas-addresses = { workspace = true }
2626
pallas-primitives = { workspace = true }
27+
partner-chains-plutus-data = { workspace = true }
2728
plutus = { workspace = true }
2829
raw-scripts = { workspace = true }
2930
serde = { workspace = true }

0 commit comments

Comments
 (0)