【Solidity】智能合约案例——②供应链金融合约

news2024/9/21 23:26:43

目录

一、合约源码分析:

二、合约整体流程:

        1.部署合约:

        2.添加实体

        3.发送交易存证

           ①.银行向公司交易(公司向银行提供交易存证)

           ②.公司向银行交易(银行向公司提供交易存证)

           ③.公司向公司交易(接收存证的公司需要给发送存证的公司提供交易存证)


一、合约源码分析:

        Ownable.sol: 权限控制合约,功能为:管理合约的所有者,合约所有者转移

        SupplyChain.sol: 供应链金融主合约,功能为:添加银行,添加公司,银行向公司交易,公司与公司交易,公司与银行交易,查询公司信息,查询银行信息,查询存证信息

二、合约整体流程:

        1.部署合约:

           部署此合约需要添加一个合约所有者,即监管者,监管者负责对银行,公司等实体的添加。

           合约全方法:

        2.添加实体

           添加银行,这里的credit为银行的存款总额,建议设为整数,方便后续查询。

        添加公司,这里添加两个公司,便于测试后面的公司之间的交易接口。

        注意:添加银行和公司的操作必须由监管者完成,这也是合约中监管者职能的体现

        添加实体后,我们便可以通过合约中的getCompany、getBank等方法对公司/银行的信息进行查询。

        3.发送交易存证

           ①.银行向公司交易(公司向银行提供交易存证)

                交易存证即公司确认收到了这笔钱,发送了交易存证,故公司为发送方(senderAddress),银行为接收方(accepterAddress)。receiptType:为存证索引(1-存证、2-现金)。必须只能接受人创建此交易,也就是接受人承认这笔交易存在。

                

                此时调用方法查询相关交易存证以及银行和公司目前的财务情况。

                

                 这张图需要解释一下:在对于银行的查询中,我们看到返回了一个字符串,一个地址,一个数字,两个数组,分别对应:银行名字、银行地址、银行账户余额,而两个数组一个为空,一个为1,这里的1不是receiptType,而是这笔交易的一个索引值,我们可以通过getReceipt查询这笔交易,因此,交易的索引出现在了银行的第一个数组内,数组的名称为:acceptReceiptIndex即为银行接受的交易,那么在getReceipt查询返回的两个数字中,哪个是receiptType呢?我们接着往下走。

                ②.公司向银行交易(银行向公司提供交易存证)

                我们以百度在线网络技术有限公司向农业银行发起交易为例。

                

                在这次交易中,我们将两个地址的位置调换,实现公司向银行交易。

                

                此时进行查询,一切都明了了,getReceipt的查询返回的两个数字第一个为receiptType,而另一个为交易类型,对应了第3种交易类型:transferType: 交易类型,1: 银行转账给公司,2: 公司与公司间转账,3: 公司转账给银行

                ③.公司向公司交易(接收存证的公司需要给发送存证的公司提供交易存证)

                我们以百度在线网络技术有限公司向上海哔哩哔哩科技有限公司发起交易为例。

                

                此时对两个公司,以及交易索引3查询

                

                百度在线网络技术有限公司的资金确实减少了,多了一笔索引为3的交易,查询后我们得知,公司之间的receiptType值为2,属于现金交易,而第二个2即为上文所提到的transferType,第二种类型:公司与公司间转账。

        至此,合约的流程完毕,该合约提供了一个透明、高效、安全的供应链金融解决方案,可以帮助企业和金融机构更加灵活地管理资产。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git(部分)

1、git三个区域:工作区,暂存区,版本库 2、git文件状态:未跟踪,已跟踪(新添加,未修改,已修改) 如何查看暂存区和工作区文件状态:git status -s 3、查看版本记…

【Java】Java 17 新特性概览

