5 Java implementation of signing transaction offline.
\r
9 #### Add dependency to your project
\r
11 1. first get source code
\r
14 git clone https://github.com/Bytom/bytom-java-sdk.git
\r
17 2. install to maven repository
\r
20 $ mvn clean install -DskipTests
\r
26 <groupId>io.bytom</groupId>
\r
27 <artifactId>tx-signer</artifactId>
\r
28 <version>1.0.2</version>
\r
34 #### build transaction with spend input
\r
36 String btmAssetID = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
\r
38 // create spend input
\r
39 SpendInput input = new SpendInput();
\r
40 input.setAssetId(btmAssetID);
\r
41 input.setAmount(9800000000L);
\r
43 // control program of spend utxo
\r
44 input.setProgram("0014cb9f2391bafe2bc1159b2c4c8a0f17ba1b4dd94e");
\r
46 // source position of spend utxo
\r
47 input.setSourcePosition(2);
\r
49 // source id of spend utxo
\r
50 input.setSourceID("4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adea");
\r
52 // is the spend utxo used for change
\r
53 input.setChange(true);
\r
55 // BIP protocol for derived paths, default BIP44
\r
56 input.setBipProtocol(BIPProtocol.BIP32);
\r
58 // contorl program index of spend utxo
\r
59 input.setControlProgramIndex(457);
\r
62 input.setKeyIndex(1);
\r
64 // provide a root private key for signing
\r
65 input.setRootPrivateKey("4864bae85cf38bfbb347684abdbc01e311a24f99e2c7fe94f3c071d9c83d8a5a349722316972e382c339b79b7e1d83a565c6b3e7cf46847733a47044ae493257");
\r
67 // build transaction with signature
\r
68 Transaction tx = new Transaction.Builder()
\r
70 .addOutput(new Output(btmAssetID, 8800000000L, "0014a82f02bc37bc5ed87d5f9fca02f8a6a7d89cdd5c"))
\r
71 .addOutput(new Output(btmAssetID, 900000000L, "00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66"))
\r
75 String rawTransaction = tx.rawTransaction();
\r
78 #### build transaction with issuance input
\r
80 IssuanceInput issuanceInput = new IssuanceInput();
\r
81 issuanceInput.setAssetId("7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad14");
\r
82 issuanceInput.setAmount(100000000000L);
\r
85 issuanceInput.setProgram("ae2054a71277cc162eb3eb21b5bd9fe54402829a53b294deaed91692a2cd8a081f9c5151ad");
\r
86 issuanceInput.setNonce("ac9d5a527f5ab00a");
\r
89 issuanceInput.setKeyIndex(5);
\r
91 // raw asset definition
\r
92 issuanceInput.setRawAssetDefinition("7b0a202022646563696d616c73223a20382c0a2020226465736372697074696f6e223a207b7d2c0a2020226e616d65223a2022222c0a20202273796d626f6c223a2022220a7d");
\r
94 // provide a root private key for signing
\r
95 issuanceInput.setRootPrivateKey("4864bae85cf38bfbb347684abdbc01e311a24f99e2c7fe94f3c071d9c83d8a5a349722316972e382c339b79b7e1d83a565c6b3e7cf46847733a47044ae493257");
\r
97 SpendInput spendInput = new SpendInput();
\r
98 spendInput.setAssetId(btmAssetID);
\r
99 spendInput.setAmount(9800000000L);
\r
100 spendInput.setProgram("0014cb9f2391bafe2bc1159b2c4c8a0f17ba1b4dd94e");
\r
101 spendInput.setKeyIndex(1);
\r
102 spendInput.setChange(true);
\r
103 spendInput.setSourceID("4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adea");
\r
104 spendInput.setSourcePosition(2);
\r
105 spendInput.setControlProgramIndex(457);
\r
106 spendInput.setRootPrivateKey("4864bae85cf38bfbb347684abdbc01e311a24f99e2c7fe94f3c071d9c83d8a5a349722316972e382c339b79b7e1d83a565c6b3e7cf46847733a47044ae493257");
\r
108 Transaction tx = new Transaction.Builder()
\r
109 .addInput(issuanceInput)
\r
110 .addInput(spendInput)
\r
111 .addOutput(new Output("7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad14", 100000000000L, "001437e1aec83a4e6587ca9609e4e5aa728db7007449"))
\r
112 .addOutput(new Output(btmAssetID, 9700000000L, "00148be1104e04734e5edaba5eea2e85793896b77c56"))
\r
116 String rawTx = tx.rawTransaction();
\r