@@ -57,11 +57,10 @@ type XMCache struct {
5757// NewXModelCache new an instance of XModel Cache
5858func NewXModelCache (cfg * contract.SandboxConfig ) * XMCache {
5959 return & XMCache {
60- model : cfg .XMReader ,
61- inputsCache : NewMemXModel (),
62- outputsCache : NewMemXModel (),
63- utxoSandbox : utxo .NewUTXOSandbox (cfg ),
64-
60+ model : cfg .XMReader ,
61+ inputsCache : NewMemXModel (),
62+ outputsCache : NewMemXModel (),
63+ utxoSandbox : utxo .NewUTXOSandbox (cfg ),
6564 crossQueryCache : NewCrossQueryCache (),
6665 }
6766}
@@ -377,57 +376,61 @@ func (xc *XMCache) CrossQuery(crossQueryRequest *pb.CrossQueryRequest, queryMeta
377376 return xc .crossQueryCache .CrossQuery (crossQueryRequest , queryMeta )
378377}
379378
379+ func (xc * XMCache ) CrossQueryCache (crossQueries []* pb.CrossQueryInfo ) {
380+ xc .crossQueryCache .CrossQueryCache (crossQueries )
381+ }
382+
380383// ParseCrossQuery parse cross query from tx
381- // func ParseCrossQuery(tx *pb .Transaction) ([]*pb.CrossQueryInfo, error) {
382- // var (
383- // crossQueryInfos []*pb.CrossQueryInfo
384- // queryInfos []byte
385- // )
386- // for _, out := range tx.GetTxOutputsExt() {
387- // if out.GetBucket() != TransientBucket {
388- // continue
389- // }
390- // if bytes.Equal(out.GetKey(), crossQueryInfosKey) {
391- // queryInfos = out.GetValue()
392- // }
393- // }
394- // if queryInfos != nil {
395- // err := UnmsarshalMessages(queryInfos, &crossQueryInfos)
396- // if err != nil {
397- // return nil, err
398- // }
399- // }
400- // return crossQueryInfos, nil
401- // }
384+ func ParseCrossQuery (tx * lpb .Transaction ) ([]* pb.CrossQueryInfo , error ) {
385+ var (
386+ crossQueryInfos []* pb.CrossQueryInfo
387+ queryInfos []byte
388+ )
389+ for _ , out := range tx .GetTxOutputsExt () {
390+ if out .GetBucket () != TransientBucket {
391+ continue
392+ }
393+ if bytes .Equal (out .GetKey (), crossQueryInfosKey ) {
394+ queryInfos = out .GetValue ()
395+ }
396+ }
397+ if queryInfos != nil {
398+ err := UnmsarshalMessages (queryInfos , & crossQueryInfos )
399+ if err != nil {
400+ return nil , err
401+ }
402+ }
403+ return crossQueryInfos , nil
404+ }
402405
403406// IsCrossQueryEffective check if crossQueryInfos effective
404407// TODO: zq
405- // func IsCrossQueryEffective(cqi []*pb.CrossQueryInfo, tx *pb .Transaction) bool {
406- // return true
407- // }
408+ func IsCrossQueryEffective (cqi []* pb.CrossQueryInfo , tx * lpb .Transaction ) bool {
409+ return true
410+ }
408411
409412// PutCrossQueries put queryInfos to db
410- // func (xc *XMCache) putCrossQueries(queryInfos []*pb.CrossQueryInfo) error {
411- // var qi []byte
412- // var err error
413- // if len(queryInfos) != 0 {
414- // qi, err = MarshalMessages(queryInfos)
415- // if err != nil {
416- // return err
417- // }
418- // }
419- // if qi != nil {
420- // err = xc.Put(TransientBucket, crossQueryInfosKey, qi)
421- // if err != nil {
422- // return err
423- // }
424- // }
425- // return nil
426- // }
413+ func (xc * XMCache ) putCrossQueries (queryInfos []* pb.CrossQueryInfo ) error {
414+ var qi []byte
415+ var err error
416+ if len (queryInfos ) != 0 {
417+ qi , err = MarshalMessages (queryInfos )
418+ if err != nil {
419+ return err
420+ }
421+ }
422+ if qi != nil {
423+ err = xc .Put (TransientBucket , crossQueryInfosKey , qi )
424+ if err != nil {
425+ return err
426+ }
427+ }
428+ return nil
429+ }
427430
428- // func (xc *XMCache) writeCrossQueriesRWSet() error {
429- // return xc.putCrossQueries(xc.crossQueryCache.GetCrossQueryRWSets())
430- // }
431+ func (xc * XMCache ) writeCrossQueriesRWSet () error {
432+ return xc .putCrossQueries (xc .crossQueryCache .GetCrossQueryRWSets ())
433+ }
431434
432435// ParseContractEvents parse contract events from tx
433436func ParseContractEvents (tx * lpb.Transaction ) ([]* protos.ContractEvent , error ) {
@@ -474,10 +477,10 @@ func (xc *XMCache) Flush() error {
474477 return err
475478 }
476479
477- // err = xc.writeCrossQueriesRWSet()
478- // if err != nil {
479- // return err
480- // }
480+ err = xc .writeCrossQueriesRWSet ()
481+ if err != nil {
482+ return err
483+ }
481484
482485 err = xc .writeEventRWSet ()
483486 if err != nil {
0 commit comments