Fisco-Bcos智能合约开发案例----商品溯源

这篇具有很好参考价值的文章主要介绍了Fisco-Bcos智能合约开发案例----商品溯源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

商品溯源合约概念

Fisco-Bcos智能合约开发案例----商品溯源

合约设计

Fisco-Bcos智能合约开发案例----商品溯源

合约间的关系

1个商品种类----》n个商品,同时还可以创建多个商品种类(工厂合约的作用)

编写商品合约

pragma solidity^0.8.7;

contract Goods{
    struct TraceData{
        address operator; //操作者
        uint8 status; //0 生产者,1 运输者,2-超市售卖者,3-消费者
        uint256 timestamp;
        string remark;
    }
    uint8 constant STATUS_CREATE=0;//定义常量

    uint256 goodsID;
    uint8 currentStatus;//当前商品状态

    TraceData[] traceDatas;//溯源信息

    event NewStatus(address _operator,uint8 _status,uint256 _time,string remark);

    constructor(uint256 _goodsID){
        goodsID=_goodsID;
        traceDatas.push(TraceData(msg.sender,STATUS_CREATE,block.timestamp,"create"));
        currentStatus=STATUS_CREATE;
        emit NewStatus(msg.sender,STATUS_CREATE,block.timestamp,"create");
    }

    //修改商品状态
    function changeStatus(uint8 _status,string memory _remark)public returns(bool){
         currentStatus=_status;
          traceDatas.push(TraceData(msg.sender,_status,block.timestamp,_remark));
         emit NewStatus(msg.sender,_status,block.timestamp,_remark);
          return true;
    }
    //查看商品状态
    function getStatus()public view returns(uint8){
        return currentStatus;
    }
    //查看溯源信息
    function getTraceInfo()public view returns(TraceData[]memory){
        return traceDatas;
    }
}

编写商品种类合约

pragma solidity^0.8.7;

import "./goods.sol";

contract Category{
   struct GoodsData{
       Goods traceData;
       bool isExists;
   }

   bytes32 currentCategory;
   uint8 constant STATUS_INVALID=255;//定义常量
   //goodsid===>Good;
   mapping(uint256=>GoodsData) goods;

   event NewGoods(address _operator,uint256 _goodID);

   constructor(bytes32 _category){
       currentCategory=_category;
   }

   //创建商品
   function createGoods(uint256 _goodsID)public returns(Goods){
       require(!goods[_goodsID].isExists,"goodsID already exists");
       goods[_goodsID].isExists=true;
       Goods _goods = new Goods(_goodsID);
       goods[_goodsID].traceData=_goods;
       emit NewGoods(msg.sender,_goodsID);

       return _goods;
   }
   //获取状态
   function getStatus(uint256 _goodsID)public view returns(uint8){
       if(!goods[_goodsID].isExists){
           return STATUS_INVALID ;//返回一个大值
       }
       return goods[_goodsID].traceData.getStatus();
   }
   //修改状态
   function changeStatus(uint256 _goodsID,uint8 _status,string memory _remark)public returns(bool){
       return goods[_goodsID].traceData.changeStatus(_status,_remark);
   }
   //查看商品信息
   function getGoods(uint256 _goodsID) public view returns(bool,Goods){
       return (goods[_goodsID].isExists,goods[_goodsID],goods[_goodsID].traceData);
   }
}

编写工厂合约

pragma solidity^0.8.7;

import "/category.sol";

contract TraceFactory{
    struct GoodsCategory{
        Category categoryData;
        bool isExists;
    }
    mapping(bytes32=>GoodsCategory) goodsCategorys;

    event NewCateGory(address _operator,bytes32 _category);
  //创建商品种类
    function NewCateGory(bytes32 _category) public returns(Category){
        require(!goodsCategorys[_category].isExists,"category already exists");

        Category category = new Category(_category);
        goodsCategorys[_category].isExists=true;
        goodsCategorys[_category].categoryData=category;

        emit NewCateGory(msg.sender,_category);
        return category;
    }
    //创建商品信息
    function newGoods(bytes32 _category,uint256 _goodsID)public returns(Goods){
        Category category = getCategory(_category);
        return category.createGoods(_goodsID);
    }
 //查询种类信息
   function getCategory(bytes32 _category)public view returns(Category){
       return goodsCategorys[_category].categoryData;
   }
   //查询状态信息
   function getStatus(bytes32 _category,uint256 _goodsID)public view returns(uint8){
        Category category = getCategory(_category);
        return category.getStatus(_goodsID);
   }
   //改变状态信息
   function changeStatus(bytes32 _category,uint256 _goodsID,uint8 _status,string memory _remark)public returns(bool){
       Category category = getCategory(_category);
       return category.changeStatus(_goodsID,_status,_remark);
   }
    function calCategory(string memory _name)public view returns(bytes32){
       return keccak256(abi.encode(_name));
   }
}

测试

1.部署工厂合约

Fisco-Bcos智能合约开发案例----商品溯源

2.创建商品种类

Fisco-Bcos智能合约开发案例----商品溯源

