Skip to content

Commit

Permalink
london hard fork
Browse files Browse the repository at this point in the history
  • Loading branch information
yuriy0803 committed Jun 10, 2024
1 parent e46c335 commit a89e14b
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 15 deletions.
52 changes: 37 additions & 15 deletions payouts/unlocker.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package payouts

import (
"errors"
"fmt"
"log"
"math/big"
Expand All @@ -17,24 +18,28 @@ import (
)

type UnlockerConfig struct {
Enabled bool `json:"enabled"`
PoolFee float64 `json:"poolFee"`
PoolFeeAddress string `json:"poolFeeAddress"`
Depth int64 `json:"depth"`
ImmatureDepth int64 `json:"immatureDepth"`
KeepTxFees bool `json:"keepTxFees"`
Interval string `json:"interval"`
Daemon string `json:"daemon"`
Timeout string `json:"timeout"`
Ecip1017FBlock int64 `json:"ecip1017FBlock"`
Ecip1017EraRounds *big.Int `json:"ecip1017EraRounds"`
ByzantiumFBlock *big.Int `json:"byzantiumFBlock"`
ConstantinopleFBlock *big.Int `json:"constantinopleFBlock"`
Network string `json:"network"`
Enabled bool `json:"enabled"`
PoolFee float64 `json:"poolFee"`
PoolFeeAddress string `json:"poolFeeAddress"`
Depth int64 `json:"depth"`
ImmatureDepth int64 `json:"immatureDepth"`
KeepTxFees bool `json:"keepTxFees"`
Interval string `json:"interval"`
Daemon string `json:"daemon"`
Timeout string `json:"timeout"`
Ecip1017FBlock int64 `json:"ecip1017FBlock"`
Ecip1017EraRounds *big.Int `json:"ecip1017EraRounds"`
ByzantiumFBlock *big.Int `json:"byzantiumFBlock"`
ConstantinopleFBlock *big.Int `json:"constantinopleFBlock"`
Network string `json:"network"`
IsLondonHardForkEnabled bool `json:"isLondonHardForkEnabled"`
}

const minDepth = 16

// London hark fork
const londonHardForkHeight = 12965000

// Universal block reward ethash
const UniversalHardForkHeight = 0

Expand Down Expand Up @@ -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) {
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 {
receipt, err := u.rpc.GetTxReceipt(tx.Hash)
if err != nil {
return nil, err
log.Println("Error getting transaction receipt:", err)
continue
}
if receipt != nil {
gasUsed := util.String2Big(receipt.GasUsed)
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)
amount.Add(amount, fee)
}
Expand Down
2 changes: 2 additions & 0 deletions rpc/rpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ type GetBlockReply struct {
Uncles []string `json:"uncles"`
// https://github.com/ethereum/EIPs/issues/95
SealFields []string `json:"sealFields"`
// london hard fork
BaseFeePerGas string `json:"baseFeePerGas"`

Check failure on line 44 in rpc/rpc.go

View workflow job for this annotation

GitHub Actions / build (arm64)

BaseFeePerGas redeclared

Check failure on line 44 in rpc/rpc.go

View workflow job for this annotation

GitHub Actions / build (amd64)

BaseFeePerGas redeclared
}

type GetBlockReplyPart struct {
Expand Down

0 comments on commit a89e14b

Please sign in to comment.