Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
57f111e
Add EIP-7928 support
nerolation Aug 28, 2025
e138b26
simplify
nerolation Sep 16, 2025
96a4d4e
Merge remote-tracking branch 'nerolation/add-eip7928' into eip7928-su…
pk910 Sep 22, 2025
0c1388e
refactor and extend bal visualization
pk910 Sep 22, 2025
0b17025
bump `go-eth2-client`
pk910 Sep 22, 2025
f9d97a8
add gloas fork badge and internal getters
pk910 Sep 22, 2025
9e2f368
`go fmt` & template fix
pk910 Sep 22, 2025
3806ddb
bump `go-eth2-client`
pk910 Sep 25, 2025
c973604
Merge branch 'master' into eip7928-support
pk910 Oct 15, 2025
7d6652b
improve access list visualization
pk910 Oct 15, 2025
bc32144
Merge branch 'master' into eip7928-support
pk910 Oct 15, 2025
41c69a4
cleanup access list visualization
pk910 Oct 15, 2025
d041263
`go fmt`
pk910 Oct 15, 2025
6f71b5b
add access list comparison modal
pk910 Oct 18, 2025
505c827
add tx details callout
pk910 Oct 18, 2025
846d10f
improve rendering of empty access list entries
pk910 Oct 20, 2025
02221ef
render block access list on client side for performance
pk910 Oct 20, 2025
3667a2c
Merge branch 'master' into eip7928-support
pk910 Dec 8, 2025
43b6ee5
Merge branch 'master' into eip7928-support
pk910 Dec 15, 2025
cd6ce84
bump `go-ethereum` & fix bal rendering
pk910 Dec 17, 2025
1ba10c6
bump go-eth2-client
pk910 Jan 5, 2026
97770e6
Merge branch 'master' into eip7928-support
pk910 Jan 7, 2026
fed6a37
bump `go-eth2-client`
pk910 Jan 7, 2026
9d86126
Merge branch 'pk910/fix-pgsql-error' into eip7928-support
pk910 Jan 7, 2026
d56abf5
Merge branch 'pk910/el-explorer-fixes-1' into eip7928-support
pk910 Jan 9, 2026
81c8742
Merge branch 'pk910/el-explorer-fixes-1' into eip7928-support
pk910 Jan 13, 2026
467e91a
Merge branch 'master' into eip7928-support
pk910 Jan 25, 2026
1c30c4f
add internal transaction indexing via eip-7708 events
pk910 Jan 26, 2026
5f426fc
remove bal hash from db index
pk910 Jan 26, 2026
be6d446
Merge branch 'master' into eip7928-support
pk910 Feb 10, 2026
734d670
Merge branch 'master' into eip7928-support
pk910 Feb 15, 2026
ae88931
Merge branch 'master' into eip7928-support
pk910 Feb 16, 2026
ab6f9df
Merge branch 'master' into eip7928-support
barnabasbusa Feb 17, 2026
cf0ac9e
Revert "add internal transaction indexing via eip-7708 events"
pk910 Feb 17, 2026
46d281e
Merge branch 'master' into eip7928-support
pk910 Feb 17, 2026
f6c6390
drop old internal tx table
pk910 Feb 17, 2026
45d182a
Merge branch 'master' into eip7928-support
pk910 Feb 17, 2026
e8284a5
do not track ETH transfers as ERC20 transfer
pk910 Feb 18, 2026
e54ac24
Merge branch 'master' into eip7928-support
pk910 Feb 18, 2026
751203d
Merge branch 'pk910/context-aware-page-handlers' into eip7928-support
pk910 Feb 22, 2026
1419cc7
Merge branch 'pk910/context-aware-page-handlers' into eip7928-support
pk910 Feb 23, 2026
788ad85
Merge branch 'pk910/context-aware-page-handlers' into eip7928-support
pk910 Feb 23, 2026
42370be
Merge branch 'master' into eip7928-support
pk910 Feb 23, 2026
d138dbf
Merge branch 'pk910/el-indexer-fix' into eip7928-support
pk910 Feb 23, 2026
d5a0d01
Merge branch 'master' into eip7928-support
barnabasbusa Feb 24, 2026
613efbf
Merge branch 'master' into eip7928-support
pk910 Feb 25, 2026
3bb8957
Merge branch 'pk910/fix-old-basefee' into eip7928-support
pk910 Mar 3, 2026
500f98a
fix BAL parsing and remove go-ethereum override
pk910 Mar 3, 2026
6e6a617
Merge branch 'pk910/fix-old-basefee' into eip7928-support
pk910 Mar 3, 2026
995740e
Merge branch 'pk910/address-page-performance' into eip7928-support
pk910 Mar 4, 2026
f38779c
Merge branch 'master' into eip7928-support
barnabasbusa Mar 11, 2026
e9634b2
Merge branch 'master' into eip7928-support
barnabasbusa Mar 18, 2026
cab407a
Merge branch 'master' into eip7928-support
barnabasbusa Mar 19, 2026
a1bdfe7
Merge branch 'master' into eip7928-support
pk910 Mar 21, 2026
6d50229
fix ssz compatibility for slot details page
pk910 Mar 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions clients/consensus/chainspec.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ type ChainSpecConfig struct {
ElectraForkEpoch *uint64 `yaml:"ELECTRA_FORK_EPOCH" check-if-fork:"ElectraForkEpoch"`
FuluForkVersion phase0.Version `yaml:"FULU_FORK_VERSION" check-if-fork:"FuluForkEpoch"`
FuluForkEpoch *uint64 `yaml:"FULU_FORK_EPOCH" check-if-fork:"FuluForkEpoch"`
GloasForkVersion phase0.Version `yaml:"GLOAS_FORK_VERSION" check-if-fork:"GloasForkEpoch"`
GloasForkEpoch *uint64 `yaml:"GLOAS_FORK_EPOCH" check-if-fork:"GloasForkEpoch"`

// Time parameters
SlotDurationMs uint64 `yaml:"SLOT_DURATION_MS"`
Expand Down
28 changes: 28 additions & 0 deletions clients/consensus/chainstate.go
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,34 @@ func (cs *ChainState) GetForkDigestForEpoch(epoch phase0.Epoch) phase0.ForkDiges
return cs.GetForkDigest(currentForkVersion, currentBlobParams)
}