3. 创建对应的商品

Fisco-Bcos智能合约开发案例----商品溯源

4.查询商品种类

Fisco-Bcos智能合约开发案例----商品溯源

5. 查询商品状态

0–生产者,1—运输者,2—超市售卖者,3—消费者

Fisco-Bcos智能合约开发案例----商品溯源

6. 查询商品溯源信息

Fisco-Bcos智能合约开发案例----商品溯源

7.改变商品状态

Fisco-Bcos智能合约开发案例----商品溯源

8.查询商品溯源

Fisco-Bcos智能合约开发案例----商品溯源文章来源地址https://www.toymoban.com/news/detail-513216.html

到了这里,关于Fisco-Bcos智能合约开发案例----商品溯源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【FISCO-BCOS】十四、使用Caliper进行压力测试fisco-bcos

            前言:根据操作系统版本不同,部署环境不同,一些细节差别可能造成测试失败等问题,此文仅做参考,应以实际应用为主。         参考官方文档:压力测试指南 — FISCO BCOS v2.9.0 文档 部署Caliper的计算机需要有外网权限; 操作系统版本需要满足以下要求:Ub

    2024年02月15日
    浏览(35)
  • Java SDK部署和调用FISCO BCOS区块链智能合约

    使用WeBASE合约管理导出Java项目 启动FISCO节点和webase-front,部署服务详情可参考官方文档: link 1.编写智能合约 一个简单的例子: Table 合约:该合约负责维护候选人的信息。每个候选人都有一个唯一的标识符sign_key,以及与之相关联的其他属性,包括活动名称activity_name、参与

    2024年03月22日
    浏览(51)
  • 区块链实验室(14) - 编译FISCO-BCOS

    FISCO-BCOS是一种区块链平台,与Hyperledger和Ethereum有些不同,详见FISCO BCOS 区块链 编译FISCO BCOS源码的目的是修改或者新增其中功能模块,进行对比实验,验证新想法、新创意的效果。编译的步骤很简单,按技术文档一步一步进行即可。可能碰到的问题是访问网站raw.githubusercont

    2024年02月13日
    浏览(37)
  • FISCO-BCOS区块链网络环境搭建(亲测成功)

    因项目技术选型需要,需要搭建一个FISCO-BCOS区块链网络环境,该文记录一下搭载过程,或遇到的一个坑及其解决方法 一个如图所示的6节点3机构2群组的组网模式。机构B和机构C分别位于群组1和群组2中。机构A同属于群组1和群组2中 参考文章:FISCO-BCOS区块链网络环境搭建 此操

    2024年02月08日
    浏览(48)
  • fisco-bcos 部署企业级国密区块链

    首先说明,我目前所用的fisco-bcos generator企业部署版本尚不支持docker部署,只能在主机上直接部署。 下面进入正题 我们本次搭建的是三机构A、B、C组成的联盟链,AB首先组成群组Group1,C后期加入Group1。 本文所有的操作目录都是基于generator文件夹 在A、B、C三台机器上下载并安

    2024年02月03日
    浏览(37)
  • FISCO-BCOS 命令交互控制台 Console-命令大全(超详细)

    引言 此文章基于fisco-bocs官方技术文档进行整理并加以解释,在这里可以快速理解命令的含义和更快地上手,可以当作命令词典使用。 前提条件 部署好区块链网络 配置好console,即拷贝配置文件等等 console 目录如下: 使用账户生成脚本生成账户(非国密版) PEM格式 p12格式 启动控

    2024年02月04日
    浏览(56)
  • 搭建第一个区块链网络(Fisco-Bcos),启动并使用控制台

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

    2024年02月04日
    浏览(47)
  • Fisco-Bcos的环境搭建及Data-Export导出组件的使用

    注意:由于Data-Export组件暂时只支持Fisco-Bcos 2.x系列(这个也是目前使用最多最稳定的系列),故这里使用的是目前最新的Fisco-Bcos 2.x。 区块链网络部署 主要一步步按照这个官方的操作即可区块链网络搭建 环境为Ubuntu18.04,java版本要使用及11以上的,按照官网教程在ubuntu18.0

    2024年02月04日
    浏览(37)
  • 【教程】教你搭建控制台链接区块链网络,如何搭建FISCO-BCOS控制台

    目录 前言 配置及使用控制台 第一步. 准备依赖 第二步. 启动并使用控制台 部署及调用测试HelloWorld合约 第一步. 编写HelloWorld合约 第二步. 部署HelloWorld合约 第三步. 调用HelloWorld合约 随着区块链的发展,目前国内也掀起了一阵区块链的热潮,无论是金融、信任、交易、溯源等

    2024年02月10日
    浏览(59)
  • 【Solidity】智能合约案例——①食品溯源合约

    目录 一、合约源码分析: 二、合约整体流程:       1.部署合约       2.管理角色       3.食品信息管理       4.食品溯源管理         Producer.sol:生产者角色的管理合约,功能为:添加新的生产者地址、移除生产者地址、判断角色地址是否被授权         Di

    2024年02月08日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包