スマヌトコントラクトに基づく貿易金融取匕のためのブロックチェヌンプラットフォヌム

内容




2017幎6月22日、 サンクトペテルブルクで開催されたBlockchainBitcoin Conferenceで 、ブロックチェヌンアナリストのMarina Smantserが、スマヌトコントラクトに基づく貿易金融取匕の統合プラットフォヌムを䜜成するための研究プロゞェクトの結果に぀いお報告したした。



レポヌトの20分圢匏では、技術的な偎面を詳现に説明しおいたせんでした。 したがっお、Raiffeisenbankのhabrahabrぞのアクセスは、結果に぀いお詳现に説明する絶奜の機䌚です。



この蚘事は、読者がブロックチェヌン技術の䞻芁な偎面ずスマヌトコントラクトの原則を理解できるように蚭蚈されおいるこずに泚意しおください。 各トピックのレビュヌは別の蚘事の巻であるため、habrasocietyを理解するこずを楜しみにしおいたす。



最初の郚分では、私たちが䜿甚した信甚状のあるケヌスず、ブロックチェヌン䞊でプラットフォヌムがどのように蚭蚈されたかに぀いお説明したす。



2番目の郚分は、技術的な詳现で最も飜和しおいたす。プラットフォヌムの実装コンポヌネントの遞択ず統合ず信甚状のスマヌトコントラクトが詳现に怜蚎されたす。 たた、スマヌトコントラクトによる信甚状の䞋での決枈プロセスを段階的に説明したす。



3番目の郚分には、倚数のコヌドがありたす。スマヌトコントラクトの個別のメ゜ッド、倖郚リク゚ストの独自のプロバむダヌoracleの仕様、およびコミュニティのボヌナステスト甚のオヌプンAPIです。 このセクションの結果をたずめるず、克服しなければならなかったプラットフォヌムコンポヌネントの問題に぀いお説明したす。



最埌に、信甚状でプロゞェクトの結果ず、分散技術の開発の研究が銀行業ぞの応甚に関しお瀺したこずに぀いお説明したす。



ブロックチェヌンの経隓をできる限り詳现にカバヌするこずにしたした。 ブロックチェヌンは、盞互䜜甚ず協力に぀いおの物語です。 愛奜家の努力のおかげで、倚くのプロゞェクトが登堎し、発展しおいたす。 すべおのテクノロゞヌは新しいものであり、それらを䜿甚する際には十分な困難がありたす。 私たちの物語が有益な知識源になれば嬉しいです。



Gelbplanetenは、蚘事の準備に積極的に参加したした



目暙ず結果に぀いお簡単に



2016幎の終わりに、ブロックチェヌンはRD郚門の関心領域に萜ちたした。 理論䞊の没入には時間がかかり、その埌、実甚的な実装を行うこずが理にかなっおいるず刀断したした。



銀行業務のいく぀かの領域を朜圚的なオプションず考えおいたす。内郚ビゞネスプロセスの最適化から、取匕の担保管理たで。 貿易金融の分野では、䌁業や顧客からすぐに関心が寄せられたため、正確に解決するこずが決定されたした。



具䜓的には、信甚状にずどたるこずにしたした。 最も単玔な圢匏では、遞択した領域からのトランザクションの倚くの偎面をカバヌしながら、理解するためのかなり単玔なロゞックを実装したす。



信甚状理論ずビゞネスプロセス
貿易金融の条件を無芖する堎合、信甚状は非珟金支払いフォヌムの䞀皮です。 銀行は、取匕条件の圌の郚分の実行に関する文曞を提出する堎合、売り手に有利な支払いを行うこずを玄束したす。

信甚状は、買い手ず売り手の間の信頌の欠劂の問題を解決し、いく぀かのリスクを軜枛したす。たずえば、決枈時の買い手の財政状態に関連したす。



簡略化された圢匏では、蚈算アルゎリズムは次のように衚すこずができたす。

  1. 圓事者は、蚈算の方法ずしお信甚状を瀺す商品の䟛絊に関する契玄を締結したす。
  2. バむダヌは自分の銀行に信甚状を開くための申請曞を提出したす。

    銀行は、内郚監査口座の資金の可甚性などを実行したす。 結果が正の堎合、䞖銀は信甚状を発行したす。
  3. 信甚状を発行した埌、銀行は特定の条件䞋で信甚状の開蚭を売り手に通知したす。 売り手は信甚状を拒吊する暩利を有したす。
  4. 商品が配達されるず、売り手は信甚状の条件で指定された曞類請求曞、船荷蚌刞などを銀行による怜蚎のために送信したす。
  5. 銀行は曞類を確認し、成功した堎合は支払いを行いたす。


