Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ACP 77 #2140

Merged
merged 103 commits into from
Nov 23, 2024
Merged

ACP 77 #2140

Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
2a942dd
acp-77
sukantoraymond Sep 9, 2024
e304324
fix lint
sukantoraymond Sep 9, 2024
c28aecb
address comments
sukantoraymond Sep 9, 2024
5cc880c
fix test
sukantoraymond Sep 9, 2024
858c394
make pos coming soon
sukantoraymond Sep 19, 2024
3f51e72
update test
sukantoraymond Sep 19, 2024
efa257c
Merge branch 'main' into acp-77
sukantoraymond Sep 19, 2024
2138a5a
Merge branch 'main' into acp-77
sukantoraymond Sep 20, 2024
467cf26
Prompts for Subnet create acp77 (#2150)
sukantoraymond Sep 23, 2024
4cb24a3
Merge branch 'main' into acp-77
sukantoraymond Sep 23, 2024
0713f2d
Validator prompt acp77 (#2152)
sukantoraymond Sep 23, 2024
cd9402e
Merge branch 'main' into acp-77
sukantoraymond Sep 24, 2024
654a3e4
Genesis icm (#2154)
felipemadero Sep 26, 2024
5bd6762
lint
felipemadero Sep 26, 2024
ad16a88
Merge branch 'main' into acp-77
felipemadero Sep 26, 2024
93b24c2
Genesis poa (#2164)
felipemadero Sep 26, 2024
5957c63
Merge branch 'main' into acp-77
sukantoraymond Sep 30, 2024
1b0d42c
Signature aggregator sdk (#2149)
arturrez Sep 30, 2024
58fdeb2
Fix acp 77 ci (#2204)
felipemadero Oct 1, 2024
3dbca8b
ACP 77 new commands (#2172)
sukantoraymond Oct 8, 2024
f7d8a40
Merge branch 'main' into acp-77
sukantoraymond Oct 8, 2024
2e4df61
fix merge
sukantoraymond Oct 8, 2024
f46593f
Merge branch 'main' into acp-77
sukantoraymond Oct 8, 2024
064d1f1
Track subnet refactor (#2228)
sukantoraymond Oct 9, 2024
b2d4e4d
Fix generate new node id and bls info (#2237)
sukantoraymond Oct 11, 2024
4f797cb
assume blockchain endpoint only for cli managed node sync (#2241)
felipemadero Oct 14, 2024
c53301a
Merge branch 'main' into acp-77
sukantoraymond Oct 16, 2024
7733ee6
fix merge
sukantoraymond Oct 16, 2024
25f7fe9
node local PoC (#2216)
arturrez Oct 16, 2024
8888202
go 1.22.8 for dockerfile
arturrez Oct 16, 2024
93ba0c6
Node local status (#2261)
arturrez Oct 16, 2024
662105f
fix lint
arturrez Oct 16, 2024
4a0eb07
Merge branch 'main' into acp-77
sukantoraymond Oct 17, 2024
dc51ea7
fix merge
sukantoraymond Oct 17, 2024
93ad04d
Register validator local (#2247)
felipemadero Oct 17, 2024
2c4bc46
Merge branch 'acp-77' of https://github.com/ava-labs/avalanche-cli in…
felipemadero Oct 17, 2024
4a5e292
fix lint
sukantoraymond Oct 17, 2024
569e1da
Merge branch 'main' into acp-77
sukantoraymond Oct 17, 2024
191f129
lint
felipemadero Oct 17, 2024
d517e5f
Validator removal (#2267)
felipemadero Oct 17, 2024
851d576
lint
felipemadero Oct 17, 2024
e1caf35
make sure that we return empty clusterconf if cluster not found (#2269)
arturrez Oct 17, 2024
3b6c74a
Fix case where node is not generated before calling subnet deploy (#2…
sukantoraymond Oct 17, 2024
b714322
Use existing cluster deploy (#2271)
sukantoraymond Oct 17, 2024
a24d214
Acp77 remote etna devnet (#2233)
arturrez Oct 18, 2024
2d46470
properly create nodes dir and cluster config file (#2273)
felipemadero Oct 18, 2024
494545b
Merge branch 'main' into acp-77
sukantoraymond Oct 18, 2024
d0edb1c
Acp use etna devnet (#2275)
arturrez Oct 18, 2024
2566d08
Cleanup AddValidator command (#2276)
sukantoraymond Oct 18, 2024
f75c230
fix lint (#2277)
felipemadero Oct 18, 2024
2318608
fix err msg
sukantoraymond Oct 18, 2024
1e7e91e
print all errors (#2279)
sukantoraymond Oct 18, 2024
4708121
Check max balance on add validator (#2278)
felipemadero Oct 18, 2024
02d803e
Continue on error remove validator (#2280)
felipemadero Oct 18, 2024
68237be
Merge branch 'main' into acp-77
felipemadero Oct 22, 2024
5c86d7c
Acp77 remote enta cluster fixes (#2281)
arturrez Oct 22, 2024
b51f15c
Merge branch 'main' into acp-77
sukantoraymond Oct 23, 2024
a6b6e1c
fix merge
sukantoraymond Oct 23, 2024
5ceeabb
update avalanche go tag
sukantoraymond Oct 24, 2024
026e94d
remove dummy txs
sukantoraymond Oct 24, 2024
8526840
remove dummy txs
sukantoraymond Oct 24, 2024
5a13a5f
Acp77 e2e (#2287)
sukantoraymond Oct 25, 2024
77e7386
fix lint
sukantoraymond Oct 25, 2024
0ed6685
Merge branch 'main' into acp-77
sukantoraymond Oct 25, 2024
71a53a3
integrate main change
sukantoraymond Oct 25, 2024
4b76b44
Fix lint
sukantoraymond Oct 25, 2024
cf3d4a8
update binary for test
sukantoraymond Oct 25, 2024
2dfe5c5
add node configs to local cluster (#2296)
felipemadero Oct 28, 2024
fb10008
Acp 77 fix (#2284)
felipemadero Oct 28, 2024
d6c5705
Node local status more info (#2288)
arturrez Oct 30, 2024
e215c14
Merge branch 'main' into acp-77
sukantoraymond Oct 31, 2024
49a8b1d
Validator Manager SDK (#2297)
sukantoraymond Oct 31, 2024
f8632c8
increase health timeout after network restart (#2299)
felipemadero Oct 31, 2024
50bdcc2
Merge branch 'main' into acp-77
sukantoraymond Nov 1, 2024
43dafd9
Merge branch 'main' into acp-77
sukantoraymond Nov 5, 2024
ff4e381
use latest relayer dep (#2315)
felipemadero Nov 5, 2024
ea37fed
Use network name instead of cluster name on sidecar (#2303)
sukantoraymond Nov 13, 2024
ed04296
Merge branch 'main' into acp-77
sukantoraymond Nov 14, 2024
035151c
fix conflict
sukantoraymond Nov 14, 2024
aebdeec
fix lint
sukantoraymond Nov 14, 2024
96f015c
fuji local clusters (#2309)
felipemadero Nov 14, 2024
92f4ad9
Update tag (#2332)
sukantoraymond Nov 15, 2024
1967a2c
no op
sukantoraymond Nov 19, 2024
55a94e8
no op
sukantoraymond Nov 19, 2024
c7834c1
Update e2e avago (#2342)
felipemadero Nov 20, 2024
776c9b2
Acp 77 PoS using sdk/validatorManager (#2308)
arturrez Nov 20, 2024
9a79fc8
e2e - disable PoS non-bootstrap validator removal
arturrez Nov 20, 2024
f3eb113
add mainnet check (#2346)
sukantoraymond Nov 20, 2024
53e9b50
disable change owner for sov (#2347)
sukantoraymond Nov 20, 2024
b376101
Use v1.12.0 fuji on e2e (#2344)
felipemadero Nov 21, 2024
bcf5d60
Acp7 change owner single prompt (#2350)
arturrez Nov 21, 2024
68ec83a
Acp77 init validator manager (#2349)
arturrez Nov 21, 2024
162edf1
remove flag (#2345)
sukantoraymond Nov 21, 2024
da7e287
Fix local status (#2353)
arturrez Nov 22, 2024
4978276
filter network options to deployed networks
sukantoraymond Nov 22, 2024
df62f2f
Revert "filter network options to deployed networks"
sukantoraymond Nov 22, 2024
ee1871b
Fix acp77 e2e (#2358)
felipemadero Nov 22, 2024
2c2b457
Filter network (#2356)
sukantoraymond Nov 22, 2024
34ca662
Install binary for avalanchego instead of providing local path (#2351)
sukantoraymond Nov 22, 2024
270c480
fix e2e public
sukantoraymond Nov 22, 2024
4c8bed0
update deploy
sukantoraymond Nov 23, 2024
e180d96
lint
sukantoraymond Nov 23, 2024
e7396c8
fix e2e
sukantoraymond Nov 23, 2024
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
Prev Previous commit
Next Next commit
Acp 77 PoS using sdk/validatorManager (#2308)
* mv changes frrom pos

* move from pos branch

* mocks

* sync with latest pos/ refactor PoS to sdk approach

* wip

* fix lint. get rid of example in var names, fix sdk<->pkg for validatormanager to make it DRY

* fix err in sdk

* PoS default values

* use sidecar for pos detection with force flag

* rename sc validatorManager

* use proxy for poa

* bugfixes and improve add validator for pos

* proper errors from validator manager smart contract

* rename cmd input

* add PoS e2e
add support for proxy Contract for PoA

* fix lint

* e2e fix arg

* fix typo and non needed check

* rm unneeded check

* fix lint

* fixes for the flow PoS vs PoA

* fix pos sidecar case

* refactor add validator add cmd params for inputs

* adjust e2e params

* use test-defaults for e2e POS

* fix bug. disable validator removal for now

* fix e2e

* address Raymond feedback

* add default value for delegation fee

* use stake-period for PoS

* read balance

* force uint64

* 100s

* add validatorManagerSettings to sdk

* provide default params for PoS and move networkBalance to utils

* add prompt verification for token amount input

* fix PromptChain. not sure how it was included into this PR and where this change is coming from

* address latest feedback

* lint

* improve user output

* Acp77 PoS Validator removal without proof of uptime  (#2338)

* add pos validator removal
debug

* continue debugging pos validator removal

* r4r

* lint

* fix e2e Error: failure initializing validator removal: min stake duration not passed (tx failed to be submitted)

* wait 90sec for min validation period

* min stake duration is 100

* update sidecar after bootstrap validator removed

* disable e2e for removing PoS bootstrap validator

* use 100s

* remove pos non bootstrap validator e2e

* add validator and remove it

* use 60s staking period

* go back to 90 and 120s

* small refactor

* fix duration prompt

* use minimum 100s

* add prompt check for minimum validator staking timr

* fix etna duration input

* use etna for name

* add debug info

* rm debug
force validator removal for PoS

* no need to updatePchainHeight

---------

Signed-off-by: arturrez <56270896+arturrez@users.noreply.github.com>

* fix PosManager init

* use clusterNameFlagValue

* rm debug

* remove incorrect available balance

* fix lint

* update avalanchego

* update merge

* lint

* update merge

* fix lint

* update acp 77

---------

Signed-off-by: arturrez <56270896+arturrez@users.noreply.github.com>
Co-authored-by: Raymond Sukanto <rsukanto@umich.edu>
  • Loading branch information
arturrez and sukantoraymond authored Nov 20, 2024
commit 776c9b2472676bf138d8ffdb806af6fe0ed6a731
7 changes: 5 additions & 2 deletions .github/workflows/e2e-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ jobs:
"\\[Subnet Compatibility\\]",
"\\[Public Subnet non SOV\\]",
"\\[Etna Subnet SOV\\]",
"\\[Etna AddRemove Validator SOV\\]",
"\\[Etna AddRemove Validator SOV PoA\\]",
"\\[Etna AddRemove Validator SOV PoS\\]",
"\\[Subnet\\]",
"\\[Upgrade expect network failure\\]",
"\\[Upgrade public network\\]",
Expand All @@ -47,7 +48,9 @@ jobs:
- os: macos-14
suite: "\\[Public Subnet non SOV\\]"
- os: ubuntu-latest
suite: "\\[Etna AddRemove Validator SOV\\]"
suite: "\\[Etna AddRemove Validator SOV PoA\\]"
- os: ubuntu-latest
suite: "\\[Etna AddRemove Validator SOV PoS\\]"
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,4 @@ pkg/contract/contracts/cache/
pkg/contract/contracts/out/

osxcross/

75 changes: 58 additions & 17 deletions cmd/blockchaincmd/add_validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"encoding/hex"
"errors"
"fmt"
"math/big"
"time"

"github.com/ava-labs/avalanchego/utils/units"
Expand Down Expand Up @@ -59,6 +60,8 @@
disableOwnerAddr string
rpcURL string
aggregatorLogLevel string
forcePoS bool
delegationFee uint16

errNoSubnetID = errors.New("failed to find the subnet ID for this subnet, has it been deployed/created on this network?")
errMutuallyExclusiveDurationOptions = errors.New("--use-default-duration/--use-default-validator-params and --staking-period are mutually exclusive")
Expand Down Expand Up @@ -105,14 +108,18 @@
privateKeyFlags.AddToCmd(cmd, "to pay fees for completing the validator's registration (blockchain gas token)")
cmd.Flags().StringVar(&rpcURL, "rpc", "", "connect to validator manager at the given rpc endpoint")
cmd.Flags().StringVar(&aggregatorLogLevel, "aggregator-log-level", "Off", "log level to use with signature aggregator")
cmd.Flags().DurationVar(&duration, "staking-period", 0, "(for non sovereign blockchain) how long this validator will be staking")
cmd.Flags().DurationVar(&duration, "staking-period", 0, "how long this validator will be staking")
cmd.Flags().BoolVar(&useDefaultStartTime, "default-start-time", false, "(for non sovereign blockchain) use default start time for subnet validator (5 minutes later for fuji & mainnet, 30 seconds later for devnet)")
cmd.Flags().StringVar(&startTimeStr, "start-time", "", "(for non sovereign blockchain) UTC start time when this validator starts validating, in 'YYYY-MM-DD HH:MM:SS' format")
cmd.Flags().BoolVar(&useDefaultDuration, "default-duration", false, "(for non sovereign blockchain) set duration so as to validate until primary validator ends its period")
cmd.Flags().BoolVar(&defaultValidatorParams, "default-validator-params", false, "(for non sovereign blockchain) use default weight/start/duration params for subnet validator")
cmd.Flags().StringSliceVar(&subnetAuthKeys, "subnet-auth-keys", nil, "(for non sovereign blockchain) control keys that will be used to authenticate add validator tx")
cmd.Flags().StringVar(&outputTxPath, "output-tx-path", "", "(for non sovereign blockchain) file path of the add validator tx")
cmd.Flags().BoolVar(&waitForTxAcceptance, "wait-for-tx-acceptance", true, "(for non sovereign blockchain) just issue the add validator tx, without waiting for its acceptance")
cmd.Flags().BoolVar(&forcePoS, "pos", false, "(PoS only) force validator initialization as PoS validator")
cmd.Flags().Uint64Var(&stakeAmount, "stake-amount", 0, "(PoS only) amount of tokens to stake")
cmd.Flags().Uint16Var(&delegationFee, "delegation-fee", 100, "(PoS only) delegation fee (in bips)")

return cmd
}

Expand Down Expand Up @@ -208,7 +215,7 @@
func promptValidatorBalance(availableBalance uint64) (uint64, error) {
ux.Logger.PrintToUser("Validator's balance is used to pay for continuous fee to the P-Chain")
ux.Logger.PrintToUser("When this Balance reaches 0, the validator will be considered inactive and will no longer participate in validating the L1")
txt := "What balance would you like to assign to the bootstrap validator (in AVAX)?"
txt := "What balance would you like to assign to the validator (in AVAX)?"
return app.Prompt.CaptureValidatorBalance(txt, availableBalance)
}

Expand Down Expand Up @@ -243,16 +250,43 @@
ownerPrivateKeyFound, _, _, ownerPrivateKey, err := contract.SearchForManagedKey(
app,
network,
common.HexToAddress(sc.PoAValidatorManagerOwner),
common.HexToAddress(sc.ValidatorManagerOwner),
true,
)
if err != nil {
return err
}
if !ownerPrivateKeyFound {
return fmt.Errorf("private key for PoA manager owner %s is not found", sc.PoAValidatorManagerOwner)
return fmt.Errorf("private key for Validator manager owner %s is not found", sc.ValidatorManagerOwner)
}

pos := sc.PoS() || forcePoS

if pos {
// should take input prior to here for stake amount, delegation fee, and min stake duration
if stakeAmount == 0 {
stakeAmount, err = app.Prompt.CaptureUint64Compare(
fmt.Sprintf("Enter the amount of %s to stake ", sc.TokenName),
[]prompts.Comparator{
{
Label: "Positive",
Type: prompts.MoreThan,
Value: 0,
},
},
)
if err != nil {
return err
}
}
if duration == 0 {
duration, err = PromptDuration(time.Now(), network)
if err != nil {
return nil
}
}
}
ux.Logger.PrintToUser(logging.Yellow.Wrap("PoA manager owner %s pays for the initialization of the validator's registration (Blockchain gas token)"), sc.PoAValidatorManagerOwner)
ux.Logger.PrintToUser(logging.Yellow.Wrap("Validation manager owner %s pays for the initialization of the validator's registration (Blockchain gas token)"), sc.ValidatorManagerOwner)

if rpcURL == "" {
rpcURL, _, err = contract.GetBlockchainEndpoints(
Expand All @@ -267,16 +301,11 @@
}
}

ctx, cancel := utils.GetAPIContext()
defer cancel()
pClient := platformvm.NewClient(network.Endpoint)
bal, err := pClient.GetBalance(ctx, kc.Addresses().List())
if err != nil {
return err
}
availableBalance := uint64(bal.Balance) / units.Avax

if balance == 0 {
availableBalance, err := utils.GetNetworkBalance(kc.Addresses().List(), network.Endpoint)
if err != nil {
return err
}
balanceAVAX, err := promptValidatorBalance(availableBalance)
if err != nil {
return err
Expand Down Expand Up @@ -342,6 +371,10 @@
weight,
extraAggregatorPeers,
aggregatorLogLevel,
pos,
delegationFee,
duration,
big.NewInt(int64(stakeAmount)),
)
if err != nil {
return err
Expand Down Expand Up @@ -375,7 +408,10 @@

ux.Logger.PrintToUser(" NodeID: %s", nodeID)
ux.Logger.PrintToUser(" Network: %s", network.Name())
ux.Logger.PrintToUser(" Weight: %d", weight)
// weight is inaccurate for PoS as it's fetched during registration
if !pos {
ux.Logger.PrintToUser(" Weight: %d", weight)
}
ux.Logger.PrintToUser(" Balance: %d", balance/units.Avax)
ux.Logger.GreenCheckmarkToUser("Validator successfully added to the Subnet")

Expand Down Expand Up @@ -519,10 +555,15 @@
txt := "How long should this validator be validating? Enter a duration, e.g. 8760h. Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\""
var d time.Duration
var err error
if network.Kind == models.Fuji {
switch network.Kind {
case models.Fuji:
d, err = app.Prompt.CaptureFujiDuration(txt)
} else {
case models.Mainnet:
d, err = app.Prompt.CaptureMainnetDuration(txt)
case models.EtnaDevnet:
d, err = app.Prompt.CaptureEtnaDuration(txt)
default:
d, err = app.Prompt.CaptureDuration(txt)
}
if err != nil {
return 0, err
Expand Down
7 changes: 6 additions & 1 deletion cmd/blockchaincmd/change_weight.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,12 @@ func setWeight(_ *cobra.Command, args []string) error {
deployer := subnet.NewPublicDeployer(app, kc, network)

// first remove the validator from subnet
err = removeValidatorSOV(deployer, network, blockchainName, nodeID)
err = removeValidatorSOV(deployer,
network,
blockchainName,
nodeID,
false, // don't force
)
if err != nil {
return err
}
Expand Down
46 changes: 29 additions & 17 deletions cmd/blockchaincmd/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ type CreateFlags struct {
addICMRegistryToGenesis bool
proofOfStake bool
proofOfAuthority bool
poaValidatorManagerOwner string
rewardBasisPoints uint64
validatorManagerOwner string
proxyContractOwner string
enableDebugging bool
}

Expand All @@ -64,7 +66,7 @@ var (
errMutuallyExlusiveVersionOptions = errors.New("version flags --latest,--pre-release,vm-version are mutually exclusive")
errMutuallyExclusiveVMConfigOptions = errors.New("--genesis flag disables --evm-chain-id,--evm-defaults,--production-defaults,--test-defaults")
errMutuallyExlusiveValidatorManagementOptions = errors.New("validator management type flags --proof-of-authority,--proof-of-stake are mutually exclusive")
errSOVFlagsOnly = errors.New("flags --proof-of-authority, --proof-of-stake, --poa-manager-owner are only applicable to Subnet Only Validator (SOV) blockchains")
errSOVFlagsOnly = errors.New("flags --proof-of-authority, --proof-of-stake, --poa-manager-owner --proxy-contract-owner are only applicable to Subnet Only Validator (SOV) blockchains")
)

// avalanche blockchain create
Expand Down Expand Up @@ -109,10 +111,12 @@ configuration, pass the -f flag.`,
cmd.Flags().BoolVar(&createFlags.useTeleporter, "teleporter", false, "interoperate with other blockchains using teleporter")
cmd.Flags().BoolVar(&createFlags.useExternalGasToken, "external-gas-token", false, "use a gas token from another blockchain")
cmd.Flags().BoolVar(&createFlags.addICMRegistryToGenesis, "icm-registry-at-genesis", false, "setup ICM registry smart contract on genesis [experimental]")
cmd.Flags().BoolVar(&createFlags.proofOfAuthority, "proof-of-authority", false, "use proof of authority for validator management")
cmd.Flags().BoolVar(&createFlags.proofOfStake, "proof-of-stake", false, "(coming soon) use proof of stake for validator management")
cmd.Flags().StringVar(&createFlags.poaValidatorManagerOwner, "poa-manager-owner", "", "EVM address that controls Validator Manager Owner (for Proof of Authority only)")
cmd.Flags().BoolVar(&createFlags.proofOfAuthority, "proof-of-authority", false, "use proof of authority(PoA) for validator management")
cmd.Flags().BoolVar(&createFlags.proofOfStake, "proof-of-stake", false, "use proof of stake(PoS) for validator management")
cmd.Flags().StringVar(&createFlags.validatorManagerOwner, "validator-manager-owner", "", "EVM address that controls Validator Manager Owner")
cmd.Flags().StringVar(&createFlags.proxyContractOwner, "proxy-contract-owner", "", "EVM address that controls ProxyAdmin for TransparentProxy of ValidatorManager contract")
cmd.Flags().BoolVar(&sovereign, "sovereign", true, "set to false if creating non-sovereign blockchain")
cmd.Flags().Uint64Var(&createFlags.rewardBasisPoints, "reward-basis-points", 100, "(PoS only) reward basis points for PoS Reward Calculator")
cmd.Flags().BoolVar(&createFlags.enableDebugging, "debug", true, "enable blockchain debugging")
return cmd
}
Expand Down Expand Up @@ -199,7 +203,7 @@ func createBlockchainConfig(cmd *cobra.Command, args []string) error {
}

if !sovereign {
if createFlags.proofOfAuthority || createFlags.proofOfStake || createFlags.poaValidatorManagerOwner != "" {
if createFlags.proofOfAuthority || createFlags.proofOfStake || createFlags.validatorManagerOwner != "" || createFlags.proxyContractOwner != "" {
return errSOVFlagsOnly
}
}
Expand All @@ -208,6 +212,10 @@ func createBlockchainConfig(cmd *cobra.Command, args []string) error {
return errMutuallyExlusiveValidatorManagementOptions
}

if createFlags.rewardBasisPoints == 0 && createFlags.proofOfStake {
return fmt.Errorf("reward basis points cannot be zero")
}

// get vm kind
vmType, err := vm.PromptVMType(app, createFlags.useSubnetEvm, createFlags.useCustomVM)
if err != nil {
Expand Down Expand Up @@ -239,22 +247,24 @@ func createBlockchainConfig(cmd *cobra.Command, args []string) error {
if err = promptValidatorManagementType(app, sc); err != nil {
return err
}
if !sc.PoA() && createFlags.poaValidatorManagerOwner != "" {
return errors.New("--poa-manager-owner flag cannot be used when blockchain validator management type is not Proof of Authority")
}
}

if vmType == models.SubnetEvm {
if sovereign {
if sc.PoA() {
if createFlags.poaValidatorManagerOwner == "" {
createFlags.poaValidatorManagerOwner, err = getValidatorContractManagerAddr()
if err != nil {
return err
}
if createFlags.validatorManagerOwner == "" {
createFlags.validatorManagerOwner, err = getValidatorContractManagerAddr()
if err != nil {
return err
}
sc.PoAValidatorManagerOwner = createFlags.poaValidatorManagerOwner
ux.Logger.GreenCheckmarkToUser("Validator Manager Contract owner address %s", createFlags.poaValidatorManagerOwner)
}
sc.ValidatorManagerOwner = createFlags.validatorManagerOwner
ux.Logger.GreenCheckmarkToUser("Validator Manager Contract owner address %s", createFlags.validatorManagerOwner)

// use the validator manager owner as the transparent proxy contract owner unless specified via cmd flag
if createFlags.proxyContractOwner != "" {
sc.ProxyContractOwner = createFlags.proxyContractOwner
} else {
sc.ProxyContractOwner = sc.ValidatorManagerOwner
}
}

Expand Down Expand Up @@ -326,6 +336,8 @@ func createBlockchainConfig(cmd *cobra.Command, args []string) error {
params,
teleporterInfo,
createFlags.addICMRegistryToGenesis,
sc.ProxyContractOwner,
createFlags.rewardBasisPoints,
)
if err != nil {
return err
Expand Down
Loading
Loading