"github.com/stretchr/testify/require"
"github.com/bytom/vapor/application/mov/common"
- "github.com/bytom/vapor/consensus"
"github.com/bytom/vapor/database/leveldb"
dbm "github.com/bytom/vapor/database/leveldb"
- chainjson "github.com/bytom/vapor/encoding/json"
"github.com/bytom/vapor/protocol/bc"
"github.com/bytom/vapor/protocol/bc/types"
"github.com/bytom/vapor/testutil"
assetID6 = &bc.AssetID{V0: 6}
assetID7 = &bc.AssetID{V0: 7}
assetID8 = &bc.AssetID{V0: 8}
-)
-func TestCalcUTXOHash(t *testing.T) {
- wantHash := "7cbaf92f950f2a6bededd6cc5ec08c924505f5365b0a8af963e1d52912c99667"
- controlProgramStr := "0014ab5acbea076f269bfdc8ededbed7d0a13e6e0b19"
-
- var controlProgram chainjson.HexBytes
- controlProgram.UnmarshalText([]byte(controlProgramStr))
-
- sourceID := testutil.MustDecodeHash("ca2faf5fcbf8ee2b43560a32594f608528b12a1fe79cee85252564f886f91060")
- order := &common.Order{
- FromAssetID: consensus.BTMAssetID,
- Utxo: &common.MovUtxo{
- SourceID: &sourceID,
- SourcePos: 0,
- Amount: 31249300000,
- ControlProgram: controlProgram[:],
+ mockOrders = []*common.Order{
+ &common.Order{
+ FromAssetID: assetID1,
+ ToAssetID: assetID2,
+ RatioNumerator: 100090,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 21},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID1,
+ ToAssetID: assetID2,
+ RatioNumerator: 90,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 22},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID1,
+ ToAssetID: assetID2,
+ RatioNumerator: 97,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 23},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID1,
+ ToAssetID: assetID2,
+ RatioNumerator: 98,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 13},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID1,
+ ToAssetID: assetID2,
+ RatioNumerator: 98,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 24},
+ Amount: 10,
+ SourcePos: 1,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID1,
+ ToAssetID: assetID2,
+ RatioNumerator: 99,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 24},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID1,
+ ToAssetID: assetID2,
+ RatioNumerator: 96,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 25},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID1,
+ ToAssetID: assetID2,
+ RatioNumerator: 95,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 26},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID1,
+ ToAssetID: assetID2,
+ RatioNumerator: 90,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 1},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID1,
+ ToAssetID: assetID2,
+ RatioNumerator: 90,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 2},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID3,
+ ToAssetID: assetID2,
+ RatioNumerator: 96,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 33},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID4,
+ ToAssetID: assetID2,
+ RatioNumerator: 95,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 34},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID4,
+ ToAssetID: assetID2,
+ RatioNumerator: 96,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 36},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID5,
+ ToAssetID: assetID2,
+ RatioNumerator: 96,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 37},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: assetID6,
+ ToAssetID: assetID2,
+ RatioNumerator: 98,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 38},
+ Amount: 1,
+ SourcePos: 0,
+ ControlProgram: []byte("aa"),
+ },
},
}
+)
+
+func TestGetAssetIDFromTradePairKey(t *testing.T) {
+ b := calcTradePairKey(assetID1, assetID2)
+ gotA := getAssetIDFromTradePairKey(b, fromAssetIDPos)
+ gotB := getAssetIDFromTradePairKey(b, toAssetIDPos)
- hash := calcUTXOHash(order)
- if hash.String() != wantHash {
- t.Fatal("The function is incorrect")
+ if *gotA != *assetID1 {
+ t.Fatalf("got wrong from asset id got %s, want %s", gotA.String(), assetID1.String())
}
+ if *gotB != *assetID2 {
+ t.Fatalf("got wrong to asset id got %s, want %s", gotB.String(), assetID2.String())
+ }
}
func TestSortOrderKey(t *testing.T) {
}
cases := []struct {
- orders []common.Order
+ orders []*common.Order
want []expectedData
}{
{
- orders: []common.Order{
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 1.00090,
+ orders: []*common.Order{
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 100090,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 21},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00090,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 90,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 22},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00097,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 97,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 23},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00098,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 98,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 13},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00098,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 98,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 24},
Amount: 10,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00099,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 98,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 25},
+ Amount: 10,
+ SourcePos: 1,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 98,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 26},
+ Amount: 10,
+ SourcePos: 1,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 98,
+ RatioDenominator: 100000,
+ Utxo: &common.MovUtxo{
+ SourceID: &bc.Hash{V0: 27},
+ Amount: 10,
+ SourcePos: 1,
+ ControlProgram: []byte("aa"),
+ },
+ },
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 99,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 24},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00096,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 96,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 25},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00095,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 95,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 26},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00091,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 91,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 26},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00092,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 92,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 27},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00093,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 93,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 28},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00094,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 94,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 29},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00077,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 77,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 30},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 0.00088,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 88,
+ RatioDenominator: 100000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 31},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 999999.9521,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 9999999521,
+ RatioDenominator: 10000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 32},
Amount: 1,
ControlProgram: []byte("aa"),
},
},
- common.Order{
- FromAssetID: &bc.AssetID{V0: 1},
- ToAssetID: &bc.AssetID{V0: 0},
- Rate: 888888.7954,
+ &common.Order{
+ FromAssetID: &bc.AssetID{V0: 1},
+ ToAssetID: &bc.AssetID{V0: 0},
+ RatioNumerator: 8888887954,
+ RatioDenominator: 10000,
Utxo: &common.MovUtxo{
SourceID: &bc.Hash{V0: 33},
Amount: 1,
},
expectedData{
rate: 0.00098,
+ utxoHash: "14b51a6103f75d9cacdf0f9551467588c687ed3b029e25c646d276720569e227",
+ },
+ expectedData{
+ rate: 0.00098,
utxoHash: "1fa9fae83d0a5401a4e92f80636966486e763eecca588aa11dff02b415320602",
},
expectedData{
rate: 0.00098,
+ utxoHash: "6687d18ddbe4e7381a844e393ca3032a412285c9da6988eff182106e28ba09ca",
+ },
+ expectedData{
+ rate: 0.00098,
+ utxoHash: "841b1de7c871dfe6e2d1886809d9ae12ec45e570233b03879305232b096fda43",
+ },
+ expectedData{
+ rate: 0.00098,
utxoHash: "a4bc534c267d35a9eafc25cd66e0cb270a2537a51186605b7f7591bc567ab4c6",
},
expectedData{
for i, c := range cases {
for _, order := range c.orders {
- key := calcOrderKey(order.FromAssetID, order.ToAssetID, calcUTXOHash(&order), order.Rate)
+ key := calcOrderKey(order.FromAssetID, order.ToAssetID, order.UTXOHash(), order.Rate())
data, err := json.Marshal(order.Utxo)
if err != nil {
t.Fatal(err)
}
got := []expectedData{}
-
itr := db.IteratorPrefixWithStart(nil, nil, false)
for itr.Next() {
key := itr.Key()
copy(b[:], key[pos+8:])
utxoHash := bc.NewHash(b)
- rate := getRateFromOrderKey(key, ordersPrefix)
got = append(got, expectedData{
- rate: rate,
+ rate: getRateFromOrderKey(key),
utxoHash: utxoHash.String(),
})
}
if !testutil.DeepEqual(c.want, got) {
t.Errorf("case %v: got recovery status, got: %v, want: %v.", i, got, c.want)
}
-
}
}
{
desc: "add order",
addOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ },
+ blockHeader: &types.BlockHeader{Height: 1, PreviousBlockHash: bc.Hash{V0: 524821139490765641, V1: 2484214155808702787, V2: 9108473449351508820, V3: 7972721253564512122}},
+ wantOrders: []*common.Order{
+ mockOrders[1],
+ mockOrders[7],
+ mockOrders[6],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[0],
+ },
+ wantTradePairs: []*common.TradePair{
+ &common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2, Count: 8},
+ },
+ wantDBState: &common.MovDatabaseState{Height: 1, Hash: &bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
+ },
+ {
+ desc: "del some order",
+ beforeOrders: []*common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ },
+ beforeTradePairs: []*common.TradePair{
+ &common.TradePair{
FromAssetID: assetID1,
ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
+ Count: 8,
},
- &common.Order{
+ },
+ beforeDBStatus: &common.MovDatabaseState{Height: 1, Hash: &bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
+ delOrders: []*common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ },
+ blockHeader: &types.BlockHeader{Height: 2, PreviousBlockHash: bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
+ wantOrders: []*common.Order{
+ mockOrders[7],
+ mockOrders[6],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ },
+ wantTradePairs: []*common.TradePair{
+ &common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2, Count: 5},
+ },
+ wantDBState: &common.MovDatabaseState{Height: 2, Hash: &bc.Hash{V0: 3724755213446347384, V1: 158878632373345042, V2: 18283800951484248781, V3: 7520797730449067221}},
+ },
+ {
+ desc: "del all order",
+ beforeOrders: []*common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ },
+ beforeTradePairs: []*common.TradePair{
+ &common.TradePair{
FromAssetID: assetID1,
ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
+ Count: 8,
},
- &common.Order{
+ },
+ beforeDBStatus: &common.MovDatabaseState{Height: 1, Hash: &bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
+ delOrders: []*common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ },
+ blockHeader: &types.BlockHeader{Height: 2, PreviousBlockHash: bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
+ wantOrders: []*common.Order{},
+ wantTradePairs: []*common.TradePair{},
+ wantDBState: &common.MovDatabaseState{Height: 2, Hash: &bc.Hash{V0: 3724755213446347384, V1: 158878632373345042, V2: 18283800951484248781, V3: 7520797730449067221}},
+ },
+ {
+ desc: "Add and delete the same trade pair", // Add and delete different transaction pairs
+ beforeOrders: []*common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ },
+ beforeTradePairs: []*common.TradePair{
+ &common.TradePair{
FromAssetID: assetID1,
ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
+ Count: 8,
},
},
- blockHeader: &types.BlockHeader{Height: 1, PreviousBlockHash: bc.Hash{V0: 524821139490765641, V1: 2484214155808702787, V2: 9108473449351508820, V3: 7972721253564512122}},
+ beforeDBStatus: &common.MovDatabaseState{Height: 1, Hash: &bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
+ addOrders: []*common.Order{
+ mockOrders[8],
+ mockOrders[9],
+ },
+ delOrders: []*common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ },
+ blockHeader: &types.BlockHeader{Height: 2, PreviousBlockHash: bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
wantOrders: []*common.Order{
- &common.Order{
+ mockOrders[9],
+ mockOrders[8],
+ },
+ wantTradePairs: []*common.TradePair{
+ &common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2, Count: 2},
+ },
+ wantDBState: &common.MovDatabaseState{Height: 2, Hash: &bc.Hash{V0: 3724755213446347384, V1: 158878632373345042, V2: 18283800951484248781, V3: 7520797730449067221}},
+ },
+ {
+ desc: "Add and delete different transaction pairs",
+ beforeOrders: []*common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ mockOrders[10],
+ mockOrders[11],
+ },
+ beforeTradePairs: []*common.TradePair{
+ &common.TradePair{
FromAssetID: assetID1,
ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
+ Count: 8,
},
- &common.Order{
- FromAssetID: assetID1,
+ &common.TradePair{
+ FromAssetID: assetID3,
ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
+ Count: 1,
},
- &common.Order{
- FromAssetID: assetID1,
+ &common.TradePair{
+ FromAssetID: assetID4,
ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- wantTradePairs: []*common.TradePair{
- &common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2, Count: 8},
- },
- wantDBState: &common.MovDatabaseState{Height: 1, Hash: &bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
- },
- {
- desc: "del some order",
- beforeOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- beforeTradePairs: []*common.TradePair{
- &common.TradePair{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Count: 8,
+ Count: 1,
},
},
beforeDBStatus: &common.MovDatabaseState{Height: 1, Hash: &bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
+ addOrders: []*common.Order{
+ mockOrders[12],
+ mockOrders[13],
+ mockOrders[14],
+ },
delOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ mockOrders[10],
},
blockHeader: &types.BlockHeader{Height: 2, PreviousBlockHash: bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
wantOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ mockOrders[11],
+ mockOrders[12],
+ mockOrders[13],
+ mockOrders[14],
},
wantTradePairs: []*common.TradePair{
- &common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2, Count: 5},
+ &common.TradePair{FromAssetID: assetID4, ToAssetID: assetID2, Count: 2},
+ &common.TradePair{FromAssetID: assetID5, ToAssetID: assetID2, Count: 1},
+ &common.TradePair{FromAssetID: assetID6, ToAssetID: assetID2, Count: 1},
},
wantDBState: &common.MovDatabaseState{Height: 2, Hash: &bc.Hash{V0: 3724755213446347384, V1: 158878632373345042, V2: 18283800951484248781, V3: 7520797730449067221}},
},
- {
- desc: "del all order",
- beforeOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- beforeTradePairs: []*common.TradePair{
- &common.TradePair{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Count: 8,
- },
- },
- beforeDBStatus: &common.MovDatabaseState{Height: 1, Hash: &bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
- delOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- blockHeader: &types.BlockHeader{Height: 2, PreviousBlockHash: bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
- wantOrders: []*common.Order{},
- wantTradePairs: []*common.TradePair{},
- wantDBState: &common.MovDatabaseState{Height: 2, Hash: &bc.Hash{V0: 3724755213446347384, V1: 158878632373345042, V2: 18283800951484248781, V3: 7520797730449067221}},
- },
- {
- desc: "Add and delete the same trade pair", //Add and delete different transaction pairs
- beforeOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- beforeTradePairs: []*common.TradePair{
- &common.TradePair{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Count: 8,
- },
- },
- beforeDBStatus: &common.MovDatabaseState{Height: 1, Hash: &bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
- addOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 1},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 2},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- delOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- blockHeader: &types.BlockHeader{Height: 2, PreviousBlockHash: bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
- wantOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 2},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 1},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- wantTradePairs: []*common.TradePair{
- &common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2, Count: 2},
- },
- wantDBState: &common.MovDatabaseState{Height: 2, Hash: &bc.Hash{V0: 3724755213446347384, V1: 158878632373345042, V2: 18283800951484248781, V3: 7520797730449067221}},
- },
- {
- desc: "Add and delete different transaction pairs",
- beforeOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID3,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 33},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID4,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 34},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- beforeTradePairs: []*common.TradePair{
- &common.TradePair{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Count: 8,
- },
- &common.TradePair{
- FromAssetID: assetID3,
- ToAssetID: assetID2,
- Count: 1,
- },
- &common.TradePair{
- FromAssetID: assetID4,
- ToAssetID: assetID2,
- Count: 1,
- },
- },
- beforeDBStatus: &common.MovDatabaseState{Height: 1, Hash: &bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
- addOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID4,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 36},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID5,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 37},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID6,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 38},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- delOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID3,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 33},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- blockHeader: &types.BlockHeader{Height: 2, PreviousBlockHash: bc.Hash{V0: 14213576368347360351, V1: 16287398171800437029, V2: 9513543230620030445, V3: 8534035697182508177}},
- wantOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID4,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 34},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID4,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 36},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID5,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 37},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID6,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 38},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- wantTradePairs: []*common.TradePair{
- &common.TradePair{FromAssetID: assetID4, ToAssetID: assetID2, Count: 2},
- &common.TradePair{FromAssetID: assetID5, ToAssetID: assetID2, Count: 1},
- &common.TradePair{FromAssetID: assetID6, ToAssetID: assetID2, Count: 1},
- },
- wantDBState: &common.MovDatabaseState{Height: 2, Hash: &bc.Hash{V0: 3724755213446347384, V1: 158878632373345042, V2: 18283800951484248781, V3: 7520797730449067221}},
- },
- }
-
- initBlockHeader := &types.BlockHeader{
- Height: 0,
- Version: 1,
- }
-
- height := initBlockHeader.Height
- hash := initBlockHeader.Hash()
-
- defer os.RemoveAll("temp")
- for i, c := range cases {
- testDB := dbm.NewDB("testdb", "leveldb", "temp")
- movStore, err := NewMovStore(testDB, height, &hash)
- if err != nil {
- t.Fatalf("case %d: NewMovStore error %v.", i, err)
- }
-
- batch := movStore.db.NewBatch()
- tradePairsCnt := make(map[common.TradePair]int)
- movStore.addOrders(batch, c.beforeOrders, tradePairsCnt)
- if len(c.beforeOrders) > 0 {
- tradePairsCnt = make(map[common.TradePair]int)
- for _, tradePair := range c.beforeTradePairs {
- tradePairsCnt[*tradePair] = tradePair.Count
- }
- movStore.updateTradePairs(batch, tradePairsCnt)
- movStore.saveMovDatabaseState(batch, c.beforeDBStatus)
- }
- batch.Write()
-
- if err := movStore.ProcessOrders(c.addOrders, c.delOrders, c.blockHeader); err != nil {
- t.Fatalf("case %d: ProcessOrders error %v.", i, err)
- }
-
- var gotOrders []*common.Order
-
- tmp, err := movStore.ListOrders(&common.Order{FromAssetID: assetID1, ToAssetID: assetID2, Rate: 0})
- if err != nil {
- t.Fatalf("case %d: ListOrders(assetID1 and assetID2) error %v.", i, err)
- }
-
- gotOrders = append(gotOrders, tmp...)
-
- tmp, err = movStore.ListOrders(&common.Order{FromAssetID: assetID3, ToAssetID: assetID2, Rate: 0})
- if err != nil {
- t.Fatalf("case %d: ListOrders(assetID3 and assetID2) error %v.", i, err)
- }
-
- gotOrders = append(gotOrders, tmp...)
-
- tmp, err = movStore.ListOrders(&common.Order{FromAssetID: assetID4, ToAssetID: assetID2, Rate: 0})
- if err != nil {
- t.Fatalf("case %d: ListOrders(assetID4 and assetID2) error %v.", i, err)
- }
-
- gotOrders = append(gotOrders, tmp...)
-
- tmp, err = movStore.ListOrders(&common.Order{FromAssetID: assetID5, ToAssetID: assetID2, Rate: 0})
- if err != nil {
- t.Fatalf("case %d: ListOrders(assetID5 and assetID2) error %v.", i, err)
- }
-
- gotOrders = append(gotOrders, tmp...)
-
- tmp, err = movStore.ListOrders(&common.Order{FromAssetID: assetID6, ToAssetID: assetID2, Rate: 0})
- if err != nil {
- t.Fatalf("case %d: ListOrders(assetID6 and assetID2) error %v.", i, err)
- }
-
- gotOrders = append(gotOrders, tmp...)
-
- if !testutil.DeepEqual(gotOrders, c.wantOrders) {
- t.Fatalf("case %d: got orders , gotOrders: %v, wantOrders: %v.", i, gotOrders, c.wantOrders)
- }
-
- gotTradePairs, err := movStore.ListTradePairsWithStart(nil, nil)
- if err != nil {
- t.Fatalf("case %d: ListTradePairsWithStart error %v.", i, err)
- }
-
- if !testutil.DeepEqual(gotTradePairs, c.wantTradePairs) {
- t.Fatalf("case %d: got tradePairs, gotTradePairs: %v, wantTradePairs: %v.", i, gotTradePairs, c.wantTradePairs)
- }
-
- gotDBState, err := movStore.GetMovDatabaseState()
- if err != nil {
- t.Fatalf("case %d: GetMovDatabaseState error %v.", i, err)
- }
-
- if !testutil.DeepEqual(gotDBState, c.wantDBState) {
- t.Fatalf("case %d: got tradePairs, gotDBState: %v, wantDBStatus: %v.", i, gotDBState, c.wantDBState)
- }
-
- testDB.Close()
- os.RemoveAll("temp")
- }
-}
-
-func TestListOrders(t *testing.T) {
- cases := []struct {
- desc string
- storeOrders []*common.Order
- query *common.Order
- wantOrders []*common.Order
- }{
- {
- desc: "empty",
- query: &common.Order{FromAssetID: assetID1, ToAssetID: assetID2},
- wantOrders: []*common.Order{},
- },
- {
- desc: "query from first",
- storeOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- query: &common.Order{FromAssetID: assetID1, ToAssetID: assetID2},
- wantOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- },
- {
- desc: "query from middle",
- storeOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- query: &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- wantOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- },
}
initBlockHeader := &types.BlockHeader{
defer os.RemoveAll("temp")
for i, c := range cases {
testDB := dbm.NewDB("testdb", "leveldb", "temp")
- movStore, err := NewMovStore(testDB, height, &hash)
- if err != nil {
- t.Fatalf("case %d: NewMovStore error %v.", i, err)
+ movStore := NewLevelDBMovStore(testDB)
+ if err := movStore.InitDBState(height, &hash); err != nil {
+ t.Fatalf("case %d: InitDBState error %v.", i, err)
}
batch := movStore.db.NewBatch()
- tradePairsCnt := make(map[common.TradePair]int)
- movStore.addOrders(batch, c.storeOrders, tradePairsCnt)
- movStore.updateTradePairs(batch, tradePairsCnt)
+ tradePairsCnt := make(map[string]*common.TradePair)
+ movStore.addOrders(batch, c.beforeOrders, tradePairsCnt)
+ if len(c.beforeOrders) > 0 {
+ tradePairsCnt = make(map[string]*common.TradePair)
+ for _, tradePair := range c.beforeTradePairs {
+ tradePairsCnt[tradePair.Key()] = tradePair
+ }
+ movStore.updateTradePairs(batch, tradePairsCnt)
+ movStore.saveMovDatabaseState(batch, c.beforeDBStatus)
+ }
batch.Write()
- gotOrders, err := movStore.ListOrders(c.query)
+ if err := movStore.ProcessOrders(c.addOrders, c.delOrders, c.blockHeader); err != nil {
+ t.Fatalf("case %d: ProcessOrders error %v.", i, err)
+ }
+
+ var gotOrders []*common.Order
+
+ tmp, err := movStore.ListOrders(&common.Order{FromAssetID: assetID1, ToAssetID: assetID2, RatioNumerator: 0, RatioDenominator: 1})
if err != nil {
- t.Fatalf("case %d: ListOrders error %v.", i, err)
+ t.Fatalf("case %d: ListOrders(assetID1 and assetID2) error %v.", i, err)
}
- if !testutil.DeepEqual(gotOrders, c.wantOrders) {
- t.Fatalf("case %d: got orders , gotOrders: %v, wantOrders: %v.", i, gotOrders, c.wantOrders)
+ gotOrders = append(gotOrders, tmp...)
+
+ tmp, err = movStore.ListOrders(&common.Order{FromAssetID: assetID3, ToAssetID: assetID2, RatioNumerator: 0, RatioDenominator: 1})
+ if err != nil {
+ t.Fatalf("case %d: ListOrders(assetID3 and assetID2) error %v.", i, err)
}
- testDB.Close()
- os.RemoveAll("temp")
- }
-}
+ gotOrders = append(gotOrders, tmp...)
-func TestAddOrders(t *testing.T) {
- cases := []struct {
- desc string
- beforeOrders []*common.Order
- addOrders []*common.Order
- wantOrders []*common.Order
- }{
- {
- desc: "empty",
- addOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- },
- wantOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ tmp, err = movStore.ListOrders(&common.Order{FromAssetID: assetID4, ToAssetID: assetID2, RatioNumerator: 0, RatioDenominator: 1})
+ if err != nil {
+ t.Fatalf("case %d: ListOrders(assetID4 and assetID2) error %v.", i, err)
+ }
+
+ gotOrders = append(gotOrders, tmp...)
+
+ tmp, err = movStore.ListOrders(&common.Order{FromAssetID: assetID5, ToAssetID: assetID2, RatioNumerator: 0, RatioDenominator: 1})
+ if err != nil {
+ t.Fatalf("case %d: ListOrders(assetID5 and assetID2) error %v.", i, err)
+ }
+
+ gotOrders = append(gotOrders, tmp...)
+
+ tmp, err = movStore.ListOrders(&common.Order{FromAssetID: assetID6, ToAssetID: assetID2, RatioNumerator: 0, RatioDenominator: 1})
+ if err != nil {
+ t.Fatalf("case %d: ListOrders(assetID6 and assetID2) error %v.", i, err)
+ }
+
+ gotOrders = append(gotOrders, tmp...)
+
+ if !testutil.DeepEqual(gotOrders, c.wantOrders) {
+ t.Fatalf("case %d: got orders , gotOrders: %v, wantOrders: %v.", i, gotOrders, c.wantOrders)
+ }
+
+ gotTradePairs, err := movStore.ListTradePairsWithStart(nil, nil)
+ if err != nil {
+ t.Fatalf("case %d: ListTradePairsWithStart error %v.", i, err)
+ }
+
+ if !testutil.DeepEqual(gotTradePairs, c.wantTradePairs) {
+ t.Fatalf("case %d: got tradePairs, gotTradePairs: %v, wantTradePairs: %v.", i, gotTradePairs, c.wantTradePairs)
+ }
+
+ gotDBState, err := movStore.GetMovDatabaseState()
+ if err != nil {
+ t.Fatalf("case %d: GetMovDatabaseState error %v.", i, err)
+ }
+
+ if !testutil.DeepEqual(gotDBState, c.wantDBState) {
+ t.Fatalf("case %d: got tradePairs, gotDBState: %v, wantDBStatus: %v.", i, gotDBState, c.wantDBState)
+ }
+
+ testDB.Close()
+ os.RemoveAll("temp")
+ }
+}
+
+func TestListOrders(t *testing.T) {
+ cases := []struct {
+ desc string
+ storeOrders []*common.Order
+ query *common.Order
+ wantOrders []*common.Order
+ }{
+ {
+ desc: "empty",
+ query: &common.Order{FromAssetID: assetID1, ToAssetID: assetID2},
+ wantOrders: []*common.Order{},
+ },
+ {
+ desc: "query from first",
+ storeOrders: []*common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ mockOrders[10],
+ },
+ query: &common.Order{FromAssetID: assetID1, ToAssetID: assetID2},
+ wantOrders: []*common.Order{
+ mockOrders[1],
+ mockOrders[7],
+ mockOrders[6],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[0],
},
},
{
- desc: "Stored data already exists",
- beforeOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ desc: "query from middle",
+ storeOrders: []*common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ },
+ query: mockOrders[3],
+ wantOrders: []*common.Order{
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[0],
},
+ },
+ }
+
+ initBlockHeader := &types.BlockHeader{
+ Height: 0,
+ Version: 1,
+ }
+
+ height := initBlockHeader.Height
+ hash := initBlockHeader.Hash()
+
+ defer os.RemoveAll("temp")
+ for i, c := range cases {
+ testDB := dbm.NewDB("testdb", "leveldb", "temp")
+ movStore := NewLevelDBMovStore(testDB)
+ if err := movStore.InitDBState(height, &hash); err != nil {
+ t.Fatalf("case %d: InitDBState error %v.", i, err)
+ }
+
+ batch := movStore.db.NewBatch()
+ tradePairsCnt := make(map[string]*common.TradePair)
+ movStore.addOrders(batch, c.storeOrders, tradePairsCnt)
+ movStore.updateTradePairs(batch, tradePairsCnt)
+ batch.Write()
+
+ gotOrders, err := movStore.ListOrders(c.query)
+ if err != nil {
+ t.Fatalf("case %d: ListOrders error %v.", i, err)
+ }
+
+ if !testutil.DeepEqual(gotOrders, c.wantOrders) {
+ t.Fatalf("case %d: got orders , gotOrders: %v, wantOrders: %v.", i, gotOrders, c.wantOrders)
+ }
+
+ testDB.Close()
+ os.RemoveAll("temp")
+ }
+}
+
+func TestAddOrders(t *testing.T) {
+ cases := []struct {
+ desc string
+ beforeOrders []*common.Order
+ addOrders []*common.Order
+ wantOrders []*common.Order
+ }{
+ {
+ desc: "empty",
addOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
},
- wantOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ wantOrders: []*common.Order{
+ mockOrders[1],
+ mockOrders[7],
+ mockOrders[6],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[0],
+ },
+ },
+ {
+ desc: "Stored data already exists",
+ beforeOrders: []*common.Order{
+ mockOrders[0],
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ },
+ addOrders: []*common.Order{
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
+ },
+ wantOrders: []*common.Order{
+ mockOrders[1],
+ mockOrders[7],
+ mockOrders[6],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[0],
},
},
}
defer os.RemoveAll("temp")
for i, c := range cases {
testDB := dbm.NewDB("testdb", "leveldb", "temp")
- movStore, err := NewMovStore(testDB, height, &hash)
- if err != nil {
- t.Fatalf("case %d: NewMovStore error %v.", i, err)
+ movStore := NewLevelDBMovStore(testDB)
+ if err := movStore.InitDBState(height, &hash); err != nil {
+ t.Fatalf("case %d: InitDBState error %v.", i, err)
}
batch := movStore.db.NewBatch()
- tradePairsCnt := make(map[common.TradePair]int)
+ tradePairsCnt := make(map[string]*common.TradePair)
movStore.addOrders(batch, c.beforeOrders, tradePairsCnt)
movStore.updateTradePairs(batch, tradePairsCnt)
batch.Write()
- tradePairsCnt = make(map[common.TradePair]int)
+ tradePairsCnt = make(map[string]*common.TradePair)
movStore.addOrders(batch, c.addOrders, tradePairsCnt)
batch.Write()
{
desc: "empty",
delOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ mockOrders[0],
+ mockOrders[1],
},
wantOrders: []*common.Order{},
err: errors.New("don't find trade pair"),
{
desc: "Delete existing data",
beforeOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ mockOrders[1],
+ mockOrders[7],
+ mockOrders[6],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[0],
},
delOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 10,
- SourcePos: 1,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ mockOrders[4],
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
},
wantOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 22},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00097,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 23},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00098,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 13},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 1.00090,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 21},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ mockOrders[1],
+ mockOrders[2],
+ mockOrders[3],
+ mockOrders[0],
},
err: nil,
},
{
desc: "Delete all data",
beforeOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ mockOrders[7],
+ mockOrders[6],
+ mockOrders[5],
},
delOrders: []*common.Order{
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00099,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 24},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00096,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 25},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
- &common.Order{
- FromAssetID: assetID1,
- ToAssetID: assetID2,
- Rate: 0.00095,
- Utxo: &common.MovUtxo{
- SourceID: &bc.Hash{V0: 26},
- Amount: 1,
- SourcePos: 0,
- ControlProgram: []byte("aa"),
- },
- },
+ mockOrders[5],
+ mockOrders[6],
+ mockOrders[7],
},
wantOrders: []*common.Order{},
err: nil,
defer os.RemoveAll("temp")
for i, c := range cases {
testDB := dbm.NewDB("testdb", "leveldb", "temp")
- movStore, err := NewMovStore(testDB, height, &hash)
- if err != nil {
- t.Fatalf("case %d: NewMovStore error %v.", i, err)
+ movStore := NewLevelDBMovStore(testDB)
+ if err := movStore.InitDBState(height, &hash); err != nil {
+ t.Fatalf("case %d: InitDBState error %v.", i, err)
}
batch := movStore.db.NewBatch()
- tradePairsCnt := make(map[common.TradePair]int)
+ tradePairsCnt := make(map[string]*common.TradePair)
movStore.addOrders(batch, c.beforeOrders, tradePairsCnt)
movStore.updateTradePairs(batch, tradePairsCnt)
batch.Write()
- tradePairsCnt = make(map[common.TradePair]int)
+ tradePairsCnt = make(map[string]*common.TradePair)
movStore.deleteOrders(batch, c.delOrders, tradePairsCnt)
movStore.updateTradePairs(batch, tradePairsCnt)
batch.Write()
func TestListTradePairsWithStart(t *testing.T) {
cases := []struct {
desc string
- storeTradePairs map[common.TradePair]int
+ storeTradePairs map[string]*common.TradePair
query *common.TradePair
wantTradePairs []*common.TradePair
}{
},
{
desc: "query from first",
- storeTradePairs: map[common.TradePair]int{
- common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}: 1,
- common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3}: 2,
- common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4}: 3,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}: 4,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}: 5,
- common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}: 6,
+ storeTradePairs: map[string]*common.TradePair{
+ (&common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}).Key(): {FromAssetID: assetID1, ToAssetID: assetID2, Count: 1},
+ (&common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3}).Key(): {FromAssetID: assetID2, ToAssetID: assetID3, Count: 2},
+ (&common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4}).Key(): {FromAssetID: assetID3, ToAssetID: assetID4, Count: 3},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}).Key(): {FromAssetID: assetID4, ToAssetID: assetID5, Count: 4},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}).Key(): {FromAssetID: assetID4, ToAssetID: assetID6, Count: 5},
+ (&common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}).Key(): {FromAssetID: assetID5, ToAssetID: assetID7, Count: 6},
},
query: &common.TradePair{},
wantTradePairs: []*common.TradePair{
},
{
desc: "query from middle",
- storeTradePairs: map[common.TradePair]int{
- common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}: 1,
- common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3}: 2,
- common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4}: 3,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}: 4,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}: 5,
- common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}: 6,
- common.TradePair{FromAssetID: assetID6, ToAssetID: assetID8}: 7,
+ storeTradePairs: map[string]*common.TradePair{
+ (&common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}).Key(): {FromAssetID: assetID1, ToAssetID: assetID2, Count: 1},
+ (&common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3}).Key(): {FromAssetID: assetID2, ToAssetID: assetID3, Count: 2},
+ (&common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4}).Key(): {FromAssetID: assetID3, ToAssetID: assetID4, Count: 3},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}).Key(): {FromAssetID: assetID4, ToAssetID: assetID5, Count: 4},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}).Key(): {FromAssetID: assetID4, ToAssetID: assetID6, Count: 5},
+ (&common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}).Key(): {FromAssetID: assetID5, ToAssetID: assetID7, Count: 6},
+ (&common.TradePair{FromAssetID: assetID6, ToAssetID: assetID8}).Key(): {FromAssetID: assetID6, ToAssetID: assetID8, Count: 7},
},
query: &common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4, Count: 3},
wantTradePairs: []*common.TradePair{
defer os.RemoveAll("temp")
for i, c := range cases {
testDB := dbm.NewDB("testdb", "leveldb", "temp")
- movStore, err := NewMovStore(testDB, height, &hash)
- if err != nil {
- t.Fatalf("case %d: NewMovStore error %v.", i, err)
+ movStore := NewLevelDBMovStore(testDB)
+ if err := movStore.InitDBState(height, &hash); err != nil {
+ t.Fatalf("case %d: InitDBState error %v.", i, err)
}
batch := movStore.db.NewBatch()
func TestUpdateTradePairs(t *testing.T) {
cases := []struct {
desc string
- beforeTradePairs map[common.TradePair]int
- addTradePairs map[common.TradePair]int
- delTradePairs map[common.TradePair]int
+ beforeTradePairs map[string]*common.TradePair
+ addTradePairs map[string]*common.TradePair
+ delTradePairs map[string]*common.TradePair
wantTradePairs []*common.TradePair
}{
{
desc: "empty",
- addTradePairs: map[common.TradePair]int{
- common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}: 1,
- common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3}: 2,
- common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4}: 3,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}: 4,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}: 5,
- common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}: 6,
+ addTradePairs: map[string]*common.TradePair{
+ (&common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}).Key(): {FromAssetID: assetID1, ToAssetID: assetID2, Count: 1},
+ (&common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3}).Key(): {FromAssetID: assetID2, ToAssetID: assetID3, Count: 2},
+ (&common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4}).Key(): {FromAssetID: assetID3, ToAssetID: assetID4, Count: 3},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}).Key(): {FromAssetID: assetID4, ToAssetID: assetID5, Count: 4},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}).Key(): {FromAssetID: assetID4, ToAssetID: assetID6, Count: 5},
+ (&common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}).Key(): {FromAssetID: assetID5, ToAssetID: assetID7, Count: 6},
},
wantTradePairs: []*common.TradePair{
&common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2, Count: 1},
},
{
desc: "Stored data already exists",
- beforeTradePairs: map[common.TradePair]int{
- common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}: 1,
- common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3}: 2,
- common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4}: 3,
+ beforeTradePairs: map[string]*common.TradePair{
+ (&common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}).Key(): {FromAssetID: assetID1, ToAssetID: assetID2, Count: 1},
+ (&common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3}).Key(): {FromAssetID: assetID2, ToAssetID: assetID3, Count: 2},
+ (&common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4}).Key(): {FromAssetID: assetID3, ToAssetID: assetID4, Count: 3},
},
- addTradePairs: map[common.TradePair]int{
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}: 4,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}: 5,
- common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}: 6,
+ addTradePairs: map[string]*common.TradePair{
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}).Key(): {FromAssetID: assetID4, ToAssetID: assetID5, Count: 4},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}).Key(): {FromAssetID: assetID4, ToAssetID: assetID6, Count: 5},
+ (&common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}).Key(): {FromAssetID: assetID5, ToAssetID: assetID7, Count: 6},
},
wantTradePairs: []*common.TradePair{
&common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2, Count: 1},
},
{
desc: "delete some data",
- beforeTradePairs: map[common.TradePair]int{
- common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}: 1,
- common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3}: 2,
- common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4}: 3,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}: 4,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}: 5,
- common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}: 6,
- },
- delTradePairs: map[common.TradePair]int{
- common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}: -1,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}: -4,
- common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}: -2,
- common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}: -4,
+ beforeTradePairs: map[string]*common.TradePair{
+ (&common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}).Key(): {FromAssetID: assetID1, ToAssetID: assetID2, Count: 1},
+ (&common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3}).Key(): {FromAssetID: assetID2, ToAssetID: assetID3, Count: 2},
+ (&common.TradePair{FromAssetID: assetID3, ToAssetID: assetID4}).Key(): {FromAssetID: assetID3, ToAssetID: assetID4, Count: 3},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}).Key(): {FromAssetID: assetID4, ToAssetID: assetID5, Count: 4},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}).Key(): {FromAssetID: assetID4, ToAssetID: assetID6, Count: 5},
+ (&common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}).Key(): {FromAssetID: assetID5, ToAssetID: assetID7, Count: 6},
+ },
+ delTradePairs: map[string]*common.TradePair{
+ (&common.TradePair{FromAssetID: assetID1, ToAssetID: assetID2}).Key(): {FromAssetID: assetID1, ToAssetID: assetID2, Count: -1},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID5}).Key(): {FromAssetID: assetID4, ToAssetID: assetID5, Count: -4},
+ (&common.TradePair{FromAssetID: assetID4, ToAssetID: assetID6}).Key(): {FromAssetID: assetID4, ToAssetID: assetID6, Count: -2},
+ (&common.TradePair{FromAssetID: assetID5, ToAssetID: assetID7}).Key(): {FromAssetID: assetID5, ToAssetID: assetID7, Count: -4},
},
wantTradePairs: []*common.TradePair{
&common.TradePair{FromAssetID: assetID2, ToAssetID: assetID3, Count: 2},
defer os.RemoveAll("temp")
for i, c := range cases {
testDB := dbm.NewDB("testdb", "leveldb", "temp")
- movStore, err := NewMovStore(testDB, height, &hash)
- if err != nil {
- t.Fatalf("case %d: NewMovStore error %v.", i, err)
+ movStore := NewLevelDBMovStore(testDB)
+ if err := movStore.InitDBState(height, &hash); err != nil {
+ t.Fatalf("case %d: InitDBState error %v.", i, err)
}
batch := movStore.db.NewBatch()
defer os.RemoveAll("temp")
for i, c := range cases {
testDB := dbm.NewDB("testdb", "leveldb", "temp")
- movStore, err := NewMovStore(testDB, height, &hash)
- if err != nil {
- t.Fatalf("case %d: NewMovStore error %v.", i, err)
+ movStore := NewLevelDBMovStore(testDB)
+ if err := movStore.InitDBState(height, &hash); err != nil {
+ t.Fatalf("case %d: InitDBState error %v.", i, err)
}
batch := movStore.db.NewBatch()