github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/core/ledger/kvledger/txmgmt/statedb/statecouchdb/dbvalue_encoding.go (about) 1 /* 2 Copyright hechain. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package statecouchdb 8 9 import ( 10 "encoding/base64" 11 12 "github.com/golang/protobuf/proto" 13 "github.com/hechain20/hechain/core/ledger/internal/version" 14 "github.com/pkg/errors" 15 ) 16 17 func encodeVersionAndMetadata(version *version.Height, metadata []byte) (string, error) { 18 if version == nil { 19 return "", errors.New("nil version not supported") 20 } 21 msg := &VersionAndMetadata{ 22 Version: version.ToBytes(), 23 Metadata: metadata, 24 } 25 msgBytes, err := proto.Marshal(msg) 26 if err != nil { 27 return "", err 28 } 29 return base64.StdEncoding.EncodeToString(msgBytes), nil 30 } 31 32 func decodeVersionAndMetadata(encodedstr string) (*version.Height, []byte, error) { 33 persistedVersionAndMetadata, err := base64.StdEncoding.DecodeString(encodedstr) 34 if err != nil { 35 return nil, nil, err 36 } 37 versionAndMetadata := &VersionAndMetadata{} 38 if err = proto.Unmarshal(persistedVersionAndMetadata, versionAndMetadata); err != nil { 39 return nil, nil, err 40 } 41 ver, _, err := version.NewHeightFromBytes(versionAndMetadata.Version) 42 if err != nil { 43 return nil, nil, err 44 } 45 return ver, versionAndMetadata.Metadata, nil 46 }