Plutus を使用したブロックチェーン アプリケーションの構築に関する記事が Coinpedia Fintech News に最初に掲載されました。

導入

ブロックチェーンは、分散型で透明性の高いソリューションを通じて、さまざまな業界に貢献しています。開発分野の進歩は、開発者とコミュニティに変革をもたらしました。ブロックチェーンの利点は、分散化だけにとどまりません。取引にかかる時間を節約し、第三者による検証を必要とせず、詐欺やサイバー攻撃のリスクを軽減します。開発者として、ブロックチェーン アプリケーションの構築方法を理解することは、特に Plutus のような強力なツールを使用する場合に重要です。Plutus は、Cardano ブロックチェーン上のスマート コントラクト プラットフォームです。開発者が安全で効率的な分散型アプリケーション (DApps) を作成するための堅牢なフレームワークを提供します。

カルダノとは何ですか?

カルダノ 2017 年にチャールズ・ホスキンソン (イーサリアムの共同創設者) によって立ち上げられたブロックチェーン プラットフォーム。カルダノは第 3 世代のプラットフォームであり、第 2 世代のプラットフォームであるイーサリアムの代替としてよく考えられています。従来のものよりも効率的なプルーフ オブ ステーク メカニズムを使用しています。カルダノには、エイダ ラブレスにちなんで名付けられた独自の暗号通貨 ADA があります。ADA には 2 つの独立したレイヤーがあり、1 つはトランザクションとアカウントを処理し、もう 1 つはスマート コントラクトと計算を管理するために使用されます。カルダノは、以前のものよりも安全で、拡張性が高く、適応性の高いブロックチェーン プラットフォームを作成することを目指しており、サプライ チェーン管理、デジタル ID 検証、新興市場での金融サービスなど、さまざまなアプリケーションで使用されています。

冥王星

Plutus は、Cardano ベースのスマート コントラクトを作成するために使用されるプログラミング言語です。Plutus は関数型言語である Haskell に基づいています。開発者は Plutus Core を作成する必要はなく、すべてのスクリプトは Haskell コンパイラ プラグインによって生成されます。Plutus は、数学を使用してプログラムの正しさを証明する方法を提供する形式検証をサポートしています。そのため、セキュリティが強化され、スマート コントラクトのバグの可能性が減ります。

Plutus は Cardano ブロックチェーンにネイティブに統合されており、開発者は Cardano の台帳やインフラストラクチャと直接やり取りできます。これにより、Cardano エコシステムと直接やり取りするスマート コントラクトを構築して展開できます。Plutus には、Cardano ノード全体を使用せずにスマート コントラクトをシミュレートし、メインネットに展開する前に実験できるツールがあります。Plutus は、信頼性が高く高性能な分散型アプリケーションを作成したい開発者に最適です。

観客

この記事は、基本的なプログラミングの知識がほとんどなく、ブロックチェーン開発に不慣れな開発者を対象としています。環境の設定、ブロックチェーンの概念の理解、Plutus を使用したシンプルなブロックチェーン アプリケーションの構築など、重要な手順を説明します。

開発環境の設定

開発の旅を始める前に完璧なセットアップをすることが重要です。したがって、Plutus をサポートする環境をセットアップすることが、この章の出発点となります。

1. Plutusのインストール

公式リポジトリから Plutus をダウンロードします:

git クローン https://github.com/input-output-hk/plutus-apps.gitcd plutus-appsnix-shell

インストールを確認するには、plutus -v を使用します。

2. IDEの選択

Plutus でアプリケーションを開発する場合、適切な IDE を使用することが重要です。Plutus は Haskell に基づいているため、Haskell をサポートする IDE を使用することをお勧めします。Plutus 開発の 2 つの一般的なオプションは、Visual Studio Code (VS Code) と Plutus Playground です。Plutus 開発用にこれらの IDE を設定して使用する方法については、こちらに詳しいガイドがあります。

Visual Studio Code: VS Code は、ほぼすべての言語をサポートし、非常に便利な拡張機能を備えた、非常に柔軟で多用途なコード エディターです。そのため、開発者が好んで使用するエディターです。VSCode はオープン ソースであり、コードを完成させるための幅広いツールと機能を提供します。

