比特股私有链环境搭建

in #bitshares7 years ago

 官方推荐使用ubuntu16.04版本,参考官方wiki:https://github.com/bitshares/bitshares-core/wiki/BUILD_UBUNTU 

1.安装编译依赖的相关库

sudo apt-get update
sudo apt-get install autoconf cmake git libboost-all-dev libssl-dev g++ libcurl4-openssl-dev

2.下载bitshares源代码编译

源代码下与编译见如下代码所示 

git clone https://github.com/bitshares/bitshares-core.git
cd bitshares-core
git checkout
git submodule update --init --recursive
cmake -DBOOST_ROOT="$BOOST_ROOT" -DCMAKE_BUILD_TYPE=Release .
make -j4

编译完成后,会生成见证节点程序(programs/witness_node/witness_node) 和钱包程序(programs/cli_wallet/cli_wallet)
为方面使用可以通过创建对应应用程序的链接: 

ln -s programs/witness_node/witness_node /usr/local/bin/witness_node

ln -s programs/cli_wallet/cli_wallet  /usr/local/bin/cli_wallet

当然也可以编译见证节点和钱包节点: 

make witness_node cli_wallet

注:Bitshare依赖openSSL 1.0.x,如果版本在这个之上调整到对应的版本 

3.部署单机私有网络

创世文件定义了网络的初始状态 

默认创世文件

石墨烯代码库有一个默认的创世区块,包含所有证人,委员会成员和基金以及一个名为nathan的帐户,它从下面私钥获得: 

5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

定制创世文件

运行以下命令创建一个创世文件: 

$ mkdir Test
$ cd Test
$ witness_node --create-genesis-json my-genesis.json

在Test目录里会生成my-genesis.json文件和witness_node_data_dir目录,可以同修改my-genesis.json配置来定制网络初始状态 主要可以定制以下内容:  

  • 创世账户、名字以及公钥
  • 资产和初始分配(包括核心资产)
  • 区块链的初始参数(包括费用)
  • 初始见证人的账户密钥(可以是任何账户)

起动见证人节点

witness_node --data-dir data --genesis-json my-genesis.json

会出现一段Message,可以在Message的最下方看到ChainID,如下所示: 

2900598ms th_a       main.cpp:246                  main                 ] Started BitShares node on a chain with 0 blocks.
2900598ms th_a       main.cpp:247                  main                 ] Chain ID is e6e736cc89c25e5a9f31550e14d7cff3d5900ca9296d6f3ed4546be2

可以看到ChainId: 

e6e736cc89c25e5a9f31550e14d7cff3d5900ca9296d6f3ed4546be2

同时会生成一个Data目录,在Data会生成一个config.ini,可以通过修改Config.ini来修改见证节点的配置信息。 有一下两种方式来启动见证人节点: 

命令行参数的方式

witness_node --rpc-endpoint "127.0.0.1:8090" --enable-stale-production --data-dir data --seed-nodes "[]" --genesis-json "my-genesis.json"

修改config.init配置文件的方式

打开data/conig.init文件修改对应的参数: 

rpc-endpoint = 127.0.0.1:11011
genesis-json = my-genesis.json
enable-stale-production = true

增家如下节点,不知道测试环境增加多个为啥会出问题: 

witness-id = "1.6.1"

上面的列表授权见证人节点代表列出的证人id产生块。 通常每个见证人都在不同的节点上,但为了这个私人测试网的目的,我们将从所有在单个节点上签名块的目击者开始。 在config.ini文件中已经提供了所有这些证人ID(需要签名块)的私钥:
修改成功后,运行如下命令: 

witness_node --data-dir data

运行成功的话会出现如下信息: 

