Golang implemented sidechain for Bytom
Revision | 7702f5fd3bcf7b5ac4751792b0c5d31c42d135b9 (tree) |
---|---|
Time | 2019-11-05 17:50:39 |
Author | Paladz <yzhu101@uott...> |
Commiter | GitHub |
Merge branch 'mov' into check_mov_store
@@ -35,28 +35,18 @@ func (e *Engine) HasMatchedTx(tradePairs ...*common.TradePair) bool { | ||
35 | 35 | return false |
36 | 36 | } |
37 | 37 | |
38 | - for i, order := range orders { | |
39 | - if canNotBeMatched(order, orders[getOppositeIndex(len(orders), i)]) { | |
40 | - return false | |
41 | - } | |
42 | - } | |
43 | - return true | |
38 | + return isMatched(orders) | |
44 | 39 | } |
45 | 40 | |
46 | 41 | // NextMatchedTx return the next matchable transaction by the specified trade pairs |
47 | 42 | // the size of trade pairs at least 2, and the sequence of trade pairs can form a loop |
48 | 43 | // for example, [assetA -> assetB, assetB -> assetC, assetC -> assetA] |
49 | 44 | func (e *Engine) NextMatchedTx(tradePairs ...*common.TradePair) (*types.Tx, error) { |
50 | - if err := validateTradePairs(tradePairs); err != nil { | |
51 | - return nil, err | |
52 | - } | |
53 | - | |
54 | - orders := e.peekOrders(tradePairs) | |
55 | - if len(orders) == 0 { | |
56 | - return nil, errors.New("no order for the specified trade pair in the order table") | |
45 | + if !e.HasMatchedTx(tradePairs...) { | |
46 | + return nil, errors.New("the specified trade pairs can not be matched") | |
57 | 47 | } |
58 | 48 | |
59 | - tx, err := e.buildMatchTx(orders) | |
49 | + tx, err := e.buildMatchTx(e.peekOrders(tradePairs)) | |
60 | 50 | if err != nil { |
61 | 51 | return nil, err |
62 | 52 | } |
@@ -98,9 +88,14 @@ func validateTradePairs(tradePairs []*common.TradePair) error { | ||
98 | 88 | return nil |
99 | 89 | } |
100 | 90 | |
101 | -func canNotBeMatched(order, oppositeOrder *common.Order) bool { | |
102 | - rate := 1 / order.Rate | |
103 | - return rate < oppositeOrder.Rate | |
91 | +func isMatched(orders []*common.Order) bool { | |
92 | + for i, order := range orders { | |
93 | + opposisteOrder := orders[getOppositeIndex(len(orders), i)] | |
94 | + if 1 / order.Rate < opposisteOrder.Rate { | |
95 | + return false | |
96 | + } | |
97 | + } | |
98 | + return true | |
104 | 99 | } |
105 | 100 | |
106 | 101 | func (e *Engine) buildMatchTx(orders []*common.Order) (*types.Tx, error) { |