OSDN Git Service

Merge pull request #7 from Bytom/merge_tx_signer
[bytom/bytom-java-sdk.git] / tx-signer / README.md
diff --git a/tx-signer/README.md b/tx-signer/README.md
new file mode 100755 (executable)
index 0000000..b5afb72
--- /dev/null
@@ -0,0 +1,118 @@
+\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