github.com/inklabsfoundation/inkchain@v0.17.1-0.20181025012015-c3cef8062f19/core/ledger/kvledger/txmgmt/transutil/transet_builder.go (about) 1 package transutil 2 3 import ( 4 "fmt" 5 6 "github.com/inklabsfoundation/inkchain/common/flogging" 7 "github.com/inklabsfoundation/inkchain/core/ledger/util" 8 "github.com/inklabsfoundation/inkchain/protos/ledger/transet" 9 "github.com/inklabsfoundation/inkchain/protos/ledger/transet/kvtranset" 10 ) 11 12 type TranSetBuilder struct { 13 from string 14 fromVer *transet.Version 15 toSet map[string]*kvtranset.KVTrans 16 } 17 18 func NewTranSetBuilder() *TranSetBuilder { 19 return &TranSetBuilder{"", nil, make(map[string]*kvtranset.KVTrans)} 20 } 21 22 var logger = flogging.MustGetLogger("transutil") 23 24 func (builder *TranSetBuilder) AddToTranSet(to string, balanceType string, amount []byte) { 25 builder.toSet[to] = NewTranSet(to, balanceType, amount) 26 } 27 28 func (builder *TranSetBuilder) SetSender(sender string, version *transet.Version) { 29 if sender == "" { 30 fmt.Println("fatal: empty sender") 31 return 32 } 33 if builder.from == "" { 34 builder.from = sender 35 } else if builder.from != sender { 36 panic("fatal: multiple sender in one transaction!") 37 return 38 } 39 builder.fromVer = version 40 } 41 42 func (builder *TranSetBuilder) GetTranSet() *TranSet { 43 tranSet := &TranSet{} 44 //from 45 tranSet.From = builder.from 46 tranSet.FromVer = builder.fromVer 47 //transferSet 48 var trans []*kvtranset.KVTrans 49 sortedTransKeys := util.GetSortedKeys(builder.toSet) 50 for _, key := range sortedTransKeys { 51 trans = append(trans, builder.toSet[key]) 52 } 53 kvTrans := &kvtranset.KVTranSet{Trans: trans} 54 tranSet.KvTranSet = kvTrans 55 return tranSet 56 }