mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-18 02:40:45 +00:00
Fixed reward only for masternodes in block checkpoint.
This commit is contained in:
parent
8562d53da0
commit
ae06c120a7
1 changed files with 33 additions and 22 deletions
|
|
@ -286,33 +286,44 @@ 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)
|
||||||
|
|
||||||
for i := startBlockNumber; i <= endBlockNumber; i++ {
|
if len(masternodes) > 0 {
|
||||||
block := chain.GetHeaderByNumber(i)
|
for i := startBlockNumber; i <= endBlockNumber; i++ {
|
||||||
addrs, err := GetSignersFromContract(blockSignerAddr, client, block.Hash())
|
block := chain.GetHeaderByNumber(i)
|
||||||
if err != nil {
|
addrs, err := GetSignersFromContract(blockSignerAddr, client, block.Hash())
|
||||||
log.Error("Fail to get signers from smartcontract.", "error", err, "blockNumber", i)
|
if err != nil {
|
||||||
return nil, err
|
log.Error("Fail to get signers from smartcontract.", "error", err, "blockNumber", i)
|
||||||
}
|
return nil, err
|
||||||
// Filter duplicate address.
|
|
||||||
if len(addrs) > 0 {
|
|
||||||
addrSigners := make(map[common.Address]bool)
|
|
||||||
for _, addr := range addrs {
|
|
||||||
if _, ok := addrSigners[addr]; !ok {
|
|
||||||
addrSigners[addr] = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for addr := range addrSigners {
|
// Filter duplicate address.
|
||||||
_, exist := signers[addr]
|
if len(addrs) > 0 {
|
||||||
if exist {
|
addrSigners := make(map[common.Address]bool)
|
||||||
signers[addr].Sign++
|
for _, masternode := range masternodes {
|
||||||
} else {
|
for _, addr := range addrs {
|
||||||
signers[addr] = &rewardLog{1, new(big.Int)}
|
if addr == masternode {
|
||||||
|
if _, ok := addrSigners[addr]; !ok {
|
||||||
|
addrSigners[addr] = true
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for addr := range addrSigners {
|
||||||
|
_, exist := signers[addr]
|
||||||
|
if exist {
|
||||||
|
signers[addr].Sign++
|
||||||
|
} else {
|
||||||
|
signers[addr] = &rewardLog{1, new(big.Int)}
|
||||||
|
}
|
||||||
|
*totalSigner++
|
||||||
}
|
}
|
||||||
*totalSigner++
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue