7 log "github.com/sirupsen/logrus"
9 "github.com/bytom/blockchain/query"
10 "github.com/bytom/blockchain/txfeed"
13 // POST /create-txfeed
14 func (bcr *BlockchainReactor) createTxFeed(ctx context.Context, in struct {
18 if err := bcr.txFeedTracker.Create(ctx, in.Alias, in.Filter); err != nil {
19 log.WithField("error", err).Error("Add TxFeed Failed")
20 return jsendWrapper(nil, ERROR, err.Error())
22 return jsendWrapper("success", SUCCESS, "")
25 func (bcr *BlockchainReactor) getTxFeedByAlias(ctx context.Context, filter string) (*txfeed.TxFeed, error) {
26 txFeed := &txfeed.TxFeed{}
28 jf, err := json.Marshal(filter)
33 value := bcr.txFeedTracker.DB.Get(jf)
38 if err := json.Unmarshal(value, txFeed); err != nil {
44 // POST /get-transaction-feed
45 func (bcr *BlockchainReactor) getTxFeed(ctx context.Context, in struct {
46 Alias string `json:"alias,omitempty"`
48 txfeed, err := bcr.getTxFeedByAlias(ctx, in.Alias)
50 return jsendWrapper(nil, ERROR, err.Error())
52 return jsendWrapper(txfeed, SUCCESS, "")
55 // POST /delete-transaction-feed
56 func (bcr *BlockchainReactor) deleteTxFeed(ctx context.Context, in struct {
57 Alias string `json:"alias,omitempty"`
59 if err := bcr.txFeedTracker.Delete(ctx, in.Alias); err != nil {
60 return jsendWrapper(nil, ERROR, err.Error())
62 return jsendWrapper("success", SUCCESS, "")
65 // POST /update-transaction-feed
66 func (bcr *BlockchainReactor) updateTxFeed(ctx context.Context, in struct {
70 if err := bcr.txFeedTracker.Delete(ctx, in.Alias); err != nil {
71 return jsendWrapper(nil, ERROR, err.Error())
73 if err := bcr.txFeedTracker.Create(ctx, in.Alias, in.Filter); err != nil {
74 log.WithField("error", err).Error("Update TxFeed Failed")
75 return jsendWrapper(nil, ERROR, err.Error())
77 return jsendWrapper("success", SUCCESS, "")
80 // txAfterIsBefore returns true if a is before b. It returns an error if either
81 // a or b are not valid query.TxAfters.
82 func txAfterIsBefore(a, b string) (bool, error) {
83 aAfter, err := query.DecodeTxAfter(a)
88 bAfter, err := query.DecodeTxAfter(b)
93 return aAfter.FromBlockHeight < bAfter.FromBlockHeight ||
94 (aAfter.FromBlockHeight == bAfter.FromBlockHeight &&
95 aAfter.FromPosition < bAfter.FromPosition), nil
98 func (bcr *BlockchainReactor) getTxFeeds() ([]*txfeed.TxFeed, error) {
99 txFeeds := make([]*txfeed.TxFeed, 0)
100 iter := bcr.txFeedTracker.DB.Iterator()
104 txFeed := &txfeed.TxFeed{}
105 if err := json.Unmarshal(iter.Value(), txFeed); err != nil {
108 txFeeds = append(txFeeds, txFeed)
113 // listTxFeeds is an http handler for listing txfeeds. It does not take a filter.
114 // POST /list-transaction-feeds
115 func (bcr *BlockchainReactor) listTxFeeds(ctx context.Context, in requestQuery) interface{} {
116 txfeeds, err := bcr.getTxFeeds()
118 return jsendWrapper(nil, ERROR, err.Error())
120 return jsendWrapper(txfeeds, SUCCESS, "")