profile
viewpoint

MarcoFalke/SphereDecoding 9

Matlab implementation of the Sphere Decoder by A. Ghasemmehdi and E. Agrell [2011]

MarcoFalke/bitcoin-core 8

Development fork of Bitcoin Core

DrahtBot/bitcoin_core_issue_redirect 2

HTML redirects for Bitcoin Core issue and pull request urls

DrahtBot/reports 2

repository reports (coverage, benchmarks, ...)

MarcoFalke/apt-fast 0

apt-fast: A shellscript wrapper for apt that speeds up downloading of packages.

MarcoFalke/bips 0

Bitcoin Improvement Proposals

MarcoFalke/bitcoin-core-gui 0

Bitcoin Core GUI staging repository. Please do not fork unless for development reasons.

pull request commentbitcoin/bitcoin

test: add test for corrupt wallet bdb logs

<!--e57a25ab6845829454e8d69fc972939a-->

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

<!--174a7506f384e20aa4161008e828411d-->

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #20892 (tests: Run both descriptor and legacy tests within a single test invocation by achow101)

If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

ryanofsky

comment created time in 4 minutes

pull request commentbitcoin/bitcoin

test: Move MakeNoLogFileContext to libtest_util, and use it in bench

<!--e57a25ab6845829454e8d69fc972939a-->

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

<!--174a7506f384e20aa4161008e828411d-->

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #20915 (fuzz: Fail if message type is not fuzzed by MarcoFalke)
  • #20833 (rpc/validation: enable packages through testmempoolaccept by glozow)
  • #20773 (refactor: split CWallet::Create by S3RK)
  • #19806 (validation: UTXO snapshot activation by jamesob)

If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

MarcoFalke

comment created time in 21 minutes

pull request commentbitcoin/bitcoin

bitcoind: Add -daemonwait option to wait for initialization

<!--e57a25ab6845829454e8d69fc972939a-->

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

<!--174a7506f384e20aa4161008e828411d-->

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #19471 (util: Make default arg values more specific by hebasto)
  • #19160 (multiprocess: Add basic spawn and IPC support by ryanofsky)

If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

laanwj

comment created time in 28 minutes

PR opened bitcoin/bitcoin

test: fix zmq test flakiness, improve speed

Fixes #20934 by using the "sync up" method described in https://github.com/bitcoin/bitcoin/issues/20538#issuecomment-738791868.

After improving robustness with this approach (commits 1-3), it turned out that there were still some fails, but those were unrelated to zmq: Out of 500 runs, 3 times sync_mempool() or sync_blocks() timed out, which can happen because the trickle relay time has no upper bound -- hence in rare cases, it takes longer than 60s. This is fixed by enabling immediate tx relay on node1 (commit 4), which as a nice side-effect also gives us a rough 2x speedup for the test.

For further details, also see the explanations in the commit messages.

+43 -15

0 comment

1 changed file

pr created time in 31 minutes

pull request commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

Rebased. I think there are improvements that can be done in followup PRs. For example, #20892 implements running a test twice. But for now, I would like for this to be merged so that we can get more test coverage of descriptor wallets.

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def run_test(self):         self.nodes[1].createwallet(wallet_name="w1")         w1 = self.nodes[1].get_wallet_rpc("w1")         # w2 contains the private keys for w3-        self.nodes[1].createwallet(wallet_name="w2")+        self.nodes[1].createwallet(wallet_name="w2", blank=True)         w2 = self.nodes[1].get_wallet_rpc("w2")+        xpriv = "tprv8ZgxMBicQKsPfHCsTwkiM1KT56RXbGGTqvc2hgqzycpwbHqqpcajQeMRZoBD35kW4RtyCemu6j34Ku5DEspmgjKdt2qe4SvRch5Kk8B8A2v"

