store more details in db
This commit is contained in:
parent
0f18fd3921
commit
2059901b4a
19
src/app.rs
19
src/app.rs
|
@ -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)
|
||||
|
|
|
@ -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()),
|
||||
|
|
107
src/database.rs
107
src/database.rs
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue