cardano_sdk/chain/
witness.rs

1use super::common::*;
2use super::scripts::*;
3use crate::crypto::key::SignatureVerification;
4use crate::crypto::key::{Ed25519PublicKey, Ed25519Signature};
5use cbored::CborRepr;
6
7#[derive(Clone, Debug, PartialEq, Eq, CborRepr)]
8#[cborrepr(structure = "mapint")]
9pub struct TransactionWitness {
10    pub vkeys: Option<VkeyWitnesses>,
11    pub native_scripts: Option<NativeScripts>,
12    pub bootstraps: Option<BootstrapWitnesses>,
13    pub plutus_scripts: Option<PlutusScripts>,
14    pub plutus_data: Option<PlutusList>,
15    pub redeemers: Option<Redeemers>,
16    pub plutus_scripts_v2: Option<PlutusScriptsV2>,
17}
18
19#[derive(Clone, Debug, CborRepr, PartialEq, Eq)]
20#[cborrepr(structure = "array")]
21pub struct BootstrapWitness {
22    pub vkey: Bytes,
23    pub signature: Bytes,
24    pub chain_code: Bytes,
25    pub attributes: Bytes,
26}
27
28#[derive(Clone, Debug, CborRepr, PartialEq, Eq)]
29#[cborrepr(structure = "array")]
30pub struct VkeyWitness {
31    pub vkey: Ed25519PublicKey,
32    pub signature: Ed25519Signature,
33}
34
35impl VkeyWitness {
36    pub fn verify(&self, data: &[u8]) -> SignatureVerification {
37        self.vkey.verify(&self.signature, data)
38    }
39}
40
41#[derive(Clone, Debug, CborRepr, PartialEq, Eq)]
42#[cborrepr(structure = "array")]
43pub struct Redeemer {
44    pub tag: RedeemerTag,
45    pub index: u64,
46    pub data: PlutusData,
47    pub ex_units: ExUnits,
48}
49
50#[derive(Clone, Debug, CborRepr, PartialEq, Eq)]
51#[cborrepr(enumtype = "enumint")]
52pub enum RedeemerTag {
53    Spend,
54    Mint,
55    Cert,
56    Reward,
57}
58
59#[derive(Clone, Debug, CborRepr, PartialEq, Eq)]
60#[cborrepr(structure = "array")]
61pub struct ExUnits {
62    pub mem: u64,
63    pub steps: u64,
64}
65
66crate::vec_structure!(BootstrapWitnesses, BootstrapWitness);
67crate::vec_structure!(TransactionWitnesses, TransactionWitness);
68crate::vec_structure!(VkeyWitnesses, VkeyWitness);
69crate::vec_structure!(Redeemers, Redeemer);