Fabric-商業票據項目說明

商業票據項目 

PaperNet network

PaperNet是一個商業票據網絡,允許適當授權的參與者發行、交易、贖回和評級商業票據。

 

 

PaperNet 商業票據網絡: 6個機構參與, 行爲有 發行, 購買, 出售,贖回,評級.

  1. MagentoCorp發行和贖回商業票據。
  2. DigiBank、BigFund、BrokerHouse和HedgeMatic都相互進行商業票據交易。
  3. RateM爲商業票據提供各種風險度量。

參與者介紹

MagnetoCorp是一家備受尊敬的無人駕駛電動汽車製造商。2020年4月初,MagnetoCorp贏得了一份大訂單,爲個人運輸市場的新進入者Daintree生產1萬輛Model D汽車。儘管該訂單對MagnetoCorp來說是一場重大勝利,但在11月1日開始交付之前,Daintree將不必爲這些汽車付款,而此時距離MagnetoCorp與Daintree正式達成協議已有6個月時間。

爲了製造這些汽車,MagnetoCorp將需要僱傭1000名工人,工作時間至少爲6個月。這給公司的財務帶來了短期的壓力——它將需要每月額外的500萬美元來支付這些新員工的工資。商業票據的設計是爲了幫助MagnetoCorp克服其短期融資需求——用於支付每月的工資,因爲該公司預計,當Daintree開始支付新款Model D汽車時,公司將擁有充裕的現金。

金融的比較懂: 有產業(或者沒產業),沒錢,先借錢,後還錢,再還利息.

在5月底,MagnetoCorp需要500萬美元來支付5月1日僱傭的額外員工的工資。爲此,它發行一份面值500萬美元的商業票據,到期日爲未來6個月——屆時它預計將從Daintree獲得現金流。DigiBank認爲MagnetoCorp信用良好,因此不需要比中央銀行2%的基準利率高出太多,按照現在的495萬美元,6個月後將達到500萬美元。因此,它以494萬美元的價格購買了MagnetoCorp的6個月商業票據——與其價值495萬美元相比略有折扣。DigiBank完全期望在6個月內能夠從MagnetoCorp贖回500萬美元,這將使其獲得1萬美元的利潤,以承擔與該商業票據相關的增加風險。這額外的1萬美元意味着它能獲得2.4%的投資回報率——遠高於2%的無風險回報率。

6月底,當MagnetoCorp發行一份500萬美元的新商業票據來支付6月份的工資時,它被BigFund以494萬美元的價格收購。這是因爲6月份的商業環境與5月份大致相同,導致大基金對MagnetoCorp商業票據的估值與5月份的DigiBank相同。

此後的每個月,MagnetoCorp都可以發行新的商業票據,以滿足其支付工錢的義務,而這些票據可能由DigiBank或PaperNet商業票據網絡的任何其他參與者——BigFund、HedgeMatic或BrokerHouse——購買。這些機構可能會爲商業票據支付或多或少的費用,這取決於兩個因素——央行的基本利率,以及與MagnetoCorp相關的風險。後一個數字取決於多種因素,比如D型汽車的產量,以及評級機構RateM對MagnetoCorp的信用評級。

PaperNet中的組織機構扮演着不同的角色,MagnetoCorp發行票據、DigiBank、BigFund、HedgeMatic和BrokerHouse交易票據以及RateM rates票據。同一角色的機構,如DigiBank、Bigfund、HedgeMatic和BrokerHouse都是競爭對手。組織不同的角色不一定是競爭對手,但可能仍有反對商業利益,例如MagentoCorp將慾望高評級的論文以高價賣給他們,而DigiBank將受益於較低的評級,這樣它能以較低的價格買進。可見,即使像PaperNet這樣看似簡單的網絡,也可能存在複雜的信任關係。區塊鏈有助於在競爭對手或商業利益對立的組織之間建立信任,這些組織可能會導致爭端。特別是Fabric具有捕獲甚至細粒度信任關係的方法。

讓我們暫停一下MagnetoCorp的故事,開發客戶端應用程序和智能合同,PaperNet使用它們來發行、購買、出售和贖回商業票據,並獲取組織之間的信任關係。我們稍後會回到評級機構RateM的角色。

分析

