OSDN Git Service

refactor
[bytom/bytom-java-sdk.git] / tx-signer / src / test / java / io / bytom / offline / api / SignTransactionTest.java
1 \r
2 package io.bytom.offline.api;\r
3 \r
4 import io.bytom.offline.types.*;\r
5 import org.bouncycastle.util.encoders.Hex;\r
6 import org.junit.Test;\r
7 \r
8 import java.io.ByteArrayOutputStream;\r
9 \r
10 /**\r
11  * Created by liqiang on 2018/10/24.\r
12  */\r
13 public class SignTransactionTest {\r
14 \r
15     //以下为测试用的区块上的交易utxo,即output中第二个输出\r
16     //新交易接收地址为bm1qdpc5sejdkm22uv23jwd8pg6lyqz2trz4trgxh0,需要找零\r
17     /*{\r
18         "id": "3b36453f7dc03b13523d6431afd7e544f60339daed52ba8fca7ebf88cd5e5939",\r
19             "version": 1,\r
20             "size": 330,\r
21             "time_range": 0,\r
22             "inputs": [\r
23         {\r
24             "type": "spend",\r
25                 "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",\r
26                 "asset_definition": {},\r
27             "amount": 482000000,\r
28                 "control_program": "00148da6ccbc216f9019cf80d23fd2083c80e29fcba2",\r
29                 "address": "bm1q3knve0ppd7gpnnuq6glayzpusr3fljazzcq0eh",\r
30                 "spent_output_id": "d11967ce15741217c650bc0b9dd7a390aaedd8ea5c645266920a7d19d8be681a",\r
31                 "input_id": "caae7c37f6cecce6854e6488cc389379e312acd2f7495337633501fc7f72b5f3"\r
32         }\r
33         ],\r
34         "outputs": [\r
35         {\r
36             "type": "control",\r
37                 "id": "3110bc8e7d713c17fb3dc3c9deadbfc419a25c25252c8e613d1fa54cc4d05dbd",\r
38                 "position": 0,\r
39                 "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",\r
40                 "asset_definition": {},\r
41             "amount": 281500000,\r
42                 "control_program": "00145d6ba5bf0cfdb2487abd594429cd04c2ba566f9f",\r
43                 "address": "bm1qt446t0cvlkeys74at9zznngyc2a9vmulcr2xy6"\r
44         },\r
45         {\r
46             "type": "control",\r
47                 "id": "db5afebb5b33aec2c46fcebb20b98fffa8c065a101f4c1789fe5491b34dc1b8f",\r
48                 "position": 1,\r
49                 "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",\r
50                 "asset_definition": {},\r
51             "amount": 200000000,\r
52                 "control_program": "00140d074bc86bd388a45f1c8911a41b8f0705d9058b",\r
53                 "address": "bm1qp5r5hjrt6wy2ghcu3yg6gxu0quzajpvtsm2gnc"\r
54         }\r
55         ],\r
56         "status_fail": false,\r
57             "mux_id": "0e97230a7347967764fd77c8cfa96b38ec6ff08465300a01900c645dfb694f24"\r
58     }*/\r
59 \r
60 \r
61     @Test\r
62     public void testMustWriteForHash() throws Exception {\r
63         Entry entry = new Entry() {\r
64             @Override\r
65             public String typ() {\r
66                 return null;\r
67             }\r
68 \r
69             @Override\r
70             public void writeForHash(ByteArrayOutputStream out) {\r
71 \r
72             }\r
73         };\r
74 \r
75         ByteArrayOutputStream out = new ByteArrayOutputStream();\r
76         entry.mustWriteForHash(out, (byte) 2);\r
77         assert Hex.toHexString(out.toByteArray()).equals("02");\r
78 \r
79         out.reset();\r
80         entry.mustWriteForHash(out, 1L);\r
81         assert Hex.toHexString(out.toByteArray()).equals("0100000000000000");\r
82 \r
83         out.reset();\r
84         entry.mustWriteForHash(out, 0x3456584738473837L);\r
85         assert Hex.toHexString(out.toByteArray()).equals("3738473847585634");\r
86 \r
87         out.reset();\r
88         entry.mustWriteForHash(out, new byte[]{0x12, 0x34, (byte) 0x85});\r
89         assert Hex.toHexString(out.toByteArray()).equals("03123485");\r
90 \r
91         out.reset();\r
92         entry.mustWriteForHash(out, new byte[][]{{0x12, 0x34, (byte) 0x85}, {(byte) 0x86, 0x17, 0x40}});\r
93         assert Hex.toHexString(out.toByteArray()).equals("020312348503861740");\r
94 \r
95         out.reset();\r
96         entry.mustWriteForHash(out, "hello, 世界");\r
97         assert Hex.toHexString(out.toByteArray()).equals("0d68656c6c6f2c20e4b896e7958c");\r
98 \r
99         out.reset();\r
100         entry.mustWriteForHash(out, new String[]{"hi", "你好", "hello"});\r
101         assert Hex.toHexString(out.toByteArray()).equals("0302686906e4bda0e5a5bd0568656c6c6f");\r
102 \r
103         out.reset();\r
104         String hash = "d8ab56a5c9296f591db071a8b63f395e1485b12d4b105b49fee287c03888331f";\r
105         entry.mustWriteForHash(out, new Hash(hash));\r
106         assert Hex.toHexString(out.toByteArray()).equals(hash);\r
107 \r
108         out.reset();\r
109         ValueSource valueSource = new ValueSource(new Hash(hash), null, 1);\r
110         Program program = new Program(1, new byte[]{1});\r
111         Mux mux = new Mux(new ValueSource[]{valueSource}, program);\r
112         entry.mustWriteForHash(out, mux);\r
113         assert Hex.toHexString(out.toByteArray()).equals("01d8ab56a5c9296f591db071a8b63f395e1485b12d4b105b49fee287c03888331f010000000000000001000000000000000101");\r
114     }\r
115 \r
116     @Test\r
117     public void testEntryID() throws Exception {\r
118         String hash = "d8ab56a5c9296f591db071a8b63f395e1485b12d4b105b49fee287c03888331f";\r
119         ValueSource valueSource = new ValueSource(new Hash(hash), null, 1);\r
120         Program program = new Program(1, new byte[]{1});\r
121         Mux mux = new Mux(new ValueSource[]{valueSource}, program);\r
122         String entryID = mux.entryID().toString();\r
123         assert entryID.equals("ebd967df33a3373ab85521fba24c22bf993c73f46fa96254b0c86646093184e9");\r
124     }\r
125 \r
126 }\r
127 \r
128 \r