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  }