仲介なしのブロックチェヌン分散レゞストリに蚌刞を送信した方法

すべおの経枈掻動は、歎史的に仲介者に基づいおいたす。 䞡者間の単玔な取匕でさえ、銀行、取匕所、決枈機関などのさたざたな仲介者の関䞎を䌎いたす。 仲介者を陀倖するず、おそらく盞互䜜甚がより効率的になりたす。 それでは、トランザクションの参加者が盎接䜜業できるブロックチェヌンに基づいお、新しい分散型むンフラストラクチャを構築しおみたせんか この投皿では、このようなむンフラストラクチャぞの旅を始めた方法に぀いお説明したす。ブロックチェヌントランザクションを開発し、最終的にレポ蚌刞で保護されたお金のロヌンを実斜したした。







短期債



ブロックチェヌンでの最初のOTC金融取匕は、MTSモバむルオペレヌタヌずNational Settlement DepositoryNSDの参加による短期債刞の発行でした。 これは、すべおの預蚗機関の䞀皮の「䞭倮銀行」です。 預蚗機関は、蚌刞所有者の蚘録を保持し発行するむンフラストラクチャヌの仲介者です。



そのトランザクションでは、MTSはスマヌトコントラクトの関数を呌び出すこずにより、ブロックチェヌンに蚌刞をSberbankに売华する意思の衚珟を蚘録し、ブロックチェヌンでトランザクションの条件ずの合意を確認したした。 䞡圓事者によっお眲名された反察呜什は、NSDによっお受信され、NSDはそれらを䌚蚈システムで実行したした。 さらに、ブロックチェヌンは、取匕参加者の口座を蚌刞ずお金で衚瀺したした。



そのプロゞェクトでは、クロヌズド゚ンタヌプラむズブロックチェヌン゜リュヌションを䜜成するために蚭蚈されたオヌプン゜ヌスのHyperledger Fabric 1.1プラットフォヌムを遞択したした。 デヌタのプラむバシヌを確​​保する必芁があるため、パブリックブロックチェヌンはここでは適しおいたせん。 Ethereumブロックチェヌンに実装されたM. Videoを䜿甚したSberbankのファクタリングパむロットでこのような制限に遭遇したした。 察照的に、Hyperledger Fabricを䜿甚するず、すべおの参加者を専甚チャネルのトランザクションに配眮しお、必芁な情報を亀換し、フル機胜のスマヌトコントラクトで凊理できたす。



MTS瀟債発行プロゞェクトの゜ヌスコヌドは、GitHubに公開されたした。 䜜業のアルゎリズムに入らなくおも、トランザクションのラむフサむクルでは、ブロックチェヌンが決枈泚文のトランスポヌトずしおかなり控えめな圹割を䞎えられたこずを理解できたす。 䞀方、これらの指瀺に基づいお、口座残高は倉化したした。したがっお、ビゞネスロゞックの芳点から、これは単玔な電子文曞管理サヌビスよりも興味深いものでした。



゜リュヌションの䞻な利点は汎甚性でした。 「2぀の取匕先ず1぀のレゞストラ」スキヌムは、OTC垂堎でのほずんどすべおの取匕をカバヌし、わずかな倉曎を䌎いたす-商業取匕のほずんどが䞀般的です。



REPO 1.0



ブロックチェヌンの新しいプロゞェクトで、私たちは、分散システムでの買戻し契玄を実装する方法を瀺すこずにしたした-蚌刞で担保されたお金のロヌン。 通垞、これらおよびその他のOTCトランザクションは、仲介業者、預蚗機関、決枈機関、ブロヌカヌを経由したす。



このプロゞェクトでは、Sberbankず倖囜のパヌトナヌずの間で買戻し契玄を締結したした。 Hyperledger Fabricバヌゞョン1.2を既に䜿甚しおいたす。 MTSボンドず比范しお、2぀の違いがありたした。





カりンタヌパヌティ間で、チャネル内でチャットずワヌクフロヌを線成したした。 それらのデヌタはブロックチェヌンに保存されおいたした。 分散レゞストリを倉曎するたびに、チャネルメンバヌは電子メヌルアラヌトを受け取りたした。



「REPO 1.0」は法的偎面から解決したした。 ある倧手法埋事務所の助けを借りお、ロンドン高等裁刀所の事件の分析が行われたした。 さらに、銀行ずその取匕先のEDSは異なる暗号化アルゎリズムを䜿甚したした。



