|
|
|
@ -1,6 +1,7 @@ |
|
|
|
package payouts |
|
|
|
package payouts |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
import ( |
|
|
|
|
|
|
|
"errors" |
|
|
|
"fmt" |
|
|
|
"fmt" |
|
|
|
"log" |
|
|
|
"log" |
|
|
|
"math/big" |
|
|
|
"math/big" |
|
|
|
@ -31,10 +32,14 @@ type UnlockerConfig struct { |
|
|
|
ByzantiumFBlock *big.Int `json:"byzantiumFBlock"` |
|
|
|
ByzantiumFBlock *big.Int `json:"byzantiumFBlock"` |
|
|
|
ConstantinopleFBlock *big.Int `json:"constantinopleFBlock"` |
|
|
|
ConstantinopleFBlock *big.Int `json:"constantinopleFBlock"` |
|
|
|
Network string `json:"network"` |
|
|
|
Network string `json:"network"` |
|
|
|
|
|
|
|
IsLondonHardForkEnabled bool `json:"isLondonHardForkEnabled"` |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const minDepth = 16 |
|
|
|
const minDepth = 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// London hark fork
|
|
|
|
|
|
|
|
const londonHardForkHeight = 12965000 |
|
|
|
|
|
|
|
|
|
|
|
// Universal block reward ethash
|
|
|
|
// Universal block reward ethash
|
|
|
|
const UniversalHardForkHeight = 0 |
|
|
|
const UniversalHardForkHeight = 0 |
|
|
|
|
|
|
|
|
|
|
|
@ -927,14 +932,31 @@ func getUncleRewardEthereum(uHeight *big.Int, height *big.Int, reward *big.Int) |
|
|
|
func (u *BlockUnlocker) getExtraRewardForTx(block *rpc.GetBlockReply) (*big.Int, error) { |
|
|
|
func (u *BlockUnlocker) getExtraRewardForTx(block *rpc.GetBlockReply) (*big.Int, error) { |
|
|
|
amount := new(big.Int) |
|
|
|
amount := new(big.Int) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
blockHeight, err := strconv.ParseInt(strings.Replace(block.Number, "0x", "", -1), 16, 64) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return nil, err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
baseFeePerGas := util.String2Big(block.BaseFeePerGas) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
config := UnlockerConfig{ |
|
|
|
|
|
|
|
IsLondonHardForkEnabled: blockHeight >= londonHardForkHeight, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for _, tx := range block.Transactions { |
|
|
|
for _, tx := range block.Transactions { |
|
|
|
receipt, err := u.rpc.GetTxReceipt(tx.Hash) |
|
|
|
receipt, err := u.rpc.GetTxReceipt(tx.Hash) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
log.Println("Error getting transaction receipt:", err) |
|
|
|
|
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
if receipt != nil { |
|
|
|
if receipt != nil { |
|
|
|
gasUsed := util.String2Big(receipt.GasUsed) |
|
|
|
gasUsed := util.String2Big(receipt.GasUsed) |
|
|
|
gasPrice := util.String2Big(tx.GasPrice) |
|
|
|
gasPrice := util.String2Big(tx.GasPrice) |
|
|
|
|
|
|
|
if config.IsLondonHardForkEnabled { |
|
|
|
|
|
|
|
gasPrice = new(big.Int).Sub(gasPrice, baseFeePerGas) |
|
|
|
|
|
|
|
if gasPrice.Cmp(big.NewInt(0)) < 0 { |
|
|
|
|
|
|
|
return nil, errors.New("gasPrice less than baseFeePerGas") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
fee := new(big.Int).Mul(gasUsed, gasPrice) |
|
|
|
fee := new(big.Int).Mul(gasUsed, gasPrice) |
|
|
|
amount.Add(amount, fee) |
|
|
|
amount.Add(amount, fee) |
|
|
|
} |
|
|
|
} |
|
|
|
|