2718639ms th_a       application.cpp:206           reset_p2p_node       ] Configured p2p node to listen on 0.0.0.0:45531
2718642ms th_a       application.cpp:281           reset_websocket_serv ] Configured websocket rpc to listen on 127.0.0.1:11011
2718643ms th_a       witness.cpp:122               plugin_startup       ] witness plugin:  plugin_startup() begin
2718643ms th_a       witness.cpp:127               plugin_startup       ] Launching block production for 1 witnesses.
2718643ms th_a       witness.cpp:138               plugin_startup       ] witness plugin:  plugin_startup() end
2718643ms th_a       main.cpp:246                  main                 ] Started BitShares node on a chain with 25 blocks.
2718643ms th_a       main.cpp:247                  main                 ] Chain ID is 7be1c10cbe48776d5c52ac2b2da8e259533fd9acff44e943d9efe69115c4bfa5

4.命令行钱包的使用

再开一个命令行窗口,运行如下命令,chain-id需要换成对应生成的chainid 

cli_wallet --wallet-file=my-wallet.json --chain-id 7be1c10cbe48776d5c52ac2b2da8e259533fd9acff44e943d9efe69115c4bfa5  --server-rpc-endpoint=ws://127.0.0.1:11011

创建钱包密码

new >>> set_password 1111
set_password 1111
null
locked >>> 

解锁新创建的钱包

locked >>> unlock 1111
unlock 1111
null
unlocked >>>

在石墨烯中,余额包含在账户中。 要将一个账户导入钱包,只需要知道其名称和私钥。 现在我们将使用import_key命令将一个名为nathan的帐户导入到钱包中: 

unlocked >>> import_key nathan 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
import_key nathan 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
3343864ms th_a       wallet.cpp:788                save_wallet_file     ] saving wallet to file my-wallet.json
3343865ms th_a       wallet.cpp:464                copy_wallet_file     ] backing up wallet my-wallet.json to after-import-key-9407629b.wallet
true
请注意,nathan恰好是在起源文件中定义的帐户名称。 如果您在创建my-genesies.json文件之后编辑了自己的文件,则可以在其中添加一个不同的名称。 另请注意,5KQwrPbwdL ... P79zkvFD3是在config.ini文件中定义的私钥。 

现在我们将私钥导入到钱包中,但是仍然没有与之相关的资金。 资金存储在创世blance对象中。 这些资金可以使用import_balance命令免费索取: 

unlocked >>> import_balance nathan ["5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"] true
import_balance nathan ["5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"] true
3518604ms th_a       wallet.cpp:3717               import_balance       ] balances: [{"id":"1.15.0","owner":"BTSFAbAx7yuxt725qSZvfwWqkdCwp9ZnUama","balance":{"amount":"1000000000000000","asset_id":"1.3.0"},"last_claim_date":"1970-01-01T00:00:00"}] 
[{
    "ref_block_num": 40,
    "ref_block_prefix": 2829793676,
    "expiration": "2017-12-27T02:58:50",
    "operations": [[
        37,{
          "fee": {
            "amount": 0,
            "asset_id": "1.3.0"
          },
          "deposit_to_account": "1.2.17",
          "balance_to_claim": "1.15.0",
          "balance_owner_key": "BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
          "total_claimed": {
            "amount": "1000000000000000",
            "asset_id": "1.3.0"
          }
        }
      ]
    ],
    "extensions": [],
    "signatures": [
      "20203418aba7124965965018f43442e238d9752e182ab5f9233db671a21738f34f42578d85de8ed1e49beeb1dc53a728e81148ab76252341b39b423a58d973ce57"
    ]
  }
]

查看账户信息

unlocked >>> get_account nathan
get_account nathan
{
  "id": "1.2.17",
  "membership_expiration_date": "1970-01-01T00:00:00",
  "registrar": "1.2.4",
  "referrer": "1.2.0",
  "lifetime_referrer": "1.2.0",
  "network_fee_percentage": 2000,
  "lifetime_referrer_fee_percentage": 3000,
  "referrer_rewards_percentage": 0,
  "name": "nathan",
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [[
        "BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
        1
      ]
    ],
    "address_auths": []
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [[
        "BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
        1
      ]
    ],
    "address_auths": []
  },
  "options": {
    "memo_key": "BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
    "voting_account": "1.2.5",
    "num_witness": 0,
    "num_committee": 0,
    "votes": [],
    "extensions": []
  },
  "statistics": "2.6.17",
  "whitelisting_accounts": [],
  "blacklisting_accounts": [],
  "whitelisted_accounts": [],
  "blacklisted_accounts": [],
  "owner_special_authority": [
    0,{}
  ],
  "active_special_authority": [
    0,{}
  ],
  "top_n_control_flags": 0
}

