mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 18:09:47 +01:00
Introduce new V4 format addrman
92617b7a75
effectively changed the
on-disk format in an incompatible way: old deserializers cannot
deal with multiple entries for the same IP.
Introduce a V4_MULTIPORT format, and increment the compatibility base,
so that old versions correctly recognize it as an incompatible future
version.
This commit is contained in:
parent
22a9018649
commit
d891ae7681
@ -171,7 +171,7 @@ void AddrManImpl::Serialize(Stream& s_) const
|
|||||||
|
|
||||||
// Increment `lowest_compatible` iff a newly introduced format is incompatible with
|
// Increment `lowest_compatible` iff a newly introduced format is incompatible with
|
||||||
// the previous one.
|
// the previous one.
|
||||||
static constexpr uint8_t lowest_compatible = Format::V3_BIP155;
|
static constexpr uint8_t lowest_compatible = Format::V4_MULTIPORT;
|
||||||
s << static_cast<uint8_t>(INCOMPATIBILITY_BASE + lowest_compatible);
|
s << static_cast<uint8_t>(INCOMPATIBILITY_BASE + lowest_compatible);
|
||||||
|
|
||||||
s << nKey;
|
s << nKey;
|
||||||
|
@ -157,6 +157,7 @@ private:
|
|||||||
V1_DETERMINISTIC = 1, //!< for pre-asmap files
|
V1_DETERMINISTIC = 1, //!< for pre-asmap files
|
||||||
V2_ASMAP = 2, //!< for files including asmap version
|
V2_ASMAP = 2, //!< for files including asmap version
|
||||||
V3_BIP155 = 3, //!< same as V2_ASMAP plus addresses are in BIP155 format
|
V3_BIP155 = 3, //!< same as V2_ASMAP plus addresses are in BIP155 format
|
||||||
|
V4_MULTIPORT = 4, //!< adds support for multiple ports per IP
|
||||||
};
|
};
|
||||||
|
|
||||||
//! The maximum format this software knows it can unserialize. Also, we always serialize
|
//! The maximum format this software knows it can unserialize. Also, we always serialize
|
||||||
@ -164,7 +165,7 @@ private:
|
|||||||
//! The format (first byte in the serialized stream) can be higher than this and
|
//! The format (first byte in the serialized stream) can be higher than this and
|
||||||
//! still this software may be able to unserialize the file - if the second byte
|
//! still this software may be able to unserialize the file - if the second byte
|
||||||
//! (see `lowest_compatible` in `Unserialize()`) is less or equal to this.
|
//! (see `lowest_compatible` in `Unserialize()`) is less or equal to this.
|
||||||
static constexpr Format FILE_FORMAT = Format::V3_BIP155;
|
static constexpr Format FILE_FORMAT = Format::V4_MULTIPORT;
|
||||||
|
|
||||||
//! The initial value of a field that is incremented every time an incompatible format
|
//! The initial value of a field that is incremented every time an incompatible format
|
||||||
//! change is made (such that old software versions would not be able to parse and
|
//! change is made (such that old software versions would not be able to parse and
|
||||||
|
@ -18,7 +18,7 @@ from test_framework.util import assert_equal
|
|||||||
def serialize_addrman(
|
def serialize_addrman(
|
||||||
*,
|
*,
|
||||||
format=1,
|
format=1,
|
||||||
lowest_compatible=3,
|
lowest_compatible=4,
|
||||||
net_magic="regtest",
|
net_magic="regtest",
|
||||||
bucket_key=1,
|
bucket_key=1,
|
||||||
len_new=None,
|
len_new=None,
|
||||||
@ -75,7 +75,7 @@ class AddrmanTest(BitcoinTestFramework):
|
|||||||
expected_msg=init_error(
|
expected_msg=init_error(
|
||||||
"Unsupported format of addrman database: 1. It is compatible with "
|
"Unsupported format of addrman database: 1. It is compatible with "
|
||||||
"formats >=111, but the maximum supported by this version of "
|
"formats >=111, but the maximum supported by this version of "
|
||||||
f"{self.config['environment']['PACKAGE_NAME']} is 3.: (.+)"
|
f"{self.config['environment']['PACKAGE_NAME']} is 4.: (.+)"
|
||||||
),
|
),
|
||||||
match=ErrorMatch.FULL_REGEX,
|
match=ErrorMatch.FULL_REGEX,
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user