VSCode をセットアップする手順:

  • 公式サイトからVSCodeをダウンロードします(お使いのオペレーティングシステムに応じて)

  • ソフトウェアをインストールする

  • Plutus は Haskell 上に構築されているため、Glasgow Haskell Compiler (GHC) と cabal (Haskell 用のビルド ツール) を含む Haskell プラットフォームをインストールする必要があります。

  • Haskellをダウンロード

  • VS Code に Haskell 拡張機能をインストールする (Haskero、Haskell 構文ハイライトなど)

  • 拡張機能を設定し、追加の拡張機能を設定する

  • すでに Plutus をインストールしているので、準備完了です。

Plutus Playground: Plutus Playground は、Plutus スマート コントラクト専用のオンライン Web ベース エディターです。そのため、インストールの必要がなく、初心者がコーディング中に自信をつけるのに最適です。

Plutus Playground の Web サイトにアクセスして、すぐに始めることができます。

どちらの環境も Plutus 開発に効果的に使用できます。また、大規模なプロジェクトには VS Code を使用し、迅速なテストとプロトタイピングには Plutus Playground を使用するなど、この 2 つを組み合わせることで、両方の長所を活かすことができる場合があります。

3. 必要なライブラリのインストール

cabal を使用して、Plutus 開発に不可欠なライブラリをインストールします。

Plutus でブロックチェーンの概念を理解する

ブロックチェーンは、ブロックの形で取引の記録を保存する分散型の高度なデータベースです。各ブロックは、暗号化原理を使用して互いにリンクされている必要があります。ブロックを保護するために堅牢なメカニズムが使用されているため、後続のブロックに影響を与えずに通貨の記録を事前に変更することはできません。

ブロックチェーンには 3 つの基本コンポーネントがあります。

  • ブロック: ブロックには、トランザクションに関する情報とメタデータが含まれています。すべてのブロックはハッシュを通じて互いにリンクされており、ブロックのチェーンを形成します。これがブロックチェーンです。

  • トランザクション: トランザクションとは、ブロックチェーン内のあるエンティティから別のエンティティへのデータの転送です。Plutus では、トランザクションは Haskell で記述され、入力と出力の UTXO (未使用のトランザクション出力) が含まれます。

  • チェーン: Plutus では、チェーンによってトランザクションの順序が維持され、確認後はトランザクションが不変であることが保証されます。

次のコード スニペットでは、Plutus のブロックの構造を確認できます。

ブロックの各コンポーネントは、そのデータ型とともに記載されています。

  • インデックスはブロックの位置を示す整数である。

  • タイムスタンプはブロックが作成された時刻です

  • トランザクションは、特定のブロックに含まれるすべてのトランザクションの文字列またはリストです。

  • ハッシュは一意のパターンであり、ブロックを識別するための主キーです。

  • 前のハッシュは連続性を意味し、最後のブロックのハッシュです。

このコード スニペットでは、Plutus のトランザクションの構造を確認できます。

分散化、不変性、コンセンサスメカニズム:

ブロックチェーンの基盤は、分散化、不変性、コンセンサスメカニズムという3つの基本原則に基づいています。

分散化: 分散化とは、ブロックチェーンのデータベースを単一のエンティティが制御できないという特性であり、システムの障害や偏りがほぼ不可能になります。各参加デバイス (ノード) はブロックチェーンのコピーを保持し、透明性を確保し、集中的な障害や操作を防止します。

不変性: データがブロックチェーンに書き込まれると、後続のブロックすべてを変更しない限り、そのデータを変更することができません。これは暗号化ハッシュの助けを借りて行われます。したがって、一度行われた変更はすべて元に戻すことができず、不変となります。

コンセンサス メカニズム: ブロックチェーンのすべての必要事項を管理するプロトコルのセット。ネットワーク内のすべてのノードは、その方法について合意する必要があります。コンセンサス メカニズムは、ノードを合理化し、ネットワーク内のすべてのノードが同じ認識を持つようにするために使用されます。

Plutus でシンプルなブロックチェーンを構築する

