cml_chain_wasm/byron/
mod.rs1#![allow(
2 clippy::len_without_is_empty,
3 clippy::too_many_arguments,
4 clippy::new_without_default
5)]
6pub mod crc32;
10pub mod utils;
11
12pub use self::crc32::Crc32;
13pub use self::utils::{AddressId, ByronScript, ProtocolMagic, StakeholderId};
14pub use cml_chain::byron::ByronAddrType;
15use cml_core_wasm::{impl_wasm_cbor_event_serialize_api, impl_wasm_conversions};
16use cml_crypto_wasm::{Bip32PublicKey, PublicKey};
17use wasm_bindgen::prelude::wasm_bindgen;
18
19#[derive(Clone, Debug)]
20#[wasm_bindgen]
21pub struct AddrAttributes(cml_chain::byron::AddrAttributes);
22
23impl_wasm_conversions!(cml_chain::byron::AddrAttributes, AddrAttributes);
24
25impl_wasm_cbor_event_serialize_api!(AddrAttributes);
26
27#[wasm_bindgen]
28impl AddrAttributes {
29 pub fn set_stake_distribution(&mut self, stake_distribution: &StakeDistribution) {
30 self.0.stake_distribution = Some(stake_distribution.clone().into())
31 }
32
33 pub fn stake_distribution(&self) -> Option<StakeDistribution> {
34 self.0
35 .stake_distribution
36 .clone()
37 .map(std::convert::Into::into)
38 }
39
40 pub fn set_derivation_path(&mut self, derivation_path: &HDAddressPayload) {
41 self.0.derivation_path = Some(derivation_path.clone().into())
42 }
43
44 pub fn derivation_path(&self) -> Option<HDAddressPayload> {
45 self.0.derivation_path.clone().map(std::convert::Into::into)
46 }
47
48 pub fn set_protocol_magic(&mut self, protocol_magic: &ProtocolMagic) {
49 self.0.protocol_magic = Some((*protocol_magic).into())
50 }
51
52 pub fn protocol_magic(&self) -> Option<ProtocolMagic> {
53 self.0.protocol_magic.map(std::convert::Into::into)
54 }
55
56 pub fn new() -> Self {
57 Self(cml_chain::byron::AddrAttributes::new())
58 }
59}
60
61#[derive(Clone, Debug)]
62#[wasm_bindgen]
63pub struct AddressContent(cml_chain::byron::AddressContent);
64
65impl_wasm_conversions!(cml_chain::byron::AddressContent, AddressContent);
66
67impl_wasm_cbor_event_serialize_api!(AddressContent);
68
69#[wasm_bindgen]
70impl AddressContent {
71 pub fn address_id(&self) -> AddressId {
72 self.0.address_id.into()
73 }
74
75 pub fn addr_attributes(&self) -> AddrAttributes {
76 self.0.addr_attributes.clone().into()
77 }
78
79 pub fn addr_type(&self) -> ByronAddrType {
80 self.0.addr_type
81 }
82
83 pub fn new(
84 address_id: &AddressId,
85 addr_attributes: &AddrAttributes,
86 addr_type: ByronAddrType,
87 ) -> Self {
88 Self(cml_chain::byron::AddressContent::new(
89 address_id.clone().into(),
90 addr_attributes.clone().into(),
91 addr_type,
92 ))
93 }
94}
95
96#[derive(Clone, Debug)]
97#[wasm_bindgen]
98pub struct ByronAddress(cml_chain::byron::ByronAddress);
99
100impl_wasm_conversions!(cml_chain::byron::ByronAddress, ByronAddress);
101
102impl_wasm_cbor_event_serialize_api!(ByronAddress);
103
104#[wasm_bindgen]
105impl ByronAddress {
106 pub fn content(&self) -> AddressContent {
107 self.0.content.clone().into()
108 }
109
110 pub fn crc(&self) -> Crc32 {
111 self.0.crc.into()
112 }
113
114 pub fn new(content: &AddressContent, crc: &Crc32) -> Self {
115 Self(cml_chain::byron::ByronAddress::new(
116 content.clone().into(),
117 (*crc).into(),
118 ))
119 }
120}
121
122#[derive(Clone, Debug)]
123#[wasm_bindgen]
124pub struct HDAddressPayload(cml_chain::byron::HDAddressPayload);
125
126impl_wasm_conversions!(cml_chain::byron::HDAddressPayload, HDAddressPayload);
127
128impl_wasm_cbor_event_serialize_api!(HDAddressPayload);
129
130#[wasm_bindgen]
131impl HDAddressPayload {
132 pub fn get(&self) -> Vec<u8> {
133 self.0.get().clone()
134 }
135}
136
137#[derive(Clone, Debug)]
138#[wasm_bindgen]
139pub struct SpendingData(cml_chain::byron::SpendingData);
140
141impl_wasm_conversions!(cml_chain::byron::SpendingData, SpendingData);
142
143impl_wasm_cbor_event_serialize_api!(SpendingData);
144
145#[wasm_bindgen]
146impl SpendingData {
147 pub fn new_spending_data_pub_key(pubkey: &Bip32PublicKey) -> Self {
148 Self(cml_chain::byron::SpendingData::new_spending_data_pub_key(
149 (*pubkey).clone().into(),
150 ))
151 }
152
153 pub fn new_spending_data_script(script: &ByronScript) -> Self {
154 Self(cml_chain::byron::SpendingData::new_spending_data_script(
155 script.clone().into(),
156 ))
157 }
158
159 pub fn new_spending_data_redeem(redeem: &PublicKey) -> Self {
160 Self(cml_chain::byron::SpendingData::new_spending_data_redeem(
161 redeem.clone().into(),
162 ))
163 }
164
165 pub fn kind(&self) -> SpendingDataKind {
166 match &self.0 {
167 cml_chain::byron::SpendingData::SpendingDataPubKey(_) => {
168 SpendingDataKind::SpendingDataPubKey
169 }
170 cml_chain::byron::SpendingData::SpendingDataScript(_) => {
171 SpendingDataKind::SpendingDataScript
172 }
173 cml_chain::byron::SpendingData::SpendingDataRedeem(_) => {
174 SpendingDataKind::SpendingDataRedeem
175 }
176 }
177 }
178
179 pub fn as_spending_data_pub_key(&self) -> Option<Bip32PublicKey> {
180 match &self.0 {
181 cml_chain::byron::SpendingData::SpendingDataPubKey(pubkey) => {
182 Some(pubkey.clone().into())
183 }
184 _ => None,
185 }
186 }
187
188 pub fn as_spending_data_script(&self) -> Option<ByronScript> {
189 match &self.0 {
190 cml_chain::byron::SpendingData::SpendingDataScript(script) => Some((*script).into()),
191 _ => None,
192 }
193 }
194
195 pub fn as_spending_data_redeem(&self) -> Option<PublicKey> {
196 match &self.0 {
197 cml_chain::byron::SpendingData::SpendingDataRedeem(redeem) => {
198 Some(redeem.clone().into())
199 }
200 _ => None,
201 }
202 }
203}
204
205#[wasm_bindgen]
206pub enum SpendingDataKind {
207 SpendingDataPubKey,
208 SpendingDataScript,
209 SpendingDataRedeem,
210}
211
212#[derive(Clone, Debug)]
213#[wasm_bindgen]
214pub struct StakeDistribution(cml_chain::byron::StakeDistribution);
215
216impl_wasm_conversions!(cml_chain::byron::StakeDistribution, StakeDistribution);
217
218impl_wasm_cbor_event_serialize_api!(StakeDistribution);
219
220#[wasm_bindgen]
221impl StakeDistribution {
222 pub fn new_single_key(stakeholder_id: &StakeholderId) -> Self {
223 Self(cml_chain::byron::StakeDistribution::new_single_key(
224 stakeholder_id.clone().into(),
225 ))
226 }
227
228 pub fn new_bootstrap_era() -> Self {
229 Self(cml_chain::byron::StakeDistribution::new_bootstrap_era())
230 }
231
232 pub fn kind(&self) -> StakeDistributionKind {
233 match &self.0 {
234 cml_chain::byron::StakeDistribution::SingleKey(_) => StakeDistributionKind::SingleKey,
235 cml_chain::byron::StakeDistribution::BootstrapEra => {
236 StakeDistributionKind::BootstrapEra
237 }
238 }
239 }
240
241 pub fn as_single_key(&self) -> Option<StakeholderId> {
242 match &self.0 {
243 cml_chain::byron::StakeDistribution::SingleKey(stakeholder_id) => {
244 Some((*stakeholder_id).into())
245 }
246 _ => None,
247 }
248 }
249}
250
251#[wasm_bindgen]
252pub enum StakeDistributionKind {
253 SingleKey,
254 BootstrapEra,
255}
256
257#[derive(Clone, Debug)]
258#[wasm_bindgen]
259pub struct ByronTxOut(cml_chain::byron::ByronTxOut);
260
261impl_wasm_conversions!(cml_chain::byron::ByronTxOut, ByronTxOut);
262
263impl_wasm_cbor_event_serialize_api!(ByronTxOut);
264
265#[wasm_bindgen]
266impl ByronTxOut {
267 pub fn address(&self) -> ByronAddress {
268 self.0.address.clone().into()
269 }
270
271 pub fn amount(&self) -> u64 {
272 self.0.amount
273 }
274
275 pub fn new(address: &ByronAddress, amount: u64) -> Self {
276 Self(cml_chain::byron::ByronTxOut::new(
277 address.clone().into(),
278 amount,
279 ))
280 }
281}