汪晓明对区块链、以太坊的思考

记录创业、生活的所思所感,探讨去中心化思想,推动区块链的发展。

HPB64:HPB-Docker节点搭建指南

在进入HPB开发之前,利用docker搭建一个节点来进行后续的代码调试,是个不错的注意,本节我们为大家展示如何搭建。

步骤0 切换成root用户

切换root,根据提示输入root权限密码

1
root@iZ8vbgcelr86h0i2rbfshaZ:/# su root
步骤一 下载镜像

通过docker pull hpbbc/go-hpb下载镜像。

1
2
3
4
5
6
root@iZ8vbgcelr86h0i2rbfshaZ:~# docker pull hpbbc/go-hpb
Using default tag: latest
latest: Pulling from hpbbc/go-hpb
Digest: sha256:3ecb483ca70883c390c55ceada92f7c0726e13afaebea2029dfe1c208dbe0094
Status: Image is up to date for hpbbc/go-hpb:latest
root@iZ8vbgcelr86h0i2rbfshaZ:~#
步骤二 运行如下命令

输入docker images,查看镜像文件hpbbc/go-hpb是否已经安装好。

1
2
3
4
root@iZ8vbgcelr86h0i2rbfshaZ:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hpbbc/go-hpb        latest              a3ebf0866f79        5 weeks ago         42MB
ghpb                v1.0.2.3            a3ebf0866f79        5 weeks ago         42MB
步骤三 新建gensis.json
1
root@iZ8vbgcelr86h0i2rbfshaZ:~# vi gensis.json

在弹出的页面按下字母I键即可切换至INSERT输入状态,然后用鼠标右键粘贴入下方代码。 完成后按一下ESC键,并输入:wq即可保存文件并退出。 提示:按一下ESC键,并输入:q!为不保存文件并退出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 {

 config: {

 chainId: 100,

 prometheus: {

 period: 10,

 epoch: 200

 }

 },

 nonce: 0x0,

 timestamp: 0x5b7eba85,

 extraData: 0x68706200000000000000000000000000000000000000000000000000000000000926f045887401883a8d9c6e9878b1b900a5be19405dd40aa9298448a58fa679ec4295eac8472a0d58c163703d46edcfc1b99abd4f2c4801d3c997a75bf42ea1b9b03e6f3980beba7216d14813c30d7069bd0d853df157ee0e05f1f3749996e5dcdc80407cc4e0cc326756155d4afb2e780bdd13a17d4434bb078d7d587ef5db12918ff775fe26cb54006fc4f29a056080cb3a804945e136594ead53e8589478f8282f019c753fb2410a50e2c4789bf96b7061140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,

 gasLimit: 0x5f5e100,

 difficulty: 0x1,

 mixHash: 0x0000000000000000000000000000000000000000000000000000000000000000,

 coinbase: 0x0000000000000000000000000000000000000000,

 alloc: {

 269bBC5Cf30795a5FdF6aB7165D3DCb9Ef736808: {

 balance: 20000000000000000000000000

 },

 A1960FA87733F1B9ffbfB95d9d692471Aa691c9C: {

 balance: 18000000000000000000000000

 },

 dAB62F5145EE529cF1c89371615256a5d151016c: {

 balance: 12000000000000000000000000

 },

 172B49140D31A034bE7f358FDdD9db25A71A402A: {

 balance: 10800000000000000000000000

 },

 4604801FaF9cC8C4443B269D1A10bcDE7fB19c39: {

 balance: 37000000000000000000000000

 },

 de3Fd4fC583b6d7e06Db0bE6A35467f33046Ad27: {

 balance: 2200000000000000000000000

 }

 },

 number: 0x0,

 gasUsed: 0x0,

 parentHash: 0x0000000000000000000000000000000000000000000000000000000000000000,

 hardwareRandom: 0x0000000000000000000000000000000000000000000000000000000000000000

 }
步骤四 新建/home/ghpb-bin/node/目录

输入mkdir -p /home/ghpb-bin/node/,把gensis.json放到/home/ghpb-bin/node/目录下,可通过cp命令完成,也可后台完成。

1
2
root@iZ8vbgcelr86h0i2rbfshaZ:/# mkdir -p /home/ghpb-bin/node/
root@iZ8vbgcelr86h0i2rbfshaZ:/# 
步骤五 新建keystore目录

输入mkdir -p /home/ghpb-bin/node/datafull/keystore,上传一个keystore文件到该目录下(任何keystore文件,该加密私钥文件用于启动节点,没任何用途,可以任意新建一个)。

1
root@iZ8vbgcelr86h0i2rbfshaZ:/# mkdir -p /home/ghpb-bin/node/datafull/keystore
步骤六 初始化配置

​ 输入docker run -it --rm --privileged=true -v /home/ghpb-bin/node/:/root/node/ --name ghpbinit ghpb:v1.0.2.3 --datadir /root/node/data init /root/node/gensis.json 来初始化创世配置。

1
2
3
4
5
root@iZ8vbgcelr86h0i2rbfshaZ:/# docker run -it --rm --privileged=true  -v /home/ghpb-bin/node/:/root/node/ --name ghpbinit ghpb:v1.0.2.3 --datadir /root/node/data init /root/node/gensis.json
INFO [11-01|09:48:41]  HPB : Create New HpbConfig object
INFO [11-01|09:48:41]  HPB : Allocated cache and file handles  database=/root/node/data/ghpb/chaindata cache=16 handles=16
INFO [11-01|09:48:41]  HPB : Writing custom genesis block
INFO [11-01|09:48:41]  HPB : Successfully wrote genesis state  database=chaindata                      hash=9c3704f39966
步骤七 启动节点

​ 输入docker run -itd --privileged=true --restart=always -v /home/ghpb-bin/node/:/root/node/ -p 8545:8545 -p 30303:30303 -p 8546:8546 --name ghpb1 ghpb:v1.0.2.3 --datadir /root/node/data --networkid 100 --verbosity 3 --rpc --rpcaddr 0.0.0.0 --rpcapi hpb,web3,admin,txpool,debug,personal,net,miner,prometheus --nodetype synnode console来启动节点

1
2
root@iZ8vbgcelr86h0i2rbfshaZ:/# docker run -itd --privileged=true --restart=always -v /home/ghpb-bin/node/:/root/node/ -p 8545:8545 -p 30303:30303 -p 8546:8546 --name ghpb1 ghpb:v1.0.2.3 --datadir /root/node/data --networkid 100 --verbosity 3 --rpc --rpcaddr 0.0.0.0 --rpcapi hpb,web3,admin,txpool,debug,personal,net,miner,prometheus --nodetype synnode console
ccab756a76b13a720b41c0bb7dd35383d36169dc3074e22d0b220170da7826ff
步骤八 进入控制台

​ 输入docker attach ghpb1可以进入控制台。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@iZ8vbgcelr86h0i2rbfshaZ:/# docker attach ghpb1 
INFO [11-01|09:55:46]  HPB : UDP listener up                   self=hnode://e25f1e2aafcec4525e6c65c5b7dc8fb6e683711aa9b58bee92ab1651f9fa6bbeb37de7b0a61b8b533eb19e2e57f2decfca6bb9eb338e9926dbf8f30e64f1c1b3@[::]:30303
INFO [11-01|09:55:46]  HPB : Server start with type.           NodeType=SynNode
INFO [11-01|09:55:46]  HPB : Start server of bandwidth test.   port=30403
INFO [11-01|09:55:46]  HPB : IPC endpoint opened               url=/root/node/data/ghpb.ipc
INFO [11-01|09:55:46]  HPB : HTTP endpoint opened              url=http://0.0.0.0:8545      cors= vhosts=localhost,localhost
Welcome to the GHPB JavaScript console!

instance:
coinbase: 0xaed85c944a8a96c2714532b00676337e0d986811
at block: 0 (Thu, 23 Aug 2018 13:45:41 UTC)
 datadir: /root/node/data
 modules: admin:1.0 debug:1.0 hpb:1.0 miner:1.0 net:1.0 personal:1.0 prometheus:1.0 rpc:1.0 txpool:1.0 web3:1.0

>
步骤九 退出docker控制台

按下键盘Ctrl+p+q可以退出当前docker容器控制台。

1
2
3
4
INFO [11-01|10:08:10]  HPB : Inserted new block                number=656094 hash=67a92f8b7b1a
INFO [11-01|10:08:10]  HPB : Imported new chain segment        blocks=1  txs=0 mgas=0.000 elapsed=7.058ms  mgasps=0.000 number=656094 hash=67a92f8b7b1a
######### peers length is: 2
read escape sequence
步骤十 查看节点日志

​ 输入docker logs -f ghpb1可以查看节点的日志。

1
root@iZ8vbgcelr86h0i2rbfshaZ:/# docker logs -f ghpb1

感谢HPB技术团队整理。

HPB63:HPB私有链搭建指南

如果想进行DAPP 开发,那么在本地搭建一个测试链是非常方便划算的!直接部署到主链将会消耗代币以及很多不便,下面是搭建HPB测试链的详细步骤!

测试链本地搭建步骤

下表为完整的本地搭建测试链步骤。

