erigon-pulse/consensus/misc/eip4788.go
2023-08-23 15:40:49 +02:00

24 lines
1.1 KiB
Go

package misc
import (
"github.com/holiman/uint256"
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon/consensus"
"github.com/ledgerwatch/erigon/core/state"
"github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/erigon/params"
)
func ApplyBeaconRootEip4788(chain consensus.ChainHeaderReader, header *types.Header, state *state.IntraBlockState) {
historyStorageAddress := libcommon.BytesToAddress(params.HistoryStorageAddress)
historicalRootsModulus := params.HistoricalRootsModulus
timestampReduced := header.Time % historicalRootsModulus
timestampExtended := timestampReduced + historicalRootsModulus
timestampIndex := libcommon.BytesToHash((uint256.NewInt(timestampReduced)).Bytes())
rootIndex := libcommon.BytesToHash(uint256.NewInt(timestampExtended).Bytes())
parentBeaconBlockRootInt := *uint256.NewInt(0).SetBytes(header.ParentBeaconBlockRoot.Bytes())
state.SetState(historyStorageAddress, &timestampIndex, *uint256.NewInt(header.Time))
state.SetState(historyStorageAddress, &rootIndex, parentBeaconBlockRootInt)
}