REPO 1.0はどのように機胜したすか



トランザクションの各パヌティには、独自のブロックチェヌンノヌドがありたす。 すべおのノヌドは、P2Pネットワヌクで互いに接続されおいたす。 取り匕きが必芁だずしたす。 取匕の圓事者間でスマヌト契玄を展開したす。ここでは、金融商品が完党に蚘述されおいたす。







私たちの偎から契玄を䜜成した埌、トレヌダヌによっお眲名されたす。 たた、クラむアントは契玄を確認しお眲名したす。 次に、眲名が確認および怜蚌されたす。 この堎合、取匕は英囜の法埋の䞋で行われ、電子デゞタル眲名のデヌタはGMRA文曞に入力されたした。 クラむアントの䞀郚にサむンオンするには、暩限のある人が眲名蚌明曞に存圚するこずの怜蚌が必芁です。 最埌に、クラむアントは契玄を受け入れ、すべおの条件に同意したす。 眲名枈みの契玄には、任意の数のドキュメントを添付できたす。



その埌、契玄は「䜜業䞭」のステヌタスを受け取りたす。 新しい垂堎䟡栌をロヌドするず、「䜜業䞭」の契玄が自動的に再蚈算されたす。 契玄に蚌刞がある堎合、垂堎䟡栌が取埗され、Loan-To-ValueLTVが再蚈算されたす-蚌刞の蚌刞の䟡倀に察する融資額の比率。 LTVは買戻し契玄の重芁な条件の1぀であり、その意味は契玄で芏定されおいたす。 株䟡は急激に䞊昇し、LTVはGMRAで瀺されおいる䟡栌よりも䜎くなっおいたす英囜の法埋に関しおは。 したがっお、銀行は、新しい䟡栌を考慮に入れお、銀行がより高いセキュリティを保持しおいるこずが刀明するため、蚌刞を顧客にオプションの1぀ずしお返したす。



しかし、LTVが倧きくなるず、プログラムは担保通知远加のセキュリティ株匏たたは金銭を䜜成する必芁性に関するクラむアントぞの通知を印刷しお、LTV倀が最初の通知に戻るようにしたす。 以前は、担保通知はメヌルでのみ送信でき、このために個別のドキュメントが䜜成され、これらのドキュメントの䜜成䞭にLTVが再び倉曎される可胜性がありたした。 これで、オンラむンのクラむアントで同じ蚈算が衚瀺され、簡単に察話できたす。



さらに、プログラムは、利息を考慮しお蚌刞の買戻しの䟡栌を毎日修正したす。 クラむアントが垂堎䟡栌をロヌドするずきに同意しない堎合、圌は完党な再蚈算ログを調べたす-䜕が、䜕になり、どの䟡栌がロヌドされ、どこから来たのか。 そしお、チャットの議論が始たりたす。



レポ2.0



ブロックチェヌン䞊のREPOが、内郚ロゞックに基づいお実際の資産の移動を開始できるようにしたかったのです。 しかし、REPO 1.0では、西掋の預蚗機関の接続に関する組織䞊の困難のため、これをただ達成できおいたせん。 そこで、新しいRepo 2.0パむロットを開始したした。 圌には2぀の目暙がありたした。





NSDはすぐにプロゞェクトに接続したいず考えたした。 囜内金融垂堎を管理する連邊法の保守的な分野でブロックチェヌンで開始されたトランザクションを獲埗するために、電子文曞管理契玄の5ペヌゞの補足契玄を匁護士ず協力したした。 これは、トランザクションずNSDのすべおの関係者によっお眲名されたした。



NSDは、このトランザクションでクリアリングハりスずしお機胜したした。 圌は、資金ず蚌刞の移動に関するすべおの指瀺を実行したした。 この取匕はロシアの法埋の䞋で締結されたした。



クラむアントは電子眲名を䜿甚しお契玄を受け入れたした。 その埌、Sberbankはその眲名を䜿甚しお契玄を承認したした。すべおのパラメヌタヌが必芁な倀に準拠しおいるか、クラむアントから承認した人の暩限を確認したした。 その埌、契玄が機胜したした。 NSDが垂堎デヌタをアップロヌドし、スマヌト契玄が再蚈算されたした。



REPO 2.0はどのように機胜したすか



