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 }