DAML-スマートコントラクトベースの分散アプリケーションを構築するためのオープンソースエコシステム

DAMLは、フルスタックのスマートコントラクトベースの分散アプリケーションを構築するためのオープンソースエコシステムです。そのコアスマートコントラクト言語は、構成可能な分散ビジネスワークフローの記述に特化した専用の関数型言語です。 DAMLのユニークなセールスポイントはシンプルです。分散型台帳、ブロックチェーン、データベースなど、基盤となるインフラストラクチャの本質を気にすることなく、アプリケーションロジックに完全に焦点を合わせます。 DAMLに手を出す前に、基盤となるテクノロジーとスマートコントラクトについて簡単に理解しましょう。.

元帳、ブロックチェーン、スマートコントラクト

元帳は、タイムスタンプが付けられた一連の不変のデータレコードです。ブロックチェーンは最もよく知られている種類です 配布 元帳, コンピュータのコンソーシアムによって管理され、単一のエンティティによって所有されていないもの。ブロックチェーンでは、元帳エントリは一連のブロックにパッケージ化され、エントリの各ブロックは暗号化の原則によって保護され、前のブロックに関連付けられます。 3つのプロパティにより、ブロックチェーンは本当に特別なものになります。

  • 分散: ブロックチェーンは、ピアツーピアネットワークによってホストされます。このネットワークのすべてのノードは、システム内のブロックチェーンのコピーをダウンロードして維持します。これにより、ブロックチェーン内に保存されているすべてのデータがすべての人によって共有され、システム内の単一の中央エンティティによって蓄積されないことが保証されます.
  • 透明性: ネットワーク内のすべてのノードがブロックチェーンのバージョンを保存しているため、ノード内に保存されているデータをすべて見ることができます。そのため、ブロックチェーン内のすべてのデータは透過的です.
  • 不変性:ここで覚えておくべきもう1つのエキサイティングなことは、ブロック内に何かが入力されると、それを改ざんすることはできないということです。ブロックチェーンのこの特性は「不変性」と呼ばれます。

ご存知かもしれませんが、ビットコインの登場により、ブロックチェーンテクノロジーが注目を集めました。これは非常に革新的な発明であったため、人々は、信頼できない価値の移転を超えて、隣接するより広範なテクノロジーのセットがあるかどうか疑問に思い始めました。イーサリアムは最終的に暗号市場に突入し、分散アプリケーション全体、またはブロックチェーンに裏打ちされたdAppを作成するのに十分な柔軟性のある「スマートコントラクト」を世界に紹介しました. 

スマートコントラクト–ブロックチェーンを大衆にもたらす

契約とは何か、そしてそれが伝統的な意味でどのように機能するかを考えてください。契約は、2つの当事者間の法的拘束力のある文書であり、法的強制力もあります。スマートコントラクトは、2つのゲームを変える変更を除いて、同様に機能します。コントラクトによって定義されたルールは、機械可読で実行可能であり、コントラクトのいずれの当事者もそれを単独でオーバーライドするのに十分な制御を持たずに、分散コンピューターシステムを使用して適用されます.

適切な定義を与えるために–スマートコントラクトは、契約の交渉または履行を促進、検証、または実施することを目的としたデジタル契約です。これにより、サードパーティを経由せずに、複数のパーティが互いに直接対話することでこれを行うことができます。.

「スマートコントラクト」という用語は、90年代に暗号研究者のニックサボが彼の記事「スマートコントラクト:デジタル市場のビルディングブロック.」それらがどのように機能するかの背後にある哲学を理解するために、Szaboの自動販売機の例を見てみましょう.

通常、自動販売機を操作する方法は次のとおりです。

  • あなたが欲しいアイテムを選ぶ.
  • あなたは機械の中にいくらかの現金を入れました.
  • 機械はあなたにアイテムを与えます.

かなり簡単ですよね?ただし、この対話全体で注意する必要があることが2つあります。

  • 前のステップが実行されるまで、各ステップを実行することはできません。例えば。欲しいものを選ぶまでお金を入れることはできません。また、あなたがお金を入れるまで、機械はあなたにアイテムを与えることができません.
  • この相互作用全体の間、あなたとマシンは互いに直接相互作用しています。二人の間に店主のような第三者はいない.

これらはスマートコントラクトの背後にあるコア原則です:

  • スマートコントラクトにバインドされた2つのパーティは、互いに直接対話できます.
  • スマートコントラクトの各ステップは、前のステップの実行後にのみ実行できます.

