radix_transactions/model/v1/
intent_signatures.rs

1use super::*;
2use crate::internal_prelude::*;
3
4/// Represents any natively supported signature, including public key.
5#[cfg_attr(
6    feature = "serde",
7    derive(serde::Serialize, serde::Deserialize),
8    serde(tag = "type")
9)]
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ManifestSbor, ScryptoSbor)]
11pub enum SignatureWithPublicKeyV1 {
12    Secp256k1 {
13        signature: Secp256k1Signature,
14    },
15    Ed25519 {
16        public_key: Ed25519PublicKey,
17        signature: Ed25519Signature,
18    },
19}
20
21impl SignatureWithPublicKeyV1 {
22    pub fn signature(&self) -> SignatureV1 {
23        match &self {
24            Self::Secp256k1 { signature } => signature.clone().into(),
25            Self::Ed25519 { signature, .. } => signature.clone().into(),
26        }
27    }
28}
29
30impl From<Secp256k1Signature> for SignatureWithPublicKeyV1 {
31    fn from(signature: Secp256k1Signature) -> Self {
32        Self::Secp256k1 { signature }
33    }
34}
35
36impl From<(Ed25519PublicKey, Ed25519Signature)> for SignatureWithPublicKeyV1 {
37    fn from((public_key, signature): (Ed25519PublicKey, Ed25519Signature)) -> Self {
38        Self::Ed25519 {
39            public_key,
40            signature,
41        }
42    }
43}
44
45#[derive(Debug, Clone, Eq, PartialEq, ManifestSbor, ScryptoDescribe)]
46#[sbor(transparent)]
47pub struct IntentSignatureV1(pub SignatureWithPublicKeyV1);
48
49#[derive(Debug, Clone, Eq, PartialEq, ManifestSbor, ScryptoDescribe)]
50#[sbor(transparent)]
51pub struct IntentSignaturesV1 {
52    pub signatures: Vec<IntentSignatureV1>,
53}
54
55#[allow(deprecated)]
56pub type PreparedIntentSignaturesV1 = SummarizedRawFullValue<IntentSignaturesV1>;