OSDN Git Service

Merge pull request #4 from Bytom/retireTx
[bytom/bytom-java-sdk.git] / java-sdk / src / test / java / io / bytom / integration / TransactionTest.java
1 package io.bytom.integration;
2
3 import io.bytom.TestUtils;
4 import io.bytom.api.*;
5 import io.bytom.exception.BytomException;
6 import io.bytom.http.Client;
7 import org.apache.log4j.Logger;
8 import org.junit.Assert;
9 import org.junit.Test;
10
11 import java.util.ArrayList;
12 import java.util.List;
13
14 import static org.junit.Assert.assertEquals;
15 import static org.junit.Assert.assertNotNull;
16
17 public class TransactionTest {
18
19     static Client client;
20     static Client otherCoreClient;
21
22     static Key senderKey;
23     static Key receiverKey;
24     static Account senderAccount;
25     static Account receiverAccount;
26     static Account.Address receiverAddress;
27     static Asset senderAsset;
28     static Asset receiverAsset;
29
30     static Transaction.Feed transactionFeed;
31
32     static {
33         try {
34             client = TestUtils.generateClient();
35             otherCoreClient = TestUtils.generateClient();
36         } catch (BytomException e) {
37             e.printStackTrace();
38         }
39     }
40
41
42     private static Logger logger = Logger.getLogger(TransactionTest.class);
43
44
45     @Test
46     public void testGetAll() throws Exception {
47
48         senderKey = Key.list(client).get(0);
49         receiverKey = Key.list(client).get(1);
50         logger.info("senderKey:" + senderKey.toJson());
51         logger.info("receiverKey:" + receiverKey.toJson());
52
53         senderAccount = Account.list(client).get(0);
54         receiverAccount = Account.list(client).get(1);
55         logger.info("senderAccount:" + senderAccount.toJson());
56         logger.info("receiverAccount:" + receiverAccount.toJson());
57
58         receiverAddress = new Account.AddressBuilder()
59                 .setAccountAlias(receiverAccount.alias)
60                 .setAccountId(receiverAccount.id)
61                 .list(client).get(0);
62         logger.info("receiver-address:" + receiverAddress.toJson());
63
64         senderAsset = new Asset.QueryBuilder().list(client).get(0);
65         receiverAsset = new Asset.QueryBuilder().list(client).get(1);
66         logger.info("senderAsset:" + senderAsset.toJson());
67         logger.info("receiverAsset:" + receiverAsset.toJson());
68     }
69
70     @Test
71     public void testTransactionAll() throws Exception {
72         testGetAll();
73
74         logger.info("before transaction:");
75
76         List<Balance> balanceList = new Balance.QueryBuilder().list(client);
77
78         logger.info("transaction:");
79
80         Transaction.Template controlAddress = new Transaction.Builder()
81                 .addAction(
82                         new Transaction.Action.SpendFromAccount()
83                                 .setAccountId(senderAccount.id)
84                                 .setAssetId(senderAsset.id)
85                                 .setAmount(300000000)
86                 )
87                 .addAction(
88                         new Transaction.Action.ControlWithAddress()
89                                 .setAddress(receiverAddress.address)
90                                 .setAssetId(senderAsset.id)
91                                 .setAmount(200000000)
92                 ).build(client);
93
94         Transaction.Template singer = new Transaction.SignerBuilder().sign(client,
95                 controlAddress, "123456");
96
97         logger.info("rawTransaction:" + singer.rawTransaction);
98
99         logger.info("singer:" + singer.toJson());
100
101         Transaction.SubmitResponse txs = Transaction.submit(client, singer);
102
103         logger.info("txs:" + txs.toJson());
104
105         logger.info("after transaction.");
106
107         balanceList = new Balance.QueryBuilder().list(client);
108
109     }
110
111     //Asset issuance
112     //Issue 1000 units of gold to Alice.
113     @Test
114     public void testAssetIssue() throws BytomException {
115         Transaction.Template issuance = new Transaction.Builder()
116                 .addAction(
117                         new Transaction.Action.SpendFromAccount()
118                                 .setAccountId(senderAccount.id)
119                                 .setAssetId(senderAsset.id)
120                                 .setAmount(300000000)
121                 )
122                 .addAction(
123                         new Transaction.Action.ControlWithAddress()
124                                 .setAddress(receiverAddress.address)
125                                 .setAssetId(senderAsset.id)
126                                 .setAmount(200000000)
127                 ).build(client);
128
129         Transaction.Template signedIssuance = new Transaction.SignerBuilder().sign(client,
130                 issuance, "123456");
131
132         Transaction.submit(client, signedIssuance);
133     }
134
135     //Between two Chain Cores
136     @Test
137     public void testAssetIssueBetween() throws BytomException {
138         Receiver bobIssuanceReceiver = new Account.ReceiverBuilder()
139                 .setAccountAlias("bob")
140                 .create(otherCoreClient);
141         String bobIssuanceReceiverSerialized = bobIssuanceReceiver.toJson();
142
143
144         Transaction.Template issuanceToReceiver = new Transaction.Builder()
145                 .addAction(new Transaction.Action.Issue()
146                         .setAssetAlias("gold")
147                         .setAmount(10)
148                 ).addAction(new Transaction.Action.ControlWithReceiver()
149                         .setReceiver(Receiver.fromJson(bobIssuanceReceiverSerialized))
150                         .setAssetAlias("gold")
151                         .setAmount(10)
152                 ).build(client);
153
154         Transaction.Template signedIssuanceToReceiver = new Transaction.SignerBuilder().sign(client,
155                 issuanceToReceiver, "123456");
156
157         Transaction.submit(client, signedIssuanceToReceiver);
158     }
159
160     //Simple payment
161     //Alice pays 10 units of gold to Bob.
162     @Test
163     public void testSimplePayment() throws BytomException {
164         Transaction.Template payment = new Transaction.Builder()
165                 .addAction(new Transaction.Action.SpendFromAccount()
166                         .setAccountAlias("alice")
167                         .setAssetAlias("gold")
168                         .setAmount(10)
169                 ).addAction(new Transaction.Action.ControlWithAddress()
170                         .setAddress(receiverAddress.address)
171                         .setAssetAlias("gold")
172                         .setAmount(10)
173                 ).build(client);
174
175         Transaction.Template signedPayment = new Transaction.SignerBuilder().sign(client,
176                 payment, "123456");
177
178         Transaction.submit(client, signedPayment);
179     }
180
181     //Between two Chain Cores
182     @Test
183     public void testSimplePaymentBetween() throws BytomException {
184         Receiver bobPaymentReceiver = new Account.ReceiverBuilder()
185                 .setAccountAlias("bob")
186                 .create(otherCoreClient);
187         String bobPaymentReceiverSerialized = bobPaymentReceiver.toJson();
188
189
190         Transaction.Template paymentToReceiver = new Transaction.Builder()
191                 .addAction(new Transaction.Action.SpendFromAccount()
192                         .setAccountAlias("alice")
193                         .setAssetAlias("gold")
194                         .setAmount(10)
195                 ).addAction(new Transaction.Action.ControlWithReceiver()
196                         .setReceiver(Receiver.fromJson(bobPaymentReceiverSerialized))
197                         .setAssetAlias("gold")
198                         .setAmount(10)
199                 ).build(client);
200
201         Transaction.Template signedPaymentToReceiver = new Transaction.SignerBuilder().sign(client,
202                 paymentToReceiver, "123456");
203
204         Transaction.submit(client, signedPaymentToReceiver);
205     }
206
207     //Multi-asset payment
208     //Alice pays 10 units of gold and 20 units of silver to Bob.
209     @Test
210     public void testMultiAssetPayment() throws BytomException {
211         Transaction.Template multiAssetPayment = new Transaction.Builder()
212                 .addAction(new Transaction.Action.SpendFromAccount()
213                         .setAccountAlias("alice")
214                         .setAssetAlias("gold")
215                         .setAmount(10)
216                 ).addAction(new Transaction.Action.SpendFromAccount()
217                         .setAccountAlias("alice")
218                         .setAssetAlias("silver")
219                         .setAmount(20)
220                 ).addAction(new Transaction.Action.ControlWithAddress()
221                         .setAddress(receiverAddress.address)
222                         .setAssetAlias("gold")
223                         .setAmount(10)
224                 ).addAction(new Transaction.Action.ControlWithAddress()
225                         .setAddress(receiverAddress.address)
226                         .setAssetAlias("silver")
227                         .setAmount(20)
228                 ).build(client);
229
230         Transaction.Template signedMultiAssetPayment = new Transaction.SignerBuilder().sign(client,
231                 multiAssetPayment, "123456");
232
233         Transaction.submit(client, signedMultiAssetPayment);
234     }
235
236     //Between two Chain Cores
237     @Test
238     public void testMultiAssetPaymentBetween() throws BytomException {
239         Receiver bobGoldReceiver = new Account.ReceiverBuilder()
240                 .setAccountAlias("bob")
241                 .create(otherCoreClient);
242         String bobGoldReceiverSerialized = bobGoldReceiver.toJson();
243
244         Receiver bobSilverReceiver = new Account.ReceiverBuilder()
245                 .setAccountAlias("bob")
246                 .create(otherCoreClient);
247         String bobSilverReceiverSerialized = bobSilverReceiver.toJson();
248
249
250         Transaction.Template multiAssetToReceiver = new Transaction.Builder()
251                 .addAction(new Transaction.Action.SpendFromAccount()
252                         .setAccountAlias("alice")
253                         .setAssetAlias("gold")
254                         .setAmount(10)
255                 ).addAction(new Transaction.Action.SpendFromAccount()
256                         .setAccountAlias("alice")
257                         .setAssetAlias("silver")
258                         .setAmount(20)
259                 ).addAction(new Transaction.Action.ControlWithReceiver()
260                         .setReceiver(Receiver.fromJson(bobGoldReceiverSerialized))
261                         .setAssetAlias("gold")
262                         .setAmount(10)
263                 ).addAction(new Transaction.Action.ControlWithReceiver()
264                         .setReceiver(Receiver.fromJson(bobSilverReceiverSerialized))
265                         .setAssetAlias("silver")
266                         .setAmount(20)
267                 ).build(client);
268
269         Transaction.Template signedMultiAssetToReceiver = new Transaction.SignerBuilder().sign(client,
270                 multiAssetToReceiver, "123456");;
271
272         Transaction.submit(client, signedMultiAssetToReceiver);
273     }
274
275     //Asset retirement
276     //Alice retires 50 units of gold from her account.
277     @Test
278     public void testRetirement() throws BytomException {
279         Transaction.Template retirement = new Transaction.Builder()
280                 .addAction(new Transaction.Action.SpendFromAccount()
281                         .setAccountAlias("alice")
282                         .setAssetAlias("gold")
283                         .setAmount(50)
284                 ).addAction(new Transaction.Action.Retire()
285                         .setAssetAlias("gold")
286                         .setAmount(50)
287                 ).build(client);
288
289         Transaction.Template signedRetirement = new Transaction.SignerBuilder().sign(client,
290                 retirement, "123456");
291
292         Transaction.submit(client, signedRetirement);
293     }
294
295     //TransactionFeed
296     @Test
297     public void testTXFeedCreate() throws Exception {
298         String filter = "asset_id='57fab05b689a2b8b6738cffb5cf6cffcd0bf6156a04b7d9ba0173e384fe38c8c' AND amount_lower_limit = 50 AND amount_upper_limit = 100";
299         String alias = "test1";
300         new Transaction.Feed.Builder()
301                 .setAlias(alias)
302                 .setFilter(filter)
303                 .create(client);
304     }
305
306     @Test
307     public void testTXFeedGet() throws Exception {
308         String alias = "test2";
309         transactionFeed = Transaction.Feed.getByAlias(client, alias);
310
311         Assert.assertNotNull(transactionFeed);
312     }
313
314     @Test
315     public void testTXFeedUpdate() throws Exception {
316         String filter = "asset_id='57fab05b689a2b8b6738cffb5cf6cffcd0bf6156a04b7d9ba0173e384fe38c8c' AND amount_lower_limit = 50 AND amount_upper_limit = 100";
317         String alias = "test2";
318
319         Transaction.Feed.update(client, alias, filter);
320     }
321
322     @Test
323     public void testTXFeedList() throws Exception {
324         List<Transaction.Feed> txFeedList = Transaction.Feed.list(client);
325         Assert.assertNotNull(txFeedList);
326     }
327
328     @Test
329     public void testTXFeedDelete() throws Exception {
330         String alias = "test2";
331         Transaction.Feed.deleteByAlias(client, alias);
332     }
333
334 }