github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/core/helpers/genesis.go (about) 1 package helpers 2 3 import ( 4 "fmt" 5 6 "github.com/pkg/errors" 7 iface "github.com/prysmaticlabs/prysm/beacon-chain/state/interface" 8 ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1" 9 "github.com/prysmaticlabs/prysm/shared/params" 10 "github.com/prysmaticlabs/prysm/shared/trieutil" 11 ) 12 13 // UpdateGenesisEth1Data updates eth1 data for genesis state. 14 func UpdateGenesisEth1Data(state iface.BeaconState, deposits []*ethpb.Deposit, eth1Data *ethpb.Eth1Data) (iface.BeaconState, error) { 15 if eth1Data == nil { 16 return nil, errors.New("no eth1data provided for genesis state") 17 } 18 19 var leaves [][]byte 20 for _, deposit := range deposits { 21 if deposit == nil || deposit.Data == nil { 22 return nil, fmt.Errorf("nil deposit or deposit with nil data cannot be processed: %v", deposit) 23 } 24 hash, err := deposit.Data.HashTreeRoot() 25 if err != nil { 26 return nil, err 27 } 28 leaves = append(leaves, hash[:]) 29 } 30 var trie *trieutil.SparseMerkleTrie 31 var err error 32 if len(leaves) > 0 { 33 trie, err = trieutil.GenerateTrieFromItems(leaves, params.BeaconConfig().DepositContractTreeDepth) 34 if err != nil { 35 return nil, err 36 } 37 } else { 38 trie, err = trieutil.NewTrie(params.BeaconConfig().DepositContractTreeDepth) 39 if err != nil { 40 return nil, err 41 } 42 } 43 44 depositRoot := trie.Root() 45 eth1Data.DepositRoot = depositRoot[:] 46 err = state.SetEth1Data(eth1Data) 47 if err != nil { 48 return nil, err 49 } 50 return state, nil 51 }