所用环境
vmware 16 Pro
centos7.6
jdk11.0.6
ideal 2022
1、安装fiscobcos
# 创建操作目录
# cd ~ && mkdir -p fisco && cd fisco
# 下载建链脚本
# curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.6.0/build_chain.sh && chmod u+x build_chain.sh
# Note: 若访问git网速太慢,可尝试如下命令下载建链脚本:
# curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v3.6.0/build_chain.sh && chmod u+x build_chain.sh
修改build_chain.sh
# vim build_chain.sh
在fisco目录下执行下面的指令,生成一条单群组4节点的FISCO链:
# bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200
如果出现
使用
# sudo yum install wget
再次运行
# bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200
启动所有节点
# bash nodes/127.0.0.1/start_all.sh
检查进程是否启动
# ps aux |grep -v grep |grep fisco-bcos
查看每个节点的网络连接数目
以node0为例:
# tail -f nodes/127.0.0.1/node0/log/* |grep -i "heartBeat,connected count"
ctrl+c退出
2、安装控制台
查看jdk环境
# java -version
安装jdk
# mkdir jdk
自己安装我这用的jdk11
解压
tar -xzvf jdk-11.0.6_linux-x64_bin.tar.gz
配置
# vim /etc/profile
JAVA_HOME=/usr/local/jdk/jdk-11.0.6
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
保存并退出然后
# source /etc/profile
查看jdk版本号
# java -version
下载控制台(需要翻墙)
# cd ~/fisco && curl -LO https://github.com/FISCO-BCOS/console/releases/download/v3.6.0/download_console.sh && bash download_console.sh
修改配置
拷贝控制台配置文件
# cp -n console/conf/config-example.toml console/conf/config.toml
配置控制台证书
# cp -r nodes/127.0.0.1/sdk/* console/conf
启动
# cd ~/fisco/console && bash start.sh
获取节点列表信息
在控制台合约部署与查看
退出 quit
# 当前目录~/fisco/console
查看合约
# ls contracts/solidity
控制台编译
# bash contract2java.sh solidity -p org.com.fisco -s ./contracts/solidity/HelloWorld.sol
如果出现
# sudo yum install bzip2
再次编译
# bash contract2java.sh solidity -p org.com.fisco -s ./contracts/solidity/HelloWorld.sol
查看生成的java代码
# ls /root/fisco/console/contracts/sdk/java/org/com/fisco
3、安装webbase
1、下载安装包
# wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v3.1.1/webase-front.zip
2、解压
# unzip webase-front.zip && cd webase-front
如果出现
就下载
# sudo yum install unzip
再次运行
# unzip webase-front.zip && cd webase-front
3、拷贝sdk证书文件(build_chain的时候生成的)
将节点所在目录nodes/${ip}/sdk
下的所有文件拷贝到当前conf
目录,供SDK与节点建立连接时使用
# cp -r /root/fisco/nodes/127.0.0.1/sdk/* ./conf/
4、修改配置
# vi conf/application.yml
sdk:
useSmSsl: false # sdk连接节点是否使用国密ssl
peers: ['127.0.0.1:20200','127.0.0.1:20201'] # 节点ip和rpc端口
5、检查与 运行
# bash stop.sh
# bash start.sh
# bash status.sh
1. 检查各子系统进程
通过ps
命令,检查节点与节点前置的进程是否存在
- 包含:节点进程
nodeXX
,节点前置进程webase.front
检查方法如下,若无输出,则代表进程未启动,需要到webase-front/log
中查看日志的错误信息,并根据错误提示或根据WeBASE-Front常见问题进行错误排查
检查节点进程
# ps -ef | grep node
检查节点前置webase-front的进程
# ps -ef | grep webase.front
2. 检查进程端口
通过netstat
命令,检查节点与节点前置的端口监听情况
检查方法如下,若无输出,则代表进程端口监听异常,需要到webase-front/log
中查看日志的错误信息,并根据错误提示或根据WeBASE-Front常见问题进行错误排查
检查节点channel端口(默认为20200)是否已监听
# netstat -anlp | grep 20200
出现
运行进行安装
# sudo yum install net-tools
再次运行
# netstat -anlp | grep 20200
检查webase-front端口(默认为5002)是否已监听
# netstat -anlp | grep 5002
3. 检查服务日志
日志中若出现报错信息,可根据信息提示判断服务是否异常,也可以参考并根据错误提示或根据WeBASE-Front常见问题进行错误排查
- 如果节点进程已启用且端口已监听,可跳过本章节
- 如果节点前置异常,如检查不到进程或端口监听,则需要
webase-front/log
中查看日志的错误信息 - 如果检查步骤出现检查不到进程或端口监听等异常,或者前置服务无法访问,可以按以下顺序逐步检查日志:
- 检查
webase-front/log
中查看节点前置日志的错误信息,如果无错误,且日志最后出现application run success
字样则代表运行成功 - 检查
nodes/127.0.0.1/nodeXXX/log
中的节点日志
- 检查
查看运行成功日志:webase-front运行成功后会打印日志main run success
,可以通过搜索此关键字来确认服务正常运行。
如,检查webase-front日志,其他webase服务可进行类似操作
# cd webase-front
# grep -B 3 "main run success" log/WeBASE-Front.log
6、访问
http://${你的ip}:5002/WeBASE-Front
4、账户的创建 与使用
国密生成账户脚本get_gm_account.sh
与非国密get_account.sh
选项和使用方式一致,请参考操作即可,不再赘述。
1、获取脚本
# curl -#LO https://raw.githubusercontent.com/FISCO-BCOS/console/master/tools/get_account.sh && chmod u+x get_account.sh && bash get_account.sh -h
如果出现
使用
# curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/get_account.sh && chmod u+x get_account.sh && bash get_account.sh -h
成功
国密版本请使用下面的指令获取脚本
# curl -#LO https://raw.githubusercontent.com/FISCO-BCOS/console/master/tools/get_gm_account.sh && chmod u+x get_gm_account.sh && bash get_gm_account.sh -h
失败就用
# curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/get_gm_account.sh && chmod u+x get_gm_account.sh && bash get_gm_account.sh -h
2、使用脚本生成PEM格式私钥
-
生成私钥与地址
# bash get_account.sh
-
指定PEM私钥文件计算账户地址
# bash get_account.sh -k accounts/0x47e4377540d90841dd8d5eb4a14c40473c742e9d.pem
3、使用脚本生成PKCS12格式私钥
-
生成私钥与地址
要设置一个密码我用root
# bash get_account.sh -p
-
指定p12私钥文件计算账户地址,按提示输入p12文件密码
# bash get_account.sh -P accounts/0x2d6319c1c3043d0fb76facfa9276095619940e69.p12
5、账户的存储
-
Java SDK支持通过私钥字符串或者文件加载,所以账户的私钥可以存储在数据库中或者本地文件。
-
本地文件支持两种存储格式,其中PKCS12加密存储,而PEM格式明文存储。
-
开发业务时可以根据实际业务场景选择私钥的存储管理方式。
6、账户的使用
控制台加载私钥文件
控制台提供账户生成脚本get_account.sh,生成的的账户私钥文件在accounts目录下,控制台加载私钥时需要指定私钥文件。 控制台启动方式有如下几种:
bash start.sh
bash start.sh group0
bash start.sh group0 -pem pemName
bash start.sh group0 -p12 p12Name
控制台随机生成一个账户,使用控制台配置文件指定的群组号启动。
bash start.sh
控制台随机生成一个账户,使用命令行指定的群组名启动。
bash start.sh group0
-
注意:指定的群组在控制台配置文件中需要配置bean。
使用PEM格式私钥文件启动
-
使用指定的pem文件的账户启动,输入参数:群组号、-pem、pem文件路径
bash start.sh group0 -pem accounts/0xebb824a1122e587b17701ed2e512d8638dfb9c88.pem
使用PKCS12格式私钥文件启动
-
使用指定的p12文件的账户,需要输入密码,输入参数:群组名、-p12、p12文件路径
bash start.sh group0 -p12 accounts/0x5ef4df1b156bc9f077ee992a283c2dbb0bf045c0.p12
Enter Export Password:
如果通过账户生成脚本get_accounts.sh生成了PEM或PKCS12格式的账户私钥文件,则可以通过加载PEM或PKCS12账户私钥文件使用账户。加载私钥有两个类:P12Manager和PEMManager,其中,P12Manager用于加载PKCS12格式的私钥文件,PEMManager用于加载PEM格式的私钥文件。
-
P12Manager用法举例:
使用代码加载私钥。
// 初始化BcosSDK
BcosSDK sdk = BcosSDK.build(configFile);
// 为群组group0初始化client
Client client = sdk.getClient("group0");
// 通过client获取CryptoSuite对象
CryptoSuite cryptoSuite = client.getCryptoSuite();
// 加载pem账户文件
cryptoSuite.loadAccount("p12", p12AccountFilePath, password);
-
PEMManager使用举例
使用代码加载私钥。
// 初始化BcosSDK
BcosSDK sdk = BcosSDK.build(configFile);
// 为群组group0初始化client
Client client = sdk.getClient("group0");
// 通过client获取CryptoSuite对象
CryptoSuite cryptoSuite = client.getCryptoSuite();
// 加载pem账户文件
cryptoSuite.loadAccount("pem", pemAccountFilePath, null);
账号目录这个后面java会用
7. 以太坊账号生成
生成ECDSA私钥
首先,我们使用OpenSSL生成椭圆曲线私钥,椭圆曲线的参数使用secp256k1。执行下面的命令,生成PEM格式的私钥并保存在ecprivkey.pem文件中。
# openssl ecparam -name secp256k1 -genkey -noout -out ecprivkey.pem
执行下面的指令,查看文件内容。
# cat ecprivkey.pem
接下来根据私钥计算公钥,执行下面的指令
# openssl ec -in ecprivkey.pem -text -noout 2>/dev/null| sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}'
根据公钥计算地址
下载ethereum-generate-wallet/lib/x86-64 at master · vkobel/ethereum-generate-wallet · GitHub
我将这个放入
运行
# openssl ec -in ecprivkey.pem -text -noout 2>/dev/null| sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}' | ./keccak-256sum -x -l | tr -d ' -'
运行改为可执行
# chmod +x keccak-256sum
再次运行
# openssl ec -in ecprivkey.pem -text -noout 2>/dev/null| sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}' | ./keccak-256sum -x -l | tr -d ' -'
5、java调用
1、springboot项目
项目结构
注意
注意防火墙端口开放
# systemctl start firewalld 开启防火墙
# systemctl stop firewalld 关闭防火墙
# systemctl status firewalld 防火墙状态查看
# sudo firewall-cmd --zone=public --add-port=5001/tcp --permanent 防火墙端口放行
# sudo firewall-cmd --reload 防火墙更新
# sudo firewall-cmd --list-ports 放行端口查看
项目xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nlecloud.bc</groupId>
<artifactId>copyright-server</artifactId>
<version>1.0-SNAPSHOT</version>
<name>copyright-server</name>
<parent>
<groupId>org.springframework.boot</g