partner_chains_cardano_offchain/bridge/
init.rs

1use 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
19/// Stores smart contracts used for bridge (Illiquid Circulation Supply) in the versioning system.
20/// Scripts stored are:
21///  - Illiquid Circulation Supply Validator
22///  - Illiquid Circulation Auth Token Policy
23pub 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}