mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 23:09:44 -04:00
Merge bitcoin/bitcoin#24512: 23.x backports
174af33d5d
util: Add inotify_rm_watch to syscall sandbox (AllowFileSystem) (Hennadii Stepanov)ded10fe3ea
build: Fix Boost.Process test for Boost 1.78 (Hennadii Stepanov)26c2f23f36
build: Fix Boost.Process detection on macOS arm64 (Hennadii Stepanov)85f85c7e5f
util: add linkat to syscall sandbox (AllowFileSystem) (fanquake)eaa04194b9
contrib: fix signet miner (sighash mismatch) (Sebastian Falbesoner)235b042594
rpc: Exclude descriptor when address is excluded (MarcoFalke)b05a59b69f
ci: Temporarily use clang-13 to work around clang-14 TSan bug (MarcoFalke)65b966743c
doc, init: add links to doc/cjdns.md (Jon Atack)7a553d4e65
doc: update i2p.md with cjdns, improve local addresses section (Jon Atack)4148396229
doc: update tor.md with cjdns and getnodeaddresses, fix tor grep, (Jon Atack)4690e8af13
doc: create initial doc/cjdns.md for cjdns how-to documentation (Jon Atack)5d24f612d1
Clarify in -maxtimeadjustment that only outbound peers influence time data (Jon Atack)b1646f1bb5
test: set segwit height back to 0 on regtest (Martin Zumsande)ef6a37b7c4
rpc: rename getdeploymentinfo status-next to status_next (Jon Atack)2a6fcf9c13
init, doc: improve -onlynet help and tor/i2p documentation (Jon Atack) Pull request description: Backport the following to 23.x: - #24468 - #24528 - #24527 - #24609 - #24555 - #24663 - #24572 - #24636 - #24553 - #24659 - #24521 - #24523 - #24690 - #24710 Possibly also: - #24579 - #24691 ACKs for top commit: laanwj: List-of-commits ACK174af33d5d
, I think we should merge this and move forward with rc3.. hebasto: ACK174af33d5d
Tree-SHA512: 5a493e1652b780b527767d6ca9e67012abd2fa5573496e85e0d8aa4bed3eb332bfcd72610b8dfb954ff274d42450623233c96c479de2085b9c8344ba5abf1935
This commit is contained in:
commit
c243e08351
17 changed files with 164 additions and 33 deletions
|
@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8
|
||||||
|
|
||||||
export CONTAINER_NAME=ci_native_tsan
|
export CONTAINER_NAME=ci_native_tsan
|
||||||
export DOCKER_NAME_TAG=ubuntu:22.04
|
export DOCKER_NAME_TAG=ubuntu:22.04
|
||||||
export PACKAGES="clang llvm libc++abi-dev libc++-dev python3-zmq"
|
export PACKAGES="clang-13 llvm-13 libc++abi-13-dev libc++-13-dev python3-zmq"
|
||||||
export DEP_OPTS="CC=clang CXX='clang++ -stdlib=libc++'"
|
export DEP_OPTS="CC=clang-13 CXX='clang++-13 -stdlib=libc++'"
|
||||||
export GOAL="install"
|
export GOAL="install"
|
||||||
export BITCOIN_CONFIG="--enable-zmq CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' CXXFLAGS='-g' --with-sanitizers=thread CC=clang CXX='clang++ -stdlib=libc++'"
|
export BITCOIN_CONFIG="--enable-zmq CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' CXXFLAGS='-g' --with-sanitizers=thread CC=clang-13 CXX='clang++-13 -stdlib=libc++'"
|
||||||
|
|
|
@ -1438,6 +1438,12 @@ if test "$use_external_signer" != "no"; then
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
AC_MSG_CHECKING([whether Boost.Process can be used])
|
AC_MSG_CHECKING([whether Boost.Process can be used])
|
||||||
|
TEMP_CXXFLAGS="$CXXFLAGS"
|
||||||
|
dnl Boost 1.78 requires the following workaround.
|
||||||
|
dnl See: https://github.com/boostorg/process/issues/235
|
||||||
|
CXXFLAGS="$CXXFLAGS -Wno-error=narrowing"
|
||||||
|
TEMP_CPPFLAGS="$CPPFLAGS"
|
||||||
|
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
|
||||||
TEMP_LDFLAGS="$LDFLAGS"
|
TEMP_LDFLAGS="$LDFLAGS"
|
||||||
dnl Boost 1.73 and older require the following workaround.
|
dnl Boost 1.73 and older require the following workaround.
|
||||||
LDFLAGS="$LDFLAGS $PTHREAD_CFLAGS"
|
LDFLAGS="$LDFLAGS $PTHREAD_CFLAGS"
|
||||||
|
@ -1445,6 +1451,8 @@ if test "$use_external_signer" != "no"; then
|
||||||
[have_boost_process="yes"],
|
[have_boost_process="yes"],
|
||||||
[have_boost_process="no"])
|
[have_boost_process="no"])
|
||||||
LDFLAGS="$TEMP_LDFLAGS"
|
LDFLAGS="$TEMP_LDFLAGS"
|
||||||
|
CPPFLAGS="$TEMP_CPPFLAGS"
|
||||||
|
CXXFLAGS="$TEMP_CXXFLAGS"
|
||||||
AC_MSG_RESULT([$have_boost_process])
|
AC_MSG_RESULT([$have_boost_process])
|
||||||
if test "$have_boost_process" = "yes"; then
|
if test "$have_boost_process" = "yes"; then
|
||||||
use_external_signer="yes"
|
use_external_signer="yes"
|
||||||
|
|
|
@ -8,7 +8,7 @@ import base64
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import math
|
import math
|
||||||
import os.path
|
import os
|
||||||
import re
|
import re
|
||||||
import struct
|
import struct
|
||||||
import sys
|
import sys
|
||||||
|
@ -493,10 +493,11 @@ def do_generate(args):
|
||||||
logging.debug("Mining block delta=%s start=%s mine=%s", seconds_to_hms(mine_time-bestheader["time"]), mine_time, is_mine)
|
logging.debug("Mining block delta=%s start=%s mine=%s", seconds_to_hms(mine_time-bestheader["time"]), mine_time, is_mine)
|
||||||
mined_blocks += 1
|
mined_blocks += 1
|
||||||
psbt = generate_psbt(tmpl, reward_spk, blocktime=mine_time)
|
psbt = generate_psbt(tmpl, reward_spk, blocktime=mine_time)
|
||||||
psbt_signed = json.loads(args.bcli("-stdin", "walletprocesspsbt", input=psbt.encode('utf8')))
|
input_stream = os.linesep.join([psbt, "true", "ALL"]).encode('utf8')
|
||||||
|
psbt_signed = json.loads(args.bcli("-stdin", "walletprocesspsbt", input=input_stream))
|
||||||
if not psbt_signed.get("complete",False):
|
if not psbt_signed.get("complete",False):
|
||||||
logging.debug("Generated PSBT: %s" % (psbt,))
|
logging.debug("Generated PSBT: %s" % (psbt,))
|
||||||
sys.stderr.write("PSBT signing failed")
|
sys.stderr.write("PSBT signing failed\n")
|
||||||
return 1
|
return 1
|
||||||
block, signet_solution = do_decode_psbt(psbt_signed["psbt"])
|
block, signet_solution = do_decode_psbt(psbt_signed["psbt"])
|
||||||
block = finish_block(block, signet_solution, args.grind_cmd)
|
block = finish_block(block, signet_solution, args.grind_cmd)
|
||||||
|
|
|
@ -73,6 +73,7 @@ The Bitcoin repo's [root README](/README.md) contains relevant information on th
|
||||||
- [Assets Attribution](assets-attribution.md)
|
- [Assets Attribution](assets-attribution.md)
|
||||||
- [Assumeutxo design](assumeutxo.md)
|
- [Assumeutxo design](assumeutxo.md)
|
||||||
- [bitcoin.conf Configuration File](bitcoin-conf.md)
|
- [bitcoin.conf Configuration File](bitcoin-conf.md)
|
||||||
|
- [CJDNS Support](cjdns.md)
|
||||||
- [Files](files.md)
|
- [Files](files.md)
|
||||||
- [Fuzz-testing](fuzzing.md)
|
- [Fuzz-testing](fuzzing.md)
|
||||||
- [I2P Support](i2p.md)
|
- [I2P Support](i2p.md)
|
||||||
|
|
95
doc/cjdns.md
Normal file
95
doc/cjdns.md
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
# CJDNS support in Bitcoin Core
|
||||||
|
|
||||||
|
It is possible to run Bitcoin Core over CJDNS, an encrypted IPv6 network that
|
||||||
|
uses public-key cryptography for address allocation and a distributed hash table
|
||||||
|
for routing.
|
||||||
|
|
||||||
|
## What is CJDNS?
|
||||||
|
|
||||||
|
CJDNS is like a distributed, shared VPN with multiple entry points where every
|
||||||
|
participant can reach any other participant. All participants use addresses from
|
||||||
|
the `fc00::/8` network (reserved IPv6 range). Installation and configuration is
|
||||||
|
done outside of Bitcoin Core, similarly to a VPN (either in the host/OS or on
|
||||||
|
the network router).
|
||||||
|
|
||||||
|
Compared to IPv4/IPv6, CJDNS provides end-to-end encryption and protects nodes
|
||||||
|
from traffic analysis and filtering.
|
||||||
|
|
||||||
|
Used with Tor and I2P, CJDNS is a complementary option that can enhance network
|
||||||
|
redundancy and robustness for both the Bitcoin network and individual nodes.
|
||||||
|
|
||||||
|
Each network has different characteristics. For instance, Tor is widely used but
|
||||||
|
somewhat centralized. I2P connections have a source address and I2P is slow.
|
||||||
|
CJDNS is fast but does not hide the sender and the recipient from intermediate
|
||||||
|
routers.
|
||||||
|
|
||||||
|
## Installing CJDNS and connecting to the network
|
||||||
|
|
||||||
|
To install and set up CJDNS, follow the instructions at
|
||||||
|
https://github.com/cjdelisle/cjdns#cjdns.
|
||||||
|
|
||||||
|
Don't skip steps
|
||||||
|
["2. Find a friend"](https://github.com/cjdelisle/cjdns#2-find-a-friend) and
|
||||||
|
["3. Connect your node to your friend's
|
||||||
|
node"](https://github.com/cjdelisle/cjdns#3-connect-your-node-to-your-friends-node).
|
||||||
|
You need to be connected to the CJDNS network before it will work with your
|
||||||
|
Bitcoin Core node.
|
||||||
|
|
||||||
|
Typically, CJDNS might be launched from its directory with
|
||||||
|
`sudo ./cjdroute < cjdroute.conf` and it sheds permissions after setting up the
|
||||||
|
[TUN](https://en.wikipedia.org/wiki/TUN/TAP) interface. You may also [launch it as an
|
||||||
|
unprivileged user](https://github.com/cjdelisle/cjdns/blob/master/doc/non-root-user.md)
|
||||||
|
with some additional setup.
|
||||||
|
|
||||||
|
The network connection can be checked by running `./tools/peerStats` from the
|
||||||
|
CJDNS directory.
|
||||||
|
|
||||||
|
## Run Bitcoin Core with CJDNS
|
||||||
|
|
||||||
|
Once you are connected to the CJDNS network, the following Bitcoin Core
|
||||||
|
configuration option makes CJDNS peers automatically reachable:
|
||||||
|
|
||||||
|
```
|
||||||
|
-cjdnsreachable
|
||||||
|
```
|
||||||
|
|
||||||
|
When enabled, this option tells Bitcoin Core that it is running in an
|
||||||
|
environment where a connection to an `fc00::/8` address will be to the CJDNS
|
||||||
|
network instead of to an [RFC4193](https://datatracker.ietf.org/doc/html/rfc4193)
|
||||||
|
IPv6 local network. This helps Bitcoin Core perform better address management:
|
||||||
|
- Your node can consider incoming `fc00::/8` connections to be from the CJDNS
|
||||||
|
network rather than from an IPv6 private one.
|
||||||
|
- If one of your node's local addresses is `fc00::/8`, then it can choose to
|
||||||
|
gossip that address to peers.
|
||||||
|
|
||||||
|
## Additional configuration options related to CJDNS
|
||||||
|
|
||||||
|
```
|
||||||
|
-onlynet=cjdns
|
||||||
|
```
|
||||||
|
|
||||||
|
Make automatic outbound connections only to CJDNS addresses. Inbound and manual
|
||||||
|
connections are not affected by this option. It can be specified multiple times
|
||||||
|
to allow multiple networks, e.g. onlynet=cjdns, onlynet=i2p, onlynet=onion.
|
||||||
|
|
||||||
|
CJDNS support was added to Bitcoin Core in version 23.0 and there may be fewer
|
||||||
|
CJDNS peers than Tor or IP ones. You can use `bitcoin-cli -addrinfo` to see the
|
||||||
|
number of CJDNS addresses known to your node.
|
||||||
|
|
||||||
|
In general, a node can be run with both an onion service and CJDNS (or any/all
|
||||||
|
of IPv4/IPv6/onion/I2P/CJDNS), which can provide a potential fallback if one of
|
||||||
|
the networks has issues. There are a number of ways to configure this; see
|
||||||
|
[doc/tor.md](https://github.com/bitcoin/bitcoin/blob/master/doc/tor.md) for
|
||||||
|
details.
|
||||||
|
|
||||||
|
## CJDNS-related information in Bitcoin Core
|
||||||
|
|
||||||
|
There are several ways to see your CJDNS address in Bitcoin Core:
|
||||||
|
- in the "Local addresses" output of CLI `-netinfo`
|
||||||
|
- in the "localaddresses" output of RPC `getnetworkinfo`
|
||||||
|
|
||||||
|
To see which CJDNS peers your node is connected to, use `bitcoin-cli -netinfo 4`
|
||||||
|
or the `getpeerinfo` RPC (i.e. `bitcoin-cli getpeerinfo`).
|
||||||
|
|
||||||
|
To see which CJDNS addresses your node knows, use the `getnodeaddresses 0 cjdns`
|
||||||
|
RPC.
|
16
doc/i2p.md
16
doc/i2p.md
|
@ -65,9 +65,9 @@ logging` for more information.
|
||||||
-onlynet=i2p
|
-onlynet=i2p
|
||||||
```
|
```
|
||||||
|
|
||||||
Make outgoing connections only to I2P addresses. Incoming connections are not
|
Make automatic outbound connections only to I2P addresses. Inbound and manual
|
||||||
affected by this option. It can be specified multiple times to allow multiple
|
connections are not affected by this option. It can be specified multiple times
|
||||||
network types, e.g. onlynet=onion, onlynet=i2p.
|
to allow multiple networks, e.g. onlynet=onion, onlynet=i2p.
|
||||||
|
|
||||||
I2P support was added to Bitcoin Core in version 22.0 and there may be fewer I2P
|
I2P support was added to Bitcoin Core in version 22.0 and there may be fewer I2P
|
||||||
peers than Tor or IP ones. Therefore, using I2P alone without other networks may
|
peers than Tor or IP ones. Therefore, using I2P alone without other networks may
|
||||||
|
@ -80,15 +80,15 @@ phase when syncing up a new node can be very slow. This phase can be sped up by
|
||||||
using other networks, for instance `onlynet=onion`, at the same time.
|
using other networks, for instance `onlynet=onion`, at the same time.
|
||||||
|
|
||||||
In general, a node can be run with both onion and I2P hidden services (or
|
In general, a node can be run with both onion and I2P hidden services (or
|
||||||
any/all of IPv4/IPv6/onion/I2P), which can provide a potential fallback if one
|
any/all of IPv4/IPv6/onion/I2P/CJDNS), which can provide a potential fallback if
|
||||||
of the networks has issues.
|
one of the networks has issues.
|
||||||
|
|
||||||
## I2P-related information in Bitcoin Core
|
## I2P-related information in Bitcoin Core
|
||||||
|
|
||||||
There are several ways to see your I2P address in Bitcoin Core:
|
There are several ways to see your I2P address in Bitcoin Core:
|
||||||
- in the debug log (grep for `AddLocal`, the I2P address ends in `.b32.i2p`)
|
- in the "Local addresses" output of CLI `-netinfo`
|
||||||
- in the output of the `getnetworkinfo` RPC in the "localaddresses" section
|
- in the "localaddresses" output of RPC `getnetworkinfo`
|
||||||
- in the output of `bitcoin-cli -netinfo` peer connections dashboard
|
- in the debug log (grep for `AddLocal`; the I2P address ends in `.b32.i2p`)
|
||||||
|
|
||||||
To see which I2P peers your node is connected to, use `bitcoin-cli -netinfo 4`
|
To see which I2P peers your node is connected to, use `bitcoin-cli -netinfo 4`
|
||||||
or the `getpeerinfo` RPC (e.g. `bitcoin-cli getpeerinfo`).
|
or the `getpeerinfo` RPC (e.g. `bitcoin-cli getpeerinfo`).
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
When Bitcoin Core automatically opens outgoing P2P connections it chooses
|
When Bitcoin Core automatically opens outgoing P2P connections, it chooses
|
||||||
a peer (address and port) from its list of potential peers. This list is
|
a peer (address and port) from its list of potential peers. This list is
|
||||||
populated with unchecked data, gossiped over the P2P network by other peers.
|
populated with unchecked data gossiped over the P2P network by other peers.
|
||||||
|
|
||||||
A malicious actor may gossip an address:port where no Bitcoin node is listening,
|
A malicious actor may gossip an address:port where no Bitcoin node is listening,
|
||||||
or one where a service is listening that is not related to the Bitcoin network.
|
or one where a service is listening that is not related to the Bitcoin network.
|
||||||
|
@ -17,7 +17,7 @@ authentication are unlikely to be considered a malicious action,
|
||||||
e.g. port 80 (http).
|
e.g. port 80 (http).
|
||||||
|
|
||||||
Below is a list of "bad" ports which Bitcoin Core avoids when choosing a peer to
|
Below is a list of "bad" ports which Bitcoin Core avoids when choosing a peer to
|
||||||
connect to. If a node is listening on such a port, it will likely receive less
|
connect to. If a node is listening on such a port, it will likely receive fewer
|
||||||
incoming connections.
|
incoming connections.
|
||||||
|
|
||||||
1: tcpmux
|
1: tcpmux
|
||||||
|
|
17
doc/tor.md
17
doc/tor.md
|
@ -16,9 +16,9 @@ configure Tor.
|
||||||
## How to see information about your Tor configuration via Bitcoin Core
|
## How to see information about your Tor configuration via Bitcoin Core
|
||||||
|
|
||||||
There are several ways to see your local onion address in Bitcoin Core:
|
There are several ways to see your local onion address in Bitcoin Core:
|
||||||
- in the debug log (grep for "tor:" or "AddLocal")
|
- in the "Local addresses" output of CLI `-netinfo`
|
||||||
- in the output of RPC `getnetworkinfo` in the "localaddresses" section
|
- in the "localaddresses" output of RPC `getnetworkinfo`
|
||||||
- in the output of the CLI `-netinfo` peer connections dashboard
|
- in the debug log (grep for "AddLocal"; the Tor address ends in `.onion`)
|
||||||
|
|
||||||
You may set the `-debug=tor` config logging option to have additional
|
You may set the `-debug=tor` config logging option to have additional
|
||||||
information in the debug log about your Tor configuration.
|
information in the debug log about your Tor configuration.
|
||||||
|
@ -27,6 +27,9 @@ CLI `-addrinfo` returns the number of addresses known to your node per
|
||||||
network. This can be useful to see how many onion peers your node knows,
|
network. This can be useful to see how many onion peers your node knows,
|
||||||
e.g. for `-onlynet=onion`.
|
e.g. for `-onlynet=onion`.
|
||||||
|
|
||||||
|
To fetch a number of onion addresses that your node knows, for example seven
|
||||||
|
addresses, use the `getnodeaddresses 7 onion` RPC.
|
||||||
|
|
||||||
## 1. Run Bitcoin Core behind a Tor proxy
|
## 1. Run Bitcoin Core behind a Tor proxy
|
||||||
|
|
||||||
The first step is running Bitcoin Core behind a Tor proxy. This will already anonymize all
|
The first step is running Bitcoin Core behind a Tor proxy. This will already anonymize all
|
||||||
|
@ -55,10 +58,10 @@ outgoing connections, but more is possible.
|
||||||
-seednode=X SOCKS5. In Tor mode, such addresses can also be exchanged with
|
-seednode=X SOCKS5. In Tor mode, such addresses can also be exchanged with
|
||||||
other P2P nodes.
|
other P2P nodes.
|
||||||
|
|
||||||
-onlynet=onion Make outgoing connections only to .onion addresses. Incoming
|
-onlynet=onion Make automatic outbound connections only to .onion addresses.
|
||||||
connections are not affected by this option. This option can be
|
Inbound and manual connections are not affected by this option.
|
||||||
specified multiple times to allow multiple network types, e.g.
|
It can be specified multiple times to allow multiple networks,
|
||||||
onlynet=onion, onlynet=i2p.
|
e.g. onlynet=onion, onlynet=i2p, onlynet=cjdns.
|
||||||
|
|
||||||
In a typical situation, this suffices to run behind a Tor proxy:
|
In a typical situation, this suffices to run behind a Tor proxy:
|
||||||
|
|
||||||
|
|
|
@ -397,7 +397,7 @@ public:
|
||||||
consensus.BIP65Height = 1; // Always active unless overridden
|
consensus.BIP65Height = 1; // Always active unless overridden
|
||||||
consensus.BIP66Height = 1; // Always active unless overridden
|
consensus.BIP66Height = 1; // Always active unless overridden
|
||||||
consensus.CSVHeight = 1; // Always active unless overridden
|
consensus.CSVHeight = 1; // Always active unless overridden
|
||||||
consensus.SegwitHeight = 1; // Always active unless overridden
|
consensus.SegwitHeight = 0; // Always active unless overridden
|
||||||
consensus.MinBIP9WarningHeight = 0;
|
consensus.MinBIP9WarningHeight = 0;
|
||||||
consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
||||||
consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks
|
consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks
|
||||||
|
|
|
@ -153,7 +153,9 @@ void ScriptPubKeyToUniv(const CScript& scriptPubKey, UniValue& out, bool include
|
||||||
CTxDestination address;
|
CTxDestination address;
|
||||||
|
|
||||||
out.pushKV("asm", ScriptToAsmStr(scriptPubKey));
|
out.pushKV("asm", ScriptToAsmStr(scriptPubKey));
|
||||||
|
if (include_address) {
|
||||||
out.pushKV("desc", InferDescriptor(scriptPubKey, DUMMY_SIGNING_PROVIDER)->ToString());
|
out.pushKV("desc", InferDescriptor(scriptPubKey, DUMMY_SIGNING_PROVIDER)->ToString());
|
||||||
|
}
|
||||||
if (include_hex) out.pushKV("hex", HexStr(scriptPubKey));
|
if (include_hex) out.pushKV("hex", HexStr(scriptPubKey));
|
||||||
|
|
||||||
std::vector<std::vector<unsigned char>> solns;
|
std::vector<std::vector<unsigned char>> solns;
|
||||||
|
|
|
@ -444,7 +444,7 @@ void SetupServerArgs(ArgsManager& argsman)
|
||||||
argsman.AddArg("-asmap=<file>", strprintf("Specify asn mapping used for bucketing of the peers (default: %s). Relative paths will be prefixed by the net-specific datadir location.", DEFAULT_ASMAP_FILENAME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-asmap=<file>", strprintf("Specify asn mapping used for bucketing of the peers (default: %s). Relative paths will be prefixed by the net-specific datadir location.", DEFAULT_ASMAP_FILENAME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-bantime=<n>", strprintf("Default duration (in seconds) of manually configured bans (default: %u)", DEFAULT_MISBEHAVING_BANTIME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-bantime=<n>", strprintf("Default duration (in seconds) of manually configured bans (default: %u)", DEFAULT_MISBEHAVING_BANTIME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-bind=<addr>[:<port>][=onion]", strprintf("Bind to given address and always listen on it (default: 0.0.0.0). Use [host]:port notation for IPv6. Append =onion to tag any incoming connections to that address and port as incoming Tor connections (default: 127.0.0.1:%u=onion, testnet: 127.0.0.1:%u=onion, signet: 127.0.0.1:%u=onion, regtest: 127.0.0.1:%u=onion)", defaultBaseParams->OnionServiceTargetPort(), testnetBaseParams->OnionServiceTargetPort(), signetBaseParams->OnionServiceTargetPort(), regtestBaseParams->OnionServiceTargetPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-bind=<addr>[:<port>][=onion]", strprintf("Bind to given address and always listen on it (default: 0.0.0.0). Use [host]:port notation for IPv6. Append =onion to tag any incoming connections to that address and port as incoming Tor connections (default: 127.0.0.1:%u=onion, testnet: 127.0.0.1:%u=onion, signet: 127.0.0.1:%u=onion, regtest: 127.0.0.1:%u=onion)", defaultBaseParams->OnionServiceTargetPort(), testnetBaseParams->OnionServiceTargetPort(), signetBaseParams->OnionServiceTargetPort(), regtestBaseParams->OnionServiceTargetPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-cjdnsreachable", "If set then this host is configured for CJDNS (connecting to fc00::/8 addresses would lead us to the CJDNS network) (default: 0)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-cjdnsreachable", "If set, then this host is configured for CJDNS (connecting to fc00::/8 addresses would lead us to the CJDNS network, see doc/cjdns.md) (default: 0)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-connect=<ip>", "Connect only to the specified node; -noconnect disables automatic connections (the rules for this peer are the same as for -addnode). This option can be specified multiple times to connect to multiple nodes.", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-connect=<ip>", "Connect only to the specified node; -noconnect disables automatic connections (the rules for this peer are the same as for -addnode). This option can be specified multiple times to connect to multiple nodes.", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-discover", "Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-discover", "Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-dns", strprintf("Allow DNS lookups for -addnode, -seednode and -connect (default: %u)", DEFAULT_NAME_LOOKUP), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-dns", strprintf("Allow DNS lookups for -addnode, -seednode and -connect (default: %u)", DEFAULT_NAME_LOOKUP), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
|
@ -457,12 +457,12 @@ void SetupServerArgs(ArgsManager& argsman)
|
||||||
argsman.AddArg("-maxconnections=<n>", strprintf("Maintain at most <n> connections to peers (default: %u). This limit does not apply to connections manually added via -addnode or the addnode RPC, which have a separate limit of %u.", DEFAULT_MAX_PEER_CONNECTIONS, MAX_ADDNODE_CONNECTIONS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-maxconnections=<n>", strprintf("Maintain at most <n> connections to peers (default: %u). This limit does not apply to connections manually added via -addnode or the addnode RPC, which have a separate limit of %u.", DEFAULT_MAX_PEER_CONNECTIONS, MAX_ADDNODE_CONNECTIONS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-maxreceivebuffer=<n>", strprintf("Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)", DEFAULT_MAXRECEIVEBUFFER), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-maxreceivebuffer=<n>", strprintf("Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)", DEFAULT_MAXRECEIVEBUFFER), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-maxsendbuffer=<n>", strprintf("Maximum per-connection send buffer, <n>*1000 bytes (default: %u)", DEFAULT_MAXSENDBUFFER), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-maxsendbuffer=<n>", strprintf("Maximum per-connection send buffer, <n>*1000 bytes (default: %u)", DEFAULT_MAXSENDBUFFER), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-maxtimeadjustment", strprintf("Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds)", DEFAULT_MAX_TIME_ADJUSTMENT), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-maxtimeadjustment", strprintf("Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by outbound peers forward or backward by this amount (default: %u seconds).", DEFAULT_MAX_TIME_ADJUSTMENT), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-maxuploadtarget=<n>", strprintf("Tries to keep outbound traffic under the given target per 24h. Limit does not apply to peers with 'download' permission or blocks created within past week. 0 = no limit (default: %s). Optional suffix units [k|K|m|M|g|G|t|T] (default: M). Lowercase is 1000 base while uppercase is 1024 base", DEFAULT_MAX_UPLOAD_TARGET), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-maxuploadtarget=<n>", strprintf("Tries to keep outbound traffic under the given target per 24h. Limit does not apply to peers with 'download' permission or blocks created within past week. 0 = no limit (default: %s). Optional suffix units [k|K|m|M|g|G|t|T] (default: M). Lowercase is 1000 base while uppercase is 1024 base", DEFAULT_MAX_UPLOAD_TARGET), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-onion=<ip:port>", "Use separate SOCKS5 proxy to reach peers via Tor onion services, set -noonion to disable (default: -proxy)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-onion=<ip:port>", "Use separate SOCKS5 proxy to reach peers via Tor onion services, set -noonion to disable (default: -proxy)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-i2psam=<ip:port>", "I2P SAM proxy to reach I2P peers and accept I2P connections (default: none)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-i2psam=<ip:port>", "I2P SAM proxy to reach I2P peers and accept I2P connections (default: none)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-i2pacceptincoming", "If set and -i2psam is also set then incoming I2P connections are accepted via the SAM proxy. If this is not set but -i2psam is set then only outgoing connections will be made to the I2P network. Ignored if -i2psam is not set. Listening for incoming I2P connections is done through the SAM proxy, not by binding to a local address and port (default: 1)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-i2pacceptincoming", "If set and -i2psam is also set then incoming I2P connections are accepted via the SAM proxy. If this is not set but -i2psam is set then only outgoing connections will be made to the I2P network. Ignored if -i2psam is not set. Listening for incoming I2P connections is done through the SAM proxy, not by binding to a local address and port (default: 1)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-onlynet=<net>", "Make automatic outgoing connections only through network <net> (" + Join(GetNetworkNames(), ", ") + "). Incoming connections are not affected by this option. This option can be specified multiple times to allow multiple networks.", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-onlynet=<net>", "Make automatic outbound connections only to network <net> (" + Join(GetNetworkNames(), ", ") + "). Inbound and manual connections are not affected by this option. It can be specified multiple times to allow multiple networks.", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-peerbloomfilters", strprintf("Support filtering of blocks and transaction with bloom filters (default: %u)", DEFAULT_PEERBLOOMFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-peerbloomfilters", strprintf("Support filtering of blocks and transaction with bloom filters (default: %u)", DEFAULT_PEERBLOOMFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-peerblockfilters", strprintf("Serve compact block filters to peers per BIP 157 (default: %u)", DEFAULT_PEERBLOCKFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-peerblockfilters", strprintf("Serve compact block filters to peers per BIP 157 (default: %u)", DEFAULT_PEERBLOCKFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-permitbaremultisig", strprintf("Relay non-P2SH multisig (default: %u)", DEFAULT_PERMIT_BAREMULTISIG), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-permitbaremultisig", strprintf("Relay non-P2SH multisig (default: %u)", DEFAULT_PERMIT_BAREMULTISIG), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
|
|
|
@ -1481,7 +1481,7 @@ static void SoftForkDescPushBack(const CBlockIndex* blockindex, UniValue& softfo
|
||||||
// BIP9 status
|
// BIP9 status
|
||||||
bip9.pushKV("status", get_state_name(current_state));
|
bip9.pushKV("status", get_state_name(current_state));
|
||||||
bip9.pushKV("since", g_versionbitscache.StateSinceHeight(blockindex->pprev, consensusParams, id));
|
bip9.pushKV("since", g_versionbitscache.StateSinceHeight(blockindex->pprev, consensusParams, id));
|
||||||
bip9.pushKV("status-next", get_state_name(next_state));
|
bip9.pushKV("status_next", get_state_name(next_state));
|
||||||
|
|
||||||
// BIP9 signalling status, if applicable
|
// BIP9 signalling status, if applicable
|
||||||
if (has_signal) {
|
if (has_signal) {
|
||||||
|
@ -1623,7 +1623,7 @@ const std::vector<RPCResult> RPCHelpForDeployment{
|
||||||
{RPCResult::Type::NUM, "min_activation_height", "minimum height of blocks for which the rules may be enforced"},
|
{RPCResult::Type::NUM, "min_activation_height", "minimum height of blocks for which the rules may be enforced"},
|
||||||
{RPCResult::Type::STR, "status", "status of deployment at specified block (one of \"defined\", \"started\", \"locked_in\", \"active\", \"failed\")"},
|
{RPCResult::Type::STR, "status", "status of deployment at specified block (one of \"defined\", \"started\", \"locked_in\", \"active\", \"failed\")"},
|
||||||
{RPCResult::Type::NUM, "since", "height of the first block to which the status applies"},
|
{RPCResult::Type::NUM, "since", "height of the first block to which the status applies"},
|
||||||
{RPCResult::Type::STR, "status-next", "status of deployment at the next block"},
|
{RPCResult::Type::STR, "status_next", "status of deployment at the next block"},
|
||||||
{RPCResult::Type::OBJ, "statistics", /*optional=*/true, "numeric statistics about signalling for a softfork (only for \"started\" and \"locked_in\" status)",
|
{RPCResult::Type::OBJ, "statistics", /*optional=*/true, "numeric statistics about signalling for a softfork (only for \"started\" and \"locked_in\" status)",
|
||||||
{
|
{
|
||||||
{RPCResult::Type::NUM, "period", "the length in blocks of the signalling period"},
|
{RPCResult::Type::NUM, "period", "the length in blocks of the signalling period"},
|
||||||
|
|
|
@ -1121,6 +1121,7 @@ static RPCHelpMan decodepsbt()
|
||||||
{RPCResult::Type::OBJ, "scriptPubKey", "",
|
{RPCResult::Type::OBJ, "scriptPubKey", "",
|
||||||
{
|
{
|
||||||
{RPCResult::Type::STR, "asm", "The asm"},
|
{RPCResult::Type::STR, "asm", "The asm"},
|
||||||
|
{RPCResult::Type::STR, "desc", "Inferred descriptor for the output"},
|
||||||
{RPCResult::Type::STR_HEX, "hex", "The hex"},
|
{RPCResult::Type::STR_HEX, "hex", "The hex"},
|
||||||
{RPCResult::Type::STR, "type", "The type, eg 'pubkeyhash'"},
|
{RPCResult::Type::STR, "type", "The type, eg 'pubkeyhash'"},
|
||||||
{RPCResult::Type::STR, "address", /*optional=*/true, "The Bitcoin address (only if a well-defined address exists)"},
|
{RPCResult::Type::STR, "address", /*optional=*/true, "The Bitcoin address (only if a well-defined address exists)"},
|
||||||
|
|
|
@ -12,7 +12,16 @@
|
||||||
// For details see https://github.com/bitcoin/bitcoin/pull/22348.
|
// For details see https://github.com/bitcoin/bitcoin/pull/22348.
|
||||||
#define __kernel_entry
|
#define __kernel_entry
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
// Boost 1.78 requires the following workaround.
|
||||||
|
// See: https://github.com/boostorg/process/issues/235
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wnarrowing"
|
||||||
|
#endif
|
||||||
#include <boost/process.hpp>
|
#include <boost/process.hpp>
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
#endif // ENABLE_EXTERNAL_SIGNER
|
#endif // ENABLE_EXTERNAL_SIGNER
|
||||||
|
|
||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
|
|
|
@ -592,6 +592,8 @@ public:
|
||||||
allowed_syscalls.insert(__NR_getcwd); // get current working directory
|
allowed_syscalls.insert(__NR_getcwd); // get current working directory
|
||||||
allowed_syscalls.insert(__NR_getdents); // get directory entries
|
allowed_syscalls.insert(__NR_getdents); // get directory entries
|
||||||
allowed_syscalls.insert(__NR_getdents64); // get directory entries
|
allowed_syscalls.insert(__NR_getdents64); // get directory entries
|
||||||
|
allowed_syscalls.insert(__NR_inotify_rm_watch);// remove an existing watch from an inotify instance
|
||||||
|
allowed_syscalls.insert(__NR_linkat); // create relative to a directory file descriptor
|
||||||
allowed_syscalls.insert(__NR_lstat); // get file status
|
allowed_syscalls.insert(__NR_lstat); // get file status
|
||||||
allowed_syscalls.insert(__NR_mkdir); // create a directory
|
allowed_syscalls.insert(__NR_mkdir); // create a directory
|
||||||
allowed_syscalls.insert(__NR_newfstatat); // get file status
|
allowed_syscalls.insert(__NR_newfstatat); // get file status
|
||||||
|
|
|
@ -6,7 +6,16 @@
|
||||||
#include <util/system.h>
|
#include <util/system.h>
|
||||||
|
|
||||||
#ifdef ENABLE_EXTERNAL_SIGNER
|
#ifdef ENABLE_EXTERNAL_SIGNER
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
// Boost 1.78 requires the following workaround.
|
||||||
|
// See: https://github.com/boostorg/process/issues/235
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wnarrowing"
|
||||||
|
#endif
|
||||||
#include <boost/process.hpp>
|
#include <boost/process.hpp>
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
#endif // ENABLE_EXTERNAL_SIGNER
|
#endif // ENABLE_EXTERNAL_SIGNER
|
||||||
|
|
||||||
#include <chainparamsbase.h>
|
#include <chainparamsbase.h>
|
||||||
|
|
|
@ -200,7 +200,7 @@ class BlockchainTest(BitcoinTestFramework):
|
||||||
'timeout': 0x7fffffffffffffff, # testdummy does not have a timeout so is set to the max int64 value
|
'timeout': 0x7fffffffffffffff, # testdummy does not have a timeout so is set to the max int64 value
|
||||||
'min_activation_height': 0,
|
'min_activation_height': 0,
|
||||||
'status': 'started',
|
'status': 'started',
|
||||||
'status-next': status_next,
|
'status_next': status_next,
|
||||||
'since': 144,
|
'since': 144,
|
||||||
'statistics': {
|
'statistics': {
|
||||||
'period': 144,
|
'period': 144,
|
||||||
|
@ -220,7 +220,7 @@ class BlockchainTest(BitcoinTestFramework):
|
||||||
'timeout': 9223372036854775807,
|
'timeout': 9223372036854775807,
|
||||||
'min_activation_height': 0,
|
'min_activation_height': 0,
|
||||||
'status': 'active',
|
'status': 'active',
|
||||||
'status-next': 'active',
|
'status_next': 'active',
|
||||||
'since': 0,
|
'since': 0,
|
||||||
},
|
},
|
||||||
'height': 0,
|
'height': 0,
|
||||||
|
|
Loading…
Add table
Reference in a new issue