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