partner_chains_cardano_offchain/bridge/
init.rs1use crate::{
2 await_tx::AwaitTx,
3 cardano_keys::CardanoPaymentSigningKey,
4 multisig::MultiSigSmartContractResult,
5 plutus_script,
6 versioning_system::{ScriptData, initialize_script},
7};
8use ogmios_client::{
9 query_ledger_state::{QueryLedgerState, QueryUtxoByUtxoId},
10 query_network::QueryNetwork,
11 transactions::Transactions,
12};
13use raw_scripts::{
14 ILLIQUID_CIRCULATION_SUPPLY_AUTHORITY_TOKEN_POLICY, ILLIQUID_CIRCULATION_SUPPLY_VALIDATOR,
15 ScriptId,
16};
17use sidechain_domain::UtxoId;
18
19pub async fn init_ics_scripts<
24 T: QueryLedgerState + Transactions + QueryNetwork + QueryUtxoByUtxoId,
25 A: AwaitTx,
26>(
27 genesis_utxo: UtxoId,
28 payment_key: &CardanoPaymentSigningKey,
29 client: &T,
30 await_tx: &A,
31) -> anyhow::Result<Vec<MultiSigSmartContractResult>> {
32 let ics_validator = ScriptData::new(
33 "Illiquid Circulation Supply Validator",
34 ILLIQUID_CIRCULATION_SUPPLY_VALIDATOR.0.to_vec(),
35 ScriptId::IlliquidCirculationSupplyValidator,
36 );
37 let ics_auth_token_policy = ScriptData::new(
38 "Illiquid Circulation Supply Auth Token Policy",
39 plutus_script![
40 ILLIQUID_CIRCULATION_SUPPLY_AUTHORITY_TOKEN_POLICY,
41 ScriptId::IlliquidCirculationSupplyAuthorityTokenPolicy
42 ]?
43 .bytes
44 .to_vec(),
45 ScriptId::IlliquidCirculationSupplyAuthorityTokenPolicy,
46 );
47
48 Ok(vec![
49 initialize_script(ics_validator, genesis_utxo, payment_key, client, await_tx).await?,
50 initialize_script(ics_auth_token_policy, genesis_utxo, payment_key, client, await_tx)
51 .await?,
52 ]
53 .into_iter()
54 .flatten()
55 .collect())
56}