--- /dev/null
+\r
+\r
+# tx_signer \r
+ \r
+Java implementation of signing transaction offline.\r
+ \r
+## Pre \r
+ \r
+#### Add dependency to your project \r
+ \r
+1. first get source code \r
+ \r
+ ```\r
+ git clone https://github.com/Bytom/bytom-java-sdk.git \r
+ ``` \r
+ \r
+2. install to maven repository\r
+ \r
+ ``` \r
+ $ mvn clean install -DskipTests \r
+ ``` \r
+ \r
+3. add dependency\r
+ ```xml\r
+ <dependency>\r
+ <groupId>io.bytom</groupId>\r
+ <artifactId>tx-signer</artifactId>\r
+ <version>1.0.0</version>\r
+ </dependency>\r
+ ```\r
+ \r
+## Example\r
+\r
+#### build transaction with spend input\r
+```\r
+ String btmAssetID = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";\r
+ \r
+ // create spend input\r
+ SpendInput input = new SpendInput();\r
+ input.setAssetId(btmAssetID);\r
+ input.setAmount(9800000000L);\r
+ \r
+ // control program of spend utxo\r
+ input.setProgram("0014cb9f2391bafe2bc1159b2c4c8a0f17ba1b4dd94e");\r
+ \r
+ // source position of spend utxo\r
+ input.setSourcePosition(2);\r
+ \r
+ // source id of spend utxo\r
+ input.setSourceID("4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adea");\r
+ \r
+ // is the spend utxo used for change\r
+ input.setChange(true);\r
+ \r
+ // BIP protocol for derived paths, default BIP44\r
+ input.setBipProtocol(BIPProtocol.BIP32);\r
+ \r
+ // contorl program index of spend utxo\r
+ input.setControlProgramIndex(457);\r
+ \r
+ // account index\r
+ input.setKeyIndex(1);\r
+ \r
+ // provide a root private key for signing\r
+ input.setRootPrivateKey("4864bae85cf38bfbb347684abdbc01e311a24f99e2c7fe94f3c071d9c83d8a5a349722316972e382c339b79b7e1d83a565c6b3e7cf46847733a47044ae493257");\r
+\r
+ // build transaction with signature\r
+ Transaction tx = new Transaction.Builder()\r
+ .addInput(input)\r
+ .addOutput(new Output(btmAssetID, 8800000000L, "0014a82f02bc37bc5ed87d5f9fca02f8a6a7d89cdd5c"))\r
+ .addOutput(new Output(btmAssetID, 900000000L, "00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66"))\r
+ .setTimeRange(0)\r
+ .build();\r
+\r
+ String rawTransaction = tx.rawTransaction();\r
+```\r
+\r
+#### build transaction with issuance input\r
+```\r
+ IssuanceInput issuanceInput = new IssuanceInput();\r
+ issuanceInput.setAssetId("7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad14");\r
+ issuanceInput.setAmount(100000000000L);\r
+ \r
+ // issuance program\r
+ issuanceInput.setProgram("ae2054a71277cc162eb3eb21b5bd9fe54402829a53b294deaed91692a2cd8a081f9c5151ad");\r
+ issuanceInput.setNonce("ac9d5a527f5ab00a");\r
+ \r
+ // asset index\r
+ issuanceInput.setKeyIndex(5);\r
+ \r
+ // raw asset definition\r
+ issuanceInput.setRawAssetDefinition("7b0a202022646563696d616c73223a20382c0a2020226465736372697074696f6e223a207b7d2c0a2020226e616d65223a2022222c0a20202273796d626f6c223a2022220a7d");\r
+ \r
+ // provide a root private key for signing\r
+ issuanceInput.setRootPrivateKey("4864bae85cf38bfbb347684abdbc01e311a24f99e2c7fe94f3c071d9c83d8a5a349722316972e382c339b79b7e1d83a565c6b3e7cf46847733a47044ae493257");\r
+\r
+ SpendInput spendInput = new SpendInput();\r
+ spendInput.setAssetId(btmAssetID);\r
+ spendInput.setAmount(9800000000L);\r
+ spendInput.setProgram("0014cb9f2391bafe2bc1159b2c4c8a0f17ba1b4dd94e");\r
+ spendInput.setKeyIndex(1);\r
+ spendInput.setChange(true);\r
+ spendInput.setSourceID("4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adea");\r
+ spendInput.setSourcePosition(2);\r
+ spendInput.setControlProgramIndex(457);\r
+ spendInput.setRootPrivateKey("4864bae85cf38bfbb347684abdbc01e311a24f99e2c7fe94f3c071d9c83d8a5a349722316972e382c339b79b7e1d83a565c6b3e7cf46847733a47044ae493257");\r
+\r
+ Transaction tx = new Transaction.Builder()\r
+ .addInput(issuanceInput)\r
+ .addInput(spendInput)\r
+ .addOutput(new Output("7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad14", 100000000000L, "001437e1aec83a4e6587ca9609e4e5aa728db7007449"))\r
+ .addOutput(new Output(btmAssetID, 9700000000L, "00148be1104e04734e5edaba5eea2e85793896b77c56"))\r
+ .setTimeRange(0)\r
+ .build();\r
+\r
+ String rawTx = tx.rawTransaction();\r
+\r
+```
\ No newline at end of file