本主题涵盖如何使用Hyperledger Fabric开发客户端应用程序和智能合约以解决业务问题。在涉及多个组织的真实商业票据场景中,您将了解实现此目标所需的所有概念和任务。我们假设区块链网络已经可用。
该主题专为多个受众设计:
- 解决方案和应用架构师
- 客户端应用程序开发人员
- 智能合约开发商
- 商务专业
您可以选择按顺序阅读主题,也可以根据需要选择各个部分。各个主题部分均根据读者的相关性进行了标记,因此,无论您是要寻找业务信息还是技术信息,当一个主题适合您时都会很清楚。
该主题遵循典型的软件开发生命周期。它从业务需求开始,然后涵盖开发应用程序和智能合约以满足这些需求所需的所有主要技术活动。
如果您愿意,可以按照简短的说明通过运行商业票据教程立即尝试商业票据方案。当需要对本教程中介绍的概念进行更全面的说明时,可以返回此主题。
受众:架构师,应用程序和智能合约开发人员,业务专业人员
在本主题中,我们将描述一个涉及六个组织的业务场景,这些组织使用PaperNet(基于Hyperledger Fabric构建的商业票据网络)发行,购买和赎回商业票据。我们将使用该场景来概述参与组织使用的商业票据应用程序和智能合约的开发要求。
PaperNet网络
PaperNet是一个商业票据网络,允许经过适当授权的参与者发行,交易,赎回和评估商业票据。
PaperNet商业票据网络。目前有六个组织使用PaperNet网络来发行,购买,出售,赎回和评价商业票据。MagentoCorp发行和赎回商业票据。DigiBank,BigFund,BrokerHouse和HedgeMatic都互相买卖商业票据。RateM提供了各种商业票据风险度量。
让我们看看MagnetoCorp如何使用PaperNet和商业票据来帮助其业务。
演员介绍
MagnetoCorp是一家备受推崇的公司,生产自动驾驶电动汽车。2020年4月上旬,MagnetoCorp赢得了一项大订单,为个人运输市场的新进入者戴因特里(Daintree)生产10,000辆D型汽车。尽管该订单对于MagnetoCorp而言是一笔巨大的胜利,但在9月1日开始交付车辆之前,Daintree不必为这些车辆付款,这是MagnetoCorp与Daintree正式达成交易的六个月之后。
要制造这些车辆,MagnetoCorp将需要雇用1000名工人至少6个月。这给公司的财务带来了短期压力-每月将需要500万美元来支付这些新员工。商业票据旨在帮助MagnetoCorp克服其短期融资需求-满足每月的工资要求,因为人们期望当Daintree开始为新的Model D汽车付款时它将拥有大量现金。
在5月底,MagnetoCorp需要5百万美元来支付5月1日雇用的额外工人的工资。为此,它发行了面值为500万美元的商业票据,到期日为6个月–当它希望看到Daintree的现金流。DigiBank认为MagnetoCorp信誉良好,因此不需要高于央行2%基本利率的溢价,后者在6个月内价值495万美元,今天为500万美元。因此,它以494万美元的价格购买了MagnetoCorp的6个月商业票据,与价值495万美元的价格相比略有折扣。DigiBank完全希望它能够在6个月内从MagnetoCorp赎回500万美元,因承担与此商业票据相关的风险增加而获利1万美元。这额外的10K表示它收到2。
6月底,当MagnetoCorp发行500万美元的新商业票据以支付6月份的工资时,BigFund以494万美元的价格购买了该票据。这是因为6月份的商业状况与5月份的大致相同,导致BigFund对MagnetoCorp商业票据的估值与DigiBank 5月份的价格相同。
随后的每个月,MagnetoCorp都可以发行新的商业票据以履行其薪金义务,并且可以由DigiBank或PaperNet商业票据网络的任何其他参与者(BigFund,HedgeMatic或BrokerHouse)购买。这些组织可能会根据以下两个因素为商业票据支付或多或少的费用-中央银行基准利率和与MagnetoCorp相关的风险。后一个数字取决于多种因素,例如D型汽车的生产以及评级机构RateM评估的MagnetoCorp的信誉度。
PaperNet中的组织扮演着不同的角色,MagnetoCorp发行文件,DigiBank,BigFund,HedgeMatic和BrokerHouse交易文件以及RateM利率文件。DigiBank,Bigfund,HedgeMatic和BrokerHouse等具有相同角色的组织是竞争对手。角色不同的组织不一定是竞争对手,但可能仍会有相反的商业利益,例如,MagentoCorp希望其论文的评级很高,以便以高价出售,而DigiBank将从低评级中受益,以便可以购买他们以低廉的价格。可以看出,即使是看似简单的网络(如PaperNet)也可以具有复杂的信任关系。区块链可以帮助在竞争者或具有相反商业利益的组织之间建立信任,这可能会导致纠纷。
让我们暂停一下MagnetoCorp的故事,并开发PaperNet用来发行,购买,出售和赎回商业票据以及捕获组织之间的信任关系的客户端应用程序和智能合约。稍后,我们将回到评估机构RateM的角色。
受众:架构师,应用程序和智能合约开发人员,业务专业人员
让我们更详细地分析商业票据。诸如MagnetoCorp和DigiBank之类的PaperNet参与者使用商业票据交易来实现其业务目标–让我们研究一下商业票据的结构以及随着时间的推移会影响商业票据的交易。我们还将基于网络中各组织之间的信任关系,考虑PaperNet中的哪些组织需要在事务上签名。稍后,我们将集中讨论买卖双方之间的资金流向。现在,让我们集中讨论MagnetoCorp发表的第一篇论文。
商业票据生命周期
MagnetoCorp在5月31日发布了论文00001。花了一些时间看一下本文的第一状态,其不同的性质和值:
Issuer = MagnetoCorp
Paper = 00001
Owner = MagnetoCorp
Issue date = 31 May 2020
Maturity = 30 November 2020
Face value = 5M USD
Current state = issued
该纸状态是发行交易的结果,它使MagnetoCorp的第一张商业纸成为现实!请注意,本文的面值为500万美元,要在今年晚些时候进行赎回。请参见发出纸张00001时的Issuer
和 Owner
相同。请注意,本文可以唯一地标识为MagnetoCorp00001
– Issuer
和 Paper
属性的组合。最后,了解该属性如何 快速识别MagnetoCorp纸00001在其生命周期中的阶段。Current state = issued
发行后不久,该纸被DigiBank购买。花一些时间来看看同一笔商业票据由于此次购买 交易而发生了怎样的变化:
Issuer = MagnetoCorp
Paper = 00001
Owner = DigiBank
Issue date = 31 May 2020
Maturity date = 30 November 2020
Face value = 5M USD
Current state = trading
最重大的变化是Owner
–看看最初由MagnetoCorp
拥有的论文如何由拥有DigiBank
。我们可以想象该纸张随后如何出售给BrokerHouse或HedgeMatic,并进行相应的更改Owner
。请注意如何使我们能够轻松地识别出该文件现在是。Current state``trading
6个月后,如果DigiBank仍然持有该商业票据,则可以使用MagnetoCorp赎回它:
Issuer = MagnetoCorp
Paper = 00001
Owner = MagnetoCorp
Issue date = 31 May 2020
Maturity date = 30 November 2020
Face value = 5M USD
Current state = redeemed
最后的赎回交易已经结束了商业票据的生命周期-可以认为它已经完成。保留赎回的商业票据的记录通常是强制性的,并且redeemed
状态允许我们快速识别这些票据。通过Owner
将纸的价值与交易创建者的身份进行比较,可以将其价值用于对赎回交易执行访问控制 Owner
。Fabric通过getCreator()
chaincode API支持此 功能。如果将golang用作链码语言, 则可以使用客户端身份链码库来检索事务创建者的其他属性。
交易次数
我们已经看到,纸张00001的生命周期相对简单-它在之间移动issued
,trading
并且redeemed
是由于issue, buy或赎回交易的结果。
这三个事务是由MagnetoCorp和DigiBank(两次)发起的,它们驱动了纸张00001的状态变化。让我们更详细地了解影响本文的事务:
问题
检查由MagnetoCorp发起的第一笔交易:
Txn = issue
Issuer = MagnetoCorp
Paper = 00001
Issue time = 31 May 2020 09:00:00 EST
Maturity date = 30 November 2020
Face value = 5M USD
了解发行交易如何具有带有属性和值的结构。这项交易的结构是不同的,但密切匹配,纸00001的结构是因为他们是不同的东西-纸00001反映PaperNet的状态是,结果问题的交易。拥有这些属性并创建此文件的问题事务(我们看不到)背后的逻辑。因为交易产生了文件,所以这意味着这些结构之间存在非常密切的关系。
涉及发行事务的唯一组织是MagnetoCorp。自然,MagnetoCorp需要签署该交易。通常,论文发行人需要在发行新论文的交易上签字。
购买
接下来,检查将纸张00001的所有权从MagnetoCorp转移到DigiBank 的购买交易:
Issuer = MagnetoCorp
Paper = 00001
Current owner = MagnetoCorp
New owner = DigiBank
Purchase time = 31 May 2020 10:00:00 EST
Price = 4.94M USD
看看购买交易如何具有较少的属性,这最终在本文中得出。这是因为此事务仅修改了本文。只是由于这次交易而改变;其他一切都一样。没关系–关于购买交易,最重要的是所有权的变更,实际上,在此交易中,已经确认了文件的当前所有者MagnetoCorp。New owner = DigiBank
您可能会问为什么在纸张00001中没有捕获和属性?这又回到了交易与票据之间的区别。494万美元的价格标签实际上是交易的财产,而不是本文的财产。花一点时间思考这种差异;它并不像看起来那样明显。稍后我们将看到分类帐将记录这两条信息-影响本文的所有交易的历史记录及其最新状态。明确区分信息非常重要。Purchase time``Price
还值得记住的是,纸张00001可能会被多次买卖。尽管在我们的方案中略有提前,但让我们研究一下如果纸张00001更改所有权时我们可能会看到哪些事务。
如果我们有BigFund购买:
Txn = buy
Issuer = MagnetoCorp
Paper = 00001
Current owner = DigiBank
New owner = BigFund
Purchase time = 2 June 2020 12:20:00 EST
Price = 4.93M USD
随后由HedgeMatic购买:
Txn = buy
Issuer = MagnetoCorp
Paper = 00001
Current owner = BigFund
New owner = HedgeMatic
Purchase time = 3 June 2020 15:59:00 EST
Price = 4.90M USD
查看纸张所有者如何变化,以及示例中价格如何变化。您能想到MagnetoCorp商业用纸价格可能下跌的原因吗?
直觉上,购买交易要求卖方和购买组织都必须签署此类交易,以便有证据证明作为交易一部分的双方之间的相互协议。
赎回
纸张00001 的兑换事务表示其生命周期的结束。在我们相对简单的示例中,HedgeMatic发起了交易,该交易将商业票据转移回了MagnetoCorp:
Txn = redeem
Issuer = MagnetoCorp
Paper = 00001
Current owner = HedgeMatic
Redeem time = 30 Nov 2020 12:00:00 EST
同样,请注意兑换交易的属性很少。赎回交易逻辑可以对纸张00001进行所有更改以计算数据:Issuer
将会成为新所有者,而将会变为 。该属性是在我们的示例中指定的,因此可以对照当前纸张持有者检查该属性。Current state``redeemed``Current owner
从信任的角度来看,购买交易的相同理由也适用于赎回指令:交易中涉及的两个组织都必须在该交易上签字。
帐本
在本主题中,我们已经看到了交易和结果票据状态是PaperNet中两个最重要的概念。的确,我们将在任何Hyperledger Fabric分布式分类帐中看到这两个基本元素 -一个世界状态,其中包含所有对象的当前值;一个区块链,记录导致当前世界状态的所有交易的历史记录。
交易所需的签字通过规则强制执行,在将交易追加到分类帐之前对其进行评估。仅当存在必需的签名时,Fabric才会接受有效的交易。
您现在处在一个绝佳的位置,可以将这些想法转化为智能合约。如果您的程序设计有些生锈,请不要担心,我们将提供提示和指针来理解程序代码。掌握商业票据智能合约是设计您自己的应用程序的第一步。或者,如果您是对一些编程感到满意的业务分析师,请不要害怕继续深入研究!