diff --git a/src/net_permissions.h b/src/net_permissions.h --- a/src/net_permissions.h +++ b/src/net_permissions.h @@ -35,6 +35,8 @@ // Can request addrs without hitting a privacy-preserving cache, and send us // unlimited amounts of addrs. PF_ADDR = (1U << 7), + // Can send compact proofs via avaproofs messages without being requested + PF_CMPCTPROOFS = (1U << 29), // Bypass the limit on how many proof INVs are tracked from this peer as // well as the delay penalty when reaching the the in-flight requests limit PF_BYPASS_PROOF_REQUEST_LIMITS = (1U << 30), @@ -42,7 +44,8 @@ // True if the user did not specifically set fine grained permissions PF_ISIMPLICIT = (1U << 31), PF_ALL = PF_BLOOMFILTER | PF_FORCERELAY | PF_RELAY | PF_NOBAN | PF_MEMPOOL | - PF_DOWNLOAD | PF_BYPASS_PROOF_REQUEST_LIMITS | PF_ADDR, + PF_DOWNLOAD | PF_ADDR | PF_CMPCTPROOFS | + PF_BYPASS_PROOF_REQUEST_LIMITS, }; class NetPermissions { diff --git a/src/net_permissions.cpp b/src/net_permissions.cpp --- a/src/net_permissions.cpp +++ b/src/net_permissions.cpp @@ -19,6 +19,7 @@ "mempool (allow requesting BIP35 mempool contents)", "download (allow getheaders during IBD, no disconnect after " "maxuploadtarget limit)", + "cmpctproofs (experimental, allow unrequested avaproofs messages)", "bypass_proof_request_limits (experimental, bypass the limits on avalanche " "proof downloads)", "addr (responses to GETADDR avoid hitting the cache and contain random " @@ -74,6 +75,8 @@ NetPermissions::AddFlag(flags, PF_RELAY); } else if (permission == "addr") { NetPermissions::AddFlag(flags, PF_ADDR); + } else if (permission == "cmpctproofs") { + NetPermissions::AddFlag(flags, PF_CMPCTPROOFS); } else if (permission == "bypass_proof_request_limits") { NetPermissions::AddFlag(flags, PF_BYPASS_PROOF_REQUEST_LIMITS); } else if (permission.length() == 0) { @@ -117,6 +120,9 @@ if (NetPermissions::HasFlag(flags, PF_ADDR)) { strings.push_back("addr"); } + if (NetPermissions::HasFlag(flags, PF_CMPCTPROOFS)) { + strings.push_back("cmpctproofs"); + } if (NetPermissions::HasFlag(flags, PF_BYPASS_PROOF_REQUEST_LIMITS)) { strings.push_back("bypass_proof_request_limits"); } diff --git a/src/test/netbase_tests.cpp b/src/test/netbase_tests.cpp --- a/src/test/netbase_tests.cpp +++ b/src/test/netbase_tests.cpp @@ -480,11 +480,12 @@ whitelistPermissions, error)); BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, PF_NOBAN); BOOST_CHECK(NetWhitelistPermissions::TryParse( - "bloom,forcerelay,noban,relay,bypass_proof_request_limits@1.2.3.4/32", + "bloom,forcerelay,noban,relay,cmpctproofs,bypass_proof_request_limits@" + "1.2.3.4/32", whitelistPermissions, error)); BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, PF_BLOOMFILTER | PF_FORCERELAY | PF_NOBAN | PF_RELAY | - PF_BYPASS_PROOF_REQUEST_LIMITS); + PF_CMPCTPROOFS | PF_BYPASS_PROOF_REQUEST_LIMITS); BOOST_CHECK(error.empty()); BOOST_CHECK_EQUAL(whitelistPermissions.m_subnet.ToString(), "1.2.3.4/32"); BOOST_CHECK(NetWhitelistPermissions::TryParse( @@ -492,7 +493,7 @@ error)); const auto strings = NetPermissions::ToStrings(PF_ALL); - BOOST_CHECK_EQUAL(strings.size(), 8U); + BOOST_CHECK_EQUAL(strings.size(), 9U); BOOST_CHECK(std::find(strings.begin(), strings.end(), "bloomfilter") != strings.end()); BOOST_CHECK(std::find(strings.begin(), strings.end(), "forcerelay") != @@ -507,6 +508,8 @@ strings.end()); BOOST_CHECK(std::find(strings.begin(), strings.end(), "addr") != strings.end()); + BOOST_CHECK(std::find(strings.begin(), strings.end(), "cmpctproofs") != + strings.end()); BOOST_CHECK(std::find(strings.begin(), strings.end(), "bypass_proof_request_limits") != strings.end()); } diff --git a/test/functional/p2p_permissions.py b/test/functional/p2p_permissions.py --- a/test/functional/p2p_permissions.py +++ b/test/functional/p2p_permissions.py @@ -111,7 +111,13 @@ # all permission added ["-whitelist=all@127.0.0.1"], ["forcerelay", "noban", "mempool", "bloomfilter", - "relay", "download", "bypass_proof_request_limits", "addr"], + "relay", "download", "addr", "cmpctproofs", "bypass_proof_request_limits"], + False) + + self.checkpermission( + # cmpctproofs permission + ["-whitelist=cmpctproofs@127.0.0.1"], + ["cmpctproofs"], False) self.checkpermission(