func (cs *ChainState) GetBlobScheduleForEpoch(epoch phase0.Epoch) *BlobScheduleEntry {
if cs.specs == nil {
return nil
}

var blobSchedule *BlobScheduleEntry

if cs.specs.ElectraForkEpoch != nil && epoch >= phase0.Epoch(*cs.specs.ElectraForkEpoch) {
blobSchedule = &BlobScheduleEntry{
Epoch: *cs.specs.ElectraForkEpoch,
MaxBlobsPerBlock: cs.specs.MaxBlobsPerBlockElectra,
}
} else if cs.specs.DenebForkEpoch != nil && epoch >= phase0.Epoch(*cs.specs.DenebForkEpoch) {
blobSchedule = &BlobScheduleEntry{
Epoch: *cs.specs.DenebForkEpoch,
MaxBlobsPerBlock: cs.specs.MaxBlobsPerBlock,
}
}

for i, blobScheduleEntry := range cs.specs.BlobSchedule {
if blobScheduleEntry.Epoch <= uint64(epoch) {
blobSchedule = &cs.specs.BlobSchedule[i]
}
}

return blobSchedule
}

func (cs *ChainState) GetForkDigest(forkVersion phase0.Version, blobParams *BlobScheduleEntry) phase0.ForkDigest {
if cs.specs == nil || cs.genesis == nil {
return phase0.ForkDigest{}
Expand Down
2 changes: 2 additions & 0 deletions clients/execution/chainstate.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import (
)

var DefaultSystemContractAddresses = map[string]common.Address{
rpc.BeaconRootsContract: common.HexToAddress("0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02"),
rpc.HistoryStorageContract: common.HexToAddress("0x0000F90827F1C53a10cb7A02335B175320002935"),
rpc.ConsolidationRequestContract: common.HexToAddress("0x0000BBdDc7CE488642fb579F8B00f3a590007251"),
rpc.WithdrawalRequestContract: common.HexToAddress("0x00000961Ef480Eb55e80D19ad83579A64c007002"),
}
Expand Down
2 changes: 2 additions & 0 deletions clients/execution/rpc/ethconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ const (
DepositContract = "DEPOSIT_CONTRACT_ADDRESS"
ConsolidationRequestContract = "CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS"
WithdrawalRequestContract = "WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS"
BeaconRootsContract = "BEACON_ROOTS_ADDRESS"
HistoryStorageContract = "HISTORY_STORAGE_ADDRESS"
)

type EthConfigFork struct {
Expand Down
3 changes: 3 additions & 0 deletions db/schema/pgsql/20260216000000_el-execdata-rework.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
-- Drop el_tx_events table (event data moves to blockdb in Mode 3)
DROP TABLE IF EXISTS public."el_tx_events";

-- Drop el_internal_transactions table (replaced by trace-based el_transactions_internal)
DROP TABLE IF EXISTS public."el_internal_transactions";

-- Add data tracking columns to el_blocks for blockdb data availability
-- data_status bit flags: 0x01=events, 0x02=call traces, 0x04=state changes
-- data_size: compressed size in bytes of blockdb object (0 = no data)
Expand Down
3 changes: 3 additions & 0 deletions db/schema/sqlite/20260216000000_el-execdata-rework.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
-- Drop el_tx_events table (event data moves to blockdb in Mode 3)
DROP TABLE IF EXISTS "el_tx_events";

-- Drop el_internal_transactions table (replaced by trace-based el_transactions_internal)
DROP TABLE IF EXISTS "el_internal_transactions";

-- Add data tracking columns to el_blocks for blockdb data availability
-- data_status bit flags: 0x01=events, 0x02=call traces, 0x04=state changes
-- data_size: compressed size in bytes of blockdb object (0 = no data)
Expand Down
5 changes: 5 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -254,3 +254,8 @@ require (
modernc.org/memory v1.11.0 // indirect
modernc.org/sqlite v1.46.1 // indirect
)

replace github.com/attestantio/go-eth2-client => github.com/pk910/go-eth2-client v0.0.0-20260107112128-b97b7522025a

//replace github.com/ethereum/go-ethereum => github.com/ethereum/go-ethereum v0.0.0-20251217020005-abaef48d549a
//replace github.com/ethereum/go-ethereum => github.com/ethereum/go-ethereum v0.0.0-20260302233108-b9b434779702
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,6 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax
github.com/allegro/bigcache/v3 v3.1.0 h1:H2Vp8VOvxcrB91o86fUSVJFqeuz8kpyyB02eH3bSzwk=
github.com/allegro/bigcache/v3 v3.1.0/go.mod h1:aPyh7jEvrog9zAwx5N7+JUQX5dZTSGpxF1LAR4dr35I=
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
github.com/attestantio/go-eth2-client v0.28.0 h1:2zIIIMPvSD+g6h3TgVXsoda/Yw3e+wjo1e8CZEanORU=
github.com/attestantio/go-eth2-client v0.28.0/go.mod h1:PO9sHFCq+1RiG+Eh3eOR2GYvYV64Qzg7idM3kLgCs5k=
github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o=
github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
Expand Down Expand Up @@ -562,6 +560,8 @@ github.com/pion/webrtc/v4 v4.1.4 h1:/gK1ACGHXQmtyVVbJFQDxNoODg4eSRiFLB7t9r9pg8M=
github.com/pion/webrtc/v4 v4.1.4/go.mod h1:Oab9npu1iZtQRMic3K3toYq5zFPvToe/QBw7dMI2ok4=
github.com/pk910/dynamic-ssz v1.2.3-0.20260318065836-323b83c1a387 h1:XkL2iLFDP6/NKAOF0fysZrhaa/qtcAtqzhLUxSIy79s=
github.com/pk910/dynamic-ssz v1.2.3-0.20260318065836-323b83c1a387/go.mod h1:NmeFF4jxzVwWC8cnEhUB7xMI++8hd/0OZvZHFrUvFfs=
github.com/pk910/go-eth2-client v0.0.0-20260107112128-b97b7522025a h1:913U5Ysj0Xd4j8WFUwK94vKpI6GUz52ZFi4nxgaPp4M=
github.com/pk910/go-eth2-client v0.0.0-20260107112128-b97b7522025a/go.mod h1:1MBvz1DVe6jZduHJDJuJ/1S4LzYmDmvx+r5alo4pyrM=
github.com/pk910/hashtree-bindings v0.1.0 h1:w7NyRWFi2OaYEFvo9ADcE/QU6PMuVLl3hBgx92KiH9c=
github.com/pk910/hashtree-bindings v0.1.0/go.mod h1:zrWt88783JmhBfcgni6kkIMYRdXTZi/FL//OyI5T/l4=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
Expand Down
4 changes: 3 additions & 1 deletion handlers/api/network_forks_v1.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,8 @@ func buildNetworkForks(chainState *consensus.ChainState) []*APINetworkForkInfo {
// Helper function to add consensus fork
addConsensusFork := func(name string, forkEpoch *uint64, forkVersion phase0.Version) {
if forkEpoch != nil && *forkEpoch < uint64(18446744073709551615) {
forkDigest := chainState.GetForkDigest(forkVersion, nil)
blobParams := chainState.GetBlobScheduleForEpoch(phase0.Epoch(*forkEpoch))
forkDigest := chainState.GetForkDigest(forkVersion, blobParams)
version := fmt.Sprintf("0x%x", forkVersion)
epoch := *forkEpoch
forks = append(forks, &APINetworkForkInfo{
Expand All @@ -135,6 +136,7 @@ func buildNetworkForks(chainState *consensus.ChainState) []*APINetworkForkInfo {
addConsensusFork("Deneb", specs.DenebForkEpoch, specs.DenebForkVersion)
addConsensusFork("Electra", specs.ElectraForkEpoch, specs.ElectraForkVersion)
addConsensusFork("Fulu", specs.FuluForkEpoch, specs.FuluForkVersion)
addConsensusFork("Gloas", specs.GloasForkEpoch, specs.GloasForkVersion)

// Add BPO forks from BLOB_SCHEDULE
for i, blobSchedule := range specs.BlobSchedule {
Expand Down
13 changes: 13 additions & 0 deletions handlers/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,19 @@ func buildIndexPageData(ctx context.Context) (*models.IndexPageData, time.Durati
ForkDigest: forkDigest[:],
})
}
if specs.GloasForkEpoch != nil && *specs.GloasForkEpoch < uint64(18446744073709551615) {
blobParams := chainState.GetBlobScheduleForEpoch(phase0.Epoch(*specs.GloasForkEpoch))
forkDigest := chainState.GetForkDigest(specs.GloasForkVersion, blobParams)
pageData.NetworkForks = append(pageData.NetworkForks, &models.IndexPageDataForks{
Name: "Gloas",
Epoch: *specs.GloasForkEpoch,
Version: specs.GloasForkVersion[:],
Time: uint64(chainState.EpochToTime(phase0.Epoch(*specs.GloasForkEpoch)).Unix()),
Active: uint64(currentEpoch) >= *specs.GloasForkEpoch,
Type: "consensus",
ForkDigest: forkDigest[:],
})
}

// Add BPO forks from BLOB_SCHEDULE
elBlobSchedule := services.GlobalBeaconService.GetExecutionChainState().GetFullBlobSchedule()
Expand Down
147 changes: 147 additions & 0 deletions handlers/slot.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@ import (
"github.com/attestantio/go-eth2-client/spec/bellatrix"
"github.com/attestantio/go-eth2-client/spec/electra"
"github.com/attestantio/go-eth2-client/spec/phase0"
"github.com/ethereum/go-ethereum/common"
ethtypes "github.com/ethereum/go-ethereum/core/types"
"github.com/gorilla/mux"
"github.com/sirupsen/logrus"

"github.com/ethpandaops/dora/blockdb"
"github.com/ethpandaops/dora/clients/execution/rpc"
"github.com/ethpandaops/dora/db"
"github.com/ethpandaops/dora/dbtypes"
"github.com/ethpandaops/dora/indexer/beacon"
Expand All @@ -46,6 +48,7 @@ func Slot(w http.ResponseWriter, r *http.Request) {
"slot/deposit_requests.html",
"slot/withdrawal_requests.html",
"slot/consolidation_requests.html",
"slot/block_access_list.html",
)
var notfoundTemplateFiles = append(layoutTemplateFiles,
"slot/notfound.html",
Expand Down Expand Up @@ -82,6 +85,14 @@ func Slot(w http.ResponseWriter, r *http.Request) {
return
}

if urlArgs.Get("action") == "parse-access-list" {
if err := handleSlotParseAccessList(w, r); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
return
}

pageData, pageError := getSlotPageData(blockSlot, blockRootHash)
if pageError != nil {
handlePageError(w, r, pageError)
Expand Down Expand Up @@ -298,6 +309,11 @@ func buildSlotPageData(ctx context.Context, blockSlot int64, blockRoot []byte) (
}
pageData.Block = getSlotPageBlockData(ctx, blockData, epochStatsValues, blockUid)

// Copy transaction details for access list UI
if pageData.Block != nil && pageData.Block.Transactions != nil {
pageData.TransactionDetails = pageData.Block.Transactions
}

// check mev block
if pageData.Block.ExecutionData != nil {
mevBlock := db.GetMevBlockByBlockHash(ctx, pageData.Block.ExecutionData.BlockHash)
Expand All @@ -320,6 +336,32 @@ func buildSlotPageData(ctx context.Context, blockSlot int64, blockRoot []byte) (
}
}

// Add system contract addresses
if execChainState := services.GlobalBeaconService.GetExecutionChainState(); execChainState != nil {
consolidationAddr := execChainState.GetSystemContractAddress(rpc.ConsolidationRequestContract)
withdrawalAddr := execChainState.GetSystemContractAddress(rpc.WithdrawalRequestContract)
beaconRootsAddr := execChainState.GetSystemContractAddress(rpc.BeaconRootsContract)
historyStorageAddr := execChainState.GetSystemContractAddress(rpc.HistoryStorageContract)

pageData.SystemContracts = []*types.SystemContract{
{Address: consolidationAddr.Hex(), Name: "Consolidation Request Contract (EIP-7251)"},
{Address: withdrawalAddr.Hex(), Name: "Withdrawal Request Contract (EIP-7002)"},
{Address: beaconRootsAddr.Hex(), Name: "Beacon Roots Contract (EIP-4788)"},
{Address: historyStorageAddr.Hex(), Name: "History Storage Contract (EIP-2935)"},
}
}

// Add deposit contract from beacon chain config
if chainState := services.GlobalBeaconService.GetChainState(); chainState != nil {
if specs := chainState.GetSpecs(); specs != nil && specs.DepositContractAddress != nil {
depositAddr := common.BytesToAddress(specs.DepositContractAddress)
pageData.SystemContracts = append(pageData.SystemContracts, &types.SystemContract{
Address: depositAddr.Hex(),
Name: "Deposit Contract",
})
}
}

return pageData, cacheTimeout
}

Expand Down Expand Up @@ -823,6 +865,15 @@ func getSlotPageBlockData(ctx context.Context, blockData *services.CombinedBlock
getSlotPageTransactions(ctx, pageData, transactions, blockUid)
}

if blockAccessListRlp, err := executionPayload.BlockAccessList(); err == nil {
accesses, err := utils.DecodeBlockAccessList(blockAccessListRlp)
if err != nil {
logrus.Warnf("error decoding block access list: %v", err)
} else {
pageData.ExecutionData.BlockAccessList = convertBALToModel(accesses)
}
}

// Check if execution data exists in blockdb for receipt downloads
if blockdb.GlobalBlockDb != nil && blockdb.GlobalBlockDb.SupportsExecData() {
hasExecData, _ := blockdb.GlobalBlockDb.HasExecData(
Expand Down Expand Up @@ -1087,3 +1138,99 @@ func getSlotPageConsolidationRequests(pageData *models.SlotPageBlockData, consol

pageData.ConsolidationRequestsCount = uint64(len(pageData.ConsolidationRequests))
}

func handleSlotParseAccessList(w http.ResponseWriter, r *http.Request) error {
w.Header().Set("Content-Type", "application/json")

if r.Method != http.MethodPost {
return fmt.Errorf("method not allowed")
}

rlpHex := r.PostFormValue("rlp")
if rlpHex == "" {
return fmt.Errorf("missing rlp parameter")
}

// Remove 0x prefix if present
rlpHex = strings.TrimPrefix(rlpHex, "0x")

// Decode hex to bytes
rlpBytes, err := hex.DecodeString(rlpHex)
if err != nil {
return fmt.Errorf("invalid hex: %v", err)
}

// Parse RLP encoded access list
accesses, err := utils.DecodeBlockAccessList(rlpBytes)
if err != nil {
return fmt.Errorf("invalid access list RLP: %v", err)
}

return json.NewEncoder(w).Encode(convertBALToModel(accesses))
}

// convertBALToModel converts decoded EIP-7928 BAL entries to model types.
func convertBALToModel(accesses []utils.BALAccountAccess) []*models.SlotPageBlockAccessListEntry {
result := make([]*models.SlotPageBlockAccessListEntry, len(accesses))
for i, entry := range accesses {
balEntry := &models.SlotPageBlockAccessListEntry{
Address: entry.Address[:],
}

if len(entry.StorageWrites) > 0 {
balEntry.StorageChanges = make([]*models.SlotPageBlockBALStorageChange, len(entry.StorageWrites))
for j, storageChange := range entry.StorageWrites {
changes := make([]*models.SlotPageBlockBALStorageSlotChange, len(storageChange.Accesses))
for k, write := range storageChange.Accesses {
changes[k] = &models.SlotPageBlockBALStorageSlotChange{
BlockAccessIndex: write.TxIdx,
Value: write.ValueAfter,
}
}
balEntry.StorageChanges[j] = &models.SlotPageBlockBALStorageChange{
Slot: storageChange.Slot,
Changes: changes,
}
}
}

if len(entry.StorageReads) > 0 {
balEntry.StorageReads = make([][]byte, len(entry.StorageReads))
copy(balEntry.StorageReads, entry.StorageReads)
}

if len(entry.BalanceChanges) > 0 {
balEntry.BalanceChanges = make([]*models.SlotPageBlockBALBalanceChange, len(entry.BalanceChanges))
for j, balanceChange := range entry.BalanceChanges {
balEntry.BalanceChanges[j] = &models.SlotPageBlockBALBalanceChange{
BlockAccessIndex: balanceChange.TxIdx,
Balance: balanceChange.Balance,
}
}
}

if len(entry.NonceChanges) > 0 {
balEntry.NonceChanges = make([]*models.SlotPageBlockBALNonceChange, len(entry.NonceChanges))
for j, nonceChange := range entry.NonceChanges {
balEntry.NonceChanges[j] = &models.SlotPageBlockBALNonceChange{
BlockAccessIndex: nonceChange.TxIdx,
Nonce: nonceChange.Nonce,
}
}
}

if len(entry.CodeChanges) > 0 {
balEntry.CodeChanges = make([]*models.SlotPageBlockBALCodeChange, len(entry.CodeChanges))
for j, codeChange := range entry.CodeChanges {
balEntry.CodeChanges[j] = &models.SlotPageBlockBALCodeChange{
BlockAccessIndex: codeChange.TxIndex,
Code: codeChange.Code,
}
}
}

result[i] = balEntry
}

return result
}
Loading