Skip to main content

DefaultPolicyEngine

Struct DefaultPolicyEngine 

Source
pub struct DefaultPolicyEngine { /* private fields */ }
Expand description

Default policy engine implementation.

Evaluates transactions against configured whitelist, blacklist, and limit rules. Uses TransactionHistory for tracking daily spending totals.

§Rule Evaluation Order

  1. Blacklist check (highest priority)
  2. Whitelist check (if enabled)
  3. Transaction limit check
  4. Daily limit check
  5. Allow (if all checks pass)

§Thread Safety

This struct is Send + Sync and can be safely shared across threads. The underlying TransactionHistory handles concurrent access.

Implementations§

Source§

impl DefaultPolicyEngine

Source

pub fn new( config: PolicyConfig, history: Arc<TransactionHistory>, ) -> Result<Self, PolicyError>

Creates a new policy engine with the given configuration and history.

§Arguments
  • config - Policy configuration with whitelist, blacklist, and limits
  • history - Transaction history for tracking daily totals
§Returns

A new DefaultPolicyEngine instance.

§Errors

Returns PolicyError::InvalidConfiguration if the configuration is invalid (e.g., an address appears in both whitelist and blacklist).

§Example
use txgate_policy::engine::DefaultPolicyEngine;
use txgate_policy::config::PolicyConfig;
use txgate_policy::history::TransactionHistory;
use alloy_primitives::U256;
use std::sync::Arc;

let config = PolicyConfig::new()
    .with_whitelist(vec!["0xAAA".to_string()])
    .with_transaction_limit("ETH", U256::from(5_000_000_000_000_000_000u64));

let history = Arc::new(TransactionHistory::in_memory().unwrap());
let engine = DefaultPolicyEngine::new(config, history).unwrap();

Trait Implementations§

Source§

impl Debug for DefaultPolicyEngine

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PolicyEngine for DefaultPolicyEngine

Source§

fn check(&self, tx: &ParsedTx) -> Result<PolicyResult, PolicyError>

Check if a transaction is allowed by policy rules. Read more
Source§

fn record(&self, tx: &ParsedTx) -> Result<(), PolicyError>

Record a transaction that was signed (for limit tracking). Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V