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. // 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 := posv.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())
@ -315,11 +319,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 {
@ -331,6 +341,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)