github.com/ava-labs/avalanchego@v1.11.11/vms/platformvm/genesis/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 genesis
     5  
     6  import (
     7  	"github.com/ava-labs/avalanchego/vms/components/avax"
     8  	"github.com/ava-labs/avalanchego/vms/platformvm/txs"
     9  )
    10  
    11  // UTXO adds messages to UTXOs
    12  type UTXO struct {
    13  	avax.UTXO `serialize:"true"`
    14  	Message   []byte `serialize:"true" json:"message"`
    15  }
    16  
    17  // Genesis represents a genesis state of the platform chain
    18  type Genesis struct {
    19  	UTXOs         []*UTXO   `serialize:"true"`
    20  	Validators    []*txs.Tx `serialize:"true"`
    21  	Chains        []*txs.Tx `serialize:"true"`
    22  	Timestamp     uint64    `serialize:"true"`
    23  	InitialSupply uint64    `serialize:"true"`
    24  	Message       string    `serialize:"true"`
    25  }
    26  
    27  func Parse(genesisBytes []byte) (*Genesis, error) {
    28  	gen := &Genesis{}
    29  	if _, err := Codec.Unmarshal(genesisBytes, gen); err != nil {
    30  		return nil, err
    31  	}
    32  	for _, tx := range gen.Validators {
    33  		if err := tx.Initialize(txs.GenesisCodec); err != nil {
    34  			return nil, err
    35  		}
    36  	}
    37  	for _, tx := range gen.Chains {
    38  		if err := tx.Initialize(txs.GenesisCodec); err != nil {
    39  			return nil, err
    40  		}
    41  	}
    42  	return gen, nil
    43  }