taceo-oprf-test-utils 0.11.0

Utilities for testing TACEO:OPRF based services.
Documentation
use alloy::{primitives::Address, providers::DynProvider};
#[cfg(feature = "deploy-anvil")]
use oprf_types::ShareEpoch;
use oprf_types::{OprfKeyId, chain::OprfKeyRegistry};

#[cfg(feature = "deploy-anvil")]
use crate::TestOprfKeyRegistry;

pub async fn register_oprf_nodes(
    provider: DynProvider,
    oprf_key_registry: Address,
    node_addresses: Vec<Address>,
) -> eyre::Result<()> {
    let oprf_key_registry = OprfKeyRegistry::new(oprf_key_registry, provider);
    let receipt = oprf_key_registry
        .registerOprfPeers(node_addresses)
        .send()
        .await?
        .get_receipt()
        .await?;
    if !receipt.status() {
        eyre::bail!("failed to init oprf key gen");
    }
    Ok(())
}

pub async fn init_key_gen(
    provider: DynProvider,
    oprf_key_registry: Address,
    oprf_key_id: OprfKeyId,
) -> eyre::Result<()> {
    let oprf_key_registry = OprfKeyRegistry::new(oprf_key_registry, provider);
    let receipt = oprf_key_registry
        .initKeyGen(oprf_key_id.into_inner())
        .send()
        .await?
        .get_receipt()
        .await?;
    if !receipt.status() {
        eyre::bail!("failed to init OPRF key gen");
    }
    Ok(())
}

pub async fn abort_key_gen(
    provider: DynProvider,
    oprf_key_registry: Address,
    oprf_key_id: OprfKeyId,
) -> eyre::Result<()> {
    let oprf_key_registry = OprfKeyRegistry::new(oprf_key_registry, provider);
    let receipt = oprf_key_registry
        .abortKeyGen(oprf_key_id.into_inner())
        .send()
        .await?
        .get_receipt()
        .await?;
    if !receipt.status() {
        eyre::bail!("failed to abort OPRF key gen");
    }
    Ok(())
}

pub async fn init_reshare(
    provider: DynProvider,
    oprf_key_registry: Address,
    oprf_key_id: OprfKeyId,
) -> eyre::Result<()> {
    let oprf_key_registry = OprfKeyRegistry::new(oprf_key_registry, provider);
    let receipt = oprf_key_registry
        .initReshare(oprf_key_id.into_inner())
        .send()
        .await?
        .get_receipt()
        .await?;
    if !receipt.status() {
        eyre::bail!("failed to init OPRF reshare");
    }
    Ok(())
}

pub async fn init_abort(
    provider: DynProvider,
    oprf_key_registry: Address,
    oprf_key_id: OprfKeyId,
) -> eyre::Result<()> {
    let oprf_key_registry = OprfKeyRegistry::new(oprf_key_registry, provider);
    let receipt = oprf_key_registry
        .abortKeyGen(oprf_key_id.into_inner())
        .send()
        .await?
        .get_receipt()
        .await?;
    if !receipt.status() {
        eyre::bail!("failed to init OPRF reshare");
    }
    Ok(())
}

pub async fn delete_oprf_key_material(
    provider: DynProvider,
    oprf_key_registry: Address,
    oprf_key_id: OprfKeyId,
) -> eyre::Result<()> {
    let oprf_key_registry = OprfKeyRegistry::new(oprf_key_registry, provider);
    let receipt = oprf_key_registry
        .deleteOprfPublicKey(oprf_key_id.into_inner())
        .send()
        .await?
        .get_receipt()
        .await?;
    if !receipt.status() {
        eyre::bail!("failed to delete OPRF pk");
    }
    Ok(())
}

#[cfg(feature = "deploy-anvil")]
pub async fn emit_delete_event(
    provider: DynProvider,
    oprf_key_registry: Address,
    oprf_key_id: OprfKeyId,
) -> eyre::Result<()> {
    let oprf_key_registry = TestOprfKeyRegistry::new(oprf_key_registry, provider);
    let receipt = oprf_key_registry
        .emitDeleteEvent(oprf_key_id.into_inner())
        .send()
        .await?
        .get_receipt()
        .await?;
    if !receipt.status() {
        eyre::bail!("could not emit delete event");
    }
    Ok(())
}

#[cfg(feature = "deploy-anvil")]
pub async fn emit_secret_gen_finalize(
    provider: DynProvider,
    oprf_key_registry: Address,
    oprf_key_id: OprfKeyId,
    epoch: ShareEpoch,
) -> eyre::Result<()> {
    let oprf_key_registry = TestOprfKeyRegistry::new(oprf_key_registry, provider);
    let receipt = oprf_key_registry
        .emitSecretGenFinalize(oprf_key_id.into_inner(), epoch.into_inner())
        .send()
        .await?
        .get_receipt()
        .await?;
    if !receipt.status() {
        eyre::bail!("could not emit secret-gen finalize");
    }
    Ok(())
}