Fisco-bsco 开发联盟链 账户之间的转账

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

Fisco-bsco 开发联盟链 账户之间的转账

参考:开发第一个区块链应用 — FISCO BCOS v2.9.0 文档 (fisco-bcos-documentation.readthedocs.io)

前提:Fisco-bcos节点开启,控制台已搭建

步骤:

1. 开发源码

# 进入console/contracts目录
cd ~/fisco/console/contracts/solidity
# 创建Asset.sol合约文件
vi Asset.sol
​
# 将Assert.sol合约内容写入。
# 并键入wq保存退出。

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;
    }
}

运行ls命令,确保Asset.solTable.sol在目录~/fisco/console/contracts/solidity下。

Table.sol 在搭建控制台的时候自动创建

2.编译智能合约

# 切换到fisco/console/目录
cd ~/fisco/console/
​
# 若控制台版本大于等于2.8.0,编译合约方法如下:(可通过bash sol2java.sh -h命令查看该脚本使用方法)
bash sol2java.sh -p org.fisco.bcos.asset.contract
​
# 若控制台版本小于2.8.0,编译合约(后面指定一个Java的包名参数,可以根据实际项目路径指定包名)如下:
./sol2java.sh org.fisco.bcos.asset.contract

3.创建区块链应用项目

  1. 确认jdk以及集成环境

 确认您当前的java版本
