Linux下搭建第一个区块链网络(FISCO BCOS)

2023-11-10


概述

FISCO BCOS是由国内企业主导研发、对外开源、安全可控的企业级金融联盟链底层平台,由金链盟开源工作组协作打造,并于2017年正式对外开源。

社区以开源链接多方,截止2020年5月,汇聚了超1000家企业及机构、逾万名社区成员参与共建共治,发展成为最大最活跃的国产开源联盟链生态圈。底层平台可用性经广泛应用实践检验,数百个应用项目基于FISCO BCOS底层平台研发,超80个已在生产环境中稳定运行,覆盖文化版权、司法服务、政务服务、物联网、金融、智慧社区等领域

FISCO BCOS以联盟链的实际需求为出发点,兼顾性能、安全、可运维性、易用性、可扩展性,支持多种SDK,并提供了可视化的中间件工具,大幅缩短建链、开发、部署应用的时间。此外,FISCO BCOS通过信通院可信区块链评测功能、性能两项评测,单链TPS可达两万。

搭建单群组FISCO BCOS联盟链

本搭建教程参考https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/installation.html

  1. ##安装依赖
yum install -y openssl openssl-devel
  1. ##创建操作目录, 下载安装脚本
## 创建操作目录
cd ~ && mkdir -p fisco && cd fisco

## 下载脚本
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.7.2/build_chain.sh && chmod u+x build_chain.sh
  1. ##搭建单群组4节点联盟
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545

其中-p选项指定起始端口,分别是p2p_port,channel_port,jsonrpc_port
出于安全性和易用性考虑,v2.3.0版本最新配置将listen_ip拆分成jsonrpc_listen_ip和channel_listen_ip,但仍保留对listen_ip的解析功能,为便于开发和体验,channel_listen_ip参考配置是 0.0.0.0 ,出于安全考虑,请根据实际业务网络情况,修改为安全的监听地址,如:内网IP或特定的外网IP

命令执行成功会输出All completed。如果执行出错,请检查nodes/build.log文件中的错误信息。

  1. ##启动FISCO BCOS链,启动所有节点
bash nodes/127.0.0.1/start_all.sh

##执行日志:
[root@localhost fisco]# bash nodes/127.0.0.1/start_all.sh
try to start node0
try to start node1
try to start node2
try to start node3
 node0 start successfully
 node2 start successfully
 node3 start successfully
 node1 start successfully
  1. ##检查进程
ps -ef | grep -v grep | grep fisco-bcos

##执行日志:
[root@localhost fisco]# ps -ef | grep -v grep | grep fisco-bcos
root     13820     1  3 10:06 pts/0    00:00:00 /root/fisco/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini
root     13827     1  3 10:06 pts/0    00:00:00 /root/fisco/nodes/127.0.0.1/node2/../fisco-bcos -c config.ini
root     13831     1  3 10:06 pts/0    00:00:00 /root/fisco/nodes/127.0.0.1/node3/../fisco-bcos -c config.ini
root     13833     1  3 10:06 pts/0    00:00:00 /root/fisco/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini
  1. ##检查日志输出

正常情况会不停地输出连接信息,从输出可以看出node0与另外3个节点有连接。

tail -f nodes/127.0.0.1/node0/log/log*  | grep connected

##日志
[root@localhost fisco]# tail -f nodes/127.0.0.1/node0/log/log*  | grep connected
info|2021-07-14 10:07:53.453594|[P2P][Service] heartBeat,connected count=3
info|2021-07-14 10:08:03.454509|[P2P][Service] heartBeat,connected count=3
info|2021-07-14 10:08:13.454700|[P2P][Service] heartBeat,connected count=3

执行下面指令,检查是否在共识

tail -f nodes/127.0.0.1/node0/log/log*  | grep +++

正常情况会不停输出++++Generating seal,表示共识正常。

[root@localhost fisco]# tail -f nodes/127.0.0.1/node0/log/log*  | grep +++
info|2021-07-14 10:09:21.536245|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=2,hash=05f54a7b...
info|2021-07-14 10:09:25.571959|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=2,hash=41fea7de...

