34. 借用証(例)
• 佐藤は山田に1,000円借りている
• 2027/3/1までに返済する
• 支払遅延した場合は25%の利息
Id From To Amt Expiry Penalty Paid
1 佐藤 山田 1000
円
2027-03-
31
25% 0円
佐藤が知っている事実 = State 山田が知っている事実 = State
Id From To Amt Expiry Penalty Paid
1 佐藤 山田 1000
円
2027-03-
31
25% 0円
CordaのState=共有する事実/価値
ハッシュ&署名
取引
OutputInput
ステートは共有された事実を表しています。
ステートはデータのみで構成されていて、
複数のプロパティ、つまり属性、特性をもった
オブジェクトだと考えて下さい。
ここに借入書、つまり金銭の貸借が存在するという共有の事実があります。
AliceはBobから10ポンド借りいれた、
つまりAliceはBobに将来10ポンドを支払う義務があるという事実が存在する
ということになります。
==============================================
英文
Alice Owes Bob £10
Payable by 01/03/17
Late settlement incurs 25% penalty
Cordaでは、ステートはデジタル通貨だけでなく
あらゆるものを表現することが出来ます。
ステートは基本的には、プロパティの集合であるためです。
ここに示してあるのはステートで表現できるものの一例です。
典型的なものとしては、金融商品や金利スワップがあります。
契約などの複数者間の合意を表現するために使用します。
もちろん、どのようなものでも表現でき、KYCデータなどにも使われます。
=============================================
ステートは静的な型であることが重要です。
これは一度ある特定の型のステートが作られると、
それは他の型に変えることが出来ないということです。
メモ:
ステートの型を変えることは出来ない、というかステート自体消せないし
変えたいなら前のステートを消費して新しい型を持つステートを作ればよいのでは?
CDO(Collateralized Debt Obligation)は、日本語では「債務担保証券」
CLOとは、Collateralized Loan Obligationの略で、ローン担保証券のことです。
英文
States can contain anything
In Corda, states don't just represent digital cash
The state model can be used to represent literally anything
States are statically typed – an IOU state is always an IOU state
Stocks, Bonds, Syndicated Loans, CDOs, CLOs, Reference Data, Invoices, Letter of Credit, Purchase Orders, Account Receivables, Interest Rate Swaps, Accounting Entries, Contract For Difference, Commercial Bank Credit, Central Bank Money, Title Deeds, Trade Representations, Collateral, KYC Data, Credit Default Swaps, Bids/Offers, Personal Information, Legal Contracts
トランザクションはまた、ファンジブルな資産を表現するステートを分割または統合することが出来ます
CordaではBitcoinのように、ファンジブル(代賛可能)なステートを分割したり
マージしたりすることが出来ます。
ここの例でキャッシュである円をインプットとし、複数のアウトプットステートに
分割する例を示しています。
====================================================
メモ
下のCaptionとダイアグラムは明らかに違うので注意。
図を白板に書いて、説明する。
英文
Transactions can split and merge states
Transactions can also split and merge states representing fungible assets.
Caption
Bitcoinのように、ファンジブル(代賛可能)なステートを分割したり
マージしたりすることが出来ます。
GBPは明らかにファンジブルであり、キャッシュです。
インプットのキャッシュのステートは、複数のアウトプットステートに
分割することが出来ます。
ここで、左のこのトランザクションは特徴的で、
おそらくレジャー上の1つのピアが、8ポンドの費用を支払うために10ポンドを使用し、
残った2ポンドを自分自身にお釣りとして返します。
そしてもちろん、複数のインプットを1つのアウトプットにマージすることが
出来ます。
Cordaは、ステートが時間の経過とともに分離したりマージしたりするような有向非循環グラフを
生成していて、
また前のスライドで見たように、
入力のステートは常に以前のアウトプットの参照であると考えることが出来ます。
トランザクションとは、台帳を更新するアトミック(分割不可能)な変更のことです
トランザクションは複数のインプットステートを参照し、 複数のアウトプットステートを生成します
新たに生成されたアウトプットステートは、インプットステートを過去のものつまりHISTORICとしてマークし、置き換えます。
トランザクションが必要な理由は、
例えば2者間におけるキャッシュと債券の交換取引等のDVP取引を実現するためです。
==========================================
(DVPは、Delivery VS Paymentの略です。)
変更点:
言い回し
0または1つ以上~の方が良い?
英語
Transactions
We introduce transactions as atomic units of change to update the ledger
Transactions reference zero or more input states and create zero or more output states
The newly created output states replace the input states which are marked as historic
Caption
何故トランザクションが必要なのでしょうか?
主な理由は、世界は複雑であり、
複数のステートのトランザクションを一度に発生させる必要があるためです。
良い例としては、
2者間におけるキャッシュと資産や債券のアトミックな
交換取引等のDVPトランザクションがあるでしょう。
この交換は同時に発生させる必要があります。
何故なら、一方の当事者がキャッシュと債券を持つまたはもう
一方の当事者がキャッシュと債券を持つといった状況は問題があるためです。
私たちは交換がアトミックに、同時に起こることを期待します。
私たちは交換が起きるか起きないかのいずれか一方を期待するので、
それを強制する仕組みとしてトランザクションを導入します。
トランザクションはRDBのそれと極めて類似しています。
ただし、
RDBでは途中で失敗した場合にロールバックするのに対し、
Cordaではシンプルにコミットされるか否かとなります。
そしてスライドの後の方でそれが何を意味するのかご説明致します。
しかし今は、トランザクションが何で構成されているか見てみましょう。
申し上げたように、トランザクションはレジャーを更新するための
変更の最小単位です。
これはコンテナまたは、
ゼロまたはそれ以上のインプットステートのリファレンスとゼロ
またはそれ以上のアウトプットステートを生成する構造体、
として考えることが出来ます。
レジャーが全く更新されないような、
インプットとアウトプットが共にゼロの
トランザクションは必要ないでしょう。
一般的には、インプットがゼロでアウトプットが1、
もしくはインプットが1でアウトプットがゼロのトランザクションとなるでしょう。
そして、アウトプットのステートが作られるとき、
トランザクションで何が起きるかですが、
トランザクションはインプットステートの参照を消費し、
参照しているインプットステートを過去のものとして
マークします。
しかし実際にはサポートされる、
または必要とされるトランザクションのタイプとして3つのものが存在します。
発行、更新、そして終了です。
発行では、レジャー上でステートを発行します。
更新では、ステートの中のプロパティを変更します。
つまり古いバージョンを消費し、新しいバージョンを生成します。
そして終了では、古いバージョンを消費しますが、
新しいバージョンは生成しません。何故ならそのステートは必要とされないか、
または満期が到来したかは期限切れの金融商品であるためです。
では発行についてお話しましょう。
発行ではレジャー上で新しいステートを生成します。
もちろんレジャー上で新しいステートを生成するため、
新しいステートに関してインプットステートの
参照は含みませんが、
1つ以上のアウトプットステートを生成します。
典型的な例は、
スワップまたはレジャー上でのキャッシュの発行のような
二者間取引のような合意です。
したがって、このSはキャッシュまたは二者間取引を表すことが出来ます。
そして、線で囲まれたこのグレーのボックスは、
入力がなく出力があることを表しています。
この右側のボックスには、レジャー上に作成された
ステートまたはレジャー上に存在するステートを
表すためのマーカーが付いています。
これでステートを更新することが出来ます。
更新はステートのプロパティを変更するために使用されます。
またここでの典型的な例はスライドのような現金の移動です。
Cordaではどのようにキャッシュを移動させるのでしょうか?
ここで私たちが行うのは、現在あるキャッシュの日付を
取得し所有者を変更することです。
現在の所有者の公開鍵を提案された所有者の公開鍵に変更し、
キャッシュのステートオブジェクトを更新します。
つまり更新は、1つ以上のインプットステートの参照を取り、
1つ以上のアウトプットステートを生成します。
ここでそれがどのように機能するか見ることが出来ます。
ここで、このステートはステートの参照を持っていません。
このステートは、前のトランザクションのアウトプットステートを
参照しています。
それではここでステートの参照について少しお話しして行きましょう。
ステートの参照は、
トランザクションのハッシュであるトランザクションIDとインデックスで
構成されています。
つまりトランザクションIDは、参照されているステートを作成した
トランザクションのハッシュを参照します。
インデックスはアウトプットのリスト内のステートの位置を
参照しています。
つまりアウトプットリストはゼロでインデックス付けされています。
すなわち、この前のトランザクションでは、
ここで前のトランザクションのハッシュを持つことになり、
1つのステートしかないためインデックスはゼロとなります。
したがって、トランザクションID、インデックスは、レジャー上にある
任意のステートを参照することが出来る座標であると考えることが出来ます。
捉え方として、あなたが参照しているステートを含むトランザクションが
どの当事者にあるのかを知る必要があります。
では実際どう機能するのでしょうか?
>ここで2つの更新を持つトランザクションがあります。
1つはステートAを、1つはステートBを更新します。
そして、前のトランザクションで作成された前のステートBを
参照するステートBへのちょっとした更新があります。
B1のステートの参照は前のトランザクションからのハッシュであり、
それはアウトプットリストの2番目のポイントで発生するため
番号は1です。
Cordaにおいてステートの参照は非常に重要です。
何故なら、トランザクションを発生する際に、
ステートそのものを入れるのではなく、
前のステートへの参照に入れるためです。
そして、実際の前のステートを見つけるために参照を使用します。
つまり他の当事者に対して、
「このトランザクションハッシュとインデックスナンバーの
ステートを教えてくれますか?」と言う必要があります。
検証コンセンサスの中でこれについてもう少しお話して行きましょう。
最後に終了があります。
終了はステートのチェーンを終わらせることにより、
レジャーからステートをとり除きます。
これはとてもシンプルで、
前のトランザクションで作られたステートを消費しますが、
新しいステートは生成しません。
金融商品、合意または契約がレジャー上でもはや必要とされなくなると、
これにより、実質的にレジャーのステートを終了させます。
しかし重要であると申し上げたように、
過去のバージョンのステートにはまだアクセス出来ます。
これは合意、契約、あるいは金融商品のライフサイクルを監査する証跡として役立ちます。
発行、更新そして終了について個別に触れましたが、
トランザクションは複数の型のステートを含むことが出来ます
この例ですと一つのトランザクションにキャッシュとボンド2種類のステートが含まれています。
===========================================-
(変更点)
(2018/5/31)
「BOND」ステートを「CASH」ステートにあわせ、0→1に変更
メモ:
?
(タイトルを読む)
トランザクションは複雑な処理もサポートすることができます。
ここでは1つのトランザクションでも、
キャッシュと債券のDvPを表すことができて、
かつ、クーポンの支払いも表すことができることを説明しています。
英文
Transactions can be arbitrarily complex
Transactions can contain states of many types.
Or this transaction could represent a delivery versus payment of some cash for a bond
Cash is paid from the buyer to the seller
The bond is moved from the seller to the buyer
This transaction could represent a coupon payment on a bond:
Cash is paid from the bond issuer to the bond owner.
The bond shared fact is updated to reflect the coupon payment
Caption
同様に、トランザクションには多くのステートの型が含まれることに注意が
必要です。
このトランザクションはキャッシュと債券を含んでいます。
しかしこれは何を表しているのでしょうか?
追加情報がない場合、一見して、
Cordaのトランザクションが何をしようとしているかを確かめることは、実際にはかなり難しいです。
これは、実際に債券のクーポンの支払いであり、
債券のステートが更新され、
例えばこの特定の四半期のクーポンが支払われたことをマークすることが出来、
また所有者が債券の発行者から債券の保有者に変更されるようにキャッシュの
ステートが更新されます。
債券の保有者にはクーポンが支払われたことは明らかですが、
これはまた債券に対してキャッシュが交換された
DVPトランザクションを表している可能性があります。
つまりこれは、キャッシュと債券が交換されるアトミックなDVPトランザクション
である可能性があります。
したがって、あなたはトランザクションの中で何が起きているのか
説明するためのデータをもう少し必要としています。
次のスライドで説明すると思いますが。
私たちが何を使うことが出来るのかについて議論
していく中でコマンドに触れます。
メモ
What is 'Delivery Versus Payment - DVP'
A securities industry settlement procedure in which the buyer's payment for securities is due at the time of delivery. Delivery versus payment (DVP) is a settlement system that stipulates that cash payment must be made prior to or simultaneously with the delivery of the security. Delivery versus payment is from the buyer's perspective; from the seller's perspective, this system is called receive versus payment (RVP). DVP/RVP requirements arose as a result of institutions being prohibited from paying money for securities before the securities were held in negotiable form.
Read more: Delivery Versus Payment (DVP) http://www.investopedia.com/terms/d/dvp.asp#ixzz4vk5lnlrb
Follow us: Investopedia on Facebook
次にアトミックという考えかたを確認したいと思います。
トランザクションは分割不可能な更新の集合です。そのため、全て適用されるか全て適用されないかの二択になります。
一つのトランザクションにはいっている検証がすべて問題なければ更新は成功ですが、1つでも検証に問題があれば、すべての
更新は破棄されます。
変更点:
irreducible、が減らせないは何かおかしい
分割不可能だけでよいのでは
(スライドを読む)
これは先ほども説明したように、トランザクションは台帳を更新する
アトミックな変更のことです。
これはDvPを実装する上で必要不可欠な機能になります。
英文
Transactions are atomic
A Transaction in Corda is an indivisible and irreducible set of changes such that either all occur, or nothing occurs.
Caption
このスライドの最初の方で述べたように、トランザクションはアトミックです。
つまりトランザクションは不可分であり、
かつそれ以上減らすことの出来ない変更の集合です。
それが意味するのは、トランザクションに含まれる様々なステートの変化に
ついて、全て発生させる、
または全て成功する、そうではないならばトランザクションは発生したと
みなされません。
ここで、もしCに対するステートの変化が正しく、
Aに対するものが正しくないか(何らかの理由で)無効であって、
Bが有効である場合、トランザクション全体として無効であると
みなします。
しかし、もし全てが正しい場合にはトランザクションは有効であり、
この時点で全てのステートは消費済みまたは過去のものとしてマークされます。
ノータリーノードとはコルダにおいて二重支払いを防止するために一般のユーザのノードとは別に設置されるノードである。ノータリーノードでは、過去に一度使用されたインプットデータのハッシュ値を一覧で保存しており、取引の当事者は都度インプットデータをノータリーに問い合わせることによって過去に使用されていないかを確認できるわけだ。
ノードはフローと呼ばれる、構造化されたメッセージの列を使って通信します。
フロー中のそれぞれのノードは自身のフローロジックを実行します。
フローのステップは双方向です。
複数のノードが1つのフローに関わることができます…
…そして、フローの完了は通知され、その結果、台帳が更新されます。
--------------------------------------------------------------
ここにある図はイメージで、実際にはアリスからボブにメッセージが渡された後、
ノータリーには行かず、一度、アリスに帰ってきて、そこからノータリーに
メッセジは渡されます。
原文
What is a flow?
Nodes communicate using structured sequences of messages called flows
Flow steps are bilateral
But any number of nodes can be involved in a single flow…
…and be informed of the flow’s completion and resulting ledger updates
フロー は、共有された事実に合意するために、複雑な複数ステップや複数ピアのやり取りを指示、調整するプログラムということ
になります。
ここでコルダのキーコンセプトの説明はいったん終了となります。
英文
Flows are light-weight processes used to coordinate the complex multi-step, multi-peer interactions required for peers to reach consensus about shared facts
Revise this definition when I can think of a better one
フロー は、共有された事実に合意するために、複雑な複数ステップや複数ピアのやり取りを指示、調整するプログラムということ
になります。
ここでコルダのキーコンセプトの説明はいったん終了となります。
英文
Flows are light-weight processes used to coordinate the complex multi-step, multi-peer interactions required for peers to reach consensus about shared facts
Revise this definition when I can think of a better one