mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 00:07:51 +00:00 
			
		
		
		
	rebase, add account command
This commit is contained in:
		
							parent
							
								
									cadb7baf2b
								
							
						
					
					
						commit
						54b9cf167f
					
				@ -3,26 +3,33 @@ package main
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/viper"
 | 
			
		||||
 | 
			
		||||
	validatorvesting "github.com/kava-labs/kava/x/validator-vesting"
 | 
			
		||||
	"github.com/tendermint/tendermint/libs/cli"
 | 
			
		||||
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/client/keys"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/server"
 | 
			
		||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/version"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/x/auth"
 | 
			
		||||
	authexported "github.com/cosmos/cosmos-sdk/x/auth/exported"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/x/auth/vesting"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/x/genutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	flagClientHome   = "home-client"
 | 
			
		||||
	flagVestingStart = "vesting-start-time"
 | 
			
		||||
	flagVestingEnd   = "vesting-end-time"
 | 
			
		||||
	flagVestingAmt   = "vesting-amount"
 | 
			
		||||
	flagClientHome           = "home-client"
 | 
			
		||||
	flagVestingStart         = "vesting-start-time"
 | 
			
		||||
	flagVestingEnd           = "vesting-end-time"
 | 
			
		||||
	flagVestingAmt           = "vesting-amount"
 | 
			
		||||
	flagVestingPeriodsFile   = "vesting-periods-file"
 | 
			
		||||
	flagValidatorVestingFile = "validator-vesting-file"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// AddGenesisAccountCmd returns an add-genesis-account cobra Command.
 | 
			
		||||
