1 package io.bytom.integration;
3 import io.bytom.TestUtils;
5 import io.bytom.exception.BytomException;
6 import io.bytom.http.Client;
7 import org.apache.log4j.Logger;
8 import org.junit.Assert;
11 import java.util.ArrayList;
12 import java.util.List;
14 import static org.junit.Assert.assertEquals;
15 import static org.junit.Assert.assertNotNull;
17 public class TransactionTest {
20 static Client otherCoreClient;
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;
30 static Transaction.Feed transactionFeed;
34 client = TestUtils.generateClient();
35 otherCoreClient = TestUtils.generateClient();
36 } catch (BytomException e) {
42 private static Logger logger = Logger.getLogger(TransactionTest.class);
46 public void testGetAll() throws Exception {
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());
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());
58 receiverAddress = new Account.AddressBuilder()
59 .setAccountAlias(receiverAccount.alias)
60 .setAccountId(receiverAccount.id)
62 logger.info("receiver-address:" + receiverAddress.toJson());
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());
71 public void testTransactionAll() throws Exception {
74 logger.info("before transaction:");
76 List<Balance> balanceList = new Balance.QueryBuilder().list(client);
78 logger.info("transaction:");
80 Transaction.Template controlAddress = new Transaction.Builder()
82 new Transaction.Action.SpendFromAccount()
83 .setAccountId(senderAccount.id)
84 .setAssetId(senderAsset.id)
88 new Transaction.Action.ControlWithAddress()
89 .setAddress(receiverAddress.address)
90 .setAssetId(senderAsset.id)
94 Transaction.Template singer = new Transaction.SignerBuilder().sign(client,
95 controlAddress, "123456");
97 logger.info("rawTransaction:" + singer.rawTransaction);
99 logger.info("singer:" + singer.toJson());
101 Transaction.SubmitResponse txs = Transaction.submit(client, singer);
103 logger.info("txs:" + txs.toJson());
105 logger.info("after transaction.");
107 balanceList = new Balance.QueryBuilder().list(client);
112 //Issue 1000 units of gold to Alice.
114 public void testAssetIssue() throws BytomException {
115 Transaction.Template issuance = new Transaction.Builder()
117 new Transaction.Action.SpendFromAccount()
118 .setAccountId(senderAccount.id)
119 .setAssetId(senderAsset.id)
120 .setAmount(300000000)
123 new Transaction.Action.ControlWithAddress()
124 .setAddress(receiverAddress.address)
125 .setAssetId(senderAsset.id)
126 .setAmount(200000000)
129 Transaction.Template signedIssuance = new Transaction.SignerBuilder().sign(client,
132 Transaction.submit(client, signedIssuance);
135 //Between two Chain Cores
137 public void testAssetIssueBetween() throws BytomException {
138 Receiver bobIssuanceReceiver = new Account.ReceiverBuilder()
139 .setAccountAlias("bob")
140 .create(otherCoreClient);
141 String bobIssuanceReceiverSerialized = bobIssuanceReceiver.toJson();
144 Transaction.Template issuanceToReceiver = new Transaction.Builder()
145 .addAction(new Transaction.Action.Issue()
146 .setAssetAlias("gold")
148 ).addAction(new Transaction.Action.ControlWithReceiver()
149 .setReceiver(Receiver.fromJson(bobIssuanceReceiverSerialized))
150 .setAssetAlias("gold")
154 Transaction.Template signedIssuanceToReceiver = new Transaction.SignerBuilder().sign(client,
155 issuanceToReceiver, "123456");
157 Transaction.submit(client, signedIssuanceToReceiver);
161 //Alice pays 10 units of gold to Bob.
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")
169 ).addAction(new Transaction.Action.ControlWithAddress()
170 .setAddress(receiverAddress.address)
171 .setAssetAlias("gold")
175 Transaction.Template signedPayment = new Transaction.SignerBuilder().sign(client,
178 Transaction.submit(client, signedPayment);
181 //Between two Chain Cores
183 public void testSimplePaymentBetween() throws BytomException {
184 Receiver bobPaymentReceiver = new Account.ReceiverBuilder()
185 .setAccountAlias("bob")
186 .create(otherCoreClient);
187 String bobPaymentReceiverSerialized = bobPaymentReceiver.toJson();
190 Transaction.Template paymentToReceiver = new Transaction.Builder()
191 .addAction(new Transaction.Action.SpendFromAccount()
192 .setAccountAlias("alice")
193 .setAssetAlias("gold")
195 ).addAction(new Transaction.Action.ControlWithReceiver()
196 .setReceiver(Receiver.fromJson(bobPaymentReceiverSerialized))
197 .setAssetAlias("gold")
201 Transaction.Template signedPaymentToReceiver = new Transaction.SignerBuilder().sign(client,
202 paymentToReceiver, "123456");
204 Transaction.submit(client, signedPaymentToReceiver);
207 //Multi-asset payment
208 //Alice pays 10 units of gold and 20 units of silver to Bob.
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")
216 ).addAction(new Transaction.Action.SpendFromAccount()
217 .setAccountAlias("alice")
218 .setAssetAlias("silver")
220 ).addAction(new Transaction.Action.ControlWithAddress()
221 .setAddress(receiverAddress.address)
222 .setAssetAlias("gold")
224 ).addAction(new Transaction.Action.ControlWithAddress()
225 .setAddress(receiverAddress.address)
226 .setAssetAlias("silver")
230 Transaction.Template signedMultiAssetPayment = new Transaction.SignerBuilder().sign(client,
231 multiAssetPayment, "123456");
233 Transaction.submit(client, signedMultiAssetPayment);
236 //Between two Chain Cores
238 public void testMultiAssetPaymentBetween() throws BytomException {
239 Receiver bobGoldReceiver = new Account.ReceiverBuilder()
240 .setAccountAlias("bob")
241 .create(otherCoreClient);
242 String bobGoldReceiverSerialized = bobGoldReceiver.toJson();
244 Receiver bobSilverReceiver = new Account.ReceiverBuilder()
245 .setAccountAlias("bob")
246 .create(otherCoreClient);
247 String bobSilverReceiverSerialized = bobSilverReceiver.toJson();
250 Transaction.Template multiAssetToReceiver = new Transaction.Builder()
251 .addAction(new Transaction.Action.SpendFromAccount()
252 .setAccountAlias("alice")
253 .setAssetAlias("gold")
255 ).addAction(new Transaction.Action.SpendFromAccount()
256 .setAccountAlias("alice")
257 .setAssetAlias("silver")
259 ).addAction(new Transaction.Action.ControlWithReceiver()
260 .setReceiver(Receiver.fromJson(bobGoldReceiverSerialized))
261 .setAssetAlias("gold")
263 ).addAction(new Transaction.Action.ControlWithReceiver()
264 .setReceiver(Receiver.fromJson(bobSilverReceiverSerialized))
265 .setAssetAlias("silver")
269 Transaction.Template signedMultiAssetToReceiver = new Transaction.SignerBuilder().sign(client,
270 multiAssetToReceiver, "123456");;
272 Transaction.submit(client, signedMultiAssetToReceiver);
276 //Alice retires 50 units of gold from her account.
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")
284 ).addAction(new Transaction.Action.Retire()
285 .setAssetAlias("gold")
289 Transaction.Template signedRetirement = new Transaction.SignerBuilder().sign(client,
290 retirement, "123456");
292 Transaction.submit(client, signedRetirement);
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()
307 public void testTXFeedGet() throws Exception {
308 String alias = "test2";
309 transactionFeed = Transaction.Feed.getByAlias(client, alias);
311 Assert.assertNotNull(transactionFeed);
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";
319 Transaction.Feed.update(client, alias, filter);
323 public void testTXFeedList() throws Exception {
324 List<Transaction.Feed> txFeedList = Transaction.Feed.list(client);
325 Assert.assertNotNull(txFeedList);
329 public void testTXFeedDelete() throws Exception {
330 String alias = "test2";
331 Transaction.Feed.deleteByAlias(client, alias);