2 package io.bytom.offline.api;
\r
4 import io.bytom.offline.types.*;
\r
5 import org.bouncycastle.util.encoders.Hex;
\r
6 import org.junit.Test;
\r
8 import java.io.ByteArrayOutputStream;
\r
11 * Created by liqiang on 2018/10/24.
\r
13 public class SignTransactionTest {
\r
15 //以下为测试用的区块上的交易utxo,即output中第二个输出
\r
16 //新交易接收地址为bm1qdpc5sejdkm22uv23jwd8pg6lyqz2trz4trgxh0,需要找零
\r
18 "id": "3b36453f7dc03b13523d6431afd7e544f60339daed52ba8fca7ebf88cd5e5939",
\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
37 "id": "3110bc8e7d713c17fb3dc3c9deadbfc419a25c25252c8e613d1fa54cc4d05dbd",
\r
39 "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
\r
40 "asset_definition": {},
\r
41 "amount": 281500000,
\r
42 "control_program": "00145d6ba5bf0cfdb2487abd594429cd04c2ba566f9f",
\r
43 "address": "bm1qt446t0cvlkeys74at9zznngyc2a9vmulcr2xy6"
\r
47 "id": "db5afebb5b33aec2c46fcebb20b98fffa8c065a101f4c1789fe5491b34dc1b8f",
\r
49 "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
\r
50 "asset_definition": {},
\r
51 "amount": 200000000,
\r
52 "control_program": "00140d074bc86bd388a45f1c8911a41b8f0705d9058b",
\r
53 "address": "bm1qp5r5hjrt6wy2ghcu3yg6gxu0quzajpvtsm2gnc"
\r
56 "status_fail": false,
\r
57 "mux_id": "0e97230a7347967764fd77c8cfa96b38ec6ff08465300a01900c645dfb694f24"
\r
62 public void testMustWriteForHash() throws Exception {
\r
63 Entry entry = new Entry() {
\r
65 public String typ() {
\r
70 public void writeForHash(ByteArrayOutputStream out) {
\r
75 ByteArrayOutputStream out = new ByteArrayOutputStream();
\r
76 entry.mustWriteForHash(out, (byte) 2);
\r
77 assert Hex.toHexString(out.toByteArray()).equals("02");
\r
80 entry.mustWriteForHash(out, 1L);
\r
81 assert Hex.toHexString(out.toByteArray()).equals("0100000000000000");
\r
84 entry.mustWriteForHash(out, 0x3456584738473837L);
\r
85 assert Hex.toHexString(out.toByteArray()).equals("3738473847585634");
\r
88 entry.mustWriteForHash(out, new byte[]{0x12, 0x34, (byte) 0x85});
\r
89 assert Hex.toHexString(out.toByteArray()).equals("03123485");
\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
96 entry.mustWriteForHash(out, "hello, 世界");
\r
97 assert Hex.toHexString(out.toByteArray()).equals("0d68656c6c6f2c20e4b896e7958c");
\r
100 entry.mustWriteForHash(out, new String[]{"hi", "你好", "hello"});
\r
101 assert Hex.toHexString(out.toByteArray()).equals("0302686906e4bda0e5a5bd0568656c6c6f");
\r
104 String hash = "d8ab56a5c9296f591db071a8b63f395e1485b12d4b105b49fee287c03888331f";
\r
105 entry.mustWriteForHash(out, new Hash(hash));
\r
106 assert Hex.toHexString(out.toByteArray()).equals(hash);
\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
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