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 }