I'm trying the following setup with bitcoind 0.20.1 (in regtest currently, let me know if that behaves differently from testnet/mainnet):
+------------+
connect | Node2 | addnode
Node1 ------------->| blocksonly |<---------------- Node3
| forcerelay |---------------->
+------------+ addnode
- Node1 uses
connectto Node2 - Node2 is a
blocksonlynode, but it whitelists nodes 1 and 3 forforcerelay(whitelist=noban,relay,forcerelay,mempool@<IPs>) - Node3 is connected to the public network, and uses
addnodeto Node2
My expectation from the test added in #18530 was that when Node3 receives a transaction from the network, it would relay it to Node2, which would in turn relay it to Node1 (thanks to the whitelist). When testing that E2E on regtest though it doesn't work: the transaction appears in Node3's mempool, but not in Node1 and Node2's mempools.
bitcoin-cli getpeerinfo on Node3 has relaytxes: false for the connections to Node2, which is the likely culprit. The permissions field sets forcerelay and relay, but I'm likely missing a different configuration to force tx-relay. Can someone please point me in the right direction? @MarcoFalke