编号 步骤 内容 说明
1 确定程序执行路径 确定程序执行路径 命令:sudo mkdir /home/ghpb-bin2
提示:/home/ghpb-bin2可改为指定路径。 |
2 切换成ROOT用户 切换成ROOT用户 命令:su root
根据提示输入ROOT账户密码 |
3 选择下载路径 选择下载路径 命令:cd /home/
提示:/home/可改为指定路径; |
4 下载go-hpb源码 下载go-hpb源码 命令:sudo git clone -b version_x.x.x.x https://github.com/hpb-project/go-hpb
提示:x.x.x.x为主网程序最新版本号 |
5 编译源码 编译源码 命令:cd go-hpb/
命令:make all |
6 拷贝程序到执行路径 拷贝程序到执行路径 命令:sudo cp build/bin/. /home/ghpb-bin2/ |
进入执行路径 命令:cd /home/ghpb-bin2/ |
7 创建新账户 创建第一个账户 命令:./ghpb --datadir node/data account new
根据提示设置账户密码并记录账户地址 |
创建第二个账户 命令:./ghpb --datadir node1/data account new
根据提示设置账户密码并记录账户地址 |
创建第三个账户 命令:./ghpb --datadir node2/data account new
根据提示设置账户密码并记录账户地址 |
8 生成创世区块 产生创世文件 命令:./promfile
根据提示以及示例完成生成步骤 |
9 初始化节点 初始化第一个节点 命令:./ghpb --datadir node/data init gensis.json |
初始化第二个节点 命令:./ghpb --datadir node1/data init gensis.json |
初始化第三个节点 命令:./ghpb --datadir node2/data init gensis.json |
10 启动bootnode 启动bootnode 启动之前需参照示例拷贝binding.json文件。
命令:./ghpb --datadir node1/data --networkid 66300 --port 3001 --nodetype bootnode console
提示:66300为创建创世区块过程中用户设置的网络号,3001为端口号,在一台机器上启动不同节点时端口号需不同) |
11 打开配置文件 打开配置文件 命令:exit
命令:vi /home/go-hpb/config/networkconfig.go |
12 将hnode写入配置文件 将hnode写入配置文件 在var MainnetBootnodes中输入hnode信息(含公网ip);并在其余hnode信息前都输入//以注释掉不需要的hnode信息。 |
13 保存配置文件 保存配置文件 按下Esc,并输入:wq |
14 编译源码 编译源码 命令:cd /home/go-hpb/
提示:/home/为go-hpb的下载路径.
命令:make all |
15 拷贝到程序执行路径 拷贝到程序执行路径 命令:sudo cp build/bin/. /home/ghpb-bin2/
命令:cd /home/ghpb-bin2/ |
16 启动节点 启动bootnode 命令:sudo nohup ./ghpb --datadir node1/data --networkid 66300 --port 3001 --rpcaddr 0.0.0.0 --rpcport 8541 --verbosity 3 --rpc --rpcapi hpb,web3,admin,txpool,debug,personal,net --nodetype bootnode . bootnode.log &
命令: sudo ./ghpb attach http://127.0.0.1:8541 |
启动第一个挖矿节点 命令:sudo ./ghpb --datadir node/data --unlock "第一个账户地址" --networkid 66300 --port 3002 --rpcaddr 0.0.0.0 --rpcport 8542 --verbosity 3 --rpc --rpcapi hpb,web3,admin,txpool,debug,personal,net console --testmode
根据提示输入账户密码(需另开控制台窗口执行该命令);
命令:miner.start() |
启动第二个挖矿节点 命令:sudo ./ghpb --datadir node2/data --unlock "第三个账户地址" --networkid 66300 --port 3003 --rpcaddr 0.0.0.0 --rpcport 8543 --verbosity 3 --rpc --rpcapi hpb,web3,admin,txpool,debug,personal,net console --testmode
根据提示输入账户密码(需另开控制台窗口执行该命令);
命令:miner.start() |

测试链本地搭建示例

(1)确定程序执行路径

输入sudo mkdir /home/ghpb-bin2创建程序执行路径;其中/home/ghpb-bin2可改为指定路径。

1
hpb@ dell-PowerEdge-R730:~$ sudo mkdir /home/ghpb-bin2
(2)切换成ROOT用户

输入su root,根据提示输入ROOT账户密码。

1
2
hpb@ dell-PowerEdge-R730:~$ su root
Password:
(3)选择下载路径

输入 cd /home/;其中/home/可改为指定路径;

1
root@ dell-PowerEdge-R730: ~$ cd /home/
(4)下载go-hpb源码

输入sudo git clone -b version_x.x.x.x https://github.com/hpb-project/go-hpb,当进度变为100%,出现”Checking conectivity … done”时,go-hpb下载成功,继续下一步;(x.x.x.x为主网程序最新版本号)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@dell-PowerEdge-R730:/home# sudo git clone -b version_1.0.1.0 https://github.com/hpb-project/go-hpb
Cloning into 'go-hpb'...
remote: Counting objects: 10547, done.
remote: Compressing objects: 100% (150/150), done.
Receiving objects: 100% (10547/10547), 14.09 MiB | 395.00 KiB/s, done.
Resolving deltas: 100% (5824/5824), done.
Checking connectivity... done.
Note: checking out '89d88c8e23f7761a76dd8eebe9b08fd3750a04b6'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>
(5)编译go-hpb

输入cd go-hpb/

继续输入make all编译go-hpb;

1
2
3
4
5
6
7
8
9
root@ dell-PowerEdge-R730:/home# cd go-hpb/
root@ dell-PowerEdge-R730:/home/go-hpb# make all
build/env.sh go run build/ci.go install ./cmd/ghpb
>>> /usr/lib/go-1.9/bin/go install -ldflags -X main.gitCommit=04fa6c874b447f0de0a4296b9e573119e1997fcc -v ./cmd/ghpb
github.com/hpb-project/go-hpb/vendor/github.com/prometheus/procfs/internal/util
github.com/hpb-project/go-hpb/common/bitutil
……
Done building.
Run "/home/go-hpb/build/bin/promfile" to launch promfile.
(6)拷贝程序到执行路径

输入sudo cp build/bin/. /home/ghpb-bin2/;继续输入cd /home/ghpb-bin2/。 其中/home/ghpb-bin2/为您设置的程序执行路径;

1
2
root@ dell-PowerEdge-R730:/home/go-hpb# sudo cp build/bin/* /home/ghpb-bin2/
root@ dell-PowerEdge-R730:/home/go-hpb#cd /home/ghpb-bin2/
(7)创建三个新账户
  • 输入./ghpb --datadir node/data account new创建第一个新账户,根据提示设置账户密码,记录得到的账户地址”04cbf60fdcc485a76b0b8a389da7bd87da180edd”。
1
2
3
4
5
6
7
8
9
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# ./ghpb --datadir node/data account new
INFO [09-19|08:21:43]  HPB : Create New HpbConfig object
INFO [09-19|08:21:43]  HPB : Initialising Hpb node             network=1
INFO [09-19|08:21:43]  HPB : Allocated cache and file handles  database=/home/ghpb-bin2/node/data/ghpb/chaindata cache=128 handles=1024
INFO [09-19|08:21:46]  HPB : set coinbase of node              : =0xfc6661501B4faf424D2ed61855A134fa5b2dE3EF
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {04cbf60fdcc485a76b0b8a389da7bd87da180edd}
  • 输入./ghpb --datadir node1/data account new 创建第二个新账户,根据提示设置账户密码,记录得到的账户地址”af4a70602be17074ad59555fa09239c0d811a99f”。
1
2
3
4
5
6
7
8
9
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# ./ghpb --datadir node1/data account new
INFO [09-19|08:26:17]  HPB : Create New HpbConfig object
INFO [09-19|08:26:17]  HPB : Initialising Hpb node             network=1
INFO [09-19|08:26:17]  HPB : Allocated cache and file handles  database=/home/ghpb-bin2/node1/data/ghpb/chaindata cache=128 handles=1024
INFO [09-19|08:26:20]  HPB : set coinbase of node              : =0xfc6661501B4faf424D2ed61855A134fa5b2dE3EF
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {af4a70602be17074ad59555fa09239c0d811a99f}
  • 输入./ghpb --datadir node2/data account new 创建第三个新账户,根据提示设置账户密码,记录得到的账户地址”552a49773698c75b7fbb47f1a3486f6394cc4385”。
1
2
3
4
5
6
7
8
9
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# ./ghpb --datadir node2/data account new 
INFO [09-19|08:28:33]  HPB : Create New HpbConfig object
INFO [09-19|08:28:33]  HPB : Initialising Hpb node             network=1
INFO [09-19|08:28:33]  HPB : Allocated cache and file handles  database=/home/ghpb-bin2/node2/data/ghpb/chaindata cache=128 handles=1024
INFO [09-19|08:28:36]  HPB : set coinbase of node              : =0xfc6661501B4faf424D2ed61855A134fa5b2dE3EF
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {552a49773698c75b7fbb47f1a3486f6394cc4385}
(8)生成创世区块

