FISCO BCOS

这篇具有很好参考价值的文章主要介绍了FISCO BCOS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、wsl(windows子系统)安装步骤

wsl(windows子系统)简要介绍和安装步骤_Once_day的博客-CSDN博客_wsl

1、自动安装命令

        管理员身份打开CMD,输入wsl --install。用时很长特别是安装Ubuntu时,可以参考上面博客自行安装。可以在那一步退出,然后到应用商店安装。完成后重启即可。

wsl --install

在未安装WSL的机器上,该命令可完成自动安装的全部过程:

  • 启动所需的windows组件和功能
  • 下载最新的linux内核
  • 将WSL2设置为默认值
  • 安装LIunx发行版-----Ubuntu。

二、搭建FISCO BCOS

搭建第一个区块链网络 — FISCO BCOS v3.0.0-rc4 文档

q1:安装到控制台运行依赖java环境(推荐使用java 14)报错:

fiscobcos控制台安装,java,运维,区块链

解决办法:

sudo apt-get update

8.12之后该 3、部署和调用合约


8.19直接重新启动控制台报错

fiscobcos控制台安装,java,运维,区块链

 因为链还没有启动,需要回到第四步. 启动FISCO BCOS链,然后再打开控制台。


over****************************************************************************************************end

三、开发第一个区块链应用(一定要看清网络是哪个版本,2&3不兼容!!!!!!)

开发第一个区块链应用 — FISCO BCOS v2.9.0 文档                  ×

开发第一个Solidity区块链应用 — FISCO BCOS v3 v3.0.0 文档  √

Asset.sol这个智能合约在搭建搭建第一个区块链网络的时候已经写好了在

~/fisco/console/contracts/solidity路径下,所以需要直接到编译这一步,但是输入下面命令行
# 若控制台版本大于等于2.8.0,编译合约方法如下:(可通过bash sol2java.sh -h命令查看该脚本使用方法)
bash sol2java.sh -p org.fisco.bcos.asset.contract

报错:

fiscobcos控制台安装,java,运维,区块链

 大概因为控制台版本问题吧,需要把上一步的

# 下载控制台
cd ~/fisco && curl -#LO https://github.com/FISCO-BCOS/console/releases/download/v2.9.1/download_console.sh && bash download_console.sh

再执行一遍,这个时候~/fisco/console路径下就会有了sol2java.sh*文件。

编译之后查看console/contracts/sdk目录生成java、abi和bin目录

fiscobcos控制台安装,java,运维,区块链

Asset.sol智能合约没有编译成功,报错如下fiscobcos控制台安装,java,运维,区块链

 可能原来自带的Asset.sol内容,版本什么的有问题,所以就直接把原来的文件跟文档提供的替换一下,然后再编译就通过了。

pragma solidity ^0.4.24;

import "./Table.sol";

