@@ -1054,12 +1054,15 @@ func (p *Parlia) getCurrentValidators(blockHash common.Hash) ([]common.Address,
1054
1054
}
1055
1055
func (p * Parlia ) BlockRewards (blockNumber * big.Int ) * big.Int {
1056
1056
if rules := p .chainConfig .Rules (blockNumber ); rules .HasBlockRewards {
1057
+ if p .chainConfig .Parlia .StopMintBlock .Cmp (blockNumber ) >= 0 {
1058
+ return big .NewInt (0 )
1059
+ }
1057
1060
blockRewards := p .chainConfig .Parlia .BlockRewards
1058
1061
if blockRewards != nil && blockRewards .Cmp (common .Big0 ) > 0 {
1059
1062
return blockRewards
1060
1063
}
1061
1064
}
1062
- return nil
1065
+ return big . NewInt ( 0 )
1063
1066
}
1064
1067
1065
1068
// slash spoiled validators
@@ -1070,17 +1073,15 @@ func (p *Parlia) distributeIncoming(val common.Address, state *state.StateDB, he
1070
1073
state .SetBalance (consensus .SystemAddress , big .NewInt (0 ))
1071
1074
state .AddBalance (coinbase , balance )
1072
1075
rewards := big .NewInt (0 ).Abs (balance )
1073
- if rules := p .chainConfig .Rules (header .Number ); rules .HasBlockRewards {
1074
- blockRewards := p .chainConfig .Parlia .BlockRewards
1075
- // if we have enabled block rewards and rewards are greater than 0 then
1076
- if blockRewards != nil && blockRewards .Cmp (common .Big0 ) > 0 {
1077
- state .AddBalance (coinbase , blockRewards )
1078
- rewards = rewards .Add (rewards , blockRewards )
1079
- }
1080
- }
1076
+ blockRewards := p .BlockRewards (header .Number )
1077
+ rewards = rewards .Add (rewards , blockRewards )
1081
1078
if rewards .Cmp (common .Big0 ) <= 0 {
1082
1079
return nil
1083
1080
}
1081
+ if p .chainConfig .IsFncy2 (header .Number ) {
1082
+
1083
+ return p .distributeRewards (rewards , blockRewards , balance , val , state , header , chain , txs , receipts , receivedTxs , usedGas , mining )
1084
+ }
1084
1085
// remove 1/16 reward according to netmarble
1085
1086
//doDistributeSysReward := state.GetBalance(common.HexToAddress(systemcontract.SystemRewardContract)).Cmp(maxSystemBalance) < 0
1086
1087
//if doDistributeSysReward {
@@ -1160,6 +1161,27 @@ func (p *Parlia) distributeToSystem(amount *big.Int, state *state.StateDB, heade
1160
1161
return p .applyTransaction (msg , state , header , chain , txs , receipts , receivedTxs , usedGas , mining )
1161
1162
}
1162
1163
1164
+ // slash spoiled validators
1165
+ func (p * Parlia ) distributeRewards (amount * big.Int , blockRewards * big.Int , gasFee * big.Int , validator common.Address ,
1166
+ state * state.StateDB , header * types.Header , chain core.ChainContext ,
1167
+ txs * []* types.Transaction , receipts * []* types.Receipt , receivedTxs * []* types.Transaction , usedGas * uint64 , mining bool ) error {
1168
+ // method
1169
+ method := "distributeRewards"
1170
+
1171
+ // get packed data
1172
+ data , err := p .validatorSetABI .Pack (method ,
1173
+ validator , blockRewards , gasFee ,
1174
+ )
1175
+ if err != nil {
1176
+ log .Error ("Unable to pack tx for distributeRewards" , "error" , err )
1177
+ return err
1178
+ }
1179
+ // get system message
1180
+ msg := p .getSystemMessage (header .Coinbase , common .HexToAddress (systemcontract .ValidatorContract ), data , amount )
1181
+ // apply message
1182
+ return p .applyTransaction (msg , state , header , chain , txs , receipts , receivedTxs , usedGas , mining )
1183
+ }
1184
+
1163
1185
// slash spoiled validators
1164
1186
func (p * Parlia ) distributeToValidator (amount * big.Int , validator common.Address ,
1165
1187
state * state.StateDB , header * types.Header , chain core.ChainContext ,
0 commit comments