use alloy_primitives::{Address, Bytes, U256};
use blueprint_client_tangle::{
TangleClient, TransactionResult, contracts::ITangleTypes, services::ServiceRequestParams,
};
use color_eyre::eyre::Result;
pub async fn request_service(
client: &TangleClient,
params: ServiceRequestParams,
) -> Result<(TransactionResult, u64)> {
client.request_service(params).await.map_err(Into::into)
}
pub async fn approve_service(
client: &TangleClient,
request_id: u64,
staking_percent: u8,
) -> Result<TransactionResult> {
client
.approve_service(request_id, staking_percent)
.await
.map_err(Into::into)
}
pub async fn approve_service_with_commitments(
client: &TangleClient,
request_id: u64,
commitments: Vec<ITangleTypes::AssetSecurityCommitment>,
) -> Result<TransactionResult> {
client
.approve_service_with_commitments(request_id, commitments)
.await
.map_err(Into::into)
}
pub async fn reject_service(client: &TangleClient, request_id: u64) -> Result<TransactionResult> {
client.reject_service(request_id).await.map_err(Into::into)
}
pub async fn join_service(
client: &TangleClient,
service_id: u64,
exposure_bps: u16,
) -> Result<TransactionResult> {
client
.join_service(service_id, exposure_bps)
.await
.map_err(Into::into)
}
pub async fn leave_service(client: &TangleClient, service_id: u64) -> Result<TransactionResult> {
client.leave_service(service_id).await.map_err(Into::into)
}
pub fn build_request_params(
blueprint_id: u64,
operators: Vec<Address>,
operator_exposures: Option<Vec<u16>>,
permitted_callers: Vec<Address>,
ttl: u64,
payment_token: Address,
payment_amount: U256,
config: Bytes,
) -> ServiceRequestParams {
let mut params = ServiceRequestParams::new(
blueprint_id,
operators,
permitted_callers,
config,
ttl,
payment_token,
payment_amount,
);
params.operator_exposures = operator_exposures;
params
}
pub fn with_security_requirements(
mut params: ServiceRequestParams,
requirements: Vec<ITangleTypes::AssetSecurityRequirement>,
) -> ServiceRequestParams {
params.security_requirements = requirements;
params
}