この単純な革新を組み込むことにより、イーサリアムはユーザーが直接対話できるプロトコルを作成することができました dApps (分散アプリケーション)サードパーティを経由せずに。イーサリアムは「Solidity」と呼ばれる言語を使用してスマートコントラクトをコーディングします。ただし、Ethereumは、EOSやTRONなどの他のほとんどの人気のあるスマートコントラクトプラットフォームと同様に、パブリックブロックチェーンです。パブリックブロックチェーンにはオープンネットワークがあり、誰でも予約なしで参加できます. 

企業がブロックチェーンを使用する場合、特に相互作用を完全にプライベートにすることを望む、または要求する場合、パブリックブロックチェーンは必ずしもユースケースに適合するとは限りません。企業には、「許可されたブロックチェーン」と呼ばれる特別な種類のブロックチェーンが必要です。以下でそれらについての詳細. 

エンタープライズブロックチェーンに必要なもの?

パブリックブロックチェーンとは対照的に、許可された/プライベートのブロックチェーンはすべての人に開かれているわけではありません。ネットワークに参加するには、ネットワークから参加するための許可を取得する必要があります。これらのエンタープライズブロックチェーンが満たす必要のある機能がいくつかあります。

  • ハイパフォーマンス: まず、企業は大量のトランザクションを処理できるブロックチェーンを必要とします。ほとんどのパブリックブロックチェーンは、1秒あたり100トランザクションを一貫して実行することさえできません.
  • 高レベルの復元力: エンタープライズブロックチェーンは、ダウンタイムと潜在的な障害シナリオから復帰できる必要があります。高可用性を確保するには、大規模な停止につながる可能性のある問題を回避できる必要があります。そのレベルの回復力を得るには、システムは障害が必ず発生することを想定し、これらの状況でシステムを実行し続ける準備をする必要があります。.
  • プライバシー機能: パブリックブロックチェーンは、定義上、プライベートではありません。機関は、多くの機密データや規制に対処する必要があります。また、競争上の優位性や知的財産上の理由から、特定のデータを分類しておく必要があります(そのため、そもそも閉鎖/許可された環境が必要です).

企業に優しい環境に加えて、特別なスマートコントラクトも必要になります。イーサリアムのパブリックスマートコントラクトは堅実に実行されますが、エンタープライズスマートコントラクト言語に必要な特定の機能があります。次に、これらのプロパティについて説明します.

エンタープライズスマートコントラクト言語のプロパティ

通常のスマートコントラクト言語の主な問題は、より伝統的なシステムを実行するために構築された言語によって設計または触発されていることです。それらは低レベルであり、実行するインフラストラクチャと緊密に結合されている傾向があります。これにより、プログラミングが困難になり、遅くなります。開発者は一貫して悪用可能なバグとの契約を作成しており、それが暗号エコシステムに重大な損害を与えています。 2016年、イーサリアムコミュニティは、これらの最適にコーディングされていないスマートコントラクトで何ができるかを直接体験しました。 DAOは、イーサリアムでこれまでにコーディングされた中で最も重要なスマートコントラクトであると考えられていました。しかし、単純なバグにより、ハッカーは契約を悪用し、1億5000万ドル相当のEtherを吸い上げることができました。このハッキングは非常に破壊的だったため、Ethereumプロトコルは最終的にEthereumとEthereumClassicに分割されました.

これが基本的に私たちに伝えていることは、Solidityのような言語でコーディングする場合、コーダーは次のことを考慮する必要があるということです。

  • 再入可能、オーバーフローとアンダーフロー、ショートアドレス攻撃などの攻撃に注意してください.
  • 契約が通過するすべての部分的な状態を考慮する必要があります. 
  • 同じ操作は、異なる言語で異なることを意味する場合があります。例えば。 SolidityはJavaScriptを多用していますが、同じ操作は言語ごとに異なる動作をする可能性があります.

短編小説, 言語をランダムに選んで契約書を書くことはできません. 選択したすべての潜在的な影響を理解する必要があります。 Digital Assetは、エンタープライズスマートコントラクト言語に必要な主なプロパティを絞り込むために、スマートコントラクトの実行を研究するために何年も費やしました。

  • 契約の締結は任意である必要があります。すべての当事者が自発的に契約を締結すると、彼らは能力を最大限に発揮するために必要なすべての行動を実行する義務を負います。.
  • 契約の影響を受ける当事者のみが、彼らに影響を与える結果を表示できる必要があります(そしてそれらのみ).
  • 当事者は、契約が将来どのように展開するかを合理的に予測できる必要があります。彼らは、契約が取る可能性のあるすべての状態を予測できるはずです. 
  • スマートコントラクトの開発者は、ハッシュ、暗号化、コンセンサスプロトコルなどの低レベルの詳細ではなく、ビジネスロジックに完全に集中できる言語を使用できる必要があります。.

