比特股私有链环境搭建

作者: LeonRun | 来源:发表于2017-12-27 00:05 被阅读519次

    比特股私有链环境搭建

    官方推荐使用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
    

    转账成功

    相关文章

      网友评论

      本文标题:比特股私有链环境搭建

      本文链接:https://www.haomeiwen.com/subject/tllygxtx.html