mirror of
https://github.com/vacp2p/linea-besu.git
synced 2026-01-09 21:17:54 -05:00
[PAN-2783] Invert dependency between permissioning and p2p (#1557)
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
This commit is contained in:
@@ -24,6 +24,7 @@ import tech.pegasys.pantheon.ethereum.eth.EthereumWireProtocolConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.eth.sync.SynchronizerConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.eth.transactions.PendingTransactions;
|
||||
import tech.pegasys.pantheon.ethereum.graphql.GraphQLConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.metrics.noop.NoOpMetricsSystem;
|
||||
@@ -33,7 +34,6 @@ import tech.pegasys.pantheon.services.PantheonEventsImpl;
|
||||
import tech.pegasys.pantheon.services.PantheonPluginContextImpl;
|
||||
import tech.pegasys.pantheon.services.PicoCLIOptionsImpl;
|
||||
import tech.pegasys.pantheon.services.kvstore.RocksDbConfiguration;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -17,6 +17,7 @@ import static org.web3j.utils.Numeric.toHexString;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.core.Address;
|
||||
import tech.pegasys.pantheon.ethereum.core.Hash;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.NodeSmartContractPermissioningController;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.account.Account;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
|
||||
@@ -24,7 +25,6 @@ import tech.pegasys.pantheon.tests.acceptance.dsl.node.RunnableNode;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.NodeRequests;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.Transaction;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigInteger;
|
||||
|
||||
@@ -16,13 +16,13 @@ import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static tech.pegasys.pantheon.ethereum.permissioning.NodeSmartContractPermissioningController.checkTransactionResult;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.core.Address;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.NodeSmartContractPermissioningController;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.node.RunnableNode;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.NodeRequests;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.Transaction;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import static org.web3j.utils.Numeric.toHexString;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.core.Address;
|
||||
import tech.pegasys.pantheon.ethereum.core.Hash;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.NodeSmartContractPermissioningController;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.account.Account;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
|
||||
@@ -24,7 +25,6 @@ import tech.pegasys.pantheon.tests.acceptance.dsl.node.RunnableNode;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.NodeRequests;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.Transaction;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigInteger;
|
||||
|
||||
@@ -15,13 +15,13 @@ package tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.core.Address;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.NodeSmartContractPermissioningController;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.node.RunnableNode;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.NodeRequests;
|
||||
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.Transaction;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
||||
@@ -15,12 +15,12 @@ package tech.pegasys.pantheon.ethereum.eth.manager;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.MessageData;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.PeerInfo;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.messages.DisconnectMessage.DisconnectReason;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -18,8 +18,8 @@ import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcResponse;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcSuccessResponse;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -22,8 +22,8 @@ import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcErrorResp
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcResponse;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcSuccessResponse;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -18,7 +18,7 @@ import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcResponse;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcSuccessResponse;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -19,7 +19,7 @@ import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcErrorResp
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcResponse;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcSuccessResponse;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
@@ -29,8 +29,8 @@ import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcResponse;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcSuccessResponse;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.util.uint.UInt256;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
@@ -23,8 +23,8 @@ import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcResponse;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcSuccessResponse;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
@@ -20,13 +20,13 @@ import tech.pegasys.pantheon.ethereum.p2p.api.MessageData;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.DiscoveryPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.DefaultMessage;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.PeerInfo;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.messages.DisconnectMessage.DisconnectReason;
|
||||
import tech.pegasys.pantheon.util.Subscribers;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -17,12 +17,12 @@ import tech.pegasys.pantheon.ethereum.p2p.api.MessageData;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.RawMessage;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.messages.DisconnectMessage.DisconnectReason;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -28,7 +28,6 @@ jar {
|
||||
dependencies {
|
||||
implementation project(':crypto')
|
||||
implementation project(':ethereum:core')
|
||||
implementation project(':ethereum:permissioning')
|
||||
implementation project(':ethereum:rlp')
|
||||
implementation project(':metrics:core')
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ import tech.pegasys.pantheon.ethereum.p2p.api.MessageCallback;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.DiscoveryPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
package tech.pegasys.pantheon.ethereum.p2p.api;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.DiscoveryPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.util.Collection;
|
||||
|
||||
@@ -12,11 +12,11 @@
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.p2p.api;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.PeerInfo;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.messages.DisconnectMessage.DisconnectReason;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
@@ -14,7 +14,7 @@ package tech.pegasys.pantheon.ethereum.p2p.config;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
package tech.pegasys.pantheon.ethereum.p2p.discovery;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.PeerId;
|
||||
import tech.pegasys.pantheon.ethereum.rlp.RLPInput;
|
||||
import tech.pegasys.pantheon.ethereum.rlp.RLPOutput;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
/**
|
||||
* Represents an Ethereum node that we interacting with through the discovery and wire protocols.
|
||||
|
||||
@@ -15,11 +15,11 @@ package tech.pegasys.pantheon.ethereum.p2p.discovery;
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static tech.pegasys.pantheon.util.Preconditions.checkGuard;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.rlp.RLPInput;
|
||||
import tech.pegasys.pantheon.ethereum.rlp.RLPOutput;
|
||||
import tech.pegasys.pantheon.util.NetworkUtility;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -24,13 +24,13 @@ import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.PeerDiscoveryContro
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.PeerRequirement;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.PingPacketData;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.TimerUtil;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.PeerId;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.NetworkUtility;
|
||||
import tech.pegasys.pantheon.util.Subscribers;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketException;
|
||||
|
||||
@@ -17,7 +17,6 @@ import static com.google.common.base.Preconditions.checkState;
|
||||
|
||||
import tech.pegasys.pantheon.crypto.SECP256K1;
|
||||
import tech.pegasys.pantheon.crypto.SECP256K1.KeyPair;
|
||||
import tech.pegasys.pantheon.ethereum.chain.Blockchain;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.ConnectCallback;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.DisconnectCallback;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.MessageCallback;
|
||||
@@ -30,6 +29,7 @@ import tech.pegasys.pantheon.ethereum.p2p.discovery.PeerDiscoveryEvent.PeerBonde
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.PeerDiscoveryStatus;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.VertxPeerDiscoveryAgent;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeerProperties;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.LocalNode;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.MaintainedPeers;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.MutableLocalNode;
|
||||
@@ -40,10 +40,8 @@ import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissionsBlacklist;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.rlpx.RlpxAgent;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.messages.DisconnectMessage.DisconnectReason;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningController;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Arrays;
|
||||
@@ -351,8 +349,6 @@ public class DefaultP2PNetwork implements P2PNetwork {
|
||||
|
||||
private MaintainedPeers maintainedPeers = new MaintainedPeers();
|
||||
private PeerPermissions peerPermissions = PeerPermissions.noop();
|
||||
private Optional<NodePermissioningController> nodePermissioningController = Optional.empty();
|
||||
private Blockchain blockchain = null;
|
||||
|
||||
private MetricsSystem metricsSystem;
|
||||
|
||||
@@ -363,13 +359,6 @@ public class DefaultP2PNetwork implements P2PNetwork {
|
||||
|
||||
private P2PNetwork doBuild() {
|
||||
// Set up permissions
|
||||
// Fold NodePermissioningController into peerPermissions
|
||||
if (nodePermissioningController.isPresent()) {
|
||||
final List<EnodeURL> bootnodes = config.getDiscovery().getBootnodes();
|
||||
final PeerPermissions nodePermissions =
|
||||
new NodePermissioningAdapter(nodePermissioningController.get(), bootnodes, blockchain);
|
||||
peerPermissions = PeerPermissions.combine(peerPermissions, nodePermissions);
|
||||
}
|
||||
// Fold peer reputation into permissions
|
||||
final PeerPermissionsBlacklist misbehavingPeers = PeerPermissionsBlacklist.create(500);
|
||||
final PeerReputationManager reputationManager = new PeerReputationManager(misbehavingPeers);
|
||||
@@ -399,9 +388,6 @@ public class DefaultP2PNetwork implements P2PNetwork {
|
||||
supportedCapabilities != null && supportedCapabilities.size() > 0,
|
||||
"Supported capabilities must be set and non-empty.");
|
||||
checkState(metricsSystem != null, "MetricsSystem must be set.");
|
||||
checkState(
|
||||
!nodePermissioningController.isPresent() || blockchain != null,
|
||||
"Network permissioning needs to listen to BlockAddedEvents. Blockchain can't be null.");
|
||||
checkState(peerDiscoveryAgent != null || vertx != null, "Vertx must be set.");
|
||||
}
|
||||
|
||||
@@ -476,23 +462,6 @@ public class DefaultP2PNetwork implements P2PNetwork {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder nodePermissioningController(
|
||||
final NodePermissioningController nodePermissioningController) {
|
||||
this.nodePermissioningController = Optional.ofNullable(nodePermissioningController);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder nodePermissioningController(
|
||||
final Optional<NodePermissioningController> nodePermissioningController) {
|
||||
this.nodePermissioningController = nodePermissioningController;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder blockchain(final Blockchain blockchain) {
|
||||
this.blockchain = blockchain;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder maintainedPeers(final MaintainedPeers maintainedPeers) {
|
||||
checkNotNull(maintainedPeers);
|
||||
this.maintainedPeers = maintainedPeers;
|
||||
|
||||
@@ -14,7 +14,6 @@ package tech.pegasys.pantheon.ethereum.p2p.peers;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.PeerInfo;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.p2p.peers;
|
||||
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* 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.
|
||||
*/
|
||||
package tech.pegasys.pantheon.util.enode;
|
||||
package tech.pegasys.pantheon.ethereum.p2p.peers;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
@@ -14,7 +14,6 @@ package tech.pegasys.pantheon.ethereum.p2p.peers;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.PeerInfo;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
package tech.pegasys.pantheon.ethereum.p2p.peers;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ package tech.pegasys.pantheon.ethereum.p2p.peers;
|
||||
|
||||
import tech.pegasys.pantheon.crypto.SecureRandomProvider;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
public interface Peer extends PeerId {
|
||||
|
||||
|
||||
@@ -16,8 +16,6 @@ import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static java.util.Collections.emptySet;
|
||||
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
|
||||
@@ -23,6 +23,7 @@ import tech.pegasys.pantheon.ethereum.p2p.api.MessageCallback;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.config.RlpxConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.DiscoveryPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.LocalNode;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.PeerProperties;
|
||||
@@ -40,7 +41,6 @@ import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.FutureUtils;
|
||||
import tech.pegasys.pantheon.util.Subscribers;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -19,6 +19,7 @@ import tech.pegasys.pantheon.ethereum.p2p.network.exceptions.IncompatiblePeerExc
|
||||
import tech.pegasys.pantheon.ethereum.p2p.network.exceptions.PeerDisconnectedException;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.network.exceptions.UnexpectedPeerConnectionException;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.LocalNode;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.rlpx.connections.PeerConnectionEventDispatcher;
|
||||
@@ -36,7 +37,6 @@ import tech.pegasys.pantheon.metrics.Counter;
|
||||
import tech.pegasys.pantheon.metrics.LabelledMetric;
|
||||
import tech.pegasys.pantheon.metrics.MetricCategory;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
@@ -19,6 +19,7 @@ import tech.pegasys.pantheon.ethereum.p2p.api.ConnectCallback;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.config.RlpxConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.DiscoveryPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.LocalNode;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.rlpx.connections.ConnectionInitializer;
|
||||
@@ -26,7 +27,6 @@ import tech.pegasys.pantheon.ethereum.p2p.rlpx.connections.PeerConnectionEventDi
|
||||
import tech.pegasys.pantheon.metrics.MetricCategory;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.Subscribers;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@@ -14,8 +14,8 @@ package tech.pegasys.pantheon.ethereum.p2p.config;
|
||||
|
||||
import static org.assertj.core.api.Java6Assertions.assertThatThrownBy;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
|
||||
@@ -27,11 +27,11 @@ import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.MockPeerDiscoveryAg
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.NeighborsPacketData;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.Packet;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.PacketType;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions.Action;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissionsBlacklist;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -21,10 +21,10 @@ import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.MockPeerDiscoveryAg
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.Packet;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.PacketType;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.PingPacketData;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
@@ -35,6 +35,7 @@ import tech.pegasys.pantheon.ethereum.p2p.discovery.Endpoint;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.PeerBondedObserver;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.PeerDiscoveryStatus;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.PeerDiscoveryTestHelper;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions.Action;
|
||||
@@ -44,7 +45,6 @@ import tech.pegasys.pantheon.util.Subscribers;
|
||||
import tech.pegasys.pantheon.util.bytes.Bytes32;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.bytes.MutableBytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.util.uint.UInt256;
|
||||
import tech.pegasys.pantheon.util.uint.UInt256Value;
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ import tech.pegasys.pantheon.ethereum.p2p.discovery.PeerDiscoveryTestHelper;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.PeerTable.AddResult.AddOutcome;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.PeerTable.EvictResult;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.PeerTable.EvictResult.EvictOutcome;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@ import tech.pegasys.pantheon.ethereum.p2p.discovery.DiscoveryPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.PeerDiscoveryStatus;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.RecursivePeerRefreshState.BondingAgent;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.internal.RecursivePeerRefreshState.FindNeighbourDispatcher;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -13,12 +13,8 @@
|
||||
package tech.pegasys.pantheon.ethereum.p2p.network;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.catchThrowable;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -26,8 +22,6 @@ import static tech.pegasys.pantheon.ethereum.p2p.peers.PeerTestHelper.createPeer
|
||||
import static tech.pegasys.pantheon.ethereum.p2p.peers.PeerTestHelper.enode;
|
||||
|
||||
import tech.pegasys.pantheon.crypto.SECP256K1.KeyPair;
|
||||
import tech.pegasys.pantheon.ethereum.chain.BlockAddedObserver;
|
||||
import tech.pegasys.pantheon.ethereum.chain.Blockchain;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.config.DiscoveryConfiguration;
|
||||
@@ -46,7 +40,6 @@ import tech.pegasys.pantheon.ethereum.p2p.rlpx.connections.MockPeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.MockSubProtocol;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.messages.DisconnectMessage.DisconnectReason;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningController;
|
||||
import tech.pegasys.pantheon.metrics.noop.NoOpMetricsSystem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -68,15 +61,10 @@ import org.mockito.junit.MockitoJUnitRunner;
|
||||
@RunWith(MockitoJUnitRunner.StrictStubs.class)
|
||||
public final class DefaultP2PNetworkTest {
|
||||
|
||||
@Mock private NodePermissioningController nodePermissioningController;
|
||||
final MaintainedPeers maintainedPeers = new MaintainedPeers();
|
||||
|
||||
@Mock private Blockchain blockchain;
|
||||
@Mock PeerDiscoveryAgent discoveryAgent;
|
||||
@Mock RlpxAgent rlpxAgent;
|
||||
|
||||
private final ArgumentCaptor<BlockAddedObserver> observerCaptor =
|
||||
ArgumentCaptor.forClass(BlockAddedObserver.class);
|
||||
private final ArgumentCaptor<PeerBondedObserver> discoverySubscriberCaptor =
|
||||
ArgumentCaptor.forClass(PeerBondedObserver.class);
|
||||
|
||||
@@ -92,16 +80,15 @@ public final class DefaultP2PNetworkTest {
|
||||
|
||||
@Before
|
||||
public void before() {
|
||||
when(rlpxAgent.start()).thenReturn(CompletableFuture.completedFuture(30303));
|
||||
when(rlpxAgent.stop()).thenReturn(CompletableFuture.completedFuture(null));
|
||||
when(discoveryAgent.start(anyInt())).thenReturn(CompletableFuture.completedFuture(30303));
|
||||
when(discoveryAgent.stop()).thenReturn(CompletableFuture.completedFuture(null));
|
||||
when(discoveryAgent.observePeerBondedEvents(discoverySubscriberCaptor.capture()))
|
||||
lenient().when(rlpxAgent.start()).thenReturn(CompletableFuture.completedFuture(30303));
|
||||
lenient().when(rlpxAgent.stop()).thenReturn(CompletableFuture.completedFuture(null));
|
||||
lenient()
|
||||
.when(discoveryAgent.start(anyInt()))
|
||||
.thenReturn(CompletableFuture.completedFuture(30303));
|
||||
lenient().when(discoveryAgent.stop()).thenReturn(CompletableFuture.completedFuture(null));
|
||||
lenient()
|
||||
.when(discoveryAgent.observePeerBondedEvents(discoverySubscriberCaptor.capture()))
|
||||
.thenReturn(1L);
|
||||
|
||||
when(blockchain.observeBlockAdded(observerCaptor.capture())).thenReturn(1L);
|
||||
// Make permissions lenient by default
|
||||
lenient().when(nodePermissioningController.isPermitted(any(), any())).thenReturn(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -201,31 +188,6 @@ public final class DefaultP2PNetworkTest {
|
||||
verify(rlpxAgent, times(0)).connect(peer);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenBuildingNetworkWithNodePermissioningWithoutBlockchainShouldThrowIllegalState() {
|
||||
blockchain = null;
|
||||
final Throwable throwable = catchThrowable(this::network);
|
||||
assertThat(throwable)
|
||||
.isInstanceOf(IllegalStateException.class)
|
||||
.hasMessage(
|
||||
"Network permissioning needs to listen to BlockAddedEvents. Blockchain can't be null.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void stop_removesListeners() {
|
||||
final P2PNetwork network = network();
|
||||
|
||||
network.start();
|
||||
verify(blockchain, never()).removeObserver(anyLong());
|
||||
verify(nodePermissioningController, never()).unsubscribeFromUpdates(anyLong());
|
||||
|
||||
network.stop();
|
||||
network.awaitStop();
|
||||
|
||||
verify(blockchain, times(1)).removeObserver(anyLong());
|
||||
verify(nodePermissioningController, times(1)).unsubscribeFromUpdates(anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void beforeStartingNetworkEnodeURLShouldNotBePresent() {
|
||||
final P2PNetwork network = network();
|
||||
@@ -334,8 +296,6 @@ public final class DefaultP2PNetworkTest {
|
||||
.keyPair(keyPair)
|
||||
.maintainedPeers(maintainedPeers)
|
||||
.metricsSystem(new NoOpMetricsSystem())
|
||||
.supportedCapabilities(Capability.create("eth", 63))
|
||||
.nodePermissioningController(nodePermissioningController)
|
||||
.blockchain(blockchain);
|
||||
.supportedCapabilities(Capability.create("eth", 63));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,9 +23,9 @@ import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.config.DiscoveryConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.config.NetworkingConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.PeerDiscoveryServiceException;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.metrics.noop.NoOpMetricsSystem;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
@@ -21,8 +21,6 @@ import static org.mockito.Mockito.when;
|
||||
|
||||
import tech.pegasys.pantheon.crypto.SECP256K1;
|
||||
import tech.pegasys.pantheon.crypto.SECP256K1.KeyPair;
|
||||
import tech.pegasys.pantheon.ethereum.chain.BlockAddedObserver;
|
||||
import tech.pegasys.pantheon.ethereum.chain.Blockchain;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.config.DiscoveryConfiguration;
|
||||
@@ -30,6 +28,7 @@ import tech.pegasys.pantheon.ethereum.p2p.config.NetworkingConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.config.RlpxConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.network.exceptions.IncompatiblePeerException;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions.Action;
|
||||
@@ -37,54 +36,28 @@ import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissionsBlacklist;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.SubProtocol;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.messages.DisconnectMessage.DisconnectReason;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.LocalPermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.NodeLocalConfigPermissioningController;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningController;
|
||||
import tech.pegasys.pantheon.metrics.noop.NoOpMetricsSystem;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import io.vertx.core.Vertx;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.StrictStubs.class)
|
||||
public class P2PNetworkTest {
|
||||
|
||||
@Mock private Blockchain blockchain;
|
||||
|
||||
private ArgumentCaptor<BlockAddedObserver> observerCaptor =
|
||||
ArgumentCaptor.forClass(BlockAddedObserver.class);
|
||||
|
||||
private final Vertx vertx = Vertx.vertx();
|
||||
private final NetworkingConfiguration config =
|
||||
NetworkingConfiguration.create()
|
||||
.setDiscovery(DiscoveryConfiguration.create().setActive(false))
|
||||
.setRlpx(RlpxConfiguration.create().setBindPort(0).setSupportedProtocols(subProtocol()));
|
||||
|
||||
private final String selfEnodeString =
|
||||
"enode://5f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@192.168.0.10:1111";
|
||||
private final EnodeURL selfEnode = EnodeURL.fromString(selfEnodeString);
|
||||
|
||||
@Before
|
||||
public void before() {
|
||||
when(blockchain.observeBlockAdded(observerCaptor.capture())).thenReturn(1L);
|
||||
}
|
||||
|
||||
@After
|
||||
public void closeVertx() {
|
||||
vertx.close();
|
||||
@@ -269,71 +242,12 @@ public class P2PNetworkTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void rejectIncomingConnectionFromNonWhitelistedPeer() throws Exception {
|
||||
final LocalPermissioningConfiguration config = LocalPermissioningConfiguration.createDefault();
|
||||
final Path tempFile = Files.createTempFile("test", "test");
|
||||
tempFile.toFile().deleteOnExit();
|
||||
config.setNodePermissioningConfigFilePath(tempFile.toAbsolutePath().toString());
|
||||
|
||||
final NodeLocalConfigPermissioningController localWhitelistController =
|
||||
new NodeLocalConfigPermissioningController(
|
||||
config, Collections.emptyList(), selfEnode.getNodeId(), new NoOpMetricsSystem());
|
||||
// turn on whitelisting by adding a different node NOT remote node
|
||||
localWhitelistController.addNode(
|
||||
EnodeURL.builder()
|
||||
.ipAddress("127.0.0.1")
|
||||
.useDefaultPorts()
|
||||
.nodeId(Peer.randomId())
|
||||
.build());
|
||||
final NodePermissioningController nodePermissioningController =
|
||||
new NodePermissioningController(
|
||||
Optional.empty(), Collections.singletonList(localWhitelistController));
|
||||
|
||||
try (final P2PNetwork localNetwork =
|
||||
builder()
|
||||
.nodePermissioningController(nodePermissioningController)
|
||||
.blockchain(blockchain)
|
||||
.build();
|
||||
final P2PNetwork remoteNetwork = builder().build()) {
|
||||
|
||||
localNetwork.start();
|
||||
remoteNetwork.start();
|
||||
|
||||
final EnodeURL localEnode = localNetwork.getLocalEnode().get();
|
||||
final BytesValue localId = localEnode.getNodeId();
|
||||
final int localPort = localEnode.getListeningPort().getAsInt();
|
||||
|
||||
final Peer localPeer = createPeer(localId, localPort);
|
||||
|
||||
// Setup disconnect listener
|
||||
final CompletableFuture<PeerConnection> peerFuture = new CompletableFuture<>();
|
||||
final CompletableFuture<DisconnectReason> reasonFuture = new CompletableFuture<>();
|
||||
remoteNetwork.subscribeDisconnect(
|
||||
(peerConnection, reason, initiatedByPeer) -> {
|
||||
peerFuture.complete(peerConnection);
|
||||
reasonFuture.complete(reason);
|
||||
});
|
||||
|
||||
// Remote connect to local
|
||||
final CompletableFuture<PeerConnection> connectFuture = remoteNetwork.connect(localPeer);
|
||||
|
||||
// Check connection is made, and then a disconnect is registered at remote
|
||||
assertThat(connectFuture.get(5L, TimeUnit.SECONDS).getPeerInfo().getNodeId())
|
||||
.isEqualTo(localId);
|
||||
assertThat(peerFuture.get(5L, TimeUnit.SECONDS).getPeerInfo().getNodeId()).isEqualTo(localId);
|
||||
assertThat(reasonFuture.get(5L, TimeUnit.SECONDS))
|
||||
.isEqualByComparingTo(DisconnectReason.UNKNOWN);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void rejectIncomingConnectionFromDisallowedPeer() throws Exception {
|
||||
final PeerPermissions peerPermissions = mock(PeerPermissions.class);
|
||||
when(peerPermissions.isPermitted(any(), any(), any())).thenReturn(true);
|
||||
|
||||
try (final P2PNetwork localNetwork =
|
||||
builder().peerPermissions(peerPermissions).blockchain(blockchain).build();
|
||||
try (final P2PNetwork localNetwork = builder().peerPermissions(peerPermissions).build();
|
||||
final P2PNetwork remoteNetwork = builder().build()) {
|
||||
|
||||
localNetwork.start();
|
||||
|
||||
@@ -18,13 +18,13 @@ import static org.mockito.Mockito.when;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions.Action;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissionsBlacklist;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.PeerInfo;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.messages.DisconnectMessage.DisconnectReason;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ import tech.pegasys.pantheon.ethereum.p2p.peers.MutableLocalNode.NodeAlreadySetE
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.PeerInfo;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* 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.
|
||||
*/
|
||||
package tech.pegasys.pantheon.util.enode;
|
||||
package tech.pegasys.pantheon.ethereum.p2p.peers;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
@@ -15,8 +15,6 @@ package tech.pegasys.pantheon.ethereum.p2p.peers;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -20,7 +20,6 @@ import static tech.pegasys.pantheon.util.bytes.BytesValue.fromHexString;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.DiscoveryPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.PeerDiscoveryStatus;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import com.google.common.net.InetAddresses;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -14,7 +14,6 @@ package tech.pegasys.pantheon.ethereum.p2p.peers;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
@@ -15,8 +15,6 @@ package tech.pegasys.pantheon.ethereum.p2p.peers;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
@@ -15,9 +15,9 @@ package tech.pegasys.pantheon.ethereum.p2p.permissions;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions.Action;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -19,9 +19,9 @@ import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions.Action;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
@@ -33,6 +33,7 @@ import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection.PeerNotConnected;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.config.RlpxConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.discovery.DiscoveryPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.MutableLocalNode;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.PeerProperties;
|
||||
@@ -49,7 +50,6 @@ import tech.pegasys.pantheon.ethereum.p2p.wire.messages.PingMessage;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.metrics.noop.NoOpMetricsSystem;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -29,6 +29,7 @@ import tech.pegasys.pantheon.ethereum.p2p.network.exceptions.IncompatiblePeerExc
|
||||
import tech.pegasys.pantheon.ethereum.p2p.network.exceptions.PeerDisconnectedException;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.network.exceptions.UnexpectedPeerConnectionException;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.LocalNode;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.rlpx.connections.PeerConnectionEvents;
|
||||
@@ -47,7 +48,6 @@ import tech.pegasys.pantheon.ethereum.p2p.wire.messages.WireMessageCodes;
|
||||
import tech.pegasys.pantheon.ethereum.rlp.RLPException;
|
||||
import tech.pegasys.pantheon.metrics.noop.NoOpMetricsSystem;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -28,6 +28,7 @@ jar {
|
||||
dependencies {
|
||||
implementation project(':util')
|
||||
implementation project(':ethereum:core')
|
||||
implementation project(':ethereum:p2p')
|
||||
implementation project(':crypto')
|
||||
implementation project(':metrics:core')
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.permissioning;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningProvider;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodeWhitelistUpdatedEvent;
|
||||
import tech.pegasys.pantheon.metrics.Counter;
|
||||
@@ -19,7 +20,6 @@ import tech.pegasys.pantheon.metrics.MetricCategory;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.Subscribers;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
package tech.pegasys.pantheon.ethereum.permissioning;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.core.Synchronizer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningController;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningProvider;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.provider.SyncStatusNodePermissioningProvider;
|
||||
import tech.pegasys.pantheon.ethereum.transaction.TransactionSimulator;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
@@ -16,6 +16,7 @@ import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import tech.pegasys.pantheon.crypto.Hash;
|
||||
import tech.pegasys.pantheon.ethereum.core.Address;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningProvider;
|
||||
import tech.pegasys.pantheon.ethereum.transaction.CallParameter;
|
||||
import tech.pegasys.pantheon.ethereum.transaction.TransactionSimulator;
|
||||
@@ -25,7 +26,6 @@ import tech.pegasys.pantheon.metrics.MetricCategory;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValues;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
package tech.pegasys.pantheon.ethereum.permissioning;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.core.Address;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.List;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.permissioning.node;
|
||||
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
@@ -10,14 +10,13 @@
|
||||
* 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.
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.p2p;
|
||||
package tech.pegasys.pantheon.ethereum.permissioning.node;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.messages.DisconnectMessage.DisconnectReason;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.ContextualNodePermissioningProvider;
|
||||
import tech.pegasys.pantheon.util.Subscribers;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
@@ -12,10 +12,10 @@
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.permissioning.node;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.NodeLocalConfigPermissioningController;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.provider.SyncStatusNodePermissioningProvider;
|
||||
import tech.pegasys.pantheon.util.Subscribers;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.permissioning.node;
|
||||
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface NodePermissioningProvider {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.permissioning.node;
|
||||
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -10,16 +10,15 @@
|
||||
* 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.
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.p2p.network;
|
||||
package tech.pegasys.pantheon.ethereum.permissioning.node;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.chain.Blockchain;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningController;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.provider.SyncStatusNodePermissioningProvider;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
@@ -27,7 +26,7 @@ import java.util.Optional;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
class NodePermissioningAdapter extends PeerPermissions {
|
||||
public class PeerPermissionsAdapter extends PeerPermissions {
|
||||
private static final Logger LOG = LogManager.getLogger();
|
||||
|
||||
private final NodePermissioningController nodePermissioningController;
|
||||
@@ -36,7 +35,7 @@ class NodePermissioningAdapter extends PeerPermissions {
|
||||
private final long blockchainListenId;
|
||||
private final long nodePermissioningListenId;
|
||||
|
||||
public NodePermissioningAdapter(
|
||||
public PeerPermissionsAdapter(
|
||||
final NodePermissioningController nodePermissioningController,
|
||||
final List<EnodeURL> bootnodes,
|
||||
final Blockchain blockchain) {
|
||||
@@ -16,11 +16,11 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.core.SyncStatus;
|
||||
import tech.pegasys.pantheon.ethereum.core.Synchronizer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningProvider;
|
||||
import tech.pegasys.pantheon.metrics.Counter;
|
||||
import tech.pegasys.pantheon.metrics.MetricCategory;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
|
||||
@@ -26,11 +26,11 @@ import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static tech.pegasys.pantheon.ethereum.permissioning.NodeLocalConfigPermissioningController.NodesWhitelistResult;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodeWhitelistUpdatedEvent;
|
||||
import tech.pegasys.pantheon.metrics.Counter;
|
||||
import tech.pegasys.pantheon.metrics.MetricCategory;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
@@ -27,12 +27,12 @@ import tech.pegasys.pantheon.ethereum.chain.MutableBlockchain;
|
||||
import tech.pegasys.pantheon.ethereum.core.Address;
|
||||
import tech.pegasys.pantheon.ethereum.mainnet.MainnetProtocolSchedule;
|
||||
import tech.pegasys.pantheon.ethereum.mainnet.ProtocolSchedule;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.transaction.TransactionSimulator;
|
||||
import tech.pegasys.pantheon.ethereum.worldstate.WorldStateArchive;
|
||||
import tech.pegasys.pantheon.metrics.Counter;
|
||||
import tech.pegasys.pantheon.metrics.MetricCategory;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* 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.
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.p2p;
|
||||
package tech.pegasys.pantheon.ethereum.permissioning.node;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.mock;
|
||||
@@ -22,7 +22,7 @@ import tech.pegasys.pantheon.ethereum.p2p.api.ConnectCallback;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.DisconnectCallback;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.api.PeerConnection;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@@ -16,6 +16,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.core.Address;
|
||||
import tech.pegasys.pantheon.ethereum.core.Synchronizer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.LocalPermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.NodeLocalConfigPermissioningController;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.NodePermissioningControllerFactory;
|
||||
@@ -24,7 +25,6 @@ import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.SmartContractPermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.transaction.TransactionSimulator;
|
||||
import tech.pegasys.pantheon.metrics.noop.NoOpMetricsSystem;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
@@ -21,9 +21,9 @@ import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.NodeLocalConfigPermissioningController;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.provider.SyncStatusNodePermissioningProvider;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -10,23 +10,21 @@
|
||||
* 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.
|
||||
*/
|
||||
package tech.pegasys.pantheon.ethereum.p2p.network;
|
||||
package tech.pegasys.pantheon.ethereum.permissioning.node;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static tech.pegasys.pantheon.ethereum.p2p.peers.PeerTestHelper.createPeer;
|
||||
|
||||
import tech.pegasys.pantheon.ethereum.chain.MutableBlockchain;
|
||||
import tech.pegasys.pantheon.ethereum.core.Block;
|
||||
import tech.pegasys.pantheon.ethereum.core.BlockDataGenerator;
|
||||
import tech.pegasys.pantheon.ethereum.core.InMemoryStorageProvider;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.Peer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions.Action;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningController;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.provider.SyncStatusNodePermissioningProvider;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -34,8 +32,9 @@ import java.util.Optional;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.mockito.ArgumentMatchers;
|
||||
|
||||
public class NodePermissioningAdapterTest {
|
||||
public class PeerPermissionsAdapterTest {
|
||||
|
||||
private final Peer localNode = createPeer();
|
||||
private final Peer remoteNode = createPeer();
|
||||
@@ -45,8 +44,8 @@ public class NodePermissioningAdapterTest {
|
||||
private final MutableBlockchain blockchain =
|
||||
InMemoryStorageProvider.createInMemoryBlockchain(gen.genesisBlock());
|
||||
private final List<EnodeURL> bootNodes = new ArrayList<>();
|
||||
private final NodePermissioningAdapter adapter =
|
||||
new NodePermissioningAdapter(nodePermissioningController, bootNodes, blockchain);
|
||||
private final PeerPermissionsAdapter adapter =
|
||||
new PeerPermissionsAdapter(nodePermissioningController, bootNodes, blockchain);
|
||||
|
||||
@Test
|
||||
public void allowInPeerTable() {
|
||||
@@ -386,10 +385,21 @@ public class NodePermissioningAdapterTest {
|
||||
private void mockControllerPermissions(
|
||||
final boolean allowLocalToRemote, final boolean allowRemoteToLocal) {
|
||||
when(nodePermissioningController.isPermitted(
|
||||
eq(localNode.getEnodeURL()), eq(remoteNode.getEnodeURL())))
|
||||
ArgumentMatchers.eq(localNode.getEnodeURL()),
|
||||
ArgumentMatchers.eq(remoteNode.getEnodeURL())))
|
||||
.thenReturn(allowLocalToRemote);
|
||||
when(nodePermissioningController.isPermitted(
|
||||
eq(remoteNode.getEnodeURL()), eq(localNode.getEnodeURL())))
|
||||
ArgumentMatchers.eq(remoteNode.getEnodeURL()),
|
||||
ArgumentMatchers.eq(localNode.getEnodeURL())))
|
||||
.thenReturn(allowRemoteToLocal);
|
||||
}
|
||||
|
||||
private Peer createPeer() {
|
||||
return DefaultPeer.fromEnodeURL(
|
||||
EnodeURL.builder()
|
||||
.ipAddress("127.0.0.1")
|
||||
.nodeId(Peer.randomId())
|
||||
.useDefaultPorts()
|
||||
.build());
|
||||
}
|
||||
}
|
||||
@@ -22,10 +22,10 @@ import static org.mockito.Mockito.when;
|
||||
import tech.pegasys.pantheon.ethereum.core.SyncStatus;
|
||||
import tech.pegasys.pantheon.ethereum.core.Synchronizer;
|
||||
import tech.pegasys.pantheon.ethereum.core.Synchronizer.SyncStatusListener;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.metrics.Counter;
|
||||
import tech.pegasys.pantheon.metrics.MetricCategory;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
@@ -17,8 +17,8 @@ import tech.pegasys.pantheon.ethereum.graphql.GraphQLHttpService;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.JsonRpcHttpService;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.websocket.WebSocketService;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.NetworkRunner;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.metrics.prometheus.MetricsService;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
|
||||
@@ -49,7 +49,6 @@ import tech.pegasys.pantheon.ethereum.jsonrpc.websocket.subscription.pending.Pen
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.websocket.subscription.pending.PendingTransactionSubscriptionService;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.websocket.subscription.syncing.SyncingSubscriptionService;
|
||||
import tech.pegasys.pantheon.ethereum.mainnet.ProtocolSchedule;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.InsufficientPeersPermissioningProvider;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.NetworkRunner;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.NetworkRunner.NetworkBuilder;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.NoopP2PNetwork;
|
||||
@@ -61,6 +60,8 @@ import tech.pegasys.pantheon.ethereum.p2p.config.RlpxConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.config.SubProtocolConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.network.DefaultP2PNetwork;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.DefaultPeer;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissions;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.permissions.PeerPermissionsBlacklist;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.Capability;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.wire.SubProtocol;
|
||||
@@ -72,14 +73,15 @@ import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.SmartContractPermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.TransactionSmartContractPermissioningController;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.account.AccountPermissioningController;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.InsufficientPeersPermissioningProvider;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.NodePermissioningController;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.node.PeerPermissionsAdapter;
|
||||
import tech.pegasys.pantheon.ethereum.transaction.TransactionSimulator;
|
||||
import tech.pegasys.pantheon.ethereum.worldstate.WorldStateArchive;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
import tech.pegasys.pantheon.metrics.prometheus.MetricsConfiguration;
|
||||
import tech.pegasys.pantheon.metrics.prometheus.MetricsService;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
@@ -266,9 +268,11 @@ public class RunnerBuilder {
|
||||
buildNodePermissioningController(
|
||||
bootnodes, synchronizer, transactionSimulator, localNodeId);
|
||||
|
||||
final Optional<AccountPermissioningController> accountPermissioningController =
|
||||
buildAccountPermissioningController(
|
||||
permissioningConfiguration, pantheonController, transactionSimulator);
|
||||
final PeerPermissions peerPermissions =
|
||||
nodePermissioningController
|
||||
.map(nodePC -> new PeerPermissionsAdapter(nodePC, bootnodes, context.getBlockchain()))
|
||||
.map(nodePerms -> PeerPermissions.combine(nodePerms, bannedNodes))
|
||||
.orElse(bannedNodes);
|
||||
|
||||
NetworkBuilder inactiveNetwork = (caps) -> new NoopP2PNetwork();
|
||||
NetworkBuilder activeNetwork =
|
||||
@@ -277,11 +281,9 @@ public class RunnerBuilder {
|
||||
.vertx(vertx)
|
||||
.keyPair(keyPair)
|
||||
.config(networkConfig)
|
||||
.peerPermissions(bannedNodes)
|
||||
.peerPermissions(peerPermissions)
|
||||
.metricsSystem(metricsSystem)
|
||||
.supportedCapabilities(caps)
|
||||
.nodePermissioningController(nodePermissioningController)
|
||||
.blockchain(context.getBlockchain())
|
||||
.build();
|
||||
|
||||
final NetworkRunner networkRunner =
|
||||
@@ -313,6 +315,10 @@ public class RunnerBuilder {
|
||||
final Optional<NodeLocalConfigPermissioningController> nodeLocalConfigPermissioningController =
|
||||
nodePermissioningController.flatMap(NodePermissioningController::localConfigController);
|
||||
|
||||
final Optional<AccountPermissioningController> accountPermissioningController =
|
||||
buildAccountPermissioningController(
|
||||
permissioningConfiguration, pantheonController, transactionSimulator);
|
||||
|
||||
final Optional<AccountLocalConfigPermissioningController>
|
||||
accountLocalConfigPermissioningController =
|
||||
accountPermissioningController.flatMap(
|
||||
|
||||
@@ -18,7 +18,7 @@ import static tech.pegasys.pantheon.ethereum.p2p.config.DiscoveryConfiguration.M
|
||||
import static tech.pegasys.pantheon.ethereum.p2p.config.DiscoveryConfiguration.RINKEBY_BOOTSTRAP_NODES;
|
||||
import static tech.pegasys.pantheon.ethereum.p2p.config.DiscoveryConfiguration.ROPSTEN_BOOTSTRAP_NODES;
|
||||
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
@@ -56,6 +56,7 @@ import tech.pegasys.pantheon.ethereum.jsonrpc.RpcApi;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.RpcApis;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.websocket.WebSocketConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.config.DiscoveryConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.StaticNodesParser;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.LocalPermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfiguration;
|
||||
@@ -76,7 +77,6 @@ import tech.pegasys.pantheon.util.BlockImporter;
|
||||
import tech.pegasys.pantheon.util.InvalidConfigurationException;
|
||||
import tech.pegasys.pantheon.util.PermissioningConfigurationValidator;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.util.number.PositiveNumber;
|
||||
import tech.pegasys.pantheon.util.uint.UInt256;
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*/
|
||||
package tech.pegasys.pantheon.cli.custom;
|
||||
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.function.Function;
|
||||
|
||||
@@ -40,6 +40,7 @@ import tech.pegasys.pantheon.ethereum.jsonrpc.websocket.WebSocketConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.mainnet.HeaderValidationMode;
|
||||
import tech.pegasys.pantheon.ethereum.mainnet.ProtocolSchedule;
|
||||
import tech.pegasys.pantheon.ethereum.mainnet.ProtocolSpec;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.storage.StorageProvider;
|
||||
import tech.pegasys.pantheon.ethereum.storage.keyvalue.RocksDbStorageProvider;
|
||||
import tech.pegasys.pantheon.metrics.MetricsSystem;
|
||||
@@ -47,7 +48,6 @@ import tech.pegasys.pantheon.metrics.noop.NoOpMetricsSystem;
|
||||
import tech.pegasys.pantheon.metrics.prometheus.MetricsConfiguration;
|
||||
import tech.pegasys.pantheon.services.kvstore.RocksDbConfiguration;
|
||||
import tech.pegasys.pantheon.testutil.TestClock;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
import tech.pegasys.pantheon.util.uint.UInt256;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -45,13 +45,13 @@ import tech.pegasys.pantheon.ethereum.graphql.GraphQLConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.JsonRpcConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.RpcApi;
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.websocket.WebSocketConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.LocalPermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.SmartContractPermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.metrics.MetricCategory;
|
||||
import tech.pegasys.pantheon.metrics.prometheus.MetricsConfiguration;
|
||||
import tech.pegasys.pantheon.util.bytes.BytesValue;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -17,9 +17,9 @@ import static org.assertj.core.api.Assertions.fail;
|
||||
|
||||
import tech.pegasys.pantheon.cli.EthNetworkConfig;
|
||||
import tech.pegasys.pantheon.cli.NetworkName;
|
||||
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.LocalPermissioningConfiguration;
|
||||
import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfigurationBuilder;
|
||||
import tech.pegasys.pantheon.util.enode.EnodeURL;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
|
||||
Reference in New Issue
Block a user