ブロックはあらゆるブロックチェーンの基本単位です。このコード スニペットでは、ブロック データ型とそのコンポーネントを定義しています。

また、ブロック クラスを定義した後は、各ブロックが一意のハッシュを持つブロックチェーンの整合性を確保する必要があります。そのため、ハッシュ計算関数では、Plutus でよく使用される SHA256 ハッシュ メソッドを使用します。

ブロックの定義が完了したら、ブロックチェーンの最初のブロックであるジェネシス ブロックを使用してブロックチェーンを初期化します。すごいですね。ブロックチェーンを作成したばかりですが、それだけではありません。新しいブロックを追加し、最新のブロックも取得する必要があります。

何かサポートが必要な場合は、下のコードを参照してください。

Plutus でのコンセンサス メカニズムの実装

Cardano は、当初はプルーフ・オブ・ワークを採用していましたが、現在は PoS メカニズムを活用しています。Plutus は、Cardano の Ouroboros PoS プロトコルと互換性があるように設計されており、分散型アプリケーション (DApps) にスケーラビリティ、エネルギー効率、セキュリティを提供します。

Plutusで使用できるコンセンサスアルゴリズムの概要は次のとおりです。

  • Ouroboros: Ouroboros は、Plutus と高い互換性を持つ Proof of Stake メカニズムであり、バリデータが新しいブロックを検証するために引き受ける ADA のステークに依存します。Plutus の契約は Ouroboros プロトコルとシームレスに相互作用し、スマート コントラクトの実行が安全かつエネルギー効率に保たれることを保証します。

  • プルーフ オブ ワーク: PoW は最も古いメカニズムであり、すべての古い暗号通貨で広く使用されていました。Plutus の場合、紙の上ではまだ実装できます。これは、教育目的や実験目的などの個別のシナリオを考えるときにより便利です。

  • 委任型プルーフオブワークとビザンチンフォールトトレランス: これらのメカニズムは特にCardanoと互換性があるわけではありませんが、理論的にはPlutusに実装できます。

このセクションでは、Plutus で Proof of Work を使用する方法について説明します。

プルーフ オブ ワークでは、マイナーは新しいコインの検証者になるために、暗号パズルを解くために時間内に競争する必要があります。このコードでは、プルーフ オブ ワーク関数が nonce を検索し、前のブロックのハッシュと組み合わせると、先頭に一定数のゼロがあるハッシュを生成します。これは、難易度レベルによって有効な nonce を見つけるのがどれだけ難しいかを決定する、PoW の基本的な実装です。

プルーフ・オブ・ワークの実装が完了したら、マイニングされた証明を検証するためにブロックチェーンを更新する必要があります。

以下にコードスニペットの例を示します。

この機能により、証明が有効な場合にのみ新しいブロックがブロックチェーンに追加され、チェーンの整合性が維持されます。

Plutus を使用したシンプルなブロックチェーン API の作成

この章では、Plutus を使用して構築されたブロックチェーン アプリケーションと対話するためのシンプルな API を作成する方法を学習します。この API を使用すると、HTTP リクエストを通じてブロックを追加したり、ブロックチェーンを表示したりできるようになります。

API を作成する手順:

  • APIの環境設定: Haskelをインストール(すでに完了)、次にCabalを使用してServantをインストールします。

  • 必要なライブラリをすべてダウンロードします。

    • サーバント: APIを作成する

    • JSON をエンコードおよびデコードする Aeson: cabal install aeson plutus-core

    • すべてのコードとロジックを統合するPlutus

API の構築を開始するには、まず新しいブロックを追加し、ブロックチェーンの現在の状態を廃止する必要があります。これらの手順は両方とも、上記の章で実行されています。

次に、エンドポイントを定義します。