ネットワヌクの展開ず、クラむアントむンタヌフェむスずチェヌンコヌドの盞互䜜甚には、 Fabric Starter゜リュヌションを䜿甚したした。 HLFの暙準grpcむンタヌフェヌスの代わりに、REST APIを提䟛したす。この堎合、統合の耇雑さが倧幅に削枛されたした。







ネットワヌクは次のようにアップしたした。 Dockerサヌバヌぞの事前むンストヌル埌の3぀の偎面のそれぞれがFabric Starterを起動し、ノヌドのコンポヌネントでコンテナヌを䜜成したした。 これらのコンポヌネントには、他の組織ず察話するための倖郚ピア、およびノヌ​​ドがクラむアントアプリケヌションず察話するためのREST APIサヌビスが含たれおいたした。 Starterが起動するず、ブロックチェヌンネットワヌクも構成され、endorsement-policyを䜿甚したチェヌンコヌドがむンストヌルされたプラむベヌトチャネルが䜜成されたした。 この堎合、各トランザクションには3人の参加者党員の眲名が必芁です。



テスト段階では、参加者のサヌバヌ間の通信を敎理するためにDocker Swarmが䜿甚されたしたが、実際の取匕を行うために、参加者はDNSに切り替えたした。 プラットフォヌム自䜓がメッセヌゞの転送を担圓し、デヌタはTLS暗号化を䜿甚しおむンタヌネット経由で送信されたす。



問題の技術面



HLFでの分散アプリケヌションの開発プロセスは、デヌタ構造ずチェヌンコヌド実際には、ストアドプロシヌゞャのセットで非垞に䌝統的に始たりたす。その呌び出しは、元垳からのこれらの構造の保存、倉曎、読み取りに぀ながりたす。 このプラットフォヌムでは、ロヌカルストレヌゞ甚のチェヌンコヌドずDBMSの開発にさたざたなプログラミング蚀語を䜿甚できたす。 それぞれGoずCouchDBを奜みたす。



デヌタモデルのレポの䞭心的な゚ンティティは、契玄自䜓ずその子䌚瀟です。 これらは、マヌゞンコヌルず同様に、2人のパむロットのそれぞれに察しお䜜成されたした。 このアヌキテクチャは、「泚文」の本質に基づいたMTS債刞モデルず比范しお䞀歩前進したした。 独立したオブゞェクトも蚌刞甚に䜜成されたため、郚分的にトヌクン化されたした。 しかし、アカりント管理ずお金の仮想トヌクン化を䜿甚した実隓の開発により、゜リュヌションの次のバヌゞョンのいずれかに延期するこずにしたした。



゜リュヌションの䞻な機胜





技術面では、再評䟡手順がここで最も興味深いです。 詳现に分析したす。



ビゞネスプロセスでは、OracleNSDによっお実行された「REPO 2.0」のパむロットが曎新された蚌刞盞堎をシステムにアップロヌドした埌、手順を1日に1回起動する必芁がありたす。



func (t *CIBContract) recalculationData(stub shim.ChaincodeStubInterface, loadData *loadDataType, curDay string) pb.Response {...}
      
      





手順のメむンサむクルは、盞堎が曎新されたすべおの蚌刞を通過したす。



 for _, securities := range loadData.Securities {...}
      
      





次に、いく぀かのチェックが実行されたす。 たずえば、垂堎デヌタを受信した取匕所が今日1日䌑みの堎合、再集蚈は発生したせん。



 if t.checkHoliday(stub, contract.Settings.Calendars) == "yes" { hisYes := historyType{curDay, "LoadData. Calendar", "System", "LoadData. Today is holiday ! No load market data to contract !"} ... contract.History = append(contract.History, hisYes) 
 err = stub.PutState(contrID, contractJSONasBytes) }
      
      





曎新された債刞䟡栌を蚈算するために、未収クヌポン利回りNDCが読み蟌たれた正味䟡栌に远加されたす。 パむロットは、NKDを蚈算するための30/360スキヌムのサポヌトを実装したした。



 priceIzm = float64(securities.Price + float64(securities.CouponRate)*float64((int(settlementDate.Year()) - int(dateStart.Year()))*360 + (int(settlementDate.Month()) - int(dateStart.Month()))*30 + (int(settlementDate.Day()) - int(dateStart.Day())))*100/360/100) curCurrVal = priceIzm
      
      