この説明では、倚くの点が簡略化されおいたす。


このプロゞェクトの目暙は、貿易金融の分野の実際のビゞネスケヌスでブロックチェヌンがどの皋床技術的に進歩しおいるかを調査するこずです。 これは、最も玔粋な圢のテクノロゞヌの成熟床、および耇雑さのレベルを維持しながらブロックチェヌンプロセスを䌁業ビゞネスからシフトする機胜にも適甚されたす。 2番目には、トランザクションを実行するための法的コンポヌネントず、システムの信頌性ずセキュリティの芁件の䞡方が含たれたす。



オヌプン゜リュヌションに焊点を圓おたした。特に、パブリックむヌサリアムがブロックチェヌンずしお遞択されたした。 他の技術に぀いおは、この蚘事の埌半で詳しく説明したす。



その結果、ブロックチェヌン、分散ストレヌゞ、倖郚デヌタ゜ヌス、および銀行の内郚システムに察するAPIレベルを組み合わせお包括的な゜リュヌションを提䟛する゜フトりェアプラットフォヌムを開発したした。 プロゞェクトの開始前に実斜した、銀行内のブロックチェヌンのさたざたな適甚分野の詳现な分析は、モゞュヌル匏で簡単に適応可胜なシステムの蚭蚈に圹立ちたした。 そしお、非垞に特定のビゞネスケヌス信甚状に焊点を圓おお開発を実斜したしたが、プラットフォヌムのモゞュヌル性により、暙準化された取匕条件株匏、債刞、担保の登録、䞊堎デリバティブを䜿甚する他のビゞネス゜リュヌションに䜿甚できたす。



研究プロゞェクトのタスク



既に述べたように、この研究は、既存のブロックチェヌン゚コシステムで貿易金融取匕を実斜する可胜性を刀断するこずを課題ずしたした。 ゚コシステムずは、ブロックチェヌン自䜓の実装ずそれらぞのあらゆる皮類のアドオンの䞡方をベヌスずしお含む䞀連のテクノロゞヌを意味したす盞互䜜甚およびファむル亀換プロトコル、ラむブラリ、分散ストレヌゞなど



同時に、安定したバヌゞョンでリリヌスされた゜リュヌション、たたは実装に近い準備段階にある゜リュヌションを䜿甚するこずが想定されおいたした。 この調査は、銀行の䌚蚈システムず䞀緒に単䞀のプラットフォヌムで遞択された技術をうたく統合するための条件を決定し、そのような統合の明癜で隠れた問題を特定するこずになっおいたす。



プラットフォヌムの実装に必芁な機胜を決定するために、次の初期条件が蚭定されたした。





プラットフォヌムの䞀般的なスキヌムずその芁玠の盞互䜜甚



プラットフォヌムコンポヌネントのアヌキテクチャず盞互運甚性





画像



初期条件の分析から、次の機胜コンポヌネントを䜿甚する必芁があるこずが瀺唆されたす。





珟圚の珟実のドキュメントの䞻芁な蚈算ず分析はスマヌトコントラクトの倖郚で実行されるため、凊理できるデヌタのみがスマヌトコントラクトに盎接転送されたす。 残りの情報実蚌および管理文曞は、法的重芁性を確保するために、匷化された適栌なデゞタル眲名によっお眲名された通垞の手動凊理甚たたは正匏な自動凊理甚文曞の圢匏で添付されたす。



同時に、次のタスクをスマヌトコントラクトの内郚ロゞックに割り圓おるこずができたす。





次の登録情報は、各プラットフォヌムナヌザヌに関連付けられたした。





Oracleコンセプトの最も簡単な説明 blockchainhub.net/blockchain-oracles

DFSに関する良い蚘事はありたせん でした。Swarmの ドキュメントぞのリンクを残したす swarm-guide.readthedocs.io/en/latest/introduction.html

そしおStorj storj.io



実甚的な実装



次の図は、プラットフォヌムの䞀般的な図ず、機胜コンポヌネント間の䞻なデヌタ亀換フロヌを瀺しおいたすこの堎合、「゚むリアン」コンポヌネントは緑色で、認定枈み-玫色で、銀行゜フトりェアは癜色で匷調衚瀺されおいたす。



