finished pulling in, compiles
This commit is contained in:
parent
ab61695be9
commit
0f903bdd52
|
@ -37,22 +37,23 @@ func (b BondStatus) Equal(b2 BondStatus) bool {
|
|||
|
||||
// validator for a delegated proof of stake system
|
||||
type Validator interface {
|
||||
GetJailed() bool // whether the validator is jailed
|
||||
GetMoniker() string // moniker of the validator
|
||||
GetStatus() BondStatus // status of the validator
|
||||
GetOperator() ValAddress // operator address to receive/return validators coins
|
||||
GetPubKey() crypto.PubKey // validation pubkey
|
||||
GetPower() Dec // validation power
|
||||
GetTokens() Dec // validation tokens
|
||||
GetDelegatorShares() Dec // Total out standing delegator shares
|
||||
GetBondHeight() int64 // height in which the validator became active
|
||||
GetJailed() bool // whether the validator is jailed
|
||||
GetMoniker() string // moniker of the validator
|
||||
GetStatus() BondStatus // status of the validator
|
||||
GetOperator() ValAddress // operator address to receive/return validators coins
|
||||
GetConsPubKey() crypto.PubKey // validation pubkey
|
||||
GetConsAddr() ConsAddress // validation pubkey
|
||||
GetPower() Dec // validation power
|
||||
GetTokens() Dec // validation tokens
|
||||
GetDelegatorShares() Dec // Total out standing delegator shares
|
||||
GetBondHeight() int64 // height in which the validator became active
|
||||
}
|
||||
|
||||
// validator which fulfills abci validator interface for use in Tendermint
|
||||
func ABCIValidator(v Validator) abci.Validator {
|
||||
return abci.Validator{
|
||||
PubKey: tmtypes.TM2PB.PubKey(v.GetPubKey()),
|
||||
Address: v.GetPubKey().Address(),
|
||||
PubKey: tmtypes.TM2PB.PubKey(v.GetConsPubKey()),
|
||||
Address: v.GetConsPubKey().Address(),
|
||||
Power: v.GetPower().RoundInt64(),
|
||||
}
|
||||
}
|
||||
|
@ -67,14 +68,15 @@ type ValidatorSet interface {
|
|||
IterateValidatorsBonded(Context,
|
||||
func(index int64, validator Validator) (stop bool))
|
||||
|
||||
Validator(Context, ValAddress) Validator // get a particular validator by operator
|
||||
ValidatorByPubKey(Context, crypto.PubKey) Validator // get a particular validator by signing PubKey
|
||||
TotalPower(Context) Dec // total power of the validator set
|
||||
Validator(Context, ValAddress) Validator // get a particular validator by operator address
|
||||
ValidatorByConsPubKey(Context, crypto.PubKey) Validator // get a particular validator by consensus PubKey
|
||||
ValidatorByConsAddr(Context, ConsAddress) Validator // get a particular validator by consensus address
|
||||
TotalPower(Context) Dec // total power of the validator set
|
||||
|
||||
// slash the validator and delegators of the validator, specifying offence height, offence power, and slash fraction
|
||||
Slash(Context, crypto.PubKey, int64, int64, Dec)
|
||||
Jail(Context, crypto.PubKey) // jail a validator
|
||||
Unjail(Context, crypto.PubKey) // unjail a validator
|
||||
Slash(Context, ConsAddress, int64, int64, Dec)
|
||||
Jail(Context, ConsAddress) // jail a validator
|
||||
Unjail(Context, ConsAddress) // unjail a validator
|
||||
|
||||
// Delegation allows for getting a particular delegation for a given validator
|
||||
// and delegator outside the scope of the staking module.
|
||||
|
@ -87,7 +89,7 @@ type ValidatorSet interface {
|
|||
type Delegation interface {
|
||||
GetDelegator() AccAddress // delegator AccAddress for the bond
|
||||
GetValidator() ValAddress // validator operator address
|
||||
GetBondShares() Dec // amount of validator's shares
|
||||
GetShares() Dec // amount of validator's shares held in this delegation
|
||||
}
|
||||
|
||||
// properties for the set of all delegations for a particular
|
||||
|
|
|
@ -2,7 +2,6 @@ package gov
|
|||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
|
@ -29,18 +28,12 @@ func TestTickExpiredDepositPeriod(t *testing.T) {
|
|||
require.NotNil(t, keeper.InactiveProposalQueuePeek(ctx))
|
||||
require.False(t, shouldPopInactiveProposalQueue(ctx, keeper))
|
||||
|
||||
newHeader := ctx.BlockHeader()
|
||||
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(1) * time.Second)
|
||||
ctx = ctx.WithBlockHeader(newHeader)
|
||||
|
||||
ctx = ctx.WithBlockHeight(10)
|
||||
EndBlocker(ctx, keeper)
|
||||
require.NotNil(t, keeper.InactiveProposalQueuePeek(ctx))
|
||||
require.False(t, shouldPopInactiveProposalQueue(ctx, keeper))
|
||||
|
||||
newHeader = ctx.BlockHeader()
|
||||
newHeader.Time = ctx.BlockHeader().Time.Add(keeper.GetDepositProcedure(ctx).MaxDepositPeriod)
|
||||
ctx = ctx.WithBlockHeader(newHeader)
|
||||
|
||||
ctx = ctx.WithBlockHeight(250)
|
||||
require.NotNil(t, keeper.InactiveProposalQueuePeek(ctx))
|
||||
require.True(t, shouldPopInactiveProposalQueue(ctx, keeper))
|
||||
EndBlocker(ctx, keeper)
|
||||
|
@ -66,10 +59,7 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) {
|
|||
require.NotNil(t, keeper.InactiveProposalQueuePeek(ctx))
|
||||
require.False(t, shouldPopInactiveProposalQueue(ctx, keeper))
|
||||
|
||||
newHeader := ctx.BlockHeader()
|
||||
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(2) * time.Second)
|
||||
ctx = ctx.WithBlockHeader(newHeader)
|
||||
|
||||
ctx = ctx.WithBlockHeight(10)
|
||||
EndBlocker(ctx, keeper)
|
||||
require.NotNil(t, keeper.InactiveProposalQueuePeek(ctx))
|
||||
require.False(t, shouldPopInactiveProposalQueue(ctx, keeper))
|
||||
|
@ -78,20 +68,14 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) {
|
|||
res = govHandler(ctx, newProposalMsg2)
|
||||
require.True(t, res.IsOK())
|
||||
|
||||
newHeader = ctx.BlockHeader()
|
||||
newHeader.Time = ctx.BlockHeader().Time.Add(keeper.GetDepositProcedure(ctx).MaxDepositPeriod).Add(time.Duration(-1) * time.Second)
|
||||
ctx = ctx.WithBlockHeader(newHeader)
|
||||
|
||||
ctx = ctx.WithBlockHeight(205)
|
||||
require.NotNil(t, keeper.InactiveProposalQueuePeek(ctx))
|
||||
require.True(t, shouldPopInactiveProposalQueue(ctx, keeper))
|
||||
EndBlocker(ctx, keeper)
|
||||
require.NotNil(t, keeper.InactiveProposalQueuePeek(ctx))
|
||||
require.False(t, shouldPopInactiveProposalQueue(ctx, keeper))
|
||||
|
||||
newHeader = ctx.BlockHeader()
|
||||
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(5) * time.Second)
|
||||
ctx = ctx.WithBlockHeader(newHeader)
|
||||
|
||||
ctx = ctx.WithBlockHeight(215)
|
||||
require.NotNil(t, keeper.InactiveProposalQueuePeek(ctx))
|
||||
require.True(t, shouldPopInactiveProposalQueue(ctx, keeper))
|
||||
EndBlocker(ctx, keeper)
|
||||
|
@ -121,10 +105,7 @@ func TestTickPassedDepositPeriod(t *testing.T) {
|
|||
require.NotNil(t, keeper.InactiveProposalQueuePeek(ctx))
|
||||
require.False(t, shouldPopInactiveProposalQueue(ctx, keeper))
|
||||
|
||||
newHeader := ctx.BlockHeader()
|
||||
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(1) * time.Second)
|
||||
ctx = ctx.WithBlockHeader(newHeader)
|
||||
|
||||
ctx = ctx.WithBlockHeight(10)
|
||||
EndBlocker(ctx, keeper)
|
||||
require.NotNil(t, keeper.InactiveProposalQueuePeek(ctx))
|
||||
require.False(t, shouldPopInactiveProposalQueue(ctx, keeper))
|
||||
|
@ -165,20 +146,14 @@ func TestTickPassedVotingPeriod(t *testing.T) {
|
|||
var proposalID int64
|
||||
keeper.cdc.UnmarshalBinaryBare(res.Data, &proposalID)
|
||||
|
||||
newHeader := ctx.BlockHeader()
|
||||
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(1) * time.Second)
|
||||
ctx = ctx.WithBlockHeader(newHeader)
|
||||
|
||||
ctx = ctx.WithBlockHeight(10)
|
||||
newDepositMsg := NewMsgDeposit(addrs[1], proposalID, sdk.Coins{sdk.NewInt64Coin("steak", 5)})
|
||||
res = govHandler(ctx, newDepositMsg)
|
||||
require.True(t, res.IsOK())
|
||||
|
||||
EndBlocker(ctx, keeper)
|
||||
|
||||
newHeader = ctx.BlockHeader()
|
||||
newHeader.Time = ctx.BlockHeader().Time.Add(keeper.GetDepositProcedure(ctx).MaxDepositPeriod).Add(keeper.GetDepositProcedure(ctx).MaxDepositPeriod)
|
||||
ctx = ctx.WithBlockHeader(newHeader)
|
||||
|
||||
ctx = ctx.WithBlockHeight(215)
|
||||
require.True(t, shouldPopActiveProposalQueue(ctx, keeper))
|
||||
depositsIterator := keeper.GetDeposits(ctx, proposalID)
|
||||
require.True(t, depositsIterator.Valid())
|
||||
|
@ -222,10 +197,7 @@ func TestSlashing(t *testing.T) {
|
|||
var proposalID int64
|
||||
keeper.cdc.UnmarshalBinaryBare(res.Data, &proposalID)
|
||||
|
||||
newHeader := ctx.BlockHeader()
|
||||
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(1) * time.Second)
|
||||
ctx = ctx.WithBlockHeader(newHeader)
|
||||
|
||||
ctx = ctx.WithBlockHeight(10)
|
||||
require.Equal(t, StatusVotingPeriod, keeper.GetProposal(ctx, proposalID).GetStatus())
|
||||
|
||||
newVoteMsg := NewMsgVote(addrs[0], proposalID, OptionYes)
|
||||
|
@ -234,10 +206,7 @@ func TestSlashing(t *testing.T) {
|
|||
|
||||
EndBlocker(ctx, keeper)
|
||||
|
||||
newHeader = ctx.BlockHeader()
|
||||
newHeader.Time = ctx.BlockHeader().Time.Add(keeper.GetDepositProcedure(ctx).MaxDepositPeriod).Add(keeper.GetDepositProcedure(ctx).MaxDepositPeriod)
|
||||
ctx = ctx.WithBlockHeader(newHeader)
|
||||
|
||||
ctx = ctx.WithBlockHeight(215)
|
||||
require.Equal(t, StatusVotingPeriod, keeper.GetProposal(ctx, proposalID).GetStatus())
|
||||
|
||||
EndBlocker(ctx, keeper)
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package gov
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
|
@ -29,10 +27,10 @@ func DefaultGenesisState() GenesisState {
|
|||
StartingProposalID: 1,
|
||||
DepositProcedure: DepositProcedure{
|
||||
MinDeposit: sdk.Coins{sdk.NewInt64Coin("steak", 10)},
|
||||
MaxDepositPeriod: time.Duration(172800) * time.Second,
|
||||
MaxDepositPeriod: 200,
|
||||
},
|
||||
VotingProcedure: VotingProcedure{
|
||||
VotingPeriod: time.Duration(172800) * time.Second,
|
||||
VotingPeriod: 200,
|
||||
},
|
||||
TallyingProcedure: TallyingProcedure{
|
||||
Threshold: sdk.NewDecWithPrec(5, 1),
|
||||
|
|
|
@ -128,9 +128,9 @@ func EndBlocker(ctx sdk.Context, keeper Keeper) (resTags sdk.Tags) {
|
|||
for shouldPopActiveProposalQueue(ctx, keeper) {
|
||||
activeProposal := keeper.ActiveProposalQueuePop(ctx)
|
||||
|
||||
proposalStartTime := activeProposal.GetVotingStartTime()
|
||||
proposalStartBlock := activeProposal.GetVotingStartBlock()
|
||||
votingPeriod := keeper.GetVotingProcedure(ctx).VotingPeriod
|
||||
if ctx.BlockHeader().Time.Before(proposalStartTime.Add(votingPeriod)) {
|
||||
if ctx.BlockHeight() < proposalStartBlock+votingPeriod {
|
||||
continue
|
||||
}
|
||||
|
||||
|
@ -155,7 +155,7 @@ func EndBlocker(ctx sdk.Context, keeper Keeper) (resTags sdk.Tags) {
|
|||
for _, valAddr := range nonVotingVals {
|
||||
val := keeper.ds.GetValidatorSet().Validator(ctx, valAddr)
|
||||
keeper.ds.GetValidatorSet().Slash(ctx,
|
||||
val.GetPubKey(),
|
||||
val.GetConsAddr(),
|
||||
ctx.BlockHeight(),
|
||||
val.GetPower().RoundInt64(),
|
||||
keeper.GetTallyingProcedure(ctx).GovernancePenalty)
|
||||
|
@ -178,7 +178,7 @@ func shouldPopInactiveProposalQueue(ctx sdk.Context, keeper Keeper) bool {
|
|||
return false
|
||||
} else if peekProposal.GetStatus() != StatusDepositPeriod {
|
||||
return true
|
||||
} else if !ctx.BlockHeader().Time.Before(peekProposal.GetSubmitTime().Add(depositProcedure.MaxDepositPeriod)) {
|
||||
} else if ctx.BlockHeight() >= peekProposal.GetSubmitBlock()+depositProcedure.MaxDepositPeriod {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -190,7 +190,7 @@ func shouldPopActiveProposalQueue(ctx sdk.Context, keeper Keeper) bool {
|
|||
|
||||
if peekProposal == nil {
|
||||
return false
|
||||
} else if !ctx.BlockHeader().Time.Before(peekProposal.GetVotingStartTime().Add(votingProcedure.VotingPeriod)) {
|
||||
} else if ctx.BlockHeight() >= peekProposal.GetVotingStartBlock()+votingProcedure.VotingPeriod {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
|
@ -66,14 +66,15 @@ func (keeper Keeper) NewTextProposal(ctx sdk.Context, title string, description
|
|||
return nil
|
||||
}
|
||||
var proposal Proposal = &TextProposal{
|
||||
ProposalID: proposalID,
|
||||
Title: title,
|
||||
Description: description,
|
||||
ProposalType: proposalType,
|
||||
Status: StatusDepositPeriod,
|
||||
TallyResult: EmptyTallyResult(),
|
||||
TotalDeposit: sdk.Coins{},
|
||||
SubmitTime: ctx.BlockHeader().Time,
|
||||
ProposalID: proposalID,
|
||||
Title: title,
|
||||
Description: description,
|
||||
ProposalType: proposalType,
|
||||
Status: StatusDepositPeriod,
|
||||
TallyResult: EmptyTallyResult(),
|
||||
TotalDeposit: sdk.Coins{},
|
||||
SubmitBlock: ctx.BlockHeight(),
|
||||
VotingStartBlock: -1, // TODO: Make Time
|
||||
}
|
||||
keeper.SetProposal(ctx, proposal)
|
||||
keeper.InactiveProposalQueuePush(ctx, proposal)
|
||||
|
@ -199,7 +200,7 @@ func (keeper Keeper) peekCurrentProposalID(ctx sdk.Context) (proposalID int64, e
|
|||
}
|
||||
|
||||
func (keeper Keeper) activateVotingPeriod(ctx sdk.Context, proposal Proposal) {
|
||||
proposal.SetVotingStartTime(ctx.BlockHeader().Time)
|
||||
proposal.SetVotingStartBlock(ctx.BlockHeight())
|
||||
proposal.SetStatus(StatusVotingPeriod)
|
||||
keeper.SetProposal(ctx, proposal)
|
||||
keeper.ActiveProposalQueuePush(ctx, proposal)
|
||||
|
|
|
@ -2,7 +2,6 @@ package gov
|
|||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
|
@ -46,12 +45,12 @@ func TestActivateVotingPeriod(t *testing.T) {
|
|||
|
||||
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
||||
|
||||
require.True(t, proposal.GetVotingStartTime().Equal(time.Time{}))
|
||||
require.Equal(t, int64(-1), proposal.GetVotingStartBlock())
|
||||
require.Nil(t, keeper.ActiveProposalQueuePeek(ctx))
|
||||
|
||||
keeper.activateVotingPeriod(ctx, proposal)
|
||||
|
||||
require.True(t, proposal.GetVotingStartTime().Equal(ctx.BlockHeader().Time))
|
||||
require.Equal(t, proposal.GetVotingStartBlock(), ctx.BlockHeight())
|
||||
require.Equal(t, proposal.GetProposalID(), keeper.ActiveProposalQueuePeek(ctx).GetProposalID())
|
||||
}
|
||||
|
||||
|
@ -78,7 +77,7 @@ func TestDeposits(t *testing.T) {
|
|||
// Check no deposits at beginning
|
||||
deposit, found := keeper.GetDeposit(ctx, proposalID, addrs[1])
|
||||
require.False(t, found)
|
||||
require.True(t, keeper.GetProposal(ctx, proposalID).GetVotingStartTime().Equal(time.Time{}))
|
||||
require.Equal(t, keeper.GetProposal(ctx, proposalID).GetVotingStartBlock(), int64(-1))
|
||||
require.Nil(t, keeper.ActiveProposalQueuePeek(ctx))
|
||||
|
||||
// Check first deposit
|
||||
|
@ -115,7 +114,7 @@ func TestDeposits(t *testing.T) {
|
|||
require.Equal(t, addr1Initial.Minus(fourSteak), keeper.ck.GetCoins(ctx, addrs[1]))
|
||||
|
||||
// Check that proposal moved to voting period
|
||||
require.True(t, keeper.GetProposal(ctx, proposalID).GetVotingStartTime().Equal(ctx.BlockHeader().Time))
|
||||
require.Equal(t, ctx.BlockHeight(), keeper.GetProposal(ctx, proposalID).GetVotingStartBlock())
|
||||
require.NotNil(t, keeper.ActiveProposalQueuePeek(ctx))
|
||||
require.Equal(t, proposalID, keeper.ActiveProposalQueuePeek(ctx).GetProposalID())
|
||||
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
package gov
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// Procedure around Deposits for governance
|
||||
type DepositProcedure struct {
|
||||
MinDeposit sdk.Coins `json:"min_deposit"` // Minimum deposit for a proposal to enter voting period.
|
||||
MaxDepositPeriod time.Duration `json:"max_deposit_period"` // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 months
|
||||
MinDeposit sdk.Coins `json:"min_deposit"` // Minimum deposit for a proposal to enter voting period.
|
||||
MaxDepositPeriod int64 `json:"max_deposit_period"` // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 months
|
||||
}
|
||||
|
||||
// Procedure around Tallying votes in governance
|
||||
|
@ -21,5 +19,5 @@ type TallyingProcedure struct {
|
|||
|
||||
// Procedure around Voting in governance
|
||||
type VotingProcedure struct {
|
||||
VotingPeriod time.Duration `json:"voting_period"` // Length of the voting period.
|
||||
VotingPeriod int64 `json:"voting_period"` // Length of the voting period.
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package gov
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
|
@ -31,14 +30,14 @@ type Proposal interface {
|
|||
GetTallyResult() TallyResult
|
||||
SetTallyResult(TallyResult)
|
||||
|
||||
GetSubmitTime() time.Time
|
||||
SetSubmitTime(time.Time)
|
||||
GetSubmitBlock() int64
|
||||
SetSubmitBlock(int64)
|
||||
|
||||
GetTotalDeposit() sdk.Coins
|
||||
SetTotalDeposit(sdk.Coins)
|
||||
|
||||
GetVotingStartTime() time.Time
|
||||
SetVotingStartTime(time.Time)
|
||||
GetVotingStartBlock() int64
|
||||
SetVotingStartBlock(int64)
|
||||
}
|
||||
|
||||
// checks if two proposals are equal
|
||||
|
@ -49,9 +48,9 @@ func ProposalEqual(proposalA Proposal, proposalB Proposal) bool {
|
|||
proposalA.GetProposalType() == proposalB.GetProposalType() &&
|
||||
proposalA.GetStatus() == proposalB.GetStatus() &&
|
||||
proposalA.GetTallyResult().Equals(proposalB.GetTallyResult()) &&
|
||||
proposalA.GetSubmitTime().Equal(proposalB.GetSubmitTime()) &&
|
||||
proposalA.GetSubmitBlock() == proposalB.GetSubmitBlock() &&
|
||||
proposalA.GetTotalDeposit().IsEqual(proposalB.GetTotalDeposit()) &&
|
||||
proposalA.GetVotingStartTime().Equal(proposalB.GetVotingStartTime()) {
|
||||
proposalA.GetVotingStartBlock() == proposalB.GetVotingStartBlock() {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -68,10 +67,10 @@ type TextProposal struct {
|
|||
Status ProposalStatus `json:"proposal_status"` // Status of the Proposal {Pending, Active, Passed, Rejected}
|
||||
TallyResult TallyResult `json:"tally_result"` // Result of Tallys
|
||||
|
||||
SubmitTime time.Time `json:"submit_block"` // Height of the block where TxGovSubmitProposal was included
|
||||
SubmitBlock int64 `json:"submit_block"` // Height of the block where TxGovSubmitProposal was included
|
||||
TotalDeposit sdk.Coins `json:"total_deposit"` // Current deposit on this proposal. Initial value is set at InitialDeposit
|
||||
|
||||
VotingStartTime time.Time `json:"voting_start_block"` // Height of the block where MinDeposit was reached. -1 if MinDeposit is not reached
|
||||
VotingStartBlock int64 `json:"voting_start_block"` // Height of the block where MinDeposit was reached. -1 if MinDeposit is not reached
|
||||
}
|
||||
|
||||
// Implements Proposal Interface
|
||||
|
@ -90,13 +89,13 @@ func (tp TextProposal) GetStatus() ProposalStatus { return tp.S
|
|||
func (tp *TextProposal) SetStatus(status ProposalStatus) { tp.Status = status }
|
||||
func (tp TextProposal) GetTallyResult() TallyResult { return tp.TallyResult }
|
||||
func (tp *TextProposal) SetTallyResult(tallyResult TallyResult) { tp.TallyResult = tallyResult }
|
||||
func (tp TextProposal) GetSubmitTime() time.Time { return tp.SubmitTime }
|
||||
func (tp *TextProposal) SetSubmitTime(submitTime time.Time) { tp.SubmitTime = submitTime }
|
||||
func (tp TextProposal) GetSubmitBlock() int64 { return tp.SubmitBlock }
|
||||
func (tp *TextProposal) SetSubmitBlock(submitBlock int64) { tp.SubmitBlock = submitBlock }
|
||||
func (tp TextProposal) GetTotalDeposit() sdk.Coins { return tp.TotalDeposit }
|
||||
func (tp *TextProposal) SetTotalDeposit(totalDeposit sdk.Coins) { tp.TotalDeposit = totalDeposit }
|
||||
func (tp TextProposal) GetVotingStartTime() time.Time { return tp.VotingStartTime }
|
||||
func (tp *TextProposal) SetVotingStartTime(votingStartTime time.Time) {
|
||||
tp.VotingStartTime = votingStartTime
|
||||
func (tp TextProposal) GetVotingStartBlock() int64 { return tp.VotingStartBlock }
|
||||
func (tp *TextProposal) SetVotingStartBlock(votingStartBlock int64) {
|
||||
tp.VotingStartBlock = votingStartBlock
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------
|
||||
|
|
|
@ -4,7 +4,6 @@ import (
|
|||
"fmt"
|
||||
"math"
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
|
@ -69,8 +68,8 @@ func SimulateSubmittingVotingAndSlashingForProposal(k gov.Keeper, sk stake.Keepe
|
|||
votingPeriod := k.GetVotingProcedure(ctx).VotingPeriod
|
||||
fops := make([]simulation.FutureOperation, numVotes+1)
|
||||
for i := 0; i < numVotes; i++ {
|
||||
whenVote := ctx.BlockHeader().Time.Add(time.Duration(r.Int63n(int64(votingPeriod.Seconds()))) * time.Second)
|
||||
fops[i] = simulation.FutureOperation{BlockTime: whenVote, Op: operationSimulateMsgVote(k, sk, keys[whoVotes[i]], proposalID)}
|
||||
whenVote := ctx.BlockHeight() + r.Int63n(votingPeriod)
|
||||
fops[i] = simulation.FutureOperation{BlockHeight: int(whenVote), Op: operationSimulateMsgVote(k, sk, keys[whoVotes[i]], proposalID)}
|
||||
}
|
||||
// 3) Make an operation to ensure slashes were done correctly. (Really should be a future invariant)
|
||||
// TODO: Find a way to check if a validator was slashed other than just checking their balance a block
|
||||
|
|
|
@ -53,10 +53,10 @@ func tally(ctx sdk.Context, keeper Keeper, proposal Proposal) (passes bool, tall
|
|||
valAddrStr := delegation.GetValidator().String()
|
||||
|
||||
if val, ok := currValidators[valAddrStr]; ok {
|
||||
val.Minus = val.Minus.Add(delegation.GetBondShares())
|
||||
val.Minus = val.Minus.Add(delegation.GetShares())
|
||||
currValidators[valAddrStr] = val
|
||||
|
||||
delegatorShare := delegation.GetBondShares().Quo(val.DelegatorShares)
|
||||
delegatorShare := delegation.GetShares().Quo(val.DelegatorShares)
|
||||
votingPower := val.Power.Mul(delegatorShare)
|
||||
|
||||
results[vote.Option] = results[vote.Option].Add(votingPower)
|
||||
|
|
|
@ -440,7 +440,7 @@ func TestTallyJailedValidator(t *testing.T) {
|
|||
|
||||
val2, found := sk.GetValidator(ctx, sdk.ValAddress(addrs[1]))
|
||||
require.True(t, found)
|
||||
sk.Jail(ctx, val2.ConsPubKey)
|
||||
sk.Jail(ctx, sdk.ConsAddress(val2.ConsPubKey.Address()))
|
||||
|
||||
proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText)
|
||||
proposalID := proposal.GetProposalID()
|
||||
|
|
|
@ -8,7 +8,7 @@ import (
|
|||
// InitGenesis initializes the keeper's address to pubkey map.
|
||||
func InitGenesis(ctx sdk.Context, keeper Keeper, data types.GenesisState) {
|
||||
for _, validator := range data.Validators {
|
||||
keeper.addPubkey(ctx, validator.GetPubKey())
|
||||
keeper.addPubkey(ctx, validator.GetConsPubKey())
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ func handleMsgUnjail(ctx sdk.Context, msg MsgUnjail, k Keeper) sdk.Result {
|
|||
return ErrValidatorNotJailed(k.codespace).Result()
|
||||
}
|
||||
|
||||
consAddr := sdk.ConsAddress(validator.GetPubKey().Address())
|
||||
consAddr := sdk.ConsAddress(validator.GetConsPubKey().Address())
|
||||
|
||||
info, found := k.getValidatorSigningInfo(ctx, consAddr)
|
||||
if !found {
|
||||
|
|
|
@ -29,10 +29,10 @@ type Hooks struct {
|
|||
k Keeper
|
||||
}
|
||||
|
||||
var _ sdk.StakingHooks = Hooks{}
|
||||
var _ sdk.ValidatorHooks = Hooks{}
|
||||
|
||||
// Return the wrapper struct
|
||||
func (k Keeper) Hooks() Hooks {
|
||||
func (k Keeper) ValidatorHooks() Hooks {
|
||||
return Hooks{k}
|
||||
}
|
||||
|
||||
|
@ -45,11 +45,3 @@ func (h Hooks) OnValidatorBonded(ctx sdk.Context, address sdk.ConsAddress) {
|
|||
func (h Hooks) OnValidatorBeginUnbonding(ctx sdk.Context, address sdk.ConsAddress) {
|
||||
h.k.onValidatorBeginUnbonding(ctx, address)
|
||||
}
|
||||
|
||||
// nolint - unused hooks
|
||||
func (h Hooks) OnValidatorCreated(_ sdk.Context, _ sdk.ValAddress) {}
|
||||
func (h Hooks) OnValidatorCommissionChange(_ sdk.Context, _ sdk.ValAddress) {}
|
||||
func (h Hooks) OnValidatorRemoved(_ sdk.Context, _ sdk.ValAddress) {}
|
||||
func (h Hooks) OnDelegationCreated(_ sdk.Context, _ sdk.AccAddress, _ sdk.ValAddress) {}
|
||||
func (h Hooks) OnDelegationSharesModified(_ sdk.Context, _ sdk.AccAddress, _ sdk.ValAddress) {}
|
||||
func (h Hooks) OnDelegationRemoved(_ sdk.Context, _ sdk.AccAddress, _ sdk.ValAddress) {}
|
||||
|
|
|
@ -75,7 +75,7 @@ func WriteGenesis(ctx sdk.Context, keeper Keeper) types.GenesisState {
|
|||
func WriteValidators(ctx sdk.Context, keeper Keeper) (vals []tmtypes.GenesisValidator) {
|
||||
keeper.IterateValidatorsBonded(ctx, func(_ int64, validator sdk.Validator) (stop bool) {
|
||||
vals = append(vals, tmtypes.GenesisValidator{
|
||||
PubKey: validator.GetPubKey(),
|
||||
PubKey: validator.GetConsPubKey(),
|
||||
Power: validator.GetPower().RoundInt64(),
|
||||
Name: validator.GetMoniker(),
|
||||
})
|
||||
|
|
|
@ -87,11 +87,6 @@ func handleMsgCreateValidator(ctx sdk.Context, msg types.MsgCreateValidator, k k
|
|||
return err.Result()
|
||||
}
|
||||
|
||||
// call the hook if present
|
||||
k.OnValidatorCreated(ctx, validator.OperatorAddr)
|
||||
accAddr := sdk.AccAddress(validator.OperatorAddr)
|
||||
k.OnDelegationCreated(ctx, accAddr, validator.OperatorAddr)
|
||||
|
||||
tags := sdk.NewTags(
|
||||
tags.Action, tags.ActionCreateValidator,
|
||||
tags.DstValidator, []byte(msg.ValidatorAddr.String()),
|
||||
|
@ -151,9 +146,6 @@ func handleMsgDelegate(ctx sdk.Context, msg types.MsgDelegate, k keeper.Keeper)
|
|||
return err.Result()
|
||||
}
|
||||
|
||||
// call the hook if present
|
||||
k.OnDelegationCreated(ctx, msg.DelegatorAddr, validator.OperatorAddr)
|
||||
|
||||
tags := sdk.NewTags(
|
||||
tags.Action, tags.ActionDelegate,
|
||||
tags.Delegator, []byte(msg.DelegatorAddr.String()),
|
||||
|
|
|
@ -67,11 +67,6 @@ func (k Keeper) SetDelegation(ctx sdk.Context, delegation types.Delegation) {
|
|||
// remove a delegation from store
|
||||
func (k Keeper) RemoveDelegation(ctx sdk.Context, delegation types.Delegation) {
|
||||
|
||||
// call the hook if present
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnDelegationRemoved(ctx, delegation.DelegatorAddr, delegation.ValidatorAddr)
|
||||
}
|
||||
|
||||
store := ctx.KVStore(k.storeKey)
|
||||
store.Delete(GetDelegationKey(delegation.DelegatorAddr, delegation.ValidatorAddr))
|
||||
}
|
||||
|
@ -281,11 +276,6 @@ func (k Keeper) Delegate(ctx sdk.Context, delAddr sdk.AccAddress, bondAmt sdk.Co
|
|||
k.SetDelegation(ctx, delegation)
|
||||
k.UpdateValidator(ctx, validator)
|
||||
|
||||
// call the hook if present
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnDelegationSharesModified(ctx, delegation.DelegatorAddr, validator.OperatorAddr)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -344,11 +334,6 @@ func (k Keeper) unbond(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValA
|
|||
k.RemoveValidator(ctx, validator.OperatorAddr)
|
||||
}
|
||||
|
||||
// call the hook if present
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnDelegationSharesModified(ctx, delegation.DelegatorAddr, validator.OperatorAddr)
|
||||
}
|
||||
|
||||
return amount, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
//nolint
|
||||
package keeper
|
||||
|
||||
import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// Expose the hooks if present
|
||||
func (k Keeper) OnValidatorCreated(ctx sdk.Context, address sdk.ValAddress) {
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnValidatorCreated(ctx, address)
|
||||
}
|
||||
}
|
||||
func (k Keeper) OnValidatorCommissionChange(ctx sdk.Context, address sdk.ValAddress) {
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnValidatorCommissionChange(ctx, address)
|
||||
}
|
||||
}
|
||||
|
||||
func (k Keeper) OnValidatorRemoved(ctx sdk.Context, address sdk.ValAddress) {
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnValidatorRemoved(ctx, address)
|
||||
}
|
||||
}
|
||||
|
||||
func (k Keeper) OnValidatorBonded(ctx sdk.Context, address sdk.ConsAddress) {
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnValidatorBonded(ctx, address)
|
||||
}
|
||||
}
|
||||
|
||||
func (k Keeper) OnValidatorBeginUnbonding(ctx sdk.Context, address sdk.ConsAddress) {
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnValidatorBeginUnbonding(ctx, address)
|
||||
}
|
||||
}
|
||||
|
||||
func (k Keeper) OnDelegationCreated(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) {
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnDelegationCreated(ctx, delAddr, valAddr)
|
||||
}
|
||||
}
|
||||
|
||||
func (k Keeper) OnDelegationSharesModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) {
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnDelegationSharesModified(ctx, delAddr, valAddr)
|
||||
}
|
||||
}
|
||||
|
||||
func (k Keeper) OnDelegationRemoved(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) {
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnDelegationRemoved(ctx, delAddr, valAddr)
|
||||
}
|
||||
}
|
|
@ -14,7 +14,7 @@ type Keeper struct {
|
|||
storeTKey sdk.StoreKey
|
||||
cdc *codec.Codec
|
||||
bankKeeper bank.Keeper
|
||||
hooks sdk.StakingHooks
|
||||
hooks sdk.ValidatorHooks
|
||||
|
||||
// codespace
|
||||
codespace sdk.CodespaceType
|
||||
|
@ -33,7 +33,7 @@ func NewKeeper(cdc *codec.Codec, key, tkey sdk.StoreKey, ck bank.Keeper, codespa
|
|||
}
|
||||
|
||||
// Set the validator hooks
|
||||
func (k Keeper) WithHooks(sh sdk.StakingHooks) Keeper {
|
||||
func (k Keeper) WithValidatorHooks(sh sdk.ValidatorHooks) Keeper {
|
||||
if k.hooks != nil {
|
||||
panic("cannot set validator hooks twice")
|
||||
}
|
||||
|
|
|
@ -681,11 +681,6 @@ func (k Keeper) bondValidator(ctx sdk.Context, validator types.Validator) types.
|
|||
// remove the validator record and associated indexes
|
||||
func (k Keeper) RemoveValidator(ctx sdk.Context, address sdk.ValAddress) {
|
||||
|
||||
// call the hook if present
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnValidatorRemoved(ctx, address)
|
||||
}
|
||||
|
||||
// first retrieve the old validator record
|
||||
validator, found := k.GetValidator(ctx, address)
|
||||
if !found {
|
||||
|
@ -745,36 +740,3 @@ func ensureValidatorFound(found bool, ownerAddr []byte) {
|
|||
panic(fmt.Sprintf("validator record not found for address: %X\n", ownerAddr))
|
||||
}
|
||||
}
|
||||
|
||||
//__________________________________________________________________________
|
||||
|
||||
// XXX remove this code - this is should be superceded by commission work that bez is doing
|
||||
// get a single validator
|
||||
func (k Keeper) UpdateValidatorCommission(ctx sdk.Context, addr sdk.ValAddress, newCommission sdk.Dec) sdk.Error {
|
||||
|
||||
// call the hook if present
|
||||
if k.hooks != nil {
|
||||
k.hooks.OnValidatorCommissionChange(ctx, addr)
|
||||
}
|
||||
|
||||
validator, found := k.GetValidator(ctx, addr)
|
||||
|
||||
// check for errors
|
||||
switch {
|
||||
case !found:
|
||||
return types.ErrNoValidatorFound(k.Codespace())
|
||||
case newCommission.LT(sdk.ZeroDec()):
|
||||
return types.ErrCommissionNegative(k.Codespace())
|
||||
case newCommission.GT(validator.CommissionMax):
|
||||
return types.ErrCommissionBeyondMax(k.Codespace())
|
||||
//case rateChange(Commission) > CommissionMaxChange: // XXX XXX XXX TODO implementation
|
||||
//return types.ErrCommissionPastRate(k.Codespace())
|
||||
}
|
||||
|
||||
// TODO adjust all the commission terms appropriately
|
||||
|
||||
validator.Commission = newCommission
|
||||
|
||||
k.SetValidator(ctx, validator)
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -474,7 +474,7 @@ func (v Validator) GetJailed() bool { return v.Jailed }
|
|||
func (v Validator) GetMoniker() string { return v.Description.Moniker }
|
||||
func (v Validator) GetStatus() sdk.BondStatus { return v.Status }
|
||||
func (v Validator) GetOperator() sdk.ValAddress { return v.OperatorAddr }
|
||||
func (v Validator) GetPubKey() crypto.PubKey { return v.ConsPubKey }
|
||||
func (v Validator) GetConsPubKey() crypto.PubKey { return v.ConsPubKey }
|
||||
func (v Validator) GetConsAddr() sdk.ConsAddress { return sdk.ConsAddress(v.ConsPubKey.Address()) }
|
||||
func (v Validator) GetPower() sdk.Dec { return v.BondedTokens() }
|
||||
func (v Validator) GetTokens() sdk.Dec { return v.Tokens }
|
||||
|
|
Loading…
Reference in New Issue