Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 56 additions & 29 deletions cmd/blockchaincmd/add_validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -543,11 +543,7 @@ func CallAddValidator(
}
}

if sc.UseACP99 {
ux.Logger.PrintToUser("%s", logging.Yellow.Wrap("Validator Manager Protocol: V2"))
} else {
ux.Logger.PrintToUser("%s", logging.Yellow.Wrap("Validator Manager Protocol: v1.0.0"))
}
ux.Logger.PrintToUser("%s", logging.Yellow.Wrap("Validator Manager Protocol: V2"))

if !pos {
ux.Logger.PrintToUser(logging.Yellow.Wrap("Validation manager owner %s pays for the initialization of the validator's registration (Blockchain gas token)"), validatorManagerOwner)
Expand Down Expand Up @@ -656,33 +652,64 @@ func CallAddValidator(
ctx, cancel := sdkutils.GetTimedContext(constants.EVMEventLookupTimeout)
defer cancel()

subnetID, err := contract.GetSubnetID(
app,
network,
contract.ChainSpec{
BlockchainID: validatorManagerBlockchainID.String(),
},
)
if err != nil {
return err
}

validatorManagerParams := validatormanager.ValidatorManagerParams{
RpcURL: validatorManagerRPCEndpoint,
Signer: signer,
NodeID: nodeID,
BlsPublicKey: blsInfo.PublicKey[:],
BalanceOwners: remainingBalanceOwners,
DisableOwners: disableOwners,
ManagerAddressStr: validatorManagerAddress,
Weight: weight,
}

getRegisterValidatorSignedMessageParams := validatormanager.GetRegisterValidatorSignedMessageParams{
Network: network,
Expiry: expiry,
SubnetID: subnetID,
BlockchainID: validatorManagerBlockchainID,
SigAggParams: validatormanager.SignatureAggregatorParams{
AggregatorLogger: aggregatorLogger,
SignatureAggregatorEndpoint: signatureAggregatorEndpoint,
PchainHeight: pChainEpoch.PChainHeight,
},
}

initValidatorRegistrationParams := validatormanager.InitValidatorRegistrationParams{
ValidatorManager: validatorManagerParams,
SignedMessageParams: getRegisterValidatorSignedMessageParams,
TxHash: initiateTxHash,
}
if pos {
posParams := validatormanager.ProofOfStakeParams{
delegationFee,
duration,
common.HexToAddress(rewardsRecipientAddr),
}
initValidatorRegistrationParams.PoS = &posParams
}
initValidatorRegistrationOpts := validatormanager.InitValidatorRegistrationOptions{
// Execution behavior (don’t broadcast; return unsigned init tx)
BuildOnly: externalValidatorManagerOwner,
Logger: duallogger.NewDualLogger(true, app),
}

// Example of using the HybridLogger with SDK functions
signedMessage, validationID, rawTx, err := validatormanager.InitValidatorRegistration(
ctx,
duallogger.NewDualLogger(true, app),
app,
network,
validatorManagerRPCEndpoint,
chainSpec,
externalValidatorManagerOwner,
signer,
nodeID,
blsInfo.PublicKey[:],
expiry,
remainingBalanceOwners,
disableOwners,
weight,
aggregatorLogger,
pos,
delegationFee,
duration,
common.HexToAddress(rewardsRecipientAddr),
validatorManagerBlockchainID,
validatorManagerAddress,
sc.UseACP99,
initiateTxHash,
signatureAggregatorEndpoint,
pChainEpoch.PChainHeight,
initValidatorRegistrationParams,
initValidatorRegistrationOpts,
)
if err != nil {
return err
Expand Down
98 changes: 3 additions & 95 deletions cmd/blockchaincmd/change_weight.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
"github.com/ava-labs/avalanche-cli/pkg/constants"
"github.com/ava-labs/avalanche-cli/pkg/contract"
"github.com/ava-labs/avalanche-cli/pkg/duallogger"
"github.com/ava-labs/avalanche-cli/pkg/key"
"github.com/ava-labs/avalanche-cli/pkg/keychain"
"github.com/ava-labs/avalanche-cli/pkg/models"
"github.com/ava-labs/avalanche-cli/pkg/networkoptions"
Expand All @@ -27,11 +26,7 @@ import (
"github.com/ava-labs/avalanche-tooling-sdk-go/validator"
validatormanagersdk "github.com/ava-labs/avalanche-tooling-sdk-go/validatormanager"
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/utils/crypto/bls"
"github.com/ava-labs/avalanchego/utils/formatting"
"github.com/ava-labs/avalanchego/utils/formatting/address"
"github.com/ava-labs/avalanchego/utils/logging"
"github.com/ava-labs/avalanchego/utils/units"
"github.com/ava-labs/avalanchego/vms/platformvm"
"github.com/ava-labs/libevm/common"

Expand Down Expand Up @@ -215,19 +210,6 @@ func setWeight(_ *cobra.Command, args []string) error {
return nil
}

if !sc.UseACP99 {
if float64(validatorInfo.Weight) > allowedChange {
return fmt.Errorf("can't make change: current validator weight %d exceeds max allowed weight change of %d", validatorInfo.Weight, uint64(allowedChange))
}
allowedChange = float64((currentWeightInfo.TotalWeight-validatorInfo.Weight)*uint64(currentWeightInfo.MaximumPercentage)) / 100.0
allowedWeightFunction = func(v uint64) error {
if v > uint64(allowedChange) {
return fmt.Errorf("new weight exceeds max allowed weight change of %d", uint64(allowedChange))
}
return nil
}
}

if newWeight == 0 {
ux.Logger.PrintToUser("Current validator weight is %d", validatorInfo.Weight)
newWeight, err = app.Prompt.CaptureWeight(
Expand All @@ -246,92 +228,18 @@ func setWeight(_ *cobra.Command, args []string) error {

deployer := subnet.NewPublicDeployer(kc, network)

if sc.UseACP99 {
ux.Logger.PrintToUser("%s", logging.Yellow.Wrap("Validator Manager Protocol: V2"))
return changeWeightACP99(
deployer,
network,
blockchainName,
nodeID,
newWeight,
changeWeightFlags.SigAggFlags.SignatureAggregatorEndpoint,
initiateTxHash,
)
} else {
ux.Logger.PrintToUser("%s", logging.Yellow.Wrap("Validator Manager Protocol: v1.0.0"))
}

publicKey, err = formatting.Encode(formatting.HexNC, bls.PublicKeyToCompressedBytes(validatorInfo.PublicKey))
if err != nil {
return err
}

if pop == "" {
_, pop, err = promptProofOfPossession(false, true)
if err != nil {
return err
}
}

var remainingBalanceOwnerAddr, disableOwnerAddr string
hrp := key.GetHRP(network.ID)
if validatorInfo.RemainingBalanceOwner != nil && len(validatorInfo.RemainingBalanceOwner.Addrs) > 0 {
remainingBalanceOwnerAddr, err = address.Format("P", hrp, validatorInfo.RemainingBalanceOwner.Addrs[0][:])
if err != nil {
return err
}
}
if validatorInfo.DeactivationOwner != nil && len(validatorInfo.DeactivationOwner.Addrs) > 0 {
disableOwnerAddr, err = address.Format("P", hrp, validatorInfo.DeactivationOwner.Addrs[0][:])
if err != nil {
return err
}
}

// first remove the validator from subnet
err = removeValidatorSOV(
return changeWeight(
deployer,
network,
blockchainName,
nodeID,
0, // automatic uptime
isBootstrapValidatorForNetwork(nodeID, sc.Networks[network.Name()]),
false, // don't force
changeWeightFlags.SigAggFlags.SignatureAggregatorEndpoint,
)
if err != nil {
return err
}

balance := validatorInfo.Balance
if validatorInfo.RemainingBalanceOwner != nil && len(validatorInfo.RemainingBalanceOwner.Addrs) > 0 {
availableBalance, err := utils.GetNetworkBalance([]ids.ShortID{validatorInfo.RemainingBalanceOwner.Addrs[0]}, network.Endpoint)
if err != nil {
ux.Logger.RedXToUser("failure checking remaining balance of validator: %s. continuing with default value", err)
} else if availableBalance < balance {
balance = availableBalance
}
}

// add back validator to subnet with updated weight
return CallAddValidator(
deployer,
network,
kc,
blockchainName,
nodeID.String(),
publicKey,
pop,
newWeight,
float64(balance)/float64(units.Avax),
remainingBalanceOwnerAddr,
disableOwnerAddr,
sc,
changeWeightFlags.SigAggFlags.SignatureAggregatorEndpoint,
initiateTxHash,
)
}

func changeWeightACP99(
func changeWeight(
deployer *subnet.PublicDeployer,
network models.Network,
blockchainName string,
Expand Down
13 changes: 2 additions & 11 deletions cmd/blockchaincmd/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,16 +159,11 @@ func InitializeValidatorManager(
validatorManagerOwnerAddressStr string,
specializedValidatorManagerAddressStr string,
proxyOwnerAddressStr string,
useACP99 bool,
useLocalMachine bool,
signatureAggregatorFlags flags.SignatureAggregatorFlags,
proofOfStakeFlags flags.POSFlags,
) (bool, error) {
if useACP99 {
ux.Logger.PrintToUser("%s", logging.Yellow.Wrap("Validator Manager Protocol: V2"))
} else {
ux.Logger.PrintToUser("%s", logging.Yellow.Wrap("Validator Manager Protocol: v1.0.0"))
}
ux.Logger.PrintToUser("%s", logging.Yellow.Wrap("Validator Manager Protocol: V2"))

var err error
clusterName := clusterNameFlagValue
Expand Down Expand Up @@ -217,14 +212,13 @@ func InitializeValidatorManager(
validatorManagerRPCEndpoint,
proxyOwnerAddressStr,
pos,
useACP99,
); err != nil {
return tracked, err
}
}

if specializedValidatorManagerAddressStr == "" {
if useACP99 && pos {
if pos {
specializedValidatorManagerAddress, err := app.Prompt.CaptureAddress("What is the address of the Specialized Validator Manager?")
if err != nil {
return tracked, err
Expand Down Expand Up @@ -373,7 +367,6 @@ func InitializeValidatorManager(
RewardCalculatorAddress: validatormanagerSDK.RewardCalculatorAddress,
UptimeBlockchainID: blockchainID,
},
useACP99,
signatureAggregatorEndpoint,
nativeMinterSigner,
); err != nil {
Expand All @@ -386,7 +379,6 @@ func InitializeValidatorManager(
app.Log,
signer,
aggregatorLogger,
useACP99,
signatureAggregatorEndpoint,
); err != nil {
return tracked, err
Expand Down Expand Up @@ -761,7 +753,6 @@ func convertBlockchain(cmd *cobra.Command, args []string) error {
sidecar.ValidatorManagerOwner,
specializedValidatorManagerAddressStr,
sidecar.ProxyContractOwner,
sidecar.UseACP99,
convertFlags.LocalMachineFlags.UseLocalMachine,
convertFlags.SigAggFlags,
convertFlags.ProofOfStakeFlags,
Expand Down
4 changes: 0 additions & 4 deletions cmd/blockchaincmd/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ type CreateFlags struct {
validatorManagerOwner string
proxyContractOwner string
enableDebugging bool
useACP99 bool
Network networkoptions.NetworkFlags
}

Expand Down Expand Up @@ -114,7 +113,6 @@ configuration, pass the -f flag.`,
cmd.Flags().BoolVar(&createFlags.enableDebugging, "debug", true, "enable blockchain debugging")

sovGroup := flags.RegisterFlagGroup(cmd, "Subnet-Only-Validators (SOV) Flags", "show-sov-flags", true, func(set *pflag.FlagSet) {
set.BoolVar(&createFlags.useACP99, "acp99", true, "use ACP99 contracts instead of v1.0.0 for validator managers")
set.BoolVar(&createFlags.proofOfAuthority, "proof-of-authority", false, "use proof of authority(PoA) for validator management")
set.BoolVar(&createFlags.proofOfStake, "proof-of-stake", false, "use proof of stake(PoS) for validator management")
set.StringVar(&createFlags.validatorManagerOwner, "validator-manager-owner", "", "EVM address that controls Validator Manager Owner")
Expand Down Expand Up @@ -383,7 +381,6 @@ func createBlockchainConfig(cmd *cobra.Command, args []string) error {
createFlags.addICMRegistryToGenesis,
sc.ProxyContractOwner,
createFlags.rewardBasisPoints,
createFlags.useACP99,
)
if err != nil {
return err
Expand All @@ -397,7 +394,6 @@ func createBlockchainConfig(cmd *cobra.Command, args []string) error {
tokenSymbol,
true,
sovereign,
createFlags.useACP99,
); err != nil {
return err
}
Expand Down
1 change: 0 additions & 1 deletion cmd/blockchaincmd/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -1057,7 +1057,6 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {
sidecar.ValidatorManagerOwner,
specializedValidatorManagerAddressStr,
sidecar.ProxyContractOwner,
sidecar.UseACP99,
deployFlags.LocalMachineFlags.UseLocalMachine,
deployFlags.SigAggFlags,
deployFlags.ProofOfStakeFlags,
Expand Down
7 changes: 2 additions & 5 deletions cmd/blockchaincmd/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -364,11 +364,8 @@ func printSmartContracts(sc models.Sidecar, genesis core.Genesis) {
} else {
description = "Native Token Staking Manager"
}
if sc.UseACP99 {
description = "ACP99 Compatible " + description
} else {
description = "v1.0.0 Compatible " + description
}
description = "v2.0.0 Compatible " + description

case address == common.HexToAddress(validatorManagerSDK.ValidatorProxyContractAddress):
description = "Validator Transparent Proxy"
case address == common.HexToAddress(validatorManagerSDK.ValidatorProxyAdminContractAddress):
Expand Down
Loading
Loading