superchain_primitives/
addresses.rs1use alloy_primitives::Address;
4
5#[derive(Debug, Clone, Hash, PartialEq, Eq, Default)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8#[cfg_attr(feature = "serde", serde(rename_all = "PascalCase"))]
9pub struct AddressList {
10 pub address_manager: Address,
12 pub l1_cross_domain_messenger_proxy: Address,
14 #[cfg_attr(feature = "serde", serde(alias = "L1ERC721BridgeProxy"))]
16 pub l1_erc721_bridge_proxy: Address,
17 pub l1_standard_bridge_proxy: Address,
19 pub l2_output_oracle_proxy: Option<Address>,
21 #[cfg_attr(feature = "serde", serde(alias = "OptimismMintableERC20FactoryProxy"))]
23 pub optimism_mintable_erc20_factory_proxy: Address,
24 pub optimism_portal_proxy: Address,
26 pub system_config_proxy: Address,
28 pub system_config_owner: Address,
30 pub proxy_admin: Address,
32 pub proxy_admin_owner: Address,
34 pub guardian: Address,
36
37 pub anchor_state_registry_proxy: Option<Address>,
40 #[cfg_attr(feature = "serde", serde(alias = "DelayedWETHProxy"))]
42 pub delayed_weth_proxy: Option<Address>,
43 pub dispute_game_factory_proxy: Option<Address>,
45 pub fault_dispute_game: Option<Address>,
47 #[cfg_attr(feature = "serde", serde(alias = "MIPS"))]
49 pub mips: Option<Address>,
50 pub permissioned_dispute_game: Option<Address>,
52 pub preimage_oracle: Option<Address>,
54 pub challenger: Option<Address>,
56}
57
58#[cfg(any(test, feature = "arbitrary"))]
59impl arbitrary::Arbitrary<'_> for AddressList {
60 fn arbitrary(g: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result<Self> {
61 Ok(Self {
62 address_manager: Address::from(g.arbitrary::<[u8; 20]>()?),
63 l1_cross_domain_messenger_proxy: Address::from(g.arbitrary::<[u8; 20]>()?),
64 l1_erc721_bridge_proxy: Address::from(g.arbitrary::<[u8; 20]>()?),
65 l1_standard_bridge_proxy: Address::from(g.arbitrary::<[u8; 20]>()?),
66 l2_output_oracle_proxy: Some(Address::from(g.arbitrary::<[u8; 20]>()?)),
67 optimism_mintable_erc20_factory_proxy: Address::from(g.arbitrary::<[u8; 20]>()?),
68 optimism_portal_proxy: Address::from(g.arbitrary::<[u8; 20]>()?),
69 system_config_proxy: Address::from(g.arbitrary::<[u8; 20]>()?),
70 system_config_owner: Address::from(g.arbitrary::<[u8; 20]>()?),
71 proxy_admin: Address::from(g.arbitrary::<[u8; 20]>()?),
72 proxy_admin_owner: Address::from(g.arbitrary::<[u8; 20]>()?),
73 guardian: Address::from(g.arbitrary::<[u8; 20]>()?),
74 anchor_state_registry_proxy: Some(Address::from(g.arbitrary::<[u8; 20]>()?)),
75 delayed_weth_proxy: Some(Address::from(g.arbitrary::<[u8; 20]>()?)),
76 dispute_game_factory_proxy: Some(Address::from(g.arbitrary::<[u8; 20]>()?)),
77 fault_dispute_game: Some(Address::from(g.arbitrary::<[u8; 20]>()?)),
78 mips: Some(Address::from(g.arbitrary::<[u8; 20]>()?)),
79 permissioned_dispute_game: Some(Address::from(g.arbitrary::<[u8; 20]>()?)),
80 preimage_oracle: Some(Address::from(g.arbitrary::<[u8; 20]>()?)),
81 challenger: Some(Address::from(g.arbitrary::<[u8; 20]>()?)),
82 })
83 }
84}
85
86impl AddressList {
87 pub fn zero_proof_addresses(&mut self) {
89 if self.anchor_state_registry_proxy == Some(Address::ZERO) {
90 self.anchor_state_registry_proxy = None;
91 }
92 if self.delayed_weth_proxy == Some(Address::ZERO) {
93 self.delayed_weth_proxy = None;
94 }
95 if self.dispute_game_factory_proxy == Some(Address::ZERO) {
96 self.dispute_game_factory_proxy = None;
97 }
98 if self.fault_dispute_game == Some(Address::ZERO) {
99 self.fault_dispute_game = None;
100 }
101 if self.mips == Some(Address::ZERO) {
102 self.mips = None;
103 }
104 if self.permissioned_dispute_game == Some(Address::ZERO) {
105 self.permissioned_dispute_game = None;
106 }
107 if self.preimage_oracle == Some(Address::ZERO) {
108 self.preimage_oracle = None;
109 }
110 if self.challenger == Some(Address::ZERO) {
111 self.challenger = None;
112 }
113 }
114}
115
116#[cfg(test)]
117mod tests {
118 use super::*;
119
120 #[test]
121 fn zero_proof_addresses() {
122 let mut addresses = AddressList {
123 anchor_state_registry_proxy: Some(Address::ZERO),
124 delayed_weth_proxy: Some(Address::ZERO),
125 dispute_game_factory_proxy: Some(Address::ZERO),
126 fault_dispute_game: Some(Address::ZERO),
127 mips: Some(Address::ZERO),
128 permissioned_dispute_game: Some(Address::ZERO),
129 preimage_oracle: Some(Address::ZERO),
130 challenger: Some(Address::ZERO),
131 ..Default::default()
132 };
133
134 addresses.zero_proof_addresses();
135
136 assert_eq!(addresses.anchor_state_registry_proxy, None);
137 assert_eq!(addresses.delayed_weth_proxy, None);
138 assert_eq!(addresses.dispute_game_factory_proxy, None);
139 assert_eq!(addresses.fault_dispute_game, None);
140 assert_eq!(addresses.mips, None);
141 assert_eq!(addresses.permissioned_dispute_game, None);
142 assert_eq!(addresses.preimage_oracle, None);
143 assert_eq!(addresses.challenger, None);
144 }
145}