$ java -version
# 确认您的java路径
$ ls /Library/Java/JavaVirtualMachines
# 返回
# jdk-14.0.2.jdk
​
# 如果使用的是bash
$ vim .bash_profile 
# 在文件中加入JAVA_HOME的路径
# export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home 
$ source .bash_profile
​
# 如果使用的是zash
$ vim .zashrc
# 在文件中加入JAVA_HOME的路径
# export JAVA_HOME = Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home 
$ source .zashrc
​
# 确认您的java版本
$ java -version
# 返回
# java version "14.0.2" 2020-07-14
# Java(TM) SE Runtime Environment (build 14.0.2+12-46)
# Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)
​
  1. 进入IntelliJ IDE官网下载社区版即可,安装解压

  2. 快速搭建

     cd ~/fisco
    $ curl -#LO https://github.com/FISCO-BCOS/LargeFiles/raw/master/tools/asset-app.tar.gz
    # 解压得到Java工程项目asset-app
    $ tar -zxf asset-app.tar.gz
    ​
  3. 将项目用IDE打开,打开终端

    # 假设我们将asset-app放在~/fisco目录下 进入~/fisco目录
    $ cd ~/fisco
    # 创建放置证书的文件夹
    $ mkdir -p asset-app/src/test/resources/conf
    # 拷贝节点证书到项目的资源目录
    $ cp -r nodes/127.0.0.1/sdk/* asset-app/src/test/resources/conf
    # 若在IDE直接运行,拷贝证书到resources路径
    $ mkdir -p asset-app/src/main/resources/conf
    $ cp -r nodes/127.0.0.1/sdk/* asset-app/src/main/resources/conf

4.运行

  • 编译

    # 切换到项目目录
    $ cd ~/fisco/asset-app
    # 编译项目
    $ ./gradlew build
  • 部署Asset.sol

    # 进入dist目录
    $ cd dist
    $ bash asset_run.sh deploy
    Deploy Asset successfully, contract address is 0xd09ad04220e40bb8666e885730c8c460091a4775
  • 注册资产

    $ bash asset_run.sh register Alice 100000
    Register account successfully => account: Alice, value: 100000
    $ bash asset_run.sh register Bob 100000
    Register account successfully => account: Bob, value: 100000
  • 查询资产

    $ bash asset_run.sh query Alice
    account Alice, value 100000
    $ bash asset_run.sh query Bob
    account Bob, value 100000
  • 资产转移

    $ bash asset_run.sh transfer Alice Bob  50000
    Transfer successfully => from_account: Alice, to_account: Bob, amount: 50000
    $ bash asset_run.sh query Alice
    account Alice, value 50000
    $ bash asset_run.sh query Bob
    account Bob, value 150000

 联盟链转账,fisco-baco,区块链,联盟链

 文章来源地址https://www.toymoban.com/news/detail-803115.html

到了这里,关于Fisco-bsco 开发联盟链 账户之间的转账的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 区块链入门教程(4)--搭建单机四节点FISCO BCOS联盟链

    要学习区块链,首先得有一个区块链系统去操作、学习、研究,FISCO BCOS区块链系统是一个应用广泛、文档全面、知名度向量的区块链系统,我们就从该系统安装开始入手学习。

    2024年02月05日
    浏览(44)
  • 【示例】MySQL-事务控制示例:账户转账-savepoint关键字

    本文讲述MySQL中的事务,以账户转账为例,体会事务的概念,并讲解事务相关的一个用法:savepoint 所有SQL正常执行,没有出错。结果就是:张三账户余额-1000;李四账户余额+1000 只有前两个SQL执行了,第三个SQL没有执行,出现数据不一致了:张三的钱减少了,但是李四

    2024年04月13日
    浏览(31)
  • 联盟链是虚构的?没有用的?用FISCO BCOS来展示链委员这件事

             当前区块链大都使用的是投票决定这种方法,但是如何使现实中的投票转换到区块链中,如何让举手表决变得更加智能,如何让投票透明、安全、权威,这是区块链的一大设计思路,有很多人觉得联盟链是个梦,是个虚无缥缈的东西,确实联盟链介于公链的开放

    2024年02月05日
    浏览(50)
  • J9数字论:什么是公链、联盟链、私有链?它们之间区别在哪?

    公有链是任何人都能参与读取、交易、写入的区块链,完全去中心化,账本信息公开透明,不受任何机构控制。公有链一般都需要挖矿来达成共识,因此带来了交易延时高、成本高和效率低等缺点。公有链的典型代表有比特币、以太坊、EOS等。私有链是指记账权由单独的个人

    2024年02月12日
    浏览(44)
  • AzureAD 中 订阅,租户,账户之间的关系

    微软提供了组织、订阅、许可证和用户帐户的层次结构,以便在其云产品中一致使用身份和账单 租户与Azure相关,指的是Azure Active Directory的单个实例,或者通常被称为“Azure AD”。Azure AD是Microsoft的云平台的关键部分,因为它提供了一个单一的位置来管理用户、组以及他们所

    2024年02月06日
    浏览(43)
  • 基于微信云开发的商家转账至零钱

    本篇文章主要介绍如何通过微信云开发的云函数实现商家转账到零钱。(让那些 没有服务器 的程序员也可以练练手) 微信官方文档 本菜开发时开通条件是“连续正常交易30天且账户开通90天”,所有就连续30天转入自己账户小额金钱,幸好是去年开通的商户,所有90天是满足

    2024年02月09日
    浏览(43)
  • 蚂蚁开放联盟链合约开发入门

    蚂蚁链包含多个产品:合约体验链、开放联盟链、联盟链 合约体验链:一条本地开发体验链,供您免费体验本地开发的全流程 网址 联盟链:可以创建或加入联盟,门槛较高 网址 开放联盟链:面向企业和开发者提供的“无需搭链、快速上链、接近公链”的区块链服务网络。

    2024年02月06日
    浏览(46)
  • fisco bcos 智能合约开发

    项目需求2张表:资源表、资源访问记录表,需要资源上链智能合约、访问记录上链智能合约、以及资源所有权转移智能合约。 FISCO BCOS提供合约KV存储接口开发模式,可以通过合约创建表,并对创建的表进行增删改查操作。 所以,针对2表创建两个智能合约即可实现对表的增删

    2024年02月02日
    浏览(43)
  • Java实现Tron(波场)区块链的开发实践(二)交易监控与转账

    上一节我们具体讲到Java实现Tron波场链的开发部署:通过trident源码编译组件,使用RPC的方式链接Tron波场链,并进行了代码实现,还有如何创建离线钱包。 这一节我们通过部署好的项目环境,具体如何使用代码来实现波场链的交易监控和交易转账. 1. 所有的开端就是获取链的接

    2024年03月12日
    浏览(76)
  • Fisco开发第一个区块链应用

    第一步:安装JDK 1.8版本。 第二步:下载fisco压缩包。 下载完成后解压缩到 /root 目录下。 1)启动区块链节点: 确认节点启动正常: 正常情况会不停输出++++Generating seal,表示共识正常。 2)启动节点控制台服务: 通过浏览器远程访问如下链接,如果可以访问,则说明已经正

    2024年02月02日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包