github.com/ava-labs/avalanchego@v1.11.11/vms/example/xsvm/execute/genesis.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package execute 5 6 import ( 7 "github.com/ava-labs/avalanchego/database" 8 "github.com/ava-labs/avalanchego/ids" 9 "github.com/ava-labs/avalanchego/vms/example/xsvm/block" 10 "github.com/ava-labs/avalanchego/vms/example/xsvm/genesis" 11 "github.com/ava-labs/avalanchego/vms/example/xsvm/state" 12 ) 13 14 func Genesis(db database.KeyValueReaderWriterDeleter, chainID ids.ID, g *genesis.Genesis) error { 15 isInitialized, err := state.IsInitialized(db) 16 if err != nil { 17 return err 18 } 19 if isInitialized { 20 return nil 21 } 22 23 blk, err := genesis.Block(g) 24 if err != nil { 25 return err 26 } 27 28 for _, allocation := range g.Allocations { 29 if err := state.SetBalance(db, allocation.Address, chainID, allocation.Balance); err != nil { 30 return err 31 } 32 } 33 34 blkID, err := blk.ID() 35 if err != nil { 36 return err 37 } 38 39 blkBytes, err := block.Codec.Marshal(block.CodecVersion, blk) 40 if err != nil { 41 return err 42 } 43 44 if err := state.AddBlock(db, blk.Height, blkID, blkBytes); err != nil { 45 return err 46 } 47 if err := state.SetLastAccepted(db, blkID); err != nil { 48 return err 49 } 50 return state.SetInitialized(db) 51 }