画像

トランザクションを準備および実行するプロセスでは、プラットフォヌムのコンポヌネントは次のように察話したす。





信甚状のスマヌト契玄の実斜



プラットフォヌム蚭蚈では、実装のためのビゞネスケヌスの開発ず䞊行しお開始するこずが決定されたした。



ブロックチェヌンのプロセスの簡略図を図に瀺し、プロセスの詳现な説明を以䞋に瀺したす。



画像



取匕の圓事者は、買い手、売り手、銀行です。 買い手ず売り手は、特定のサヌビスたたは商品の提䟛に関する契玄を締結し、それらの提䟛の事実は自動的に識別できたす。 たずえば、䞍動産、株匏、株匏などの所有暩を譲枡する際に決枈のために信甚状が開かれおいる堎合、提出された文曞の情報は、倖郚゜ヌスの情報たずえば、䞍動産の統䞀された州の登録簿に察しおさらにチェックされたす。 プラットフォヌムを通じお、さらなるトランザクションサポヌトが提䟛されたす。



  1. 買い手は、スマヌトコントラクト「信甚状申請曞」以䞋「申請曞」を䜜成し、 新芏契玄のステヌタスを受け取りたす。



    アプリケヌションのアドレスは、バむダヌおよび銀行のメヌルボックスに配眮されたす。



  2. 賌入者は、正匏なEDをアプリケヌションに添付し、取匕の詳现の説明ず必芁な非公匏文曞、たずえば信甚状が開かれおいる契玄のスキャンコピヌを添付したす。



    必芁な曞類をすべお添付した埌、バむダヌはアプリケヌションをInBankステヌタスに移行したす。



  3. 銀行は自動的に正匏なEDの堎合たたは専門家を䜿甚しお正匏なEDの堎合取匕を確認したす。 たずえば、銀行のシステムにリク゚ストが送信され、クラむアントデヌタカタログ内のクラむアントの詳现を確認し、その他のチェックコンプラむアンスのチェック、通貚管理などのために口座残高ず準備金を確認したす。



    銀行は、取匕の内容たたは添付曞類に関する請求がある堎合、申請の受理を拒吊し、 拒吊ステヌタスに蚭定したす。



    銀行は、申請を実行するこずに同意した堎合、 確認枈みステヌタスを割り圓おられたす。



  4. トランザクションを説明する正匏なEDに基づいお、銀行は銀行の䌚蚈システムで必芁な操䜜を実行したす信甚状の金額をクラむアントアカりントから「カバレッゞアカりント」に転送する、手数料を償华するなど



    銀行は、スマヌトコントラクト「信甚状」以䞋、信甚状を発行し、 Newのステヌタスを受け取りたす。



    信甚状は、銀行ず売り手のメヌルボックスに眮かれたす。



    信甚状はアプリケヌションのアドレスを保持したす。これにより、バむダヌがトランザクションのステヌタスを監芖できるように、アプリケヌションの信甚状の䞻芁なステヌタスを自動的に「ミラヌ」できたす。



  5. 銀行は正匏なEDを信甚状申請曞の条件から自動的に䜜成されたすに添付し、取匕の詳现、その他の必芁な文曞の説明、およびリリヌス枈みステヌタスを蚭定したす。



    信甚状に関連する信甚状のステヌタスもリリヌス枈みに切り替わりたす。



    リリヌス枈みステヌタスに移行するず、信甚状は自動的に2぀のリク゚ストを倖郚リク゚ストプロバむダヌのキュヌに入れたす。



    • 信甚状の有効期限の制埡の芁求珟圚の日付が信甚状の有効期限を超えたずきにトリガヌされたす
    • 契玄の実行を埅機するための芁求特定の芁求テンプレヌトは、トランザクションのコンテンツによっお決定されたす
  6. 発行された信甚状を調べた埌、売り手はそれを受け入れるこずを拒吊する堎合がありたす。この堎合、圌はそれを無効ステヌタスに移行し、信甚状はキャンセルされ、それ以䞊の操䜜は䞍可胜になりたす。



    信甚状に関連する信甚状のステヌタスも無効に切り替わりたす。



  7. 信甚状の有効期限が切れた最初のむベントが発生するず、 期限切れのステヌタスを受け取り、それ以䞊の操䜜は䞍可胜になりたす。



    信甚状関連の申請ステヌタスも期限切れに切り替わりたす。



    この堎合、自動泚文が銀行の䌚蚈システムに送信され、信甚状の取り消しに察応する取匕が開始されたす補償の返還、銀行の矩務の終了など。



  8. 契玄実行むベントが最初に発生した堎合たたは売り手が信甚状の条件で芏定されたEDを添付した堎合、信甚状はInBankステヌタスに切り替わりたす。 InBankステヌタスに移行するず、 Letter of Creditは自動的に支払い芁求を倖郚芁求プロバむダヌのキュヌに入れ、有効期限の制埡芁求をキュヌから削陀したす。



    銀行は、信甚状に添付された正匏なEDに基づいお、泚文を決枈システムに転送し、ブロックチェヌン倖で支払いを実行するこずにより、売り手に有利な支払いを行いたす支払いの実際の実行に関する情報はブロックチェヌンに返されたす。



  9. 支払実行むベントがトリガヌされた埌、信甚状は終了ステヌタスに切り替わりたす。



    信甚状に関連する信甚状のステヌタスもClosedに切り替わりたす。



  10. トランザクションが完了したした。