{-# LANGUAGE DataKinds #-}{-# LANGUAGE TypeOperators #-}module BlockchainAPI whereimport Servantimport Control.Monad.IO.Class (liftIO)— ブロック型を定義します (第 3 章を参照)data Block = Block  { index        :: Int  , timestamp    :: String  , dataField    :: String  , previousHash :: String  , hash         :: String  } deriving (Show, Eq)— ブロックチェーンは、単にブロックのリストですtype Blockchain = [Block]— API 型を定義しますtype BlockchainAPI =  “addBlock” :> ReqBody ‘[JSON] Block :> Post ‘[JSON] Blockchain:<|> “chain” :> Get ‘[JSON] Blockchain— 最初はジェネシスのみで始まる、ブロックチェーンのプレースホルダーblockgenesisBlock = Block 0 “2024-09-12 00:00:00” “Genesis Block” “0” “some_hash”initialBlockchain:: BlockchaininitialBlockchain = [genesisBlock]–– API エンドポイントのハンドラーaddBlockHandler :: Blockchain -> Block -> Handler BlockchainaddBlockHandler blockchain newBlock = dolet newBlockchain = blockchain ++ [newBlock]    liftIO $ putStrLn “Block added!”     return newBlockchain— チェーンを取得するためのハンドラーviewChainHandler :: Blockchain -> Handler BlockchainviewChainHandler blockchain = return blockchain–API を実行するためのメイン エントリ ポイントapp :: Applicationapp = serve (Proxy :: Proxy BlockchainAPI) (blockchainServer initialBlockchain)

上記コードの説明:

  • ブロックは前の章と同様に定義されます

  • Servant ライブラリは、API の構造を定義するために使用されます。API エンドポイントを定義するには、それぞれブロックチェーンの取得と追加を意味する GET と POST の 2 つの方法があります。

  • また、追加される新しいブロックを処理するためのハンドラー(addBlockHandler)と、他のブロックを表示するviewChainHandler)も定義しました。

  • 最後に、すべてを結合して API サーバーを実行するコードの中心となる main 関数があります。

API 定義の後、エンドポイントを追加し、ブロックチェーン エンドポイント情報を取得する 2 つの方法があります。

やったー!このサブセクションを正常に実装しました。これで、cabal を使用して API をテストできるようになり、次の部分に進む準備が整いました。

アプリケーションの実行とテスト

ブロックチェーン API を構築したら、次はそれをテストします。Postman または curl を使用して API とやり取りし、正しく動作することを確認します。

アプリケーションを実行してテストする手順:

  • プログラムをコンパイルして実行します: cabal build cabal run

  • サーバーを起動します。APIはhttp://localhost:8080で利用可能になります。

  • ブロックエンドポイントをテストして追加する

{  “index”: 1,  “timestamp”: “2024-09-12 12:30:00”,  “dataField”: “これは私の新しいブロックです”,  “previousHash”: “some_hash”,  “hash”: “new_block_hash”}

ブロックチェーンを見る

curl http://localhost:8080/chain

これらの手順に従うことで、Plutus を使用して構築された API で実行されるシンプルなブロックチェーン アプリケーションが完成します。API を使用すると、外部アプリケーションまたはユーザーは、新しいブロックを追加したり、現在のブロックチェーンの状態を表示したりして、ブロックチェーンと対話できます。

Plutus を使用したブロックチェーン アプリケーション構築の実例

上記のコード スニペットは、次の処理をステップごとに実行したものです。

  • ステップ 1: Plutus 構文を使用して、必要な属性を持つブロック データ型を作成します。

  • ステップ 2: calculate_hash メソッドを実装します。

  • ステップ 3: Blockchain データ型を定義し、ジェネシス ブロックで初期化します。

  • ステップ 4: Plutus を使用して新しいブロックを追加し、最新のブロックを取得するメソッドを実装します。

  • ステップ 5: Block データ型に Proof of Work 機能を追加し、Blockchain データ型を更新します。

  • ステップ 6: Plutus を使用してリクエストを処理するための API 環境を設定します。

  • ステップ7: 新しいブロックをマイニングし、PostmanまたはCurlを使用してブロックチェーンを検証してアプリケーションをテストします。

おめでとうございます!モジュールの最後まで到達し、Plutus の基本をすべて学習しました。

Plutus でブロックチェーン開発に取り組むと、単にコードを書くだけでなく、業界を再定義する可能性のある分散型システムのバックボーンを構築することになります。学習を続けて、コーディングを楽しんでください。

こちらもご覧ください: 独自の暗号通貨を設計、開発、展開する方法: ステップバイステップガイド