Skip to main content

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;
14#[cfg(test)]
15pub(crate) use check_tx::error_into_status;
16pub use check_tx::CheckTxAbciApplication;
17pub use consensus::ConsensusAbciApplication;
18use dpp::version::PlatformVersion;
19pub use full::FullAbciApplication;
20
21/// Platform-based ABCI application
22pub trait PlatformApplication<C = DefaultCoreRPC> {
23    /// Returns Platform
24    fn platform(&self) -> &Platform<C>;
25}
26
27/// Transactional ABCI application
28pub trait TransactionalApplication<'a> {
29    /// Creates and keeps a new transaction
30    fn start_transaction(&self);
31
32    /// Returns the current transaction
33    fn transaction(&self) -> &RwLock<Option<Transaction<'a>>>;
34
35    /// Commits created transaction
36    fn commit_transaction(&self, platform_version: &PlatformVersion) -> Result<(), Error>;
37}
38
39/// Application that executes blocks and need to keep context between handlers
40pub trait BlockExecutionApplication {
41    /// Returns the current block execution context
42    fn block_execution_context(&self) -> &RwLock<Option<BlockExecutionContext>>;
43}