mod bitcoin_verification;
pub use bitcoin_verification::{BitcoinSPV, BlockHeader, RskBitcoinVerifier, verify_merkle_proof};
pub struct RskConfig {
pub node_url: String,
pub contract_address: String,
pub verification_mode: VerificationMode,
}
pub enum VerificationMode {
SPV,
FullNode,
Federated,
}
#[derive(Clone)]
pub struct RskAdapter {
config: RskConfig,
verifier: Option<RskBitcoinVerifier>,
}
impl RskAdapter {
pub fn new(config: RskConfig) -> Self {
Self {
config,
verifier: None,
}
}
pub fn initialize(&mut self) -> Result<(), Box<dyn std::error::Error>> {
self.verifier = Some(RskBitcoinVerifier::new(
&self.config.node_url,
&self.config.contract_address,
));
Ok(())
}
#[rsk_bind]
pub fn verify_bitcoin_payment(&self, proof: BitcoinSPV) -> Result<bool, Box<dyn std::error::Error>> {
match &self.verifier {
Some(v) => v.verify_bitcoin_payment(proof),
None => Err("RSK adapter not initialized".into()),
}
}
}