基于Fisco-Bcos的区块链智能合约-简单案例实践

一、智能合约介绍

智能合约是指把合同/协议条款以代码的形式电子化地放到区块链网络上。FISCO BCOS平台支持两种智能合约类型:Solidity智能合约与预编译智能合约

Solidity与Java类似。代码写好后,都需要通过编译器将代码转换成二进制,在Java中,编译器是Javac,而对于Solidity,是solc。生成后的二进制代码,会放到虚拟机里执行。Java代码在Java虚拟机(JVM)中执行,在Solidity中,是一个区块链上的虚拟机EVM。目的,是给区块链提供一套统一的逻辑,让相同的代码跑在区块链的每个节点上,借助共识算法,让区块链的数据以统一的方式进行改变,达到全局一致的结果

 

设计目的:

为区块链提供一套统一的逻辑,让相同的代码跑在区块链的每个节点上,借助共识算法,让区块链的数据以统一的方式进行改变,达到全局一致的结果

Solidity 局限与改进

- Solidity不够灵活 受自身堆栈深度的限制,函数传参和局部参数的个数总和不能超过16个,Solidity是一种强类型的语言,但其类型转换较为麻烦- 性能差

底层存储单位是32字节(256 bits),对硬盘的读写要求较高,浪费了大量的存储资源

针对上述两点,FISCO BCOS提供了一种用C++写合约方式:预编译合约。开发者可以用C++编写智能合约逻辑,并将其内置在节点中,

预编译合约突破了Solidity语言的限制,借助强大的C++语言,可以灵活的实现各种逻辑,灵活性大大提高。同时,C++的性能优势也得到了很好的利用,通过预编译合约编写的逻辑,相比于Solidity语言来说,性能得到提升

合约编写

开发工具:remix-ide的使用,开发编译过程选择在线remix

Remix是功能强大的开源工具,可帮助您直接从浏览器编写Solidity合同。Remix用JavaScript编写,支持在浏览器和本地使用。

Remix还支持智能合约的测试,调试和部署等等。

优点:

1. 动态编译、可调控编译版本2. 即时错误提醒3. 代码自动补全4. 发布阶段,代码问题提醒5. 对设计方法的简单调用

 

 

 

 

认识合约

例:

pragma solidity ^ 0.4.26;

constant Sample{
   //变量  address表示账户地址
    address private _admin;
    uint private _state;

    //修饰符 ,为函数提供一些额外的功能,例如检查、清理等工作
    // 检测函数的调用者是否为函数部署时设定的那个管理员(即合约的部署人)
    modifier onlyAdmin(){
        require(msg.sender==_admin,"You are not admin");
        _;

    }
    //事件
    // 记录事件定义的参数,存储到区块链交易的日志中,提供廉价的存储。
    //  提供一种回调机制,在事件执行成功后,由节点向注册监听的SDK发送回调通知,触发回调函数被执行。
    // 提供一个过滤器,支持参数的检索和过滤。
    event SetState(unit valule);

    //构造方法  构造函数用于初始化合约
    constructor() public {
        _admin=msg.sender;
    }

   //函数 方法
   function setSate(unit value) public  onlyAdmin(){
       _state=value;
       emit SetState(value);
   }
   function getValue() public view return (uint){
     return _state;  
   }
}

二、案列合约设计

逻辑如下:

定义:

- 定义事件方法AddEqu(string equnum, string data)- 构造函数中创建t_equipment表- 查询方法:select(string equnum),根据设备编号查询设备备案信息,或使用记录。( 成功返回0, 设备不存在返回-1)- addEqu(string equnum, string data),添加数据前校验数据唯一性,已存在不在插入

Eqump合约类图

Contract:Java与智能合约进行交互的实体合约类型抽象

ManagedTransaction: 交易管理

Eqump合约核心代码

Eqump.sol

pragma solidity  ^ 0.4.25;

import "./Table.sol";
contract Eqump{
    // event
    event AddEqu(string equnum, string data);
    //
    constructor()  public {
        // 构造函数中创建t_equipment表
        createTable();
    }

    function createTable() private {
        TableFactory tf = TableFactory(0x1001); // 创建表
        tf.createTable("t_equipment", "equnum", "data");
    }

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

    /*
    描述 : 根据设备管理信息查询设备信息
    参数 : 
            equ_num : 设备编号
    返回值:
            参数一: 成功返回0, 设备不存在返回-1     
    */
    function select(string equnum) public view returns(int256, string) {
        // 打开表
        Table table = openTable();
        // 查询
        Entries en
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刚仔灬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值