OSDN Git Service

6bd6e0d471f57b6043da4dd7126149a8ff64e46a
[bytom/vapor.git] / application / mov / mock / mock.go
1 package mock
2
3 import (
4         "github.com/bytom/vapor/application/mov/common"
5         "github.com/bytom/vapor/protocol/bc"
6         "github.com/bytom/vapor/protocol/bc/types"
7         "github.com/bytom/vapor/protocol/vm"
8         "github.com/bytom/vapor/protocol/vm/vmutil"
9         "github.com/bytom/vapor/testutil"
10 )
11
12 var (
13         BTC         = bc.NewAssetID([32]byte{1})
14         ETH         = bc.NewAssetID([32]byte{2})
15         EOS         = bc.NewAssetID([32]byte{3})
16         ETC         = bc.NewAssetID([32]byte{4})
17         NodeProgram = []byte{0x58}
18
19         Btc2EthOrders = []*common.Order{
20                 {
21                         FromAssetID:      &BTC,
22                         ToAssetID:        &ETH,
23                         RatioNumerator:   50,
24                         RatioDenominator: 1,
25                         Utxo: &common.MovUtxo{
26                                 SourceID:       hashPtr(testutil.MustDecodeHash("37b8edf656e45a7addf47f5626e114a8c394d918a36f61b5a2905675a09b40ae")),
27                                 SourcePos:      0,
28                                 Amount:         10,
29                                 ControlProgram: MustCreateP2WMCProgram(ETH, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19251"), 50, 1),
30                         },
31                 },
32                 {
33                         FromAssetID:      &BTC,
34                         ToAssetID:        &ETH,
35                         RatioNumerator:   53,
36                         RatioDenominator: 1,
37                         Utxo: &common.MovUtxo{
38                                 SourceID:       hashPtr(testutil.MustDecodeHash("3ec2bbfb499a8736d377b547eee5392bcddf7ec2b287e9ed20b5938c3d84e7cd")),
39                                 SourcePos:      0,
40                                 Amount:         20,
41                                 ControlProgram: MustCreateP2WMCProgram(ETH, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19252"), 53, 1),
42                         },
43                 },
44                 {
45                         FromAssetID:      &BTC,
46                         ToAssetID:        &ETH,
47                         RatioNumerator:   52,
48                         RatioDenominator: 1,
49                         Utxo: &common.MovUtxo{
50                                 SourceID:       hashPtr(testutil.MustDecodeHash("1232bbfb499a8736d377b547eee5392bcddf7ec2b287e9ed20b5938c3d84e7cd")),
51                                 SourcePos:      0,
52                                 Amount:         15,
53                                 ControlProgram: MustCreateP2WMCProgram(ETH, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19252"), 53, 1),
54                         },
55                 },
56                 {
57                         FromAssetID:      &BTC,
58                         ToAssetID:        &ETH,
59                         RatioNumerator:   49,
60                         RatioDenominator: 1,
61                         Utxo: &common.MovUtxo{
62                                 SourceID:       hashPtr(testutil.MustDecodeHash("7872bbfb499a8736d377b547eee5392bcddf7ec2b287e9ed20b5938c3d84e7cd")),
63                                 SourcePos:      0,
64                                 Amount:         17,
65                                 ControlProgram: MustCreateP2WMCProgram(ETH, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19252"), 53, 1),
66                         },
67                 },
68         }
69
70         Eth2BtcOrders = []*common.Order{
71                 {
72                         FromAssetID:      &ETH,
73                         ToAssetID:        &BTC,
74                         RatioNumerator:   1,
75                         RatioDenominator: 51,
76                         Utxo: &common.MovUtxo{
77                                 SourceID:       hashPtr(testutil.MustDecodeHash("fba43ff5155209cb1769e2ec0e1d4a33accf899c740865edfc6d1de39b873b29")),
78                                 SourcePos:      0,
79                                 Amount:         510,
80                                 ControlProgram: MustCreateP2WMCProgram(BTC, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19253"), 1, 51.0),
81                         },
82                 },
83                 {
84                         FromAssetID:      &ETH,
85                         ToAssetID:        &BTC,
86                         RatioNumerator:   1,
87                         RatioDenominator: 52,
88                         Utxo: &common.MovUtxo{
89                                 SourceID:       hashPtr(testutil.MustDecodeHash("05f24bb847db823075d81786aa270748e02602199cd009c0284f928503846a5a")),
90                                 SourcePos:      0,
91                                 Amount:         416,
92                                 ControlProgram: MustCreateP2WMCProgram(BTC, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19254"), 1, 52.0),
93                         },
94                 },
95                 {
96                         FromAssetID:      &ETH,
97                         ToAssetID:        &BTC,
98                         RatioNumerator:   1,
99                         RatioDenominator: 54,
100                         Utxo: &common.MovUtxo{
101                                 SourceID:       hashPtr(testutil.MustDecodeHash("119a02980796dc352cf6475457463aef5666f66622088de3551fa73a65f0d201")),
102                                 SourcePos:      0,
103                                 Amount:         810,
104                                 ControlProgram: MustCreateP2WMCProgram(BTC, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19255"), 1, 54.0),
105                         },
106                 },
107         }
108
109         Eos2EtcOrders = []*common.Order{
110                 {
111                         FromAssetID:      &EOS,
112                         ToAssetID:        &ETC,
113                         RatioNumerator:   1,
114                         RatioDenominator: 2,
115                         Utxo: &common.MovUtxo{
116                                 SourceID:       hashPtr(testutil.MustDecodeHash("119a02980796dc352cf6475457463aef5666f66622088de3551fa73a65f0d202")),
117                                 SourcePos:      0,
118                                 Amount:         100,
119                                 ControlProgram: MustCreateP2WMCProgram(ETC, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19255"), 1, 2.0),
120                         },
121                 },
122         }
123
124         Etc2EosOrders = []*common.Order{
125                 {
126                         FromAssetID:      &ETC,
127                         ToAssetID:        &EOS,
128                         RatioNumerator:   2,
129                         RatioDenominator: 1,
130                         Utxo: &common.MovUtxo{
131                                 SourceID:       hashPtr(testutil.MustDecodeHash("119a02980796dc352cf6475457463aef5666f66622088de3551fa73a65f0d203")),
132                                 SourcePos:      0,
133                                 Amount:         50,
134                                 ControlProgram: MustCreateP2WMCProgram(EOS, testutil.MustDecodeHexString("0014df7a97e53bbe278e4e44810b0a760fb472daa9a3"), 2, 1.0),
135                         },
136                 },
137         }
138
139         Eth2EosOrders = []*common.Order{
140                 {
141                         FromAssetID:      &ETH,
142                         ToAssetID:        &EOS,
143                         RatioNumerator:   2,
144                         RatioDenominator: 1,
145                         Utxo: &common.MovUtxo{
146                                 SourceID:       hashPtr(testutil.MustDecodeHash("c1502d03946e4ea92abdb33f51638b181839bd0d8767acc2ee5c665b659c4b13")),
147                                 SourcePos:      0,
148                                 Amount:         500,
149                                 ControlProgram: MustCreateP2WMCProgram(EOS, testutil.MustDecodeHexString("0014e3178c0f294a9a8f4b304236406507913091df86"), 2, 1.0),
150                         },
151                 },
152         }
153
154         Eos2BtcOrders = []*common.Order{
155                 {
156                         FromAssetID:      &EOS,
157                         ToAssetID:        &BTC,
158                         RatioNumerator:   1,
159                         RatioDenominator: 100,
160                         Utxo: &common.MovUtxo{
161                                 SourceID:       hashPtr(testutil.MustDecodeHash("27cf8a0877dc858968cc06396fe6aa9e02d15f3e44c862fe29fa5fd50497cf20")),
162                                 SourcePos:      0,
163                                 Amount:         1000,
164                                 ControlProgram: MustCreateP2WMCProgram(BTC, testutil.MustDecodeHexString("00144d0dfc8a0c5ce41d31d4f61d99aff70588bff8bc"), 1, 100.0),
165                         },
166                 },
167         }
168
169         Btc2EthCancelTxs = []*types.Tx{
170                 // Btc2EthOrders[0]
171                 types.NewTx(types.TxData{
172                         Inputs:  []*types.TxInput{types.NewSpendInput([][]byte{{}, {}, vm.Int64Bytes(2)}, *Btc2EthOrders[0].Utxo.SourceID, *Btc2EthOrders[0].FromAssetID, Btc2EthOrders[0].Utxo.Amount, Btc2EthOrders[0].Utxo.SourcePos, Btc2EthOrders[0].Utxo.ControlProgram)},
173                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Btc2EthOrders[0].FromAssetID, Btc2EthOrders[0].Utxo.Amount, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19251"))},
174                 }),
175         }
176
177         Btc2EthMakerTxs = []*types.Tx{
178                 // Btc2EthOrders[0]
179                 types.NewTx(types.TxData{
180                         Inputs:  []*types.TxInput{types.NewSpendInput(nil, *Btc2EthOrders[0].Utxo.SourceID, *Btc2EthOrders[0].FromAssetID, Btc2EthOrders[0].Utxo.Amount, Btc2EthOrders[0].Utxo.SourcePos, []byte{0x51})},
181                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Btc2EthOrders[0].FromAssetID, Btc2EthOrders[0].Utxo.Amount, Btc2EthOrders[0].Utxo.ControlProgram)},
182                 }),
183                 // Btc2EthOrders[1]
184                 types.NewTx(types.TxData{
185                         Inputs:  []*types.TxInput{types.NewSpendInput(nil, *Btc2EthOrders[1].Utxo.SourceID, *Btc2EthOrders[1].FromAssetID, Btc2EthOrders[1].Utxo.Amount, Btc2EthOrders[1].Utxo.SourcePos, []byte{0x51})},
186                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Btc2EthOrders[1].FromAssetID, Btc2EthOrders[1].Utxo.Amount, Btc2EthOrders[1].Utxo.ControlProgram)},
187                 }),
188                 // Btc2EthOrders[2]
189                 types.NewTx(types.TxData{
190                         Inputs:  []*types.TxInput{types.NewSpendInput(nil, *Btc2EthOrders[2].Utxo.SourceID, *Btc2EthOrders[2].FromAssetID, Btc2EthOrders[2].Utxo.Amount, Btc2EthOrders[2].Utxo.SourcePos, []byte{0x51})},
191                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Btc2EthOrders[2].FromAssetID, Btc2EthOrders[2].Utxo.Amount, Btc2EthOrders[2].Utxo.ControlProgram)},
192                 }),
193                 // Btc2EthOrders[3]
194                 types.NewTx(types.TxData{
195                         Inputs:  []*types.TxInput{types.NewSpendInput(nil, *Btc2EthOrders[3].Utxo.SourceID, *Btc2EthOrders[3].FromAssetID, Btc2EthOrders[3].Utxo.Amount, Btc2EthOrders[3].Utxo.SourcePos, []byte{0x51})},
196                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Btc2EthOrders[3].FromAssetID, Btc2EthOrders[3].Utxo.Amount, Btc2EthOrders[3].Utxo.ControlProgram)},
197                 }),
198         }
199
200         Eth2BtcMakerTxs = []*types.Tx{
201                 // Eth2Btc[0]
202                 types.NewTx(types.TxData{
203                         Inputs:  []*types.TxInput{types.NewSpendInput(nil, *Eth2BtcOrders[0].Utxo.SourceID, *Eth2BtcOrders[0].FromAssetID, Eth2BtcOrders[0].Utxo.Amount, Eth2BtcOrders[0].Utxo.SourcePos, []byte{0x51})},
204                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Eth2BtcOrders[0].FromAssetID, Eth2BtcOrders[0].Utxo.Amount, Eth2BtcOrders[0].Utxo.ControlProgram)},
205                 }),
206                 // Eth2Btc[1]
207                 types.NewTx(types.TxData{
208                         Inputs:  []*types.TxInput{types.NewSpendInput(nil, *Eth2BtcOrders[1].Utxo.SourceID, *Eth2BtcOrders[1].FromAssetID, Eth2BtcOrders[1].Utxo.Amount, Eth2BtcOrders[1].Utxo.SourcePos, []byte{0x51})},
209                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Eth2BtcOrders[1].FromAssetID, Eth2BtcOrders[1].Utxo.Amount, Eth2BtcOrders[1].Utxo.ControlProgram)},
210                 }),
211                 // Eth2Btc[2]
212                 types.NewTx(types.TxData{
213                         Inputs:  []*types.TxInput{types.NewSpendInput(nil, *Eth2BtcOrders[2].Utxo.SourceID, *Eth2BtcOrders[2].FromAssetID, Eth2BtcOrders[2].Utxo.Amount, Eth2BtcOrders[2].Utxo.SourcePos, []byte{0x51})},
214                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Eth2BtcOrders[2].FromAssetID, Eth2BtcOrders[2].Utxo.Amount, Eth2BtcOrders[2].Utxo.ControlProgram)},
215                 }),
216         }
217
218         Eos2EtcMakerTxs = []*types.Tx{
219                 // Eos2Etc[0]
220                 types.NewTx(types.TxData{
221                         Inputs:  []*types.TxInput{types.NewSpendInput(nil, *Eos2EtcOrders[0].Utxo.SourceID, *Eos2EtcOrders[0].FromAssetID, Eos2EtcOrders[0].Utxo.Amount, Eos2EtcOrders[0].Utxo.SourcePos, []byte{0x51})},
222                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Eos2EtcOrders[0].FromAssetID, Eos2EtcOrders[0].Utxo.Amount, Eos2EtcOrders[0].Utxo.ControlProgram)},
223                 }),
224         }
225
226         Etc2EosMakerTxs = []*types.Tx{
227                 // Etc2Eos[0]
228                 types.NewTx(types.TxData{
229                         Inputs:  []*types.TxInput{types.NewSpendInput(nil, *Etc2EosOrders[0].Utxo.SourceID, *Etc2EosOrders[0].FromAssetID, Etc2EosOrders[0].Utxo.Amount, Etc2EosOrders[0].Utxo.SourcePos, []byte{0x51})},
230                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Etc2EosOrders[0].FromAssetID, Etc2EosOrders[0].Utxo.Amount, Etc2EosOrders[0].Utxo.ControlProgram)},
231                 }),
232         }
233
234         Eth2EosMakerTxs = []*types.Tx{
235                 // Eth2Eos[0]
236                 types.NewTx(types.TxData{
237                         Inputs:  []*types.TxInput{types.NewSpendInput(nil, *Eth2EosOrders[0].Utxo.SourceID, *Eth2EosOrders[0].FromAssetID, Eth2EosOrders[0].Utxo.Amount, Eth2EosOrders[0].Utxo.SourcePos, []byte{0x51})},
238                         Outputs: []*types.TxOutput{types.NewIntraChainOutput(*Eth2EosOrders[0].FromAssetID, Eth2EosOrders[0].Utxo.Amount, Eth2EosOrders[0].Utxo.ControlProgram)},
239                 }),
240         }
241
242         MatchedTxs = []*types.Tx{
243                 // partial matched transaction from Btc2EthOrders[0], Eth2BtcOrders[1]
244                 types.NewTx(types.TxData{
245                         Inputs: []*types.TxInput{
246                                 types.NewSpendInput([][]byte{vm.Int64Bytes(416), vm.Int64Bytes(0), vm.Int64Bytes(0)}, *Btc2EthOrders[0].Utxo.SourceID, *Btc2EthOrders[0].FromAssetID, Btc2EthOrders[0].Utxo.Amount, Btc2EthOrders[0].Utxo.SourcePos, Btc2EthOrders[0].Utxo.ControlProgram),
247                                 types.NewSpendInput([][]byte{vm.Int64Bytes(2), vm.Int64Bytes(1)}, *Eth2BtcOrders[1].Utxo.SourceID, *Eth2BtcOrders[1].FromAssetID, Eth2BtcOrders[1].Utxo.Amount, Eth2BtcOrders[1].Utxo.SourcePos, Eth2BtcOrders[1].Utxo.ControlProgram),
248                         },
249                         Outputs: []*types.TxOutput{
250                                 types.NewIntraChainOutput(*Btc2EthOrders[0].ToAssetID, 416, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19251")),
251                                 // re-order
252                                 types.NewIntraChainOutput(*Btc2EthOrders[0].FromAssetID, 2, Btc2EthOrders[0].Utxo.ControlProgram),
253                                 types.NewIntraChainOutput(*Eth2BtcOrders[1].ToAssetID, 8, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19254")),
254                         },
255                 }),
256
257                 // full matched transaction from Btc2EthOrders[0], Eth2BtcOrders[0]
258                 types.NewTx(types.TxData{
259                         Inputs: []*types.TxInput{
260                                 types.NewSpendInput([][]byte{vm.Int64Bytes(0), vm.Int64Bytes(1)}, *Btc2EthOrders[0].Utxo.SourceID, *Btc2EthOrders[0].FromAssetID, Btc2EthOrders[0].Utxo.Amount, Btc2EthOrders[0].Utxo.SourcePos, Btc2EthOrders[0].Utxo.ControlProgram),
261                                 types.NewSpendInput([][]byte{vm.Int64Bytes(1), vm.Int64Bytes(1)}, *Eth2BtcOrders[0].Utxo.SourceID, *Eth2BtcOrders[0].FromAssetID, Eth2BtcOrders[0].Utxo.Amount, Eth2BtcOrders[0].Utxo.SourcePos, Eth2BtcOrders[0].Utxo.ControlProgram),
262                         },
263                         Outputs: []*types.TxOutput{
264                                 types.NewIntraChainOutput(*Btc2EthOrders[0].ToAssetID, 500, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19251")),
265                                 types.NewIntraChainOutput(*Eth2BtcOrders[0].ToAssetID, 10, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19253")),
266                                 types.NewIntraChainOutput(*Btc2EthOrders[0].ToAssetID, 10, NodeProgram),
267                         },
268                 }),
269
270                 // partial matched transaction from Btc2EthOrders[0], Eth2BtcOrders[2]
271                 types.NewTx(types.TxData{
272                         Inputs: []*types.TxInput{
273                                 types.NewSpendInput([][]byte{vm.Int64Bytes(0), vm.Int64Bytes(1)}, *Btc2EthOrders[0].Utxo.SourceID, *Btc2EthOrders[0].FromAssetID, Btc2EthOrders[0].Utxo.Amount, Btc2EthOrders[0].Utxo.SourcePos, Btc2EthOrders[0].Utxo.ControlProgram),
274                                 types.NewSpendInput([][]byte{vm.Int64Bytes(10), vm.Int64Bytes(1), vm.Int64Bytes(0)}, *Eth2BtcOrders[2].Utxo.SourceID, *Eth2BtcOrders[2].FromAssetID, Eth2BtcOrders[2].Utxo.Amount, Eth2BtcOrders[2].Utxo.SourcePos, Eth2BtcOrders[2].Utxo.ControlProgram),
275                         },
276                         Outputs: []*types.TxOutput{
277                                 types.NewIntraChainOutput(*Btc2EthOrders[0].ToAssetID, 500, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19251")),
278                                 types.NewIntraChainOutput(*Eth2BtcOrders[2].ToAssetID, 10, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19255")),
279                                 // re-order
280                                 types.NewIntraChainOutput(*Eth2BtcOrders[2].FromAssetID, 270, Eth2BtcOrders[2].Utxo.ControlProgram),
281                                 // fee
282                                 types.NewIntraChainOutput(*Eth2BtcOrders[2].FromAssetID, 27, NodeProgram),
283                                 // refund
284                                 types.NewIntraChainOutput(*Eth2BtcOrders[2].FromAssetID, 6, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19251")),
285                                 types.NewIntraChainOutput(*Eth2BtcOrders[2].FromAssetID, 7, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19255")),
286                         },
287                 }),
288                 types.NewTx(types.TxData{
289                         Inputs: []*types.TxInput{
290                                 types.NewSpendInput([][]byte{vm.Int64Bytes(0), vm.Int64Bytes(0)}, *Btc2EthOrders[1].Utxo.SourceID, *Btc2EthOrders[1].FromAssetID, Btc2EthOrders[1].Utxo.Amount, Btc2EthOrders[1].Utxo.SourcePos, Btc2EthOrders[1].Utxo.ControlProgram),
291                                 types.NewSpendInput([][]byte{vm.Int64Bytes(2), vm.Int64Bytes(1)}, testutil.MustDecodeHash("39bdb7058a0c31fb740af8e3c382bf608efff1b041cd4dd461332722ad24552a"), *Eth2BtcOrders[2].FromAssetID, 270, 2, Eth2BtcOrders[2].Utxo.ControlProgram),
292                         },
293                         Outputs: []*types.TxOutput{
294                                 types.NewIntraChainOutput(*Btc2EthOrders[1].ToAssetID, 270, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19252")),
295                                 // re-order
296                                 types.NewIntraChainOutput(*Btc2EthOrders[1].FromAssetID, 15, Btc2EthOrders[1].Utxo.ControlProgram),
297                                 types.NewIntraChainOutput(*Eth2BtcOrders[2].ToAssetID, 5, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19255")),
298                         },
299                 }),
300
301                 // partial matched transaction from Btc2EthMakerTxs[0], Eth2BtcMakerTxs[1]
302                 types.NewTx(types.TxData{
303                         Inputs: []*types.TxInput{
304                                 types.NewSpendInput([][]byte{vm.Int64Bytes(0), vm.Int64Bytes(1)}, *MustNewOrderFromOutput(Btc2EthMakerTxs[0], 0).Utxo.SourceID, *Btc2EthOrders[0].FromAssetID, Btc2EthOrders[0].Utxo.Amount, 0, Btc2EthOrders[0].Utxo.ControlProgram),
305                                 types.NewSpendInput([][]byte{vm.Int64Bytes(1), vm.Int64Bytes(1)}, *MustNewOrderFromOutput(Eth2BtcMakerTxs[1], 0).Utxo.SourceID, *Eth2BtcOrders[1].FromAssetID, Eth2BtcOrders[1].Utxo.Amount, 0, Eth2BtcOrders[1].Utxo.ControlProgram),
306                         },
307                         Outputs: []*types.TxOutput{
308                                 types.NewIntraChainOutput(*Btc2EthOrders[0].ToAssetID, 416, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19251")),
309                                 // re-order
310                                 types.NewIntraChainOutput(*Btc2EthOrders[0].FromAssetID, 2, Btc2EthOrders[0].Utxo.ControlProgram),
311                                 types.NewIntraChainOutput(*Eth2BtcOrders[1].ToAssetID, 8, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19254")),
312                         },
313                 }),
314
315                 // full matched transaction from Eos2EtcMakerTxs[0] Etc2EosMakerTxs[0]
316                 types.NewTx(types.TxData{
317                         Inputs: []*types.TxInput{
318                                 types.NewSpendInput([][]byte{vm.Int64Bytes(0), vm.Int64Bytes(1)}, *MustNewOrderFromOutput(Eos2EtcMakerTxs[0], 0).Utxo.SourceID, *Eos2EtcOrders[0].FromAssetID, Eos2EtcOrders[0].Utxo.Amount, Eos2EtcOrders[0].Utxo.SourcePos, Eos2EtcOrders[0].Utxo.ControlProgram),
319                                 types.NewSpendInput([][]byte{vm.Int64Bytes(1), vm.Int64Bytes(1)}, *MustNewOrderFromOutput(Etc2EosMakerTxs[0], 0).Utxo.SourceID, *Etc2EosOrders[0].FromAssetID, Etc2EosOrders[0].Utxo.Amount, Etc2EosOrders[0].Utxo.SourcePos, Etc2EosOrders[0].Utxo.ControlProgram),
320                         },
321                         Outputs: []*types.TxOutput{
322                                 types.NewIntraChainOutput(*Eos2EtcOrders[0].ToAssetID, 50, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19255")),
323                                 types.NewIntraChainOutput(*Etc2EosOrders[0].ToAssetID, 100, testutil.MustDecodeHexString("0014df7a97e53bbe278e4e44810b0a760fb472daa9a3")),
324                         },
325                 }),
326
327                 // cycle matched from Btc2Eth Eth2Eos Eos2Btc
328                 types.NewTx(types.TxData{
329                         Inputs: []*types.TxInput{
330                                 types.NewSpendInput([][]byte{vm.Int64Bytes(0), vm.Int64Bytes(1)}, *Btc2EthOrders[0].Utxo.SourceID, *Btc2EthOrders[0].FromAssetID, Btc2EthOrders[0].Utxo.Amount, Btc2EthOrders[0].Utxo.SourcePos, Btc2EthOrders[0].Utxo.ControlProgram),
331                                 types.NewSpendInput([][]byte{vm.Int64Bytes(1), vm.Int64Bytes(1)}, *Eth2EosOrders[0].Utxo.SourceID, *Eth2EosOrders[0].FromAssetID, Eth2EosOrders[0].Utxo.Amount, Eth2EosOrders[0].Utxo.SourcePos, Eth2EosOrders[0].Utxo.ControlProgram),
332                                 types.NewSpendInput([][]byte{vm.Int64Bytes(2), vm.Int64Bytes(1)}, *Eos2BtcOrders[0].Utxo.SourceID, *Eos2BtcOrders[0].FromAssetID, Eos2BtcOrders[0].Utxo.Amount, Eos2BtcOrders[0].Utxo.SourcePos, Eos2BtcOrders[0].Utxo.ControlProgram),
333                         },
334                         Outputs: []*types.TxOutput{
335                                 types.NewIntraChainOutput(ETH, 500, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19251")),
336                                 types.NewIntraChainOutput(EOS, 1000, testutil.MustDecodeHexString("0014e3178c0f294a9a8f4b304236406507913091df86")),
337                                 types.NewIntraChainOutput(BTC, 10, testutil.MustDecodeHexString("00144d0dfc8a0c5ce41d31d4f61d99aff70588bff8bc")),
338                         },
339                 }),
340
341                 // partial matched transaction from MatchedTxs[4], Eth2BtcMakerTxs[0]
342                 types.NewTx(types.TxData{
343                         Inputs: []*types.TxInput{
344                                 types.NewSpendInput([][]byte{vm.Int64Bytes(0), vm.Int64Bytes(1)}, testutil.MustDecodeHash("ed810e1672c3b9de27a1db23e017e6b9cc23334b6e3dbd25dfe8857e289b7f06"), *Btc2EthOrders[0].FromAssetID, 2, 1, Btc2EthOrders[0].Utxo.ControlProgram),
345                                 types.NewSpendInput([][]byte{vm.Int64Bytes(1), vm.Int64Bytes(1)}, *MustNewOrderFromOutput(Eth2BtcMakerTxs[0], 0).Utxo.SourceID, *Eth2BtcOrders[0].FromAssetID, Eth2BtcOrders[0].Utxo.Amount, 0, Eth2BtcOrders[0].Utxo.ControlProgram),
346                         },
347                         Outputs: []*types.TxOutput{
348                                 types.NewIntraChainOutput(*Btc2EthOrders[0].ToAssetID, 100, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19251")),
349                                 types.NewIntraChainOutput(*Eth2BtcOrders[0].ToAssetID, 2, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19253")),
350                                 // re-order
351                                 types.NewIntraChainOutput(*Eth2BtcOrders[0].FromAssetID, 404, Eth2BtcOrders[0].Utxo.ControlProgram),
352                         },
353                 }),
354
355                 // partial matched transaction from Btc2EthOrders[3], Eth2BtcOrders[2]
356                 types.NewTx(types.TxData{
357                         Inputs: []*types.TxInput{
358                                 types.NewSpendInput([][]byte{vm.Int64Bytes(810), vm.Int64Bytes(0), vm.Int64Bytes(0)}, *Btc2EthOrders[3].Utxo.SourceID, *Btc2EthOrders[3].FromAssetID, Btc2EthOrders[3].Utxo.Amount, Btc2EthOrders[3].Utxo.SourcePos, Btc2EthOrders[3].Utxo.ControlProgram),
359                                 types.NewSpendInput([][]byte{vm.Int64Bytes(2), vm.Int64Bytes(1)}, *Eth2BtcOrders[2].Utxo.SourceID, *Eth2BtcOrders[2].FromAssetID, Eth2BtcOrders[2].Utxo.Amount, Eth2BtcOrders[2].Utxo.SourcePos, Eth2BtcOrders[2].Utxo.ControlProgram),
360                         },
361                         Outputs: []*types.TxOutput{
362                                 types.NewIntraChainOutput(*Btc2EthOrders[3].ToAssetID, 810, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19252")),
363                                 // re-order
364                                 types.NewIntraChainOutput(*Btc2EthOrders[3].FromAssetID, 1, Btc2EthOrders[3].Utxo.ControlProgram),
365                                 types.NewIntraChainOutput(*Eth2BtcOrders[2].ToAssetID, 15, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19255")),
366                                 // fee
367                                 types.NewIntraChainOutput(*Btc2EthOrders[3].FromAssetID, 1, NodeProgram),
368                         },
369                 }),
370
371                 // full matched transaction from Eos2EtcOrders[0] Etc2EosOrders[0]
372                 types.NewTx(types.TxData{
373                         Inputs: []*types.TxInput{
374                                 types.NewSpendInput([][]byte{vm.Int64Bytes(0), vm.Int64Bytes(1)}, *Eos2EtcOrders[0].Utxo.SourceID, *Eos2EtcOrders[0].FromAssetID, Eos2EtcOrders[0].Utxo.Amount, Eos2EtcOrders[0].Utxo.SourcePos, Eos2EtcOrders[0].Utxo.ControlProgram),
375                                 types.NewSpendInput([][]byte{vm.Int64Bytes(1), vm.Int64Bytes(1)}, *Etc2EosOrders[0].Utxo.SourceID, *Etc2EosOrders[0].FromAssetID, Etc2EosOrders[0].Utxo.Amount, Etc2EosOrders[0].Utxo.SourcePos, Etc2EosOrders[0].Utxo.ControlProgram),
376                         },
377                         Outputs: []*types.TxOutput{
378                                 types.NewIntraChainOutput(*Eos2EtcOrders[0].ToAssetID, 50, testutil.MustDecodeHexString("0014f928b723999312df4ed51cb275a2644336c19255")),
379                                 types.NewIntraChainOutput(*Etc2EosOrders[0].ToAssetID, 100, testutil.MustDecodeHexString("0014df7a97e53bbe278e4e44810b0a760fb472daa9a3")),
380                         },
381                 }),
382         }
383 )
384
385 func MustCreateP2WMCProgram(requestAsset bc.AssetID, sellerProgram []byte, ratioNumerator, ratioDenominator int64) []byte {
386         contractArgs := vmutil.MagneticContractArgs{
387                 RequestedAsset:   requestAsset,
388                 RatioNumerator:   ratioNumerator,
389                 RatioDenominator: ratioDenominator,
390                 SellerProgram:    sellerProgram,
391                 SellerKey:        testutil.MustDecodeHexString("ad79ec6bd3a6d6dbe4d0ee902afc99a12b9702fb63edce5f651db3081d868b75"),
392         }
393         program, err := vmutil.P2WMCProgram(contractArgs)
394         if err != nil {
395                 panic(err)
396         }
397         return program
398 }
399
400 func MustNewOrderFromOutput(tx *types.Tx, outputIndex int) *common.Order {
401         order, err := common.NewOrderFromOutput(tx, outputIndex)
402         if err != nil {
403                 panic(err)
404         }
405
406         return order
407 }
408
409 func hashPtr(hash bc.Hash) *bc.Hash {
410         return &hash
411 }