Eth66 protocol request id should only apply to the Eth protocol (#2685)

Signed-off-by: Jason Frame <jasonwframe@gmail.com>
pull/2694/head
Jason Frame 3 years ago committed by GitHub
parent a9212d352d
commit fbb2944de4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/EthProtocol.java
  2. 3
      ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/EthPeer.java
  3. 46
      ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/EthProtocolTest.java
  4. 9
      ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/rlpx/wire/Capability.java

@ -169,4 +169,8 @@ public class EthProtocol implements SubProtocol {
public static final int V65 = 65;
public static final int V66 = 66;
}
public static boolean isEth66Compatible(final Capability capability) {
return NAME.equals(capability.getName()) && capability.getVersion() >= ETH66.getVersion();
}
}

@ -107,8 +107,7 @@ public class EthPeer {
fullyValidated.set(peerValidators.isEmpty());
final boolean supportsRequestId =
getAgreedCapabilities().stream()
.anyMatch(capability -> capability.compareTo(EthProtocol.ETH66) >= 0);
getAgreedCapabilities().stream().anyMatch(EthProtocol::isEth66Compatible);
this.headersRequestManager = new RequestManager(this, supportsRequestId);
this.bodiesRequestManager = new RequestManager(this, supportsRequestId);
this.receiptsRequestManager = new RequestManager(this, supportsRequestId);

@ -0,0 +1,46 @@
/*
* Copyright ConsenSys AG.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
*/
package org.hyperledger.besu.ethereum.eth;
import static org.assertj.core.api.Assertions.assertThat;
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability;
import org.junit.Test;
public class EthProtocolTest {
@Test
public void eth66CheckShouldReturnTrueForCompatibleProtocols() {
assertThat(EthProtocol.isEth66Compatible(EthProtocol.ETH66)).isTrue();
}
@Test
public void eth66CheckShouldReturnFalseForIncompatibleProtocols() {
assertThat(EthProtocol.isEth66Compatible(EthProtocol.ETH62)).isFalse();
assertThat(EthProtocol.isEth66Compatible(EthProtocol.ETH63)).isFalse();
assertThat(EthProtocol.isEth66Compatible(EthProtocol.ETH64)).isFalse();
assertThat(EthProtocol.isEth66Compatible(EthProtocol.ETH65)).isFalse();
assertThat(EthProtocol.isEth66Compatible(Capability.create("IBF", 1))).isFalse();
assertThat(EthProtocol.isEth66Compatible(Capability.create("istanbul", 66))).isFalse();
assertThat(EthProtocol.isEth66Compatible(Capability.create("istanbul", 100))).isFalse();
}
@Test
public void eth66CheckWithNullNameReturnsFalse() {
assertThat(EthProtocol.isEth66Compatible(Capability.create(null, 1))).isFalse();
}
}

@ -22,15 +22,13 @@ import org.hyperledger.besu.ethereum.rlp.RLPOutput;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
import org.jetbrains.annotations.NotNull;
/**
* Represents a client capability.
*
* @see <a href= "https://github.com/ethereum/devp2p/blob/master/devp2p.md">Capability wire
* format</a>
*/
public class Capability implements Comparable<Capability> {
public class Capability {
private final String name;
private final int version;
@ -87,9 +85,4 @@ public class Capability implements Comparable<Capability> {
public String toString() {
return name + "/" + version;
}
@Override
public int compareTo(@NotNull final Capability that) {
return Integer.compare(this.getVersion(), that.getVersion());
}
}

Loading…
Cancel
Save