cardano_sdk/chain/
scripts.rs1use super::common::*;
2use super::hash::*;
3use cbored::CborRepr;
4use cryptoxide::hashing::blake2b::Context; #[derive(Clone, Debug, CborRepr, PartialEq, Eq)]
7#[cborrepr(enumtype = "tagvariant")]
8pub enum NativeScript {
9 ScriptPubkey(Ed25519KeyHash),
10 ScriptAll(NativeScripts),
11 ScriptAny(NativeScripts),
12 ScriptNOfK(u32, NativeScripts),
13 TimelockStart { slot: u64 },
14 TimelockExpiry { slot: u64 },
15}
16
17impl NativeScript {
18 pub fn hash(&self) -> ScriptHash {
19 let bytes = cbored::encode_to_bytes(self);
20 ScriptHash(
21 Context::<224>::new()
22 .update(&[0])
23 .update(&bytes[..])
24 .finalize(),
25 )
26 }
27}
28
29#[derive(Clone, Debug, CborRepr, PartialEq, Eq)]
30#[cborrepr(structure = "flat")]
31pub struct PlutusScript(pub Bytes);
32
33#[derive(Clone, Debug, CborRepr, PartialEq, Eq)]
34#[cborrepr(structure = "flat")]
35pub struct PlutusScriptV2(pub Bytes);
36
37#[derive(Clone, Debug, CborRepr, PartialEq, Eq)]
38#[cborrepr(structure = "flat")]
39pub struct PlutusData(pub AnyCbor);
40
41crate::vec_structure!(PlutusScripts, PlutusScript);
42crate::vec_structure!(PlutusScriptsV2, PlutusScriptV2);
43crate::vec_structure!(PlutusList, PlutusData);
44crate::vec_structure!(NativeScripts, NativeScript);