Java 17 新特性概览 1. Java 17 简介2. Java 17 新特性类型推断 - 新的 var 关键字垃圾回收器改进JEP 356 增强的伪随机数生成器(1)提供了一个新接口 RandomGenerator(2)提供了一个新类 RandomGeneratorFactory(3&…

高校教务系统登录页面JS分析——西安科技大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一、密码加…

42908-2023 纺织染整助剂产品中有机卤素含量的测定

1 范围 本文件描述了纺织染整助剂产品中有机卤素含量的测定方法。 本文件适用于各类纺织染整助剂中有机卤素含量的测定,包括有机氟、有机氯、有机溴。 2 规范性引用文件 下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日…

自然语言处理---Transformer模型

Transformer概述 相比LSTM和GRU模型,Transformer模型有两个显著的优势: Transformer能够利用分布式GPU进行并行训练,提升模型训练效率。 在分析预测更长的文本时,捕捉间隔较长的语义关联效果更好。 Transformer模型的作用 基于seq…

香港科技大学广州|先进材料学域博士招生宣讲会—上海专场!!!(暨全额奖学金政策)

香港科技大学广州|先进材料学域博士招生宣讲会—上海专场!!!(暨全额奖学金政策) “跨学科融合创新,引领新兴与未来行业的突破与发展——先进材料学域” ���…

深入理解多线程编程和 JVM 内存模型

文章目录 1. 理解进程和线程的概念进程(Process)线程(Thread) 2. 理解竞态条件和死锁竞态条件(Race Condition)死锁(Deadlock) 3. JVM 内存模型堆(Heap)栈&am…

正规文法、正规式、确定的有穷自动机DFA、不确定的有穷自动机NFA 的概念、区分以及等价性转换【我直接拿下!】

文章目录 正规文法正规式有穷自动机确定的有穷自动机——DFA不确定的有穷自动机——NFADFA 与 NFA 的区分 正规式转换为正规文法正规文法转换为正规式NFA 转换为 DFANFA 最小化 NFA 转换为正规式正规式转换为 NFA正规文法转换为 NFANFA 转换为正规文法 前言: 在学习…

C语言--程序环境和预处理(宏)

目录 前言 本章重点: 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境​编辑 2.2 编译本身也分为几个阶段 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 2.2.3 #define 替换规则 …

fetch网络请求详解

一:三种常见的网络请求对比: AJAX:基于XMLHttpRequest收发请求,使用较为繁琐,代码量会比较多axios:基于promise的请求客户端,在浏览器和node中均可使用,使用便捷,功能强…

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第五部分:支付系统

本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第五部分:支付系统前言如何学习支付系统信用卡为什么被称为“银行最赚钱的产品”?VISA/万事达卡如何赚钱?步骤说明为什么开证行应该得到补偿 当我们在商家…

Linux中的开发工具(yum,vim,gcc/g++,gdb,Makefile,git)

文章目录 1. Linux软件包管理器——yumyum 语法yum 常用命令安装 yum 仓库源 2. Linux编辑器——vimvim 的五种常用模式模式切换vim 基本操作命令模式命令集(1)光标命令(2)复制粘贴命令(3)撤销与重做&#…

深度学习---卷积神经网络

卷积神经网络概述 卷积神经网络是深度学习在计算机视觉领域的突破性成果。在计算机视觉领域。往往输入的图像都很大,使用全连接网络的话,计算的代价较高。另外图像也很难保留原有的特征,导致图像处理的准确率不高。 卷积神经网络&#xff0…

安全多方计算框架最全合集(持续更新)

安全多方计算框架 本文对现有安全多方计算/学习框架进行了全面、系统的梳理。 目前大部分安全多方计算框架主要基于秘密共享、同态加密、混淆电路以及相关基本模块的组合。通常使用定制的协议来支持特定数量的参与方(一般为两方或三方),导致…

我发现用StarUML来画UML也挺香的

2023年10月22日,周日晚上 我已经决定以后都用StarUML来画UML了,因为这个软件不仅免费,而且太适合画UML图了 我之前主要用plantUML和draw.io来画UML, plantUML虽然是通过文本来生成UML图,但是排版不是不好看&#xff…

“智能文件批量改名工具:轻松管理文件名,一键去除特殊符号“

你是否曾经在面对一堆文件名中包含特殊符号,而感到困扰,不知道如何快速、准确地处理它们?现在,我们为你带来了一款智能文件批量改名工具,它可以轻松地帮助你去除文件名中的特殊符号,让你的文件管理更加规范…

【试题002】C语言有关于sizeof的使用

1.说明&#xff1a;sizeof()是测量数据类型所占用的内存字节数&#xff0c;字符串常量在存储时除了要存储有效字节外&#xff0c;还要存储一个字符串结束志‘\0’。 2.代码举栗子&#xff1a; #include <stdio.h> int main() {char str[] "book";printf(&qu…

网络协议--Traceroute程序

8.1 引言 由Van Jacobson编写的Traceroute程序是一个能更深入探索TCP/IP协议的方便可用的工具。尽管不能保证从源端发往目的端的两份连续的IP数据报具有相同的路由&#xff0c;但是大多数情况下是这样的。Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过…

开源LLEMMA发布:超越未公开的顶尖模型,可直接应用于工具和定理证明

深度学习自然语言处理 原创作者&#xff1a;Winnie 今天向大家介绍一个新的开源大语言模型——LLEMMA&#xff0c;这是一个专为数学研究而设计的前沿语言模型。 LLEMMA解数学题的一个示例 LLEMMA的诞生源于在Proof-Pile-2数据集上对Code Llama模型的深度训练。这个数据集是一个…