输入./promfile,根据提示完成创世区块的设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# ./promfile
+-----------------------------------------------------------+
| Welcome to prometh, your HPB private network manager |
|                                                           |
| This tool lets you create a new HPB network down to  |
| the genesis block, bootnodes, miners and ethstats servers |
| without the hassle that it would normally entail.         |
|                                                           |
| Prometh uses SSH to dial in to remote servers, and builds |
| its network components out of Docker containers using the |
| docker-compose toolset.                                   |
+-----------------------------------------------------------+
Please specify a network name to administer (no spaces, please)
> random`(给测试链命名,可随意命名,如random)
Sweet, you can set this via --network=random next time!
INFO [09-19|08:36:16]  HPB : Administering HPB network         name=random
WARN [09-19|08:36:16]  HPB : No previous configurations found  path=/root/.prometh/random
What would you like to do? (default = stats)
 1. Configure new genesis
 2. Manage existing genesis
> 1`(选择1,生成新的创世文件)

Welcome to HPB consensus engine file maker

How many seconds should blocks take? (default = 15)
> 5`(设置生成区块的间隔,如5)

How many blocks should voting epoch be ? (default = 30000)
> 100`(设置投票周期,如100

Which accounts are allowed to seal? (initialise miner addresses)
> 0x04cbf60fdcc485a76b0b8a389da7bd87da180edd(设置初始挖矿地址,示例为新建的第一个账户)
> 0x`(可继续添加挖矿地址,按回车可进入下一步)

Which accounts should be pre-funded? (advisable at least one)
> 0x04cbf60fdcc485a76b0b8a389da7bd87da180edd(设置初始预存钱的地址,示例为新建的第一个账户)
> 0x`(可继续添加预存钱地址,按回车可进入下一步)

Please input the initialization hardware random
> 0x `(按回车直接进入下一步)      

Specify your chain/network ID if you want an explicit one (default = random)
> 66300`(设置网络号,可随意设置,后续启动命令中需用到该网络号)

Anything fun to embed into the genesis block? (max 32 bytes)
> hhh`(可输入任意字符串,以示有趣)

What would you like to do? (default = stats)
 1. Configure new genesis
 2. Manage existing genesis
> 2`(选择2,导出刚设置的创世文件)

 1. Export genesis configuration
> 1`(选择1,将会打印出json文件,需在最后输入名称“gensis.json”)

Which file to save the genesis into? (default = random.json)
{
  "config": {
    "chainId": 66300,
    "prometheus": {
      "period": 5,
      "epoch": 100
    }
  },
  "nonce": "0x0",
  "timestamp": "0x5ba242c8",
  "extraData": "0x686868000000000000000000000000000000000000000000000000000000000004cbf60fdcc485a76b0b8a389da7bd87da180edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0x5f5e100",
  "difficulty": "0x1",
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": {
    "04cbf60fdcc485a76b0b8a389da7bd87da180edd": {
      "balance": "0x8"
    }
  },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "hardwareRandom": "0x0000000000000000000000000000000000000000000000000000000000000000"
}> gensis.json`(在此处输入名称“gensis.json,并回车)
INFO [09-19|08:59:36]  HPB : Exported existing genesis block

What would you like to do? (default = stats)
 1. Configure new genesis
 2. Manage existing genesis
>

ctrl+c退出,输入ls可看到已导出创世文件gensis.json

1
2
3
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# ls
binding.json  gensis.json   node   node2
config.json   ghpb         iperf3  node1  promfile
(9)初始化节点
  • 输入./ghpb --datadir node/data init gensis.json初始化第一个节点;
1
2
3
4
5
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2#  ./ghpb --datadir node/data init gensis.json
INFO [09-19|09:08:22]  HPB : Create New HpbConfig object
INFO [09-19|09:08:22]  HPB : Allocated cache and file handles  database=/home/ghpb-bin2/node/data/ghpb/chaindata cache=16 handles=16
INFO [09-19|09:08:22]  HPB : Writing custom genesis block
INFO [09-19|09:08:22]  HPB : Successfully wrote genesis state  database=chaindata                                hash=e46058896936
  • 输入./ghpb --datadir node1/data init gensis.json初始化第二个节点;
1
2
3
4
5
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2#  ./ghpb --datadir node1/data init gensis.json
INFO [09-19|09:08:53]  HPB : Create New HpbConfig object
INFO [09-19|09:08:53]  HPB : Allocated cache and file handles  database=/home/ghpb-bin2/node1/data/ghpb/chaindata cache=16 handles=16
INFO [09-19|09:08:53]  HPB : Writing custom genesis block
INFO [09-19|09:08:53]  HPB : Successfully wrote genesis state  database=chaindata                                 hash=e46058896936
  • 输入./ghpb --datadir node2/data init gensis.json初始化第三个节点;
1
2
3
4
5
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# ./ghpb --datadir node2/data init gensis.json
INFO [09-19|09:10:05]  HPB : Create New HpbConfig object
INFO [09-19|09:10:05]  HPB : Allocated cache and file handles  database=/home/ghpb-bin2/node2/data/ghpb/chaindata cache=16 handles=16
INFO [09-19|09:10:05]  HPB : Writing custom genesis block
INFO [09-19|09:10:05]  HPB : Successfully wrote genesis state  database=chaindata                                 hash=e46058896936
(10)启动bootnode
  • 配置binding.json

    输入vim binding.json将所有账户写入binding.json,

    “`shell root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# vim binding.json

    “`

    在打开的文件中按下I变为Insert可输入状态,并粘贴以下代码:

    (用户需将三个coinbase更改为三个新建账户的地址,CID和HID可随意填写,可与示例中的保持一致。)

    “`shell [ {“coinbase”:“0xfc6661501b4faf424d2ed61855a134fa5b2de3ef”,“cid”:“2cd504a93518fe0c9b60895602586efc4786cf9da9396d0a6d39403b94710b0a16092dcbd8458bb46cef1e71ba9953db881268ce5d773ce63ffb421a657a00e1”,“hid”:“a3b8e1f3bd9cf3ed0a520744010bf2cc48e781b04af7f462e452f9c96e476abc”}, {“coinbase”:“0xaf4a70602be17074ad59555fa09239c0d811a99f”,“cid”:“2cd504a93518fe0c9b60895602586efc4786cf9da9396d0a6d39403b94710b0a16092dcbd8458bb46cef1e71ba9953db881268ce5d773ce63ffb421a657a00e1”,“hid”:“a3b8e1f3bd9cf3ed0a520744010bf2cc48e781b04af7f462e452f9c96e476abc”}, {“coinbase”:“0x552a49773698c75b7fbb47f1a3486f6394cc4385”,“cid”:“2cd504a93518fe0c9b60895602586efc4786cf9da9396d0a6d39403b94710b0a16092dcbd8458bb46cef1e71ba9953db881268ce5d773ce63ffb421a657a00e1”,“hid”:“a3b8e1f3bd9cf3ed0a520744010bf2cc48e781b04af7f462e452f9c96e476abc”} ]

    “`

    按下Esc键并输入:wq即可保存文件并退出。

  • 拷贝binding.json

    输入cp binding.json node1/data拷贝binding.json到bootnode数据文件里。

    “`shell root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# cp binding.json node1/data

    “`

  • 启动bootnode

输入./ghpb --datadir node1/data --networkid 66300 --port 3001 --nodetype bootnode console;(66300为创建创世区块过程中设置的网络号,3001为端口号,不同节点不同以作区分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# ./ghpb --datadir node1/data --networkid 66300 --port 3001 --nodetype bootnode console
INFO [09-19|09:23:23]  HPB : Create New HpbConfig object
INFO [09-19|09:23:23]  HPB : Initialising Hpb node             network=66300
INFO [09-19|09:23:23]  HPB : Allocated cache and file handles  database=/home/ghpb-bin2/node/data/ghpb/chaindata cache=128 handles=1024
INFO [09-19|09:23:26]  HPB : set coinbase of node              : =0xfc6661501B4faf424D2ed61855A134fa5b2dE3EF
INFO [09-19|09:23:26]  HPB : Loaded most recent local header   number=0 hash=e46058896936 td=1
INFO [09-19|09:23:26]  HPB : Loaded most recent local full block number=0 hash=e46058896936 td=1
INFO [09-19|09:23:26]  HPB : Loaded most recent local fast block number=0 hash=e46058896936 td=1
INFO [09-19|09:23:26]  HPB : Set coinbase address by start     address=0xfc6661501B4faf424D2ed61855A134fa5b2dE3EF
INFO [09-19|09:23:26]  HPB : Change node local type            from=UnknownNode to=BootNode
INFO [09-19|09:23:26]  HPB : Set Init Local Type by p2p        type=BootNode
INFO [09-19|09:23:26]  HPB : Starting P2P networking
INFO [09-19|09:23:28]  HPB : UDP listener up                   self=hnode://ad65b8d7efc85c50b13f63a0a7234d1398136a200dbe104ff759daf7912fe7ce2c996db38135883599e0802f24849c2e1e5ee4502d401e6b39823552dba331a9@[::]:3001(记录打印出的hnode信息)
INFO [09-19|09:23:28]  HPB : Server start with type.           NodeType=BootNode
INFO [09-19|09:23:28]  HPB : Start server of bandwidth test.   port=3101
INFO [09-19|09:23:28]  HPB : IPC endpoint opened: /home/ghpb-bin2/node/data/ghpb.ipc
Welcome to the GHPB JavaScript console!
instance:
coinbase: 0xfc6661501b4faf424d2ed61855a134fa5b2de3ef
at block: 0 (Wed, 19 Sep 2018 08:57:13 EDT)
 datadir: /home/ghpb-bin2/node/data
 modules: admin:1.0 debug:1.0 hpb:1.0 miner:1.0 net:1.0 personal:1.0 prometheus:1.0 rpc:1.0 txpool:1.0 web3:1.0

记录hnode信息,并在端口号前添加公网ip(公网Ip即为bootnode所在服务器的公网ip地址,示例中为192.168.1.50,开发者需改为自己的公网Ip): hnode://ad65b8d7efc85c50b13f63a0a7234d1398136a200dbe104ff759daf7912fe7ce2c996db38135883599e0802f24849c2e1e5ee4502d401e6b39823552dba331a9@192.168.1.50:3001

(11)打开配置文件

输入exit退出,继续输入vi /home/go-hpb/config/networkconfig.go打开配置文件;

1
2
3
> exit
INFO [09-19|09:31:32]  HPB : Hpb data sync stopped
root@hpb-PowerEdge-R730xd:/home/ghpb-bin# vi /home/go-hpb/config/networkconfig.go
(12)将hnode写入配置文件

在打开的文件中找到var MainnetBootnodes方法,在该方法中输入hnode信息(含公网ip);并在其余hnode信息前都输入//,表示注释掉不需要的hnode信息。

提示:将光标移到方法里的第一行,按下字母o,即自动插入空的一行,此时即可粘贴hnode信息,注意带上双引号和逗号,格式为英文。

1
2
3
4
5
6
7
8
9
var MainnetBootnodes = []string{
        //"hnode://73c8ac9dddc8f094d28f42e1ec5c3e8000cad25be152c147fceacc27953d58e64bfe9f555145d93f9f6b995bab984411941751fef3bd460f74c0151eb0432b56@47.94.20.30:30303",

"hnode://ad65b8d7efc85c50b13f63a0a7234d1398136a200dbe104ff759daf7912fe7ce2c996db38135883599e0802f24849c2e1e5ee4502d401e6b39823552dba331a9@192.168.1.50:3001",(粘贴hnode信息)
        //"hnode://1c129009d0e9c56e79b6f4157497d8ac2810ea83fc1f6ed4b6244406597d821f52bb0d210157854d861d2f6099fa948bc5a03d2f4f1bcae70dc6e9c535e586f9@47.100.250.120:30303",
      //"hnode://f3282847f29cfea1dd741246cc17b9a0dcdd8b0b9dfce2a985d2358497458135e81942ae7155cfd2fe23e1da30f18fc1fa2c56d3675aba51e7c67f83681fded5@47.75.213.166:30303",
        //"hnode://dd2fd6ea314041c0e20aed4ee4159ab172a4ddb944459d147bdb28461937841ee069c44fe0915be9f74d929562968fb9720362937a898e2ec3a598fa3fe1f33b@47.88.60.227:30303",
        //"hnode://a6ef92a46adb69f94f2d48ff20f7800fb057d6aba7945e5af062ef27be5598072c5ce083ec5a2c89f80d112401c261b9ba9dacbd53aeb7c8243685d537edadb9@47.254.133.46:30303",
}
(13)保存配置文件

按下Esc,并输入:wq,回车即可保存。 提示:如果想退出不保存文件,则需按下Esc,并输入:q!回车即可;如果无法编辑, 可按下字母i即可。

1
:wq
(14)编译源码

输入cd /home/go-hpb/,其中/home/为go-hpb的下载路径;继续输入make all编译。

1
2
3
4
5
6
7
8
9
10
11
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# cd /home/go-hpb/
root@hpb-PowerEdge-R730xd:/home/go-hpb# make all
build/env.sh go run build/ci.go install ./cmd/ghpb
>>> /usr/lib/go-1.9/bin/go install -ldflags -X main.gitCommit=89d88c8e23f7761a76dd8eebe9b08fd3750a04b6 -v ./cmd/ghpb
github.com/hpb-project/go-hpb/vendor/golang.org/x/text/encoding/internal/identifier
...
Done building.
Run "/home/go-hpb/build/bin/promfile" to launch promfile.
cp "/home/go-hpb/network/iperf3/iperf3" "/home/go-hpb/build/bin/iperf3"
cp "/home/go-hpb/network/p2p/binding.json" "/home/go-hpb/build/bin/binding.json"
cp "/home/go-hpb/network/p2p/config.json" "/home/go-hpb/build/bin/config.json"
(15)拷贝到程序执行路径

输入sudo cp build/bin/. /home/ghpb-bin2/;.继续输入cd /home/ghpb-bin2/。 其中/home/ghpb-bin2/为您设置的程序执行路径;

1
2
root@hpb-PowerEdge-R730xd:/home/go-hpb# sudo cp build/bin/* /home/ghpb-bin2/
root@hpb-PowerEdge-R730xd:/home/go-hpb# cd /home/ghpb-bin2/
(16)启动节点
  • 启动bootnode

输入sudo nohup ./ghpb --datadir node1/data --networkid 66300 --port 3001 --rpcaddr 0.0.0.0 --rpcport 8541 --verbosity 3 --rpc --rpcapi hpb,web3,admin,txpool,debug,personal,net --nodetype bootnode . bootnode.log &启动bootnode; 继续输入sudo ./ghpb attach http://127.0.0.1:8541连入节点。 示例里为创建的第二个账户;

提示:66300为步骤8中设置的网络号。

1
2
3
4
5
6
7
8
9
10
11
 root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# sudo nohup ./ghpb --datadir node1/data --networkid 66300 --port 3001  --rpcaddr 0.0.0.0 --rpcport 8541  --verbosity  3  --rpc  --rpcapi    hpb,web3,admin,txpool,debug,personal,net --nodetype bootnode > bootnode.log &
 [1] 29938
 root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# nohup: ignoring input and redirecting stderr to stdout
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2# sudo ./ghpb attach http://127.0.0.1:8541
 Welcome to the GHPB JavaScript console!
 instance:
 coinbase: 0xfc6661501b4faf424d2ed61855a134fa5b2de3ef
at block: 0 (Wed, 19 Sep 2018 08:57:13 EDT)
  datadir: /home/ghpb-bin2/node1/data
  modules: admin:1.0 debug:1.0 hpb:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
 >

• 启动第一个挖矿节点 另开一个控制台窗口输入sudo ./ghpb —datadir node/data —unlock “第一个账户地址” —networkid 66300 —port 3002 —rpcaddr 0.0.0.0 —rpcport 8542 —verbosity 3 —rpc —rpcapi hpb,web3,admin,txpool,debug,personal,net console —testmode根据提示输入账户密码; 继续输入miner.start()开始挖矿。 示例里为创建的第一个账户“0x04cbf60fdcc485a76b0b8a389da7bd87da180edd”;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 root@hpb-PowerEdge-R730xd:/home/ghpb-bin2#sudo ./ghpb --datadir node/data  --unlock "0x04cbf60fdcc485a76b0b8a389da7bd87da180edd" --networkid 66300 --port 3002  --rpcaddr 0.0.0.0 --rpcport 8542  --verbosity  3  --rpc  --rpcapi    hpb,web3,admin,txpool,debug,personal,net console --testmode
 INFO [09-19|22:59:21]  HPB : Create New HpbConfig object
 INFO [09-19|22:59:21]  HPB : Initialising Hpb node             network=66300
 INFO [09-19|22:59:21]  HPB : Allocated cache and file handles  database=/home/ghpb-bin2/node/data/ghpb/chaindata cache=128 handles=1024
 INFO [09-19|22:59:25]  HPB : set coinbase of node              : =0xfc6661501B4faf424D2ed61855A134fa5b2dE3EF
 Unlocking account 0x04cbf60fdcc485a76b0b8a389da7bd87da180edd | Attempt 1/3
 Passphrase:
 ERROR[09-19|22:59:28]  HPB : ---------the password file is     : =123
 INFO [09-19|22:59:29]  HPB : Unlocked account                  address=0x04CbF60FdCc485a76b0B8a389Da7BD87dA180eDd
 INFO [09-19|22:59:29]  HPB : Loaded most recent local header   number=0 hash=e46058896936 td=1
 INFO [09-19|22:59:29]  HPB : Loaded most recent local full block number=0 hash=e46058896936 td=1
 INFO [09-19|22:59:29]  HPB : Loaded most recent local fast block number=0 hash=e46058896936 td=1
 INFO [09-19|22:59:29]  HPB : Set coinbase address by start     address=0xfc6661501B4faf424D2ed61855A134fa5b2dE3EF
 INFO [09-19|22:59:29]  HPB : Change node local type            from=UnknownNode to=PreNode
 INFO [09-19|22:59:29]  HPB : Set Init Local Type by p2p        type=PreNode
 INFO [09-19|22:59:29]  HPB : Starting P2P networking
 INFO [09-19|22:59:31]  HPB : UDP listener up                   self=hnode://edab938abbc31c4c94a55123d4384739ccbfa525f60269a96ec78196b498b47798c874fb3be6af4cde08ad18fba8e14936c20374fab7c6e3ad0bf5d1816c5ae5@[::]:3002
 INFO [09-19|22:59:31]  HPB : Server start with type.           NodeType=PreNode
 INFO [09-19|22:59:31]  HPB : Start server of bandwidth test.   port=3102
 INFO [09-19|22:59:31]  HPB : IPC endpoint opened: /home/ghpb-bin2/node/data/ghpb.ipc
 INFO [09-19|22:59:31]  HPB : HTTP endpoint opened: http://0.0.0.0:8542
 Welcome to the GHPB JavaScript console!

 instance:
 coinbase: 0xfc6661501b4faf424d2ed61855a134fa5b2de3ef
 at block: 0 (Wed, 19 Sep 2018 08:57:13 EDT)
  datadir: /home/ghpb-bin2/node/data
  modules: admin:1.0 debug:1.0 hpb:1.0 miner:1.0 net:1.0 personal:1.0 prometheus:1.0 rpc:1.0 txpool:1.0 web3:1.0

 > miner.start()
 INFO [09-20|02:51:23]  HPB : miner start : :
 INFO [09-20|02:51:23]  HPB : Transaction pool price threshold updated price=18000000000
INFO [09-20|02:51:23]  HPB : Starting mining operation
 null
  • 启动第二个挖矿节点

另开一个控制台窗口输入sudo ./ghpb —datadir node2/data —unlock “第三个账户地址” —networkid 66300 —port 3003 —rpcaddr 0.0.0.0 —rpcport 8543 —verbosity 3 —rpc —rpcapi hpb,web3,admin,txpool,debug,personal,net console —testmode根据提示输入账户密码;

继续输入miner.start()开始挖矿。示例里为创建的第三个账户 “0x552a49773698c75b7fbb47f1a3486f6394cc4385”(注意加上0x前缀);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
root@hpb-PowerEdge-R730xd:/home/ghpb-bin2#sudo ./ghpb --datadir node2/data  --unlock "0x552a49773698c75b7fbb47f1a3486f6394cc4385" --networkid 66300 --port 3003  --rpcaddr 0.0.0.0 --rpcport 8543  --verbosity  3  --rpc  --rpcapi    hpb,web3,admin,txpool,debug,personal,net console --testmode
INFO [09-19|22:43:55]  HPB : Create New HpbConfig object
INFO [09-19|22:43:55]  HPB : Initialising Hpb node             network=66300
INFO [09-19|22:43:55]  HPB : Allocated cache and file handles  database=/home/ghpb-bin2/node2/data/ghpb/chaindata cache=128 handles=1024
INFO [09-19|22:43:58]  HPB : set coinbase of node              : =0xfc6661501B4faf424D2ed61855A134fa5b2dE3EF
Unlocking account 0x552a49773698c75b7fbb47f1a3486f6394cc4385 | Attempt 1/3
Passphrase:
ERROR[09-19|22:44:00]  HPB : ---------the password file is     : =123
INFO [09-19|22:44:01]  HPB : Unlocked account                  address=0x552a49773698c75b7fbb47f1a3486f6394cC4385
INFO [09-19|22:44:01]  HPB : Loaded most recent local header   number=0 hash=e46058896936 td=1
INFO [09-19|22:44:01]  HPB : Loaded most recent local full block number=0 hash=e46058896936 td=1
INFO [09-19|22:44:01]  HPB : Loaded most recent local fast block number=0 hash=e46058896936 td=1
INFO [09-19|22:44:01]  HPB : Set coinbase address by start     address=0xfc6661501B4faf424D2ed61855A134fa5b2dE3EF
INFO [09-19|22:44:01]  HPB : Change node local type            from=UnknownNode to=PreNode
INFO [09-19|22:44:01]  HPB : Set Init Local Type by p2p        type=PreNode
INFO [09-19|22:44:01]  HPB : Starting P2P networking
INFO [09-19|22:44:03]  HPB : UDP listener up                   self=hnode://24eae2a34e82cfb520d508c54f9a06e0951f37a78455f418296bbe011a1bd2e24b386758bbe45ad39e648d1ec375f438a45af2ec6796b7576c5dd4732ea5cccc@[::]:3003
INFO [09-19|22:44:03]  HPB : Server start with type.           NodeType=PreNode
INFO [09-19|22:44:03]  HPB : Start server of bandwidth test.   port=3103
INFO [09-19|22:44:03]  HPB : IPC endpoint opened: /home/ghpb-bin2/node2/data/ghpb.ipc
INFO [09-19|22:44:03]  HPB : HTTP endpoint opened: http://0.0.0.0:8543
Welcome to the GHPB JavaScript console!

instance:
coinbase: 0xfc6661501b4faf424d2ed61855a134fa5b2de3ef
at block: 0 (Wed, 19 Sep 2018 08:57:13 EDT)
 datadir: /home/ghpb-bin2/node2/data
 modules: admin:1.0 debug:1.0 hpb:1.0 miner:1.0 net:1.0 personal:1.0 prometheus:1.0 rpc:1.0 txpool:1.0 web3:1.0

> INFO [09-19|22:44:05]  HPB : Verify the remote hardware.       id=ad65b8d7efc85c50 result=false
INFO [09-19|22:44:05]  HPB : P2P set init peer remote type prenode (TestMode) id=ad65b8d7efc85c50 port=3001
INFO [09-19|22:44:05]  HPB : Network has register peer to syncer id=ad65b8d7efc85c50 port=3001
INFO [09-19|22:44:05]  HPB : Start hpb message loop.           id=ad65b8d7efc85c50 port=3001

感谢HPB技术团队整理。

HPB62:HPB开发节点搭建指南

导读: 社区开发者在开发HPB DAPP的时候首先面临的就是如何接入HPB主网的问题,本文介绍了开发者节点的搭建过程,本文基于Ubuntu 16.04搭建,开发节点相当于轻节点,可发起交易,进行区块同步,但不能进入候选节点、高性能节点的选举,也不能出块,可作为DAPP应用的接入节点。

进行开发节点搭建时您有以下两种方式选择:

(1) 方式一:通过源代码进行节点搭建,选择此种搭建方式需要具备一定软件编程基础。了解编译过程。本方式需要首先完成GO编译环境安装,然后按照源代码搭建步骤及示例进行;

(2) 方式二:通过HPB可执行文件进行节点搭建。本方式直接按照可执行文件搭建步骤及示例进行。

注意:

1.HPB程序必须以ROOT权限运行。

2. 任何与账户密码相关的操作不要委托他人操作,以免密码泄露。

3. 启动节点必须用户本人操作以防止密码泄露。

1. 检查网络连接

进行节点搭建前,用户需要检查服务器的网络连接,分别输入以下五个命令,以检测服务器连接bootnode的过程中是否存在延迟、丢包现象。

编号 命令 节点位置
1 ping -c 200 47.254.133.46 德国 |
2 ping -c 200 47.94.20.30 北京 |
3 ping -c 200 47.88.60.227 硅谷 |
4 ping -c 200 47.75.213.166 香港 |
5 ping -c 200 47.100.250.120 上海 |

示例:(仅以编号1为例,其余命令用户均需执行)

输入命令:ping 47.254.133.46后,等命令结束后控制台会输出总结信息,其中“200 packets transmitted”表示发送200次包,“186 received”表示接受186次包,“7% packet loss”表示连接过程中丢包比例为7%;“time 199386ms”表示200次连接总耗时199836ms,“rtt min/avg/max/mdev = 230.439/248.901/290.203/9.397 ms”表示200次连接中最短时间为234.439ms,平均时间为248.901ms,最长时间为290.203ms,平均方差为9.397ms。

提示:如服务器位置与节点位置为相同洲,则丢包现象需为0%、延迟小于100ms才能达标;(如国内服务器连北京或上海节点时,丢包现象应为0%);当为跨洲连接时,丢包现象一般存在,延迟一般不超过300ms,但其达标数值很难界定,当用户对其丢包比例以及延迟现象不确定时,可询问HPB社区工作人员这两项是否达标。

不达标的用户需联系网络服务提供商或者数据中心,解决网络问题。

2. 源代码搭建示例

(1) 步骤1确定程序执行路径

         输入**sudo mkdir** */home/ghpb-bin*创建程序执行路径;

​ 其中/home/ghpb-bin可改为指定路径

​ 切换成ROOT用户,根据提示输入ROOT账户密码;

(2) 步骤2 选择下载路径

    输入 **cd** */home/*;其中/home/可改为指定路径;       

(3) 步骤3 下载HPB主网可执行程序

    输入 **sudo git clone** *https://github.com/hpb-project/hpb-release*

​ 提示:如果提示go-hpb已存在,则输入命令:rm -rf go-hpb后再下载go-hpb源码。

(4) 步骤4 查看HPB主网可执行程序

         输入**cd** *hpb-release/*进入hpb-release目录,输入ls命令查看该目录文件,可看到bin、config和README.md三个文件。

(5) 步骤5 拷贝创世文件到执行路径

         输入**cd** *config/*进入config目录,继续输入**sudo** **cp** *gensis.json /home/ghpb-bin/**;*其中/hone/gphb-bin/为您所设置的程序执行路径。

(6) 步骤6 进入下载路径

         输入**cd** */home/*将源码下到home目录下,其中/home/可改为源码下载路径

索引:HPB源代码

(7) 步骤7编译go-hpb

     输入**cd** *go-hpb/*;继续输入**make all**编译go-hpb;

(8) 步骤8拷贝程序到执行路径

         输入**sudo cp** *build/bin/\* /home/ghpb-bin/*即可;
         其中/home/ghpb-bin/为您设置的程序执行路径;   

(9) 步骤9 初始化节点

         输入**cd** */home/ghpb-bin/*进入程序执行路径;继续输入**sudo** *./ghpb* **--datadir** *node/data* **init** *gensis.json*,当出现”Successfully wrote genesis state database=chaindata”时,继续下一步;其中/home/ghpb-bin/为您设置的程序执行路径; 

(10) 步骤10导出账户

      从HPB钱包导出您的账户信息文件,输入cd node/data/后继续输入mkdir keystore即可,输入ls可看到ghpb和keystore两个文件;

​ 按顺序进入路径/home/ghpb-bin/node/data/keystore,将账户信息文件拷入keystore文件夹中;

​ 提示:如果没有权限进入这个目录,输入命令 chmod 777 /home/ghpb-bin -R,之后再重新进入。

(11) 步骤11 新建账户

          输入 ./ghpb --datadir node/data account new,稍等片刻根据提示设置新账户的密码,重复输入后将返回新账户地址,用户需记录该地址;

(12) 步骤12启动节点

        **启动方式一**:输入**cd** */home/ghpb-bin/*进入ghpb-bin目录,继续输入
1
sudo ./ghpb --datadir node/data  --networkid 100 --port 3004 --syncmode full  --nodetype synnode console;

​ 当出现“Welcome to the GHPB JavaScript console!”信息时,节点启动成功。

(13) 提示:节点间测试带宽的端口号为本地ghpb端口号加100;开发节点防火墙中本地端口(如3004)必须打开,测试带宽端口可不打开,选择启动方式一时,如果用户退出远程服务器或者关掉终端,节点程序将停止运行。

启动方式二:输入cd /home/ghpb-bin/进入ghpb-bin目录后,继续输入

1
sudo nohup ./ghpb --datadir node/data --networkid 100   --verbosity 3 --syncmode full --rpc --rpcapi hpb,web3,admin,txpool,debug,personal,net,miner,prometheus  --nodetype synnode  &

然后,按两次回车;

提示:节点间测试带宽的端口号为本地ghpb端口号加100;开发节点防火墙中本地端口(默认为30303)必须打开,测试带宽端口可不打开,等待15s后继续输入命令:

1
sudo *./ghpb* attach http://127.0.0.1:8545

3. 可执行文件搭建示例

(1) 步骤1确定程序执行路径

             输入**sudo mkdir** */home/ghpb-bin*创建程序执行路径;其中/home/ghpb-bin可改为指定路径

切换成ROOT用户:输入su root;根据提示输入ROOT账户密码;

(2) 步骤2 选择下载路径

          输入 **cd** */home/*;其中/home/可改为指定路径;

(3) 步骤3 下载HPB主网可执行程序

          输入**sudo git clone** <https://github.com/hpb-project/hpb-release>

如果提示hpb-release已存在,则输入命令:rm -rf hpb-release后再下载hpb-release文件

(4) 步骤4 查看HPB主网可执行程序

           输入**cd** *hpb-release/*进入hpb-release目录,输入ls命令查看该目录文件,可看到bin、config和README.md三个文件。

(5) 步骤5 拷贝创世文件到执行路径

            输入**cd** *config/*进入config目录,继续输入**sudo** **cp** gensis.json  /home/ghpb-bin/,其中/hone/gphb-bin/为您所设置的程序执行路径。

(6) 步骤6 进入下载路径

​ 输入cd .. ,继续输入cd bin/,进入到bin目录,然后解压HPB主网程序

​ 输入sudo tar zxvf ghpb-vx.x.x.x.tar.gz 命令解压ghpb-vx.x.x.x.tar.gz文件,其中x.x.x.x为HPB软件的最新版本号

(7) 步骤7修改文件权限:

​ 输入 sudo chmod +x ghpb-v0.0.0.1 -R

(8) 步骤8 拷贝程序到执行路径

​ 输入sudo cp ghpb-vX.X.X.X/* /home/ghpb-bin/,其中/home/ghpb-bin/为您设置的程序执行路径;

(9) 步骤9 初始化节点

            输入**cd** */home/ghpb-bin/*进入程序执行路径;继续输入**sudo** *./ghpb* **--datadir** *node/data* **init** *gensis.json*,当出现”Successfully wrote genesis state database=chaindata”时,继续下一步;其中/home/ghpb-bin/为您设置的程序执行路径;

(10) 步骤10 导出账户

              从HPB钱包导出您的账户信息文件,创建keystore,输入cd node/data/后继续输入mkdir keystore即可;

​ 输入ls可看到ghpb和keystore两个文件;

(11) 步骤11导入节点

        按顺序进入路径/home/ghpb-bin/node/data/keystore,将账户信息文件拷入keystore文件夹中;

​ 提示:如果没有权限进入这个目录,输入命令 chmod 777 /home/ghpb-bin -R,之后再重新进入.

(12) 步骤12 新建账户

            输入*./ghpb* **--datadir** *node/data* **account new**,稍等片刻根据提示设置新账户的密码,重复输入后将返回新账户地址,用户需记录该地址;

(13) 步骤13启动节点

​ 启动方式一:输入cd /home/ghpb-bin/进入ghpb-bin目录;

​ 继续输入

1
sudo ./ghpb --datadir node/data   --networkid 100 --port 3004 --syncmode full --nodetype synnode console;

当出现“Welcome to the GHPB JavaScript console!”信息时,节点启动成功。

提示:节点间测试带宽的端口号为本地ghpb端口号加100;开发节点防火墙中本地端口(如3004)必须打开,测试带宽端口可不打开,选择启动方式一时,如果用户退出远程服务器或者关掉终端,节点程序将停止运行。

​ 启动方式二:输入cd /home/ghpb-bin/进入ghpb-bin目录;

继续输入

1
sudo nohup ./ghpb --datadir node/data --networkid 100  --verbosity 3 --syncmode full --rpc --rpcapi hpb,web3,admin,txpool,debug,personal,net,miner,prometheus  --nodetype synnode  &

然后,按两次回车;

提示:节点间测试带宽的端口号为本地ghpb端口号加100;开发节点防火墙中本地端口(默认为30303)必须打开,测试带宽端口可不打开,等待10s后继续输入命令:

1
sudo ./ghpb attach http://127.0.0.1:8545

我们创立了HPB的技术讨论专栏,如有任何技术问题,请访问HPB Talk

感谢HPB技术团队整理。

HPB61:HPB BOE 版卡功能介绍

BOE功能介绍

BOE(Blockchain Offload Engine)系统是区块链卸载引擎的缩写,利用硬件FPGA的并发处理能力对区块链节点上的交易、区块等处理过程进行加速。共识算法也与BOE的伪随机序列深度结合,以保证网络内节点能够快速、稳定、安全的运行。下面分别从交易验签和伪随机序列两个方面详细介绍BOE的工作流程。

1 交易验签

在HPB中,从整体上看交易的处理流程有下面几步:

  • 从客户端收到交易数据

  • 由BOE恢复公钥,得到发送者的公钥

  • 根据公钥计算发送者的账户地址

  • 根据账户余额和Nonce验证交易的合法性

  • 交易合法则放入交易池等待打包入块

  • 入块后交易完成

    flow1

​ 图1 交易流程图

其中第二步恢复公钥为BOE的主要工作,恢复公钥的主要流程:

  • 主程序将交易数据打包成网络包
  • BOE从网卡接收数据
  • 协议模块进行协议解析
  • 根据运算类型放入对应的任务队列
  • 任务调度模块将任务从队列中放到 ECC运算模块
  • 重组数据包,将结果发给网卡
  • 主程序接收到BOE返回的数据,解析后得到公钥

​ 图2 BOE框图

2 共识算法随机序列

HPB的共识算法(Prometheus)与BOE的结合之处在于每一次的出块节点是通过BOE产生的伪随机序列来指定的.

其主要过程如下:

  • 各节点准备生成区块
  • 从前一个块头中获取Hash序列
  • 根据当前的Hash送给BOE计算得到NewHash
  • 根据NewHash与当前快照中的节点总数取余,得到本轮次的出块节点索引
  • 如果本节点并不是上面计算得到的出块节点,那么将延时一段时间
  • 如果本节点是上面计算得到的出块节点,那么马上生成区块并广播出去
  • 其他节点同步到区块后,重复执行步骤 2-4 验证该区块的生成者是否为选出的出块节点

flow3

​ 图3 BOE出块流程

其中计算随机数是BOE的主要工作,计算随机数的主要流程:

  • 主程序从块头中获取当前的序列Hash,组成网络包发给BOE
  • BOE从网卡接收数据
  • 协议模块进行协议解析
  • 根据运算类型放入对应的任务队列
  • 任务调度模块将任务从队列中放到 随机序列运算模块
  • 重组数据包,将结果发给网卡
  • 主程序接收到BOE返回的数据,解析后得到NewHash

1548774223928

​ 图4 BOE工作框图

我们创立了HPB的技术讨论专栏,如有任何技术问题,请访问HPB Talk

感谢HPB技术团队整理。

HPB60:HPB共识算法选举机制描述

简介

为了适应BOE技术的要求,同时尽可能的提升安全TPS, HPB共识算法采用了高效的双层选举机制,即外层选举和内层选举。

外层选举:由具有BOE板卡的所有用户中选取出。选取周期为3个月。选取方式为通过HPB钱包进行投票选举。

内层选举:采用节点贡献值评价指标,从众多候选节点中选出高贡献值节点成员。基于Hash队列记名投票机制,在每次区块生成时,计算高贡献值节点生成区块的优先级,优先级高的高贡献值节点享有优先生成区块的权利。

在整个共识算法设计中, HPB共识算法的轻量级消息交换机制使其在共识效率上远高于其他共识算法, 同时在安全性,隐私性等方面也做了较大幅度的提升。

外层选举

由于在申请BOE板卡时已经考虑了除用户持币量的其他因素,所以外层选举在钱包投票节点主要考虑持币量的因素,以及用户的认可度,用户认可度高,则用户会对他进行投票,反之则投票数量少。

注1:如果具有BOE的用户较多,会存在一定数量的用户在外层选举中落选。落选的用户仍然可以入网,但是不会作为候选节点或者高性能节点,并且也不会收到奖励。

内层选举

本文重点关注内层选举。将会详细描述内层选举的实现方式和关键因素。

选举包括2部分,首先是投票节点,然后是唱票阶段。

关键因素

内层选举阶段发生在网络运行中的特定阶段,每间隔一定数量的区块进行一次选举,并且根据关键因素进行排名,选择优秀的节点进行投票。

节点带宽:在节点运行期间,节点会定期测试与其他节点间的带宽数据,并保存在节点中,提供给共识使用,节点的带宽数据会记录在区块中。

用户持币量:用户在投票时的持币数量。

投票数量:外层选举过程中用户节点获得的投票数量。

投票规则

节点根据外层选举得出的节点数据为集合,根据关键因素的排名加权选择最优节点,进行投票。为了保证选举结果数量,在投票过程中进行了随机化操作,并不是在所有的外层选举集合内进行最有选择,而是随机选择出特定数量的集合,然后选择最优节点投票。这个目的是保证选举结果的数量达到稳定值,保证网络的稳定性,并且排除节点排名较靠后的节点。

唱票

已经有了投票的基础数据后,在特定阶段环节进行唱票工作,所有节点在唱票阶段通过读取区块进行唱票,将区块中所有的投票数据提取出来进行统计。在投票阶段会将投票的数据写入voteIndex。

唱票规则

将获得投票的所有节点作为一个集合,从中选出特定数量的节点,作为下一轮的高性能节点。因此需要对该结合中的节点进行排名操作,排名的依据是voteIndex的均值。

最后

在注2中可以看到几个与次文关系较密切的字段,分别是candAddress,miner以及voteIndex。

miner:产生区块的节点。

candAddress:是由miner根据内层选举的3个关键因素确定的。

voteIndex:是candAddress所对应的因素加权结果值。

从投票到唱票的所有环节,所有节点均存在校验机制,确保节点无法进行虚假投票和唱票,如果投票伪造,则该区块会被其他节点拒收;如果唱票伪造,则会被其他节点踢出网络。

注2:区块部分内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
**candAddress: “0x4a8111ecec1f9150d366ae319d0585303085748f”**,
comdAddress: “0x4a8111ecec1f9150d366ae319d0585303085748f”,
difficulty: 2,
extraData: “0x00000000000…”,
gasLimit: 100000000,
gasUsed: 0,
hardwareRandom: “0x2bce19ff44fbf1b05edfb93fcb7c7d3ab04c50fd7dc947e2fce65d66493d0dff”,
hash: “0x1fceb9c0d5a822fdddaa72bb9378f5ce24cd168b0281082a83d8f3a00c62d79a”,
logsBloom: “0x00000000000…”,
**miner: “0x4a8111ecec1f9150d366ae319d0585303085748f”**,
mixHash: “0x0000000000000000000000000000000000000000000000000000000000000000”,
nonce: “0x0000000000000000”,
number: 100,
parentHash: “0xab7299002317fecbfdd835b28bacb470e24a7933b41102f75cb76491957baa98”,
receiptsRoot: “0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421”,
sha3Uncles: “0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347”,
size: 683,
stateRoot: “0xc46fc99654813b2f92e9be58f7e69957499fa2c9b1c0ac31d1da86679f3b9a62”,
timestamp: 1541416798,
totalDifficulty: 201,
transactions: [],
transactionsRoot: “0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421”,
uncles: [],
**voteIndex: "0x0"**
}

具体投票机制可能根据最新的需求会调整,请及时参考最新的代码

我们创立了HPB的技术讨论专栏,如有任何技术问题,请访问HPB Talk

感谢HPB技术团队整理。

HPB59:HPB 是什么

创新之处

HPB芯链采用全新的区块链软硬件体系架构,结合高性能 区块链开源硬件(BOE)以及软件,实现了区块链分布式 应用的性能扩展,在保证安全性和去中心化等特性的情况 下实现了高TPS和低延迟。HPB芯链的共识算法采用双层 选举机制验证交易,在选举制和邀请制之间达成平衡。

开源公链

HPB芯链作为开源公链,公众可自由调用其智能合约,贡 献数据,以及使用该公链平台。HPB芯链致力于建设一个 被全世界广泛接受并采用的DApp生态系统,与产业深度 结合,以满足现实世界的真实商业需求。

区块链专用硬件-区块链卸载引擎(BOE)

HPB自主研发的区块链卸载引擎(BOE),引领区块链技 术走向了更广泛的应用,重新定义了区块链行业的技术要 求。HPB芯链节点网络通过使用BOE硬件和专用高规格服 务器,提升了区块链的交易处理速度;而BOE硬件设计与 区块链技术的无缝融合,也极大地加强了区块链性能及其 安全性。

HPB节点分布和共识算法

BOE硬件构成了HPB节点网络的基石,节点由社区投票和 HPB基金会邀请组成,70%的节点由投票决定,24%的节 点采取邀请制(其中包含非营利组织、非政府组织及 Dapps开发者等),6%的节点由基金会维护。 HPB采用动态共识算法,在节点轮换时考虑不同的变量。 节点网络最初预计将在150个BOE节点上运行,负责生成 区块和验证交易。

节点收益

节点收益分为2部分(1/3奖励 和 2/3奖励)

1/3部分:当选BOE节点: 收益根据投票阶段 所获得的票数比例分配;受邀节点:受邀节点无法参与 投票,因此没有此 部分收益分配。

2/3部分:所有BOE节点 35%收益用于负责出块的高性能节点 65%收益由其他所有候选节点平分。

我们创立了HPB的技术讨论专栏,如有任何技术问题,请访问HPB Talk

感谢HPB技术团队整理。

HPB-Wallet:HPB钱包助记词生成和备份

助记词生成

1 BIP32, BIP39, BIP44

  • BIP32:定义 Hierarchical Deterministic wallet (简称 “HD Wallet”),是一个系统可以从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥)。好处是可以方便的备份、转移到其他相容装置(因为都只需要 seed),以及分层的权限控制等
  • BIP39:将 seed 用方便记忆和书写的单字表示。一般由 12 个单词组成,称为 mnemonic code(phrase),中文称为助记词或助记码。例如:

rose rocket invest real refuse margin festival danger anger border idle brown

  • BIP44:基于 BIP32 的系统,赋予树状结构中的各层特殊的意义。让同一个 seed 可以支持多币种、多帐户等。各层定义如下:

m / purpose' / coin_type' / account' / change / address_index

其中的 purporse’ 固定是 44’,代表使用 BIP44。而 coin_type’ 用来表示不同币种,例如 Bitcoin 就是 0’,Ethereum 是 60’。

2 助记词生成

HPB Wallet目前使用的BIP39,将64位私钥变化为12个单词的形式便于记忆。

打开BIP39.swift文件,可以通过调用下面方法,随机生成一个助记词:

1
2
3
4
5
6
static public func generateMnemonics(bitsOfEntropy: Int, language: BIP39Language = BIP39Language.english) throws -> String? {
        guard bitsOfEntropy >= 128 && bitsOfEntropy <= 256 && bitsOfEntropy % 32 == 0 else {return nil}
        guard let entropy = Data.randomBytes(length: bitsOfEntropy/8) else {throw AbstractKeystoreError.noEntropyError}
        return BIP39.generateMnemonicsFromEntropy(entropy: entropy, language: language)
        
    }     

可以根据助记词去获取seed,然后通过sha256得到明文私钥

1
2
 let seed = BIP39.seedFromMmemonics(mnemonic, language: BIP39Language.english)
 let privateKey = seed.sha256()

2.1 助记词备份

拥有助记词就可以掌控这个账户,因此助记词生成后,要提醒用户去备份助记词。对于去中心化的APP,用户备份后要从本地删除,用户备份之前可以加密存放在本地。

作者:感谢HPB Wallet 开发团队整理供稿

HPB-Wallet:HPB钱包基本概念

1 基本概念

1.1 什么是账户?

一个钱包地址就代表着一个账户。地址是账户的标识。地址表示的是该账户公钥的后20字节(通常会以0x开头,例如,0xed37f755e56b1d49642dce8ff2b788ae33263c94`)。每个账户都由一对钥匙定义,一个私钥(Private Key)和一个公钥(Public Key)。 账户以地址为索引,地址由公钥衍生而来,取公钥的最后20个字节。

1.2 私钥、公钥和地址

  1. 先生成一个私钥,由随机的256bit组成。
  2. 使用加密算法椭圆曲线签名算法elliptic curve cryptography将私钥映射生成公钥。一个私钥只能映射出一个公钥。
  3. 用公钥低位的160bit通过SHA-3加密hash算法计算得到地址。

1.3 Keystore文件

Keystore文件是JSON格式的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{  
   "address":"0xed37f755e56b1d49642dce8ff2b788ae33263c94",
   "crypto":{  
      "cipher":"aes-128-ctr",
      "ciphertext":"41c14f88ec8f35c9fe57cd39121a76c2dadbd82ea8fec59866468bc0d7371f2e",
      "cipherparams":{  
         "iv":"43443bf394e8f6ebcc687e13bc0effb9"
      },
      "kdf":"scrypt",
      "kdfparams":{  
         "dklen":32,
         "n":262144,
         "p":1,
         "r":8,
         "salt":"aaef6847d09cb1e9f5ceadaf5865d96a7493df1cae146b24e31092cc0a7844af"
      },
      "mac":"5e9781c587db5795c6d41cb4f001bf086cc3db33b6e7eefcc2ef472145e76821"
   },
   "id":"bcd61a88-283f-4d81-8457-30ec9c11521f",
   "version":3
}

通过keystore文件中的内容,我们可以看到其中包括了私钥加密的相关信息:

  • address:该账户的地址
  • cipher:加密方法使用的是AES-128-CTR算法4
  • ciphertext:加密后的密文
  • cipherparams:AES-128-CTR算法加密所需的相关参数
  • kdf:秘钥生成函数,用于使用密码对keystore文件进行加密
  • kdfparams:kdf算法所需的参数
  • mac:用于验证密码的编码

2 创建代码

2.1 创建EthereumKeystoreV3对象

在web3siwft中找到EthereumKeystoreV3.swift文件,创建EthereumKeystoreV3对象。构造函数生成对象:

1
2
3
4
5
6
//随机生成私钥
public init? (password: String = "BANKEXFOUNDATION") 
 
//指定私钥   
public init? (privateKey: Data, password: String = "BANKEXFOUNDATION") 
   

在构造方法中会调用encryptDataToStorage方法通过ECC去给keystoreParams赋值。

2.2 创建kstore文件并存入本地

对EthereumKeystoreV3的keystoreParams属性进行编码并存在本地。

具体代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static func generateKstoreFileBy(_ privateKey: Data,password: String,complete: ((String,String)->Void)?) 
   -> WalletManagerResult{
    
    guard let ethereumKeystore = try? EthereumKeystoreV3(privateKey: privateKey, password: password),let ks = ethereumKeystore else{
        return WalletManagerResult(false,"生成Keystore文件出错")
    }
    guard  let keydata = try? JSONEncoder().encode(ks.keystoreParams)
        else{
        return WalletManagerResult(false,"获取Keystore文件出错")
    }
    guard let adress = ks.getAddress() else{
       return WalletManagerResult(false,"获取Keystore文件出错")
    }
    //创建普通的keystore文件
    let filename = HPBFileManager.generateFileName(address: adress.addressData)
    if FileManager.default.createFile(atPath: HPBFileManager.getKstoreDirectory() + filename, contents: keydata, attributes: nil){
        complete?(filename,adress.address.lowercased())
        return WalletManagerResult(true,nil)
    }else{
        return  WalletManagerResult(false,"生成Keystore文件出错")
    }
}

到此,一个新的账户就创建成功了,keystore文件就是加密的账户私钥,需要配合密码使用。

下一节我们会讲解助记词生成和备份。

作者:感谢HPB Wallet 开发团队整理供稿

HPB-Wallet:HPB钱包Xcode集成

1 集成说明

由于HPB主网账户底层算法和以太坊相同,因此我们可以采用以太坊的底层算法对接HPB。熟悉以太坊的朋友都知道,以太坊提供了一个Web3.js API 中文文档的库,通过调用js的代码去实现区块链DApp的开发。

但是对于iOS的小伙伴来说,直接调用js无疑是很困难的,并且从实现上来说也很复杂。因此我们找到了一个swift代码实现的web3swift的库,通过这个我们可以使用swift语言去开发应用,这让实现变得简单。接下来,我们就以这个库为基础,详细介绍钱包的开发过程。

2 Xcode工程设置

2.1 开发环境

  • 支持iOS 9.0以上系统
  • 使用Xcode 9或更高版本
  • swift4.1开发语言

2.2 Xcode工程设置

库文件的导入使用cocoapods,详细安装步骤,请点击

1. 创建Podfile
1
touch Podfile

创建Podfile

2. 使用CocoaPods 安装 web3swift

目前HPB Wallet采用 web3swift 0.7.0版本,后续也会以该版本作为基础进行说明。

1
2
3
4
5
6
platform :ios, '9.0'

target '<Your Target Name>' do
    use_frameworks!
    pod 'web3swift', '~> 0.7.0'
end

pod

在Podfile所在的文件夹下输入命令:

1
pod install 
3. 导入成功,启动工程

在使用的地方导入头文件。

导入

2.3使用CocoaPods的问题

  • pod search无法搜索到类库的解决办法(找不到类库)

(1)执行pod setup

(2)删除~/Library/Caches/CocoaPods目录下的search_index.json文件

1
2
3
pod setup成功后会生成~/Library/Caches/CocoaPods/search_index.json文件。
终端输入rm ~/Library/Caches/CocoaPods/search_index.json
删除成功后再执行pod search

(3)执行pod search

安装好了web3swift库,接下来我们会讲解如何创建钱包。

作者:感谢HPB Wallet 开发团队整理供稿

HPB-Wallet:HPB 钱包简介

1 去中心化钱包基本概念

1.1 简介

我们生活中常用的钱包(支付宝,微信,银行卡等)是由中心化的机构发放,并进行资产管理,我们密码丢失,可以通过相关证明去找回密码。同样的,区块链交易所(bibBox,火币,OKEx等)也是中心化的,由交易所保存我们的私钥。使用交易所非常方便快捷,但其实不建议把大量的数字资产长期保存在交易所中,因为中心化交易所拥有大量的数字代币,容易成为黑客的重点攻击对象。因此我们就需要一款去中心化的区块链钱包保存我们的资产。HPB Wallet 就是一款去中心化的钱包。

1.2 钱包名词

区块链钱包一般包含这几个名词:公钥、私钥、助记词、keystore、密码。

1.2.1 地址

生成区块链钱包开发后会生成一个以 0x 开头的 42 位字符串,这个字符串就是区块链钱包地址。

1.2.2 私钥

这个私钥属于明文私钥,由 64 位字符串组成,一个钱包只有一个私钥且不能修改。谁拥有私钥(不需要原密码)就拥有这个钱包的掌控权。因此,创建完钱包要及时备份私钥,并妥善保存。

1.2.3 助记词

私钥一般太难记忆了,使用也不方便,所以从钱包设计的角度,就为简化操作同时不丢失安全性,就出现了助记词的方法。助记词是明文私钥的另一种表现形式,具有和私钥同样的功能,在导入区块链钱包中,输入助记词并设置一个密码(不用输入原密码)就拥有这个钱包的掌控权,因此,助记词和明文私钥同等重要。

1.2.4 keystore

keystore 属于加密私钥,和区块链钱包密码有很大关联,钱包密码修改后,keystore 也就相应变化,在用 keystore 导入钱包时,需要输入原密码。

1.3 优缺点

1.3.1 交易所的弊端

数字资产交易所未来是否会引入监管还存在极大的不确定性。最重要的一点是人们在交易所上存放的数字资产本质上并不掌握所有权,人们只是把数字资产转到了交易所指定的账号上,由交易所代为管理。所以交易所完全有可能直接用这些数字资产去做短期套利。交易所由于缺乏监管,理论上完全有可能携款跑路,并且极易受黑客攻击。

1.3.2 去中心化钱包

前面讲到了,区块链交易所越来越多的安全事件,让大家意识到使用去中心化钱包的重要性。所谓去中心化钱包,就是创建钱包的过程在本地生成,钱包服务商不保存我们的私钥,所以,相比中心化交易所不会出现交易所被攻击,自己资产丢失的情况。钱包安全程度与你私钥保管有很大的关系。所以,这里要提醒大家,如果使用去中心化的钱包,千万不要将私钥在手机上截图,或通过邮箱、QQ等方式传送,也不要放在云盘等云服务器,建议断网保存。大家可以在一张纸上写下私钥,然后妥善保管。

2 HPB Wallet钱包介绍

HPB Wallet 就是一款去中心化的钱包,可用于存储HPB资产。目前,HPB Wallet提供了用户创建,导入账号,存储HPB资产,转账,交易记录查询,映射,投票等功能。

2.1 钱包核心功能介绍

HPB Wallet 可以在首页查看当前的HPB资产,以及收款和转账功能

转账交易

HPB Wallet 提供用户管理钱包的功能,用户可以创建多个钱包,也可以导入钱包。 钱包管理

HPB Wallet 提供便捷的方式,让以太坊的HPB搬家,并且可以参与投票选出心目中的高性能节点 未命名_meitu_3.jpg

2.2 HPB Wallet的优势

HPB Wallet 基于HPB高性能主链,转账近乎秒级确认,这在业内是很具挑战性的突破。HPB Wallet 让交易更加便捷。

基本概念掌握清楚了,那么接下来的文章我们会讲解如何在HPB主网上开发钱包。

作者:感谢HPB Wallet 开发团队整理供稿