我們更詳細地分析一下商業票據。PaperNet的參與者,如MagnetoCorp和DigiBank,使用商業票據交易來實現他們的商業目標——讓我們來研究一下商業票據的結構以及隨着時間的推移對其產生影響的交易。我們還將考慮PaperNet中的哪些組織需要根據網絡中組織之間的信任關係簽署交易。稍後我們將關注資金如何在買家和賣家之間流動;現在,讓我們關注MagnetoCorp發行的第一份文件。

 

商業票據生命週期

00001號文件由MagnetoCorp於5月31日發行。花一些時間看看本文的第一個狀態,它有不同的屬性和值:

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時,看看發行人和所有者是如何相同的。注意,這種紙張可以唯一地標識爲MagnetoCorp00001——發行者和紙張屬性的組合。最後,查看屬性Current state = issued如何快速識別MagnetoCorp票據00001在其生命週期中的階段。

發行後不久,該債券就被DigiBank收購。花點時間看看同樣的商業票據是如何因這次購買交易而改變的:


Issuer = MagnetoCorp
Paper = 00001
Owner = DigiBank
Issue date = 31 May 2020
Maturity date = 30 November 2020
Face value = 5M USD
Current state = trading

 

最重大的變化是所有者的變化——看看最初由MagnetoCorp擁有的報紙現在是如何由DigiBank擁有的吧。我們可以想象,該報紙隨後可能會被出售給經紀公司或HedgeMatic,以及相應的所有者變動。請注意,當前的狀態使我們能夠很容易地識別出該文件正在交易。

 

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

最後的贖回交易結束了商業票據的生命週期——可以認爲已經結束。通常必須對贖回的商業票據進行記錄,而贖回的狀態使我們能夠迅速識別這些票據。通過將所有者與事務創建者的身份進行比較,可以使用文件所有者的值對贖回事務執行訪問控制。

交易

我們已經看到,票據00001的生命週期相對簡單——它在發行、交易和因發行、購買或贖回交易而贖回之間移動。這三次交易由MagnetoCorp和DigiBank發起(兩次),並驅動00001紙的狀態變化。讓我們更詳細地看看影響本文的交易:

Issue

查看Issue事物具有怎樣的屬性和值.

 


Txn = issue
Issuer = MagnetoCorp
Paper = 00001
Issue time = 31 May 2020 09:00:00 EST
Maturity date = 30 November 2020
Face value = 5M USD

唯一參與發行交易的機構是MagnetoCorp。當然,MagnetoCorp需要在這筆交易上簽字。一般來說,發行票據的人必須在發行新票據的交易上簽字。

Buy

接下來,檢查將紙張00001的所有權從MagnetoCorp轉移到DigiBank的購買交易:

​
Txn = buy
Issuer = MagnetoCorp
Paper = 00001
Current owner = MagnetoCorp
New owner = DigiBank
Purchase time = 31 May 2020 10:00:00 EST
Price = 4.94M USD

如果被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商業票據價格下跌的原因嗎?

直觀地說,購買交易要求買賣雙方都要在交易上簽字,以證明交易雙方達成了協議。

 

Redeem

票據00001的贖回事務表示其生命週期的結束。在我們這個相對簡單的例子中,HedgeMatic啓動將商業票據轉回給MagnetoCorp的交易:

 


Txn = redeem
Issuer = MagnetoCorp
Paper = 00001
Current owner = HedgeMatic
Redeem time = 30 Nov 2020 12:00:00 EST

 

再一次,注意贖回交易是如何只有很少的屬性;對票據00001的所有更改都可以通過贖回事務邏輯計算數據:發行者將成爲新的所有者,當前狀態將更改爲贖回。在我們的示例中指定了Current owner屬性,以便可以根據紙張的當前持有者對其進行檢查。

 

從信任的角度來看,buy交易的相同推理也適用於贖回指令:交易涉及的兩個組織都需要簽署它

 

賬本

我們已經瞭解了事務和最終的票據狀態成爲PaperNet中兩個最重要的概念。實際上,我們將在任何超級賬本結構分佈式賬本中看到這兩個基本元素—世界狀態(包含所有對象的當前值)和區塊鏈(記錄導致當前世界狀態的所有事務的歷史)。

在將一筆交易附加到分類賬之前,要對各項規則進行評估。只有當需要的簽名存在時,Fabric纔會接受有效的事務。

 

流程和數據設計

生命週期

重要概念,事物和狀態, 所有賬本都以這兩個爲核心.

 