查看账户余额

unlocked >>> list_account_balances nathan
list_account_balances nathan
10000000000 BTS

创建一个新账户

现在我们将创建另一个帐户(名为alpha),以便我们可以在nathan和alpha之间来回转移资金。 创建一个新账户总是通过使用一个现有账户来完成 - 我们需要这个账户,因为有人(即注册商)必须为注册费用提供资金。 此外,注册服务商账户还要求具有终身成员(LTM)身份。 因此,我们需要将帐户nathan升级为LTM,然后才能继续创建其他帐户。 要升级到LTM,请使用upgrade_account命令: 

unlocked >>> upgrade_account nathan true
upgrade_account nathan true
{
  "ref_block_num": 47,
  "ref_block_prefix": 821762446,
  "expiration": "2017-12-27T03:05:05",
  "operations": [[
      8,{
        "fee": {
          "amount": 1000000000,
          "asset_id": "1.3.0"
        },
        "account_to_upgrade": "1.2.17",
        "upgrade_to_lifetime_member": true,
        "extensions": []
      }
    ]
  ],
  "extensions": [],
  "signatures": [
    "1f7f7974b17319ed1e9bf92ea6392261c8d5f1b40650828b762e55a6d5c8a76f8b1991c06ba9e33918510347c926c238bef2cad2751095d9e0b9adf1d6c4e1f4f0"
  ]
}
由于已知的缓存问题,您需要在这个阶段重新启动CLI,否则它将不知道nathan已经升级了。按Ctrl-C停止命令启动它再次使用相同的命令之前,即: 
cli_wallet --wallet-file=my-wallet.json --chain-id 7be1c10cbe48776d5c52ac2b2da8e259533fd9acff44e943d9efe69115c4bfa5  --server-rpc-endpoint=ws://127.0.0.1:11011

运行如下命令,看是否升级成功: 

get_account nathan

可以看到"membership_expiration_date"已经从"1970-01-01T00:00:00" 变成了 "1969-12-31T23:59:59",意味着升级成功了 现在可以使用nathan作为注册商注册一个帐户。 但首先我们需要掌握新账户的公钥。 通过使用suggest_brain_key命令来完成它: 

locked >>> suggest_brain_key
suggest_brain_key
{
  "brain_priv_key": "BECURSE VALGOID DEFROCK GODKIN SWITHER WORTH SUIFORM DAKER IPSEAND UPPERER PSALM UNCAST DOTTILY BEFRIZ SCUT BRONC",
  "wif_priv_key": "5KZmzKmP8869Tw26nBTtYzGM4vW55mH9R9ZTeK9wPiTeX495rbn",
  "pub_key": "BTS7KuKh66CdWb1pTRg414ocVXGDQLnrRtJDd4srevt6MRmQPd8Gg"
}

通过create_account_with_brain_key命令注册帐户,并自动导入相应的私钥。 

unlocked >>> create_account_with_brain_key "BECURSE VALGOID DEFROCK GODKIN SWITHER WORTH SUIFORM DAKER IPSEAND UPPERER PSALM UNCAST DOTTILY BEFRIZ SCUT BRONC" alpha nathan nathan true

转账

执行如下命令: 

transfer nathan alpha 2000000000 BTS "here is some cash" true

查看alpha账户余额:

unlocked >>> list_account_balances alpha
list_account_balances alpha
2000000000 BTS

转账成功

作者:LeonRun
链接:https://www.jianshu.com/p/024ee9fcf8fc
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。