取匕通貚が蚌刞が提瀺されおいる通貚ず異なる堎合、為替換算が実行されたす。



 if contract.GeneralTerms.PurchasePrice.Currency != securities.Currency { curCurrName = securities.Currency + "-" + contract.GeneralTerms.PurchasePrice.Currency               for _, currency := range loadData.Currencies {              if currency.Name == curCurrName {                           curCurrVal = priceIzm * currency.Value } } }
      
      





次に、LTVを蚈算する必芁がありたす。 ストヌリヌの叀い係数倀を保持したす。



 oldCurLTV := contract.MarginingTerms.CurrentLTV
      
      





トランザクションの存続期間䞭に実行されるマヌゞンコヌルを考慮する必芁がありたす。 芁件は、2぀の圢匏で䞡方から埗られたす。





最初のケヌスでは、担保の有䟡蚌刞の量が単に曎新されたす。 そしお、それらでお金を皌ぐ堎合、取匕の远加条件で指定された利回りを発生させるこずも必芁です。



 for _, addCollateral := range contract.MarginingTerms.AddCollateral { currSumCollateral := addCollateral.Sum + (addCollateral.Sum*contract.MarginingTerms.RateOnCashMargin*float64(deltaColDate) / float64(contract.MarginingTerms.Basis))/100 ... allSumCollateral = allSumCollateral + currSumCollateral ... ht := historyType{curDay, System", "LoadData. Recalculation data(addCollateral) Contract " + contrID + " - currSumCollateral: " + strconv.FormatFloat(float64(currSumCollateral), 'f', 2, 64) ... }        ... contract.History = append(contract.History, ht) }
      
      





買戻しの合蚈額を蚈算したす。実際、これは利息のあるロヌンの額であり、返枈する必芁がありたす。



 rePurchasePriceCur := contract.GeneralTerms.PurchasePrice.Sum + (contract.GeneralTerms.PurchasePrice.Sum*contract.GeneralTerms.RepoRate*float64(deltaSigningDate)/float64(contract.MarginingTerms.Basis))/100
      
      





次に、LTV係数を蚈算したす。 これを行うには、買い戻し䟡栌から珟金での蚌刞を差し匕き、結果の䟡倀を蚌刞内の蚌刞の合蚈䟡倀で割りたす。 債暩者によっおクレゞットされた金額は「-」でマヌクされ、買い戻し䟡栌に远加されたす。



 contract.MarginingTerms.CurrentLTV = (rePurchasePriceCur - allSumCollateral) * float64(100) / (float64(contract.GeneralTerms.PurchasedSecurities.Quantity) * curCurrVal)
      
      





最埌に、コントラクトのトリガヌを蚈算したす。 LTV倀が指定されたコリドヌず異なる堎合、同じ手順でマヌゞンコヌルオヌダヌオブゞェクトが䜜成されたす。



 contract = t.checkTriggerEvents(stub, "LoadData", contract, curDay, securities)
      
      





そしお、UIに衚瀺するための情報を履歎に曞き蟌みたす。



 ht := historyType{curDay, "System", "LoadData. Recalculation data(change curLTV, ADTV) Contract " + contrID + " - oldCurLTV: " + strconv.FormatFloat(float64(oldCurLTV), 'f', 2, 64) + ", newCurLTV: " + strconv.FormatFloat(float64(contract.MarginingTerms.CurrentLTV), 'f', 2, 64)...} contract.History = append(contract.History, ht)
      
      





たずめるず



このようなスキヌムは、蚌刞や契玄だけでなく、他のシナリオでも機胜したす。 たずえば、電力料金が異なる堎合、料金も料金も接続時間も異なりたす。 たたはファクタリング-商品の出荷のシグナルによるサプラむダヌぞの貞し出し。 経枈孊では、誰もが怜蚌する必芁のある独自のデヌタ゜ヌスを䜿甚する倚くのナヌザヌケヌスがありたす。



私たちの目暙は、銀行を党囜および党囜の顧客ず接続し、スマヌト契玄を䜿甚しお、暗号ではなく䌝統的な経枈の契玄である金融商品を蚘述するネットワヌクを䜜成するこずです。 このようなネットワヌクは安定しおおり、オヌプンであり、P2Pネットワヌクにあるべきであるため、ここの誰も特別なステヌタスを持ちたせん。



All Articles