配置及使用控制台

在控制台链接FISCO BCOS节点,实现查询区块链状态、部署调用合约等功能,能够快速获取到所需要的信息。

  1. ##jdk1.8安装(略)
  2. ##获取控制台并回到fisco目录
cd ~/fisco && curl -LO https://github.com/FISCO-BCOS/console/releases/download/v2.7.2/download_console.sh && bash download_console.sh

如果因为网络问题导致长时间无法下载,请尝试 cd ~/fisco && curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master/tools/download_console.sh

  1. ##拷贝控制台配置文件
    若节点未采用默认端口,请将文件中的20200替换成节点对应的channel端口。
# 最新版本控制台使用如下命令拷贝配置文件
cp -n console/conf/config-example.toml console/conf/config.toml
  1. ##配置控制台证书
cp -r nodes/127.0.0.1/sdk/* console/conf/
  1. ##启动并使用控制台
cd ~/fisco/console && bash start.sh

输出下述信息表明启动成功 否则请检查conf/config.toml中节点端口配置是否正确

[root@localhost fisco]# cd ~/fisco/console && bash start.sh
=============================================================================================
Welcome to FISCO BCOS console(2.7.2)!
Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
 ________ ______  ______   ______   ______       _______   ______   ______   ______  
|        |      \/      \ /      \ /      \     |       \ /      \ /      \ /      \ 
| $$$$$$$$\$$$$$|  $$$$$$|  $$$$$$|  $$$$$$\    | $$$$$$$|  $$$$$$|  $$$$$$|  $$$$$$\
| $$__     | $$ | $$___\$| $$   \$| $$  | $$    | $$__/ $| $$   \$| $$  | $| $$___\$$
| $$  \    | $$  \$$    \| $$     | $$  | $$    | $$    $| $$     | $$  | $$\$$    \ 
| $$$$$    | $$  _\$$$$$$| $$   __| $$  | $$    | $$$$$$$| $$   __| $$  | $$_\$$$$$$\
| $$      _| $$_|  \__| $| $$__/  | $$__/ $$    | $$__/ $| $$__/  | $$__/ $|  \__| $$
| $$     |   $$ \\$$    $$\$$    $$\$$    $$    | $$    $$\$$    $$\$$    $$\$$    $$
 \$$      \$$$$$$ \$$$$$$  \$$$$$$  \$$$$$$      \$$$$$$$  \$$$$$$  \$$$$$$  \$$$$$$

=============================================================================================
[group:1]> 

部署及调用HelloWorld合约

  1. ##编写HelloWorld合约
    HelloWorld合约提供两个接口,分别是get()和set(),用于获取/设置合约变量name。合约内容如下
pragma solidity ^0.4.24;

contract HelloWorld {
    string name;

    function HelloWorld() {
        name = "Hello, World!";
    }

    function get()constant returns(string) {
        return name;
    }

    function set(string n) {
        name = n;
    }
}
  1. ##部署HelloWorld合约
    为了方便用户快速体验,HelloWorld合约已经内置于控制台中,位于控制台目录下contracts/solidity/HelloWorld.sol,参考下面命令部署即可。
[group:1]> deploy HelloWorld
transaction hash: 0xd1d9eedee03ab6c3adca63ea9aad9d3cb2b5427facb3ac06a79fb7ec72161eca
contract address: 0xb2afdcdd5ce9474289e007449e755f1847dfc765
currentAccount: 0x486b5c882efb7db6adee929416d4a6f21682f3b4
  1. ##调用HelloWorld合约
# 查看当前块高
[group:1]> getBlockNumber
1

# 调用get接口获取name变量 此处的合约地址是deploy指令返回的地址
[group:1]> call HelloWorld 0xb2afdcdd5ce9474289e007449e755f1847dfc765 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return value size:1
Return types: (STRING)
Return values:(Hello, World!)
---------------------------------------------------------------------------------------------

# 查看当前块高,块高不变,因为get接口不更改账本状态
[group:1]> getBlockNumber
1

# 调用set设置name
[group:1]> call HelloWorld 0xb2afdcdd5ce9474289e007449e755f1847dfc765 set "Hello, FISCO BCOS"                                          
transaction hash: 0x03eb38cec260b38db496196a7fd7cbedb5ba3dc094d8a316cf51b26e97731bb5
---------------------------------------------------------------------------------------------
transaction status: 0x0
description: transaction executed successfully
---------------------------------------------------------------------------------------------
Receipt message: Success
Return message: Success
Return values:[]
---------------------------------------------------------------------------------------------
Event logs
Event: {}

# 再次查看当前块高,块高增加表示已出块,账本状态已更改
[group:1]> getBlockNumber
2

# 调用get接口获取name变量,检查设置是否生效
[group:1]> call HelloWorld 0xb2afdcdd5ce9474289e007449e755f1847dfc765 get                                          
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return value size:1
Return types: (STRING)
Return values:(Hello, FISCO BCOS)
---------------------------------------------------------------------------------------------

# 退出控制台
[group:1]> quit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下搭建第一个区块链网络(FISCO BCOS) 的相关文章

  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 如何通过替换为空页映射来取消映射 mmap 文件

    Linux 用户空间有没有办法用空页面 映射自 dev null 或者可能是一个空页面 重复映射到从文件映射的页面的顶部 对于上下文 我想找到这个 JDK bug 的修复 https bugs openjdk java net browse
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific

随机推荐

  • 【语义分割】1、语义分割超详细介绍

    文章目录 一 分割方法介绍 1 1 Fully Convolutional Networks 2015 1 1 1 FCN 1 1 2 ParseNet 1 2 Encoder Decoder Based Models 1 2 1 通用分割
  • < 在Vue中 el-popover + el-tiptap 实现 富文本框输入,表格点击展示 (富文本HTML标签渲染) >

    文章目录 前言 一 原理 gt el tiptap 安装 及 使用案例 二 实现案例 gt 富文本输入端 gt 富文本输出端 展示端 三 效果演示 小温有话说 往期内容 前言 在Vue开发中 有时候需要用到富文本框输入指定的 富文本 输出端
  • linux搭建虚拟化平台报告,Centos部署KVM虚拟化平台(可跟做)

    Centos部署KVM虚拟化平台 可跟做 发布时间 2020 08 19 05 47 46 来源 51CTO 阅读 4210 作者 俊伟祺i 一 KVM概述 KVM是Kernel Virtual Machine的简写 目前Linux发行版必
  • 电子版简历有哪些(合集)

    word Excel PPT简历 传统的电子版简历 即用文档软件编辑的简历 这一类简历的呈现模式只有单一的文字 图片或表格 传统 意味着被广泛求职者所使用 优点包括有 传统 端庄 直观 但传统也意味着没有创新 缺点包括有 乏味 不新颖 没有
  • BeyondCompare 破解(试用期重置)

    将安装日期改为未来的日期 beyond compare 安装后会在 C Users 计算机名 AppData Roaming BCompare 目录下生成一个 ini文件 记录 安装的时间 和 最近一次打开软件的时间 只要超过30天就会提示
  • X64处理器架构

    X64处理器架构 翻译的windbg帮助文档 X64处理器架构 X64 架构是一个向后兼容的扩展的 x86 提供了和 x86 相同的 32 位模式和一个新的 64 位模式 术语 x64 包括 AMD 64 和 Intel64 他们的指令集基
  • Spring在代码中获取bean的几种方式

    Spring在代码中获取bean的几种方式 方法一 在初始化时保存ApplicationContext对象 方法二 通过Spring提供的utils类获取ApplicationContext对象 方法三 继承自抽象类ApplicationO
  • 黑客一般是如何入侵电脑的?

    1 无论什么站 无论什么语言 我要渗透 第一件事就是扫目录 最好一下扫出个上传点 直接上传 shell 诸位不要笑 有时候你花很久搞一个站 最后发现有个现成的上传点 而且很容易猜到 不过这种情况发生在 asp 居多 2 asp aspx M
  • CV计算机视觉核心07-目标检测yolo v2、v3(yolo初始版本的v0和v1版本代码)

    CV计算机视觉核心07 目标检测 设计检测类算法的output层 可用已知条件有 1 检测问题的输出是什么 怎么用数字来表示 输入是一个矩阵 输出是 x y w h 其中x和y表示目标的左上角坐标 w和h表示目标的长和宽 因此输出是用四个这
  • 【NLP】维基百科中文数据训练word2vec词向量模型——基于gensim库

    前言 本篇主要是基于gensim 库中的 Word2Vec 模型 使用维基百科中文数据训练word2vec 词向量模型 大体步骤如下 数据预处理 模型的训练 模型的测试 准备条件 Windows10 64位 Python3 6 并安装 ge
  • ‘git‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    1 cmd报错内容 C Users 27104 Desktop gt git clone https github com tianyucoder 200826 ajax git 不是内部或外部命令 也不是可运行的程序 或批处理文件 2 原
  • range()函数

    range 函数 创建一个整数列表 一般用于for循环当中 1 语法 range start stop step start 计数从start开始 默认为0 range 9 和range 0 9 是一样的 stop 计数到stop为止 但不
  • 通用智能面临巨大掣肘,国产AIGC还在寻找光明

    无论技术有多先进 符合商业规律才能笑到最后 数科星球 原创 作者丨苑晶 编辑丨十里香 AI GC背后充满了故事 在一家家企业手握巨额融资之时 人们耳边再次响起了警钟 诚然 在新的浪潮之下 符合商业规律的企业才能笑到最后 在国外竞品大踏步前行
  • 关于项目管理的知识点

    转自 http blog joycode com mvm 感觉写的挺好 推荐大家看一下 1 你们的项目组使用源代码管理工具了么 应该用 VSS CVS PVCS ClearCase CCC Harvest FireFly都可以 我的选择是V
  • 【目的:windows下VS2017/2022配置使用opengl - 初探-创建一个空窗口】

    目的 windows下VS2017 2022配置使用opengl 初探 创建一个空窗口 环境 系统 Win10 环境 VS2017 64bit 步骤 windows下visualstudio下使用opengl 搭建配置环境并测试窗口 1 o
  • vue3.0---使用computed来获取vuex里数据

    不再是vue2 0里什么mapGetter mapState那些复杂的获取方式 vue3 0里直接使用computed就可以调用vuex里的数据了 喜大普奔 同时注意 一点 不可以直接使用useStore 方法里的state对象 因为在输出
  • css将文字置于图片上的方法

    我们在开发的时候 有大量的场景需要将文字至于图片之上 如图 以上是将 空山新雨后 天气晚来秋 加在图片之上 对于大多数情况 我们都可以将图片作为背景图引入 但有些时候不能将图片作为背景图引入 这个时候就要用到其他的方法 以下我们提供三种方法
  • MyBatis的lazy-loading是什么?

    MyBatis的lazy loading是什么 MyBatis的lazy loading 延迟加载 是一种数据查询策略 它允许仅在需要时才从数据库中获取相关联的数据 这是通过创建 Java 代理对象来实现的 该代理对象在真正需要相关对象时将
  • linux命令——man

    Shell 也称为终端或壳 用户与 Linux 系统的交互 常见执行Linux命令的格式是这样的 命令名称 命令参数 命令对象 注意 命令名称 命令参数 命令对象之间请用空格键分隔 命令对象一般是指要处理的文件 目录 用户等资源 而命令参数
  • Linux下搭建第一个区块链网络(FISCO BCOS)

    Linux下搭建第一个区块链网络 FISCO BCOS 概述 搭建单群组FISCO BCOS联盟链 配置及使用控制台 部署及调用HelloWorld合约 概述 FISCO BCOS是由国内企业主导研发 对外开源 安全可控的企业级金融联盟链底