drive_abci/rpc/
signature.rs1use super::core::CORE_RPC_INVALID_ADDRESS_OR_KEY;
2use super::core::CORE_RPC_INVALID_PARAMETER;
3use super::core::CORE_RPC_PARSE_ERROR;
4use crate::error::execution::ExecutionError;
5use crate::error::Error;
6use crate::rpc::core::CoreRPCLike;
7use dpp::dashcore::InstantLock;
8
9pub trait CoreSignatureVerification {
11 fn verify_signature<C: CoreRPCLike>(
13 &self,
14 core_rpc: &C,
15 core_chain_locked_height: u32,
16 ) -> Result<bool, Error>;
17}
18
19impl CoreSignatureVerification for InstantLock {
20 fn verify_signature<C: CoreRPCLike>(
21 &self,
22 core_rpc: &C,
23 core_chain_locked_height: u32,
24 ) -> Result<bool, Error> {
25 match core_rpc.verify_instant_lock(self, Some(core_chain_locked_height)) {
26 Ok(result) => Ok(result),
27 Err(dpp::dashcore_rpc::Error::JsonRpc(
29 dpp::dashcore_rpc::jsonrpc::error::Error::Rpc(
30 dpp::dashcore_rpc::jsonrpc::error::RpcError {
31 code:
32 CORE_RPC_PARSE_ERROR
33 | CORE_RPC_INVALID_ADDRESS_OR_KEY
34 | CORE_RPC_INVALID_PARAMETER,
35 ..
36 },
37 ),
38 )) => Ok(false),
39 Err(e) => Err(Error::Execution(ExecutionError::DashCoreBadResponseError(
40 format!("can't verify instant asset lock proof signature with core: {e}",),
41 ))),
42 }
43 }
44}