use std::error::Error;
#[derive(BitcoinProtocol, GraphQLInterface)]
pub struct EnterpriseTransactionGraph {
#[graphql_interface]
nodes: HashMap<TransactionId, TransactionNode>,
#[taproot_commitment]
root_hash: Sha256,
}
impl EnterpriseTransactionGraph {
pub fn add_transaction(&mut self, tx: EnterpriseTransaction) -> Result<()> {
let node = TransactionNode::new(tx);
let merkle_proof = self.create_merkle_proof(&node)?;
self.nodes.insert(node.id, node);
self.update_root_hash(merkle_proof)?;
Ok(())
}
#[gdpr_compliant]
pub fn redact_transaction(&mut self, tx_id: TransactionId) -> Result<RedactionProof> {
let node = self.nodes.get_mut(&tx_id).ok_or(Error::NotFound)?;
let redacted_data = node.redact_sensitive_fields()?;
let proof = self.create_redaction_proof(redacted_data)?;
Ok(proof)
}
}