Skip to content

Commit 81ec104

Browse files
authored
use validator manager v2_0_0 as default (#2821)
* replace acp99 contract naming with v2_0_0 * use v2.0.0 files for part of PoS validator manager * avoid setting expiry on PoA v2.0.0 * start adding support for validator specialization besides validator manager * nit * nit * nit * nit * nit * nit * nit * pos removal finally working * cleanup * more cleanup
1 parent f73ba3f commit 81ec104

33 files changed

+638
-174
lines changed

cmd/blockchaincmd/add_validator.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ var (
5656
pop string
5757
remainingBalanceOwnerAddr string
5858
disableOwnerAddr string
59+
rewardsRecipientAddr string
5960
delegationFee uint16
6061
errNoSubnetID = errors.New("failed to find the subnet ID for this subnet, has it been deployed/created on this network?")
6162
errMutuallyExclusiveDurationOptions = errors.New("--use-default-duration/--use-default-validator-params and --staking-period are mutually exclusive")
@@ -114,6 +115,9 @@ Testnet or Mainnet.`,
114115
cmd.Flags().StringVar(&pop, "bls-proof-of-possession", "", "set the BLS proof of possession of the validator to add")
115116
cmd.Flags().StringVar(&remainingBalanceOwnerAddr, "remaining-balance-owner", "", "P-Chain address that will receive any leftover AVAX from the validator when it is removed from Subnet")
116117
cmd.Flags().StringVar(&disableOwnerAddr, "disable-owner", "", "P-Chain address that will able to disable the validator with a P-Chain transaction")
118+
cmd.Flags().StringVar(&rewardsRecipientAddr, "rewards-recipient", "", "EVM address that will receive the validation rewards")
119+
cmd.Flags().BoolVar(&createLocalValidator, "create-local-validator", false, "create additional local validator and add it to existing running local node")
120+
cmd.Flags().BoolVar(&partialSync, "partial-sync", true, "set primary network partial sync for new validators")
117121
cmd.Flags().StringVar(&nodeEndpoint, "node-endpoint", "", "gather node id/bls from publicly available avalanchego apis on the given endpoint")
118122
cmd.Flags().Uint64Var(&weight, validatorWeightFlag, uint64(constants.DefaultStakeWeight), "set the weight of the validator")
119123
cmd.Flags().StringVar(&validatorManagerOwner, "validator-manager-owner", "", "force using this address to issue transactions to the validator manager")
@@ -441,6 +445,21 @@ func CallAddValidator(
441445
return nil
442446
}
443447
}
448+
if rewardsRecipientAddr == "" {
449+
rewardsRecipientAddr, err = prompts.PromptAddress(
450+
app.Prompt,
451+
"receive the validation rewards",
452+
app.GetKeyDir(),
453+
app.GetKey,
454+
"",
455+
network,
456+
prompts.EVMFormat,
457+
"Address",
458+
)
459+
if err != nil {
460+
return err
461+
}
462+
}
444463
}
445464

446465
if sc.UseACP99 {
@@ -563,6 +582,7 @@ func CallAddValidator(
563582
pos,
564583
delegationFee,
565584
duration,
585+
common.HexToAddress(rewardsRecipientAddr),
566586
validatorManagerAddress,
567587
sc.UseACP99,
568588
initiateTxHash,

cmd/blockchaincmd/convert.go

Lines changed: 62 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@ import (
88
"os"
99
"time"
1010

11-
"github.com/ava-labs/avalanche-cli/pkg/dependencies"
12-
1311
"github.com/ava-labs/avalanche-cli/cmd/flags"
1412
"github.com/ava-labs/avalanche-cli/pkg/blockchain"
1513
"github.com/ava-labs/avalanche-cli/pkg/cobrautils"
1614
"github.com/ava-labs/avalanche-cli/pkg/constants"
1715
"github.com/ava-labs/avalanche-cli/pkg/contract"
16+
"github.com/ava-labs/avalanche-cli/pkg/dependencies"
1817
"github.com/ava-labs/avalanche-cli/pkg/keychain"
1918
"github.com/ava-labs/avalanche-cli/pkg/localnet"
2019
"github.com/ava-labs/avalanche-cli/pkg/models"
@@ -30,7 +29,7 @@ import (
3029
blockchainSDK "github.com/ava-labs/avalanche-cli/sdk/blockchain"
3130
"github.com/ava-labs/avalanche-cli/sdk/evm"
3231
sdkutils "github.com/ava-labs/avalanche-cli/sdk/utils"
33-
validatorManagerSDK "github.com/ava-labs/avalanche-cli/sdk/validatormanager"
32+
validatormanagerSDK "github.com/ava-labs/avalanche-cli/sdk/validatormanager"
3433
"github.com/ava-labs/avalanche-cli/sdk/validatormanager/validatormanagertypes"
3534
"github.com/ava-labs/avalanchego/config"
3635
"github.com/ava-labs/avalanchego/ids"
@@ -259,7 +258,7 @@ func InitializeValidatorManager(
259258
network models.Network,
260259
avaGoBootstrapValidators []*txs.ConvertSubnetToL1Validator,
261260
pos bool,
262-
validatorManagerAddrStr string,
261+
managerAddress string,
263262
proxyContractOwner string,
264263
useACP99 bool,
265264
useLocalMachine bool,
@@ -328,8 +327,10 @@ func InitializeValidatorManager(
328327
return tracked, err
329328
}
330329

330+
ownerAddress := common.HexToAddress(validatorManagerOwner)
331+
331332
if pos {
332-
deployed, err := validatormanager.ProxyHasValidatorManagerSet(rpcURL)
333+
deployed, err := validatormanager.ValidatorProxyHasImplementationSet(rpcURL)
333334
if err != nil {
334335
return tracked, err
335336
}
@@ -345,12 +346,31 @@ func InitializeValidatorManager(
345346
if err != nil {
346347
return tracked, err
347348
}
348-
if _, err := validatormanager.DeployAndRegisterPoSValidatorManagerContrac(
349-
rpcURL,
350-
genesisPrivateKey,
351-
proxyOwnerPrivateKey,
352-
); err != nil {
353-
return tracked, err
349+
if useACP99 {
350+
_, err := validatormanager.DeployAndRegisterValidatorManagerV2_0_0Contract(
351+
rpcURL,
352+
genesisPrivateKey,
353+
proxyOwnerPrivateKey,
354+
)
355+
if err != nil {
356+
return tracked, err
357+
}
358+
_, err = validatormanager.DeployAndRegisterPoSValidatorManagerV2_0_0Contract(
359+
rpcURL,
360+
genesisPrivateKey,
361+
proxyOwnerPrivateKey,
362+
)
363+
if err != nil {
364+
return tracked, err
365+
}
366+
} else {
367+
if _, err := validatormanager.DeployAndRegisterPoSValidatorManagerV1_0_0Contract(
368+
rpcURL,
369+
genesisPrivateKey,
370+
proxyOwnerPrivateKey,
371+
); err != nil {
372+
return tracked, err
373+
}
354374
}
355375
}
356376
}
@@ -360,7 +380,6 @@ func InitializeValidatorManager(
360380
return tracked, err
361381
}
362382

363-
ownerAddress := common.HexToAddress(validatorManagerOwner)
364383
subnetSDK := blockchainSDK.Subnet{
365384
SubnetID: subnetID,
366385
BlockchainID: blockchainID,
@@ -380,24 +399,39 @@ func InitializeValidatorManager(
380399
defer aggregatorCancel()
381400
if pos {
382401
ux.Logger.PrintToUser("Initializing Native Token Proof of Stake Validator Manager contract on blockchain %s ...", blockchainName)
402+
found, _, _, managerOwnerPrivateKey, err := contract.SearchForManagedKey(
403+
app,
404+
network,
405+
ownerAddress,
406+
true,
407+
)
408+
if err != nil {
409+
return tracked, err
410+
}
411+
if !found {
412+
return tracked, fmt.Errorf("could not find validator manager owner private key")
413+
}
383414
if err := subnetSDK.InitializeProofOfStake(
384415
aggregatorCtx,
385416
app.Log,
386417
network.SDKNetwork(),
387418
genesisPrivateKey,
388419
extraAggregatorPeers,
389420
aggregatorLogger,
390-
validatorManagerSDK.PoSParams{
421+
validatormanagerSDK.PoSParams{
391422
MinimumStakeAmount: big.NewInt(int64(proofOfStakeFlags.MinimumStakeAmount)),
392423
MaximumStakeAmount: big.NewInt(int64(proofOfStakeFlags.MaximumStakeAmount)),
393424
MinimumStakeDuration: proofOfStakeFlags.MinimumStakeDuration,
394425
MinimumDelegationFee: proofOfStakeFlags.MinimumDelegationFee,
395426
MaximumStakeMultiplier: proofOfStakeFlags.MaximumStakeMultiplier,
396427
WeightToValueFactor: big.NewInt(int64(proofOfStakeFlags.WeightToValueFactor)),
397-
RewardCalculatorAddress: validatorManagerSDK.RewardCalculatorAddress,
428+
RewardCalculatorAddress: validatormanagerSDK.RewardCalculatorAddress,
398429
UptimeBlockchainID: blockchainID,
399430
},
400-
validatorManagerAddrStr,
431+
managerAddress,
432+
validatormanagerSDK.SpecializationProxyContractAddress,
433+
managerOwnerPrivateKey,
434+
useACP99,
401435
); err != nil {
402436
return tracked, err
403437
}
@@ -411,7 +445,7 @@ func InitializeValidatorManager(
411445
genesisPrivateKey,
412446
extraAggregatorPeers,
413447
aggregatorLogger,
414-
validatorManagerAddrStr,
448+
managerAddress,
415449
useACP99,
416450
); err != nil {
417451
return tracked, err
@@ -731,6 +765,18 @@ func convertBlockchain(cmd *cobra.Command, args []string) error {
731765
); err != nil {
732766
return err
733767
}
768+
if sidecar.UseACP99 && sidecar.ValidatorManagement == validatormanagertypes.ProofOfStake {
769+
sidecar, err := app.LoadSidecar(chain)
770+
if err != nil {
771+
return err
772+
}
773+
networkInfo := sidecar.Networks[network.Name()]
774+
networkInfo.ValidatorManagerAddress = validatormanagerSDK.SpecializationProxyContractAddress
775+
sidecar.Networks[network.Name()] = networkInfo
776+
if err := app.UpdateSidecar(&sidecar); err != nil {
777+
return err
778+
}
779+
}
734780
} else {
735781
printSuccessfulConvertOnlyOutput(blockchainName, subnetID.String(), convertFlags.BootstrapValidatorFlags.GenerateNodeID)
736782
}

cmd/blockchaincmd/deploy.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,15 @@ import (
1010
"os"
1111
"path/filepath"
1212

13-
"github.com/ava-labs/avalanche-cli/pkg/cobrautils"
14-
15-
"github.com/ava-labs/avalanche-cli/pkg/dependencies"
16-
"github.com/spf13/pflag"
17-
1813
"github.com/ava-labs/avalanche-cli/cmd/flags"
1914
"github.com/ava-labs/avalanche-cli/cmd/interchaincmd/messengercmd"
2015
"github.com/ava-labs/avalanche-cli/cmd/interchaincmd/relayercmd"
2116
"github.com/ava-labs/avalanche-cli/cmd/networkcmd"
2217
"github.com/ava-labs/avalanche-cli/pkg/blockchain"
18+
"github.com/ava-labs/avalanche-cli/pkg/cobrautils"
2319
"github.com/ava-labs/avalanche-cli/pkg/constants"
2420
"github.com/ava-labs/avalanche-cli/pkg/contract"
21+
"github.com/ava-labs/avalanche-cli/pkg/dependencies"
2522
"github.com/ava-labs/avalanche-cli/pkg/interchain/relayer"
2623
"github.com/ava-labs/avalanche-cli/pkg/keychain"
2724
"github.com/ava-labs/avalanche-cli/pkg/localnet"
@@ -35,7 +32,7 @@ import (
3532
"github.com/ava-labs/avalanche-cli/pkg/ux"
3633
"github.com/ava-labs/avalanche-cli/pkg/vm"
3734
sdkutils "github.com/ava-labs/avalanche-cli/sdk/utils"
38-
validatorManagerSDK "github.com/ava-labs/avalanche-cli/sdk/validatormanager"
35+
validatormanagerSDK "github.com/ava-labs/avalanche-cli/sdk/validatormanager"
3936
"github.com/ava-labs/avalanche-cli/sdk/validatormanager/validatormanagertypes"
4037
"github.com/ava-labs/avalanchego/api/info"
4138
"github.com/ava-labs/avalanchego/ids"
@@ -51,6 +48,7 @@ import (
5148

5249
"github.com/jedib0t/go-pretty/v6/table"
5350
"github.com/spf13/cobra"
51+
"github.com/spf13/pflag"
5452
)
5553

5654
const skipRelayerFlagName = "skip-relayer"
@@ -827,7 +825,7 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {
827825
tracked := false
828826

829827
if sidecar.Sovereign {
830-
validatorManagerStr := validatorManagerSDK.ProxyContractAddress
828+
validatorManagerStr := validatormanagerSDK.ValidatorProxyContractAddress
831829
avaGoBootstrapValidators, cancel, savePartialTx, err := convertSubnetToL1(
832830
bootstrapValidators,
833831
deployer,
@@ -874,6 +872,18 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {
874872
if err != nil {
875873
return err
876874
}
875+
if sidecar.UseACP99 && sidecar.ValidatorManagement == validatormanagertypes.ProofOfStake {
876+
sidecar, err := app.LoadSidecar(chain)
877+
if err != nil {
878+
return err
879+
}
880+
networkInfo := sidecar.Networks[network.Name()]
881+
networkInfo.ValidatorManagerAddress = validatormanagerSDK.SpecializationProxyContractAddress
882+
sidecar.Networks[network.Name()] = networkInfo
883+
if err := app.UpdateSidecar(&sidecar); err != nil {
884+
return err
885+
}
886+
}
877887
} else {
878888
if err := app.UpdateSidecarNetworks(
879889
&sidecar,

cmd/blockchaincmd/describe.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,9 @@ func PrintSubnetInfo(blockchainName string, onlyLocalnetInfo bool) error {
175175
localEndpoint = endpoint
176176
}
177177
t.AppendRow(table.Row{net, "RPC Endpoint", endpoint})
178+
if data.ValidatorManagerAddress != "" {
179+
t.AppendRow(table.Row{net, "Manager", data.ValidatorManagerAddress})
180+
}
178181
}
179182
ux.Logger.PrintToUser(t.Render())
180183

@@ -356,11 +359,15 @@ func printSmartContracts(sc models.Sidecar, genesis core.Genesis) {
356359
} else {
357360
description = "v1.0.0 Compatible " + description
358361
}
359-
case address == common.HexToAddress(validatorManagerSDK.ProxyContractAddress):
360-
description = "Transparent Proxy"
361-
case address == common.HexToAddress(validatorManagerSDK.ProxyAdminContractAddress):
362-
description = "Proxy Admin"
362+
case address == common.HexToAddress(validatorManagerSDK.ValidatorProxyContractAddress):
363+
description = "Validator Transparent Proxy"
364+
case address == common.HexToAddress(validatorManagerSDK.ValidatorProxyAdminContractAddress):
365+
description = "Validator Proxy Admin"
363366
deployer = sc.ProxyContractOwner
367+
case address == common.HexToAddress(validatorManagerSDK.SpecializationProxyContractAddress):
368+
description = "Validator Specialization Transparent Proxy"
369+
case address == common.HexToAddress(validatorManagerSDK.SpecializationProxyAdminContractAddress):
370+
description = "Validator Specialization Proxy Admin"
364371
case address == common.HexToAddress(validatorManagerSDK.RewardCalculatorAddress):
365372
description = "Reward Calculator"
366373
}

cmd/blockchaincmd/import_public.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ func importBlockchain(
214214

215215
if !subnetInfo.IsPermissioned {
216216
sc.Sovereign = true
217+
sc.UseACP99 = true
217218
validatorManagerAddress = "0x" + hex.EncodeToString(subnetInfo.ManagerAddress)
218219
e := sc.Networks[network.Name()]
219220
e.ValidatorManagerAddress = validatorManagerAddress

cmd/blockchaincmd/remove_validator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ func removeValidatorSOV(
428428
extraAggregatorPeers,
429429
aggregatorLogger,
430430
validatorManagerAddress,
431-
sc.PoA() && sc.UseACP99,
431+
sc.UseACP99,
432432
)
433433
if err != nil {
434434
return err

0 commit comments

Comments
 (0)