Skip to content

Commit

Permalink
feat(dpos2.0): remove DPoSV2ActivityProducers list
Browse files Browse the repository at this point in the history
  • Loading branch information
RainFallsSilent committed Jun 10, 2022
1 parent 79a4c41 commit 8ee37f2
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 73 deletions.
2 changes: 1 addition & 1 deletion core/transaction/transactionchecker.go
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ func (t *DefaultChecker) tryCheckVoteOutputs() error {
crCommittee := t.parameters.BlockChain.GetCRCommittee()

if txn.Version() >= common2.TxVersion09 {
producers := dposState.GetActiveProducers()
producers := dposState.GetActiveV1Producers()
if blockHeight < t.parameters.Config.PublicDPOSHeight {
producers = append(producers, dposState.GetPendingCanceledProducers()...)
}
Expand Down
2 changes: 1 addition & 1 deletion core/transaction/voting.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func (t *VotingTransaction) SpecialContextCheck() (result elaerr.ELAError, end b
// 2.check different type of votes, enough? candidate exist?
blockHeight := t.parameters.BlockHeight
crCommittee := t.parameters.BlockChain.GetCRCommittee()
producers := t.parameters.BlockChain.GetState().GetActiveProducers()
producers := t.parameters.BlockChain.GetState().GetActiveV1Producers()
pds := getProducerPublicKeysMap(producers)
pds2 := getDPoSV2ProducersMap(t.parameters.BlockChain.GetState().GetActivityV2Producers())

Expand Down
42 changes: 15 additions & 27 deletions dpos/state/keyframe.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ type StateKeyFrame struct {
NextCRNodeOwnerKeys map[string]string // NodePublicKey as key, OwnerPublicKey as value
PendingProducers map[string]*Producer
ActivityProducers map[string]*Producer
DposV2ActivityProducers map[string]*Producer
InactiveProducers map[string]*Producer
CanceledProducers map[string]*Producer
IllegalProducers map[string]*Producer
Expand Down Expand Up @@ -93,7 +92,6 @@ func (s *StateKeyFrame) snapshot() *StateKeyFrame {
NextCRNodeOwnerKeys: make(map[string]string),
PendingProducers: make(map[string]*Producer),
ActivityProducers: make(map[string]*Producer),
DposV2ActivityProducers: make(map[string]*Producer),
InactiveProducers: make(map[string]*Producer),
CanceledProducers: make(map[string]*Producer),
IllegalProducers: make(map[string]*Producer),
Expand Down Expand Up @@ -121,7 +119,6 @@ func (s *StateKeyFrame) snapshot() *StateKeyFrame {
state.NextCRNodeOwnerKeys = copyStringMap(s.NextCRNodeOwnerKeys)
state.PendingProducers = copyProducerMap(s.PendingProducers)
state.ActivityProducers = copyProducerMap(s.ActivityProducers)
state.DposV2ActivityProducers = copyProducerMap(s.DposV2ActivityProducers)
state.InactiveProducers = copyProducerMap(s.InactiveProducers)
state.CanceledProducers = copyProducerMap(s.CanceledProducers)
state.IllegalProducers = copyProducerMap(s.IllegalProducers)
Expand Down Expand Up @@ -173,10 +170,6 @@ func (s *StateKeyFrame) Serialize(w io.Writer) (err error) {
return
}

if err = s.SerializeProducerMap(s.DposV2ActivityProducers, w); err != nil {
return
}

if err = s.SerializeProducerMap(s.InactiveProducers, w); err != nil {
return
}
Expand Down Expand Up @@ -288,10 +281,6 @@ func (s *StateKeyFrame) Deserialize(r io.Reader) (err error) {
return
}

if s.DposV2ActivityProducers, err = s.DeserializeProducerMap(r); err != nil {
return
}

if s.InactiveProducers, err = s.DeserializeProducerMap(r); err != nil {
return
}
Expand Down Expand Up @@ -796,22 +785,21 @@ func (kf *StateKeyFrame) GetUsedDPoSVoteRights(stakeProgramHash *common.Uint168)
func NewStateKeyFrame() *StateKeyFrame {
info := make(map[string]common.Fixed64)
return &StateKeyFrame{
NodeOwnerKeys: make(map[string]string),
CurrentCRNodeOwnerKeys: make(map[string]string),
NextCRNodeOwnerKeys: make(map[string]string),
PendingProducers: make(map[string]*Producer),
ActivityProducers: make(map[string]*Producer),
DposV2ActivityProducers: make(map[string]*Producer),
InactiveProducers: make(map[string]*Producer),
CanceledProducers: make(map[string]*Producer),
IllegalProducers: make(map[string]*Producer),
PendingCanceledProducers: make(map[string]*Producer),
DposV2EffectedProducers: make(map[string]*Producer),
Votes: make(map[string]struct{}),
DposV2VoteRights: make(map[common.Uint168]common.Fixed64),
UsedDposVotes: make(map[common.Uint168][]payload.VotesWithLockTime),
UsedDposV2Votes: make(map[common.Uint168]common.Fixed64),
DepositOutputs: make(map[string]common.Fixed64),
NodeOwnerKeys: make(map[string]string),
CurrentCRNodeOwnerKeys: make(map[string]string),
NextCRNodeOwnerKeys: make(map[string]string),
PendingProducers: make(map[string]*Producer),
ActivityProducers: make(map[string]*Producer),
InactiveProducers: make(map[string]*Producer),
CanceledProducers: make(map[string]*Producer),
IllegalProducers: make(map[string]*Producer),
PendingCanceledProducers: make(map[string]*Producer),
DposV2EffectedProducers: make(map[string]*Producer),
Votes: make(map[string]struct{}),
DposV2VoteRights: make(map[common.Uint168]common.Fixed64),
UsedDposVotes: make(map[common.Uint168][]payload.VotesWithLockTime),
UsedDposV2Votes: make(map[common.Uint168]common.Fixed64),
DepositOutputs: make(map[string]common.Fixed64),
DposV2RewardInfo: info,
DposV2RewardClaimingInfo: make(map[string]common.Fixed64),
DposV2RewardClaimedInfo: make(map[string]common.Fixed64),
Expand Down
74 changes: 30 additions & 44 deletions dpos/state/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,10 @@ func (p *Producer) Serialize(w io.Writer) error {
return err
}

if err := common.WriteUint8(w, uint8(p.identity)); err != nil {
return err
}

if err := common.WriteUint32(w, p.registerHeight); err != nil {
return err
}
Expand Down Expand Up @@ -379,6 +383,12 @@ func (p *Producer) Deserialize(r io.Reader) (err error) {
}
p.state = ProducerState(state)

var identity uint8
if identity, err = common.ReadUint8(r); err != nil {
return
}
p.identity = ProducerIdentity(identity)

if p.registerHeight, err = common.ReadUint32(r); err != nil {
return
}
Expand Down Expand Up @@ -625,13 +635,6 @@ func (s *State) updateProducerInfo(origin *payload.ProducerInfo, update *payload
}

producer.info = *update

if update.StakeUntil != 0 {
oldOwnerKey := hex.EncodeToString(origin.OwnerPublicKey)
newOwnerKey := hex.EncodeToString(update.OwnerPublicKey)
delete(s.DposV2ActivityProducers, oldOwnerKey)
s.DposV2ActivityProducers[newOwnerKey] = producer
}
}

func (s *State) ExistProducerByDepositHash(programHash common.Uint168) bool {
Expand Down Expand Up @@ -798,11 +801,28 @@ func (s *State) GetActiveProducers() []*Producer {
return producers
}

// GetDposActiveProducers returns all dposv2 producers that in active state.
// GetActiveProducers returns all producers that in active state.
func (s *State) GetActiveV1Producers() []*Producer {
s.mtx.RLock()
producers := make([]*Producer, 0, len(s.ActivityProducers))
for _, producer := range s.ActivityProducers {
if producer.identity != DPoSV1 && producer.identity != DPoSV1V2 {
continue
}
producers = append(producers, producer)
}
s.mtx.RUnlock()
return producers
}

// GetActivityV2Producers returns all DPoS V2 producers that in active state.
func (s *State) GetActivityV2Producers() []*Producer {
s.mtx.RLock()
producers := make([]*Producer, 0, len(s.DposV2ActivityProducers))
for _, producer := range s.DposV2ActivityProducers {
producers := make([]*Producer, 0, len(s.ActivityProducers))
for _, producer := range s.ActivityProducers {
if producer.identity != DPoSV2 && producer.identity != DPoSV1V2 {
continue
}
producers = append(producers, producer)
}
s.mtx.RUnlock()
Expand Down Expand Up @@ -1319,17 +1339,11 @@ func (s *State) processTransactions(txs []interfaces.Transaction, height uint32)
s.History.Append(height, func() {
producer.state = Active
s.ActivityProducers[key] = producer
if producer.info.StakeUntil != 0 {
s.DposV2ActivityProducers[key] = producer
}
delete(s.PendingProducers, key)
}, func() {
producer.state = Pending
s.PendingProducers[key] = producer
delete(s.ActivityProducers, key)
if producer.info.StakeUntil != 0 {
delete(s.DposV2ActivityProducers, key)
}
})
}

Expand All @@ -1339,17 +1353,11 @@ func (s *State) processTransactions(txs []interfaces.Transaction, height uint32)
s.History.Append(height, func() {
producer.state = Active
s.ActivityProducers[key] = producer
if producer.info.StakeUntil != 0 {
s.DposV2ActivityProducers[key] = producer
}
delete(s.InactiveProducers, key)
}, func() {
producer.state = Inactive
s.InactiveProducers[key] = producer
delete(s.ActivityProducers, key)
if producer.info.StakeUntil != 0 {
delete(s.DposV2ActivityProducers, key)
}
})
}

Expand Down Expand Up @@ -1391,17 +1399,11 @@ func (s *State) processTransactions(txs []interfaces.Transaction, height uint32)
s.History.Append(height, func() {
producer.state = Active
s.ActivityProducers[key] = producer
if producer.info.StakeUntil != 0 {
s.DposV2ActivityProducers[key] = producer
}
delete(s.IllegalProducers, key)
}, func() {
producer.state = Illegal
s.IllegalProducers[key] = producer
delete(s.ActivityProducers, key)
if producer.info.StakeUntil != 0 {
delete(s.DposV2ActivityProducers, key)
}
})
}

Expand Down Expand Up @@ -1654,7 +1656,6 @@ func (s *State) cancelProducer(payload *payload.ProcessProducer, height uint32)
s.PendingCanceledProducers[key] = producer
case Active:
delete(s.ActivityProducers, key)
delete(s.DposV2ActivityProducers, key)
case Inactive:
delete(s.InactiveProducers, key)
}
Expand All @@ -1669,9 +1670,6 @@ func (s *State) cancelProducer(payload *payload.ProcessProducer, height uint32)
delete(s.PendingCanceledProducers, key)
case Active:
s.ActivityProducers[key] = producer
if producer.info.StakeUntil != 0 {
s.DposV2ActivityProducers[key] = producer
}
case Inactive:
s.InactiveProducers[key] = producer
}
Expand Down Expand Up @@ -2523,17 +2521,11 @@ func (s *State) processIllegalEvidence(payloadData interfaces.Payload,
producer.penalty += illegalPenalty
}
delete(s.ActivityProducers, key)
if producer.info.StakeUntil != 0 {
delete(s.DposV2ActivityProducers, key)
}
}, func() {
producer.state = oriState
producer.penalty = oriPenalty
producer.illegalHeight = oriIllegalHeight
s.ActivityProducers[key] = producer
if producer.info.StakeUntil != 0 {
s.DposV2ActivityProducers[key] = producer
}
producer.activateRequestHeight = math.MaxUint32
delete(s.IllegalProducers, key)
})
Expand Down Expand Up @@ -2630,9 +2622,6 @@ func (s *State) setInactiveProducer(producer *Producer, key string,
producer.selected = false
s.InactiveProducers[key] = producer
delete(s.ActivityProducers, key)
if producer.info.StakeUntil != 0 {
delete(s.DposV2ActivityProducers, key)
}

var penalty = s.ChainParams.InactivePenalty
if height < s.VersionStartHeight || height >= s.VersionEndHeight {
Expand All @@ -2654,9 +2643,6 @@ func (s *State) revertSettingInactiveProducer(producer *Producer, key string,
producer.activateRequestHeight = math.MaxUint32
producer.state = Active
s.ActivityProducers[key] = producer
if producer.info.StakeUntil != 0 {
s.DposV2ActivityProducers[key] = producer
}
delete(s.InactiveProducers, key)

var penalty = s.ChainParams.InactivePenalty
Expand Down

0 comments on commit 8ee37f2

Please sign in to comment.