查看狀態圖如何描述商業票據如何隨時間變化,以及特定的事務如何管理生命週期轉換。在超賬本結構中,智能合同實現了商業票據在不同狀態之間轉換的交易邏輯。商業票據狀態實際上是在世界狀態中持有的;所以讓我們仔細看看它們。

賬本狀態

看看MagnetoCorp的票據00001是如何表示爲根據不同交易刺激而轉變的狀態向量:

請注意,每一個票據是如何以空狀態開始的,從技術上來說,這是一篇票據的nil狀態,因爲它不存在!看看00001票據是如何通過發行交易產生的,以及它隨後是如何在購買和贖回交易中更新的。

注意每個狀態是如何自我描述的;每個屬性都有一個名稱和一個值。雖然目前我們所有的商業票據都具有相同的屬性,但這並不需要一直如此,因爲Hyperledger Fabric支持具有不同屬性的不同狀態。這使得同一分類賬世界狀態包含同一資產的不同形式以及不同類型的資產。它還可以更新一個狀態的結構;想象一下,一個新的法規需要一個額外的數據字段。靈活的狀態屬性支持數據隨時間演化的基本需求。

 

狀態key

 

在大多數實際應用程序中,狀態將具有在給定上下文中唯一標識它的屬性組合——這是關鍵。商業票據的關鍵是由發行機構和票據屬性的串聯構成;MagnetoCorp的第一張票據是MagnetoCorp00001。

狀態鍵允許我們唯一地識別一張票據;它是在發行事務中創建的,隨後通過買入和贖回進行更新。超級賬本要求賬本中的每個狀態都有一個唯一的鍵。

當可用屬性集的惟一鍵不可用時,將應用程序確定的惟一鍵指定爲創建狀態的事務的輸入。這個惟一鍵通常帶有某種形式的UUID,儘管可讀性較差,但這是一種標準實踐。重要的是,分類賬中的每個狀態對象都必須有一個唯一的鍵。

 

多狀態

正如我們所看到的,PaperNet中的商業票據以狀態向量的形式存儲在分類帳中。能夠從分類賬查詢不同的商業票據是一個合理的要求;例如:查找所有MagnetoCorp發行的文件,或查找所有MagnetoCorp在贖回狀態下發行的文件。

爲了使這些類型的搜索任務成爲可能,將所有相關的票據分組在一個邏輯列表中是很有幫助的。PaperNet的設計包含了商業票據列表的概念——一個邏輯容器,每當商業票據發行或發生其他變化時,它都會更新。

 

邏輯表示

 

由於發行交易,新的票據可以添加到列表中,並且已經在列表中的票據可以通過購買或贖回交易更新。看看列表是如何使用描述性名稱的:org.papernet.papers;使用這種DNS名稱確實是個好主意,因爲精心選擇的名稱會讓區塊鏈設計更直觀。這一觀點同樣適用於聰明的合同名稱。

 

物理表示

實際表示和邏輯表示不同,key是一個複合鍵

 

信任關係

我們已經討論了網絡中的不同角色(如發行者、交易商或評級機構)以及不同的商業利益集團如何決定誰需要簽署交易。在Fabric中,這些規則由所謂的背書策略捕獲。這些規則可以在鏈碼粒度上設置,也可以針對各個狀態鍵設置。

這意味着在PaperNet中,我們可以爲整個名稱空間設置一條規則,以確定哪些組織可以發佈新票據。之後,可以爲個別票據設置和更新規則,以獲取購買和贖回交易的信任關係。

 

智能合約

智能契約定義業務對象的不同狀態,並管理在這些不同狀態之間移動對象的流程。智能契約非常重要,因爲它們允許架構師和智能契約開發人員定義關鍵的業務流程和數據,這些流程和數據在區塊鏈網絡中協作的不同組織之間共享

在PaperNet網絡中,智能合同由不同的網絡參與者共享,如MagnetoCorp和DigiBank。連接到網絡的所有應用程序必須使用相同版本的智能契約,以便它們共同實現相同的共享業務流程和數據。非常重要,後面部署合約的時候,MagnetoCorp和DigiBank使用相同的合約代碼.

chaincode不在這裏說明.

項目地址: https://github.com/NiuwenC/FabricSamplesProject/tree/master/commercial-paper/chaincode/javescript

 

應用

