cardano_sdk/chain/
witness.rs1use 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);