Skip to main content

dpp/state_transition/verify_identity_signed_signature/
mod.rs

1use crate::identity::IdentityPublicKey;
2use crate::state_transition::StateTransition;
3use crate::{BlsModule, ProtocolError};
4use platform_version::version::PlatformVersion;
5
6mod v0;
7mod v1;
8
9impl StateTransition {
10    /// Verifies the transition's signature with `public_key`, the identity key it names.
11    ///
12    /// Generation 0 (protocol versions 1 to 13) accepts a BLS12_381 signature that is well
13    /// formed but does not verify: it fails only when the BLS module errors, never on its
14    /// `Ok(false)`. Generation 1 refuses that signature too.
15    pub fn verify_identity_signed_signature(
16        &self,
17        public_key: &IdentityPublicKey,
18        bls: &impl BlsModule,
19        platform_version: &PlatformVersion,
20    ) -> Result<(), ProtocolError> {
21        match platform_version
22            .dpp
23            .state_transition_method_versions
24            .verify_identity_signed_signature
25        {
26            0 => self.verify_identity_signed_signature_v0(public_key, bls),
27            1 => self.verify_identity_signed_signature_v1(public_key, bls),
28            version => Err(ProtocolError::UnknownVersionMismatch {
29                method: "StateTransition::verify_identity_signed_signature".to_string(),
30                known_versions: vec![0, 1],
31                received: version,
32            }),
33        }
34    }
35}