partner_chains_cardano_offchain/reserve/
init.rs1use crate::{
17 await_tx::AwaitTx,
18 cardano_keys::CardanoPaymentSigningKey,
19 csl::TransactionContext,
20 multisig::MultiSigSmartContractResult,
21 plutus_script, scripts_data,
22 versioning_system::{ScriptData, initialize_script},
23};
24use ogmios_client::{
25 query_ledger_state::{QueryLedgerState, QueryUtxoByUtxoId},
26 query_network::QueryNetwork,
27 transactions::Transactions,
28};
29use raw_scripts::{RESERVE_AUTH_POLICY, RESERVE_VALIDATOR, ScriptId};
30use sidechain_domain::UtxoId;
31
32pub async fn init_reserve_management<
39 T: QueryLedgerState + Transactions + QueryNetwork + QueryUtxoByUtxoId,
40 A: AwaitTx,
41>(
42 genesis_utxo: UtxoId,
43 payment_key: &CardanoPaymentSigningKey,
44 client: &T,
45 await_tx: &A,
46) -> anyhow::Result<Vec<MultiSigSmartContractResult>> {
47 let payment_ctx = TransactionContext::for_payment_key(payment_key, client).await?;
48 let version_oracle = scripts_data::version_oracle(genesis_utxo, payment_ctx.network)?;
49
50 let reserve_validator = ScriptData::new(
51 "Reserve Management Validator",
52 plutus_script![RESERVE_VALIDATOR, version_oracle.policy_id_as_plutus_data()]?
53 .bytes
54 .to_vec(),
55 ScriptId::ReserveValidator,
56 );
57 let reserve_policy = ScriptData::new(
58 "Reserve Management Policy",
59 plutus_script![RESERVE_AUTH_POLICY, version_oracle.policy_id_as_plutus_data()]?
60 .bytes
61 .to_vec(),
62 ScriptId::ReserveAuthPolicy,
63 );
64
65 Ok(vec![
66 initialize_script(reserve_validator, genesis_utxo, payment_key, client, await_tx).await?,
67 initialize_script(reserve_policy, genesis_utxo, payment_key, client, await_tx).await?,
68 ]
69 .into_iter()
70 .flatten()
71 .collect())
72}