@ -33,11 +40,17 @@ func AddGenesisAccountCmd(
 | 
			
		||||
	cmd := &cobra.Command{
 | 
			
		||||
		Use:   "add-genesis-account [address_or_key_name] [coin][,[coin]]",
 | 
			
		||||
		Short: "Add a genesis account to genesis.json",
 | 
			
		||||
		Long: `Add a genesis account to genesis.json. The provided account must specify
 | 
			
		||||
		Long: strings.TrimSpace(
 | 
			
		||||
			fmt.Sprintf(`Add a genesis account to genesis.json. The provided account must specify
 | 
			
		||||
 the account address or key name and a list of initial coins. If a key name is given,
 | 
			
		||||
 the address will be looked up in the local Keybase. The list of initial tokens must
 | 
			
		||||
 contain valid denominations. Accounts may optionally be supplied with vesting parameters.
 | 
			
		||||
 `,
 | 
			
		||||
 If the account is a periodic or validator vesting account, vesting periods must be suppleid
 | 
			
		||||
 via a JSON file using the 'vesting-periods-file' flag or 'validator-vesting-file' flag,
 | 
			
		||||
 respectively.
 | 
			
		||||
 Example:
 | 
			
		||||
 %s add-genesis-account <account-name> <amount> --vesting-amount <amount> --vesting-end-time <unix-timestamp> --vesting-start-time <unix-timestamp> --vesting-periods <path/to/vesting.json>`, version.ClientName),
 | 
			
		||||
		),
 | 
			
		||||
		Args: cobra.ExactArgs(2),
 | 
			
		||||
		RunE: func(_ *cobra.Command, args []string) error {
 | 
			
		||||
			config := ctx.Config
 | 
			
		||||
@ -70,22 +83,43 @@ func AddGenesisAccountCmd(
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return fmt.Errorf("failed to parse vesting amount: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
			vestingPeriodsFile := viper.GetString(flagVestingPeriodsFile)
 | 
			
		||||
			validatorVestingFile := viper.GetString(flagValidatorVestingFile)
 | 
			
		||||
			if vestingPeriodsFile != "" && validatorVestingFile != "" {
 | 
			
		||||
				return errors.New("Cannot specify both vesting-periods-file and validator-vesting-file")
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// create concrete account type based on input parameters
 | 
			
		||||
			var genAccount authexported.GenesisAccount
 | 
			
		||||
 | 
			
		||||
			baseAccount := auth.NewBaseAccount(addr, coins.Sort(), nil, 0, 0)
 | 
			
		||||
			if !vestingAmt.IsZero() {
 | 
			
		||||
				baseVestingAccount := auth.NewBaseVestingAccount(
 | 
			
		||||
					baseAccount, vestingAmt.Sort(), sdk.Coins{}, sdk.Coins{}, vestingEnd,
 | 
			
		||||
				baseVestingAccount := vesting.NewBaseVestingAccount(
 | 
			
		||||
					baseAccount, vestingAmt.Sort(), vestingEnd,
 | 
			
		||||
				)
 | 
			
		||||
 | 
			
		||||
				switch {
 | 
			
		||||
				case vestingPeriodsFile != "":
 | 
			
		||||
					vestingPeriodsJSON, err := ParsePeriodicVestingJSON(cdc, vestingPeriodsFile)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						return fmt.Errorf("failed to parse periodic vesting account json file: %w", err)
 | 
			
		||||
					}
 | 
			
		||||
					genAccount = vesting.NewPeriodicVestingAccountRaw(baseVestingAccount, vestingStart, vestingPeriodsJSON.Periods)
 | 
			
		||||
				case validatorVestingFile != "":
 | 
			
		||||
					validatorVestingJSON, err := ParseValidatorVestingJSON(cdc, validatorVestingFile)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						return fmt.Errorf("failed to parse validator vesting account json file: %w", err)
 | 
			
		||||
					}
 | 
			
		||||
					consAddr, err := sdk.ConsAddressFromHex(validatorVestingJSON.ValidatorAddress)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						return fmt.Errorf("failed to convert validator address to bytes: %w", err)
 | 
			
		||||
					}
 | 
			
		||||
					genAccount = validatorvesting.NewValidatorVestingAccountRaw(baseVestingAccount, vestingStart, validatorVestingJSON.Periods, consAddr, validatorVestingJSON.ReturnAddress, validatorVestingJSON.SigningThreshold)
 | 
			
		||||
				case vestingStart != 0 && vestingEnd != 0:
 | 
			
		||||
					genAccount = auth.NewContinuousVestingAccountRaw(baseVestingAccount, vestingStart)
 | 
			
		||||
					genAccount = vesting.NewContinuousVestingAccountRaw(baseVestingAccount, vestingStart)
 | 
			
		||||
 | 
			
		||||
				case vestingEnd != 0:
 | 
			
		||||
					genAccount = auth.NewDelayedVestingAccountRaw(baseVestingAccount)
 | 
			
		||||
					genAccount = vesting.NewDelayedVestingAccountRaw(baseVestingAccount)
 | 
			
		||||
 | 
			
		||||
				default:
 | 
			
		||||
					return errors.New("invalid vesting parameters; must supply start and end time or end time")
 | 
			
		||||
@ -136,6 +170,52 @@ func AddGenesisAccountCmd(
 | 
			
		||||
	cmd.Flags().String(flagVestingAmt, "", "amount of coins for vesting accounts")
 | 
			
		||||
	cmd.Flags().Uint64(flagVestingStart, 0, "schedule start time (unix epoch) for vesting accounts")
 | 
			
		||||
	cmd.Flags().Uint64(flagVestingEnd, 0, "schedule end time (unix epoch) for vesting accounts")
 | 
			
		||||
 | 
			
		||||
	cmd.Flags().String(flagVestingPeriodsFile, "", "path to file where periodic vesting schedule is specified")
 | 
			
		||||
	cmd.Flags().String(flagValidatorVestingFile, "", "path to file where validator vesting schedule is specified")
 | 
			
		||||
	return cmd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ValidatorVestingJSON input json for validator-vesting-file flag
 | 
			
		||||
type ValidatorVestingJSON struct {
 | 
			
		||||
	Periods          vesting.Periods `json:"periods" yaml:"periods"`
 | 
			
		||||
	ValidatorAddress string          `json:"validator_address" yaml:"validator_address"`
 | 
			
		||||
	SigningThreshold int64           `json:"signing_threshold" yaml:"signing_threshold"`
 | 
			
		||||
	ReturnAddress    sdk.AccAddress  `json:"return_address,omitempty" yaml:"return_address,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// PeriodicVestingJSON input json for vesting-periods-file flag
 | 
			
		||||
type PeriodicVestingJSON struct {
 | 
			
		||||
	Periods vesting.Periods `json:"periods" yaml:"periods"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParsePeriodicVestingJSON reads and parses ParsePeriodicVestingJSON from the file
 | 
			
		||||
func ParsePeriodicVestingJSON(cdc *codec.Codec, inputFile string) (PeriodicVestingJSON, error) {
 | 
			
		||||
	periodsInput := PeriodicVestingJSON{}
 | 
			
		||||
 | 
			
		||||
	content, err := ioutil.ReadFile(inputFile)
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return periodsInput, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := cdc.UnmarshalJSON(content, &periodsInput); err != nil {
 | 
			
		||||
		return periodsInput, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return periodsInput, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseValidatorVestingJSON reads and parses ParseValidatorVestingJSON from the file
 | 
			
		||||
func ParseValidatorVestingJSON(cdc *codec.Codec, inputFile string) (ValidatorVestingJSON, error) {
 | 
			
		||||
	validatorVestingInput := ValidatorVestingJSON{}
 | 
			
		||||
	content, err := ioutil.ReadFile(inputFile)
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return validatorVestingInput, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := cdc.UnmarshalJSON(content, &validatorVestingInput); err != nil {
 | 
			
		||||
		return validatorVestingInput, err
 | 
			
		||||
	}
 | 
			
		||||
	return validatorVestingInput, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.mod
									
									
									
									
									
								
							@ -9,9 +9,9 @@ require (
 | 
			
		||||
	github.com/spf13/viper v1.4.0
 | 
			
		||||
	github.com/stretchr/testify v1.4.0
 | 
			
		||||
	github.com/tendermint/go-amino v0.15.0
 | 
			
		||||
	github.com/tendermint/tendermint v0.32.3
 | 
			
		||||
	github.com/tendermint/tendermint v0.32.5
 | 
			
		||||
	github.com/tendermint/tm-db v0.2.0
 | 
			
		||||
	gopkg.in/yaml.v2 v2.2.2
 | 
			
		||||
	gopkg.in/yaml.v2 v2.2.3
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
replace github.com/cosmos/cosmos-sdk => ../../cosmos/cosmos-sdk
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								go.sum
									
									
									
									
									
								
							@ -6,6 +6,7 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
 | 
			
		||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 | 
			
		||||
github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
 | 
			
		||||
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
 | 
			
		||||
github.com/Workiva/go-datastructures v1.0.50/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA=
 | 
			
		||||
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
 | 
			
		||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 | 
			
		||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 | 
			
		||||
@ -73,6 +74,8 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME
 | 
			
		||||
github.com/go-kit/kit v0.6.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 | 
			
		||||
github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
 | 
			
		||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 | 
			
		||||
github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk=
 | 
			
		||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 | 
			
		||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 | 
			
		||||
github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=
 | 
			
		||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
 | 
			
		||||
@ -143,8 +146,12 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 | 
			
		||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 | 
			
		||||
github.com/libp2p/go-buffer-pool v0.0.1 h1:9Rrn/H46cXjaA2HQ5Y8lyhOS1NhTkZ4yuEs2r3Eechg=
 | 
			
		||||
github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ=
 | 
			
		||||
github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs=
 | 
			
		||||
github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM=
 | 
			
		||||
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
 | 
			
		||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 | 
			
		||||
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
 | 
			
		||||
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
 | 
			
		||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 | 
			
		||||
@ -189,6 +196,8 @@ github.com/rcrowley/go-metrics v0.0.0-20180503174638-e2704e165165/go.mod h1:bCqn
 | 
			
		||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
 | 
			
		||||
github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI=
 | 
			
		||||
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
 | 
			
		||||
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
 | 
			
		||||
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
 | 
			
		||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
 | 
			
		||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 | 
			
		||||
github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4=
 | 
			
		||||
@ -237,6 +246,8 @@ github.com/tendermint/iavl v0.12.4/go.mod h1:8LHakzt8/0G3/I8FUU0ReNx98S/EP6eyPJk
 | 
			
		||||
github.com/tendermint/tendermint v0.32.1/go.mod h1:jmPDAKuNkev9793/ivn/fTBnfpA9mGBww8MPRNPNxnU=
 | 
			
		||||
github.com/tendermint/tendermint v0.32.3 h1:GEnWpGQ795h5oTFNbfBLsY0LW/CW2j6p6HtiYNfxsgg=
 | 
			
		||||
github.com/tendermint/tendermint v0.32.3/go.mod h1:ZK2c29jl1QRYznIRyRWRDsmm1yvtPzBRT00x4t1JToY=
 | 
			
		||||
github.com/tendermint/tendermint v0.32.5 h1:2hCLwuzfCKZxXSe/+iMEl+ChJWKJx6g/Wcvq3NMxVN4=
 | 
			
		||||
github.com/tendermint/tendermint v0.32.5/go.mod h1:D2+A3pNjY+Po72X0mTfaXorFhiVI8dh/Zg640FGyGtE=
 | 
			
		||||
github.com/tendermint/tm-db v0.1.1 h1:G3Xezy3sOk9+ekhjZ/kjArYIs1SmwV+1OUgNkj7RgV0=
 | 
			
		||||
github.com/tendermint/tm-db v0.1.1/go.mod h1:0cPKWu2Mou3IlxecH+MEUSYc1Ch537alLe6CpFrKzgw=
 | 
			
		||||
github.com/tendermint/tm-db v0.2.0 h1:rJxgdqn6fIiVJZy4zLpY1qVlyD0TU6vhkT4kEf71TQQ=
 | 
			
		||||
@ -310,6 +321,8 @@ google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZi
 | 
			
		||||
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
 | 
			
		||||
google.golang.org/grpc v1.22.0 h1:J0UbZOIrCAl+fpTOf8YLs4dJo8L/owV4LYVtAXQoPkw=
 | 
			
		||||
google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 | 
			
		||||
google.golang.org/grpc v1.23.1 h1:q4XQuHFC6I28BKZpo6IYyb3mNO+l7lSOxRuYTCiDfXk=
 | 
			
		||||
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 | 
			
		||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 | 
			
		||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 | 
			
		||||
@ -323,5 +336,7 @@ gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bl
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=
 | 
			
		||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 | 
			
		||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 | 
			
		||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ func InitGenesis(ctx sdk.Context, keeper Keeper, accountKeeper types.AccountKeep
 | 
			
		||||
 | 
			
		||||
	accounts := accountKeeper.GetAllAccounts(ctx)
 | 
			
		||||
	for _, a := range accounts {
 | 
			
		||||
		vv, ok := a.(ValidatorVestingAccount)
 | 
			
		||||
		vv, ok := a.(*ValidatorVestingAccount)
 | 
			
		||||
		if ok {
 | 
			
		||||
			keeper.SetValidatorVestingAccountKey(ctx, vv.Address)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -163,6 +163,7 @@ func (k Keeper) HandleVestingDebt(ctx sdk.Context, addr sdk.AccAddress, blockTim
 | 
			
		||||
					panic(err)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			vv = k.GetAccountFromAuthKeeper(ctx, addr)
 | 
			
		||||
			vv.DebtAfterFailedVesting = sdk.NewCoins()
 | 
			
		||||
			k.ak.SetAccount(ctx, vv)
 | 
			
		||||
		} else {
 | 
			
		||||
 | 
			
		||||
@ -203,7 +203,6 @@ func TestHandleVestingDebtNoDebt(t *testing.T) {
 | 
			
		||||
	vva = keeper.GetAccountFromAuthKeeper(ctx, vva.Address)
 | 
			
		||||
	require.Equal(t, origCoins, vva.DelegatedVesting)
 | 
			
		||||
	require.Nil(t, vva.DelegatedFree)
 | 
			
		||||
	require.Nil(t, vva.GetCoins())
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -43,13 +43,11 @@ type ValidatorVestingAccount struct {
 | 
			
		||||
// NewValidatorVestingAccountRaw creates a new ValidatorVestingAccount object from BaseVestingAccount
 | 
			
		||||
func NewValidatorVestingAccountRaw(bva *vestingtypes.BaseVestingAccount,
 | 
			
		||||
	startTime int64, periods vestingtypes.Periods, validatorAddress sdk.ConsAddress, returnAddress sdk.AccAddress, signingThreshold int64) *ValidatorVestingAccount {
 | 
			
		||||
	cva := &vestingtypes.ContinuousVestingAccount{
 | 
			
		||||
		StartTime:          startTime,
 | 
			
		||||
		BaseVestingAccount: bva,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pva := &vestingtypes.PeriodicVestingAccount{
 | 
			
		||||
		ContinuousVestingAccount: cva,
 | 
			
		||||
		VestingPeriods:           periods,
 | 
			
		||||
		BaseVestingAccount: bva,
 | 
			
		||||
		StartTime:          startTime,
 | 
			
		||||
		VestingPeriods:     periods,
 | 
			
		||||
	}
 | 
			
		||||
	var vestingPeriodProgress = make([][]int, len(periods))
 | 
			
		||||
	for i := range vestingPeriodProgress {
 | 
			
		||||
@ -79,13 +77,10 @@ func NewValidatorVestingAccount(baseAcc *authtypes.BaseAccount, startTime int64,
 | 
			
		||||
		OriginalVesting: baseAcc.Coins,
 | 
			
		||||
		EndTime:         endTime,
 | 
			
		||||
	}
 | 
			
		||||
	cva := &vestingtypes.ContinuousVestingAccount{
 | 
			
		||||
		StartTime:          startTime,
 | 
			
		||||
		BaseVestingAccount: baseVestingAcc,
 | 
			
		||||
	}
 | 
			
		||||
	pva := &vestingtypes.PeriodicVestingAccount{
 | 
			
		||||
		ContinuousVestingAccount: cva,
 | 
			
		||||
		VestingPeriods:           periods,
 | 
			
		||||
		BaseVestingAccount: baseVestingAcc,
 | 
			
		||||
		StartTime:          startTime,
 | 
			
		||||
		VestingPeriods:     periods,
 | 
			
		||||
	}
 | 
			
		||||
	var vestingPeriodProgress = make([][]int, len(periods))
 | 
			
		||||
	for i := range vestingPeriodProgress {
 | 
			
		||||
 | 
			
		||||
@ -286,8 +286,6 @@ func TestTrackDelegationValidatorVestingAcc(t *testing.T) {
 | 
			
		||||
	vva.TrackDelegation(now, origCoins)
 | 
			
		||||
	require.Equal(t, origCoins, vva.DelegatedVesting)
 | 
			
		||||
	require.Nil(t, vva.DelegatedFree)
 | 
			
		||||
	require.Nil(t, vva.GetCoins())
 | 
			
		||||
	require.Nil(t, vva.SpendableCoins(now))
 | 
			
		||||
 | 
			
		||||
	// all periods pass successfully
 | 
			
		||||
	bacc.SetCoins(origCoins)
 | 
			
		||||
@ -299,8 +297,6 @@ func TestTrackDelegationValidatorVestingAcc(t *testing.T) {
 | 
			
		||||
	// require all delegated coins are free
 | 
			
		||||
	require.Equal(t, origCoins, vva.DelegatedFree)
 | 
			
		||||
	require.Nil(t, vva.DelegatedVesting)
 | 
			
		||||
	require.Nil(t, vva.GetCoins())
 | 
			
		||||
	require.Nil(t, vva.SpendableCoins(now.Add(48*time.Hour)))
 | 
			
		||||
 | 
			
		||||
	// require the ability to delegate all vesting coins (50%) and all vested coins (50%)
 | 
			
		||||
	bacc.SetCoins(origCoins)
 | 
			
		||||
@ -313,7 +309,6 @@ func TestTrackDelegationValidatorVestingAcc(t *testing.T) {
 | 
			
		||||
	vva.TrackDelegation(now.Add(12*time.Hour), sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)})
 | 
			
		||||
	require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}, vva.DelegatedVesting)
 | 
			
		||||
	require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}, vva.DelegatedFree)
 | 
			
		||||
	require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 1000)}, vva.GetCoins())
 | 
			
		||||
 | 
			
		||||
	// require no modifications when delegation amount is zero or not enough funds
 | 
			
		||||
	bacc.SetCoins(origCoins)
 | 
			
		||||
@ -323,7 +318,6 @@ func TestTrackDelegationValidatorVestingAcc(t *testing.T) {
 | 
			
		||||
	})
 | 
			
		||||
	require.Nil(t, vva.DelegatedVesting)
 | 
			
		||||
	require.Nil(t, vva.DelegatedFree)
 | 
			
		||||
	require.Equal(t, origCoins, vva.GetCoins())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestTrackUndelegationPeriodicVestingAcc(t *testing.T) {
 | 
			
		||||
@ -347,7 +341,6 @@ func TestTrackUndelegationPeriodicVestingAcc(t *testing.T) {
 | 
			
		||||
	vva.TrackUndelegation(origCoins)
 | 
			
		||||
	require.Nil(t, vva.DelegatedFree)
 | 
			
		||||
	require.Nil(t, vva.DelegatedVesting)
 | 
			
		||||
	require.Equal(t, origCoins, vva.GetCoins())
 | 
			
		||||
 | 
			
		||||
	// require the ability to delegate all coins after they have successfully vested
 | 
			
		||||
	bacc.SetCoins(origCoins)
 | 
			
		||||
@ -359,7 +352,6 @@ func TestTrackUndelegationPeriodicVestingAcc(t *testing.T) {
 | 
			
		||||
	vva.TrackUndelegation(origCoins)
 | 
			
		||||
	require.Nil(t, vva.DelegatedFree)
 | 
			
		||||
	require.Nil(t, vva.DelegatedVesting)
 | 
			
		||||
	require.Equal(t, origCoins, vva.GetCoins())
 | 
			
		||||
 | 
			
		||||
	// require panic and no modifications when attempting to undelegate zero coins
 | 
			
		||||
	bacc.SetCoins(origCoins)
 | 
			
		||||
@ -369,7 +361,6 @@ func TestTrackUndelegationPeriodicVestingAcc(t *testing.T) {
 | 
			
		||||
	})
 | 
			
		||||
	require.Nil(t, vva.DelegatedFree)
 | 
			
		||||
	require.Nil(t, vva.DelegatedVesting)
 | 
			
		||||
	require.Equal(t, origCoins, vva.GetCoins())
 | 
			
		||||
 | 
			
		||||
	// successfuly vest period 1 and delegate to two validators
 | 
			
		||||
	vva = NewValidatorVestingAccount(&bacc, now.Unix(), periods, testConsAddr, nil, 90)
 | 
			
		||||
@ -381,13 +372,11 @@ func TestTrackUndelegationPeriodicVestingAcc(t *testing.T) {
 | 
			
		||||
	vva.TrackUndelegation(sdk.Coins{sdk.NewInt64Coin(stakeDenom, 25)})
 | 
			
		||||
	require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 25)}, vva.DelegatedFree)
 | 
			
		||||
	require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}, vva.DelegatedVesting)
 | 
			
		||||
	require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 1000), sdk.NewInt64Coin(stakeDenom, 25)}, vva.GetCoins())
 | 
			
		||||
 | 
			
		||||
	// undelegate from the other validator that did not get slashed
 | 
			
		||||
	vva.TrackUndelegation(sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)})
 | 
			
		||||
	require.Nil(t, vva.DelegatedFree)
 | 
			
		||||
	require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 25)}, vva.DelegatedVesting)
 | 
			
		||||
	require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 1000), sdk.NewInt64Coin(stakeDenom, 75)}, vva.GetCoins())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestGenesisAccountValidate(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user