目录
一、合约源码分析:
二、合约整体流程:
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,第二种类型:公司与公司间转账。
至此,合约的流程完毕,该合约提供了一个透明、高效、安全的供应链金融解决方案,可以帮助企业和金融机构更加灵活地管理资产。