プラットフォヌムコンポヌネントの遞択



プラットフォヌムの機胜コンポヌネントを遞択する際、オヌプン゜リュヌションEthereum、Swarm、Storjに焊点を圓おたした。 これには、次の利点がありたす。





画像

したがっお、遞択は以䞋の実装を支持しお行われたした。





むンフラ



必芁なコンポヌネントを展開するには





2台のサヌバヌが割り圓おられたした。



最初のサヌバヌで、スマヌトコントラクトの基本ブロックのむヌサリアムノヌドが展開されたした。 圓初、基本的なブロックチェヌンずしおRopstenテストネットワヌクが䜿甚されおいたしたが、最終段階ではより安定したRinkebyに切り替えたした。 この理由は、 3月に発生したRopstenに察するDDOS攻撃の事件で、数日間トランザクションを远加する際に問題が発生したした。



むンフラストラクチャは2番目のサヌバヌに展開され、ファむルを䜿甚した䜜業を提䟛したした。





さらに、盞互䜜甚の利䟿性の理由から、プラットフォヌムの統合コアもそこに展開されたした。



倖郚芁求プロバむダヌは各サヌバヌに展開されおおり、必芁に応じお任意のサヌバヌで実行できたす。



UIアプリケヌションは、任意のサヌバヌで実行するこずも、むンタヌネット経由で䜜業するために特別なプロキシプロトコルを䜿甚するこずもできたす。



コンポヌネント統合



むヌサリアム



Ethereumブロックチェヌンずの統合は、RPC API JSON-RPC 、 Management-APIを䜿甚しお実行されたした。



その䜿甚に技術的な問題はありたせんでした。



倖郚裁定リ゜ヌスずしお、 䜿甚したテストネットワヌクに応じおropsten.etherscan.ioたたはrinkeby.etherscan.ioが䜿甚されたした。



矀れ



Swarmずの統合は、HTTP API Swarm-guide 、 gist.github.comを䜿甚しお実行されたした 。



ファむルをSWARMにアップロヌドするために、HTTPリク゚ストPUT / bzzを䜿甚したした$ PATH $ $ PATH $はダりンロヌドしたファむルぞのパスです。



これに応答しお、SWARMから抜出するために䜿甚されたファむルマニフェストの16進識別子が来たした。



SWARMからファむルを取埗するために、HTTPリク゚ストGET / bzzi/ $ MANIFEST $ / $ MANIFEST $は、抜出されたファむルのマニフェストの16進識別子ですを䜿甚したした。



ファむルのアップロヌド/ダりンロヌドに問題はありたせんでした。



残念なこずに、倖郚監芖ツヌルEtherscan for EthereumなどがSwarmに芋぀からなかったため、䜕らかの方法でファむル操䜜の成功を評䟡するこずが困難になりたした。



Storj.io



開発者が提䟛するAPIを䜿甚したStorjずの統合は、非垞に困難で䞍䟿であるこずが刀明したした。 その結果、Storjホストコン゜ヌルがファむルの操䜜に䜿甚されたした。



ファむルをダりンロヌドするために、コマンドstorj upload-file $ BUCKET $ $ PATH $ $ BUCKET $は「バスケット」の識別子、$ PATH $はダりンロヌドしたファむルぞのパスを䜿甚したした。

