Page MenuHomePhabricator

Use serialization parameters for CAddress serialization
DraftPublic

Authored by PiRK on Fri, Dec 5, 12:20.
This is a draft revision that has not yet been submitted for review.

Details

Reviewers
None
Group Reviewers
Restricted Project
Summary

This also cleans up the addrman (de)serialization code paths to only
allow Disk serialization. Some unit tests previously forced a
Network serialization, which does not make sense, because Bitcoin Core
in production will always Disk serialize.
This cleanup idea was suggested by Pieter Wuille and implemented by Anthony
Towns.

Co-authored-by: Pieter Wuille <pieter@wuille.net>
Co-authored-by: Anthony Towns <aj@erisian.com.au>

This concludes backport of core#25284
https://github.com/bitcoin/bitcoin/pull/25284/commits/fac81affb527132945773a5315bd27fec61ec52f
Depends on D19056
fixme: missing backports?

Test Plan

ninja all check-all

Event Timeline

Tail of the build log:

                 from /work/src/./chainparams.h:9,
                 from /work/src/./seeder/bitcoin.h:8,
                 from /work/src/seeder/bitcoin.cpp:5:
/work/src/./netaddress.h: In instantiation of ‘void CNetAddr::Unserialize(Stream&) [with Stream = CDataStream]’:
/work/src/./serialize.h:963:18:   required from ‘void Unserialize(Stream&, T&&) [with Stream = CDataStream; T = CNetAddr&]’
/work/src/./serialize.h:1238:18:   required from ‘void UnserializeMany(Stream&, Arg&&, Args&& ...) [with Stream = CDataStream; Arg = CNetAddr&; Args = {Wrapper<CustomUintFormatter<2, true>, short unsigned int&>&}]’
/work/src/./serialize.h:1251:22:   required from ‘void SerReadWriteMany(Stream&, ActionUnserialize, Args&& ...) [with Stream = CDataStream; Args = {CNetAddr&, Wrapper<CustomUintFormatter<2, true>, short unsigned int&>}]’
/work/src/./netaddress.h:576:9:   required from ‘static void CService::SerializationOps(Type&, Stream&, Operation) [with Stream = CDataStream; Type = CService; Operation = ActionUnserialize]’
/work/src/./netaddress.h:575:5:   required from ‘static void CService::Unser(Stream&, CService&) [with Stream = CDataStream]’
/work/src/./netaddress.h:575:5:   required from ‘void CService::Unserialize(Stream&) [with Stream = CDataStream]’
/work/src/./serialize.h:963:18:   required from ‘void Unserialize(Stream&, T&&) [with Stream = CDataStream; T = CService&]’
/work/src/./streams.h:418:22:   required from ‘CDataStream& CDataStream::operator>>(T&&) [with T = CService&]’
/work/src/seeder/bitcoin.cpp:54:17:   required from here
/work/src/./netaddress.h:273:15: error: ‘class CDataStream’ has no member named ‘GetParams’
  273 |         if (s.GetParams().enc == Encoding::V2) {
      |             ~~^~~~~~~~~
In file included from /work/src/./netaddress.h:16:
/work/src/./protocol.h: In instantiation of ‘static void CAddress::Unser(Stream&, CAddress&) [with Stream = CDataStream]’:
/work/src/./protocol.h:503:5:   required from ‘void CAddress::Unserialize(Stream&) [with Stream = CDataStream]’
/work/src/./serialize.h:963:18:   required from ‘void Unserialize(Stream&, T&&) [with Stream = CDataStream; T = CAddress&]’
/work/src/./serialize.h:979:20:   required from ‘static void DefaultFormatter::Unser(Stream&, T&) [with Stream = CDataStream; T = CAddress]’
/work/src/./serialize.h:809:32:   required from ‘void VectorFormatter<Formatter>::Unser(Stream&, V&) [with Stream = CDataStream; V = std::vector<CAddress>; Formatter = DefaultFormatter]’
/work/src/./serialize.h:620:26:   required from ‘void Wrapper<Formatter, T>::Unserialize(Stream&) [with Stream = CDataStream; Formatter = VectorFormatter<DefaultFormatter>; T = std::vector<CAddress>&]’
/work/src/./serialize.h:963:18:   required from ‘void Unserialize(Stream&, T&&) [with Stream = CDataStream; T = Wrapper<VectorFormatter<DefaultFormatter>, std::vector<CAddress>&>]’
/work/src/./serialize.h:1075:20:   required from ‘void Unserialize(Stream&, std::vector<_ValT, _Allocator>&) [with Stream = CDataStream; T = CAddress; A = std::allocator<CAddress>]’
/work/src/./streams.h:418:22:   required from ‘CDataStream& CDataStream::operator>>(T&&) [with T = std::vector<CAddress>&]’
/work/src/seeder/bitcoin.cpp:100:17:   required from here
/work/src/./serialize.h:263:57: error: ‘class CDataStream’ has no member named ‘GetParams’
  263 |         SerializationOps(obj, s, ActionUnserialize{}, s.GetParams());          \
      |                                                       ~~^~~~~~~~~
/work/src/./serialize.h:300:5: note: in expansion of macro ‘FORMATTER_METHODS_PARAMS’
  300 |     FORMATTER_METHODS_PARAMS(cls, obj, paramcls, paramobj)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~
/work/src/./protocol.h:503:5: note: in expansion of macro ‘SERIALIZE_METHODS_PARAMS’
  503 |     SERIALIZE_METHODS_PARAMS(CAddress, obj, SerParams, params) {
      |     ^~~~~~~~~~~~~~~~~~~~~~~~
/work/src/./netaddress.h: In instantiation of ‘void CNetAddr::Serialize(Stream&) const [with Stream = CVectorWriter]’:
/work/src/./serialize.h:955:16:   required from ‘void Serialize(Stream&, const T&) [with Stream = CVectorWriter; T = CNetAddr]’
/work/src/./serialize.h:1230:16:   required from ‘void SerializeMany(Stream&, const Arg&, const Args& ...) [with Stream = CVectorWriter; Arg = CNetAddr; Args = {Wrapper<CustomUintFormatter<2, true>, const short unsigned int&>}]’
/work/src/./serialize.h:1245:20:   required from ‘void SerReadWriteMany(Stream&, ActionSerialize, const Args& ...) [with Stream = CVectorWriter; Args = {CNetAddr, Wrapper<CustomUintFormatter<2, true>, const short unsigned int&>}]’
/work/src/./netaddress.h:576:9:   required from ‘static void CService::SerializationOps(Type&, Stream&, Operation) [with Stream = CVectorWriter; Type = const CService; Operation = ActionSerialize]’
/work/src/./netaddress.h:575:5:   required from ‘static void CService::Ser(Stream&, const CService&) [with Stream = CVectorWriter]’
/work/src/./netaddress.h:575:5:   [ skipping 3 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/work/src/./serialize.h:1231:20:   recursively required from ‘void SerializeMany(Stream&, const Arg&, const Args& ...) [with Stream = CVectorWriter; Arg = long unsigned int; Args = {long int, long unsigned int, CService, long unsigned int, CService, long unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, unsigned char}]’
/work/src/./serialize.h:1231:20:   required from ‘void SerializeMany(Stream&, const Arg&, const Args& ...) [with Stream = CVectorWriter; Arg = int; Args = {long unsigned int, long int, long unsigned int, CService, long unsigned int, CService, long unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, unsigned char}]’
/work/src/./streams.h:89:24:   required from ‘CVectorWriter::CVectorWriter(int, int, std::vector<unsigned char>&, size_t, Args&& ...) [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; size_t = long unsigned int]’
/work/src/./netmessagemaker.h:23:9:   required from ‘CSerializedNetMsg CNetMsgMaker::Make(int, std::string, Args&& ...) const [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; std::string = std::__cxx11::basic_string<char>]’
/work/src/./netmessagemaker.h:30:20:   required from ‘CSerializedNetMsg CNetMsgMaker::Make(std::string, Args&& ...) const [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; std::string = std::__cxx11::basic_string<char>]’
/work/src/./seeder/messagewriter.h:18:42:   required from ‘void MessageWriter::WriteMessage(CDataStream&, std::string, Args&& ...) [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; std::string = std::__cxx11::basic_string<char>]’
/work/src/seeder/bitcoin.cpp:308:32:   required from here
/work/src/./netaddress.h:262:15: error: ‘class CVectorWriter’ has no member named ‘GetParams’
  262 |         if (s.GetParams().enc == Encoding::V2) {
      |             ~~^~~~~~~~~
[455/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[456/588] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[457/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[458/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[459/588] Linking CXX static library src/wallet/libwallet.a
ninja: build stopped: cannot make progress due to previous errors.
Build build-debug failed with exit code 1

Tail of the build log:

    a.Serialize(os);
      ^
/work/src/./serialize.h:1230:7: note: in instantiation of function template specialization 'Serialize<CVectorWriter, CNetAddr>' requested here
    ::Serialize(s, arg);
      ^
/work/src/./serialize.h:1245:7: note: in instantiation of function template specialization 'SerializeMany<CVectorWriter, CNetAddr, Wrapper<CustomUintFormatter<2, true>, const unsigned short &>>' requested here
    ::SerializeMany(s, args...);
      ^
/work/src/./netaddress.h:576:9: note: in instantiation of function template specialization 'SerReadWriteMany<CVectorWriter, CNetAddr, Wrapper<CustomUintFormatter<2, true>, const unsigned short &>>' requested here
        READWRITE(AsBase<CNetAddr>(obj),
        ^
/work/src/./serialize.h:189:27: note: expanded from macro 'READWRITE'
#define READWRITE(...) (::SerReadWriteMany(s, ser_action, __VA_ARGS__))
                          ^
/work/src/./netaddress.h:575:5: note: in instantiation of function template specialization 'CService::SerializationOps<CVectorWriter, const CService, ActionSerialize>' requested here
    SERIALIZE_METHODS(CService, obj) {
    ^
/work/src/./serialize.h:291:5: note: expanded from macro 'SERIALIZE_METHODS'
    FORMATTER_METHODS(cls, obj)
    ^
/work/src/./serialize.h:217:9: note: expanded from macro 'FORMATTER_METHODS'
        SerializationOps(obj, s, ActionSerialize());                           \
        ^
/work/src/./netaddress.h:575:5: note: (skipping 7 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
/work/src/./serialize.h:290:5: note: expanded from macro 'SERIALIZE_METHODS'
    BASE_SERIALIZE_METHODS(cls)                                                \
    ^
/work/src/./serialize.h:273:9: note: expanded from macro 'BASE_SERIALIZE_METHODS'
        Ser(s, *this);                                                         \
        ^
/work/src/./streams.h:89:11: note: in instantiation of function template specialization 'SerializeMany<CVectorWriter, int, unsigned long, long, unsigned long, CService, unsigned long, CService, unsigned long, std::basic_string<char>, int, unsigned char>' requested here
        ::SerializeMany(*this, std::forward<Args>(args)...);
          ^
/work/src/./netmessagemaker.h:23:9: note: in instantiation of function template specialization 'CVectorWriter::CVectorWriter<const int &, unsigned long &, long, unsigned long &, CService &, unsigned long &, CService, unsigned long &, const std::basic_string<char> &, int, unsigned char &>' requested here
        CVectorWriter{SER_NETWORK, nFlags | nVersion, msg.data, 0,
        ^
/work/src/./netmessagemaker.h:30:16: note: in instantiation of function template specialization 'CNetMsgMaker::Make<const int &, unsigned long &, long, unsigned long &, CService &, unsigned long &, CService, unsigned long &, const std::basic_string<char> &, int, unsigned char &>' requested here
        return Make(0, std::move(msg_type), std::forward<Args>(args)...);
               ^
/work/src/./seeder/messagewriter.h:18:38: note: in instantiation of function template specialization 'CNetMsgMaker::Make<const int &, unsigned long &, long, unsigned long &, CService &, unsigned long &, CService, unsigned long &, const std::basic_string<char> &, int, unsigned char &>' requested here
                                    .Make(command, std::forward<Args>(args)...);
                                     ^
/work/src/seeder/bitcoin.cpp:308:20: note: in instantiation of function template specialization 'MessageWriter::WriteMessage<const int &, unsigned long &, long, unsigned long &, CService &, unsigned long &, CService, unsigned long &, const std::basic_string<char> &, int, unsigned char &>' requested here
    MessageWriter::WriteMessage(vSend, NetMsgType::VERSION, PROTOCOL_VERSION,
                   ^
3 errors generated.
[448/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[449/588] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[450/588] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[451/588] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[452/588] Linking CXX executable src/iguana/iguana
[453/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[454/588] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[455/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[456/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[457/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[458/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[459/588] Linking CXX static library src/wallet/libwallet.a
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang failed with exit code 1

Tail of the build log:

/work/src/./streams.h:89:24:   required from ‘CVectorWriter::CVectorWriter(int, int, std::vector<unsigned char>&, size_t, Args&& ...) [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; size_t = long unsigned int]’
/work/src/./netmessagemaker.h:23:9:   required from ‘CSerializedNetMsg CNetMsgMaker::Make(int, std::string, Args&& ...) const [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; std::string = std::__cxx11::basic_string<char>]’
/work/src/./netmessagemaker.h:30:20:   required from ‘CSerializedNetMsg CNetMsgMaker::Make(std::string, Args&& ...) const [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; std::string = std::__cxx11::basic_string<char>]’
/work/src/./seeder/messagewriter.h:18:42:   required from ‘void MessageWriter::WriteMessage(CDataStream&, std::string, Args&& ...) [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; std::string = std::__cxx11::basic_string<char>]’
/work/src/seeder/bitcoin.cpp:308:32:   required from here
/work/src/./netaddress.h:262:15: error: ‘class CVectorWriter’ has no member named ‘GetParams’
  262 |         if (s.GetParams().enc == Encoding::V2) {
      |             ~~^~~~~~~~~
[448/588] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[449/588] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
FAILED: src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o 
/usr/bin/ccache /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_NO_CXX98_FUNCTION_BASE -DBUILD_BITCOIN_INTERNAL -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -DHAVE_CONSENSUS_LIB -DLEVELDB_ATOMIC_PRESENT -DLEVELDB_PLATFORM_POSIX -DOS_LINUX -I/work/src/. -I/work/abc-ci-builds/build-diff/src -I/work/src/univalue/include -I/work/abc-ci-builds/build-diff/src/crypto/.. -I/work/src/secp256k1/include -I/work/src/leveldb/include -isystem /usr/include/jemalloc -isystem /usr/include/miniupnpc -Werror -g -O2 -fPIE -fvisibility=hidden -fstack-reuse=none -fstack-protector-all -Wstack-protector -fcf-protection=full -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wredundant-decls -Wsign-compare -Wduplicated-branches -Wduplicated-cond -Wlogical-op -Wformat-security -Wredundant-move -Woverloaded-virtual -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-psabi -std=gnu++20 -MD -MT src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o -MF src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o.d -o src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o -c /work/src/seeder/main.cpp
In file included from /work/src/./kernel/chainparams.h:10,
                 from /work/src/./chainparams.h:9,
                 from /work/src/./dnsseeds.h:8,
                 from /work/src/seeder/main.cpp:7:
/work/src/./netaddress.h: In instantiation of ‘void CNetAddr::Serialize(Stream&) const [with Stream = CAutoFile]’:
/work/src/./serialize.h:955:16:   required from ‘void Serialize(Stream&, const T&) [with Stream = CAutoFile; T = CNetAddr]’
/work/src/./serialize.h:1230:16:   required from ‘void SerializeMany(Stream&, const Arg&, const Args& ...) [with Stream = CAutoFile; Arg = CNetAddr; Args = {Wrapper<CustomUintFormatter<2, true>, const short unsigned int&>}]’
/work/src/./serialize.h:1245:20:   required from ‘void SerReadWriteMany(Stream&, ActionSerialize, const Args& ...) [with Stream = CAutoFile; Args = {CNetAddr, Wrapper<CustomUintFormatter<2, true>, const short unsigned int&>}]’
/work/src/./netaddress.h:576:9:   required from ‘static void CService::SerializationOps(Type&, Stream&, Operation) [with Stream = CAutoFile; Type = const CService; Operation = ActionSerialize]’
/work/src/./netaddress.h:575:5:   required from ‘static void CService::Ser(Stream&, const CService&) [with Stream = CAutoFile]’
/work/src/./netaddress.h:575:5:   [ skipping 3 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/work/src/./serialize.h:1101:18:   required from ‘void Serialize(Stream&, const std::map<K, T, Pred, A>&) [with Stream = CAutoFile; K = CService; T = long int; Pred = std::less<CService>; A = std::allocator<std::pair<const CService, long int> >]’
/work/src/./streams.h:603:20:   required from ‘CAutoFile& CAutoFile::operator<<(const T&) [with T = std::map<CService, long int>]’
/work/src/./seeder/db.h:384:11:   required from ‘void CAddrDb::Serialize(Stream&) const [with Stream = CAutoFile]’
/work/src/./serialize.h:955:16:   required from ‘void Serialize(Stream&, const T&) [with Stream = CAutoFile; T = CAddrDb]’
/work/src/./streams.h:603:20:   required from ‘CAutoFile& CAutoFile::operator<<(const T&) [with T = CAddrDb]’
/work/src/seeder/main.cpp:256:27:   required from here
/work/src/./netaddress.h:262:15: error: ‘class CAutoFile’ has no member named ‘GetParams’
  262 |         if (s.GetParams().enc == Encoding::V2) {
      |             ~~^~~~~~~~~
/work/src/./netaddress.h: In instantiation of ‘void CNetAddr::Unserialize(Stream&) [with Stream = CAutoFile]’:
/work/src/./serialize.h:963:18:   required from ‘void Unserialize(Stream&, T&&) [with Stream = CAutoFile; T = CNetAddr&]’
/work/src/./serialize.h:1238:18:   required from ‘void UnserializeMany(Stream&, Arg&&, Args&& ...) [with Stream = CAutoFile; Arg = CNetAddr&; Args = {Wrapper<CustomUintFormatter<2, true>, short unsigned int&>&}]’
/work/src/./serialize.h:1251:22:   required from ‘void SerReadWriteMany(Stream&, ActionUnserialize, Args&& ...) [with Stream = CAutoFile; Args = {CNetAddr&, Wrapper<CustomUintFormatter<2, true>, short unsigned int&>}]’
/work/src/./netaddress.h:576:9:   required from ‘static void CService::SerializationOps(Type&, Stream&, Operation) [with Stream = CAutoFile; Type = CService; Operation = ActionUnserialize]’
/work/src/./netaddress.h:575:5:   required from ‘static void CService::Unser(Stream&, CService&) [with Stream = CAutoFile]’
/work/src/./netaddress.h:575:5:   [ skipping 3 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/work/src/./serialize.h:1112:20:   required from ‘void Unserialize(Stream&, std::map<K, T, Pred, A>&) [with Stream = CAutoFile; K = CService; T = long int; Pred = std::less<CService>; A = std::allocator<std::pair<const CService, long int> >]’
/work/src/./streams.h:608:22:   required from ‘CAutoFile& CAutoFile::operator>>(T&&) [with T = std::map<CService, long int>&]’
/work/src/./seeder/db.h:415:11:   required from ‘void CAddrDb::Unserialize(Stream&) [with Stream = CAutoFile]’
/work/src/./serialize.h:963:18:   required from ‘void Unserialize(Stream&, T&&) [with Stream = CAutoFile; T = CAddrDb&]’
/work/src/./streams.h:608:22:   required from ‘CAutoFile& CAutoFile::operator>>(T&&) [with T = CAddrDb&]’
/work/src/seeder/main.cpp:412:15:   required from here
/work/src/./netaddress.h:273:15: error: ‘class CAutoFile’ has no member named ‘GetParams’
  273 |         if (s.GetParams().enc == Encoding::V2) {
      |             ~~^~~~~~~~~
[450/588] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[451/588] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[452/588] Linking CXX executable src/iguana/iguana
[453/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[454/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[455/588] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[456/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[457/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[458/588] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[459/588] Linking CXX static library src/wallet/libwallet.a
ninja: build stopped: cannot make progress due to previous errors.
Build build-diff failed with exit code 1

Tail of the build log:

In file included from /work/src/./kernel/chainparams.h:10,
                 from /work/src/./chainparams.h:9,
                 from /work/src/./seeder/bitcoin.h:8,
                 from /work/src/seeder/bitcoin.cpp:5:
/work/src/./netaddress.h: In instantiation of ‘void CNetAddr::Unserialize(Stream&) [with Stream = CDataStream]’:
/work/src/./serialize.h:963:18:   required from ‘void Unserialize(Stream&, T&&) [with Stream = CDataStream; T = CNetAddr&]’
/work/src/./serialize.h:1238:18:   required from ‘void UnserializeMany(Stream&, Arg&&, Args&& ...) [with Stream = CDataStream; Arg = CNetAddr&; Args = {Wrapper<CustomUintFormatter<2, true>, short unsigned int&>&}]’
/work/src/./serialize.h:1251:22:   required from ‘void SerReadWriteMany(Stream&, ActionUnserialize, Args&& ...) [with Stream = CDataStream; Args = {CNetAddr&, Wrapper<CustomUintFormatter<2, true>, short unsigned int&>}]’
/work/src/./netaddress.h:576:9:   required from ‘static void CService::SerializationOps(Type&, Stream&, Operation) [with Stream = CDataStream; Type = CService; Operation = ActionUnserialize]’
/work/src/./netaddress.h:575:5:   required from ‘static void CService::Unser(Stream&, CService&) [with Stream = CDataStream]’
/work/src/./netaddress.h:575:5:   required from ‘void CService::Unserialize(Stream&) [with Stream = CDataStream]’
/work/src/./serialize.h:963:18:   required from ‘void Unserialize(Stream&, T&&) [with Stream = CDataStream; T = CService&]’
/work/src/./streams.h:418:22:   required from ‘CDataStream& CDataStream::operator>>(T&&) [with T = CService&]’
/work/src/seeder/bitcoin.cpp:54:17:   required from here
/work/src/./netaddress.h:273:15: error: ‘class CDataStream’ has no member named ‘GetParams’
  273 |         if (s.GetParams().enc == Encoding::V2) {
      |             ~~^~~~~~~~~
In file included from /work/src/./netaddress.h:16:
/work/src/./protocol.h: In instantiation of ‘static void CAddress::Unser(Stream&, CAddress&) [with Stream = CDataStream]’:
/work/src/./protocol.h:503:5:   required from ‘void CAddress::Unserialize(Stream&) [with Stream = CDataStream]’
/work/src/./serialize.h:963:18:   required from ‘void Unserialize(Stream&, T&&) [with Stream = CDataStream; T = CAddress&]’
/work/src/./serialize.h:979:20:   required from ‘static void DefaultFormatter::Unser(Stream&, T&) [with Stream = CDataStream; T = CAddress]’
/work/src/./serialize.h:809:32:   required from ‘void VectorFormatter<Formatter>::Unser(Stream&, V&) [with Stream = CDataStream; V = std::vector<CAddress>; Formatter = DefaultFormatter]’
/work/src/./serialize.h:620:26:   required from ‘void Wrapper<Formatter, T>::Unserialize(Stream&) [with Stream = CDataStream; Formatter = VectorFormatter<DefaultFormatter>; T = std::vector<CAddress>&]’
/work/src/./serialize.h:963:18:   required from ‘void Unserialize(Stream&, T&&) [with Stream = CDataStream; T = Wrapper<VectorFormatter<DefaultFormatter>, std::vector<CAddress>&>]’
/work/src/./serialize.h:1075:20:   required from ‘void Unserialize(Stream&, std::vector<_ValT, _Allocator>&) [with Stream = CDataStream; T = CAddress; A = std::allocator<CAddress>]’
/work/src/./streams.h:418:22:   required from ‘CDataStream& CDataStream::operator>>(T&&) [with T = std::vector<CAddress>&]’
/work/src/seeder/bitcoin.cpp:100:17:   required from here
/work/src/./serialize.h:263:57: error: ‘class CDataStream’ has no member named ‘GetParams’
  263 |         SerializationOps(obj, s, ActionUnserialize{}, s.GetParams());          \
      |                                                       ~~^~~~~~~~~
/work/src/./serialize.h:300:5: note: in expansion of macro ‘FORMATTER_METHODS_PARAMS’
  300 |     FORMATTER_METHODS_PARAMS(cls, obj, paramcls, paramobj)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~
/work/src/./protocol.h:503:5: note: in expansion of macro ‘SERIALIZE_METHODS_PARAMS’
  503 |     SERIALIZE_METHODS_PARAMS(CAddress, obj, SerParams, params) {
      |     ^~~~~~~~~~~~~~~~~~~~~~~~
/work/src/./netaddress.h: In instantiation of ‘void CNetAddr::Serialize(Stream&) const [with Stream = CVectorWriter]’:
/work/src/./serialize.h:955:16:   required from ‘void Serialize(Stream&, const T&) [with Stream = CVectorWriter; T = CNetAddr]’
/work/src/./serialize.h:1230:16:   required from ‘void SerializeMany(Stream&, const Arg&, const Args& ...) [with Stream = CVectorWriter; Arg = CNetAddr; Args = {Wrapper<CustomUintFormatter<2, true>, const short unsigned int&>}]’
/work/src/./serialize.h:1245:20:   required from ‘void SerReadWriteMany(Stream&, ActionSerialize, const Args& ...) [with Stream = CVectorWriter; Args = {CNetAddr, Wrapper<CustomUintFormatter<2, true>, const short unsigned int&>}]’
/work/src/./netaddress.h:576:9:   required from ‘static void CService::SerializationOps(Type&, Stream&, Operation) [with Stream = CVectorWriter; Type = const CService; Operation = ActionSerialize]’
/work/src/./netaddress.h:575:5:   required from ‘static void CService::Ser(Stream&, const CService&) [with Stream = CVectorWriter]’
/work/src/./netaddress.h:575:5:   [ skipping 3 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/work/src/./serialize.h:1231:20:   recursively required from ‘void SerializeMany(Stream&, const Arg&, const Args& ...) [with Stream = CVectorWriter; Arg = long unsigned int; Args = {long int, long unsigned int, CService, long unsigned int, CService, long unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, unsigned char}]’
/work/src/./serialize.h:1231:20:   required from ‘void SerializeMany(Stream&, const Arg&, const Args& ...) [with Stream = CVectorWriter; Arg = int; Args = {long unsigned int, long int, long unsigned int, CService, long unsigned int, CService, long unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, unsigned char}]’
/work/src/./streams.h:89:24:   required from ‘CVectorWriter::CVectorWriter(int, int, std::vector<unsigned char>&, size_t, Args&& ...) [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; size_t = long unsigned int]’
/work/src/./netmessagemaker.h:23:9:   required from ‘CSerializedNetMsg CNetMsgMaker::Make(int, std::string, Args&& ...) const [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; std::string = std::__cxx11::basic_string<char>]’
/work/src/./netmessagemaker.h:30:20:   required from ‘CSerializedNetMsg CNetMsgMaker::Make(std::string, Args&& ...) const [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; std::string = std::__cxx11::basic_string<char>]’
/work/src/./seeder/messagewriter.h:18:42:   required from ‘void MessageWriter::WriteMessage(CDataStream&, std::string, Args&& ...) [with Args = {const int&, long unsigned int&, long int, long unsigned int&, CService&, long unsigned int&, CService, long unsigned int&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, unsigned char&}; std::string = std::__cxx11::basic_string<char>]’
/work/src/seeder/bitcoin.cpp:308:32:   required from here
/work/src/./netaddress.h:262:15: error: ‘class CVectorWriter’ has no member named ‘GetParams’
  262 |         if (s.GetParams().enc == Encoding::V2) {
      |             ~~^~~~~~~~~
[567/668] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[568/668] Linking CXX executable src/iguana/iguana
[569/668] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[570/668] Building CXX object src/CMakeFiles/bitcoinkernel.dir/validation.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-without-wallet failed with exit code 1

Tail of the build log:

FAILED: src/test/fuzz/CMakeFiles/fuzz.dir/socks5.cpp.o 
/usr/bin/ccache /usr/bin/clang++ -DBOOST_ALL_NO_LIB -DBOOST_NO_CXX98_FUNCTION_BASE -DBUILD_BITCOIN_INTERNAL -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -DHAVE_CONSENSUS_LIB -DLEVELDB_ATOMIC_PRESENT -DLEVELDB_PLATFORM_POSIX -DOS_LINUX -I/work/src/. -I/work/abc-ci-builds/build-fuzzer/src -I/work/src/univalue/include -I/work/abc-ci-builds/build-fuzzer/src/crypto/.. -I/work/src/secp256k1/include -I/work/src/leveldb/include -isystem /usr/include/miniupnpc -Werror -g -O2 -fPIE -fvisibility=hidden -fsanitize=fuzzer -fstack-protector-all -Wstack-protector -fcf-protection=full -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wgnu -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wthread-safety -Wrange-loop-analysis -Wredundant-decls -Wunreachable-code-loop-increment -Wsign-compare -Wconditional-uninitialized -Wdocumentation -Wformat-security -Wredundant-move -Woverloaded-virtual -Wshadow -Wshadow-field -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-psabi -std=gnu++20 -MD -MT src/test/fuzz/CMakeFiles/fuzz.dir/socks5.cpp.o -MF src/test/fuzz/CMakeFiles/fuzz.dir/socks5.cpp.o.d -o src/test/fuzz/CMakeFiles/fuzz.dir/socks5.cpp.o -c /work/src/test/fuzz/socks5.cpp
In file included from /work/src/test/fuzz/socks5.cpp:8:
/work/src/./test/fuzz/util.h:134:9: error: no matching function for call to 'ConsumeRandomLengthByteVector'
        ConsumeRandomLengthByteVector(fuzzed_data_provider, max_length)};
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/work/src/./test/fuzz/util.h:81:1: note: candidate function template not viable: no known conversion from 'const std::optional<size_t>' (aka 'const optional<unsigned long>') to 'const size_t' (aka 'const unsigned long') for 2nd argument
ConsumeRandomLengthByteVector(FuzzedDataProvider &fuzzed_data_provider,
^
1 error generated.
[404/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[405/433] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/util.cpp.o
FAILED: src/test/fuzz/CMakeFiles/fuzz.dir/util.cpp.o 
/usr/bin/ccache /usr/bin/clang++ -DBOOST_ALL_NO_LIB -DBOOST_NO_CXX98_FUNCTION_BASE -DBUILD_BITCOIN_INTERNAL -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -DHAVE_CONSENSUS_LIB -DLEVELDB_ATOMIC_PRESENT -DLEVELDB_PLATFORM_POSIX -DOS_LINUX -I/work/src/. -I/work/abc-ci-builds/build-fuzzer/src -I/work/src/univalue/include -I/work/abc-ci-builds/build-fuzzer/src/crypto/.. -I/work/src/secp256k1/include -I/work/src/leveldb/include -isystem /usr/include/miniupnpc -Werror -g -O2 -fPIE -fvisibility=hidden -fsanitize=fuzzer -fstack-protector-all -Wstack-protector -fcf-protection=full -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wgnu -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wthread-safety -Wrange-loop-analysis -Wredundant-decls -Wunreachable-code-loop-increment -Wsign-compare -Wconditional-uninitialized -Wdocumentation -Wformat-security -Wredundant-move -Woverloaded-virtual -Wshadow -Wshadow-field -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-psabi -std=gnu++20 -MD -MT src/test/fuzz/CMakeFiles/fuzz.dir/util.cpp.o -MF src/test/fuzz/CMakeFiles/fuzz.dir/util.cpp.o.d -o src/test/fuzz/CMakeFiles/fuzz.dir/util.cpp.o -c /work/src/test/fuzz/util.cpp
In file included from /work/src/test/fuzz/util.cpp:5:
/work/src/./test/fuzz/util.h:134:9: error: no matching function for call to 'ConsumeRandomLengthByteVector'
        ConsumeRandomLengthByteVector(fuzzed_data_provider, max_length)};
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/work/src/./test/fuzz/util.h:81:1: note: candidate function template not viable: no known conversion from 'const std::optional<size_t>' (aka 'const optional<unsigned long>') to 'const size_t' (aka 'const unsigned long') for 2nd argument
ConsumeRandomLengthByteVector(FuzzedDataProvider &fuzzed_data_provider,
^
1 error generated.
[406/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[407/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[408/433] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/transaction.cpp.o
[409/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[410/433] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/txrequest.cpp.o
[411/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[412/433] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/validation_load_mempool.cpp.o
FAILED: src/test/fuzz/CMakeFiles/fuzz.dir/validation_load_mempool.cpp.o 
/usr/bin/ccache /usr/bin/clang++ -DBOOST_ALL_NO_LIB -DBOOST_NO_CXX98_FUNCTION_BASE -DBUILD_BITCOIN_INTERNAL -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -DHAVE_CONSENSUS_LIB -DLEVELDB_ATOMIC_PRESENT -DLEVELDB_PLATFORM_POSIX -DOS_LINUX -I/work/src/. -I/work/abc-ci-builds/build-fuzzer/src -I/work/src/univalue/include -I/work/abc-ci-builds/build-fuzzer/src/crypto/.. -I/work/src/secp256k1/include -I/work/src/leveldb/include -isystem /usr/include/miniupnpc -Werror -g -O2 -fPIE -fvisibility=hidden -fsanitize=fuzzer -fstack-protector-all -Wstack-protector -fcf-protection=full -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wgnu -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wthread-safety -Wrange-loop-analysis -Wredundant-decls -Wunreachable-code-loop-increment -Wsign-compare -Wconditional-uninitialized -Wdocumentation -Wformat-security -Wredundant-move -Woverloaded-virtual -Wshadow -Wshadow-field -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-psabi -std=gnu++20 -MD -MT src/test/fuzz/CMakeFiles/fuzz.dir/validation_load_mempool.cpp.o -MF src/test/fuzz/CMakeFiles/fuzz.dir/validation_load_mempool.cpp.o.d -o src/test/fuzz/CMakeFiles/fuzz.dir/validation_load_mempool.cpp.o -c /work/src/test/fuzz/validation_load_mempool.cpp
In file included from /work/src/test/fuzz/validation_load_mempool.cpp:12:
/work/src/./test/fuzz/util.h:134:9: error: no matching function for call to 'ConsumeRandomLengthByteVector'
        ConsumeRandomLengthByteVector(fuzzed_data_provider, max_length)};
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/work/src/./test/fuzz/util.h:81:1: note: candidate function template not viable: no known conversion from 'const std::optional<size_t>' (aka 'const optional<unsigned long>') to 'const size_t' (aka 'const unsigned long') for 2nd argument
ConsumeRandomLengthByteVector(FuzzedDataProvider &fuzzed_data_provider,
^
1 error generated.
[413/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[414/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[415/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[416/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[417/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[418/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[419/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[420/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[421/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[422/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[423/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[424/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[425/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[426/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[427/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[428/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[429/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[430/433] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[431/433] Linking CXX static library src/wallet/libwallet.a
ninja: build stopped: cannot make progress due to previous errors.
Build build-fuzzer failed with exit code 1

Tail of the build log:

             ^
/work/src/./protocol.h:503:5: error: no member named 'GetParams' in 'CDataStream' [clang-diagnostic-error]
    SERIALIZE_METHODS_PARAMS(CAddress, obj, SerParams, params) {
    ^
/work/src/./serialize.h:300:5: note: expanded from macro 'SERIALIZE_METHODS_PARAMS'
    FORMATTER_METHODS_PARAMS(cls, obj, paramcls, paramobj)
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/work/src/./serialize.h:263:57: note: expanded from macro 'FORMATTER_METHODS_PARAMS'
        SerializationOps(obj, s, ActionUnserialize{}, s.GetParams());          \
                                                      ~ ^
/work/src/./protocol.h:503:5: note: in instantiation of function template specialization 'CAddress::Unser<CDataStream>' requested here
    SERIALIZE_METHODS_PARAMS(CAddress, obj, SerParams, params) {
    ^
/work/src/./serialize.h:299:5: note: expanded from macro 'SERIALIZE_METHODS_PARAMS'
    BASE_SERIALIZE_METHODS(cls)                                                \
    ^
/work/src/./serialize.h:278:9: note: expanded from macro 'BASE_SERIALIZE_METHODS'
        Unser(s, *this);                                                       \
        ^
/work/src/./serialize.h:963:7: note: in instantiation of function template specialization 'CAddress::Unserialize<CDataStream>' requested here
    a.Unserialize(is);
      ^
/work/src/./serialize.h:979:9: note: in instantiation of function template specialization 'Unserialize<CDataStream, CAddress &>' requested here
        Unserialize(s, t);
        ^
/work/src/./serialize.h:809:27: note: in instantiation of function template specialization 'DefaultFormatter::Unser<CDataStream, CAddress>' requested here
                formatter.Unser(s, v.back());
                          ^
/work/src/./serialize.h:620:21: note: in instantiation of function template specialization 'VectorFormatter<DefaultFormatter>::Unser<CDataStream, std::vector<CAddress>>' requested here
        Formatter().Unser(s, m_object);
                    ^
/work/src/./serialize.h:963:7: note: in instantiation of function template specialization 'Wrapper<VectorFormatter<DefaultFormatter>, std::vector<CAddress> &>::Unserialize<CDataStream>' requested here
    a.Unserialize(is);
      ^
/work/src/./serialize.h:1075:9: note: in instantiation of function template specialization 'Unserialize<CDataStream, Wrapper<VectorFormatter<DefaultFormatter>, std::vector<CAddress> &>>' requested here
        Unserialize(is, Using<VectorFormatter<DefaultFormatter>>(v));
        ^
/work/src/./streams.h:418:11: note: in instantiation of function template specialization 'Unserialize<CDataStream, CAddress, std::allocator<CAddress>>' requested here
        ::Unserialize(*this, obj);
          ^
/work/src/seeder/bitcoin.cpp:100:14: note: in instantiation of function template specialization 'CDataStream::operator>><std::vector<CAddress> &>' requested here
        recv >> vAddrNew;
             ^
2904 warnings and 3 errors generated.
Error while processing /work/src/seeder/bitcoin.cpp.
Suppressed 2904 warnings (2904 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
Found compiler error(s).
[461/598] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[462/598] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[463/598] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[464/598] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[465/598] Linking CXX executable src/iguana/iguana
[466/598] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[467/598] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[468/598] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[469/598] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[470/598] Linking CXX static library src/wallet/libwallet.a
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang-tidy failed with exit code 1