contract Asset {
    // event
    event RegisterEvent(int256 ret, string account, uint256 asset_value);
    event TransferEvent(int256 ret, string from_account, string to_account, uint256 amount);

    constructor() public {
        // 构造函数中创建t_asset表
        createTable();
    }

    function createTable() private {
        TableFactory tf = TableFactory(0x1001);
        // 资产管理表, key : account, field : asset_value
        // |  资产账户(主键)      |     资产金额       |
        // |-------------------- |-------------------|
        // |        account      |    asset_value    |
        // |---------------------|-------------------|
        //
        // 创建表
        tf.createTable("t_asset", "account", "asset_value");
    }

    function openTable() private returns(Table) {
        TableFactory tf = TableFactory(0x1001);
        Table table = tf.openTable("t_asset");
        return table;
    }

    /*
    描述 : 根据资产账户查询资产金额
    参数 :
            account : 资产账户

    返回值:
            参数一: 成功返回0, 账户不存在返回-1
            参数二: 第一个参数为0时有效,资产金额
    */
    function select(string account) public constant returns(int256, uint256) {
        // 打开表
        Table table = openTable();
        // 查询
        Entries entries = table.select(account, table.newCondition());
        uint256 asset_value = 0;
        if (0 == uint256(entries.size())) {
            return (-1, asset_value);
        } else {
            Entry entry = entries.get(0);
            return (0, uint256(entry.getInt("asset_value")));
        }
    }

    /*
    描述 : 资产注册
    参数 :
            account : 资产账户
            amount  : 资产金额
    返回值:
            0  资产注册成功
            -1 资产账户已存在
            -2 其他错误
    */
    function register(string account, uint256 asset_value) public returns(int256){
        int256 ret_code = 0;
        int256 ret= 0;
        uint256 temp_asset_value = 0;
        // 查询账户是否存在
        (ret, temp_asset_value) = select(account);
        if(ret != 0) {
            Table table = openTable();

            Entry entry = table.newEntry();
            entry.set("account", account);
            entry.set("asset_value", int256(asset_value));
            // 插入
            int count = table.insert(account, entry);
            if (count == 1) {
                // 成功
                ret_code = 0;
            } else {
                // 失败? 无权限或者其他错误
                ret_code = -2;
            }
        } else {
            // 账户已存在
            ret_code = -1;
        }

        emit RegisterEvent(ret_code, account, asset_value);

        return ret_code;
    }

    /*
    描述 : 资产转移
    参数 :
            from_account : 转移资产账户
            to_account : 接收资产账户
            amount : 转移金额
    返回值:
            0  资产转移成功
            -1 转移资产账户不存在
            -2 接收资产账户不存在
            -3 金额不足
            -4 金额溢出
            -5 其他错误
    */
    function transfer(string from_account, string to_account, uint256 amount) public returns(int256) {
        // 查询转移资产账户信息
        int ret_code = 0;
        int256 ret = 0;
        uint256 from_asset_value = 0;
        uint256 to_asset_value = 0;

        // 转移账户是否存在?
        (ret, from_asset_value) = select(from_account);
        if(ret != 0) {
            ret_code = -1;
            // 转移账户不存在
            emit TransferEvent(ret_code, from_account, to_account, amount);
            return ret_code;

        }

        // 接受账户是否存在?
        (ret, to_asset_value) = select(to_account);
        if(ret != 0) {
            ret_code = -2;
            // 接收资产的账户不存在
            emit TransferEvent(ret_code, from_account, to_account, amount);
            return ret_code;
        }

        if(from_asset_value < amount) {
            ret_code = -3;
            // 转移资产的账户金额不足
            emit TransferEvent(ret_code, from_account, to_account, amount);
            return ret_code;
        }

        if (to_asset_value + amount < to_asset_value) {
            ret_code = -4;
            // 接收账户金额溢出
            emit TransferEvent(ret_code, from_account, to_account, amount);
            return ret_code;
        }

        Table table = openTable();

        Entry entry0 = table.newEntry();
        entry0.set("account", from_account);
        entry0.set("asset_value", int256(from_asset_value - amount));
        // 更新转账账户
        int count = table.update(from_account, entry0, table.newCondition());
        if(count != 1) {
            ret_code = -5;
            // 失败? 无权限或者其他错误?
            emit TransferEvent(ret_code, from_account, to_account, amount);
            return ret_code;
        }

        Entry entry1 = table.newEntry();
        entry1.set("account", to_account);
        entry1.set("asset_value", int256(to_asset_value + amount));
        // 更新接收账户
        table.update(to_account, entry1, table.newCondition());

        emit TransferEvent(ret_code, from_account, to_account, amount);

        return ret_code;
    }
}

8.19编译完成之后该该4步创建区块链应用项目文章来源地址https://www.toymoban.com/news/detail-808429.html


