OSDN Git Service

Merge pull request #935 from Bytom/dev
[bytom/bytom.git] / README.md
index 29a711d..d9926b1 100644 (file)
--- a/README.md
+++ b/README.md
@@ -13,14 +13,23 @@ Bytom
     * [Get the source code](#get-the-source-code)
     * [Build](#build)
 * [Example](#example)
-  * [Create and launch a single node](#create-and-launch-a-single-node)
-    * [Create an account](#create-an-account)
-    * [Create an asset](#create-an-asset)
-    * [Issue an asset](#issue-an-asset)
-    * [Transfer an asset](#transfer-an-asset)
-    * [Transfer btm](#transfer-btm)
-  * [Set up a wallet and manage the key](#set-up-a-wallet-and-manage-the-key)
-  * [Multiple node](#multiple-node)
+  * [Initialize](#initialize)
+  * [launch](#launch)
+    * [Dashboard](#dashboard)
+  * [Create key](#create-key)
+  * [Create account](#create-account)
+    * [Multi-signature account](#multi-signature-account)
+  * [Create asset](#create-asset)
+    * [Multi-signature asset](#multi-signature-asset)
+  * [Sending transaction](#sending-transaction)
+    * [Issue](#issue)
+      * [`build-transaction`](#build-transaction)
+      * [`sign-submit-transaction`](#sign-submit-transaction)
+    * [Spend](#spend)
+      * [`create-account-receiver`](#create-account-receiver)
+      * [`build-transaction`](#build-transaction-1)
+      * [`sign-submit-transaction`](#sign-submit-transaction-1)
+    * [Transfer BTM](#transfer-btm)
 * [Running Bytom in Docker](#running-bytom-in-docker)
 * [Contributing](#contributing)
 * [License](#license)
@@ -33,9 +42,8 @@ Bytom is software designed to operate and connect to highly scalable blockchain
 
 In the current state `bytom` is able to:
 
-- Issue assets
-- Manage account as well as asset
-- Spend assets
+- Manage key, account as well as asset
+- Send transactions, i.e., issue, spend and retire asset
 
 ## Build from source
 
@@ -66,146 +74,398 @@ $ make bytomd    # build bytomd
 $ make bytomcli  # build bytomcli
 ```
 
+When successfully building the project, the `bytom` and `bytomcli` binary should be present in `cmd/bytomd` and `cmd/bytomcli` directory, respectively.
+
 ## Example
 
-Currently, bytom is still in active development and a ton of work needs to be done, but we also provide the following content for these eager to do something with `bytom`.
+Currently, bytom is still in active development and a ton of work needs to be done, but we also provide the following content for these eager to do something with `bytom`. This section won't cover all the commands of `bytomd` and `bytomcli` at length, for more information, please the help of every command, e.g., `bytomcli help`.
 
-### Create and launch a single node
+### Initialize
 
-When successfully building the project, the `bytom` and `bytomcli` binary should be present in `cmd/bytomd` and `cmd/bytomcli` directory, respectively. The next step is to initialize the node:
+First of all, initialize the node:
 
 ```bash
 $ cd ./cmd/bytomd
 $ ./bytomd init --chain_id testnet
 ```
 
-After that, you'll see `.bytom` generated in current directory, then launch the single node:
+There are two options for the flag `--chain_id`:
+
+- `testnet`: connect to the testnet.
+- `mainnet`: standalone mode.
+
+After that, you'll see `.bytomd` generated in current directory, then launch the node.
+
+### launch
 
 ``` bash
-$ ./bytomd node --wallet.enable
+$ ./bytomd node --mining
 ```
 
-Given the `bytom` node is running, the general workflow is as follows:
+available flags for `bytomd node`:
 
-- create an account
-- create an asset
-- create/sign/submit a transaction to transfer an asset
-- query the assets on-chain
+```
+      --auth.disable                Disable rpc access authenticate
+      --mining                      Enable mining
+      --p2p.dial_timeout int        Set dial timeout (default 3)
+      --p2p.handshake_timeout int   Set handshake timeout (default 30)
+      --p2p.laddr string            Node listen address.
+      --p2p.max_num_peers int       Set max num peers (default 50)
+      --p2p.pex                     Enable Peer-Exchange
+      --p2p.seeds string            Comma delimited host:port seed nodes
+      --p2p.skip_upnp               Skip UPNP configuration
+      --prof_laddr string           Use http to profile bytomd programs
+      --wallet.disable              Disable wallet
+      --web.closed                  Lanch web browser or not
+```
 
+Given the `bytomd` node is running, the general workflow is as follows:
 
-#### Create an account
+- create key, then you can create account and asset.
+- send transaction, i.e., build, sign and submit transaction.
+- query all kinds of information, let's say, avaliable key, account, key, balances, transactions, etc.
 
-Create an account named `alice`:
+#### Dashboard
+
+Access the dashboard:
 
 ```bash
-$ ./bytomcli create-account alice
-xprv:<alice_account_private_key>
-responses:<create-account-responses>
-account id:<alice_account_id>
+$ open http://localhost:9888/
 ```
 
-Check out the new created account:
+### Create key
+
+You can create a key with the following command:
 
 ```bash
-$ ./bytomcli list-accounts
+$ ./bytomcli create-key alice 123
+{
+  "alias": "alice",
+  "xpub": "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+}
 ```
 
-#### Create an asset
+list the keys:
 
-Create an asset named `gold`:
+```bash
+$ ./bytomcli list-keys
+```
+
+### Create account
+
+Create an account named `alice`:
 
 ```bash
-$ ./bytomcli create-asset gold
-xprv:<gold_asset_private_key>
-xpub:<gold_asset_public_key>
-responses:<create-asset-responses>
-asset id:<gold_asset_id>
+$ ./bytomcli create-account alice d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb
+{
+  "alias": "alice",
+  "id": "0CIT3OI100A04",
+  "key_index": 1,
+  "quorum": 1,
+  "xpubs": [
+    "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+  ]
+}
 ```
 
-Check out the new created asset:
+Check out the new created account:
 
 ```bash
-$ ./bytomcli list-assets
+$ ./bytomcli list-accounts
 ```
 
-#### Issue an asset
+#### Multi-signature account
 
-Since the account alice and the asset `gold` are ready, issue `gold` to alice:
+```bash
+$ ./bytomcli list-keys
+0 :
+{
+  "alias": "default",
+  "xpub": "336150c3a63411f597d94aa26fe714a348b2e93f2c303d526bb225e5804466e366e58cff81fddaed7879586b92132d63c68b419856f85ca06abfc490a9990c38"
+}
+1 :
+{
+  "alias": "alice",
+  "xpub": "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+}
+2 :
+{
+  "alias": "bob",
+  "xpub": "cb6057b683c5a341ea29e02ec5bb1e53691eb3b14c285138175d42b07d0551798977fc50203bde1dc2827a07f6f26237fa8ec3c6a2ef272ed80f9211f9c6ac64"
+}
+```
 
 ```bash
-$ ./bytomcli create-account bob
+$ ./bytomcli create-account multi_account d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb cb6057b683c5a341ea29e02ec5bb1e53691eb3b14c285138175d42b07d0551798977fc50203bde1dc2827a07f6f26237fa8ec3c6a2ef272ed80f9211f9c6ac64 -q 2
+{
+  "alias": "multi_account",
+  "id": "0CIT6J0QG0A06",
+  "key_index": 1,
+  "quorum": 2,
+  "xpubs": [
+    "cb6057b683c5a341ea29e02ec5bb1e53691eb3b14c285138175d42b07d0551798977fc50203bde1dc2827a07f6f26237fa8ec3c6a2ef272ed80f9211f9c6ac64",
+    "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+  ]
+}
 ```
 
-Firstly, Alice issue `<issue_amount>`, e.g., 10000, `gold`:
+### Create asset
+
+Create an asset named `GOLD`:
 
 ```bash
-$ ./bytomcli sub-create-issue-tx <alice_account_id> <gold_asset_id> <issue_amount> <gold_asset_private_key> <account_private_key>
+$ ./bytomcli create-asset GOLD d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb
+{
+  "alias": "GOLD",
+  "definition": {},
+  "id": "43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397",
+  "issuance_program": "ae2035b53ed466a40e3d1073ffdcf1c7d0c4ffc439391f9ef5999b365ea467c96a3c5151ad",
+  "keys": [
+    {
+      "asset_derivation_path": [
+        "000100000000000000"
+      ],
+      "asset_pubkey": "35b53ed466a40e3d1073ffdcf1c7d0c4ffc439391f9ef5999b365ea467c96a3c0e8b6d5a67bd5fc66d7a19d4754df6de6cbf3b40fc6b02a75f140d77a1dbcda8",
+      "root_xpub": "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+    }
+  ],
+  "quorum": 1
+}
 ```
 
-When the transaction is on-chain, query the balances:
+Check out the new created asset:
 
 ```bash
-# Alice should have 10000 gold now
-$ ./bytomcli list-balances
+$ ./bytomcli list-assets
 ```
 
-#### Transfer an asset
+#### Multi-signature asset
 
-Alice pays Bob `<payment_amount>`, e.g., 1000, `gold`:
-- Bob creates receiver program
 ```bash
-$./bytomcli create-account-receiver bob
+$ ./bytomcli create-asset SILVER d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb cb6057b683c5a341ea29e02ec5bb1e53691eb3b14c285138175d42b07d0551798977fc50203bde1dc2827a07f6f26237fa8ec3c6a2ef272ed80f9211f9c6ac64
+{
+  "alias": "SILVER",
+  "definition": {},
+  "id": "50cd5b0ecfdfe388fc0bc6b74df6becd94f1e52e1913a449a473bba87745fe30",
+  "issuance_program": "ae20936178877c2a3a2df9c3733e2ac6f7e99477314c54e214348abb0d4cbdace810208d064a125805493cb99be9c19ed6a356c97753fdfe52fade337fa598c3c59b8c5152ad",
+  "keys": [
+    {
+      "asset_derivation_path": [
+        "000200000000000000"
+      ],
+      "asset_pubkey": "936178877c2a3a2df9c3733e2ac6f7e99477314c54e214348abb0d4cbdace810f9ef97f8edd43707069426ff1ac1d2fe96d23c5e005ac5cb52be2a7de82d2a92",
+      "root_xpub": "cb6057b683c5a341ea29e02ec5bb1e53691eb3b14c285138175d42b07d0551798977fc50203bde1dc2827a07f6f26237fa8ec3c6a2ef272ed80f9211f9c6ac64"
+    },
+    {
+      "asset_derivation_path": [
+        "000200000000000000"
+      ],
+      "asset_pubkey": "8d064a125805493cb99be9c19ed6a356c97753fdfe52fade337fa598c3c59b8c4eb0b479d566c0efe72ab69f2273ab4b6a6dce9e1e3657839698be6c53e9d04a",
+      "root_xpub": "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+    }
+  ],
+  "quorum": 1
+}
 ```
-responses like this:
+
+### Sending transaction
+
+Every asset-related action is trigger via sending a transaction, which requires two steps to complete, i.e., `build-transaction` and `sign-submit-transaction`. Don't forget to enable `--mining`.
+
+#### Issue
+
+##### `build-transaction`
+
+Let's say, issue 10000 GOLD to alice:
+```bash
+$ ./bytomcli create-account-receiver alice
+{
+  "address": "bm1q7s24rra4j05yhec9chry2c9trd6qa8gjr6cue3",
+  "control_program": "0014f415518fb593e84be705c5c64560ab1b740e9d12"
+}
 ```
-responses:map[control_program:766baa207b73a71a9e8a77ace69bdd5d68fdfacc841bfdd5d6e0057a331846c24ac222e35151ad696c00c0 expires_at:2017-12-30T17:10:01.915062361+08:00]
+
+```bash
+$ ./bytomcli build-transaction -t issue alice GOLD 10000 -a bm1q7s24rra4j05yhec9chry2c9trd6qa8gjr6cue3 --alias
+Template Type: issue
+{"allow_additional_actions":false,"raw_transaction":"070100020160015ee56e4d688e98160067fa25be520d3a5a90e63838b5ff6363997c7c9b962796daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094ebdc030501160014f415518fb593e84be705c5c64560ab1b740e9d120100012c000887c3aad437888d0143e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397904e29000125ae2035b53ed466a40e3d1073ffdcf1c7d0c4ffc439391f9ef5999b365ea467c96a3c5151ad0002013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80baa6d30301160014c0c4fb15dd132be34e6dcaea3c38df1869ebcdbf00013a43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397904e01160014f415518fb593e84be705c5c64560ab1b740e9d1200","signing_instructions":[{"position":0,"witness_components":[{"keys":[{"derivation_path":["010100000000000000","0200000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"},{"type":"data","value":"4dc1e7f4e9710378cb80f180e159005a5ca8934d68df6136b782fe08d23d7b0a"}]},{"position":1,"witness_components":[{"keys":[{"derivation_path":["000100000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"}]}]}
 ```
-- off-chain transfers receiver program to alice
-- Alice builds transaction and then makes this transacion on-chain
+
+The response of `build-transaction` will be used in the following `sign-submit-transaction` command.
+
+##### `sign-submit-transaction`
+
 ```bash
-$./bytomcli sub-control-receiver-tx <account_xprv> <account_id> <asset_id> <spend_amount> <control_program>
+$ ./bytomcli sign-submit-transaction '{"allow_additional_actions":false,"raw_transaction":"070100020160015ee56e4d688e98160067fa25be520d3a5a90e63838b5ff6363997c7c9b962796daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094ebdc030501160014f415518fb593e84be705c5c64560ab1b740e9d120100012c000887c3aad437888d0143e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397904e29000125ae2035b53ed466a40e3d1073ffdcf1c7d0c4ffc439391f9ef5999b365ea467c96a3c5151ad0002013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80baa6d30301160014c0c4fb15dd132be34e6dcaea3c38df1869ebcdbf00013a43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397904e01160014f415518fb593e84be705c5c64560ab1b740e9d1200","signing_instructions":[{"position":0,"witness_components":[{"keys":[{"derivation_path":["010100000000000000","0200000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"},{"type":"data","value":"4dc1e7f4e9710378cb80f180e159005a5ca8934d68df6136b782fe08d23d7b0a"}]},{"position":1,"witness_components":[{"keys":[{"derivation_path":["000100000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"}]}]}' -p 123 
+
+{
+  "tx_id": "62fe1716f2b8fe012578a3a8f6b02bd2fa548fef5bba792ea78673e07b38198d"
+}
 ```
-- list balance
+
+When the transaction is on-chain, query the balances:
+
 ```bash
-$./bytomcli list-balances
+# alice should have 10000 GOLD now
+$ ./bytomcli list-balances
+0 :
+{
+  "account_alias": "default",
+  "account_id": "0CIT2D2O00A02",
+  "amount": 2098770000000,
+  "asset_alias": "BTM",
+  "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+}
+1 :
+{
+  "account_alias": "alice",
+  "account_id": "0CIT3OI100A04",
+  "amount": 10000,
+  "asset_alias": "GOLD",
+  "asset_id": "43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397"
+}
+2 :
+{
+  "account_alias": "alice",
+  "account_id": "0CIT3OI100A04",
+  "amount": 4980000000,
+  "asset_alias": "BTM",
+  "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+}
 ```
 
-#### Transfer btm
-As above, just `btm_asset_id`=ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+#### Spend
+
+Alice pays Bob `<payment_amount>`, e.g., 1000, `GOLD`:
+
+##### `create-account-receiver`
+
+Before you transfer an asset to another account, you have to know his `control_program`. This means the receiver needs to send you his `control_program` first.
+
 ```bash
-$./bytomcli sub-control-receiver-tx <account_xprv> <account_id> <btm_asset_id> <spend_amount> <control_program>
+$ ./bytomcli create-account-receiver bob
+{
+  "address": "bm1qhurffd3gqkc3pttqfqpsz8w04jnl5z97798tpt",
+  "control_program": "0014bf0694b62805b110ad604803011dcfaca7fa08be"
+}
 ```
-### Set up a wallet and manage the key
 
-If you have started a bytom node, then you can create an account via `create-key password`, which will generate a `keystore` directory containing the keys under the project directory.
+##### `build-transaction`
 
 ```bash
-$ ./bytomcli create-key account_name password   # Create an account named account_name using password
-$ ./bytomcli delete-key password pubkey         # Delete account pubkey
-$ ./bytomcli reset-password oldpassword newpassword pubkey  # Update password
+# ./bytomcli build-transaction -t spend <sender_account> <asset> <amount> --alias -r <receiver_control_program>
+$ ./bytomcli build-transaction -t spend alice GOLD 1000 --alias -r 0014bf0694b62805b110ad604803011dcfaca7fa08be
+Template Type: spend
+{"allow_additional_actions":false,"raw_transaction":"070100020160015eba7bbf304b94623b1efb414845f701e64e6c63011984e65dcf214d560f505e28ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80baa6d3030001160014c0c4fb15dd132be34e6dcaea3c38df1869ebcdbf0100015d015bba7bbf304b94623b1efb414845f701e64e6c63011984e65dcf214d560f505e2843e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397904e0101160014f415518fb593e84be705c5c64560ab1b740e9d12010003013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80e0e1c903011600144457a5103dc682327fe2ef662f812dce3f97ffae00013a43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397a846011600147460e50dc0b0313d22796c899c28f795872b229600013a43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397e80701160014bf0694b62805b110ad604803011dcfaca7fa08be00","signing_instructions":[{"position":0,"witness_components":[{"keys":[{"derivation_path":["010100000000000000","0300000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"},{"type":"data","value":"eef67105644a1f146ba313a7ea98ceac2534a9f4cf1aa3775b726476db9c3dc0"}]},{"position":1,"witness_components":[{"keys":[{"derivation_path":["010100000000000000","0200000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"},{"type":"data","value":"4dc1e7f4e9710378cb80f180e159005a5ca8934d68df6136b782fe08d23d7b0a"}]}]}
 ```
 
-### Multiple node
+##### `sign-submit-transaction`
+
+```bash
+$ ./bytomcli sign-submit-transaction '{"allow_additional_actions":false,"raw_transaction":"070100020160015eba7bbf304b94623b1efb414845f701e64e6c63011984e65dcf214d560f505e28ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80baa6d3030001160014c0c4fb15dd132be34e6dcaea3c38df1869ebcdbf0100015d015bba7bbf304b94623b1efb414845f701e64e6c63011984e65dcf214d560f505e2843e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397904e0101160014f415518fb593e84be705c5c64560ab1b740e9d12010003013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80e0e1c903011600144457a5103dc682327fe2ef662f812dce3f97ffae00013a43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397a846011600147460e50dc0b0313d22796c899c28f795872b229600013a43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397e80701160014bf0694b62805b110ad604803011dcfaca7fa08be00","signing_instructions":[{"position":0,"witness_components":[{"keys":[{"derivation_path":["010100000000000000","0300000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"},{"type":"data","value":"eef67105644a1f146ba313a7ea98ceac2534a9f4cf1aa3775b726476db9c3dc0"}]},{"position":1,"witness_components":[{"keys":[{"derivation_path":["010100000000000000","0200000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"},{"type":"data","value":"4dc1e7f4e9710378cb80f180e159005a5ca8934d68df6136b782fe08d23d7b0a"}]}]}'
+
 
-Get the submodule depenency for the two-node test:
+{
+  "txid": "3bf01bd21d7bbf3eb1c6e27e5646be1c4a7bd5602125eebf28f430246b08c226"
+}
+```
 
 ```bash
-$ git submodule update --init --recursive
+$./bytomcli list-balances
+0 :
+{
+  "account_alias": "default",
+  "account_id": "0CIT2D2O00A02",
+  "amount": 2758790000000,
+  "asset_alias": "BTM",
+  "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+}
+1 :
+{
+  "account_alias": "alice",
+  "account_id": "0CIT3OI100A04",
+  "amount": 9000,
+  "asset_alias": "GOLD",
+  "asset_id": "43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397"
+}
+2 :
+{
+  "account_alias": "alice",
+  "account_id": "0CIT3OI100A04",
+  "amount": 4960000000,
+  "asset_alias": "BTM",
+  "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+}
+3 :
+{
+  "account_alias": "bob",
+  "account_id": "0CITLN2KG0A08",
+  "amount": 1000,
+  "asset_alias": "GOLD",
+  "asset_id": "43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397"
+}
 ```
 
-Create the first node `bytomd0` and second node `bytomd1`:
+#### Transfer BTM
 
 ```bash
-$ cd cmd/bytomd/2node-test
-$ ./test.sh bytomd0  # Start the first node
-$ ./test.sh bytomd1  # Start the second node
+# ./bytomcli build-transaction -t spend <sender_account> <asset> <amount> --alias -r <receiver_control_program>
+$ ./bytomcli build-transaction -t spend alice BTM 1000000000 --alias -r 0014bf0694b62805b110ad604803011dcfaca7fa08be
+Template Type: spend
+{"allow_additional_actions":false,"raw_transaction":"070100020160015ee56e4d688e98160067fa25be520d3a5a90e63838b5ff6363997c7c9b962796daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094ebdc030201160014f415518fb593e84be705c5c64560ab1b740e9d1201000160015e5685c051b6a7f1631e0505ea99a61997c1b8322148321eb864435c8516a5a8eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80e0e1c90300011600144457a5103dc682327fe2ef662f812dce3f97ffae010002013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80869dc003011600146026f938bbcf6b6b90eb9d8fbb8c1725e0ae3d0b00013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094ebdc0301160014bf0694b62805b110ad604803011dcfaca7fa08be00","signing_instructions":[{"position":0,"witness_components":[{"keys":[{"derivation_path":["010100000000000000","0200000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"},{"type":"data","value":"4dc1e7f4e9710378cb80f180e159005a5ca8934d68df6136b782fe08d23d7b0a"}]},{"position":1,"witness_components":[{"keys":[{"derivation_path":["010100000000000000","0400000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"},{"type":"data","value":"2cfbc821a459ef53b9ee4a170b735e54f968f239bf9155712f4b88256f97d54a"}]}]}
 ```
 
-Then we have two nodes:
+```bash
+$ ./bytomcli sign-submit-transaction '{"allow_additional_actions":false,"raw_transaction":"070100020160015ee56e4d688e98160067fa25be520d3a5a90e63838b5ff6363997c7c9b962796daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094ebdc030201160014f415518fb593e84be705c5c64560ab1b740e9d1201000160015e5685c051b6a7f1631e0505ea99a61997c1b8322148321eb864435c8516a5a8eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80e0e1c90300011600144457a5103dc682327fe2ef662f812dce3f97ffae010002013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80869dc003011600146026f938bbcf6b6b90eb9d8fbb8c1725e0ae3d0b00013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094ebdc0301160014bf0694b62805b110ad604803011dcfaca7fa08be00","signing_instructions":[{"position":0,"witness_components":[{"keys":[{"derivation_path":["010100000000000000","0200000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"},{"type":"data","value":"4dc1e7f4e9710378cb80f180e159005a5ca8934d68df6136b782fe08d23d7b0a"}]},{"position":1,"witness_components":[{"keys":[{"derivation_path":["010100000000000000","0400000000000000"],"xpub":"d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"}],"quorum":1,"signatures":null,"type":"raw_tx_signature"},{"type":"data","value":"2cfbc821a459ef53b9ee4a170b735e54f968f239bf9155712f4b88256f97d54a"}]}]}' -p 123
+
+
+{
+  "tx_id": "1c84c8d8dae7675114f9de970e221ec9e07e1787f6e72ac6e95a03fced7d22cb"
+}
+```
 
 ```bash
-$ ./bytomcli net-info
-net-info:map[listening:true listeners:[Listener(@192.168.199.43:3332)] peers:[map[node_info:map[listen_addr:192.168.199.43:3333 version:0.1.2 other:[wire_version=0.6.2 p2p_version=0.5.0] pub_key:D6B76D1B4E9D7E4D81BA5FAAE9359302446488495A29D7E70AF84CDFEA186D66 moniker:anonymous network:bytom remote_addr:127.0.0.1:51036] is_outbound:false connection_status:map[RecvMonitor:map[Start:2017-10-30T13:45:47.18+08:00 Bytes:425130 AvgRate:27010 Progress:0 Active:true Idle:1.04e+09 Samples:42 InstRate:4591 CurRate:3540 PeakRate:114908 BytesRem:0 TimeRem:0 Duration:1.574e+10] Channels:[map[RecentlySent:5332 ID:64 SendQueueCapacity:100 SendQueueSize:0 Priority:5]] SendMonitor:map[Active:true Idle:1.24e+09 Bytes:16240 Samples:41 CurRate:125 AvgRate:1032 Progress:0 Start:2017-10-30T13:45:47.18+08:00 Duration:1.574e+10 InstRate:147 PeakRate:4375 BytesRem:0 TimeRem:0]]]]]
+$ ./bytomcli list-balances
+0 :
+{
+  "account_alias": "default",
+  "account_id": "0CIT2D2O00A02",
+  "amount": 3212560000000,
+  "asset_alias": "BTM",
+  "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+}
+1 :
+{
+  "account_alias": "alice",
+  "account_id": "0CIT3OI100A04",
+  "amount": 9000,
+  "asset_alias": "GOLD",
+  "asset_id": "43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397"
+}
+2 :
+{
+  "account_alias": "alice",
+  "account_id": "0CIT3OI100A04",
+  "amount": 3940000000,
+  "asset_alias": "BTM",
+  "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+}
+3 :
+{
+  "account_alias": "bob",
+  "account_id": "0CITLN2KG0A08",
+  "amount": 1000,
+  "asset_alias": "GOLD",
+  "asset_id": "43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397"
+}
+4 :
+{
+  "account_alias": "bob",
+  "account_id": "0CITLN2KG0A08",
+  "amount": 1000000000,
+  "asset_alias": "BTM",
+  "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+}
 ```
 
 ## Running Bytom in Docker
@@ -218,7 +478,7 @@ $ docker build -t bytom .
 
 ## Contributing
 
-Thank you for considering to help out with the source code! Any contributions are highly appreciated, and we are grateful for even the smallest of fixes!
+Thank you for considering helping out with the source code! Any contributions are highly appreciated, and we are grateful for even the smallest of fixes!
 
 If you run into an issue, feel free to [file one](https://github.com/Bytom/bytom/issues/) in this repository. We are glad to help!