Skip to content

Commit e280178

Browse files
committed
Clean up Database et. al.
* Remove `home/foreign_contract_address` from Database. * Remove `Option` from `Node::contract_address`. * Remove unnecessary extra `parsed::...Database` types. * Remove unnecessary extra `Database::from...` and `::load` methods.
1 parent 56e9ce1 commit e280178

File tree

8 files changed

+44
-167
lines changed

8 files changed

+44
-167
lines changed

bridge/src/bridge/deploy.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,7 @@ impl<T: Transport + Clone> Future for Deploy<T> {
6666
loop {
6767
let _next_state = match self.state {
6868
DeployState::CheckIfNeeded => {
69-
let db = Database::load_user_defined(
70-
&self.app.database_path,
71-
self.app.config.home.contract_address.expect("Home contract \
72-
address must be specified within config toml."),
73-
self.app.config.foreign.contract_address.expect("Foreign contract \
74-
address must be specified within config toml."))
75-
.map_err(ErrorKind::from);
76-
77-
match db {
69+
match Database::load(&self.app.database_path).map_err(ErrorKind::from) {
7870
Ok(database) => return Ok(Deployed::Existing(database).into()),
7971
Err(ErrorKind::MissingFile(_e)) => {
8072
#[cfg(feature = "deploy")] {
@@ -131,9 +123,15 @@ impl<T: Transport + Clone> Future for Deploy<T> {
131123
DeployState::Deploying(ref mut future) => {
132124
let (main_receipt, test_receipt) = try_ready!(future.poll());
133125

126+
// The `deploy` feature is being removed so this shouldn't
127+
// matter but the following lines have been left here as a
128+
// reminder that contract addresses are no longer stored
129+
// within `Database`.
130+
//
131+
// let _ = main_receipt.contract_address.expect("contract creation receipt must have an address; qed")
132+
// let _ = test_receipt.contract_address.expect("contract creation receipt must have an address; qed")
133+
134134
let database = Database {
135-
home_contract_address: main_receipt.contract_address.expect("contract creation receipt must have an address; qed"),
136-
foreign_contract_address: test_receipt.contract_address.expect("contract creation receipt must have an address; qed"),
137135
home_deploy: Some(main_receipt.block_number.low_u64()),
138136
foreign_deploy: Some(test_receipt.block_number.low_u64()),
139137
checked_deposit_relay: main_receipt.block_number.low_u64(),

bridge/src/bridge/deposit_relay.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ pub fn create_deposit_relay<T: Transport + Clone>(app: Arc<App<T>>, init: &Datab
4949
request_timeout: app.config.home.request_timeout,
5050
poll_interval: app.config.home.poll_interval,
5151
confirmations: app.config.home.required_confirmations,
52-
filter: deposits_filter(&app.home_bridge, init.home_contract_address),
52+
filter: deposits_filter(&app.home_bridge, app.config.home.contract_address),
5353
};
5454
DepositRelay {
5555
logs: api::log_stream(app.connections.home.clone(), app.timer.clone(), logs_init),
56-
foreign_contract: init.foreign_contract_address,
56+
foreign_contract: app.config.foreign.contract_address,
5757
state: DepositRelayState::Wait,
5858
app,
5959
foreign_balance,
@@ -92,7 +92,7 @@ impl<T: Transport> Stream for DepositRelay<T> {
9292
let gas = U256::from(self.app.config.txs.deposit_relay.gas);
9393
let gas_price = U256::from(*self.foreign_gas_price.read().unwrap());
9494
let balance_required = gas * gas_price * U256::from(item.logs.len());
95-
95+
9696
if balance_required > *foreign_balance.as_ref().unwrap() {
9797
return Err(ErrorKind::InsufficientFunds.into())
9898
}

bridge/src/bridge/gas_price.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ mod tests {
165165
fn errored_request() {
166166
let node = Node {
167167
account: Address::new(),
168-
contract_address: Some("49edf201c1e139282643d5e7c6fb0c7219ad1db7".into()),
168+
contract_address: "49edf201c1e139282643d5e7c6fb0c7219ad1db7".into(),
169169
request_timeout: Duration::from_secs(5),
170170
poll_interval: Duration::from_secs(1),
171171
required_confirmations: 0,
@@ -209,7 +209,7 @@ mod tests {
209209
fn bad_json() {
210210
let node = Node {
211211
account: Address::new(),
212-
contract_address: Some("49edf201c1e139282643d5e7c6fb0c7219ad1db7".into()),
212+
contract_address: "49edf201c1e139282643d5e7c6fb0c7219ad1db7".into(),
213213
request_timeout: Duration::from_secs(5),
214214
poll_interval: Duration::from_secs(1),
215215
required_confirmations: 0,
@@ -253,7 +253,7 @@ mod tests {
253253
fn unexpected_json() {
254254
let node = Node {
255255
account: Address::new(),
256-
contract_address: Some("49edf201c1e139282643d5e7c6fb0c7219ad1db7".into()),
256+
contract_address: "49edf201c1e139282643d5e7c6fb0c7219ad1db7".into(),
257257
request_timeout: Duration::from_secs(5),
258258
poll_interval: Duration::from_secs(1),
259259
required_confirmations: 0,
@@ -296,7 +296,7 @@ mod tests {
296296
fn non_object_json() {
297297
let node = Node {
298298
account: Address::new(),
299-
contract_address: Some("49edf201c1e139282643d5e7c6fb0c7219ad1db7".into()),
299+
contract_address: "49edf201c1e139282643d5e7c6fb0c7219ad1db7".into(),
300300
request_timeout: Duration::from_secs(5),
301301
poll_interval: Duration::from_secs(1),
302302
required_confirmations: 0,
@@ -339,7 +339,7 @@ mod tests {
339339
fn correct_json() {
340340
let node = Node {
341341
account: Address::new(),
342-
contract_address: Some("49edf201c1e139282643d5e7c6fb0c7219ad1db7".into()),
342+
contract_address: "49edf201c1e139282643d5e7c6fb0c7219ad1db7".into(),
343343
request_timeout: Duration::from_secs(5),
344344
poll_interval: Duration::from_secs(1),
345345
required_confirmations: 0,

bridge/src/bridge/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ mod tests {
244244
let mut event_loop = Core::new().unwrap();
245245
let _ = event_loop.run(bridge.collect());
246246

247-
let db = Database::load_stored(&path).unwrap();
247+
let db = Database::load(&path).unwrap();
248248

249249
assert_eq!(1, db.checked_deposit_relay);
250250
assert_eq!(0, db.checked_withdraw_confirm);
@@ -260,7 +260,7 @@ mod tests {
260260
let mut event_loop = Core::new().unwrap();
261261
let _ = event_loop.run(bridge.collect());
262262

263-
let db = Database::load_stored(&path).unwrap();
263+
let db = Database::load(&path).unwrap();
264264

265265
assert_eq!(2, db.checked_deposit_relay);
266266
assert_eq!(3, db.checked_withdraw_confirm);

bridge/src/bridge/withdraw_confirm.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ pub fn create_withdraw_confirm<T: Transport + Clone>(app: Arc<App<T>>, init: &Da
4444
request_timeout: app.config.foreign.request_timeout,
4545
poll_interval: app.config.foreign.poll_interval,
4646
confirmations: app.config.foreign.required_confirmations,
47-
filter: withdraws_filter(&app.foreign_bridge, init.foreign_contract_address.clone()),
47+
filter: withdraws_filter(&app.foreign_bridge, app.config.foreign.contract_address.clone()),
4848
};
4949

5050
WithdrawConfirm {
5151
logs: api::log_stream(app.connections.foreign.clone(), app.timer.clone(), logs_init),
52-
foreign_contract: init.foreign_contract_address,
52+
foreign_contract: app.config.foreign.contract_address,
5353
state: WithdrawConfirmState::Wait,
5454
app,
5555
foreign_balance,

bridge/src/bridge/withdraw_relay.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,13 @@ pub fn create_withdraw_relay<T: Transport + Clone>(app: Arc<App<T>>, init: &Data
8383
request_timeout: app.config.foreign.request_timeout,
8484
poll_interval: app.config.foreign.poll_interval,
8585
confirmations: app.config.foreign.required_confirmations,
86-
filter: collected_signatures_filter(&app.foreign_bridge, init.foreign_contract_address),
86+
filter: collected_signatures_filter(&app.foreign_bridge, app.config.foreign.contract_address),
8787
};
8888

8989
WithdrawRelay {
9090
logs: api::log_stream(app.connections.foreign.clone(), app.timer.clone(), logs_init),
91-
home_contract: init.home_contract_address,
92-
foreign_contract: init.foreign_contract_address,
91+
home_contract: app.config.home.contract_address,
92+
foreign_contract: app.config.foreign.contract_address,
9393
state: WithdrawRelayState::Wait,
9494
app,
9595
home_balance,

bridge/src/config.rs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ pub struct Node {
6969
pub account: Address,
7070
#[cfg(feature = "deploy")]
7171
pub contract: ContractConfig,
72-
pub contract_address: Option<Address>,
72+
pub contract_address: Address,
7373
pub request_timeout: Duration,
7474
pub poll_interval: Duration,
7575
pub required_confirmations: usize,
@@ -133,6 +133,12 @@ impl Node {
133133
}
134134
}
135135

136+
let contract_address = node.contract_address.ok_or(ErrorKind::ConfigError(
137+
"Contract address not specified. Please define the 'contract_address' key \
138+
within both the '[home]' and '[foreign]' tables in the toml config file. See \
139+
'https://github.com/poanetwork/poa-bridge/blob/master/README.md' \
140+
for more.".to_owned()))?;
141+
136142
let node = Node {
137143
account: node.account,
138144
#[cfg(feature = "deploy")]
@@ -144,7 +150,7 @@ impl Node {
144150
Bytes(read.from_hex()?)
145151
}
146152
},
147-
contract_address: node.contract_address,
153+
contract_address: contract_address,
148154
request_timeout: Duration::from_secs(node.request_timeout.unwrap_or(DEFAULT_TIMEOUT)),
149155
poll_interval: Duration::from_secs(node.poll_interval.unwrap_or(DEFAULT_POLL_INTERVAL)),
150156
required_confirmations: node.required_confirmations.unwrap_or(DEFAULT_CONFIRMATIONS),
@@ -159,14 +165,6 @@ impl Node {
159165
concurrent_http_requests,
160166
};
161167

162-
// Ensure that the contract address is specified for non-deploy builds:
163-
if cfg!(not(feature = "deploy")) && node.contract_address.is_none() {
164-
return Err(ErrorKind::ConfigError("Contract address not specified. Please define the \
165-
'contract_address' key within both the '[home]' and '[foreign]' tables in the \
166-
toml config file. See 'https://github.com/poanetwork/poa-bridge/blob/master/README.md' \
167-
for more.".into()).into());
168-
}
169-
170168
Ok(node)
171169
}
172170

@@ -384,7 +382,7 @@ required_signatures = 2
384382
txs: Transactions::default(),
385383
home: Node {
386384
account: "1B68Cb0B50181FC4006Ce572cF346e596E51818b".into(),
387-
contract_address: Some("49edf201c1e139282643d5e7c6fb0c7219ad1db7".into()),
385+
contract_address: "49edf201c1e139282643d5e7c6fb0c7219ad1db7".into(),
388386
poll_interval: Duration::from_secs(2),
389387
request_timeout: Duration::from_secs(DEFAULT_TIMEOUT),
390388
required_confirmations: 100,
@@ -400,7 +398,7 @@ required_signatures = 2
400398
},
401399
foreign: Node {
402400
account: "0000000000000000000000000000000000000001".into(),
403-
contract_address: Some("49edf201c1e139282643d5e7c6fb0c7219ad1db8".into()),
401+
contract_address: "49edf201c1e139282643d5e7c6fb0c7219ad1db8".into(),
404402
poll_interval: Duration::from_secs(1),
405403
request_timeout: Duration::from_secs(DEFAULT_TIMEOUT),
406404
required_confirmations: 12,
@@ -451,7 +449,7 @@ required_signatures = 2
451449
txs: Transactions::default(),
452450
home: Node {
453451
account: "1B68Cb0B50181FC4006Ce572cF346e596E51818b".into(),
454-
contract_address: Some("49edf201c1e139282643d5e7c6fb0c7219ad1db7".into()),
452+
contract_address: "49edf201c1e139282643d5e7c6fb0c7219ad1db7".into(),
455453
poll_interval: Duration::from_secs(1),
456454
request_timeout: Duration::from_secs(DEFAULT_TIMEOUT),
457455
required_confirmations: 12,
@@ -467,7 +465,7 @@ required_signatures = 2
467465
},
468466
foreign: Node {
469467
account: "0000000000000000000000000000000000000001".into(),
470-
contract_address: Some("49edf201c1e139282643d5e7c6fb0c7219ad1db8".into()),
468+
contract_address: "49edf201c1e139282643d5e7c6fb0c7219ad1db8".into(),
471469
poll_interval: Duration::from_secs(1),
472470
request_timeout: Duration::from_secs(DEFAULT_TIMEOUT),
473471
required_confirmations: 12,

0 commit comments

Comments
 (0)