Skip to content

Commit

Permalink
fix calc should counter of candidate (#287)
Browse files Browse the repository at this point in the history
* fix calc should counter of candidate

* fix block statistic
  • Loading branch information
elvis88 committed May 26, 2019
1 parent 0d29e6c commit 1b61deb
Show file tree
Hide file tree
Showing 11 changed files with 508 additions and 19 deletions.
2 changes: 1 addition & 1 deletion blockchain/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ func (g *Genesis) ToBlock(db fdb.Database) (*types.Block, []*types.Receipt) {
panic(fmt.Sprintf("genesis create candidate err %v", err))
}
}
if err := sys.UpdateElectedCandidates(dpos.LastEpcho, dpos.LastEpcho, number.Uint64()); err != nil {
if err := sys.UpdateElectedCandidates(dpos.LastEpcho, dpos.LastEpcho, number.Uint64(), ""); err != nil {
panic(fmt.Sprintf("genesis create candidate err %v", err))
}

Expand Down
2 changes: 1 addition & 1 deletion consensus/dpos/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ func (cfg *Config) nextslot(timestamp uint64) uint64 {
}

func (cfg *Config) getoffset(timestamp uint64) uint64 {
offset := uint64(timestamp) % cfg.epochInterval() % cfg.mepochInterval()
offset := uint64(timestamp-cfg.blockInterval()) % cfg.epochInterval() % cfg.mepochInterval()
offset /= cfg.blockInterval() * cfg.BlockFrequency
return offset
}
Expand Down
6 changes: 3 additions & 3 deletions consensus/dpos/dpos.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ func (dpos *Dpos) Prepare(chain consensus.IChainReader, header *types.Header, tx
epcho := dpos.config.epoch(header.Time.Uint64())
if pepcho != epcho {
log.Debug("UpdateElectedCandidates", "prev", pepcho, "curr", epcho, "number", parent.Number.Uint64(), "time", parent.Time.Uint64())
sys.UpdateElectedCandidates(pepcho, epcho, parent.Number.Uint64())
sys.UpdateElectedCandidates(pepcho, epcho, parent.Number.Uint64(), header.Coinbase.String())
}
return nil
}
Expand Down Expand Up @@ -278,7 +278,7 @@ func (dpos *Dpos) Finalize(chain consensus.IChainReader, header *types.Header, t
return nil, err
}

if !replace {
if !replace && header.Time.Uint64()%dpos.config.mepochInterval()%10 == 0 {
// replace
opcandidate, err := sys.GetCandidateByEpcho(pstate.Epcho, name)
if err != nil {
Expand All @@ -287,7 +287,7 @@ func (dpos *Dpos) Finalize(chain consensus.IChainReader, header *types.Header, t
acnt := pcandidate.ActualCounter - opcandidate.ActualCounter
scnt := pcandidate.Counter - opcandidate.Counter
log.Info("candidate replace", "prev should", opcandidate.Counter, "prev actual", opcandidate.ActualCounter, "next should", pcandidate.Counter, "next actual", pcandidate.ActualCounter, "max", dpos.config.maxMissing(), "num", header.Number)
if scnt-acnt > dpos.config.maxMissing() && uint64(len(pstate.OffCandidateSchedule)) < uint64(len(pstate.ActivatedCandidateSchedule))-dpos.config.CandidateScheduleSize {
if scnt-acnt > scnt/2 && uint64(len(pstate.OffCandidateSchedule)) < uint64(len(pstate.ActivatedCandidateSchedule))-dpos.config.CandidateScheduleSize {
pstate.OffCandidateSchedule = append(pstate.OffCandidateSchedule, coffset)
if err := sys.SetState(pstate); err != nil {
return nil, err
Expand Down
5 changes: 4 additions & 1 deletion consensus/dpos/vote.go
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ func (sys *System) onblock(epcho uint64, number uint64) error {
}

// UpdateElectedCandidates update
func (sys *System) UpdateElectedCandidates(pepcho uint64, epcho uint64, number uint64) error {
func (sys *System) UpdateElectedCandidates(pepcho uint64, epcho uint64, number uint64, miner string) error {
if pepcho > epcho {
panic(fmt.Errorf("UpdateElectedCandidates unreached"))
}
Expand Down Expand Up @@ -505,6 +505,9 @@ func (sys *System) UpdateElectedCandidates(pepcho uint64, epcho uint64, number u
activeTotalQuantity := big.NewInt(0)
totalQuantity := big.NewInt(0)
for _, candidateInfo := range candidateInfoArray {
if strings.Compare(candidateInfo.Name, miner) == 0 {
candidateInfo.Counter++
}
totalQuantity = new(big.Int).Add(totalQuantity, candidateInfo.Quantity)
if !candidateInfo.invalid() && (!pstate.Dpos || strings.Compare(candidateInfo.Name, sys.config.SystemName) != 0) {
if uint64(len(activatedCandidateSchedule)) < n {
Expand Down
113 changes: 113 additions & 0 deletions sdk/test/dpos/createcandidate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
[{
"comment": "index0 fractal.admin create account dpos0001 & transfer 1000000 ft",
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"type": "createaccount",
"from": "fractal.admin",
"to": "fractal.account",
"gas": 30000000,
"value": 1000000000000000000000000,
"payload": {
"accountName": "dpos0001",
"founder": "dpos0001",
"publicKey": "0x047db227d7094ce215c3a0f57e1bcc732551fe351f94249471934567e0f5dc1bf795962b8cccb87a2eb56b29fbe37d614e2f4c3c45b789ae4f1f51f4cb21972ffd",
"description": "dpos0001 account"
},
"succeed": true
},
{
"comment": "index1 fractal.admin create account dpos0002 & transfer 2000000 ft",
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"type": "createaccount",
"from": "fractal.admin",
"to": "fractal.account",
"gas": 30000000,
"value": 2000000000000000000000000,
"payload": {
"accountName": "dpos0002",
"founder": "dpos0002",
"publicKey": "0x047db227d7094ce215c3a0f57e1bcc732551fe351f94249471934567e0f5dc1bf795962b8cccb87a2eb56b29fbe37d614e2f4c3c45b789ae4f1f51f4cb21972ffd",
"description": "dpos0002 account"
},
"succeed": true
},
{
"comment": "index2 fractal.admin create account dpos0003 & transfer 3000000 ft",
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"type": "createaccount",
"from": "fractal.admin",
"to": "fractal.account",
"gas": 30000000,
"value": 3000000000000000000000000,
"payload": {
"accountName": "dpos0003",
"founder": "dpos0003",
"publicKey": "0x047db227d7094ce215c3a0f57e1bcc732551fe351f94249471934567e0f5dc1bf795962b8cccb87a2eb56b29fbe37d614e2f4c3c45b789ae4f1f51f4cb21972ffd",
"description": "dpos0003 account"
},
"succeed": true
},
{
"comment": "index3 fractal.admin create account dpos0004 & transfer 4000000 ft",
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"type": "createaccount",
"from": "fractal.admin",
"to": "fractal.account",
"gas": 30000000,
"value": 4000000000000000000000000,
"payload": {
"accountName": "dpos0004",
"founder": "dpos0004",
"publicKey": "0x047db227d7094ce215c3a0f57e1bcc732551fe351f94249471934567e0f5dc1bf795962b8cccb87a2eb56b29fbe37d614e2f4c3c45b789ae4f1f51f4cb21972ffd",
"description": "dpos0004 account"
},
"succeed": true
},
{
"comment": "index4 fractal.admin create account dpos0005 & transfer 5000000 ft",
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"type": "createaccount",
"from": "fractal.admin",
"to": "fractal.account",
"gas": 30000000,
"value": 5000000000000000000000000,
"payload": {
"accountName": "dpos0005",
"founder": "dpos0005",
"publicKey": "0x047db227d7094ce215c3a0f57e1bcc732551fe351f94249471934567e0f5dc1bf795962b8cccb87a2eb56b29fbe37d614e2f4c3c45b789ae4f1f51f4cb21972ffd",
"description": "dpos0005 account"
},
"succeed": true
},
{
"comment": "index5 fractal.admin create account dpos0006 & transfer 6000000 ft",
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"type": "createaccount",
"from": "fractal.admin",
"to": "fractal.account",
"gas": 30000000,
"value": 6000000000000000000000000,
"payload": {
"accountName": "dpos0006",
"founder": "dpos0006",
"publicKey": "0x047db227d7094ce215c3a0f57e1bcc732551fe351f94249471934567e0f5dc1bf795962b8cccb87a2eb56b29fbe37d614e2f4c3c45b789ae4f1f51f4cb21972ffd",
"description": "dpos0006 account"
},
"succeed": true
},
{
"comment": "index6 fractal.admin create account dpos0007 & transfer 7000000 ft",
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"type": "createaccount",
"from": "fractal.admin",
"to": "fractal.account",
"gas": 30000000,
"value": 7000000000000000000000000,
"payload": {
"accountName": "dpos0007",
"founder": "dpos0007",
"publicKey": "0x047db227d7094ce215c3a0f57e1bcc732551fe351f94249471934567e0f5dc1bf795962b8cccb87a2eb56b29fbe37d614e2f4c3c45b789ae4f1f51f4cb21972ffd",
"description": "dpos0007 account"
},
"succeed": true
}
]
119 changes: 119 additions & 0 deletions sdk/test/dpos/regcandidate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
[
{
"comment": "index0 dpos0001 regcandidate & transfer 0 ft",
"type": "regcandidate",
"from": "dpos0001",
"to": "fractal.dpos",
"gas": 30000000,
"value": 0,
"payload": {
"URL": "www.xxxxxx.com"
},
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": false
},
{
"comment": "index0 dpos0001 regcandidate & transfer 0 ft",
"type": "regcandidate",
"from": "dpos0001",
"to": "fractal.dpos",
"gas": 30000000,
"value": 1111,
"payload": {
"URL": "www.xxxxxx.com"
},
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": false
},
{
"comment": "index0 dpos0001 regcandidate & transfer 500000 ft",
"type": "regcandidate",
"from": "dpos0001",
"to": "fractal.dpos",
"gas": 30000000,
"value": 500000000000000000000000,
"payload": {
"URL": "www.xxxxxx.com"
},
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": true
},
{
"comment": "index1 dpos0002 regcandidate & transfer 1000000 ft",
"type": "regcandidate",
"from": "dpos0002",
"to": "fractal.dpos",
"gas": 30000000,
"value": 1000000000000000000000000,
"payload": {
"URL": "www.xxxxxx.com"
},
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": true
},
{
"comment": "index2 dpos0003 regcandidate & transfer 1500000 ft",
"type": "regcandidate",
"from": "dpos0003",
"to": "fractal.dpos",
"gas": 30000000,
"value": 1500000000000000000000000,
"payload": {
"URL": "www.xxxxxx.com"
},
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": true
},
{
"comment": "index3 dpos0004 regcandidate & transfer 2000000 ft",
"type": "regcandidate",
"from": "dpos0004",
"to": "fractal.dpos",
"gas": 30000000,
"value": 2000000000000000000000000,
"payload": {
"URL": "www.xxxxxx.com"
},
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": true
},
{
"comment": "index4 dpos0005 regcandidate & transfer 2500000 ft",
"type": "regcandidate",
"from": "dpos0005",
"to": "fractal.dpos",
"gas": 30000000,
"value": 2500000000000000000000000,
"payload": {
"URL": "www.xxxxxx.com"
},
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": true
},
{
"comment": "index5 dpos0006 regcandidate & transfer 3000000 ft",
"type": "regcandidate",
"from": "dpos0006",
"to": "fractal.dpos",
"gas": 30000000,
"value": 3000000000000000000000000,
"payload": {
"URL": "www.xxxxxx.com"
},
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": true
},
{
"comment": "index6 dpos0007 regcandidate & transfer 3000000 ft",
"type": "regcandidate",
"from": "dpos0007",
"to": "fractal.dpos",
"gas": 30000000,
"value": 3500000000000000000000000,
"payload": {
"URL": "www.xxxxxx.com"
},
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": true
}
]
41 changes: 41 additions & 0 deletions sdk/test/dpos/unregcandidate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[{
"comment": "index0 dpos0001 unregcandidate & transfer 500000 ft",
"type": "unregcandidate",
"from": "dpos0007",
"to": "fractal.dpos",
"gas": 30000000,
"value": 500000000000000000000000,
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": false
},
{
"comment": "index1 dpos0002 unregcandidate & transfer 1000000 ft",
"type": "unregcandidate",
"from": "dpos0006",
"to": "fractal.dpos",
"gas": 30000000,
"value": 1000000000000000000000000,
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": false
},
{
"comment": "index0 dpos0001 unregcandidate & transfer 500000 ft",
"type": "unregcandidate",
"from": "dpos0001",
"to": "fractal.dpos",
"gas": 30000000,
"value": 0,
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": true
},
{
"comment": "index1 dpos0002 unregcandidate & transfer 1000000 ft",
"type": "unregcandidate",
"from": "dpos0002",
"to": "fractal.dpos",
"gas": 30000000,
"value": 0,
"priv": "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032",
"succeed": true
}
]
Loading

0 comments on commit 1b61deb

Please sign in to comment.