use std::error::Error;
#[derive(BitcoinProtocol)]
pub struct OpenBankingEngine {
#[psbt_required]
fiat_gateway: Arc<dyn FiatGateway>,
#[taproot_commitment]
compliance_engine: ComplianceManager,
#[oracle_service]
fx_oracle: Arc<FxRateOracle>,
}
impl OpenBankingEngine {
#[open_banking]
pub fn deposit_fiat(&self, amount: f64, currency: Currency) -> Result<FiatDepositProof> {
let tx_proof = self.fiat_gateway.initiate_deposit(amount, currency)?;
let compliance_check = self.compliance_engine.verify_deposit(&tx_proof)?;
let blockchain_proof = self.create_taproot_commitment(&tx_proof)?;
Ok(FiatDepositProof {
fiat_tx: tx_proof,
compliance: compliance_check,
blockchain_commitment: blockchain_proof
})
}
}