Done

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def run_test(self):         self.nodes[1].createwallet(wallet_name="w1")         w1 = self.nodes[1].get_wallet_rpc("w1")         # w2 contains the private keys for w3-        self.nodes[1].createwallet(wallet_name="w2")+        self.nodes[1].createwallet(wallet_name="w2", blank=True)         w2 = self.nodes[1].get_wallet_rpc("w2")+        xpriv = "tprv8ZgxMBicQKsPfHCsTwkiM1KT56RXbGGTqvc2hgqzycpwbHqqpcajQeMRZoBD35kW4RtyCemu6j34Ku5DEspmgjKdt2qe4SvRch5Kk8B8A2v"+        xpub = "tpubD6NzVbkrYhZ4YkEfMbRJkQyZe7wTkbTNRECozCtJPtdLRn6cT1QKb8yHjwAPcAr26eHBFYs5iLiFFnCbwPRsncCKUKCfubHDMGKzMVcN1Jg"+        if self.options.descriptors:+            w2.importdescriptors([{+                "desc": descsum_create("wpkh(" + xpriv + "/0/0/*)"),+                "timestamp": "now",+                "range": [0, 100],+                "active": True+            },{+                "desc": descsum_create("wpkh(" + xpriv + "/0/1/*)"),+                "timestamp": "now",+                "range": [0, 100],+                "active": True,+                "internal": True+            }])+        else:+            w2.sethdseed(True)+         # w3 is a watch-only wallet, based on w2         self.nodes[1].createwallet(wallet_name="w3", disable_private_keys=True)         w3 = self.nodes[1].get_wallet_rpc("w3")-        for _ in range(3):-            a2_receive = w2.getnewaddress()-            a2_change = w2.getrawchangeaddress() # doesn't actually use change derivation-            res = w3.importmulti([{-                "desc": w2.getaddressinfo(a2_receive)["desc"],+        if self.options.descriptors:+            # Match the privkeys in w2 for descriptors+            res = w3.importdescriptors([{+                "desc": descsum_create("wpkh(" + xpub + "/0/0/*)"),                 "timestamp": "now",+                "range": [0, 100],                 "keypool": True,+                "active": True,                 "watchonly": True             },{-                "desc": w2.getaddressinfo(a2_change)["desc"],+                "desc": descsum_create("wpkh(" + xpub + "/0/1/*)"),                 "timestamp": "now",+                "range": [0, 100],                 "keypool": True,+                "active": True,                 "internal": True,                 "watchonly": True             }])             assert_equal(res, [{"success": True}, {"success": True}]) -        w0.sendtoaddress(a2_receive, 10) # fund w3-        self.nodes[0].generate(1)-        self.sync_blocks()--        # w4 has private keys enabled, but only contains watch-only keys (from w2)-        self.nodes[1].createwallet(wallet_name="w4", disable_private_keys=False)-        w4 = self.nodes[1].get_wallet_rpc("w4")         for _ in range(3):             a2_receive = w2.getnewaddress()-            res = w4.importmulti([{-                "desc": w2.getaddressinfo(a2_receive)["desc"],-                "timestamp": "now",-                "keypool": False,-                "watchonly": True-            }])-            assert_equal(res, [{"success": True}])+            if not self.options.descriptors:+                # Because legacy wallets use exclusively hardened derivation, we can't do a ranged import like we do for descriptors+                a2_change = w2.getrawchangeaddress() # doesn't actually use change derivation+                res = w3.importmulti([{+                    "desc": w2.getaddressinfo(a2_receive)["desc"],+                    "timestamp": "now",+                    "keypool": True,+                    "watchonly": True+                },{+                    "desc": w2.getaddressinfo(a2_change)["desc"],+                    "timestamp": "now",+                    "keypool": True,+                    "internal": True,+                    "watchonly": True+                }])+                assert_equal(res, [{"success": True}, {"success": True}]) -        w0.sendtoaddress(a2_receive, 10) # fund w4+        w0.sendtoaddress(a2_receive, 10) # fund w3         self.nodes[0].generate(1)         self.sync_blocks() +        if not self.options.descriptors:+            # w4 has private keys enabled, but only contains watch-only keys (from w2)+            # This is legacy wallet behavior only