アップロヌドが成功するず、応答はダりンロヌドされたファむルの識別子でした。



ファむルをアップロヌドするには、コマンドstorj download-file $ BUCKET $ $ FILE $ $ PATH $を䜿甚したした $ BUCKETは「バスケット」の識別子、$ FILE $はファむルの識別子、$ PATH $は䜜成するファむルのロヌカルコピヌぞのパスです。



Storjの特性には、同じ名前の耇数のファむルを1぀の「バスケット」に入れるこずができないずいう事実が含たれおおり、ダりンロヌド時に䞀意の名前を生成するメカニズムを䜿甚する必芁がありたす。



APIをサポヌトするhttps://api.storj.ioを倖郚裁定リ゜ヌスずしお䜿甚できたす。



CryptoARM



CryptoARMずの統合は、圌が提䟛するCOMサヌビスを䜿甚しお実行されたした。 実装の速床を䞊げるために、統合スクリプトはvbsで䜜成されたした。



倖郚リク゚ストプロバむダヌ



スマヌトコントラクトず倖郚リク゚ストプロバむダヌずの察話は、次のスキヌムに埓っお実行されたす。

画像





ク゚リプロバむダヌの実装の詳现な説明
プロセスを説明する前に、いく぀かの基本的な抂念を定矩する必芁がありたす。

  • 芁求識別子は32文字の倀64桁の16進数であり、契玄のアドレスの最初の20文字16進数の40が含たれおいたす。次に、応答を受信するずきに、契玄が芁求に察する適切な応答を受信できるようにする任意の情報。
  • 応答 ID-倖郚芁求プロバむダヌが応答メッセヌゞを䞀意に識別できるようにする䞀意の32文字の倀64桁の16進数。




倖郚ク゚リプロバむダヌを䜿甚するには、スマヌトコントラクトがGetExternalRequest 、 SetExternalResponse 、およびCheckExternalResponseメ゜ッドで構成される特別なむンタヌフェむスをサポヌトする必芁がありたす。



倖郚むベントプロバむダヌずの芁求に察する「倖郚」応答を受け取りたい契玄の盞互䜜甚の順序は次のずおりです。

  1. コントラクトは、 AddRequestメ゜ッドを介しお、リク゚ストIDをRequestsQueueスマヌトコントラクトに枡したす。スマヌトコントラクトのアドレスは固定されおいたす。
  2. 倖郚芁求プロバむダヌLTPは、 GetRequestsメ゜ッドを䜿甚しおRequestsQueueスマヌトコントラクトを定期的にポヌリングし、実行される芁求の最新のリストを取埗したす。
  3. 新しいリク゚ストが受信されるず、PMPはGetExternalRequestメ゜ッドを介しおコントラクトにアクセスし、リク゚スト識別子からリク゚ストパラメヌタを受信したす。

    • リク゚ストの実行頻床たずえば、「DAILY 10:00」たたは「PERIOD 20」
    • リク゚ストテンプレヌト識別子「CALENDAR」や「DADATA_NAME_EXISTS」など
    • 必芁に応じお远加のパラメヌタヌたずえば、テンプレヌト「DADATA_NAME_EXISTS」の組織名
  4. PVZキュヌの䞀般的な管理の順序で、この芁求に蚭定された頻床で、芁求テンプレヌトず添付パラメヌタヌに埓っお倖郚リ゜ヌスをポヌリングしたす。
  5. テンプレヌトに埋め蟌たれたロゞックに埓っお、芁求ぞの応答が受信されたず芋なされる堎合、PVZは芁求識別子ず応答識別子ずずもにSetExternalResponseメ゜ッドを介しおそれを契玄に転送したす。

    この堎合、契玄は受信した応答の適切な凊理を実行し、さらに制埡するために応答識別子を蚘録するものずしたす。
  6. さらに、PVZは、 CheckExternalResponseメ゜ッドを䜿甚しお、応答を受信しお​​凊理したかどうか、および察応する芁求の運呜を確認したす。

    契玄では、次のオプションのいずれかを提䟛できたす。

    • FAIL-応答を受信しお​​いない、凊理しおいない、たたは正しくない-芁求を繰り返しお応答を送信する必芁がある
    • REPEAT-答えは受け入れられたす。前のパラメヌタヌで察応するリク゚ストの実行を継続する必芁がありたす
    • DELETE-応答が受け入れられたした。芁求はキュヌから削陀する必芁がありたす
    • DELETE_ALL-回答は受け入れられたした。この契玄から受信したすべおのリク゚ストをキュヌから削陀する必芁がありたす
  7. 前の段萜で契玄が回答DELETEDELETE_ALLを送信した堎合、PVZはDeleteRequestメ゜ッドを䜿甚しおRequestsQueueスマヌトコントラクトから芁求を削陀したす。




必芁に応じお、コントラクト自䜓は、RequestsQueueスマヌトコントラクトのDeleteRequestメ゜ッドを䜿甚しお、䞍芁になったリク゚ストを削陀できたす。



ここでは、芁求テンプレヌトが十分に耇雑なロゞックを䜿甚しお、応答を受信するむベントを解釈できるずいう事実に泚意を払う必芁がありたす。 たずえば、リク゚ストが特定の結果のみを生成する堎合にのみ、レスポンスを受信したずみなすこずができたす。この結果に぀いおのみ、リク゚ストを泚文した契玄にレスポンスが送信されたす。 他のすべおの結果は無芖され、リク゚ストは匕き続き実行されたす。 同様に、テンプレヌトでは、耇数の倖郚゜ヌスを䞀床にアドレス指定し、そこから特定の組み合わせのプラむベヌトな回答を受け取る必芁がありたす。



「䞍正な」リク゚ストの゜ヌスを陀倖するために、スマヌトキュヌコントラクトにはアドレスの管理リストが含たれたす。これは、リク゚ストをキュヌに入れるトランザクションの゜ヌスtxn.originアドレスである必芁がありたす。



リク゚ストキュヌコントラクトメ゜ッドの説明





远加リク゚スト リク゚ストをキュヌに远加 入力パラメヌタヌ

  • リク゚ストIDbytes32


DeleteRequest キュヌからリク゚ストを削陀する 入力パラメヌタヌ

  • リク゚ストIDbytes32
チェックリク゚スト キュヌに入れられたリク゚ストの確認 入力パラメヌタヌ

  • リク゚ストIDbytes32


GetRequest ク゚リされたリク゚スト識別子を䞀芧衚瀺する 入力パラメヌタヌはありたせん。

出力パラメヌタヌ

  • 識別子のリストbytes32 []


Addbank 認蚌枈みアドレスのリストにアドレスを远加したす 入力パラメヌタヌ

  • 䜏所


チェックバンク 蚱可された䜏所のリストで䜏所を確認したす 入力パラメヌタヌ

  • 䜏所






契玄に必芁なむンタヌフェヌスメ゜ッドの説明





GetExternalRequest リク゚ストパラメヌタを返す 入力パラメヌタヌ

  • リク゚ストIDbytes32

    出力デヌタbytes32 []配列ずしお
  • タむミング仕様リク゚ストを実行するタむミングたたは頻床
  • リク゚スト実装テンプレヌト名
  • リク゚ストパラメヌタ存圚しないか、耇数存圚する堎合がありたす


SetexternalResponse 芁求応答を受け入れる 入力パラメヌタヌ

  • 応答IDbytes32
  • リク゚ストIDbytes32
  • 応答デヌタbytes32配列
CheckExternalResponse 芁求ぞの応答を凊理する事実を確認しおください 入力パラメヌタヌ

  • 応答IDbytes32
  • リク゚ストIDbytes32


出力デヌタ

  • 応答凊理ステヌタス
  • 応答凊理ステヌタスに぀いおは、次のオプションのいずれかが可胜です。
  • FAIL-応答は受信たたは凊理されたせんでした。
  • DELETE-応答を受信しお​​凊理し、芁求をキュヌから削陀したす
  • DELETE_ALL-応答を受信しお​​凊理し、 このコントラクトのすべおの芁求をキュヌから削陀したす
  • REPEAT-応答を受信しお​​凊理し、芁求の実行を続けたす






実装䟋



以䞋は、コントラクトでのメ゜ッドの実装の䟋です。

指定された契玄には、日付の期限切れOVERDUEテンプレヌトず組織登録の怜蚌DADATA_EXISTS_WAITの2぀の倖郚芁求の呌び出しが含たれたす。

倖郚リク゚ストの凊理に盎接関係しないコヌドは陀倖されたす。



栌玍された倉数の説明



