From 9097839be74c775ea6ccb747c15a9dac954de0eb Mon Sep 17 00:00:00 2001 From: Felipe Madero Date: Mon, 14 Oct 2024 21:31:01 -0300 Subject: [PATCH 1/3] peers diff --- cmd/blockchaincmd/deploy.go | 88 +++++++++++++++++++ cmd/contractcmd/init_poa_validator_manager.go | 5 ++ go.mod | 2 +- go.sum | 2 + pkg/validatormanager/validatormanager.go | 5 ++ sdk/interchain/signature-aggregator.go | 22 +++-- 6 files changed, 117 insertions(+), 7 deletions(-) diff --git a/cmd/blockchaincmd/deploy.go b/cmd/blockchaincmd/deploy.go index 57b9e0913..5c77f5916 100644 --- a/cmd/blockchaincmd/deploy.go +++ b/cmd/blockchaincmd/deploy.go @@ -12,12 +12,14 @@ import ( "time" "github.com/ava-labs/avalanche-cli/pkg/node" + "github.com/ava-labs/avalanchego/network/peer" "github.com/ava-labs/avalanchego/vms/platformvm/warp/message" "github.com/ethereum/go-ethereum/common" "github.com/ava-labs/avalanche-cli/pkg/contract" "github.com/ava-labs/avalanche-cli/pkg/utils" + "github.com/ava-labs/avalanchego/api/info" "github.com/ava-labs/avalanchego/utils/formatting/address" "github.com/ava-labs/avalanchego/vms/platformvm/fx" "github.com/ava-labs/avalanchego/vms/platformvm/signer" @@ -734,6 +736,10 @@ func deployBlockchain(cmd *cobra.Command, args []string) error { if err != nil { return err } + extraAggregatorPeers, err := GetAggregatorExtraPeerEndpoints(network) + if err != nil { + return err + } if err := validatormanager.SetupPoA( app, network, @@ -744,6 +750,7 @@ func deployBlockchain(cmd *cobra.Command, args []string) error { genesisPrivateKey, common.HexToAddress(sidecar.PoAValidatorManagerOwner), avaGoBootstrapValidators, + extraAggregatorPeers, ); err != nil { return err } @@ -1016,3 +1023,84 @@ func LoadBootstrapValidator(filepath string) ([]models.SubnetValidator, error) { } return subnetValidators, nil } + +func UrisToPeers(uris []string) ([]info.Peer, error) { + peers := []info.Peer{} + ctx, cancel := utils.GetANRContext() + defer cancel() + for _, uri := range uris { + client := info.NewClient(uri) + nodeID, _, err := client.GetNodeID(ctx) + if err != nil { + return nil, err + } + ip, err := client.GetNodeIP(ctx) + if err != nil { + return nil, err + } + peers = append(peers, info.Peer{ + Info: peer.Info{ + ID: nodeID, + PublicIP: ip, + }, + }) + } + return peers, nil +} + +func GetAggregatorExtraPeerEndpoints(network models.Network) ([]info.Peer, error) { + aggregatorExtraPeerEndpointsUris, err := GetAggregatorExtraPeerEndpointsUris(network) + if err != nil { + return nil, err + } + aggregatorPeers, err := UrisToPeers(aggregatorExtraPeerEndpointsUris) + if err != nil { + return nil, err + } + for _, uri := range aggregatorExtraPeerEndpointsUris { + infoClient := info.NewClient(uri) + ctx, cancel := utils.GetAPILargeContext() + defer cancel() + peers, err := infoClient.Peers(ctx) + if err != nil { + return nil, err + } + aggregatorPeers = append(aggregatorPeers, peers...) + } + return aggregatorPeers, nil +} + +func GetAggregatorExtraPeerEndpointsUris(network models.Network) ([]string, error) { + aggregatorExtraPeerEndpointsUris := []string{} + if network.ClusterName != "" { + clustersConfig, err := app.LoadClustersConfig() + if err != nil { + return nil, err + } + clusterConfig := clustersConfig.Clusters[network.ClusterName] + _ = clusterConfig + // MAKE THIS TO RETURN THE URI/URIS OF YOUR DEVNET + /* + if clusterConfig.Local { + cli, err := binutils.NewGRPCClientWithEndpoint( + binutils.LocalClusterGRPCServerEndpoint, + binutils.WithAvoidRPCVersionCheck(true), + binutils.WithDialTimeout(constants.FastGRPCDialTimeout), + ) + if err != nil { + return nil, err + } + ctx, cancel := utils.GetANRContext() + defer cancel() + status, err := cli.Status(ctx) + if err != nil { + return nil, err + } + for _, nodeInfo := range status.ClusterInfo.NodeInfos { + aggregatorExtraPeerEndpointsUris = append(aggregatorExtraPeerEndpointsUris, nodeInfo.Uri) + } + } + */ + } + return aggregatorExtraPeerEndpointsUris, nil +} diff --git a/cmd/contractcmd/init_poa_validator_manager.go b/cmd/contractcmd/init_poa_validator_manager.go index 940f56290..42fd033fe 100644 --- a/cmd/contractcmd/init_poa_validator_manager.go +++ b/cmd/contractcmd/init_poa_validator_manager.go @@ -116,6 +116,10 @@ func initPOAManager(_ *cobra.Command, args []string) error { if err != nil { return err } + extraAggregatorPeers, err := blockchaincmd.GetAggregatorExtraPeerEndpoints(network) + if err != nil { + return err + } if err := validatormanager.SetupPoA( app, network, @@ -124,6 +128,7 @@ func initPOAManager(_ *cobra.Command, args []string) error { privateKey, common.HexToAddress(sc.PoAValidatorManagerOwner), avaGoBootstrapValidators, + extraAggregatorPeers, ); err != nil { return err } diff --git a/go.mod b/go.mod index 743d658dc..05f501cb2 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/ava-labs/apm v1.0.0 github.com/ava-labs/avalanche-network-runner v1.8.4-0.20241005224128-cc3c07bb1344 github.com/ava-labs/avalanchego v1.12.0-initial-poc.5 - github.com/ava-labs/awm-relayer v1.4.1-0.20241003162124-807fd305670f + github.com/ava-labs/awm-relayer v1.4.1-0.20241014222901-4b34ab86afd0 github.com/ava-labs/coreth v0.13.8 github.com/ava-labs/subnet-evm v0.6.10 github.com/aws/aws-sdk-go-v2 v1.31.0 diff --git a/go.sum b/go.sum index fec835498..5275aa5ba 100644 --- a/go.sum +++ b/go.sum @@ -89,6 +89,8 @@ github.com/ava-labs/avalanchego v1.12.0-initial-poc.5 h1:gW4xAqZNvkA4gP8M9yDyd7Y github.com/ava-labs/avalanchego v1.12.0-initial-poc.5/go.mod h1:qSHmog3wMVjo/ruIAQo0ppXAilyni07NIu5K88RyhWE= github.com/ava-labs/awm-relayer v1.4.1-0.20241003162124-807fd305670f h1:YUQF1wQJeEcTMC5W/OrwgSFTFMS4zeCM8O02rLeEDow= github.com/ava-labs/awm-relayer v1.4.1-0.20241003162124-807fd305670f/go.mod h1:K01Md6zPkOFRWeQyxmZ/t9HJfoNgUGqa1L8rOp35GXw= +github.com/ava-labs/awm-relayer v1.4.1-0.20241014222901-4b34ab86afd0 h1:zsoK+TbXg/XOTXd+PXRrF6aGmpilcunfpcw/McPVBho= +github.com/ava-labs/awm-relayer v1.4.1-0.20241014222901-4b34ab86afd0/go.mod h1:K01Md6zPkOFRWeQyxmZ/t9HJfoNgUGqa1L8rOp35GXw= github.com/ava-labs/coreth v0.13.8 h1:f14X3KgwHl9LwzfxlN6S4bbn5VA2rhEsNnHaRLSTo/8= github.com/ava-labs/coreth v0.13.8/go.mod h1:t3BSv/eQv0AlDPMfEDCMMoD/jq1RkUsbFzQAFg5qBcE= github.com/ava-labs/ledger-avalanche/go v0.0.0-20240610153809-9c955cc90a95 h1:dOVbtdnZL++pENdTCNZ1nu41eYDQkTML4sWebDnnq8c= diff --git a/pkg/validatormanager/validatormanager.go b/pkg/validatormanager/validatormanager.go index 05f61f80b..0b0e1eb07 100644 --- a/pkg/validatormanager/validatormanager.go +++ b/pkg/validatormanager/validatormanager.go @@ -13,6 +13,7 @@ import ( "github.com/ava-labs/avalanche-cli/pkg/evm" "github.com/ava-labs/avalanche-cli/pkg/models" "github.com/ava-labs/avalanche-cli/sdk/interchain" + "github.com/ava-labs/avalanchego/api/info" "github.com/ava-labs/avalanchego/ids" avagoconstants "github.com/ava-labs/avalanchego/utils/constants" "github.com/ava-labs/avalanchego/utils/logging" @@ -102,6 +103,7 @@ func PoaValidatorManagerGetPChainSubnetConversionWarpMessage( managerBlockchainID ids.ID, managerAddress common.Address, convertSubnetValidators []*txs.ConvertSubnetValidator, + extraAggregatorPeers []info.Peer, ) (*warp.Message, error) { validators := []warpMessage.SubnetConversionValidatorData{} for _, convertSubnetValidator := range convertSubnetValidators { @@ -146,6 +148,7 @@ func PoaValidatorManagerGetPChainSubnetConversionWarpMessage( aggregatorLogLevel, subnetID, aggregatorQuorumPercentage, + extraAggregatorPeers, ) if err != nil { return nil, err @@ -216,6 +219,7 @@ func SetupPoA( privateKey string, ownerAddress common.Address, convertSubnetValidators []*txs.ConvertSubnetValidator, + extraAggregatorPeers []info.Peer, ) error { if err := evm.SetupProposerVM( rpcURL, @@ -259,6 +263,7 @@ func SetupPoA( blockchainID, managerAddress, convertSubnetValidators, + extraAggregatorPeers, ) if err != nil { return fmt.Errorf("failure signing subnet conversion warp message: %w", err) diff --git a/sdk/interchain/signature-aggregator.go b/sdk/interchain/signature-aggregator.go index 00d8840dc..8bbb09a56 100644 --- a/sdk/interchain/signature-aggregator.go +++ b/sdk/interchain/signature-aggregator.go @@ -8,6 +8,7 @@ import ( "time" "github.com/ava-labs/avalanche-cli/pkg/models" + "github.com/ava-labs/avalanchego/api/info" "github.com/ava-labs/avalanchego/ids" "github.com/ava-labs/avalanchego/message" "github.com/ava-labs/avalanchego/utils/constants" @@ -45,11 +46,17 @@ type SignatureAggregator struct { // Returns: // - peers.AppRequestNetwork: The created AppRequestNetwork, or nil if an error occurred. // - error: An error if the creation of the AppRequestNetwork failed. -func createAppRequestNetwork(network models.Network, logLevel logging.Level) (peers.AppRequestNetwork, error) { +func createAppRequestNetwork( + network models.Network, + logLevel logging.Level, + registerer prometheus.Registerer, + extraPeerEndpoints []info.Peer, +) (peers.AppRequestNetwork, error) { peerNetwork, err := peers.NewNetwork( logLevel, - prometheus.DefaultRegisterer, + registerer, nil, + extraPeerEndpoints, &config.Config{ PChainAPI: &apiConfig.APIConfig{ BaseURL: network.Endpoint, @@ -76,6 +83,7 @@ func createAppRequestNetwork(network models.Network, logLevel logging.Level) (pe func initSignatureAggregator( network peers.AppRequestNetwork, logger logging.Logger, + registerer prometheus.Registerer, subnetID ids.ID, quorumPercentage uint64, ) (*SignatureAggregator, error) { @@ -91,7 +99,7 @@ func initSignatureAggregator( messageCreator, err := message.NewCreator( logger, - prometheus.DefaultRegisterer, + registerer, constants.DefaultNetworkCompressionType, constants.DefaultNetworkMaximumInboundTimeout, ) @@ -99,7 +107,7 @@ func initSignatureAggregator( return nil, fmt.Errorf("failed to create message creator: %w", err) } - metricsInstance := metrics.NewSignatureAggregatorMetrics(prometheus.DefaultRegisterer) + metricsInstance := metrics.NewSignatureAggregatorMetrics(registerer) signatureAggregator, err := aggregator.NewSignatureAggregator( network, logger, @@ -130,12 +138,14 @@ func NewSignatureAggregator( logLevel logging.Level, subnetID ids.ID, quorumPercentage uint64, + extraPeerEndpoints []info.Peer, ) (*SignatureAggregator, error) { - peerNetwork, err := createAppRequestNetwork(network, logLevel) + registerer := prometheus.NewRegistry() + peerNetwork, err := createAppRequestNetwork(network, logLevel, registerer, extraPeerEndpoints) if err != nil { return nil, err } - return initSignatureAggregator(peerNetwork, logger, subnetID, quorumPercentage) + return initSignatureAggregator(peerNetwork, logger, registerer, subnetID, quorumPercentage) } // AggregateSignatures aggregates signatures for a given message and justification. From 81418b4c2bb8af2d2dfbbd6064c5cc329ad67e25 Mon Sep 17 00:00:00 2001 From: Artur Reznikov Date: Mon, 14 Oct 2024 17:58:17 -0700 Subject: [PATCH 2/3] fix unittest --- go.sum | 2 -- sdk/interchain/signature-aggregator_test.go | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go.sum b/go.sum index 5275aa5ba..909dff78d 100644 --- a/go.sum +++ b/go.sum @@ -87,8 +87,6 @@ github.com/ava-labs/avalanche-network-runner v1.8.4-0.20241005224128-cc3c07bb134 github.com/ava-labs/avalanche-network-runner v1.8.4-0.20241005224128-cc3c07bb1344/go.mod h1:l4QzFnujbyyyeq6oBQ4F6sw9TrTQCjD2V4vUd7ZBCCo= github.com/ava-labs/avalanchego v1.12.0-initial-poc.5 h1:gW4xAqZNvkA4gP8M9yDyd7YUzuwfQbbCR+hgd1ztOto= github.com/ava-labs/avalanchego v1.12.0-initial-poc.5/go.mod h1:qSHmog3wMVjo/ruIAQo0ppXAilyni07NIu5K88RyhWE= -github.com/ava-labs/awm-relayer v1.4.1-0.20241003162124-807fd305670f h1:YUQF1wQJeEcTMC5W/OrwgSFTFMS4zeCM8O02rLeEDow= -github.com/ava-labs/awm-relayer v1.4.1-0.20241003162124-807fd305670f/go.mod h1:K01Md6zPkOFRWeQyxmZ/t9HJfoNgUGqa1L8rOp35GXw= github.com/ava-labs/awm-relayer v1.4.1-0.20241014222901-4b34ab86afd0 h1:zsoK+TbXg/XOTXd+PXRrF6aGmpilcunfpcw/McPVBho= github.com/ava-labs/awm-relayer v1.4.1-0.20241014222901-4b34ab86afd0/go.mod h1:K01Md6zPkOFRWeQyxmZ/t9HJfoNgUGqa1L8rOp35GXw= github.com/ava-labs/coreth v0.13.8 h1:f14X3KgwHl9LwzfxlN6S4bbn5VA2rhEsNnHaRLSTo/8= diff --git a/sdk/interchain/signature-aggregator_test.go b/sdk/interchain/signature-aggregator_test.go index 1e3284768..d4dba68de 100644 --- a/sdk/interchain/signature-aggregator_test.go +++ b/sdk/interchain/signature-aggregator_test.go @@ -9,6 +9,7 @@ import ( "github.com/ava-labs/avalanchego/utils/logging" "github.com/ava-labs/avalanchego/vms/platformvm/warp" "github.com/ava-labs/awm-relayer/peers/mocks" + "github.com/prometheus/client_golang/prometheus" "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" ) @@ -25,6 +26,7 @@ func instantiateAggregator(t *testing.T) ( aggregator, err := initSignatureAggregator( mockNetwork, logging.NoLog{}, + prometheus.NewRegistry(), subnetID, DefaultQuorumPercentage, ) From be2c9a8e1e90e52343bcfecdced3e3661ab002e0 Mon Sep 17 00:00:00 2001 From: Artur Reznikov Date: Tue, 15 Oct 2024 12:14:48 -0700 Subject: [PATCH 3/3] small fixes --- cmd/blockchaincmd/deploy.go | 40 ++++++++++++++----------------------- cmd/nodecmd/create.go | 6 +++--- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/cmd/blockchaincmd/deploy.go b/cmd/blockchaincmd/deploy.go index 5c77f5916..20b6c7e05 100644 --- a/cmd/blockchaincmd/deploy.go +++ b/cmd/blockchaincmd/deploy.go @@ -702,9 +702,12 @@ func deployBlockchain(cmd *cobra.Command, args []string) error { } if !generateNodeID { - clusterName, err := node.GetClusterNameFromList(app) - if err != nil { - return err + clusterName := network.ClusterName + if clusterName == "" { + clusterName, err = node.GetClusterNameFromList(app) + if err != nil { + return err + } } if err = node.SyncSubnet(app, clusterName, blockchainName, true, nil); err != nil { @@ -1026,7 +1029,7 @@ func LoadBootstrapValidator(filepath string) ([]models.SubnetValidator, error) { func UrisToPeers(uris []string) ([]info.Peer, error) { peers := []info.Peer{} - ctx, cancel := utils.GetANRContext() + ctx, cancel := utils.GetAPIContext() defer cancel() for _, uri := range uris { client := info.NewClient(uri) @@ -1073,34 +1076,21 @@ func GetAggregatorExtraPeerEndpoints(network models.Network) ([]info.Peer, error func GetAggregatorExtraPeerEndpointsUris(network models.Network) ([]string, error) { aggregatorExtraPeerEndpointsUris := []string{} if network.ClusterName != "" { - clustersConfig, err := app.LoadClustersConfig() + clusterConfig, err := app.GetClusterConfig(network.ClusterName) if err != nil { return nil, err } - clusterConfig := clustersConfig.Clusters[network.ClusterName] - _ = clusterConfig - // MAKE THIS TO RETURN THE URI/URIS OF YOUR DEVNET - /* - if clusterConfig.Local { - cli, err := binutils.NewGRPCClientWithEndpoint( - binutils.LocalClusterGRPCServerEndpoint, - binutils.WithAvoidRPCVersionCheck(true), - binutils.WithDialTimeout(constants.FastGRPCDialTimeout), - ) + // support etna devnet + if clusterConfig.Network.Kind == models.EtnaDevnet { + for _, node := range clusterConfig.Nodes { + nodeConfig, err := app.LoadClusterNodeConfig(node) if err != nil { return nil, err } - ctx, cancel := utils.GetANRContext() - defer cancel() - status, err := cli.Status(ctx) - if err != nil { - return nil, err - } - for _, nodeInfo := range status.ClusterInfo.NodeInfos { - aggregatorExtraPeerEndpointsUris = append(aggregatorExtraPeerEndpointsUris, nodeInfo.Uri) - } + uri := fmt.Sprintf("http://%s:%d", nodeConfig.ElasticIP, constants.AvalanchegoAPIPort) + aggregatorExtraPeerEndpointsUris = append(aggregatorExtraPeerEndpointsUris, uri) } - */ + } } return aggregatorExtraPeerEndpointsUris, nil } diff --git a/cmd/nodecmd/create.go b/cmd/nodecmd/create.go index 706cba2af..c6cb55612 100644 --- a/cmd/nodecmd/create.go +++ b/cmd/nodecmd/create.go @@ -280,6 +280,9 @@ func createNodes(cmd *cobra.Command, args []string) error { createSupportedNetworkOptions, "", ) + if err := preCreateChecks(clusterName); err != nil { + return err + } if network.Kind == models.EtnaDevnet { publicHTTPPortAccess = true // public http port access for etna devnet api for PoAManagerDeployment bootstrapIDs = constants.EtnaDevnetBootstrapNodeIDs @@ -315,9 +318,6 @@ func createNodes(cmd *cobra.Command, args []string) error { _ = os.Remove(upgradeTmpFile.Name()) }() } - if err := preCreateChecks(clusterName); err != nil { - return err - } network = models.NewNetworkFromCluster(network, clusterName) globalNetworkFlags.UseDevnet = network.Kind == models.Devnet // set globalNetworkFlags.UseDevnet to true if network is devnet for further use avalancheGoVersion, err := getAvalancheGoVersion()