Merge pull request #298 from dinhln89/reward

Fixed reward only for masternodes in block checkpoint.
This commit is contained in:
Tuna 2018-11-23 13:42:27 +07:00 committed by GitHub
commit 3d9a61c7ef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -301,10 +301,14 @@ func DecryptRandomizeFromSecretsAndOpening(secrets [][32]byte, opening [32]byte)
// Calculate reward for reward checkpoint.
func GetRewardForCheckpoint(chain consensus.ChainReader, blockSignerAddr common.Address, number uint64, rCheckpoint uint64, client bind.ContractBackend, totalSigner *uint64) (map[common.Address]*rewardLog, error) {
// Not reward for singer of genesis block and only calculate reward at checkpoint block.
startBlockNumber := number - (rCheckpoint * 2) + 1
prevCheckpoint := number - (rCheckpoint * 2)
startBlockNumber := prevCheckpoint + 1
endBlockNumber := startBlockNumber + rCheckpoint - 1
signers := make(map[common.Address]*rewardLog)
prevHeaderCheckpoint := chain.GetHeaderByNumber(prevCheckpoint)
masternodes := posv.GetMasternodesFromCheckpointHeader(prevHeaderCheckpoint)
if len(masternodes) > 0 {
for i := startBlockNumber; i <= endBlockNumber; i++ {
block := chain.GetHeaderByNumber(i)
addrs, err := GetSignersFromContract(blockSignerAddr, client, block.Hash())
@ -315,11 +319,17 @@ func GetRewardForCheckpoint(chain consensus.ChainReader, blockSignerAddr common.
// Filter duplicate address.
if len(addrs) > 0 {
addrSigners := make(map[common.Address]bool)
for _, masternode := range masternodes {
for _, addr := range addrs {
if addr == masternode {
if _, ok := addrSigners[addr]; !ok {
addrSigners[addr] = true
}
break
}
}
}
for addr := range addrSigners {
_, exist := signers[addr]
if exist {
@ -331,6 +341,7 @@ func GetRewardForCheckpoint(chain consensus.ChainReader, blockSignerAddr common.
}
}
}
}
log.Info("Calculate reward at checkpoint", "startBlock", startBlockNumber, "endBlock", endBlockNumber)