DAMLとは?

DAMLは、分散型台帳用に特別に構築されたスマートコントラクト言語であり、リアルタイムビジネスロジックの安全で明確な高レベルの仕様を可能にします。覚えておく必要のあるDAMLの重要事項は次のとおりです。

  • DAMLは書き込みと読み取りが簡単なので、定義されているビジネスを理解している人は、コードが意図に沿っていることを確認できます。.
  • DAMLは構築とデプロイが高速で、ゼロからエンドツーエンドの本番アプリケーションに非常に迅速に移行できます.
  • これは契約の言語であり、契約と当事者はその言語のネイティブ構造です。.
  • 開発者は、契約がどのように形成され、どの当事者が直接的および間接的に契約に関与しているかを正確に説明できるようになります。.
  • 開発者は低レベルの構成について心配する必要がなく、ビジネスロジックの作成に完全に集中できます。.
  • DAMLは、高レベルのプライバシーと抽象化を提供します。 DAMLシステムは、各契約の詳細を表示できる当事者を自動的に追跡します。この情報は、特定の当事者が表示を許可されているデータのみが実際に送信されるように、基になる元帳にも渡されます。.
  • DAMLプログラムが実行されると、適切に構造化された、人間が理解できる監査証跡が作成されます。これは、各アクションが実行された理由と、そのスマートコントラクトにおける各当事者の役割の2つを説明するのに役立ちます。.
  • DAMLでは、アップグレードはコードで定義され、ダウンタイムなしで無停止で実行できます。複雑な作業を行うことなく、既存のソリューションに新しい役割とワークフローを簡単に追加できます.

DAML –関数型言語

命令型言語とは対照的に、DAMLは関数型言語です。次の段落では、これが何を意味するのかを見ていきます。.

命令型プログラミング言語

C ++、Java、Solidityなどの従来のプログラミング言語は命令型プログラミング言語です。命令型プログラミング言語では、開発者は、コンピューターが目標を達成するために必要なすべての命令を作成する必要があります。それが意味するC ++の例を見てみましょう. 

1から100までの数字を印刷したいとします。 

int i = 0;

次:

i ++;

printf(“%i”、i);

もし私が < 100)次へ移動;

int a = 5;

int b = 3;

int c;

c = a + b;

ご覧のとおり、追加プロセスは複数の命令を引き継ぎ、各命令はすべて個別に実行されるため、プログラムの状態を絶えず変化させます。.

追加プロセスには4つの指示があり、次のとおりです。

  • 整数「a」を宣言し、それに値5を割り当てます.
  • 整数「b」を宣言し、それに値3を割り当てます.
  • 整数「c」を宣言します。
  • とbの値を追加し、それらをcに格納します.

関数型プログラミング言語

このプログラミングスタイルでは、命令ではなく関数が中心になります。結果の計算方法やアルゴリズムの実行方法に関する指示を書くのではなく、関数の入力を出力にマッピングすることにより、通常の数学関数のように目的の動作を記述します。,  

関数型プログラミングは、関数の構成方法がコントラクトの相互作用の方法と似ているため、スマートコントラクトに特に適しています。 「アリスがボブに100ドルを与えると、ボブはアリスにチケットを与える」という契約は、100ドルをチケットにマップする関数のようなものです。 「アリスがボブにチケットを提示した場合、ボブはアリスにドアを通過させます」という2番目の契約がある場合、これはチケットをアクセス許可にマッピングする2番目の関数です。機能と同じように、これらのコントラクトは自然に構成されます。「アリスがボブに100ドルを与えると、ボブはアリスをドアに入れます」.

状態に依存しないこの純粋な入出力動作により、関数アプローチを数学的に推論しやすくなります。入力のみに依存して出力を計算する関数を使用することで、開発者は個々の関数の正確さに集中でき、型システムによって可能になります。これらは安全かつ予測可能に一緒に構成されます。これが、関数型プログラムがスマートコントラクト作成へのより安全なアプローチであると考えられている理由です。 DAMLは関数型言語であり、開発者はビジネス推論を強く型付けされた数学関数にカプセル化できます。この文脈での「強く型付けされた」とは、DAMLのツールとランタイムによってすべての関数の動作を自動的にチェックできることを意味します。これは、開発者がプロ​​グラムの各コンポーネントが元帳の状態にどのように影響するかを正確に推論するのに役立ちます.

DAMLコード

DAMLを試すには、1)インストールすることができます。 VisualStudioコード そしてその DAML SDK または2)を使用します webIDE (学習目的のためにもっと)