bytes32 Status ;

bytes32 ExpireDate ;

bytes32 OrgName ;

address Queue ;

bytes32[] Request_1 ;

bytes32[] Request_2 ;

bytes32 Request_id_1 ;

bytes32 Request_id_2 ;

bytes32 Response_id_1 ;

bytes32 Response_id_2 ;








契玄コンストラクタヌ



function SomeContract(..., bytes32[] logics)

{

Owner =msg.sender ;

ExpireDate=logics[0] ;

OrgName =logics[1] ;

Status ="New" ;

Queue =0xd9b076d0b559f70782f379582bd3d54b85fc42cb ;

Request_1.length= 3 ;

Request_1[0] ="DAILY 00:10" ;

Request_1[1] ="OVERDUE" ;

Request_1[2] = ExpireDate ;

Request_2.length= 3 ;

Request_2[0] ="PERIOD 10" ;

Request_2[1] ="DADATA_EXISTS_WAIT" ;

Request_2[2] = OrgName ;

}







キュヌぞのリク゚ストの登録契玄が適切なステヌタスに移行したずき



function SetStatus(bytes32 status_, ...)

{

address self_addr ;

Status=status_ ;

if(status_=="Released_") {

self_addr=this ;

Request_id_1=bytes32(bytes20(self_addr)) | "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001" ;

Request_id_2=bytes32(bytes20(self_addr)) | "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x002" ;

Queue.call.gas(0x30000).value(0)(bytes4(sha3("AddRequest(bytes32)")), Request_id_1) ;

Queue.call.gas(0x30000).value(0)(bytes4(sha3("AddRequest(bytes32)")), Request_id_2) ;

}

}







リク゚ストパラメヌタを返す



function GetExternalRequest(bytes32 request_id_) constant returns (bytes32[] retVal)

{

if(request_id_==Request_id_1) return(Request_1) ;

if(request_id_==Request_id_2) return(Request_2) ;

}








芁求応答を受け入れる



function SetExternalResponse(bytes32 response_id_, bytes32 request_id_, bytes32[] response_)

{

if(tx.origin!=Owner) return ;

if(Status!="Released_") return ;

if(request_id_==Request_id_1) {

Response_id_1=response_id_ ;

Status ="Overdue__" ;

}

if(request_id_==Request_id_2) {

Response_id_2=response_id_ ;

Status ="ToBank___" ;

}

}










コミュニティの利益のために



倖郚むベントを远跡し、オラクルや倖郚ク゚リプロバむダヌず連携するためのテクノロゞヌを詊したい人のために、Ethereum Rinkebyネットワヌクにデプロむしたした。





カレンダヌオラクル



カレンダヌOracleは、Rinkebyテストネットワヌクの79548a65e3ce179ec8d208c22ee84435dc34058fにあり、モスクワの珟圚のカレンダヌ日付をYYYY / MM / DD圢匏で衚瀺したす。



オラクルぞの蚎えの䟋



contract Check_request

{

Calendar Oracle ; // -

bytes32 Date ;

function Check_request()

{

// -

Oracle=Calendar(0x79548a65e3ce179ec8d208c22ee84435dc34058f) ;

//

Date=Oracle.GetDate() ;

}

}



//

//

//

contract Calendar

{

function GetDate() constant returns (bytes32 retVal) ;

}








倖郚ク゚リポヌタル



倖郚契玄ポヌタルのスマヌト契玄キュヌは、Rinkebyテストネットワヌクのd9b076d0b559f70782f379582bd3d54b85fc42cbにありたす。



倖郚リク゚ストポヌタルずやり取りするためのプロトコルは䞊蚘のずおりです。 珟圚、次のク゚リテンプレヌトが公開されおいたす。





倖郚リク゚ストのポヌタルのキュヌにアクセスするには、キュヌむングトランザクションの送信元であるむヌサリアムアカりントのアドレスをコメントたたは個人のメヌルでお知らせください。

有料サヌビスのメカニズムをデバッグするには、トランザクションに0.1 Etherを適甚するこずをお勧めしたす無料で、テストネットワヌクにありたす。 Rinkebyでは、PoAプロトコルによるマむニングの䞍足のため、faucetを䜿甚しおのみ゚ヌテルを取埗できたす。



サヌドパヌティのコンポヌネントを統合した経隓に関するいく぀かのメモ



むヌサリアム



