@@ -1204,6 +1204,36 @@ func verifyRewards(num *big.Int, rewards string) error {
12041204 //return admin.verifyRewards(num, rewards)
12051205}
12061206
1207+ func getCoinbase (height * big.Int ) (coinbase common.Address , err error ) {
1208+ if admin == nil {
1209+ err = wemixminer .ErrNotInitialized
1210+ return
1211+ }
1212+ prvKey := admin .stack .Server ().PrivateKey
1213+ if admin .self != nil {
1214+ ctx , cancel := context .WithCancel (context .Background ())
1215+ defer cancel ()
1216+
1217+ num := new (big.Int ).Sub (height , common .Big1 )
1218+ _ , gov , _ , _ , err2 := admin .getRegGovEnvContracts (ctx , num )
1219+ if err2 != nil {
1220+ err = err2
1221+ return
1222+ }
1223+
1224+ nodeId := crypto .FromECDSAPub (& prvKey .PublicKey )[1 :]
1225+ if addr , err2 := enodeExists (ctx , height , gov , nodeId ); err2 != nil {
1226+ err = err2
1227+ return
1228+ } else {
1229+ coinbase = addr
1230+ }
1231+ } else if admin .nodeInfo != nil && admin .nodeInfo .ID == admin .bootNodeId {
1232+ coinbase = admin .bootAccount
1233+ }
1234+ return
1235+ }
1236+
12071237func signBlock (height * big.Int , hash common.Hash ) (coinbase common.Address , sig []byte , err error ) {
12081238 if admin == nil {
12091239 err = wemixminer .ErrNotInitialized
@@ -1787,6 +1817,7 @@ func init() {
17871817 wemixminer .SuggestGasPriceFunc = suggestGasPrice
17881818 wemixminer .CalculateRewardsFunc = calculateRewards
17891819 wemixminer .VerifyRewardsFunc = verifyRewards
1820+ wemixminer .GetCoinbaseFunc = getCoinbase
17901821 wemixminer .SignBlockFunc = signBlock
17911822 wemixminer .VerifyBlockSigFunc = verifyBlockSig
17921823 wemixminer .RequirePendingTxsFunc = requirePendingTxs
0 commit comments