テンプレートトークン

  と

    オーナー:パーティー

  どこ

    署名者の所有者

上に表示されているのは、単純なDAMLテンプレートです。テンプレートは、作成できる契約のタイプと、作成する権利を持つ人を定義します。コントラクトはテンプレートのインスタンスです。上記の例では、テンプレートの名前は「トークン」です。契約に含まれるデータは「引数」と呼ばれます。それでは、この契約内で宣言された議論を見てみましょう.

  • 「with」ブロックは、フィールド名とそのタイプをリストすることにより、テンプレート内の引数のデータ型を定義します。上記のテンプレートには、「Party」タイプの「owner」という名前の単一のフィールドがあります.
  • 「where」ブロックは、フィールドのスコープを宣言します。テンプレートでは、「where」ブロックがフィールド「owner」を契約の署名者として宣言しています。署名者として宣言されると、フィールドは契約を作成またはアーカイブする権限を取得します. 

DAMLの一般的な契約コードには、次の4つのコンポーネントがあります。

  • データ・モデル: DAMLを使用して、アプリケーションの複雑なデータスキーマを簡単にモデル化します(契約に必要なデータの種類)
  • きめ細かい権限: コントラクト内の権限を指定します(コントラクトを作成およびアーカイブできるユーザー、特定の実行ステップを表示できるユーザーなど)
  • ビジネスの論理: 契約内のアクションの説明(契約は実際に何を行い、それを実行する手順は何ですか)
  • シナリオベースのテスト: 指定したビジネスロジックとさまざまなワークフローをテストします.

4つのコンポーネントとテンプレートの作成がわかったので、本格的なDAMLコードを見てみましょう。. 

テンプレート現金

  と

    発行者:パーティー

    オーナー:パーティー

    金額:10進数

  どこ

    署名発行者

    コントローラの所有者はできます

      送金:ContractId Cash

        と

          newOwner:パーティー

        owner = newOwnerでこれを作成してください

テンプレートTicketAgreement

  と

    主催者:パーティー

    オーナー:パーティー

  どこ

    署名者の主催者、所有者

テンプレートTicketOffer

  と

    主催者:パーティー

    買い手:パーティー

    価格:10進数

  どこ

    署名者主催者

    オブザーバーバイヤー

    コントローラーの購入者は

      同意する:ContractId TicketAgreement

        と

          cashId:ContractId Cash

        行う

          現金 <- CashIdをフェッチ

          アサート(cash.amount ==価格)

          でcashId転送を実行します

            newOwner =オーガナイザー

          とTicketAgreementを作成する

            主催者;所有者=購入者

validateTicketPurchase =シナリオdo

  発行者 <- getParty「発行者」

  主催者 <- getParty「オーガナイザー」

  買い手 <- getParty「購入者」

  現金 <- 発行者を提出する

    で現金を作成する

      発行者;所有者=購入者;金額= 20.0

  提供 <- 主催者を提出する

    でTicketOfferを作成する

      主催者;買い手;価格= 20.0

  バイヤーを提出する

    エクササイズオファー

      cashId =現金

了解しました。ここに一連のテンプレートがあり、これらが連携して、ユーザーが主催者からチケットを購入する契約を作成しています。したがって、カラーコードを見ると、上記のコードには4つの特定のブロックがあります。

データモデル–赤 

前述のように、テンプレートには、その宣言と実行に必要なデータフィールドがあります。 TicketOfferテンプレートを見てみましょう。

テンプレートTicketOffer

  と

    主催者:パーティー

    買い手:パーティー

    価格:10進数

このテンプレートは、次の3つのフィールドを宣言しています。

  • タイプ「パーティー」の「主催者」および「購入者」。名前が示すように、これら2つはこの契約の当事者です.
  • 次に、10進数タイプの「価格」があります。.

きめ細かい権限–緑

  どこ

    署名者主催者

    オブザーバーバイヤー

    コントローラーの購入者は

      同意する:ContractId TicketAgreement

テンプレート内のフィールドを宣言した後、このセクションでは、パーティの引数に付与されるアクセス許可を宣言します。したがって、このテンプレートでは、主催者が唯一の署名者であり、契約を開始またはアーカイブする権限があります.

購入者はオブザーバーとコントローラーの両方です。オブザーバーは、契約が通過しているすべての状態を見ることができる人です。また、テンプレートで宣言されているように、バイヤーはチケット契約を受け入れることができます。これにより、チケットがアーカイブされ、代わりに新しい「TicketAgreement」契約が作成されます。.

