Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .agents/skills/ship-pr/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ version-bump PR. Do not label ordinary net or RPC PRs.
Label `overlay-functional` when the PR touches that harness, and on every
ship version-bump PR. Poll with `--interest overlay-functional`. It is not
a required check.
Label `warnet` to run the two-tank Docker example
([`docs/core-functional.md`](../../../docs/core-functional.md)). Not a
required check. Do not label ordinary PRs.
Label `nixos-module-runtime` when the NixOS module VM test should run (not
eval). Poll with `--interest nixos-module-runtime`. It is not a required
check.
Expand Down
43 changes: 43 additions & 0 deletions .github/workflows/warnet-example.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Two-tank Warnet lab image. Label `warnet` or workflow_dispatch.
# Not a required check. Not kind/Helm miner_std.
name: warnet-example

on:
workflow_dispatch:
pull_request:
types: [opened, synchronize, reopened, labeled, unlabeled]

concurrency:
group: warnet-example-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
warnet-example:
name: warnet-example
runs-on: ubuntu-latest
timeout-minutes: 45
if: >-
github.event_name == 'workflow_dispatch' ||
contains(github.event.pull_request.labels.*.name, 'warnet')
env:
CARGO_TARGET_DIR: target/dev
RUSTFLAGS: -D warnings
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
submodules: false
- name: Build a bookworm node and run two tanks
run: |
set -euo pipefail
docker run --rm -v "$PWD":/src -w /src \
-e CARGO_TARGET_DIR=/src/target/docker \
rust:1.95.0-bookworm \
cargo build -p rbitcoin-node
./scripts/core-functional/init-submodule.sh
./scripts/core-functional/warnet/Dockerfile.test.sh
NODE_BIN="$PWD/target/docker/debug/rbitcoin-node" \
./scripts/core-functional/warnet/example.sh
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,18 @@ before 1.0).

### Changed

- **Hostname `--connect` / `addnode`:** clearnet names resolve at each dial
(`localhost` and a missing port use the network P2P default) on a blocking
thread, and retry until a live session exists. `--connect` does not enable
seed redial. If the first catch-up accepts nothing and the tip is still 0,
the node enters tip-follow (16 blocks in flight, no return to the IBD
window) so a late short-chain peer can attach. A non-zero tip stays in IBD.
Relay stays gated below `--min-chain-work`.
Label `warnet` runs a two-tank Docker example that starts the connecting
tank first and waits until its height matches the miner and `getpeerinfo`
shows the resolved address
([`docs/core-functional.md`](docs/core-functional.md)).

- **Tor cookie HMAC uses `hmac` 0.13 and `sha2` 0.11** (digest 0.11).
Node `getrandom` is 0.4, matching the rest of the workspace. `bitcoin`
requirement is 0.32.102. Compatible lock bumps include `bitflags` 2.13.2,
Expand Down
2 changes: 1 addition & 1 deletion COMPAT.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ Per-method notes, auth, and the shindex matrix live in
|--------------|--------|
| Control (`help`, `uptime`, `stop`, `getrpcinfo`, `echo`) | done (`syncwithvalidationinterfacequeue` omitted; functional proxy no-op for Core `sync_mempools`) |
| Blockchain (`getblockchaininfo`, `getblockcount`, `getbestblockhash`, `getblockhash`, `getblock`/`header`, `getdifficulty`, `getblockstats`) | done (`getblockstats` from `txstat` when stamped; size and count fields match Core, including `utxo_increase_actual`; omit coins-DB `utxo_size_*`) |
| Network (`getnetworkinfo`, `getconnectioncount`, `getpeerinfo`, `addnode`, `disconnectnode`, `addconnection`) | done (BIP324 v2-only; peer `timeoffset` / `synced_*` from session state) |
| Network (`getnetworkinfo`, `getconnectioncount`, `getpeerinfo`, `addnode`, `disconnectnode`, `addconnection`) | done (BIP324 v2-only; peer `timeoffset` / `synced_*` from session state; hostname `addnode` / `--connect` resolve at dial and retry until live) |
| Mempool / rawtx (`getmempool*`, `getrawtransaction`, `sendrawtransaction`, `testmempoolaccept`) | done (Libre; RPC `maxfeerate` / `maxburnamount` / `"version"` only) |
| Coin / MiniWallet (`gettxout`, `scantxoutset` `raw(HEX)`) | done (Class A unspent walk — not a coins-DB) |
| Index / tips (`getindexinfo`, `getchaintips`, `waitforblock*`) | done (`txindex` = Class A reconstruct) |
Expand Down
10 changes: 10 additions & 0 deletions OPERATOR.md
Original file line number Diff line number Diff line change
Expand Up @@ -853,6 +853,16 @@ Do **not** wipe `store/` for mempool slot/full/schema errors.
groups; the node still starts. `--connect` is operator-pinned and skips the
filter. We do not ship a mainnet map. Core publishes maps from the same
`ip_asn.dat` used by `bitcoind -asmap`.
- **Genesis `--connect` after a failed first catch-up.** If that attempt
accepts no blocks and the tip is still height 0, the process enters
tip-follow instead of staying in IBD. The peer that appears later is a
follow session: `getheaders`, then at most 16 blocks in flight, confirmed
on the tip index path. The stagnant-tip loop does not start the IBD
scheduler again. A catch-up that finishes is unchanged, and a non-zero tip
that has not finished catch-up stays in IBD. This is for a peer you expect
to show up with a short chain. A fresh mainnet or signet datadir pointed at
a full node stays on this slower path for the rest of the process whenever
the first dial accepts nothing.
- Tx inv/getdata/tx relay is **off during IBD**; enabled in tip mode after catch-up.
- **BIP152 compact blocks v2:** `sendcmpct` high-bandwidth; mempool/orphan/`extra_compact` short-id fill +
`getblocktxn` / `blocktxn`; full witness getdata fallback. We also **serve** `getblocktxn`.
Expand Down
4 changes: 2 additions & 2 deletions crates/rbitcoin-net/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ pub use peer::{
};
pub use peer_dos::DEFAULT_MAX_INBOUND;
pub use peers::{
parse_peer_addr, parse_peer_net, pick_stale_follow_evict, DialRequest, DialTarget, LivePeer,
PeerConnType, PeerHub, PeerInfo, PeerOut, PingAction,
parse_peer_addr, parse_peer_addr_with_port, parse_peer_net, pick_stale_follow_evict,
DialRequest, DialTarget, LivePeer, PeerConnType, PeerHub, PeerInfo, PeerOut, PingAction,
};
pub use rbitcoin_mempool::AcceptError;
pub(crate) use rbitcoin_mempool::MempoolGraphStats;
Expand Down
Loading
Loading