github.com/MetalBlockchain/metalgo@v1.11.9/vms/platformvm/state/metadata_delegator.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package state
     5  
     6  import (
     7  	"github.com/MetalBlockchain/metalgo/database"
     8  	"github.com/MetalBlockchain/metalgo/ids"
     9  )
    10  
    11  type delegatorMetadata struct {
    12  	PotentialReward uint64 `v1:"true"`
    13  	StakerStartTime uint64 `v1:"true"`
    14  
    15  	txID ids.ID
    16  }
    17  
    18  func parseDelegatorMetadata(bytes []byte, metadata *delegatorMetadata) error {
    19  	var err error
    20  	switch len(bytes) {
    21  	case database.Uint64Size:
    22  		// only potential reward was stored
    23  		metadata.PotentialReward, err = database.ParseUInt64(bytes)
    24  	default:
    25  		_, err = MetadataCodec.Unmarshal(bytes, metadata)
    26  	}
    27  	return err
    28  }
    29  
    30  func writeDelegatorMetadata(db database.KeyValueWriter, metadata *delegatorMetadata, codecVersion uint16) error {
    31  	// The "0" codec is skipped for [delegatorMetadata]. This is to ensure the
    32  	// [validatorMetadata] codec version is the same as the [delegatorMetadata]
    33  	// codec version.
    34  	//
    35  	// TODO: Cleanup post-Durango activation.
    36  	if codecVersion == 0 {
    37  		return database.PutUInt64(db, metadata.txID[:], metadata.PotentialReward)
    38  	}
    39  	metadataBytes, err := MetadataCodec.Marshal(codecVersion, metadata)
    40  	if err != nil {
    41  		return err
    42  	}
    43  	return db.Put(metadata.txID[:], metadataBytes)
    44  }