use std::collections::BTreeSet;
use miden_protocol::asset::AssetId;
use miden_protocol::block::FeeParameters;
use miden_protocol::note::NoteScriptRoot;
use miden_standards::account::auth::AuthNetworkAccount;
use miden_standards::note::config::{
BlocklistConfigNote,
ConstantFeePolicyConfigNote,
FaucetMetadataConfigNote,
NetworkAccountConfigNote,
PauseConfigNote,
RbacConfigNote,
};
use miden_standards::note::{BurnNote, FeeSponsorshipNote, MintNote, UpgradeNote};
use miden_standards::tx_script::ExpirationTransactionScript;
use miden_tx::NetworkNotePricer;
use super::{XReserveStablecoinBuilder, XReserveStablecoinBuilderError};
use crate::note::xreserve_admin::{XReserveMinBurnAmountNote, XReserveSetAttesterNote};
impl XReserveStablecoinBuilder {
pub fn allowed_note_scripts() -> BTreeSet<NoteScriptRoot> {
BTreeSet::from([
MintNote::script_root(),
BurnNote::script_root(),
XReserveSetAttesterNote::script_root(),
XReserveMinBurnAmountNote::script_root(),
FaucetMetadataConfigNote::script_root(),
PauseConfigNote::script_root(),
BlocklistConfigNote::script_root(),
RbacConfigNote::script_root(),
UpgradeNote::script_root(),
NetworkAccountConfigNote::script_root(),
ConstantFeePolicyConfigNote::script_root(),
FeeSponsorshipNote::script_root(),
])
}
pub fn auth_component(
fee_parameters: FeeParameters,
fee_asset_id: AssetId,
) -> Result<AuthNetworkAccount, XReserveStablecoinBuilderError> {
let fee_policy_manager = NetworkNotePricer::builder()
.fee_parameters(fee_parameters)
.fee_asset_id(fee_asset_id)
.note_costs(crate::note::costs::note_costs())
.build()
.basic_constant_fee_policy_manager(Self::allowed_note_scripts())?;
Ok(AuthNetworkAccount::custom(Self::allowed_note_scripts(), fee_policy_manager)?
.with_allowed_tx_scripts(BTreeSet::from([ExpirationTransactionScript::script_root()])))
}
}