Done

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def run_test(self):         res = w2.walletprocesspsbt(res["psbt"])         assert res["complete"] -        self.log.info("Create PSBT from wallet w4 with watch-only keys, sign with w2...")-        self.test_send(from_wallet=w4, to_wallet=w1, amount=1, expect_error=(-4, "Insufficient funds"))-        res = self.test_send(from_wallet=w4, to_wallet=w1, amount=1, include_watching=True, add_to_wallet=False)-        res = w2.walletprocesspsbt(res["psbt"])-        assert res["complete"]+        if not self.options.descriptors:+            # This tests legacy watch-only behavior only.

Added a comment.

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 class MempoolCompatibilityTest(BitcoinTestFramework):     def set_test_params(self):         self.num_nodes = 2         self.wallet_names = [None]+        self.requires_wallet = True

Perhaps, but that's a bit more complicated.

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def skip_test_if_missing_module(self):         self.skip_if_no_bitcoind_zmq()      def run_test(self):+        if self.is_wallet_compiled():+            self.nodes[0].createwallet(wallet_name=self.default_wallet_name, descriptors=self.options.descriptors, load_on_startup=True)+            self.nodes[0].importprivkey(privkey=self.nodes[0].get_deterministic_priv_key().key, label='coinbase')+            self.nodes[1].createwallet(wallet_name=self.default_wallet_name, descriptors=self.options.descriptors, load_on_startup=True)+            self.nodes[1].importprivkey(privkey=self.nodes[1].get_deterministic_priv_key().key, label='coinbase')

Yes. Done

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def set_test_params(self):         self.supports_cli = False      def run_test(self):+        self.wallet = MiniWallet(self.nodes[0])

Added a comment. It is only used to generate a transaction so that last_transaction in getpeerinfo can be checked.

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def run_test(self):          self.log.info("Test -getinfo returns expected network and blockchain info")         if self.is_wallet_compiled():+            self.nodes[0].createwallet(wallet_name=self.default_wallet_name, descriptors=self.options.descriptors)+            self.nodes[0].importprivkey(privkey=self.nodes[0].get_deterministic_priv_key().key, label='coinbase')

Done

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def setup_network(self):         super().setup_network()      def run_test(self):+        if self.is_wallet_compiled():+            # Setup the descriptors to be imported to the wallet

Done

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def import_deterministic_coinbase_privkeys(self):             self.init_wallet(i)      def init_wallet(self, i):+        if not self.requires_wallet:

Done.

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def parse_args(self):         parser.add_argument('--timeout-factor', dest="timeout_factor", type=float, default=1.0, help='adjust test timeouts by a factor. Setting it to 0 disables all timeouts')          group = parser.add_mutually_exclusive_group()-        group.add_argument("--descriptors", default=False, action="store_true",+        group.add_argument("--descriptors", action='store_const', const=True,                             help="Run test using a descriptor wallet", dest='descriptors')-        group.add_argument("--legacy-wallet", default=False, action="store_false",+        group.add_argument("--legacy-wallet", action='store_const', const=False,                             help="Run test using legacy wallets", dest='descriptors')          self.add_options(parser)         self.options = parser.parse_args()         self.options.previous_releases_path = previous_releases_path +        config = configparser.ConfigParser()+        config.read_file(open(self.options.configfile))+        self.config = config++        if self.options.descriptors is None:+            # Prefer BDB unless it isn't available+            if self.is_bdb_compiled():+                self.options.descriptors = False+            elif self.is_sqlite_compiled():+                self.options.descriptors = True+            # If neither are compiled, tests requiring a wallet will be skipped and the value of self.options.descriptors won't matter

Done

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def parse_args(self):         parser.add_argument('--timeout-factor', dest="timeout_factor", type=float, default=1.0, help='adjust test timeouts by a factor. Setting it to 0 disables all timeouts')          group = parser.add_mutually_exclusive_group()-        group.add_argument("--descriptors", default=False, action="store_true",+        group.add_argument("--descriptors", action='store_const', const=True,                             help="Run test using a descriptor wallet", dest='descriptors')-        group.add_argument("--legacy-wallet", default=False, action="store_false",+        group.add_argument("--legacy-wallet", action='store_const', const=False,                             help="Run test using legacy wallets", dest='descriptors')          self.add_options(parser)         self.options = parser.parse_args()         self.options.previous_releases_path = previous_releases_path +        config = configparser.ConfigParser()+        config.read_file(open(self.options.configfile))+        self.config = config

The is_*_compiled checks require self.config to already exist, so it must come before them and can't be at the bottom of the function.

achow101

comment created time in an hour

Pull request review commentbitcoin/bitcoin

build: Qt 5.15.x

 export LC_ALL=C.UTF-8  export CONTAINER_NAME=ci_win64-export DOCKER_NAME_TAG=ubuntu:18.04  # Check that bionic can cross-compile to win64 (bionic is used in the gitian build as well)+export DOCKER_NAME_TAG=ubuntu:20.04

I don't like this change, but without it the ci fails:

A newer version of mingw-w64 & headers is required to build this version of Qt, so we (essentially) have to use a newer version of Ubuntu in the CI & gitian (I'll add those changes, but will PR them separate in advance). This was also discussed above.

fanquake

comment created time in 2 hours

pull request commentbitcoin/bitcoin

Implement Bech32m and use it for v1+ segwit addresses

<!--cf906140f33d8803c4a75a2196329ecb--> 🐙 This pull request conflicts with the target branch and needs rebase.

<sub>Want to unsubscribe from rebase notifications on this pull request? Just convert this pull request to a "draft".</sub>

sipa

comment created time in 2 hours

Pull request review commentbitcoin/bitcoin

policy, wallet, refactor: check for non-representable CFeeRates

 BOOST_AUTO_TEST_CASE(GetFeeTest)     feeRate = CFeeRate(1000);     altFeeRate = CFeeRate(feeRate);     BOOST_CHECK_EQUAL(feeRate.GetFee(100), altFeeRate.GetFee(100));+    BOOST_CHECK(!altFeeRate.IsZero()); }  BOOST_AUTO_TEST_CASE(CFeeRateConstructorTest) {     // Test CFeeRate(CAmount fee_rate, size_t bytes) constructor     // full constructor+    BOOST_CHECK(CFeeRate(CAmount(0), 0).IsZero());

in b427ce178592283b9211b9fbd19874c7349bfd7e:

nit: I would have stuck these IsZero() tests in one place below since they are testing the function and not the ctor.

jonatack

comment created time in 2 hours

Pull request review commentbitcoin/bitcoin

policy, wallet, refactor: check for non-representable CFeeRates

 BOOST_AUTO_TEST_CASE(GetFeeTest)     CFeeRate(MAX_MONEY, std::numeric_limits<size_t>::max() >> 1).GetFeePerK(); } +BOOST_AUTO_TEST_CASE(CFeeRateNamedConstructorsTest)+{+    // Test CFeerate(CAmount fee_rate, FeeEstimatemode mode) constructor+    // with BTC/kvB, returns same values as CFeeRate(amount) or CFeeRate(amount, 1000)+    BOOST_CHECK(CFeeRate::FromBtcKb(CAmount(-1)) == CFeeRate(-1));+    BOOST_CHECK(CFeeRate::FromBtcKb(CAmount(-1)) == CFeeRate(-1, 1000));

in afba3e188fcb14236324a0d1355445a99b85d155:

Aren't we already testing somewhere that CFeeRate(-1) == CFeeRate(-1, 1000)? Then I think we could save one of those and some other similar lines following.

jonatack

comment created time in 2 hours

Pull request review commentbitcoin/bitcoin

policy, wallet, refactor: check for non-representable CFeeRates

 class CFeeRate     SERIALIZE_METHODS(CFeeRate, obj) { READWRITE(obj.nSatoshisPerK); } }; +/** Construct a CFeeRate from a CAmount in sat/vB */+inline CFeeRate CFeeRate::FromSatB(CAmount fee_rate) { return CFeeRate(fee_rate, COIN); }

in afba3e188fcb14236324a0d1355445a99b85d155:

Why not just have the body of the ctor in the class?

jonatack

comment created time in 3 hours

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def setup_network(self):         super().setup_network()      def run_test(self):+        if self.is_wallet_compiled():+            # Setup the descriptors to be imported to the wallet+            seed = "cTdGmKFWpbvpKQ7ejrdzqYT2hhjyb3GPHnLAK7wdi5Em67YLwSm9"+            xpriv = "tprv8ZgxMBicQKsPfHCsTwkiM1KT56RXbGGTqvc2hgqzycpwbHqqpcajQeMRZoBD35kW4RtyCemu6j34Ku5DEspmgjKdt2qe4SvRch5Kk8B8A2v"

Until we implement private descriptor export, that won't be possible.

achow101

comment created time in 2 hours

PR merged bitcoin/bitcoin

Reviewers
doc: Add developer documentation to isminetype Docs Wallet

Closes: https://github.com/bitcoin/bitcoin/issues/17217

+21 -1

16 comments

1 changed file

HAOYUatHZ

pr closed time in 2 hours

push eventbitcoin/bitcoin

HAOYUatHZ

commit sha 40f05647ee298f8419df795942248d9ded3beb43

doc: Add developer documentation to isminetype

view details

Samuel Dobson

commit sha 16ae3368f2a20cffa312b6ee9b724c1e302ca5fb

Merge #17350: doc: Add developer documentation to isminetype 40f05647ee298f8419df795942248d9ded3beb43 doc: Add developer documentation to isminetype (HAOYUatHZ) Pull request description: Closes: https://github.com/bitcoin/bitcoin/issues/17217 ACKs for top commit: meshcollider: utACK 40f05647ee298f8419df795942248d9ded3beb43 Tree-SHA512: 156ff3bc02613d65aed5fcf50250ec3f3365b6c83c810763673ecfdd081a1310e5235be05f0c782638f191be61ad0028511392c40e4106a56eb1c6a3a8ab73b9

view details

push time in 2 hours

push eventbitcoin/bitcoin

Bezdrighin

commit sha 8f0b64fb513e8c6cdd1f115856100a4ef5afe23e

Better error messages for invalid addresses This commit addresses #20809. We add an additional 'error' property in the result of 'validateaddress' in case the address is not valid that gives a short description of why the address in invalid. We also change the error message returned by 'getaddressinfo' in case the address is invalid.

view details

Samuel Dobson

commit sha 4b15ffe9913e5f1e4d7a7922ddd7ef83e5b091d3

Merge #20832: rpc: Better error messages for invalid addresses 8f0b64fb513e8c6cdd1f115856100a4ef5afe23e Better error messages for invalid addresses (Bezdrighin) Pull request description: This PR addresses #20809. We add more detailed error messages in case an invalid address is provided inside the 'validateaddress' and 'getaddressinfo' RPC calls. This also covers the case when a user provides an address from a wrong network. We also add a functional test to test the new error messages. ACKs for top commit: kristapsk: ACK 8f0b64fb513e8c6cdd1f115856100a4ef5afe23e meshcollider: Code review ACK 8f0b64fb513e8c6cdd1f115856100a4ef5afe23e Tree-SHA512: ca0f806ab573e96b79e98d9f8c810b81fa99c638d9b5e4d99dc18c8bd2568e6a802ec305fdfb2983574a97a19a46fd53b77645f8078fb77e9deb24ad2a22cf93

view details

push time in 2 hours

PR merged bitcoin/bitcoin

rpc: Better error messages for invalid addresses RPC/REST/ZMQ Utils/log/libs Wallet

This PR addresses #20809.

We add more detailed error messages in case an invalid address is provided inside the 'validateaddress' and 'getaddressinfo' RPC calls. This also covers the case when a user provides an address from a wrong network.

We also add a functional test to test the new error messages.

+141 -14

8 comments

7 changed files

eilx2

pr closed time in 2 hours

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def run_test(self):         self.nodes[1].assert_start_raises_init_error(extra_args=['-datadir={}'.format(self.nodes[0].datadir), '-noserver'], expected_msg=expected_msg)          if self.is_wallet_compiled():-            self.nodes[0].createwallet(self.default_wallet_name)-            wallet_dir = os.path.join(datadir, 'wallets')-            self.log.info("Check that we can't start a second bitcoind instance using the same wallet")-            expected_msg = "Error: Error initializing wallet database environment"-            self.nodes[1].assert_start_raises_init_error(extra_args=['-walletdir={}'.format(wallet_dir), '-wallet=' + self.default_wallet_name, '-noserver'], expected_msg=expected_msg, match=ErrorMatch.PARTIAL_REGEX)+            def check_wallet_filelock(descriptors):+                wallet_name = ''.join([random.choice(string.ascii_lowercase) for _ in range(6)])+                self.nodes[0].createwallet(wallet_name=wallet_name, descriptors=descriptors)+                wallet_dir = os.path.join(datadir, 'wallets')+                self.log.info("Check that we can't start a second bitcoind instance using the same wallet")+                if descriptors:+                    expected_msg = "Error: SQLiteDatabase: Unable to obtain an exclusive lock on the database, is it being used by another bitcoind?"+                else:+                    expected_msg = "Error: Error initializing wallet database environment"+                self.nodes[1].assert_start_raises_init_error(extra_args=['-walletdir={}'.format(wallet_dir), '-wallet=' + wallet_name, '-noserver'], expected_msg=expected_msg, match=ErrorMatch.PARTIAL_REGEX)++            if self.is_bdb_compiled():+                check_wallet_filelock(False)+            if self.is_sqlite_compiled():+                check_wallet_filelock(True)

#20892 runs such tests twice. It also seems like this should be one of those tests that the wallet portion is split into a separate test.

achow101

comment created time in 3 hours

Pull request review commentbitcoin/bitcoin

Disable and fix tests for when BDB is not compiled

 def skip_test_if_missing_module(self):         self.skip_if_no_sqlite()      def run_test(self):-        # Make a legacy wallet and check it is BDB-        self.nodes[0].createwallet(wallet_name="legacy1", descriptors=False)-        wallet_info = self.nodes[0].getwalletinfo()-        assert_equal(wallet_info['format'], 'bdb')-        self.nodes[0].unloadwallet("legacy1")+        if self.is_bdb_compiled():

I think that the optimal solution for these is to split them into separate tests for wallet and non-wallet components.

achow101

comment created time in 3 hours

issue commentbitcoin/bitcoin

Discussion: Potential USDTs (User Static Defined Traces) for Core

"Wladimir J. van der Laan" notifications@github.com writes:

@jlopp's statoshi diff could be helpful to look at too.

FWIW the statoshi diff can be found here: https://github.com/jlopp/statoshi/compare/1b90a7b61a37d450bbe5b485dcc9b8c591567e0d..28b88353a78ae19e3c5379bbda6b72f4fef65a8c

I was looking at this a long time ago. In theory you could get the same functionality as statoshi (stats gathering via prometheus) with https://github.com/cloudflare/ebpf_exporter

Would be an interesting project.

0xB10C

comment created time in 3 hours

pull request commentbitcoin/bitcoin

doc: tor.md and -onlynet help updates

ACK 2bfc81b141dc8d6ba8546a03fb35561d806ead63 Tested cookie authentication on Debian according to docs, all issues discussed here (https://github.com/bitcoin/bitcoin/pull/20757#issuecomment-757380937) fixed.

jonatack

comment created time in 4 hours

more