github.com/inklabsfoundation/inkchain@v0.17.1-0.20181025012015-c3cef8062f19/core/ledger/kvledger/txmgmt/transutil/transet_proto_util.go (about)

     1  package transutil
     2  
     3  import (
     4  	"math/big"
     5  
     6  	"github.com/golang/protobuf/proto"
     7  	"github.com/inklabsfoundation/inkchain/core/ledger/kvledger/txmgmt/version"
     8  	"github.com/inklabsfoundation/inkchain/protos/ledger/transet"
     9  	"github.com/inklabsfoundation/inkchain/protos/ledger/transet/kvtranset"
    10  )
    11  
    12  type TranSet struct {
    13  	From      string
    14  	FromVer   *transet.Version
    15  	KvTranSet *kvtranset.KVTranSet
    16  }
    17  
    18  type SenderCounter struct {
    19  	Sender  string
    20  	Counter uint64
    21  	Ink     *big.Int
    22  }
    23  
    24  // NsRwSet encapsulates 'kvrwset.KVRWSet' proto message for a specific name space (chaincode)
    25  
    26  // ToProtoBytes constructs TxReadWriteSet proto message and serializes using protobuf Marshal
    27  func (tranSet *TranSet) ToProtoBytes() ([]byte, error) {
    28  	protoTranSet := &transet.TranSet{}
    29  	protoTranSetBytes, err := proto.Marshal(tranSet.KvTranSet)
    30  	if err != nil {
    31  		return nil, err
    32  	}
    33  	protoTranSet.From = tranSet.From
    34  	protoTranSet.FromVer = tranSet.FromVer
    35  	protoTranSet.Transet = protoTranSetBytes
    36  	protoTxBytes, err := proto.Marshal(protoTranSet)
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  	return protoTxBytes, nil
    41  }
    42  
    43  // FromProtoBytes deserializes protobytes into TxReadWriteSet proto message and populates 'TxRwSet'
    44  func (tranSet *TranSet) FromProtoBytes(protoBytes []byte) error {
    45  	protoTranSet := &transet.TranSet{}
    46  	if err := proto.Unmarshal(protoBytes, protoTranSet); err != nil {
    47  		return err
    48  	}
    49  	tranSet.From = protoTranSet.From
    50  	tranSet.FromVer = protoTranSet.FromVer
    51  	protoTranSetBytes := protoTranSet.Transet
    52  	protoKvTranSet := &kvtranset.KVTranSet{}
    53  	if err := proto.Unmarshal(protoTranSetBytes, protoKvTranSet); err != nil {
    54  		return err
    55  	}
    56  	tranSet.KvTranSet = protoKvTranSet
    57  	return nil
    58  }
    59  
    60  func NewTranSet(to string, balanceType string, amount []byte) *kvtranset.KVTrans {
    61  	return &kvtranset.KVTrans{To: to, BalanceType: balanceType, Amount: amount}
    62  }
    63  
    64  func NewVersion(protoVersion *transet.Version) *version.Height {
    65  	if protoVersion == nil {
    66  		return nil
    67  	}
    68  	return version.NewHeight(protoVersion.BlockNum, protoVersion.TxNum)
    69  }