Fixed reward only for masternodes in block checkpoint.

This commit is contained in:
parmarrushabh 2018-11-14 17:08:41 +05:30
parent 8562d53da0
commit ae06c120a7

View file

@ -286,10 +286,14 @@ func DecryptRandomizeFromSecretsAndOpening(secrets [][32]byte, opening [32]byte)
// Calculate reward for reward checkpoint. // 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) { 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. // 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 endBlockNumber := startBlockNumber + rCheckpoint - 1
signers := make(map[common.Address]*rewardLog) signers := make(map[common.Address]*rewardLog)
prevHeaderCheckpoint := chain.GetHeaderByNumber(prevCheckpoint)
masternodes := XDPoS.GetMasternodesFromCheckpointHeader(prevHeaderCheckpoint)
if len(masternodes) > 0 {
for i := startBlockNumber; i <= endBlockNumber; i++ { for i := startBlockNumber; i <= endBlockNumber; i++ {
block := chain.GetHeaderByNumber(i) block := chain.GetHeaderByNumber(i)
addrs, err := GetSignersFromContract(blockSignerAddr, client, block.Hash()) addrs, err := GetSignersFromContract(blockSignerAddr, client, block.Hash())
@ -300,11 +304,17 @@ func GetRewardForCheckpoint(chain consensus.ChainReader, blockSignerAddr common.
// Filter duplicate address. // Filter duplicate address.
if len(addrs) > 0 { if len(addrs) > 0 {
addrSigners := make(map[common.Address]bool) addrSigners := make(map[common.Address]bool)
for _, masternode := range masternodes {
for _, addr := range addrs { for _, addr := range addrs {
if addr == masternode {
if _, ok := addrSigners[addr]; !ok { if _, ok := addrSigners[addr]; !ok {
addrSigners[addr] = true addrSigners[addr] = true
} }
break
} }
}
}
for addr := range addrSigners { for addr := range addrSigners {
_, exist := signers[addr] _, exist := signers[addr]
if exist { if exist {
@ -316,6 +326,7 @@ func GetRewardForCheckpoint(chain consensus.ChainReader, blockSignerAddr common.
} }
} }
} }
}
log.Info("Calculate reward at checkpoint", "startBlock", startBlockNumber, "endBlock", endBlockNumber) log.Info("Calculate reward at checkpoint", "startBlock", startBlockNumber, "endBlock", endBlockNumber)