快速启动

编译

本文展示如何通过源代码编译Bhex Chain,你也可以参考[加入Bhex Chain测试网](#加入Bhex Chain测试网)使用我们提供的镜像无需编译快速启动节点。

安装golang

至少需要安装 Go 1.13。 你可以参考golang官方文档进行安装。安装完成后,需要设置$PATH环境变量,例如:

mkdir -p $HOME/go/bin
echo "export PATH=$PATH:$(go env GOPATH)/bin" >> ~/.bash_profile
echo "export GOPATH=$HOME/go" >> ~/.bash_profile
echo "export GOBIN=$GOPATH/bin" >> ~/.bash_profile
echo "export PATH=$PATH:$GOBIN" >> ~/.bash_profile
source ~/.bash_profile

在windows下,你需要通过右键点击此电脑 -> 属性 -> 高级系统设置 -> 高级 -> 环境变量打开环境变量设置窗口,然后点击编辑,设置HOMEGO111MODULE变量

NOTE: 编译Bhex Chain 至少需要Go 1.13+

获取源代码

你可以通过git拉取我们托管在github上的源代码

mkdir -p $GOPATH/github.com/bluehelix-chain
cd $GOPATH/github.com/bluehelix-chain
git clone https://github.com/bluehelix-chain/tendermint.git
git clone https://github.com/bluehelix-chain/iavl.git
git clone https://github.com/bluehelix-chain/bhchain.git

生成

进入源码目录,执行make build

cd $GOPATH/github.com/bluehelix-chain/bhchain.git
make build

执行完成后会在 $GOPATH/github.com/bluehelix-chain/cmd 下生成 bhcdbhcli可执行文件

与Bhex Chain进行交互

当全节点与全网同步所有区块后,我们可以用命令行工具(bhcli)与Bhex Chain进行交互,可以运行以下指令查询所有的命令。

$ bhcli help

我们给出跨链资产充币,转账和提币的流程简介,注意以下操作交互的是以太坊主网,请谨慎操作。

1. 创建和管理Bhex Chain托管单元

$ bhcli keys add alice --home node/bhcli

通过该命令我们在指定的node目录下创建了一个alice的托管单元(创建过程中需要输入你的密码对托管单元密钥进行加密存储),创建成功后展示如下:

{
  "name": "alice",
  "address": "HBCPNuLKXuQSVgGe4kfF3JxJZb1Uytkajb3Q",
  "pubkey": "hbcpub1addwnpepqdp4ac6l2f7tjtwssvdra7fy2xfrl8th4ltcx4dgy60z2a7ffx5lcu2ja8v",
}

2. 创建以太坊的跨链托管地址

$ bhcli tx keygen keygen alice eth HBCPNuLKXuQSVgGe4kfF3JxJZb1Uytkajb3Q  --chain-id bhchain-testnet --home node/bhcli

通过这个命令我们为alice创建eth跨链托管单元地址,命令发送执行后等待2-3个区块后(密钥的分布式生成需要一定的时间),我们通过下面的命令查询对应的托管单元信息,可以获取到eth的跨链托管地址:

$ bhcli query cu cuinfo HBCPNuLKXuQSVgGe4kfF3JxJZb1Uytkajb3Q --chain-id bhchain-testnet --home node/bhcli

查询的结果展示为:

{
  "type": "bhexchain/CustodianUnit",
  "value": {
    "address": "HBCPNuLKXuQSVgGe4kfF3JxJZb1Uytkajb3Q",
    "assets": [
      {
        "denom": "eth",
        "address": "0x97efBEAd089c9B57C4d5ed4a57d4ebBE3659d34B",
        "enbale_sendtx": true
      }
    ],
    "asset_pubkey": "A/dbw3DsU9HGTnglann9ZvlGl1gCPsC+8/2gWNrjhcQ3"
  }
}

从查询到的信息看,我们为托管单元在创建了一个eth的跨链托管地址(0x97efBEAd089c9B57C4d5ed4a57d4ebBE3659d34B),并且这个地址的密钥由各个记账人节点分布式保存其中的分片,公钥在托管单元上可见(assert_pubkey)。

3. 充入跨链资产

生成可以向自己的eth跨链地址(0x97efBEAd089c9B57C4d5ed4a57d4ebBE3659d34B)充入一定的eth,充值完成后,Bhex Chain会自动扫描托管单元的跨链地址,把对应的充值记账到Bhex Chain 对应的托管单元上。比如,alice充值了0.5eth,查询对应托管单元的信息如下:

{
  "type": "bhexchain/CustodianUnit",
  "value": {
    "address": "HBCcUCWJNattE5PYm6xQKbaCoRCG2SaVdHvH",
    "coins": [
      {
        "denom": "eth",
        "amount": "500000000000000000"
      }
    ],
    "assets": [
      {
        "denom": "eth",
        "address": "0x97efBEAd089c9B57C4d5ed4a57d4ebBE3659d34B",
        "nonce": "2",
        "enable_sendtx": true
      }
    ],
}

4. 跨链资产转账

$ bhcli tx send alice  BHccpSzNbAPue6QBTfN8259t12CfxC9NY2K  100000000000000000eth --chain-id bhchain-testnet --home node/bhcli

通过该命令我们将当前的托管单元充值的0.5eth向另外一个托管地址转出了0.1eth,对方的账户会增加0.1eth的资产。

5. 提出跨链资产

$ bhcli tx transfer withdrawal alice 0xC933C741416151dAcFE9428d39222f747e2b45EB 200000000000000000eth 21000000000000000 --chain-id bhchain-testnet --home node/bhcli

通过该命令,托管用户alice把自己账户中的0.2eth提现到自己的eth账户(0xC933C741416151dAcFE9428d39222f747e2b45EB 非托管地址)上,通过一定区块高度后,用户可以在自己的账户看到提现到账信息。

6. 取消提现

$ bhcli tx transfer cancelwithdrawal alice abe0f640-9fbe-4456-9873-fd402b90b044 --chain-id bhchain-testnet --home node/bhcli

通过该命令,托管用户alice可以取消掉刚才发出的提现命令(用户的提现操作未到分布式签名阶段),取消提现后,提现需要的资金和手续费都会返回到用户账户中。