@@ -428,6 +428,10 @@ impl ChainAdapter for TrackingAdapter {
|
|||||||
self.adapter.txhashset_read(h)
|
self.adapter.txhashset_read(h)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn txhashset_receive_ready(&self) -> bool {
|
||||||
|
self.adapter.txhashset_receive_ready()
|
||||||
|
}
|
||||||
|
|
||||||
fn txhashset_write(
|
fn txhashset_write(
|
||||||
&self,
|
&self,
|
||||||
h: Hash,
|
h: Hash,
|
||||||
|
|||||||
@@ -611,6 +611,10 @@ impl ChainAdapter for Peers {
|
|||||||
self.adapter.txhashset_read(h)
|
self.adapter.txhashset_read(h)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn txhashset_receive_ready(&self) -> bool {
|
||||||
|
self.adapter.txhashset_receive_ready()
|
||||||
|
}
|
||||||
|
|
||||||
fn txhashset_write(
|
fn txhashset_write(
|
||||||
&self,
|
&self,
|
||||||
h: Hash,
|
h: Hash,
|
||||||
|
|||||||
@@ -233,6 +233,9 @@ impl MessageHandler for Protocol {
|
|||||||
sm_arch.hash,
|
sm_arch.hash,
|
||||||
sm_arch.height,
|
sm_arch.height,
|
||||||
);
|
);
|
||||||
|
if !self.adapter.txhashset_receive_ready() {
|
||||||
|
return Err(Error::BadMessage);
|
||||||
|
}
|
||||||
|
|
||||||
let mut tmp = env::temp_dir();
|
let mut tmp = env::temp_dir();
|
||||||
tmp.push("txhashset.zip");
|
tmp.push("txhashset.zip");
|
||||||
|
|||||||
@@ -250,6 +250,10 @@ impl ChainAdapter for DummyAdapter {
|
|||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn txhashset_receive_ready(&self) -> bool {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
fn txhashset_write(
|
fn txhashset_write(
|
||||||
&self,
|
&self,
|
||||||
_h: Hash,
|
_h: Hash,
|
||||||
|
|||||||
@@ -256,6 +256,12 @@ pub trait ChainAdapter: Sync + Send {
|
|||||||
/// at the provided block hash.
|
/// at the provided block hash.
|
||||||
fn txhashset_read(&self, h: Hash) -> Option<TxHashSetRead>;
|
fn txhashset_read(&self, h: Hash) -> Option<TxHashSetRead>;
|
||||||
|
|
||||||
|
/// Whether the node is ready to accept a new txhashset. If this isn't the
|
||||||
|
/// case, the archive is provided without being requested and likely an
|
||||||
|
/// attack attempt. This should be checked *before* downloading the whole
|
||||||
|
/// state data.
|
||||||
|
fn txhashset_receive_ready(&self) -> bool;
|
||||||
|
|
||||||
/// Writes a reading view on a txhashset state that's been provided to us.
|
/// Writes a reading view on a txhashset state that's been provided to us.
|
||||||
/// If we're willing to accept that new state, the data stream will be
|
/// If we're willing to accept that new state, the data stream will be
|
||||||
/// read as a zip file, unzipped and the resulting state files should be
|
/// read as a zip file, unzipped and the resulting state files should be
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ use std::thread;
|
|||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
use chain::{self, ChainAdapter, Options, Tip};
|
use chain::{self, ChainAdapter, Options, Tip};
|
||||||
use common::types::{ChainValidationMode, ServerConfig, SyncState};
|
use common::types::{ChainValidationMode, ServerConfig, SyncState, SyncStatus};
|
||||||
use core::core;
|
use core::core;
|
||||||
use core::core::block::BlockHeader;
|
use core::core::block::BlockHeader;
|
||||||
use core::core::hash::{Hash, Hashed};
|
use core::core::hash::{Hash, Hashed};
|
||||||
@@ -320,6 +320,10 @@ impl p2p::ChainAdapter for NetToChainAdapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn txhashset_receive_ready(&self) -> bool {
|
||||||
|
self.sync_state.status() == SyncStatus::TxHashsetDownload
|
||||||
|
}
|
||||||
|
|
||||||
/// Writes a reading view on a txhashset state that's been provided to us.
|
/// Writes a reading view on a txhashset state that's been provided to us.
|
||||||
/// If we're willing to accept that new state, the data stream will be
|
/// If we're willing to accept that new state, the data stream will be
|
||||||
/// read as a zip file, unzipped and the resulting state files should be
|
/// read as a zip file, unzipped and the resulting state files should be
|
||||||
@@ -330,7 +334,6 @@ impl p2p::ChainAdapter for NetToChainAdapter {
|
|||||||
txhashset_data: File,
|
txhashset_data: File,
|
||||||
_peer_addr: SocketAddr,
|
_peer_addr: SocketAddr,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
// TODO check whether we should accept any txhashset now
|
|
||||||
if let Err(e) =
|
if let Err(e) =
|
||||||
w(&self.chain).txhashset_write(h, txhashset_data, self.sync_state.as_ref())
|
w(&self.chain).txhashset_write(h, txhashset_data, self.sync_state.as_ref())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user