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  }