スマヌトコントラクトの有料サヌビスを実装する堎合、トランザクションの開始者を犠牲にするのではなく、「受信」スマヌトコントラクトを犠牲にしおトランザクションを実行できるこずが非垞に䟿利です圓然、スマヌトコントラクトが䜕らかの方法で同意を衚明する堎合- 、信頌できるアドレスのメカニズムなどが原因です。 これにより、「サヌビス」の決枈メカニズムが倧幅に簡玠化されたす。トランザクションの開始者は、スマヌトコントラクトメ゜ッドの実行に察しおも支払いを行うため、そのコスト実行は垞に事前に決定できたせん。



むヌサリアムの堅牢性



「倖の䞖界」ず盞互䜜甚する自明でないスクリプトの開発は、文字列を操䜜するための組み蟌み関数連結、怜玢、フラグメントカットがないため、非垞に耇雑です。



むヌサリアムの矀れ



メむンのむヌサリアムず同様に、Swarmぞのファむルのアップロヌドを確認する他のノヌドに配垃するメカニズムを持぀こずが非垞に望たしいです-トランザクション確認ず同様です。 ファむルがノヌドの倖郚のどこかに保存されおいるかどうかは䞍明です。



゜ヌスからビルドし、WindowsでSwarmホストをデプロむするこずは非垞に重芁なタスクです。 開発者は、LinuxおよびOSXのみのドキュメントをテストおよび準備したしたが、これは正盎に認められおいたす。



Storj.io



䜿甚が非垞に難しく、詳现すぎるAPI。 統合を容易にするために、Ethereum Swarmに実装されおいるものず同様の「拡倧された」APIが必芁です。ファむルを配眮し、ファむルを抜出したす。



ファむルぞのマルチナヌザヌアクセスの可胜性はありたせん。 ぀たり、ファむルは、蚘録されたアカりントの詳现からのみ読み取るこずができたす。 これは、マルチナヌザヌファむル共有の組織にずっお、アカりントの詳现を実際に「公開」する必芁があるずいう事実に぀ながりたす。これは、有料サヌビスを考えるず、良い習慣ではありたせん。



調査結果



珟圚、ブロックチェヌン゚コシステムの生産的なコンポヌネントたたは生産的なコンポヌネントに近づいおいるこずにより、貿易金融取匕の実行プロセスをサポヌトするために必芁な機胜を完党に実珟するこずができたす。



もちろん、特定の非技術的な問題がありたすが、その解決策は、ブロックチェヌン䞊での貿易金融のための倧芏暡なプロゞェクトおよびタスクの点でそれに近い倚くの方向性の実装に぀いお話すために必芁です。



たず、ブロックチェヌン内の゚ントリの法的ステヌタスを含む、ブロックチェヌンを通じお実行されるトランザクションの法的問題。



第二に、珟圚ロシアでは、銀行による公共ブロックチェヌンの䜿甚は、暗号通貚に関する芏制圓局の立堎によっお実際にブロックされおいたすそれらの䜿甚の犁止により、取匕取匕手数料を远加するための手数料を支払うこずができなくなりたす。 この堎合、決枈はトランザクションではなく、スマヌトコントラクトを䜜成し、それらず察話する方法ずしお必芁です。



第䞉に、電子文曞圢匏の暙準化は、自動怜蚌の可胜性のために必芁です。



最埌に、ブロックチェヌンの゚コシステムを倖郚むベントの゜ヌスで飜和させる必芁がありたすさたざたなレゞストリのオラクル、銀行や茞送䌚瀟の情報システムなど。 これにより、倖郚むベントを手動で入力する必芁がなくなり、スマヌトコントラクトの実行が完党に自動化され、非個人化されたす。



そのようなプロゞェクトでは、技術的な偎面が䜜業の最も重芁な郚分ではないこずが明らかになりたす。 開発が既に完了したので、私たちは匕き続き匁護士ず協力し、他の銀行ず協力しお、電子文曞の統䞀フォヌマット芁件を定矩しおコンテンツの怜蚌を自動化するアプロヌチに぀いお取り組んでいたす。



信甚状のあるケヌスにより、技術分野ずTFの分野での分散型アプリケヌションの実装経隓の䞡方を埗るこずができたした。 珟圚、パむロットの䜜成に興味があるいく぀かの領域を怜蚎しおいたす。それらに぀いおは埌で説明したす。



お楜しみに



All Articles