cardano_sdk/chain/
scripts.rs

1use super::common::*;
2use super::hash::*;
3use cbored::CborRepr;
4use cryptoxide::hashing::blake2b::Context; // blake2b_224;
5
6#[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);