Skip to content

Commit

Permalink
Tighten up P2P relay and orphan management in order to perfect high-B…
Browse files Browse the repository at this point in the history
…PS block exchange (kaspanet#359)

* complete revalidate orphans correctly

* improve test

* names and comments

* close the sync gap between consensus and the block orphan pool

* renames and comments

* orphan ibd heuristic

* explain the ibd heuristic

* simplify orphan output case + review comments

* remove todo and explain why

* log orphan-related events via the event logger

* add nodnsseed cmd flag which disable DNS seeding for peers

* bump version to 0.13.1

* updated sync gap comment

* update fn doc

* typo

* fix logs
  • Loading branch information
michaelsutton authored Dec 19, 2023
1 parent 6658164 commit dc9adc7
Show file tree
Hide file tree
Showing 8 changed files with 512 additions and 226 deletions.
100 changes: 50 additions & 50 deletions Cargo.lock

Large diffs are not rendered by default.

100 changes: 50 additions & 50 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ members = [
]

[workspace.package]
version = "0.13.0"
version = "0.13.1"
authors = ["Kaspa developers"]
license = "MIT/Apache-2.0"
repository = "https://github.com/kaspanet/rusty-kaspa"
Expand All @@ -72,55 +72,55 @@ include = [
]

[workspace.dependencies]
# kaspa-testing-integration = { version = "0.13.0", path = "testing/integration" }
kaspa-os = { version = "0.13.0", path = "kaspa-os" }
kaspa-daemon = { version = "0.13.0", path = "daemon" }
kaspa-addresses = { version = "0.13.0", path = "crypto/addresses" }
kaspa-addressmanager = { version = "0.13.0", path = "components/addressmanager" }
kaspa-bip32 = { version = "0.13.0", path = "wallet/bip32" }
kaspa-connectionmanager = { version = "0.13.0", path = "components/connectionmanager" }
kaspa-consensus = { version = "0.13.0", path = "consensus" }
kaspa-consensus-core = { version = "0.13.0", path = "consensus/core" }
kaspa-consensus-notify = { version = "0.13.0", path = "consensus/notify" }
kaspa-consensus-wasm = { version = "0.13.0", path = "consensus/wasm" }
kaspa-consensusmanager = { version = "0.13.0", path = "components/consensusmanager" }
kaspa-core = { version = "0.13.0", path = "core" }
kaspa-database = { version = "0.13.0", path = "database" }
kaspa-grpc-client = { version = "0.13.0", path = "rpc/grpc/client" }
kaspa-grpc-core = { version = "0.13.0", path = "rpc/grpc/core" }
kaspa-grpc-server = { version = "0.13.0", path = "rpc/grpc/server" }
kaspa-hashes = { version = "0.13.0", path = "crypto/hashes" }
kaspa-index-core = { version = "0.13.0", path = "indexes/core" }
kaspa-index-processor = { version = "0.13.0", path = "indexes/processor" }
kaspa-math = { version = "0.13.0", path = "math" }
kaspa-merkle = { version = "0.13.0", path = "crypto/merkle" }
kaspa-mining = { version = "0.13.0", path = "mining" }
kaspa-mining-errors = { version = "0.13.0", path = "mining/errors" }
kaspa-muhash = { version = "0.13.0", path = "crypto/muhash" }
kaspa-notify = { version = "0.13.0", path = "notify" }
kaspa-p2p-flows = { version = "0.13.0", path = "protocol/flows" }
kaspa-p2p-lib = { version = "0.13.0", path = "protocol/p2p" }
kaspa-pow = { version = "0.13.0", path = "consensus/pow" }
kaspa-rpc-core = { version = "0.13.0", path = "rpc/core" }
kaspa-rpc-macros = { version = "0.13.0", path = "rpc/macros" }
kaspa-rpc-service = { version = "0.13.0", path = "rpc/service" }
kaspa-txscript = { version = "0.13.0", path = "crypto/txscript" }
kaspa-txscript-errors = { version = "0.13.0", path = "crypto/txscript/errors" }
kaspa-utils = { version = "0.13.0", path = "utils" }
kaspa-utils-tower = { version = "0.13.0", path = "utils/tower" }
kaspa-utxoindex = { version = "0.13.0", path = "indexes/utxoindex" }
kaspa-wallet = { version = "0.13.0", path = "wallet/native" }
kaspa-cli = { version = "0.13.0", path = "cli" }
kaspa-wallet-cli-wasm = { version = "0.13.0", path = "wallet/wasm" }
kaspa-wallet-core = { version = "0.13.0", path = "wallet/core" }
kaspa-wasm = { version = "0.13.0", path = "wasm" }
kaspa-wrpc-core = { version = "0.13.0", path = "rpc/wrpc/core" }
kaspa-wrpc-client = { version = "0.13.0", path = "rpc/wrpc/client" }
kaspa-wrpc-proxy = { version = "0.13.0", path = "rpc/wrpc/proxy" }
kaspa-wrpc-server = { version = "0.13.0", path = "rpc/wrpc/server" }
kaspa-wrpc-wasm = { version = "0.13.0", path = "rpc/wrpc/wasm" }
kaspad = { version = "0.13.0", path = "kaspad" }
kaspa-perf-monitor = { version = "0.13.0", path = "metrics/perf_monitor" }
# kaspa-testing-integration = { version = "0.13.1", path = "testing/integration" }
kaspa-os = { version = "0.13.1", path = "kaspa-os" }
kaspa-daemon = { version = "0.13.1", path = "daemon" }
kaspa-addresses = { version = "0.13.1", path = "crypto/addresses" }
kaspa-addressmanager = { version = "0.13.1", path = "components/addressmanager" }
kaspa-bip32 = { version = "0.13.1", path = "wallet/bip32" }
kaspa-connectionmanager = { version = "0.13.1", path = "components/connectionmanager" }
kaspa-consensus = { version = "0.13.1", path = "consensus" }
kaspa-consensus-core = { version = "0.13.1", path = "consensus/core" }
kaspa-consensus-notify = { version = "0.13.1", path = "consensus/notify" }
kaspa-consensus-wasm = { version = "0.13.1", path = "consensus/wasm" }
kaspa-consensusmanager = { version = "0.13.1", path = "components/consensusmanager" }
kaspa-core = { version = "0.13.1", path = "core" }
kaspa-database = { version = "0.13.1", path = "database" }
kaspa-grpc-client = { version = "0.13.1", path = "rpc/grpc/client" }
kaspa-grpc-core = { version = "0.13.1", path = "rpc/grpc/core" }
kaspa-grpc-server = { version = "0.13.1", path = "rpc/grpc/server" }
kaspa-hashes = { version = "0.13.1", path = "crypto/hashes" }
kaspa-index-core = { version = "0.13.1", path = "indexes/core" }
kaspa-index-processor = { version = "0.13.1", path = "indexes/processor" }
kaspa-math = { version = "0.13.1", path = "math" }
kaspa-merkle = { version = "0.13.1", path = "crypto/merkle" }
kaspa-mining = { version = "0.13.1", path = "mining" }
kaspa-mining-errors = { version = "0.13.1", path = "mining/errors" }
kaspa-muhash = { version = "0.13.1", path = "crypto/muhash" }
kaspa-notify = { version = "0.13.1", path = "notify" }
kaspa-p2p-flows = { version = "0.13.1", path = "protocol/flows" }
kaspa-p2p-lib = { version = "0.13.1", path = "protocol/p2p" }
kaspa-pow = { version = "0.13.1", path = "consensus/pow" }
kaspa-rpc-core = { version = "0.13.1", path = "rpc/core" }
kaspa-rpc-macros = { version = "0.13.1", path = "rpc/macros" }
kaspa-rpc-service = { version = "0.13.1", path = "rpc/service" }
kaspa-txscript = { version = "0.13.1", path = "crypto/txscript" }
kaspa-txscript-errors = { version = "0.13.1", path = "crypto/txscript/errors" }
kaspa-utils = { version = "0.13.1", path = "utils" }
kaspa-utils-tower = { version = "0.13.1", path = "utils/tower" }
kaspa-utxoindex = { version = "0.13.1", path = "indexes/utxoindex" }
kaspa-wallet = { version = "0.13.1", path = "wallet/native" }
kaspa-cli = { version = "0.13.1", path = "cli" }
kaspa-wallet-cli-wasm = { version = "0.13.1", path = "wallet/wasm" }
kaspa-wallet-core = { version = "0.13.1", path = "wallet/core" }
kaspa-wasm = { version = "0.13.1", path = "wasm" }
kaspa-wrpc-core = { version = "0.13.1", path = "rpc/wrpc/core" }
kaspa-wrpc-client = { version = "0.13.1", path = "rpc/wrpc/client" }
kaspa-wrpc-proxy = { version = "0.13.1", path = "rpc/wrpc/proxy" }
kaspa-wrpc-server = { version = "0.13.1", path = "rpc/wrpc/server" }
kaspa-wrpc-wasm = { version = "0.13.1", path = "rpc/wrpc/wasm" }
kaspad = { version = "0.13.1", path = "kaspad" }
kaspa-perf-monitor = { version = "0.13.1", path = "metrics/perf_monitor" }

# external
aes = "0.8.3"
Expand Down
6 changes: 5 additions & 1 deletion kaspad/src/args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ pub struct Args {
pub prealloc_amount: u64,

pub disable_upnp: bool,
pub disable_dns_seeding: bool,
}

impl Default for Args {
Expand Down Expand Up @@ -111,6 +112,7 @@ impl Default for Args {
prealloc_amount: 1_000_000,

disable_upnp: false,
disable_dns_seeding: false,
}
}
}
Expand Down Expand Up @@ -317,7 +319,8 @@ pub fn cli() -> Command {
.value_parser(clap::value_parser!(u64))
.help("Interval in seconds for performance metrics collection."),
)
.arg(arg!(--"disable-upnp" "Disable upnp"));
.arg(arg!(--"disable-upnp" "Disable upnp"))
.arg(arg!(--"nodnsseed" "Disable DNS seeding for peers"));

#[cfg(feature = "devnet-prealloc")]
let cmd = cmd
Expand Down Expand Up @@ -377,6 +380,7 @@ pub fn parse_args() -> Args {
#[cfg(feature = "devnet-prealloc")]
prealloc_amount: m.get_one::<u64>("prealloc-amount").cloned().unwrap_or(defaults.prealloc_amount),
disable_upnp: m.get_one::<bool>("disable-upnp").cloned().unwrap_or(defaults.disable_upnp),
disable_dns_seeding: m.get_one::<bool>("nodnsseed").cloned().unwrap_or(defaults.disable_dns_seeding),
}
}

Expand Down
2 changes: 1 addition & 1 deletion kaspad/src/daemon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ do you confirm? (answer y/n or pass --yes to the Kaspad command line to confirm
let p2p_server_addr = args.listen.unwrap_or(ContextualNetAddress::unspecified()).normalize(config.default_p2p_port());
// connect_peers means no DNS seeding and no outbound peers
let outbound_target = if connect_peers.is_empty() { args.outbound_target } else { 0 };
let dns_seeders = if connect_peers.is_empty() { config.dns_seeders } else { &[] };
let dns_seeders = if connect_peers.is_empty() && !args.disable_dns_seeding { config.dns_seeders } else { &[] };

let grpc_server_addr = args.rpclisten.unwrap_or(ContextualNetAddress::unspecified()).normalize(config.default_rpc_port());

Expand Down
Loading

0 comments on commit dc9adc7

Please sign in to comment.