当前位置: 代码迷 >> 综合 >> Hyperledger-indy indy-node部署文档
  详细解决方案

Hyperledger-indy indy-node部署文档

热度:67   发布时间:2023-12-23 05:40:51.0

撰写目的

Hyperledger-indy官方提供的indy-node手动部署文档较为简略且为全英文,本人在初次搭建节点时走了一些弯路,因此希望能为初次接触Hyperledger-indy的小伙伴提供一些参考。

内容说明

indy-node支持的是indy链功能。
官方提供docker镜像建立indy-pool(由indy-node组成),同时提供了手动部署indy-node节点的文档
参考文档地址:
https://hyperledger-indy.readthedocs.io/projects/node/en/latest/start-nodes.html
https://hyperledger-indy.readthedocs.io/projects/node/en/latest/setup-dev.html
根据此文档可建立indy-node节点,构建indy-pool,通过indy-pool即可实现使用indy链对数据进行上链的操作。

文章中如有错误,欢迎留言。

Hyperledger-indy下的indy-node,indy-sdk ,aries-cloudagent-python等项目,本人均进行过部署搭建并在企业项目中进行过应用,目前的目标是可以深入了解Hyperledger-indy原理,挖掘更多应用实现,欢迎随时交流。

indy-node部署文档

  • 运行创建项目相关目录的脚本
  • 安装rocksdb
  • 安装indy-crypto
  • 安装indy-plenum
  • 安装indy-node
  • 启动indy-pool之后增加节点

以下操作需要在每一个indy-node上面执行,
如果多个indy-node在同一机器上,因为每个indy-node默认使用同一位置的genesis文件,因此除了启动节点这一步骤之外,需要在同一主机上,针对每个node实例分别执行,其他步骤都只需要执行一次
如果indy-node在不同主机上,那么以下所有步骤都要对每一个主机分别执行

运行创建项目相关目录的脚本

[root@node software]$ cd scripts/create_dirs.sh
[root@node software]$ sh create_dirs.sh
#会创建相关目录,并在/etc/indy目录下生成indy_config.py文件,文件的内容是:
NETWORK_NAME = 'sandbox'
LEDGER_DIR = '/var/lib/indy'
LOG_DIR = '/var/log/indy'
KEYS_DIR = '/var/lib/indy'
GENESIS_DIR = '/var/lib/indy'
BACKUP_DIR = '/var/lib/indy/backup'
PLUGINS_DIR = '/var/lib/indy/plugins'
NODE_INFO_DIR = '/var/lib/indy'

安装rocksdb

安装依赖

yum install -y \gflags-devel\snappy-devel \zlib-devel \bzip2 bzip2-devel \libstdc++-devel \lz4-devel \libzstd-devel \snappy-devel.x86_64snappylibasanzlib

下载rocksdb-6.4.6源码

https://github.com/facebook/rocksdb/ 下载rocksdb源码

[root@node software]$ tar -zxvf rocksdb-6.4.6.tar.gz
[root@node software]$ cd /data/software/rocksdb-6.4.6
[root@node software]$ make static_lib
[root@node software]$ make shared_lib[root@node software]$ export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/data/software/rocksdb-6.4.6/include:/usr/local/lib
[root@node software]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/software/rocksdb-6.4.6/lib
[root@node software]$ export LIBRARY_PATH=$LIBRARY_PATH:/data/software/rocksdb-6.4.6[root@node software]$ sudo cp /data/software/rocksdb-6.4.6/librocksdb.so /usr/local/lib
[root@node software]$ sudo mkdir -p /usr/local/include/rocksdb/ 
[root@node software]$ sudo cp -r /data/software/rocksdb-6.4.6/include/* /usr/local/include/[root@node software]$ ln -s /usr/local/lib/librocksdb.so.5 /usr/local/lib/librocksdb.so
[root@node software]$ ln -s /usr/local/lib/librocksdb.so.5.18 /usr/local/lib/librocksdb.so
[root@node software]$ ln -s /usr/local/lib/librocksdb.so.5.18.3 /usr/local/lib/librocksdb.so[root@node software]$ yum install libsodium-devel zmq 
[root@node software]$ yum install \xz-devel \python-backports-lzma
[root@node software]$ python -m pip install backports.lzma
[root@node software]$ vim /data/software/Python3.6.9/lib/python3.6/lzma.py
#将27行修改为以下内容
try:from _lzma import *from _lzma import _encode_filter_properties, _decode_filter_properties
except ImportError:from backports.lzma import *from backports.lzma import _encode_filter_properties, _decode_filter_properties[root@node software]$ python -m pip install python-rocksdb

安装indy-crypto

下载indy-crypto源码

https://codeload.github.com/hyperledger-archives/indy-crypto/zip/refs/tags/v0.4.2

[root@node software]$ cd indy-crypto-0.4.2\libindy-crypto
[root@node software]$ cargo build
#将libindy_crypto.so添加到系统依赖库中/usr/local/lib
[root@node software]$ cp libindy_crypto.so /usr/local/lib
[root@node software]$ cp libssl.so.1.0.0 /usr/local/lib
[root@node software]$ cp libcrypto.so.1.0.0 /usr/local/lib
[root@node software]$ chmod 777 libindy_crypto.so
[root@node software]$ pip install libindy-crypto

安装indy-plenum

安装glibc2.18

[root@node software]$ yum install -y glibc.x86_64 glibc-devel.x86_64 glibc-static.x86_64
[root@node software]$ curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
[root@node software]$ tar -zxvf glibc-2.18.tar.gz  
[root@node software]$ cd glibc-2.18
[root@node software]$ mkdir build
[root@node software]$ mkdir /data/software/glibc2.18
[root@node software]$ cd build/
[root@node software]$ echo $LD_LIBRARY_PATH
[root@node software]$ export LD_LIBRARY_PATH=
# 安装glibc的时候临时清除$LD_LIBRARY_PATH的值
[root@node software]$ echo $LD_LIBRARY_PATH
#../configure --prefix=/usr
[root@node software]$ ../configure --prefix=/data/software/glibc2.18
[root@node software]$ make -j4
[root@node software]$ make install
[root@node software]$ export GLIBC_PATH=$GLIBC_PATH:/data/software/glibc-2.18/lib
[root@node software]$ source /etc/profile

下载indy-plenum源码

https://codeload.github.com/hyperledger/indy-plenum/zip/refs/tags/v1.12.4

[root@node software]$ tar -zxvf indy-plenum-1.12.4.tar.gz
[root@node software]$ cd /data/software/indy-plenum-1.12.4
[root@node software]$ python setup.py install

安装indy-node

[root@node software]$ ld -lsnappy --verbose
[root@node software]$ yum install snappy-devel.x86_64

下载indy-node源码

https://codeload.github.com/hyperledger/indy-node/zip/refs/tags/v1.12.4

[root@node software]$ unzip indy-node-1.12.4.zip
[root@node software]$ cd indy-node-1.12.4
[root@node software]$ python setup.py install

生成节点间通信所需的密钥,并且生成启动indy-node所需要的genesis文件

会生成集群的pool transaction文件和domain transaction文件

以下命令用来指定集群配置,会按照节点顺序从9700开始为每个节点指定端口

例如,
第1个ip对应的节点端口号为9701,客户端端口号为9702
第2个ip对应的节点端口号为9703,客户端端口号为9704
第3个ip对应的节点端口号为9705,客户端端口号为9706
第4个ip对应的节点端口号为9707,客户端端口号为9708

[root@node software]$ cd indy-node-1.12.4/scripts
# generate_indy_pool_transactions --nodes=节点数量 --clients=客户端 --nodeNum=当前这个节点是第几个节点(节点编号与--ips参数中指定的ip顺序是对应的,不如这里如果指定为2,就是说当前这个节点是--ips这个参数中第二个ip对应的主机) --ips '第1个节点的ip,第2个节点的ip,第3个节点的ip,第4个节点的ip' --network=indy-pool的集群名称(可以随便取,后面就可以用这个名称代替指定集群)
[root@node software]$ generate_indy_pool_transactions --nodes=4 --clients=5 --nodeNum=1 --ips '0.0.0.0,0.0.0.0,0.0.0.0,0.0.0.0' --network=mytest

启动node

[root@node software]$ cd indy-node-1.12.4/scripts
# start_indy_node 节点名称 节点ip 节点端口 客户端ip 客户端端口
[root@node software]$ start_indy_node Node1 0.0.0.0 9701 0.0.0.0 9702

启动indy-pool之后增加节点

将初始节点上的指定文件(pool_transactions_genesis,domain_transactions_genesis)拷贝到新添加的节点的/var/lib/indy/{network_name}目录下面

生成节点通信所需的文件

[root@node software]$ init_indy_keys --name Alpha

启动节点

[root@node software]$ start_indy_node Node2 0.0.0.0 9703 0.0.0.0 9704

生成verkey的base58

verkey=b78300b3a3eca0a1679e72dd1656075de9638ae79dc6469a3093ce1cc8b424f

[root@node software]$ python3 -c "from plenum.common.test_network_setup import TestNetworkSetup; print(TestNetworkSetup.getNymFromVerkey(str.encode(‘ab78300b3a3eca0a1679e72dd1656075de9638ae79dc6469a3093ce1cc8b424f’)))

通过连接indy-node的客户端,将新节点添加到indy-pool

连接indy客户端既可以通过indy-sdk,也可以使用indy-cli工具

ledger node \
target=6G9QhQa3HWjRKeRmEvEkLbWWf2t7cw6KLtafzi494G4G \
client_port=9702 \
client_ip=10.255.255.255 \
alias=NewNode \
node_ip=10.0.0.10.255.255.255 \
node_port=9701 \
services=VALIDATOR \
blskey=zi65fRHZjK2R8wdJfDzeWVgcf9imXUsMSEY64LQ4HyhDMsSn3Br1vhnwXHE7NyGjxVnwx4FGPqxpzY8HrQ2PnrL9tu4uD34rjgPEnFXnsGAp8aF68R4CcfsmUXfuU51hogE7dZCvaF9GPou86EWrTKpW5ow3ifq16Swpn5nKMXHTKj \
blskey_pop=RaY9xGLbQbrBh8np5gWWQAWisaxd96FtvbxKjyzBj4fUYyPq4pkyCHTYvQzjehmUK5pNfnyhwWqGg1ahPwtWopenuRjAeCbib6sVq68cTBXQfXv5vTDhWs6AmdQBcYVELFpyGba9G6CfqQ5jnkDiaAm2PyBswJxpu6AZTxKADhtSrj
  相关解决方案