Commit graph

157 commits

Author SHA1 Message Date
Andrew Poelstra
3bef51bb0d Merge 7b45c5e875 into merged_master (Bitcoin PR bitcoin/bitcoin#20516) 2021-07-27 04:38:45 +00:00
Andrew Poelstra
e8f85e9062 Merge b34bf2b42c into merged_master (Bitcoin PR bitcoin/bitcoin#21939) 2021-07-10 05:28:53 +00:00
Andrew Poelstra
a7702d6ab5 Merge 6b49d88a5d into merged_master (Bitcoin PR bitcoin/bitcoin#21905) 2021-07-09 18:45:07 +00:00
Andrew Poelstra
27930edc9c Merge 4a540683ec into merged_master (Bitcoin PR #20813) 2021-06-16 14:11:07 +00:00
Andrew Poelstra
a9503e8d53 Merge 42ed7f51fa into merged_master (Bitcoin PR #20606) 2021-06-13 17:11:52 +00:00
Pieter Wuille
f8866e8c32 Add roundtrip fuzz tests for CAddress serialization 2021-05-24 18:06:35 -07:00
Pieter Wuille
8cd8f37dfe Introduce well-defined CAddress disk serialization
Before this commit, CAddress disk serialization was messy. It stored
CLIENT_VERSION in the first 4 bytes, optionally OR'ed with ADDRV2_FORMAT.
 - All bits except ADDRV2_FORMAT were ignored, making it hard to use for actual
   future format changes.
 - ADDRV2_FORMAT determines whether or not nServices is serialized in LE64
   format or in CompactSize format.
 - Whether or not the embedded CService is serialized in V1 or V2 format is
   determined by the stream's version having ADDRV2_FORMAT (as opposed to the
   nServices encoding, which is determined by the disk version).

To improve the situation, this commit introduces the following disk
serialization format, compatible with earlier versions, but better defined for
future changes:
 - The first 4 bytes store a format version number. Its low 19 bits are ignored
   (as it historically stored the CLIENT_VERSION), but its high 13 bits specify
   the serialization exactly:
   - 0x00000000: LE64 encoding for nServices, V1 encoding for CService
   - 0x20000000: CompactSize encoding for nServices, V2 encoding for CService
   - Any other value triggers an unsupported format error on deserialization,
     and can be used for future format changes.
 - The ADDRV2_FORMAT flag in the stream's version does not impact the actual
   serialization format; it only determines whether V2 encoding is permitted;
   whether it's actually enabled depends solely on the disk version number.

Operationally the changes to the deserializer are:
 - Failure when the stored format version number is unexpected.
 - The embedded CService's format is determined by the stored format version
   number rather than the stream's version number.

These do no introduce incompatibilities, as no code versions exist that write
any value other than 0 or 0x20000000 in the top 13 bits, and no code paths
where the stream's version differs from the stored version.
2021-05-24 18:06:31 -07:00
João Barbosa
1c9255c7dd refactor: Replace memset calls with array initialization 2021-05-13 12:42:21 +01:00
eugene
9c891b64ff net: initialize nMessageSize to max uint32_t instead of -1
nMessageSize is uint32_t and is set to -1. This will warn with
-fsanitize=implicit-integer-sign-change.
2021-05-11 11:21:29 -04:00
MarcoFalke
fa0074e2d8
scripted-diff: Bump copyright headers
-BEGIN VERIFY SCRIPT-
./contrib/devtools/copyright_header.py update ./
-END VERIFY SCRIPT-
2020-12-31 09:45:41 +01:00
MarcoFalke
fa40168ab3
Remove unused bits from service flags enum 2020-12-08 18:36:51 +01:00
Andrew Poelstra
4cb66aae97 Merge 0b2abaa666 into merged_master (Bitcoin PR #19954) 2020-11-30 17:12:23 +00:00
Andrew Poelstra
7c68cb4fb0 Merge 6af9b31bfc into merged_master (Bitcoin PR #19107) 2020-11-29 23:52:21 +00:00
Andrew Poelstra
897f8be4ef Merge bd60a9a8ed into merged_master (Bitcoin PR #19818) 2020-11-28 22:14:15 +00:00
Andrew Poelstra
9a200a587e Merge 505b39e72b into merged_master (Bitcoin PR #19610) 2020-11-28 20:35:13 +00:00
Andrew Poelstra
bd81f212c6 Merge f2d1b9881f into merged_master (Bitcoin PR #19721) 2020-11-27 23:54:01 +00:00
Andrew Poelstra
4dd913a1b2 Merge ffad348167 into merged_master (Bitcoin PR #19705) 2020-11-27 21:54:47 +00:00
Andrew Poelstra
1aea27d291 Merge b4d0366b47 into merged_master (Bitcoin PR #19070) 2020-11-27 17:48:36 +00:00
Andrew Poelstra
97722173e4 Merge a78742830a into merged_master (Bitcoin PR #19639) 2020-11-26 23:42:52 +00:00
Andrew Poelstra
0ddf4fafae Merge f7c73b03d9 into merged_master (Bitcoin PR #19569) 2020-11-26 23:15:28 +00:00
Andrew Poelstra
68756cc75b Merge 17de75b028 into merged_master (Bitcoin PR #19590) 2020-11-26 21:49:46 +00:00
Andrew Poelstra
e547a98b54 Merge ccef10261e into merged_master (Bitcoin PR #18044) 2020-11-26 17:01:52 +00:00
Andrew Poelstra
efaef30fdb Merge 631284f09a into merged_master (Bitcoin PR #19486) 2020-11-26 01:51:47 +00:00
Andrew Poelstra
927a580a42 Merge 07d0e0d59f into merged_master (Bitcoin PR #19044) 2020-11-26 01:08:55 +00:00
Andrew Poelstra
ea6e25d012 Merge 8ad5f1c376 into merged_master (Bitcoin PR #19106) 2020-11-26 01:08:54 +00:00
Andrew Poelstra
e00f039d47 Merge de369c7ea5 into merged_master (Bitcoin PR #18165) 2020-11-26 01:08:53 +00:00
Andrew Poelstra
62a9d9569c Merge 7d32cce3e7 into merged_master (Bitcoin PR #19010) 2020-11-26 01:08:50 +00:00
Andrew Poelstra
354446d0af Merge fed1a9043f into merged_master (Bitcoin PR #19020) 2020-11-26 01:08:48 +00:00
Andrew Poelstra
f89b990b78 Merge 448bdff263 into merged_master (Bitcoin PR #18317) 2020-11-26 01:08:46 +00:00
Andrew Poelstra
9ca0c6e9ed Merge e20e964cb1 into merged_master (Bitcoin PR #18996) 2020-11-26 01:08:46 +00:00
Andrew Poelstra
9ac62395d7 Merge e45fb7e0d2 into merged_master (Bitcoin PR #18877) 2020-11-26 01:08:42 +00:00
Andrew Poelstra
3175c6b6f4 Merge f2c416bcf5 into merged_master (Bitcoin PR #16995) 2020-11-26 01:08:04 +00:00
Andrew Poelstra
1ceb281f8f Merge 5948398b18 into merged_master (Bitcoin PR #17474) 2020-11-14 16:51:57 +00:00
Andrew Poelstra
821f5256a5 Merge 46d6930f8c into merged_master (Bitcoin PR #16659) 2020-11-09 21:20:41 +00:00
Andrew Poelstra
55b110cabc Merge c08bf2b574 into merged_master (Bitcoin PR #15437) 2020-11-09 21:20:35 +00:00
Andrew Poelstra
7436b9cfea Merge 29082e8f40 into merged_master (Bitcoin PR #16380) 2020-11-09 21:20:06 +00:00
Vasil Dimov
353a3fdaad
net: advertise support for ADDRv2 via new message
Introduce a new message `sendaddrv2` to signal support for ADDRv2.
Send the new message immediately after sending the `VERACK` message.

Add support for receiving and parsing ADDRv2 messages.

Send ADDRv2 messages (instead of ADDR) to a peer if he has
advertised support for it.

Co-authored-by: Carl Dong <contact@carldong.me>
2020-10-09 16:42:50 +02:00
Vasil Dimov
201a4596d9
net: CAddress & CAddrMan: (un)serialize as ADDRv2
Change the serialization of `CAddrMan` to serialize its addresses
in ADDRv2/BIP155 format by default. Introduce a new `CAddrMan` format
version (3).

Add support for ADDRv2 format in `CAddress` (un)serialization.

Co-authored-by: Carl Dong <contact@carldong.me>
2020-10-09 16:42:49 +02:00
Troy Giorshev
deb52711a1 Remove header checks out of net_processing
This moves header size and netmagic checking out of net_processing and
into net.  This check now runs in ReadHeader, so that net can exit early
out of receiving bytes from the peer.  IsValid is now slimmed down, so
it no longer needs a MessageStartChars& parameter.

Additionally this removes the rest of the m_valid_* members from
CNetMessage.
2020-09-22 22:05:18 -04:00
Troy Giorshev
5bceef6b12 Change CMessageHeader Constructor
This commit removes the single-parameter contructor of CMessageHeader
and replaces it with a default constructor.

The single parameter contructor isn't used anywhere except for tests.
There is no reason to initialize a CMessageHeader with a particular
messagestart.  This messagestart should always be replaced when
deserializing an actual message header so that we can run checks on it.

The default constructor initializes it to zero, just like the command
and checksum.

This also removes a parameter of a V1TransportDeserializer constructor,
as it was only used for this purpose.
2020-09-22 22:01:14 -04:00
Wladimir J. van der Laan
bd60a9a8ed
Merge #19818: p2p: change CInv::type from int to uint32_t, fix UBSan warning
7984c39be1 test framework: serialize/deserialize inv type as unsigned int (Jon Atack)
407175e0c2 p2p: change CInv::type from int to uint32_t (Jon Atack)

Pull request description:

  Fixes UBSan implicit-integer-sign-change issue per https://github.com/bitcoin/bitcoin/pull/19610#issuecomment-680686460.

  Credit to Crypt-iQ for finding and reporting the issue and to vasild for the original review suggestion in https://github.com/bitcoin/bitcoin/pull/19590#pullrequestreview-455788826.

  Closes #19678.

ACKs for top commit:
  laanwj:
    ACK 7984c39be1
  MarcoFalke:
    ACK 7984c39be1 🌻
  vasild:
    ACK 7984c39be

Tree-SHA512: 59f3a75f40ce066ca6f0bb1927197254238302b4073af1574bdbfe6ed580876437be804be4e47d51467d604f0d9e3a5875159f7f2edbb2351fdb2bb9465100b5
2020-09-03 17:23:52 +02:00
Jon Atack
407175e0c2
p2p: change CInv::type from int to uint32_t
fixes issue #19678 UBSan implicit-integer-sign-change

Credit to Eugene (Crypt-iQ) for finding and reporting the issue
and to Vasil Dimov (vasild) for the original suggestion
2020-08-27 10:57:20 +02:00
Jon Atack
471714e1f0
p2p: add CInv block message helper methods 2020-08-26 11:56:55 +02:00
fanquake
f2d1b9881f
Merge #19721: p2p: comment out unused MSG_FILTERED_WITNESS_BLOCK
4792cad88c doc: comment out and add annotation to unused MSG_FILTERED_WITNESS_BLOCK (Adam Jonas)

Pull request description:

  Commenting out and adding a note to unused `MSG_FILTERED_WITNESS_BLOCK` [defined in BIP144](https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki#relay).

  There was an attempt to make use of this in https://github.com/bitcoin/bitcoin/pull/10350, but it was closed due to lack of support. (h/t sdaftuar for pointing to the PR and jnewbery for the idea)

ACKs for top commit:
  jnewbery:
    Obvious ACK 4792cad88c
  theStack:
    ACK https://github.com/bitcoin/bitcoin/pull/19721/commits/4792cad88c5c3c93e639a051df779230ee817396 📜
  MarcoFalke:
    cr ACK 4792cad88c good to keep it around in a comment to avoid accidental future re-assignment
  practicalswift:
    ACK 4792cad88c

Tree-SHA512: 22327ddded643ae50fdb529e4529a9b464f74e90620d0d2079a11070eaa8afe8363f6e14cca52f3bec2c9f87ee13e318edc6c5193761c94b8ae77be353a8da1f
2020-08-18 12:15:48 +08:00
Wladimir J. van der Laan
ffad348167
Merge #19705: Shrink CAddress from 48 to 40 bytes on x64
767073fb96 Shrink CAddress from 48 to 40 bytes on x64 (Vasil Dimov)

Pull request description:

  `CAddress` inherits `CService` which is 28 bytes (on 64 bit machines).
  `CAddress` then adds two member variables - one that requires 4 byte
  alignment (`nTime`) and one that requires 8 byte alignment
  (`nServices`).

  Declare the smaller one first so that it fits in bytes 29..32.

  On 32 bit machines this change has no effect and `CAddress` remains 40
  bytes.

ACKs for top commit:
  laanwj:
    ACK 767073fb96
  theStack:
    ACK 767073fb96

Tree-SHA512: 73d6a4fcfa2687b4076950801871252e369510ecf09f820576dbeca9ee3ee94d14672e7d5596cb45fedd9e4b973dd0716a2ea3f13fc3058b4b697d036a7c9db0
2020-08-16 18:56:25 +02:00
Adam Jonas
4792cad88c doc: comment out and add annotation to unused MSG_FILTERED_WITNESS_BLOCK 2020-08-14 09:58:34 -04:00
Wladimir J. van der Laan
b4d0366b47
Merge #19070: p2p: Signal support for compact block filters with NODE_COMPACT_FILTERS
f5c003d3ea [test] Add test for NODE_COMPACT_FILTER. (Jim Posen)
132b30d9c8 [net] Signal NODE_COMPACT_FILTERS if we're serving compact filters. (Jim Posen)
b3fbc94d4f Apply cfilters review fixups (John Newbery)

Pull request description:

  If -peerblockfilters is configured, signal the `NODE_COMPACT_FILTERS` service bit to indicate that we are able to serve compact block filters, headers and checkpoints.

ACKs for top commit:
  MarcoFalke:
    re-review and Concept ACK f5c003d3ea
  fjahr:
    Code review ACK f5c003d3ea
  clarkmoody:
    Concept ACK f5c003d3ea
  ariard:
    Concept and Code Review ACK f5c003d
  jonatack:
    ACK f5c003d3e

Tree-SHA512: 34d1c153530a0e55d09046fe548c9dc37344b5d6d50e00af1b4e1de1e7b49de770fca8471346a17c151de9fe164776296bb3dd5af331977f0c3ef1e6fc906f85
2020-08-13 15:44:48 +02:00
Vasil Dimov
767073fb96
Shrink CAddress from 48 to 40 bytes on x64
`CAddress` inherits `CService` which is 28 bytes (on 64 bit machines).
`CAddress` then adds two member variables - one that requires 4 byte
alignment (`nTime`) and one that requires 8 byte alignment
(`nServices`).

Declare the smaller one first so that it fits in bytes 29..32.

On 32 bit machines this change has no effect and `CAddress` remains 40
bytes.
2020-08-12 16:00:11 +02:00
Robert
334de75885 scripted-diff: Remove Reference Links
-BEGIN VERIFY SCRIPT-
sed -i '/https:\/\/bitcoin.org\/en\/developer-reference/d' ./src/protocol.h
-END VERIFY SCRIPT-
2020-08-01 23:42:07 -04:00
Pieter Wuille
9efd86a908 refactor: add GenTxid (=txid or wtxid) type and use it for tx request logic 2020-07-30 13:44:54 -07:00