【Solidity】智能合约案例——①食品溯源合约

目录

一、合约源码分析:

二、合约整体流程:

      1.部署合约

      2.管理角色

      3.食品信息管理

      4.食品溯源管理


一、合约源码分析:

        Producer.sol:生产者角色的管理合约,功能为:添加新的生产者地址、移除生产者地址、判断角色地址是否被授权

        Distributor.sol:中间商角色的管理合约,功能为:添加新的中间商地址、移除中间商地址、判断角色地址是否被授权

        Retailer.sol:零售商角色的管理合约,功能为:添加新的零售商地址、移除零售商地址、判断角色地址是否被授权

        FoodInfoItem.sol:食品信息管理合约,功能为:中间商添加食品信息、超市添加食品信息、获取食品流转过程、获取食品的最初状态

        Roles.sol:角色库,功能为:增加角色地址、移除角色地址、判断角色地址是否被授权

        Trace.sol:食品溯源合约(主合约),包含了所引入合约的所有功能,以实现完整的食品溯源过程

二、合约整体流程:

      1.部署合约

        主合约(Trace.sol)部署时,需要添加三个地址作为初始化地址部署,同时,他们也是合约中的生产者,中间商,零售商。

部署成功后,我们此时便可以执行食品溯源的操作

      2.管理角色

        实际生产中,食品的加工、转运,销售会有许多地址,因此,我们可以使用引入的合约方法添加或者管理不同的角色地址

        添加角色地址

        例如:新添加一个生产者地址

        报错原因:添加生产者的操作必须由具有操作权限的生产者地址进行,此时切换生产者账户重新执行即可

        移除角色地址

        判断角色地址

      3.食品信息管理

        部署合约时,我们已经添加了三个地址作为生产者,中间商,零售商,因此也可以直接进行食品信息管理

        例如:添加新的食品信息,查询该食品信息

        4.食品溯源管理

        例如:将上文所新添加的食品增加中间商和零售商的溯源信息

        此时再次进行食品信息查询

        可见食品(火腿肠)的状态已经更新到了销售商(小新超市),该食品已经完整的经过了生产,转运,销售的过程,而通过此合约可以清晰明了地查询食品的状态,质量,时间,过程,真正实现了食品溯源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/150633.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于支持向量机SVM和MLP多层感知神经网络的数据预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 一、支持向量机(SVM) 二、多层感知器(MLP) 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .…

vue3前端开发-flex布局篇

文章目录 1.传统布局与flex布局优缺点传统布局flex布局建议 2. flex布局原理2.1 布局原理 3. flex常见属性3.1 父项常见属性3.2 子项常见属性 4.案例实战(携程网首页) 1.传统布局与flex布局优缺点 传统布局 兼容性好布局繁琐局限性,不能再移动端很好的布局 flex布…

C++深入学习part_1

Linux下编译C程序 安装g命令:sudo apt install g 编译命令:$ g *.cc 或者 *.cpp -o fileName; hellworld 编译程序可以看到: namespace命名空间 首先,命名空间的提出是为了防止变量重名冲突而设置的。 浅浅试一下&#xff1…

漏洞复现-易思无人值守智能物流文件上传

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

STC89C51基础及项目第10天:LCD显示字符(非标协议外设)

1. 初识LCD1602(233.79) 非标协议外设 LCD1602显示 LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 1602 即 32 字符(16列两行) 引脚说明 第 1 脚: VSS 为电源地第 2 脚&#xff1…

Unity AI Sentis 基础教程

Unity AI Sentis基础教程 Unity AI Sentis基础教程Unity AI 内测资格申请Unity 项目Package Manager开始尝试模型下载识别图片完整代码代码搭载运行 射线绘画 URP(扩展)射线绘画脚本脚本搭载效果 Sentis 是 AI 模型的本地推理引擎,它利用最终…

3D孪生场景搭建:模拟仿真

前面几期文章介绍如何使用NSDT 编辑器 搭建3D应用场景,本期介绍下孪生场景中一个一个非常重要的功能:模拟仿真。 1、什么是模拟仿真 模拟仿真是一种用于描述、分析和模拟现实世界中系统、过程或事件的计算机模型和程序。仿真通过输入各种参数和条件&am…

