OSDN Git Service

Merge pull request #935 from Bytom/dev
[bytom/bytom.git] / README.md
index 20a86a6..d9926b1 100644 (file)
--- a/README.md
+++ b/README.md
@@ -13,13 +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)
-    * [Asset issuance test](#asset-issuance-test)
-    * [Expenditure test](#expenditure-test)
-  * [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)
@@ -32,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
 
@@ -59,58 +68,104 @@ $ git clone https://github.com/Bytom/bytom $GOPATH/src/github.com/bytom
 
 #### Build
 
-- Bytomd
-
 ``` bash
 $ cd $GOPATH/src/github.com/bytom
-$ make install
-$ cd ./cmd/bytomd
-$ go build
+$ make bytomd    # build bytomd
+$ make bytomcli  # build bytomcli
 ```
 
-- Bytomcli
-
-```go
-$ cd $GOPATH/src/github.com/bytom/cmd/bytomcli
-$ go build
-```
+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
+$ ./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 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.
 
+#### Dashboard
 
-#### Create an account
+Access the dashboard:
+
+```bash
+$ open http://localhost:9888/
+```
+
+### Create key
+
+You can create a key with the following command:
+
+```bash
+$ ./bytomcli create-key alice 123
+{
+  "alias": "alice",
+  "xpub": "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+}
+```
+
+list the keys:
+
+```bash
+$ ./bytomcli list-keys
+```
+
+### Create account
 
 Create an account named `alice`:
 
 ```bash
-$ ./bytomcli create-account alice
-xprv:<alice_account_private_key>
-responses:<create-account-responses>
-account id:<alice_account_id>
+$ ./bytomcli create-account alice d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb
+{
+  "alias": "alice",
+  "id": "0CIT3OI100A04",
+  "key_index": 1,
+  "quorum": 1,
+  "xpubs": [
+    "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+  ]
+}
 ```
 
 Check out the new created account:
@@ -119,16 +174,63 @@ Check out the new created account:
 $ ./bytomcli list-accounts
 ```
 
-#### Create an asset
+#### Multi-signature account
+
+```bash
+$ ./bytomcli list-keys
+0 :
+{
+  "alias": "default",
+  "xpub": "336150c3a63411f597d94aa26fe714a348b2e93f2c303d526bb225e5804466e366e58cff81fddaed7879586b92132d63c68b419856f85ca06abfc490a9990c38"
+}
+1 :
+{
+  "alias": "alice",
+  "xpub": "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+}
+2 :
+{
+  "alias": "bob",
+  "xpub": "cb6057b683c5a341ea29e02ec5bb1e53691eb3b14c285138175d42b07d0551798977fc50203bde1dc2827a07f6f26237fa8ec3c6a2ef272ed80f9211f9c6ac64"
+}
+```
+
+```bash
+$ ./bytomcli create-account multi_account d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb cb6057b683c5a341ea29e02ec5bb1e53691eb3b14c285138175d42b07d0551798977fc50203bde1dc2827a07f6f26237fa8ec3c6a2ef272ed80f9211f9c6ac64 -q 2
+{
+  "alias": "multi_account",
+  "id": "0CIT6J0QG0A06",
+  "key_index": 1,
+  "quorum": 2,
+  "xpubs": [
+    "cb6057b683c5a341ea29e02ec5bb1e53691eb3b14c285138175d42b07d0551798977fc50203bde1dc2827a07f6f26237fa8ec3c6a2ef272ed80f9211f9c6ac64",
+    "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+  ]
+}
+```
+
+### Create asset
 
-Create an asset named `gold`:
+Create an asset named `GOLD`:
 
 ```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-asset GOLD d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb
+{
+  "alias": "GOLD",
+  "definition": {},
+  "id": "43e89d8a5d8f4bb2fcd92621ace61d476c8237075ada6a9e80db931bbdb6c397",
+  "issuance_program": "ae2035b53ed466a40e3d1073ffdcf1c7d0c4ffc439391f9ef5999b365ea467c96a3c5151ad",
+  "keys": [
+    {
+      "asset_derivation_path": [
+        "000100000000000000"
+      ],
+      "asset_pubkey": "35b53ed466a40e3d1073ffdcf1c7d0c4ffc439391f9ef5999b365ea467c96a3c0e8b6d5a67bd5fc66d7a19d4754df6de6cbf3b40fc6b02a75f140d77a1dbcda8",
+      "root_xpub": "d91df216da6c5641ef454c8da1e56362f86ed80d8b8fc26ab77746e1b92d6d3aa8023fe300e4c74036460d01349e4eb25cb3d7379bad855879017bc1c76165bb"
+    }
+  ],
+  "quorum": 1
+}
 ```
 
 Check out the new created asset:
@@ -137,80 +239,233 @@ Check out the new created asset:
 $ ./bytomcli list-assets
 ```
 
-#### Asset issuance test
-
-Since the account `alice` and the asset `gold` are ready, we need to create another account `bob`, which is also neccessary for the following Expenditure test:
+#### Multi-signature asset
 
 ```bash
-$ ./bytomcli create-account 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
+}
 ```
 
-Firstly, Alice issue `<issue_amount>`, e.g., 10000, `gold`:
+### 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 sub-create-issue-tx <alice_account_id> <bob_account_id> <gold_asset_id> <gold_asset_private_key> <issue_amount>
+$ ./bytomcli create-account-receiver alice
+{
+  "address": "bm1q7s24rra4j05yhec9chry2c9trd6qa8gjr6cue3",
+  "control_program": "0014f415518fb593e84be705c5c64560ab1b740e9d12"
+}
 ```
 
-When the transaction above is mined, query the balances:
-
 ```bash
-# Alice should have 10000 gold now
-$ ./bytomcli list-balances
+$ ./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"}]}]}
 ```
 
-#### Expenditure test
+The response of `build-transaction` will be used in the following `sign-submit-transaction` command.
+
+##### `sign-submit-transaction`
 
-- Alice -> Bob
+```bash
+$ ./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"
+}
+```
 
-Alice pays Bob `<payment_amount>`, e.g., 1000, `gold`:
+When the transaction is on-chain, query the balances:
 
 ```bash
-$ ./bytomcli sub-spend-account-tx <alice_account_id> <bob_account_id> <gold_asset_id> <alice_private_key> <payment_amount>
-# In our case, after Alice pays Bob 1000 gold, the amount of Alice's gold should be 9000, Bob's balances should be 1000
+# 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"
+}
 ```
 
-- Bob -> Alice
+#### Spend
 
-Bob pays Alice `<payment_amount>`, e.g., 500, `gold`:
+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-spend-account-tx <bob_account_id> <alice_account_id> <gold_asset_id> <bob_private_key> <payment_amount>
-# In our case, after Bob pays Alice 500 gold, the amount of Alice's gold should be 9500, Bob's balances should be 500
-$ ./bytomcli list-balances
+$ ./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
-$ ./bycomcli 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
@@ -223,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!