到了这里,关于FISCO BCOS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搭建第一个区块链网络(Fisco-Bcos),启动并使用控制台

    1.安装依赖 centos7 Ubuntu 2.创建操作目录, 下载安装脚本 3. 搭建单群组4节点联盟链 搭建成功截图如下  4.启动FISCO BCOS链 启动成功截图如下  5.检查进程 检查进程是否启动  输出结果如下,如果进程数不为4,则进程没有启动(一般是端口被占用导致的)  6.检查日志输出 查看节

    2024年02月04日
    浏览(43)
  • OpenKruiseGame × KubeSphere 联合发布游戏服运维控制台,推动云原生游戏落地

    作者:云原生游戏社区 近日,云原生游戏开源社区旗下 OpenKruiseGame(以下简称:OKG)基于 KubeSphere 4.0 LuBan 架构开发的游戏服运维控制台 OKG Dashboard 正式发布!现已上架 KubeSphere Marketplace 云原生应用扩展市场,支持免费使用。 OpenKruiseGame(OKG) 是 CloudNativeGame 社区联合阿里云

    2024年01月24日
    浏览(41)
  • java实现控制台购书系统

    目录 代码 实现思路 0x1 创建Book图书 0X2 读取图书 0x3 书籍判断  0x4 订单计算 总结 就是增删改查,定义图书为class类,但是图书Bokk class的有参构造函数为数组类型实例化。,这样可以将书籍的编号名称,单击库存依次存入,使用就通过数组books[]的索引来拿到每一项的值,通过遍历数组

    2024年01月21日
    浏览(34)
  • RocketMQ, Dashboard, 控制台安装

    本文主要说明RocketMQ的控制台(Dashboard)的安装过程。工作中一直用的是别人装好的,这次终于自己亲手装了一遍。 由于每次都要启动三个应用,比较烦,于是我写了一键启动脚本,分享给大家。这个脚本可以一键启动RocketMQ的所有应用。还能自动识别应用是否已经启动成功

    2024年02月14日
    浏览(28)
  • Docker安装sentinel控制台

    1、拉取镜像,直接使用run命令,如果说本地没有镜像就会直接去远程仓库拉取: --network是你自己建立的网桥,不加这一行也行,就是默认网桥bridge 按照我的命令你是执行不成功的,因为没有网桥,此时你需要先将你创建的这个docker 容器删掉 docker rm -f  sentinel-dashboard  把网

    2024年02月03日
    浏览(33)
  • Docker安装Elasticsearch和控制台

    安装 Elasticsearch 使用 Docker 非常简单。以下是详细步骤: 安装 Docker :如果你还没有安装 Docker,请从 Docker 官网 下载并安装适用于你操作系统的 Docker 版本。 拉取 Elasticsearch 镜像 :打开命令行界面(CLI),输入以下命令以从 Docker Hub 拉取最新的 Elasticsearch 镜像: 请确保将

    2024年02月04日
    浏览(29)
  • 【Java案例】基于控制台的购书系统

    案例介绍: (1)输出所有图书的信息:包括每本书的编号、书名、单价、库存。 (2)顾客购买书时,根据提示输入购买书的数量。 (3)购买完毕后输出顾客的订单信息,包括:订单号、订单明细、订单总额。  运行结果: //Book //OrderItem //Order //BuyBooks:outBooks()、buyBooks(

    2024年02月08日
    浏览(29)
  • C++制作安装包【1】—— 控制台实现

    之前用NSIS的时候发现不方便自制UI,找了其他的安装包开发框架,开发手感还是不好,功能残缺不一。我就想 如何使用纯代码的方式制作安装包 呢?经历了众多艰难才终于摸出方法。网上现有的文章都是用NSIS,Windows Installer等等现成框架制作安装包的。所以我另开一个专栏

    2024年02月04日
    浏览(35)
  • 区块链搭建联盟链及控制台安装

    执行成功后,我们将看到当前目录下生成了一个 nodes 目录。nodes 目录下存在两个目录,分别是 127.0.0.1 和 cert ,我们进入 127.0.0.1 目录 ,执行执行 bash start_all.sh , 看到输出 “start successfully” 表示节点启动成功。至此,一切顺利的话,我们的链就创建并启动成功了 检查是否

    2024年02月02日
    浏览(41)
  • 08-Linux安装RocketMQ、RocketMQ控制台

    下载RocketMQ         http://rocketmq.apache.org/release_notes/release-notes-4.4.0/ 环境要求         Linux 64位操作系统         64bit JDK 1.8+ 1 上传文件到Linux系统         /usr/local/rocketMQ 2 解压到安装目录         unzip rocketmq-all-4.4.0-bin-release.zip 3 解压后的文件夹名为 rocketmq-4

    2024年02月05日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包