【iOS】——仿写计算器

文章目录 一、实现思路二、实现方法三、判错处理 一、实现思路 先搭建好MVC框架,接着在各个模块中实现各自的任务。首先要创建好UI界面,接着根据UI界面的元素来与数据进行互动,其中创建UI界面需要用到Masonry布局。 二、实现方法 在calcu…

Maven(4)-利用intellij idea创建maven 多模块项目

本文通过一个例子来介绍利用maven来构建一个多模块的jave项目。开发工具:intellij idea。 一、项目结构 multi-module-project是主工程,里面包含两个模块(Module): web-app是应用层,用于界面展示&#xff…

AdaBoost(上):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

特殊笔记_10/7

安装node到第4.1就行(安装npm的淘宝镜像) Node.js安装与配置(详细步骤)_nodejs安装及环境配置_LI4836的博客-CSDN博客 安装vscode 下载组件: 点击第五个 Auto Close Tag:自动闭合标签 Chinese (Simpli…

MQ - 36 云原生:业界MQ的计算存储分离的设计与实现

文章目录 导图概述什么是存算分离架构必须是存算分离架构吗实现存算分离架构的技术思考如何选择合适的存储层引擎存储层:分区存储模型的设计计算层:弹性无状态的写入业界主流存算分离架构分析RocketMQ 5.0 架构分析Pulsar 存算架构分析总结导图 概述 结合云原生、Serverless…

JetBrains ToolBox修改应用安装位置

TooBox修改应用安装位置 1.关闭ToolBox 2.修改配置文件 找到配置文件所在位置 C:\Users\用户名\AppData\Local\JetBrains\Toolbox\.settings.json增加install_location字段 "install_location": "E:\\DevTool\\IDE",E:\DevTool\IDE可以改成自己想要的…

Springboot项目log4j与logback的Jar包冲突问题

异常信息关键词: SLF4J: Class path contains multiple SLF4J bindings. ERROR in ch.qos.logback.core.joran.spi.Interpreter24:14 - no applicable action for [properties], current ElementPath is [[configuration][properties]] 详细异常信息&#xff1a…

常见排序算法详解

目录 排序的相关概念 排序: 稳定性: 内部排序: 外部排序: 常见的排序: 常见排序算法的实现 插入排序: 基本思想: 直…

自学接口测试系列 —— 自动化测试用例设计基础!

一、接口测试思路总结 ❓首先我们在进行接口测试设计前思考一个问题:接口测试,测试的是什么? ❗我们必须要知道,接口测试的本质:是根据接口的参数,设计输入数据,验证接口的返回值。 那么接口…

day24-JS进阶(构造函数,new实例化,原型对象,对象原型,原型继承,原型链)

目录 构造函数 深入对象 创建对象三种方式 构造函数 new实例化执行过程(important!) 实例成员&静态成员 实例对象&实例成员 静态成员 内置构造函数 基本包装类型 Object Object.keys(obj)返回所有键组成的字符串数组 Object.values(obj)返回所有值组成的字…

Nginx支持SNI证书,已经ssl_server_name的使用

整理了一些网上的资料,这里记录一下,供大家参考 什么是SNI? 传统的应用场景中,一台服务器对应一个IP地址,一个域名,使用一张包含了域名信息的证书。随着云计算技术的普及,在云中的虚拟机有了一…

RPC分布式网络通信框架项目

文章目录 对比单机聊天服务器、集群聊天服务器以及分布式聊天服务器RPC通信原理使用Protobuf做数据的序列化,相比较于json,有哪些优点?环境配置使用项目代码工程目录vscode远程开发Linux项目muduo网络库编程示例CMake构建项目集成编译环境Lin…

在Android中实现动态应用图标

在Android中实现动态应用图标 你可能已经遇到过那些能够完成一个神奇的技巧的应用程序——在你的生日时改变他们的应用图标,然后无缝切换回常规图标。这是一种引发你好奇心的功能,让你想知道,“他们到底是如何做到的?”。嗯&…