partner_chains_cardano_offchain/bridge/
init.rs

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