應用程序可以通過向分類賬提交事務或查詢分類賬內容與區塊鏈網絡交互。本主題涵蓋了應用程序如何做到這一點的機制;在我們的場景中,組織使用調用在商業票據智能契約中定義的發行、購買和贖回交易的應用程序訪問PaperNet。儘管MagnetoCorp發行商業票據的申請是基本的,但它涵蓋了所有需要理解的要點。

 

基本流程

應用程序使用Fabric SDK與區塊鏈網絡交互。下面是一個應用程序如何調用商業票據智能合同的簡化圖:

 

申請提交交易必須遵循六個基本步驟:

 

  1. 從錢包中選擇一個身份
  2. 連接到網關
  3. 訪問所需的網絡
  4. 爲智能契約構造一個事務請求
  5. 將事務提交到網絡
  6. 處理響應

 

您將看到一個典型的應用程序如何使用Fabric SDK執行這六個步驟。您將在issue.js文件中找到應用程序代碼。在您的瀏覽器中查看它,或者在您最喜歡的編輯器中打開它,如果您已經下載了它。花點時間看看應用程序的整體結構;即使有註釋和間隔,它也只有100行代碼!

 

Wallet錢包


const { Wallets, Gateway } = require('fabric-network');

 

您可以在node SDK文檔中閱讀fabric-network類,但是現在,讓我們看看如何使用它們將MagnetoCorp的應用程序連接到PaperNet。應用程序使用Fabric Wallet類如下:


const wallet = await Wallets.newFileSystemWallet('../identity/user/isabella/wallet');

 

 

查看wallet如何在本地文件系統中定位錢包。從錢包中檢索到的身份顯然是一個名爲Isabella的用戶,他正在使用發行應用程序。

錢包裏有一組身份——X.509數字證書——可以用來訪問PaperNet或任何其他PaperNet。如果您運行教程,並查看這個目錄,您將看到Isabella的身份憑據。

 

想象一個錢包,裏面裝着相當於你的政府身份證、駕照或ATM卡的數字數字。其中的X.509數字證書將把持有者與一個組織聯繫起來從而賦予他們在網絡通道中的權利。例如,Isabella可能是MagnetoCorp的管理員,這可能會賦予她比其他用戶(比如DigiBank的Balaji)更多的特權。此外,智能契約可以在智能契約處理過程中使用事務上下文檢索此身份。

 

Gateway 網關

第二個關鍵類是Fabric網關。最重要的是,網關標識了提供對網絡訪問的一個或多個對等點——在我們的例子中是PaperNet。看看issue.js如何連接到它的網關:


await gateway.connect(connectionProfile, connectionOptions);

connectionProfile:連接配置文件的文件系統位置,它將一組對等點標識爲通往PaperNet的網關

connectionOptions:一組用於控制issue.js如何與PaperNet交互的選項.

瞭解客戶端應用程序如何使用網關將自己與可能發生更改的網絡拓撲隔離。網關使用連接配置文件和連接選項負責將事務建議發送到網絡中正確的對等節點。

 

let connectionProfile = yaml.safeLoad(fs.readFileSync('../gateway/connection-org2.yaml', 'utf8'));

 

Network channel 網絡通道

網關connectionProfile中定義的對等節點。yaml爲issue.js提供了訪問PaperNet的權限。因爲這些對等點可以加入到多個網絡通道中,網關實際上爲應用程序提供了對多個網絡通道的訪問!

const network = await gateway.getNetwork('mychannel');

從這一點開始,網絡將提供訪問PaperNet。而且,如果應用程序同時要訪問另一個網絡BondNet,很容易:

 

const network2 = await gateway.getNetwork('BondNet');

我們可以在這裏看到Hyperledger Fabric的一個強大功能——通過連接到多個網關對等點,應用程序可以參與到一個網絡的所有網絡中,每個網關對等點都連接到多個網絡通道。根據網關.connect()中提供的錢包身份,應用程序將在不同的通道中擁有不同的權限

 

Construct request


 

const contract = await network.getContract('papercontract');

Submit transaction

const issueResponse = await contract.submitTransaction('issue', 'MagnetoCorp', '00001', '2020-05-31', '2020-11-30', '5000000');

 

Process response

let paper = CommercialPaper.fromBuffer(issueResponse);



console.log(`${paper.issuer} commercial paper : ${paper.paperNumber} successfully issued for value ${paper.faceValue}`);

console.log('Transaction complete.');

 

 

 

商業票據的介紹和流程到這裏結束,具體的代碼分析後面會進行.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章