store more details in db

This commit is contained in:
debris 2017-08-13 12:21:51 +02:00
parent 0f18fd3921
commit 2059901b4a
3 changed files with 42 additions and 86 deletions

View File

@ -9,7 +9,7 @@ use web3::transports::ipc::Ipc;
use web3::types::TransactionRequest;
use error::{Error, ErrorKind, ResultExt};
use config::Config;
use database::{Database, BlockchainState};
use database::Database;
use contracts::{EthereumBridge, KovanBridge};
use api;
@ -94,16 +94,13 @@ impl<T: Transport> App<T> {
let deploy = main_future.join(test_future)
.map(|(main_receipt, test_receipt)| {
Database {
mainnet: BlockchainState {
deploy_block_number: main_receipt.block_number.low_u64(),
last_block_number: main_receipt.block_number.low_u64(),
contract_address: main_receipt.contract_address.expect("contract creation receipt must have an address; qed"),
},
testnet: BlockchainState {
deploy_block_number: test_receipt.block_number.low_u64(),
last_block_number: test_receipt.block_number.low_u64(),
contract_address: test_receipt.contract_address.expect("contract creation receipt must have an address; qed"),
}
mainnet_contract_address: main_receipt.contract_address.expect("contract creation receipt must have an address; qed"),
testnet_contract_address: test_receipt.contract_address.expect("contract creation receipt must have an address; qed"),
mainnet_deploy: main_receipt.block_number.low_u64(),
testnet_deploy: test_receipt.block_number.low_u64(),
checked_deposit_relay: main_receipt.block_number.low_u64(),
checked_withdraw_relay: test_receipt.block_number.low_u64(),
checked_withdraw_confirm: test_receipt.block_number.low_u64(),
}
})
.map_err(ErrorKind::Web3)

View File

@ -42,7 +42,7 @@ impl<T: Transport> Stream for DepositRelay<T> {
.map(|deposit| self.app.testnet_bridge().deposit_payload(deposit))
.map(|payload| TransactionRequest {
from: self.app.config.testnet.account.clone(),
to: Some(self.init.testnet.contract_address.clone()),
to: Some(self.init.testnet_contract_address.clone()),
gas: Some(self.app.config.testnet.txs.deposit.gas.into()),
gas_price: Some(self.app.config.testnet.txs.deposit.gas_price.into()),
value: Some(self.app.config.testnet.txs.deposit.value.into()),

View File

@ -8,8 +8,20 @@ use error::{Error, ResultExt, ErrorKind};
/// Application "database".
#[derive(Debug, PartialEq, Deserialize, Serialize)]
pub struct Database {
pub mainnet: BlockchainState,
pub testnet: BlockchainState,
/// Address of mainnet contract.
pub mainnet_contract_address: Address,
/// Address of testnet contract.
pub testnet_contract_address: Address,
/// Number of block at which mainnet contract has been deployed.
pub mainnet_deploy: u64,
/// Number of block at which testnet contract has been deployed.
pub testnet_deploy: u64,
/// Number of last block which has been checked for deposit relays.
pub checked_deposit_relay: u64,
/// Number of last block which has been checked for withdraw relays.
pub checked_withdraw_relay: u64,
/// Number of last block which has been checked for withdraw confirms.
pub checked_withdraw_confirm: u64,
}
impl str::FromStr for Database {
@ -46,88 +58,35 @@ impl Database {
}
}
#[derive(Debug, PartialEq, Deserialize, Serialize)]
pub struct BlockchainState {
/// Block number at which bridge has been deployed.
pub deploy_block_number: u64,
/// Bridge contract address.
pub contract_address: Address,
/// Last handled block number
pub last_block_number: u64,
}
impl BlockchainState {
pub fn new(block_number: u64, contract_address: Address) -> Self {
BlockchainState {
deploy_block_number: block_number,
contract_address: contract_address,
last_block_number: block_number,
}
}
}
#[cfg(test)]
mod tests {
use super::{Database, BlockchainState};
use super::Database;
#[test]
fn laod_databse_from_str() {
let toml = r#"
[mainnet]
deploy_block_number = 100
contract_address = "0x49edf201c1e139282643d5e7c6fb0c7219ad1db7"
last_block_number = 120
[testnet]
deploy_block_number = 101
contract_address = "0x49edf201c1e139282643d5e7c6fb0c7219ad1db8"
last_block_number = 121
fn databse_to_and_from_str() {
let toml =
r#"mainnet_contract_address = "0x49edf201c1e139282643d5e7c6fb0c7219ad1db7"
testnet_contract_address = "0x49edf201c1e139282643d5e7c6fb0c7219ad1db8"
mainnet_deploy = 100
testnet_deploy = 101
checked_deposit_relay = 120
checked_withdraw_relay = 121
checked_withdraw_confirm = 121
"#;
let expected = Database {
mainnet: BlockchainState {
deploy_block_number: 100,
contract_address: "0x49edf201c1e139282643d5e7c6fb0c7219ad1db7".parse().unwrap(),
last_block_number: 120,
},
testnet: BlockchainState {
deploy_block_number: 101,
contract_address: "0x49edf201c1e139282643d5e7c6fb0c7219ad1db8".parse().unwrap(),
last_block_number: 121,
},
mainnet_contract_address: "0x49edf201c1e139282643d5e7c6fb0c7219ad1db7".parse().unwrap(),
testnet_contract_address: "0x49edf201c1e139282643d5e7c6fb0c7219ad1db8".parse().unwrap(),
mainnet_deploy: 100,
testnet_deploy: 101,
checked_deposit_relay: 120,
checked_withdraw_relay: 121,
checked_withdraw_confirm: 121,
};
let database = toml.parse().unwrap();
assert_eq!(expected, database);
}
#[test]
fn save_database_to_string() {
let database = Database {
mainnet: BlockchainState {
deploy_block_number: 100,
contract_address: "0x49edf201c1e139282643d5e7c6fb0c7219ad1db7".parse().unwrap(),
last_block_number: 120,
},
testnet: BlockchainState {
deploy_block_number: 101,
contract_address: "0x49edf201c1e139282643d5e7c6fb0c7219ad1db8".parse().unwrap(),
last_block_number: 121,
},
};
let expected = r#"[mainnet]
deploy_block_number = 100
contract_address = "0x49edf201c1e139282643d5e7c6fb0c7219ad1db7"
last_block_number = 120
[testnet]
deploy_block_number = 101
contract_address = "0x49edf201c1e139282643d5e7c6fb0c7219ad1db8"
last_block_number = 121
"#;
let raw = database.to_string();
assert_eq!(expected, &raw);
let s = database.to_string();
assert_eq!(s, toml);
}
}