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

news/2024/7/11 2:12:57 标签: 智能合约, 区块链, 去中心化, web3, 信任链, 金融

目录

一、合约源码分析:

二、合约整体流程:

        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.niftyadmin.cn/n/5114390.html

相关文章

【Docker从入门到入土 4】使用Harbor搭建Docker私有仓库

私有仓库 一、Harbor简介1.1 什么是Harbor?1.2 Harbor的特性1.3 Harbor和docker registry的关系1.4 Harbor的构成1.4 Harbor 配置文件中的两类参数1.4.1 所需参数1.4.2 可选参数 二、Harbor部署2.1 部署Docker-Compose服务2.2 部署 Harbor 服务Step1 下载或上传 Harbor 安装程…

10个最流行的开源机器视觉标注工具

推荐:用 NSDT编辑器 快速搭建可编程3D场景 我们知道寻找良好的图像标记和注释工具对于创建准确且有用的数据集的重要性。 随着图像注释空间的增长,我们看到开源工具的可用性激增,这些工具使任何人都可以免费标记他们的图像并从强大的功能中受…

Win32 命名管道

命名管道简单封装 CNamedPipe.h #pragma once #include <string> #include <windows.h> #include <tchar.h>#pragma warning(disable:4200)class CNamedPipe { public:CNamedPipe();~CNamedPipe();CNamedPipe(const CNamedPipe& r) delete;CNamedPipe&…

软件为什么单独标注支持IPV6?IPV6和IPV4有什么区别?

ipv4和ipv6有何区别&#xff1f; 最关键的区别在于能够提供网络ip地址的数量。 ipv4是互联网协议第四版&#xff0c;地址长度为32位&#xff0c;可以提供ip地址总量为43亿个。目前ipv4地址资源已面临枯竭。 ipv6是互联网协议第六版&#xff0c;地址长度为128位&#xff0c;可…

高精度数字压力表丨铭控传感多款数字压力表在多场景中的应用

时代日新月异、变化万千&#xff0c;压力表应用需求始终在不断变化&#xff0c;但铭控传感对压力测量的应用一如既往的了如指掌。铭控传感总是能够为您提供最合适符合您要求的成本和功能都极佳产品解决方案&#xff0c;通过您的需求定制MEOKON产品&#xff0c;铭控传感始终为用…

小红书品牌账号怎么运营,如何传播规划?

其实新品牌面对的肯定都是新客户&#xff0c;对于新客户来说&#xff0c;真诚永远是最大的必杀技&#xff0c;所以在这告诉各位新兴品牌&#xff0c;少点套路&#xff0c;那么小红书品牌账号怎么运营&#xff0c;如何传播规划呢&#xff1f; 一、对品牌账号进行定位 定位方面一…

【Servlet】实现Servlet程序

文章目录 1. 最朴素方式1. 创建项目2. 引入依赖3. 创建目录4. 编写代码5. 打包程序6. 部署程序7. 验证程序 2. 更方便方式1. 安装Smart TomCat插件2. 启动 1. 最朴素方式 1. 创建项目 选择Maven项目 2. 引入依赖 Maven项目创建完后会生成一个pom.xml文件&#xff0c;我们可…

apache httpd 换行解析漏洞

原理 Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过一些服务器的安全策略。 漏洞编号 cve-2017-15715 环境…