Restore GetNodeData (#469)
* Accept GetNodeData requests * Implement blockchain client method for node data requests * Reuse old database read methods for node data * fmt * Copy & paste old tests... * ... and make them work * fmt
This commit is contained in:
@@ -2776,6 +2776,10 @@ impl BlockChainClient for Client {
|
||||
fn registrar_address(&self) -> Option<Address> {
|
||||
self.registrar_address.clone()
|
||||
}
|
||||
|
||||
fn state_data(&self, hash: &H256) -> Option<Bytes> {
|
||||
self.state_db.read().journal_db().state(hash)
|
||||
}
|
||||
}
|
||||
|
||||
impl IoClient for Client {
|
||||
|
||||
@@ -1078,6 +1078,18 @@ impl BlockChainClient for TestBlockChainClient {
|
||||
fn registrar_address(&self) -> Option<Address> {
|
||||
None
|
||||
}
|
||||
|
||||
fn state_data(&self, hash: &H256) -> Option<Bytes> {
|
||||
let begins_with_f =
|
||||
H256::from_str("f000000000000000000000000000000000000000000000000000000000000000")
|
||||
.unwrap();
|
||||
if *hash > begins_with_f {
|
||||
let mut rlp = RlpStream::new();
|
||||
rlp.append(&hash.clone());
|
||||
return Some(rlp.out());
|
||||
}
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
impl IoClient for TestBlockChainClient {
|
||||
|
||||
@@ -333,6 +333,9 @@ pub trait BlockChainClient:
|
||||
/// Get all possible uncle hashes for a block.
|
||||
fn find_uncles(&self, hash: &H256) -> Option<Vec<H256>>;
|
||||
|
||||
/// Get latest state node
|
||||
fn state_data(&self, hash: &H256) -> Option<Bytes>;
|
||||
|
||||
/// Get block receipts data by block header hash.
|
||||
fn block_receipts(&self, hash: &H256) -> Option<BlockReceipts>;
|
||||
|
||||
|
||||
@@ -591,3 +591,12 @@ fn import_export_binary() {
|
||||
assert!(client.block_header(BlockId::Number(17)).is_some());
|
||||
assert!(client.block_header(BlockId::Number(16)).is_some());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn returns_state_root_basic() {
|
||||
let client = generate_dummy_client(6);
|
||||
let test_spec = Spec::new_test();
|
||||
let genesis_header = test_spec.genesis_header();
|
||||
|
||||
assert!(client.state_data(genesis_header.state_root()).is_some());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user