drive_abci/abci/app/
mod.rs

1use crate::error::Error;
2use crate::platform_types::platform::Platform;
3use drive::grovedb::Transaction;
4use std::sync::RwLock;
5
6mod check_tx;
7mod consensus;
8/// Convert state transition execution result into ABCI response
9pub mod execution_result;
10mod full;
11
12use crate::execution::types::block_execution_context::BlockExecutionContext;
13use crate::rpc::core::DefaultCoreRPC;
14pub use check_tx::CheckTxAbciApplication;
15pub use consensus::ConsensusAbciApplication;
16use dpp::version::PlatformVersion;
17pub use full::FullAbciApplication;
18
19/// Platform-based ABCI application
20pub trait PlatformApplication<C = DefaultCoreRPC> {
21    /// Returns Platform
22    fn platform(&self) -> &Platform<C>;
23}
24
25/// Transactional ABCI application
26pub trait TransactionalApplication<'a> {
27    /// Creates and keeps a new transaction
28    fn start_transaction(&self);
29
30    /// Returns the current transaction
31    fn transaction(&self) -> &RwLock<Option<Transaction<'a>>>;
32
33    /// Commits created transaction
34    fn commit_transaction(&self, platform_version: &PlatformVersion) -> Result<(), Error>;
35}
36
37/// Application that executes blocks and need to keep context between handlers
38pub trait BlockExecutionApplication {
39    /// Returns the current block execution context
40    fn block_execution_context(&self) -> &RwLock<Option<BlockExecutionContext>>;
41}