ビジネスロジック–ピンク

    行う

          現金 <- CashIdをフェッチ

          アサート(cash.amount ==価格)

          でcashId転送を実行します

            newOwner =オーガナイザー

          とTicketAgreementを作成する

            主催者;所有者=購入者

そこで、フィールドを宣言し、契約内での可視性を割り当てました。次に、このテンプレートのビジネスロジックとワークフローを宣言します。契約では、最初に、購入者から受け取った現金がチケットの価格と等しいかどうかを確認します。そうである場合、チケットの所有権は購入者に渡され、お金は主催者に渡されます.

シナリオベースのテスト–青

validateTicketPurchase =シナリオdo

  発行者 <- getParty「発行者」

  主催者 <- getParty「オーガナイザー」

  買い手 <- getParty「購入者」

  現金 <- 発行者を提出する

    で現金を作成する

      発行者;所有者=購入者;金額= 20.0

  提供 <- 主催者を提出する

    でTicketOfferを作成する

      主催者;買い手;価格= 20.0

  バイヤーを提出する

    エクササイズオファー

      cashId =現金

最後に、このセクションのビジネスロジックとワークフローをテストして、コードが機能しているかどうかをリアルタイムで確認できます。このリアルタイムは、開発者にとって特に役立ちます。複数の関係者を使用して元帳と対話し、トランザクションの効果を即座に確認できます。上記の例のシナリオ結果は次のようになります

DAML-スマートコントラクトベースの分散アプリケーションを構築するためのオープンソースエコシステム

DAMLの学習に興味がある場合は、 ドキュメンテーション.

実際のユースケース–ASXのCHESSの置き換え

DAMLは、実際のユースケースをすでに見つけています。オーストラリア証券取引所(ASX)は、世界をリードする金融市場取引所の1つです。これは、価値で世界の証券取引所トップ10のひとつであり、アジアで最大の金利デリバティブ市場です。毎日開かれる最初の主要な金融市場であるため、一貫して世界の上位5つの取引所にランクされています。.

今日、CHESSは、オーストラリア市場の秩序ある機能に不可欠な清算、決済、資産登録、およびその他のいくつかの取引後サービスのプロセスを実行するコアシステムです。 CHESSは引き続き安定しており、過去5年間のCHESSの月間平均サービス可用性が99.99%であることからわかるように、これらのサービスを効果的に提供しています。 CHESSがこのサービスレベルでサービスを提供し続けないことを示すものは何もありませんが、ASXは、CHESSを分散型台帳テクノロジー(DLT)に置き換えることを決定しました。これにより、市場の幅広い分野に幅広いメリットがもたらされます。 ASXはその説明 ウェブサイト DAMLを選択した多くの理由:

  • 発行者と最終投資家は、保有者の登録簿(発行者の場合)、金融資産(最終投資家)、および関連情報へのタイムリーで安全かつ簡素化されたアクセスを通じて、市場活動の透明性を高めます。.
  • 新しいレベルの機能と柔軟なテクノロジーにより、ASXは変化する市場により効率的に対応できるようになります.
  • アップストリームおよびダウンストリームのビジネスシステムとの容易な統合、機能とワークフローの合理化.
  • 費用のかかる調整プロセスの必要性を排除し、代わりに信頼できる唯一の情報源を活用します.
  • ソリューションの可用性を完全に保証します.
  • 差別なく使用することを許可された人に100%の可用性を確保する.
  • 追跡可能で安全なシステムを提供する.

結論

DigitalAssetの共同創設者兼CTOであるShaulKfirは、今日のブロックチェーンと分散型台帳テクノロジーの出現は、1990年代のWebの出現と多くの類似点があると指摘しました。インターネットは非常に新しいプラットフォームであったため、従来のシステムを使用してその潜在能力を最大限に発揮することはできませんでした。それが本当に普及したのは、RESTのような新しいアーキテクチャプログラミングスタイルがWebのプロパティに一致するように開発されたときだけでした。これはまさにDAMLがエンタープライズブロックチェーンプラットフォームに対してできることです.

現在のところ、ブロックチェーンスペースにはいくつかのスマートコントラクト言語があります。これにより、相互運用性、ひいてはスケーラビリティを阻害するさまざまな種類のスマートコントラクトが発生します。 DAMLには、教育機関が選択したプラットフォームを構築する際にDAMLを主要言語として採用するために必要な特性があります。 Digital Assetは、DAMLが複数の分散型台帳、およびVMWare Blockchain、Hyperledger Sawtooth and Fabric、Corda、AmazonのQLDBおよびAuroraデータベースを含む従来のデータベースプラットフォームと統合されることを発表しました。. 

DAMLとスマートコントラクトの作成を開始します ここからDAMLSDKをダウンロードします

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me