1pub mod chain_events;
4pub mod errors;
5#[cfg(feature = "use-bindings")]
6mod parser;
7pub mod payload;
8
9#[cfg(feature = "use-bindings")]
10pub use {
11 hopr_bindings::{ContractAddresses, exports, exports::alloy::primitives::Address as AlloyAddress},
12 parser::ParsedHoprChainAction,
13};
14
15pub mod prelude {
16 #[cfg(feature = "use-bindings")]
17 pub use super::payload::{BasicPayloadGenerator, SafePayloadGenerator, TransactionRequest};
18 pub use super::{
19 ContractAddresses,
20 chain_events::ChainEvent,
21 payload::{GasEstimation, PayloadGenerator, SignableTransaction},
22 };
23}
24
25#[cfg(not(feature = "use-bindings"))]
26#[serde_with::serde_as]
28#[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize, Default)]
29pub struct ContractAddresses {
30 #[serde_as(as = "serde_with::DisplayFromStr")]
32 pub token: hopr_primitive_types::primitives::Address,
33 #[serde_as(as = "serde_with::DisplayFromStr")]
35 pub channels: hopr_primitive_types::primitives::Address,
36 #[serde_as(as = "serde_with::DisplayFromStr")]
38 pub announcements: hopr_primitive_types::primitives::Address,
39 #[serde_as(as = "serde_with::DisplayFromStr")]
41 pub node_safe_registry: hopr_primitive_types::primitives::Address,
42 #[serde_as(as = "serde_with::DisplayFromStr")]
44 pub ticket_price_oracle: hopr_primitive_types::primitives::Address,
45 #[serde_as(as = "serde_with::DisplayFromStr")]
47 pub winning_probability_oracle: hopr_primitive_types::primitives::Address,
48 #[serde_as(as = "serde_with::DisplayFromStr")]
50 pub node_safe_migration: hopr_primitive_types::primitives::Address,
51 #[serde_as(as = "serde_with::DisplayFromStr")]
53 pub node_stake_factory: hopr_primitive_types::primitives::Address,
54 #[serde_as(as = "serde_with::DisplayFromStr")]
56 pub module_implementation: hopr_primitive_types::primitives::Address,
57}
58
59#[cfg(not(feature = "use-bindings"))]
60impl IntoIterator for &ContractAddresses {
61 type IntoIter = std::vec::IntoIter<Address>;
62 type Item = Address;
63
64 fn into_iter(self) -> Self::IntoIter {
65 vec![
66 self.token,
67 self.channels,
68 self.announcements,
69 self.node_safe_registry,
70 self.ticket_price_oracle,
71 self.winning_probability_oracle,
72 self.node_stake_factory,
73 self.module_implementation,
74 ]
75 .into_iter()
76 }
77}
78
79#[cfg(feature = "use-bindings")]
84pub fn contract_addresses_for_network(name: &str) -> Option<(u64, ContractAddresses)> {
85 hopr_bindings::config::NetworksWithContractAddresses::default()
86 .networks
87 .get(name)
88 .cloned()
89 .map(|n| (n.chain_id, n.addresses))
90}
91
92#[inline]
94pub(crate) fn a2al(a: hopr_primitive_types::prelude::Address) -> AlloyAddress {
95 AlloyAddress::from_slice(a.as_ref())
96}