From ba46d7b48ac5b18ffd29140e5f4000fd1edb0c68 Mon Sep 17 00:00:00 2001 From: Ceyhun Onur Date: Thu, 7 Dec 2023 00:11:32 +0300 Subject: [PATCH] prepare release v0.5.10 (#1019) * bump versions * change p2p network code * Revert "change p2p network code" This reverts commit 02add5300a6da68b1590598ad7a65af1c99a0156. * Use `p2p.Network` (#384) --------- Co-authored-by: Joshua Kim <20001595+joshua-kim@users.noreply.github.com> --- README.md | 3 ++- compatibility.json | 1 + go.mod | 4 +-- go.sum | 8 +++--- peer/network.go | 52 +++++++++++++++++++++--------------- peer/network_test.go | 38 +++++++++++++------------- plugin/evm/tx_gossip_test.go | 15 +++++------ plugin/evm/version.go | 2 +- plugin/evm/vm.go | 9 +++---- scripts/versions.sh | 2 +- 10 files changed, 71 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index a203d34d..6f1fee5b 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,8 @@ The Subnet EVM runs in a separate process from the main AvalancheGo process and [v0.5.6] AvalancheGo@v1.10.9-v1.10.12 (Protocol Version: 28) [v0.5.7] AvalancheGo@v1.10.13-v1.10.14 (Protocol Version: 29) [v0.5.8] AvalancheGo@v1.10.13-v1.10.14 (Protocol Version: 29) -[v0.5.9] AvalancheGo@v1.10.15 (Protocol Version: 30) +[v0.5.9] AvalancheGo@v1.10.15-v1.10.17 (Protocol Version: 30) +[v0.5.10] AvalancheGo@v1.10.15-v1.10.17 (Protocol Version: 30) ``` ## API diff --git a/compatibility.json b/compatibility.json index 6a7d83f3..23895c4b 100644 --- a/compatibility.json +++ b/compatibility.json @@ -1,5 +1,6 @@ { "rpcChainVMProtocolVersion": { + "v0.5.10": 30, "v0.5.9": 30, "v0.5.8": 29, "v0.5.7": 29, diff --git a/go.mod b/go.mod index fcf11c34..d04b5547 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.20 require ( github.com/VictoriaMetrics/fastcache v1.10.0 github.com/ava-labs/avalanche-network-runner v1.7.4-0.20231127162258-2f3ceed8ae4b - github.com/ava-labs/avalanchego v1.10.17-rc.14 + github.com/ava-labs/avalanchego v1.10.17 github.com/cespare/cp v0.1.0 github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 github.com/davecgh/go-spew v1.1.1 @@ -57,7 +57,7 @@ require ( github.com/DataDog/zstd v1.5.2 // indirect github.com/Microsoft/go-winio v0.5.2 // indirect github.com/NYTimes/gziphandler v1.1.1 // indirect - github.com/ava-labs/coreth v0.12.9-rc.6 // indirect + github.com/ava-labs/coreth v0.12.9-rc.9 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.7.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect diff --git a/go.sum b/go.sum index c8fb4853..5ac902da 100644 --- a/go.sum +++ b/go.sum @@ -61,10 +61,10 @@ github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kd github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/ava-labs/avalanche-network-runner v1.7.4-0.20231127162258-2f3ceed8ae4b h1:iH6q+S7dmBOYCXrZx+nNlS1HBp72L2msiVCLs39Ls5A= github.com/ava-labs/avalanche-network-runner v1.7.4-0.20231127162258-2f3ceed8ae4b/go.mod h1:aeAm8dgJ1xucQKlYoRDMgYjA0UWGwmaICG9wL0WvseU= -github.com/ava-labs/avalanchego v1.10.17-rc.14 h1:d/FqLg1imOxw+g4FnsWA1OjxBJxKkHbu945BTDoMtiQ= -github.com/ava-labs/avalanchego v1.10.17-rc.14/go.mod h1:jSoodApNsJJCMAdUhzVXFrzq8QyBdVHJAwx5A46yd8w= -github.com/ava-labs/coreth v0.12.9-rc.6 h1:GD+slRi9FrGDB8H9TNEIXAs8BnFVd2IrgrNonFnV+Dk= -github.com/ava-labs/coreth v0.12.9-rc.6/go.mod h1:rECKQfGFDeodrwGPlJSvFUJDbVr30jSMIVjQLi6pNX4= +github.com/ava-labs/avalanchego v1.10.17 h1:Ri01nU5ukKC38ZCkCh3namaMZtJkSuv1X/vC13uJguc= +github.com/ava-labs/avalanchego v1.10.17/go.mod h1:A6f3877qlq7bePjCU4T0D60bZGecRMCk15pMpJGOb4Q= +github.com/ava-labs/coreth v0.12.9-rc.9 h1:mvYxABdyPByXwwwIxnTBCiNO23dsE1Kfnd5H106lric= +github.com/ava-labs/coreth v0.12.9-rc.9/go.mod h1:yrf2vEah4Fgj6sJ4UpHewo4DLolwdpf2bJuLRT80PGw= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= diff --git a/peer/network.go b/peer/network.go index 2f043df7..e10ab736 100644 --- a/peer/network.go +++ b/peer/network.go @@ -77,6 +77,10 @@ type Network interface { // TrackBandwidth should be called for each valid request with the bandwidth // (length of response divided by request time), and with 0 if the response is invalid. TrackBandwidth(nodeID ids.NodeID, bandwidth float64) + + // NewAppProtocol reserves a protocol identifier and returns a corresponding + // client to send messages with + NewAppProtocol(protocol uint64, handler p2p.Handler, options ...p2p.ClientOption) (*p2p.Client, error) } // network is an implementation of Network that processes message requests for @@ -88,16 +92,16 @@ type network struct { outstandingRequestHandlers map[uint32]message.ResponseHandler // maps avalanchego requestID => message.ResponseHandler activeAppRequests *semaphore.Weighted // controls maximum number of active outbound requests activeCrossChainRequests *semaphore.Weighted // controls maximum number of active outbound cross chain requests - router *p2p.Router // handles messages being sent to the generic networking SDK - appSender common.AppSender // avalanchego AppSender for sending messages - codec codec.Manager // Codec used for parsing messages - crossChainCodec codec.Manager // Codec used for parsing cross chain messages - appRequestHandler message.RequestHandler // maps request type => handler - crossChainRequestHandler message.CrossChainRequestHandler // maps cross chain request type => handler - gossipHandler message.GossipHandler // maps gossip type => handler - peers *peerTracker // tracking of peers & bandwidth - appStats stats.RequestHandlerStats // Provide request handler metrics - crossChainStats stats.RequestHandlerStats // Provide cross chain request handler metrics + network *p2p.Network + appSender common.AppSender // avalanchego AppSender for sending messages + codec codec.Manager // Codec used for parsing messages + crossChainCodec codec.Manager // Codec used for parsing cross chain messages + appRequestHandler message.RequestHandler // maps request type => handler + crossChainRequestHandler message.CrossChainRequestHandler // maps cross chain request type => handler + gossipHandler message.GossipHandler // maps gossip type => handler + peers *peerTracker // tracking of peers & bandwidth + appStats stats.RequestHandlerStats // Provide request handler metrics + crossChainStats stats.RequestHandlerStats // Provide cross chain request handler metrics // Set to true when Shutdown is called, after which all operations on this // struct are no-ops. @@ -110,9 +114,8 @@ type network struct { closed utils.Atomic[bool] } -func NewNetwork(router *p2p.Router, appSender common.AppSender, codec codec.Manager, crossChainCodec codec.Manager, self ids.NodeID, maxActiveAppRequests int64, maxActiveCrossChainRequests int64) Network { +func NewNetwork(p2pNetwork *p2p.Network, appSender common.AppSender, codec codec.Manager, crossChainCodec codec.Manager, self ids.NodeID, maxActiveAppRequests int64, maxActiveCrossChainRequests int64) Network { return &network{ - router: router, appSender: appSender, codec: codec, crossChainCodec: crossChainCodec, @@ -120,6 +123,7 @@ func NewNetwork(router *p2p.Router, appSender common.AppSender, codec codec.Mana outstandingRequestHandlers: make(map[uint32]message.ResponseHandler), activeAppRequests: semaphore.NewWeighted(maxActiveAppRequests), activeCrossChainRequests: semaphore.NewWeighted(maxActiveCrossChainRequests), + network: p2pNetwork, gossipHandler: message.NoopMempoolGossipHandler{}, appRequestHandler: message.NoopRequestHandler{}, crossChainRequestHandler: message.NoopCrossChainRequestHandler{}, @@ -326,8 +330,8 @@ func (n *network) AppRequest(ctx context.Context, nodeID ids.NodeID, requestID u var req message.Request if _, err := n.codec.Unmarshal(request, &req); err != nil { - log.Trace("forwarding AppRequest to SDK router", "nodeID", nodeID, "requestID", requestID, "requestLen", len(request), "err", err) - return n.router.AppRequest(ctx, nodeID, requestID, deadline, request) + log.Trace("forwarding AppRequest to SDK network", "nodeID", nodeID, "requestID", requestID, "requestLen", len(request), "err", err) + return n.network.AppRequest(ctx, nodeID, requestID, deadline, request) } bufferedDeadline, err := calculateTimeUntilDeadline(deadline, n.appStats) @@ -362,8 +366,8 @@ func (n *network) AppResponse(ctx context.Context, nodeID ids.NodeID, requestID handler, exists := n.markRequestFulfilled(requestID) if !exists { - log.Trace("forwarding AppResponse to SDK router", "nodeID", nodeID, "requestID", requestID, "responseLen", len(response)) - return n.router.AppResponse(ctx, nodeID, requestID, response) + log.Trace("forwarding AppResponse to SDK network", "nodeID", nodeID, "requestID", requestID, "responseLen", len(response)) + return n.network.AppResponse(ctx, nodeID, requestID, response) } // We must release the slot @@ -383,8 +387,8 @@ func (n *network) AppRequestFailed(ctx context.Context, nodeID ids.NodeID, reque handler, exists := n.markRequestFulfilled(requestID) if !exists { - log.Trace("forwarding AppRequestFailed to SDK router", "nodeID", nodeID, "requestID", requestID) - return n.router.AppRequestFailed(ctx, nodeID, requestID) + log.Trace("forwarding AppRequestFailed to SDK network", "nodeID", nodeID, "requestID", requestID) + return n.network.AppRequestFailed(ctx, nodeID, requestID) } // We must release the slot @@ -456,7 +460,7 @@ func (n *network) AppGossip(_ context.Context, nodeID ids.NodeID, gossipBytes [] } // Connected adds the given nodeID to the peer list so that it can receive messages -func (n *network) Connected(_ context.Context, nodeID ids.NodeID, nodeVersion *version.Application) error { +func (n *network) Connected(ctx context.Context, nodeID ids.NodeID, nodeVersion *version.Application) error { n.lock.Lock() defer n.lock.Unlock() @@ -469,11 +473,11 @@ func (n *network) Connected(_ context.Context, nodeID ids.NodeID, nodeVersion *v } n.peers.Connected(nodeID, nodeVersion) - return nil + return n.network.Connected(ctx, nodeID, nodeVersion) } // Disconnected removes given [nodeID] from the peer list -func (n *network) Disconnected(_ context.Context, nodeID ids.NodeID) error { +func (n *network) Disconnected(ctx context.Context, nodeID ids.NodeID) error { n.lock.Lock() defer n.lock.Unlock() @@ -482,7 +486,7 @@ func (n *network) Disconnected(_ context.Context, nodeID ids.NodeID) error { } n.peers.Disconnected(nodeID) - return nil + return n.network.Disconnected(ctx, nodeID) } // Shutdown disconnects all peers @@ -535,6 +539,10 @@ func (n *network) TrackBandwidth(nodeID ids.NodeID, bandwidth float64) { n.peers.TrackBandwidth(nodeID, bandwidth) } +func (n *network) NewAppProtocol(protocol uint64, handler p2p.Handler, options ...p2p.ClientOption) (*p2p.Client, error) { + return n.network.NewAppProtocol(protocol, handler, options...) +} + // invariant: peer/network must use explicitly even request ids. // for this reason, [n.requestID] is initialized as zero and incremented by 2. // This is for backwards-compatibility while the SDK router exists with the diff --git a/peer/network_test.go b/peer/network_test.go index 66c53766..260d54b4 100644 --- a/peer/network_test.go +++ b/peer/network_test.go @@ -57,7 +57,7 @@ var ( func TestNetworkDoesNotConnectToItself(t *testing.T) { selfNodeID := ids.GenerateTestNodeID() - n := NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), nil, nil, nil, selfNodeID, 1, 1) + n := NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), nil, nil, nil, selfNodeID, 1, 1) assert.NoError(t, n.Connected(context.Background(), selfNodeID, defaultPeerVersion)) assert.EqualValues(t, 0, n.Size()) } @@ -93,7 +93,7 @@ func TestRequestAnyRequestsRoutingAndResponse(t *testing.T) { codecManager := buildCodec(t, HelloRequest{}, HelloResponse{}) crossChainCodecManager := buildCodec(t, ExampleCrossChainRequest{}, ExampleCrossChainResponse{}) - net = NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 16, 16) + net = NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 16, 16) net.SetRequestHandler(&HelloGreetingRequestHandler{codec: codecManager}) client := NewNetworkClient(net) nodeID := ids.GenerateTestNodeID() @@ -145,7 +145,7 @@ func TestAppRequestOnCtxCancellation(t *testing.T) { }, } - net := NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + net := NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) net.SetRequestHandler(&HelloGreetingRequestHandler{codec: codecManager}) requestMessage := HelloRequest{Message: "this is a request"} @@ -197,7 +197,7 @@ func TestRequestRequestsRoutingAndResponse(t *testing.T) { codecManager := buildCodec(t, HelloRequest{}, HelloResponse{}) crossChainCodecManager := buildCodec(t, ExampleCrossChainRequest{}, ExampleCrossChainResponse{}) - net = NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 16, 16) + net = NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 16, 16) net.SetRequestHandler(&HelloGreetingRequestHandler{codec: codecManager}) client := NewNetworkClient(net) @@ -277,7 +277,7 @@ func TestAppRequestOnShutdown(t *testing.T) { codecManager := buildCodec(t, HelloRequest{}, HelloResponse{}) crossChainCodecManager := buildCodec(t, ExampleCrossChainRequest{}, ExampleCrossChainResponse{}) - net = NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + net = NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) client := NewNetworkClient(net) nodeID := ids.GenerateTestNodeID() require.NoError(t, net.Connected(context.Background(), nodeID, defaultPeerVersion)) @@ -326,7 +326,7 @@ func TestAppRequestAnyOnCtxCancellation(t *testing.T) { }, } - net := NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + net := NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) net.SetRequestHandler(&HelloGreetingRequestHandler{codec: codecManager}) assert.NoError(t, net.Connected( @@ -403,7 +403,7 @@ func TestRequestMinVersion(t *testing.T) { // passing nil as codec works because the net.AppRequest is never called crossChainCodecManager := buildCodec(t, ExampleCrossChainRequest{}, ExampleCrossChainResponse{}) - net = NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 16) + net = NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 16) client := NewNetworkClient(net) requestMessage := TestMessage{Message: "this is a request"} requestBytes, err := message.RequestToBytes(codecManager, requestMessage) @@ -467,7 +467,7 @@ func TestOnRequestHonoursDeadline(t *testing.T) { processingDuration: 500 * time.Millisecond, } - net = NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + net = NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) net.SetRequestHandler(requestHandler) nodeID := ids.GenerateTestNodeID() @@ -507,7 +507,7 @@ func TestGossip(t *testing.T) { } gossipHandler := &testGossipHandler{} - clientNetwork = NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + clientNetwork = NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) clientNetwork.SetGossipHandler(gossipHandler) assert.NoError(t, clientNetwork.Connected(context.Background(), nodeID, defaultPeerVersion)) @@ -534,7 +534,7 @@ func TestHandleInvalidMessages(t *testing.T) { requestID := uint32(1) sender := testAppSender{} - clientNetwork := NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + clientNetwork := NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) clientNetwork.SetGossipHandler(message.NoopMempoolGossipHandler{}) clientNetwork.SetRequestHandler(&testRequestHandler{}) @@ -583,7 +583,7 @@ func TestNetworkPropagatesRequestHandlerError(t *testing.T) { requestID := uint32(1) sender := testAppSender{} - clientNetwork := NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + clientNetwork := NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) clientNetwork.SetGossipHandler(message.NoopMempoolGossipHandler{}) clientNetwork.SetRequestHandler(&testRequestHandler{err: errors.New("fail")}) // Return an error from the request handler @@ -623,7 +623,7 @@ func TestCrossChainAppRequest(t *testing.T) { }, } - net = NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + net = NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) net.SetCrossChainRequestHandler(&testCrossChainHandler{codec: crossChainCodecManager}) client := NewNetworkClient(net) @@ -658,7 +658,7 @@ func TestCrossChainAppRequestOnCtxCancellation(t *testing.T) { }, } - net := NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + net := NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) net.SetCrossChainRequestHandler(&testCrossChainHandler{codec: crossChainCodecManager}) exampleCrossChainRequest := ExampleCrossChainRequest{ @@ -710,7 +710,7 @@ func TestCrossChainRequestRequestsRoutingAndResponse(t *testing.T) { codecManager := buildCodec(t, TestMessage{}) crossChainCodecManager := buildCodec(t, ExampleCrossChainRequest{}, ExampleCrossChainResponse{}) - net = NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + net = NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) net.SetCrossChainRequestHandler(&testCrossChainHandler{codec: crossChainCodecManager}) client := NewNetworkClient(net) @@ -770,7 +770,7 @@ func TestCrossChainRequestOnShutdown(t *testing.T) { } codecManager := buildCodec(t, TestMessage{}) crossChainCodecManager := buildCodec(t, ExampleCrossChainRequest{}, ExampleCrossChainResponse{}) - net = NewNetwork(p2p.NewRouter(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) + net = NewNetwork(p2p.NewNetwork(logging.NoLog{}, nil, prometheus.NewRegistry(), ""), sender, codecManager, crossChainCodecManager, ids.EmptyNodeID, 1, 1) client := NewNetworkClient(net) exampleCrossChainRequest := ExampleCrossChainRequest{ @@ -811,7 +811,7 @@ func TestNetworkCrossChainAppRequestAfterShutdown(t *testing.T) { require.NoError(net.SendCrossChainRequest(context.Background(), ids.GenerateTestID(), nil, nil)) } -func TestSDKRouting(t *testing.T) { +func TestNetworkRouting(t *testing.T) { require := require.New(t) sender := &testAppSender{ sendAppRequestFn: func(_ context.Context, s set.Set[ids.NodeID], u uint32, bytes []byte) error { @@ -823,15 +823,15 @@ func TestSDKRouting(t *testing.T) { } protocol := 0 handler := &testSDKHandler{} - router := p2p.NewRouter(logging.NoLog{}, sender, prometheus.NewRegistry(), "") - _, err := router.RegisterAppProtocol(uint64(protocol), handler, nil) + p2pNetwork := p2p.NewNetwork(logging.NoLog{}, sender, prometheus.NewRegistry(), "") + _, err := p2pNetwork.NewAppProtocol(uint64(protocol), handler) require.NoError(err) networkCodec := codec.NewManager(0) crossChainCodec := codec.NewManager(0) network := NewNetwork( - router, + p2pNetwork, nil, networkCodec, crossChainCodec, diff --git a/plugin/evm/tx_gossip_test.go b/plugin/evm/tx_gossip_test.go index 10d0993e..b4815359 100644 --- a/plugin/evm/tx_gossip_test.go +++ b/plugin/evm/tx_gossip_test.go @@ -22,8 +22,6 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/stretchr/testify/require" - "go.uber.org/mock/gomock" - "google.golang.org/protobuf/proto" "github.com/ava-labs/subnet-evm/core/types" @@ -39,12 +37,11 @@ func TestTxGossip(t *testing.T) { }() // sender for the peer requesting gossip from [vm] - ctrl := gomock.NewController(t) - peerSender := common.NewMockSender(ctrl) - router := p2p.NewRouter(logging.NoLog{}, peerSender, prometheus.NewRegistry(), "") + peerSender := &common.SenderTest{} + router := p2p.NewNetwork(logging.NoLog{}, peerSender, prometheus.NewRegistry(), "") // we're only making client requests, so we don't need a server handler - client, err := router.RegisterAppProtocol(txGossipProtocol, nil, nil) + client, err := router.NewAppProtocol(txGossipProtocol, nil) require.NoError(err) emptyBloomFilter, err := gossip.NewBloomFilter(txGossipBloomMaxItems, txGossipBloomFalsePositiveRate) @@ -62,11 +59,12 @@ func TestTxGossip(t *testing.T) { wg := &sync.WaitGroup{} requestingNodeID := ids.GenerateTestNodeID() - peerSender.EXPECT().SendAppRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(ctx context.Context, nodeIDs set.Set[ids.NodeID], requestID uint32, appRequestBytes []byte) { + peerSender.SendAppRequestF = func(ctx context.Context, nodeIDs set.Set[ids.NodeID], requestID uint32, appRequestBytes []byte) error { go func() { require.NoError(vm.AppRequest(ctx, requestingNodeID, requestID, time.Time{}, appRequestBytes)) }() - }).AnyTimes() + return nil + } sender.SendAppResponseF = func(ctx context.Context, nodeID ids.NodeID, requestID uint32, appResponseBytes []byte) error { go func() { @@ -76,6 +74,7 @@ func TestTxGossip(t *testing.T) { } // we only accept gossip requests from validators + require.NoError(vm.Network.Connected(context.Background(), requestingNodeID, nil)) mockValidatorSet, ok := vm.ctx.ValidatorState.(*validators.TestState) require.True(ok) mockValidatorSet.GetCurrentHeightF = func(context.Context) (uint64, error) { diff --git a/plugin/evm/version.go b/plugin/evm/version.go index b0d5c2c4..202e74d8 100644 --- a/plugin/evm/version.go +++ b/plugin/evm/version.go @@ -11,7 +11,7 @@ var ( // GitCommit is set by the build script GitCommit string // Version is the version of Subnet EVM - Version string = "v0.5.9" + Version string = "v0.5.10" ) func init() { diff --git a/plugin/evm/vm.go b/plugin/evm/vm.go index 5546cdc4..cc8ba2cf 100644 --- a/plugin/evm/vm.go +++ b/plugin/evm/vm.go @@ -233,7 +233,6 @@ type VM struct { networkCodec codec.Manager validators *p2p.Validators - router *p2p.Router // Metrics multiGatherer avalanchegoMetrics.MultiGatherer @@ -460,10 +459,10 @@ func (vm *VM) Initialize( } // initialize peer network - vm.validators = p2p.NewValidators(vm.ctx.Log, vm.ctx.SubnetID, vm.ctx.ValidatorState, maxValidatorSetStaleness) - vm.router = p2p.NewRouter(vm.ctx.Log, appSender, vm.sdkMetrics, "p2p") + p2pNetwork := p2p.NewNetwork(vm.ctx.Log, appSender, vm.sdkMetrics, "p2p") + vm.validators = p2p.NewValidators(p2pNetwork.Peers, vm.ctx.Log, vm.ctx.SubnetID, vm.ctx.ValidatorState, maxValidatorSetStaleness) vm.networkCodec = message.Codec - vm.Network = peer.NewNetwork(vm.router, appSender, vm.networkCodec, message.CrossChainCodec, chainCtx.NodeID, vm.config.MaxOutboundActiveRequests, vm.config.MaxOutboundActiveCrossChainRequests) + vm.Network = peer.NewNetwork(p2pNetwork, appSender, vm.networkCodec, message.CrossChainCodec, chainCtx.NodeID, vm.config.MaxOutboundActiveRequests, vm.config.MaxOutboundActiveCrossChainRequests) vm.client = peer.NewNetworkClient(vm.Network) // initialize warp backend @@ -687,7 +686,7 @@ func (vm *VM) initBlockBuilding() error { Handler: txGossipHandler, }, } - txGossipClient, err := vm.router.RegisterAppProtocol(txGossipProtocol, txGossipHandler, vm.validators) + txGossipClient, err := vm.Network.NewAppProtocol(txGossipProtocol, txGossipHandler, p2p.WithValidatorSampling(vm.validators)) if err != nil { return err } diff --git a/scripts/versions.sh b/scripts/versions.sh index 48a11514..f9125a2b 100644 --- a/scripts/versions.sh +++ b/scripts/versions.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Don't export them as they're used in the context of other calls -AVALANCHE_VERSION=${AVALANCHE_VERSION:-'v1.10.17-rc.14'} +AVALANCHE_VERSION=${AVALANCHE_VERSION:-'v1.10.17'} GINKGO_VERSION=${GINKGO_VERSION:-'v2.2.0'} # This won't be used, but it's here to make code syncs easier