diff --git a/.github/workflows/github_release_docker.yml b/.github/workflows/github_release_docker.yml index 6f1a56ab0b..31a5553034 100644 --- a/.github/workflows/github_release_docker.yml +++ b/.github/workflows/github_release_docker.yml @@ -60,7 +60,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@f6010ea70151369b06f0194be1051fbbdff851b2 + uses: docker/build-push-action@31159d49c0d4756269a0940a750801a1ea5d7003 with: context: . file: Dockerfile diff --git a/Cargo.lock b/Cargo.lock index 57e1353fbc..6b946e5d17 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -484,7 +484,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -658,7 +658,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -798,7 +798,7 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -891,7 +891,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1172,7 +1172,7 @@ checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1240,7 +1240,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1251,7 +1251,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1344,7 +1344,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1354,7 +1354,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" dependencies = [ "derive_builder_core", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1367,7 +1367,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1555,7 +1555,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1746,7 +1746,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -2988,7 +2988,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -3751,7 +3751,7 @@ version = "0.22.1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -3798,7 +3798,7 @@ dependencies = [ "nimiq-jsonrpc-server", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -4334,7 +4334,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -4414,7 +4414,7 @@ dependencies = [ "darling", "nimiq-test-log", "quote", - "syn 2.0.66", + "syn 2.0.67", "tokio", ] @@ -4500,7 +4500,7 @@ dependencies = [ "schemars", "serde", "serde_json", - "syn 2.0.66", + "syn 2.0.67", "thiserror", "tracing", ] @@ -5285,7 +5285,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -5395,9 +5395,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -5468,7 +5468,7 @@ dependencies = [ "itertools 0.10.5", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -5991,7 +5991,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals 0.29.0", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -6031,7 +6031,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -6141,7 +6141,7 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -6152,7 +6152,7 @@ checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -6163,7 +6163,7 @@ checksum = "330f01ce65a3a5fe59a60c82f3c9a024b573b8a6e875bd233fe5f934e71d54e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -6186,7 +6186,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -6237,7 +6237,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -6467,9 +6467,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "ff8655ed1d86f3af4ee3fd3263786bc14245ad17c4c7e85ba7187fb3ae028c90" dependencies = [ "proc-macro2", "quote", @@ -6559,7 +6559,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -6667,7 +6667,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -6852,7 +6852,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -6985,7 +6985,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals 0.28.0", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -7227,7 +7227,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", "wasm-bindgen-shared", ] @@ -7283,7 +7283,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -7316,7 +7316,7 @@ checksum = "b7f89739351a2e03cb94beb799d47fb2cac01759b40ec441f7de39b00cbf7ef0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -7742,7 +7742,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] diff --git a/consensus/src/consensus/remote_data_store.rs b/consensus/src/consensus/remote_data_store.rs index 8d1c3b4094..e7c55f19a8 100644 --- a/consensus/src/consensus/remote_data_store.rs +++ b/consensus/src/consensus/remote_data_store.rs @@ -103,7 +103,7 @@ impl RemoteDataStore { .collect()); } else { // If the proof does not verify, we disconnect from the peer - log::debug!(peer = %peer_id, "Disconnecting from peer because the accounts proof didn't verify"); + log::warn!(%peer_id, "Banning peer because the accounts proof didn't verify"); network .disconnect_peer(peer_id, CloseReason::MaliciousPeer) .await; diff --git a/consensus/src/sync/history/sync_clustering.rs b/consensus/src/sync/history/sync_clustering.rs index 0653c67706..fd2aeaa96e 100644 --- a/consensus/src/sync/history/sync_clustering.rs +++ b/consensus/src/sync/history/sync_clustering.rs @@ -73,7 +73,7 @@ impl HistoryMacroSync { log::warn!( num_epochs = macro_chain.epochs.len(), %peer_id, - "Request macro chain failed: too many epochs returned" + "Banning peer because requesting macro chain failed: too many epochs returned" ); network .disconnect_peer(peer_id, CloseReason::MaliciousPeer) @@ -102,8 +102,8 @@ impl HistoryMacroSync { log::warn!( given_checkpoint_epoch, expected_checkpoint_epoch, - peer = %peer_id, - "Request macro chain failed: invalid checkpoint", + %peer_id, + "Banning peer because requesting macro chain failed: invalid checkpoint", ); network .disconnect_peer(peer_id, CloseReason::MaliciousPeer) diff --git a/consensus/src/sync/light/sync_requests.rs b/consensus/src/sync/light/sync_requests.rs index b6d55cd124..ac920ed985 100644 --- a/consensus/src/sync/light/sync_requests.rs +++ b/consensus/src/sync/light/sync_requests.rs @@ -98,7 +98,7 @@ impl LightMacroSync { log::warn!( num_epochs = macro_chain.epochs.len(), %peer_id, - "Request macro chain failed: too many epochs returned" + "Banning peer because requesting macro chain failed: too many epochs returned" ); network .disconnect_peer(peer_id, CloseReason::MaliciousPeer) @@ -120,7 +120,7 @@ impl LightMacroSync { block_number = checkpoint.block_number, checkpoint_epoch, %peer_id, - "Request macro chain failed: invalid checkpoint" + "Banning peer because requesting macro chain failed: invalid checkpoint" ); network .disconnect_peer(peer_id, CloseReason::MaliciousPeer) diff --git a/consensus/src/sync/light/sync_stream.rs b/consensus/src/sync/light/sync_stream.rs index 916f5f31ac..555eae3bef 100644 --- a/consensus/src/sync/light/sync_stream.rs +++ b/consensus/src/sync/light/sync_stream.rs @@ -126,7 +126,7 @@ impl LightMacroSync { self.epoch_ids_stream.push(future); } Err(result) => { - log::debug!(?result, "Failed applying ZKP proof to the blockchain",); + log::warn!(?result, %peer_id, "Banning peer because failed applying ZKP proof to the blockchain",); // Since it failed applying the ZKP from this peer, we disconnect self.disconnect_peer(peer_id, CloseReason::MaliciousPeer); @@ -280,8 +280,8 @@ impl LightMacroSync { if let Some(peer_requests) = self.peer_requests.get_mut(&peer_id) { if !peer_requests.update_request(block) { // We received a block we were not expecting from this peer - log::trace!(%peer_id, - "Disconnecting peer due to a non expected response", + log::warn!(%peer_id, + "Banning peer due to a non expected response", ); self.disconnect_peer(peer_id, CloseReason::MaliciousPeer); return Poll::Ready(None); @@ -357,10 +357,11 @@ impl LightMacroSync { ); } Err(error) => { - log::debug!( + log::warn!( block_number = block.block_number(), ?error, - "Failed to push macro block", + %peer_id, + "Banning peer because failed to push macro block", ); // We failed applying a block from this peer, so we disconnect it self.disconnect_peer(peer_id, CloseReason::MaliciousPeer); diff --git a/consensus/src/sync/light/validity_window.rs b/consensus/src/sync/light/validity_window.rs index 1244a5c851..d773a6bebf 100644 --- a/consensus/src/sync/light/validity_window.rs +++ b/consensus/src/sync/light/validity_window.rs @@ -370,11 +370,11 @@ impl LightMacroSync { self.validity_queue.add_ids(vec![(request, None)]); } else { // If the chunk doesn't verify we disconnect from the peer - log::error!(peer=?peer_id, + log::warn!(%peer_id, chunk=request.chunk_index, verifier_block=request.block_number, epoch=request.epoch_number, - "The validity history chunk didn't verify, disconnecting from peer"); + "Banning peer because the validity history chunk didn't verify"); // Remove the peer from the syncing process self.validity_queue.remove_peer(&peer_id); diff --git a/validator/src/proposal_buffer.rs b/validator/src/proposal_buffer.rs index 69e9615b8c..12a3181cc9 100644 --- a/validator/src/proposal_buffer.rs +++ b/validator/src/proposal_buffer.rs @@ -159,8 +159,14 @@ where .validate_message::>(pubsub_id, MsgAcceptance::Reject); let network = Arc::clone(&self.network); + // disconnect the peer let future = async move { + log::warn!( + peer_id = %source, + "Banning peer because an invalid proposal was received" + ); + network .disconnect_peer(source, CloseReason::MaliciousPeer) .await; @@ -239,10 +245,17 @@ where // Try and retrieve the predecessor of the proposal. match blockchain.get_block(&signed_proposal.proposal.parent_hash, false, None) { // Macro block predecessors do not make any sense in the presence of micro blocks. - Ok(Block::Macro(_block)) => self.disconnect_and_reject(pubsub_id), + Ok(Block::Macro(_block)) => { + log::debug!(?pubsub_id, "The predecessing block of a macro block cannot be a macro block. Disconnecting the peer."); + self.disconnect_and_reject(pubsub_id) + } // Micro block predecessors can be used to verify the signer. If the block itself is good will be checked later. Ok(Block::Micro(block)) => { if !signed_proposal.verify_signer_matches_producer(block, &blockchain) { + log::debug!( + ?pubsub_id, + "Verification of signed proposal failed. Disconnecting the peer." + ); self.disconnect_and_reject(pubsub_id); } else { // No validate message call here, as later in the process more proposal verification happens. @@ -455,6 +468,12 @@ where // Punish the propagation source of the proposal for propagating invalid proposal messages, i.e ban the peer. let nw = Arc::clone(&self.network); + + log::warn!( + peer_id = %source, + "Disconnecting peer because proposal signature verification failed" + ); + let future = async move { nw.disconnect_peer(source, CloseReason::MaliciousPeer).await; }