メインコンテンツまでスキップ

スマートコントラクトとDApp

スマートコントラクトとは何か、Cardanoはそれをどのように実行するのか、そして人々はそれを使って何を作っているのか。

Cardanoのスマートコントラクトは、トランザクションを承認または拒否するスクリプトです。多くの場合、対象となるのはスクリプトが守っている資金を使うトランザクションです。自分から動くことも、チェーンの外にアクセスすることもできません。できるのは、イエスかノーかを答えることだけです。

基礎​

スマートコントラクトとは?

スマートコントラクトとは、ブロックチェーン上に保存され、仲介者なしで合意を執行するプログラムです。典型的なたとえは自動販売機です。硬貨を入れて商品を選ぶと、機械がそれを出してくれます。カウンターの向こうで誰かがお菓子を渡すかどうかを判断しているわけではありません。ルールは機械に組み込まれていて、誰に対しても同じように働きます。

互いに面識のない買い手と売り手を考えてみましょう。コントラクトがなければ、相手を信頼するか、エスクロー業者に手数料を払うしかありません。コントラクトがあれば、支払いはスクリプトの中に置かれ、合意した条件が記録されたときにだけ解放されます。どちらかが取り消せるかどうか、手数料が差し引かれるかどうか、誰が条件を変更できるかは、仲介者の判断ではなく、スクリプトのルールによって決まっています。

コントラクトが参照できるのは、それを呼び出すトランザクションの中身と、すでにチェーン上にあるものだけです。レースの結果や為替レートといった外の世界の事実は、オラクルと呼ばれるサービスによってチェーン上に持ち込まれる必要があり、コントラクトの信頼性はそのデータの信頼性を超えることはできません。

ドキュメントでスマートコントラクトについて読む

Cardanoでは​

Cardanoはスマートコントラクトをどのように実行するのですか?

Cardanoのコントラクトはバリデーターです。つまり、トランザクションが所定の条件を満たしているかを検証するスクリプトです。ほとんどのバリデーターは台帳上の資金に紐付けられていますが、スクリプトはトークンの発行、報酬の引き出し、証明書、ガバナンスの投票を承認することもできます。この仕組みには、次の3つの特徴があります。

machine-squares

スクリプトが資金を守る

誰かがコントラクトにADAやトークンを送ると、その資金は出力、つまり台帳上の価値のかたまりに置かれ、鍵ではなくスクリプトによってロックされます。出力には、合意の状態、たとえば誰が何を支払う義務があるかを記録するデータ、datumを持たせることができます。その出力を使うには、トランザクションが引数であるredeemerを提示し、スクリプトがそのトランザクションが許可されるかどうかをチェックします。

chains

トランザクションは実行前に組み立てられる

ウォレットやアプリは、すべての入力、出力、スクリプトが必要とするデータを含めて、まずトランザクション全体を組み立て、署名を求める前にスクリプトを評価できます。その後、ネットワークが同じ入力で同じチェックを実行し、同じ結果を得ます。その間に入力のいずれかが使われていた場合は、トランザクションが拒否されることもありますが、その場合は何も起こりません。

power-arrows

コストは署名前にわかる

スクリプトの実行料金は、メモリと処理ステップの予算に、プロトコルパラメーターで定められた単価を適用して算出されます。そのため、手数料は後から判明するのではなく、トランザクションを組み立てた時点で確定します。署名前に評価することでオンチェーンでの失敗はまれになりますが、それでもスクリプトが失敗した場合は、コラテラルがネットワークの処理コストを賄います。その最低額は、プロトコルパラメーターで定められた手数料に対する割合で、現在は手数料の1.5倍です。DAppに接続するウォレットは、このために一定のADAを確保しています。

スロットから台帳まで、仕組みの詳細はCardanoの仕組みのページで紹介しています。


言語​

開発者はどの言語を使っていますか?

コントラクトは高水準言語で書かれ、Cardanoノードが実行する小さな言語であるPlutus Coreにコンパイルされます。Plinth(旧称Plutus Tx)はHaskellに組み込まれた言語で、最初に登場し、Haskellの型システムの力を最大限に活かしたいチームに今も使われています。AikenはCardano専用に作られた比較的新しい言語で、構文とツールがよりシンプルなため、現在は新しいプロジェクトの多くが選んでいます。Plutarchはコンパイル後のコードに近いHaskellライブラリで、実行コストを最も重視する場合に選ばれます。どの言語からも、同じ種類のオンチェーンスクリプトが生成されます。

すべてに本格的なコントラクトが必要なわけではありません。ネイティブスクリプトは、マルチシグウォレットやタイムロックといった一般的なケースを、Plutusのコードなしで処理でき、ネイティブトークンもそうしたスクリプトのもとで発行できます。

Cardanoで開発を始める

DApp​

DAppとは?

分散型アプリケーション、つまりDAppとは、重要な処理が企業のデータベースではなくスマートコントラクトを通じて実行されるウェブサイトやアプリです。たとえば分散型取引所は、スワップのトランザクションを組み立ててくれるフロントエンドと、流動性を保持し、定められた価格で取引が行われるようにするオンチェーンのスクリプトで構成されています。

DAppは自分のウォレットで使います。接続すると、アプリはあなたのアドレスと残高を確認し、トランザクションへの署名を依頼できるようになります。アプリがあなたの鍵を保持することはなく、あなたがウォレットで署名しない限り資金を動かすこともできません。この接続はCIP-30という標準に沿っているため、1つのウォレットで多くのアプリを使えます。

Cardanoのアプリを見る

安全性​

DAppを安全に使うには?

署名しようとしている内容を読みましょう。ほとんどのCardanoウォレットは、トランザクションの出力、つまりADAやトークンがどこに送られるかを表示するため、スワップのはずが残高すべてを見知らぬアドレスに送るような内容になっていれば、確定する前に気付けます。署名は、その正確なトランザクションに対するものなので、ウォレットに表示される入力、出力、警告を確認してください。Cardanoには、上限のないトークン承認はありません。DAppが使えるのは、あなたが署名したトランザクションで使われる分だけで、後から取り消すべきものもありません。ただし、コントラクトに送ったものは、そのコントラクトのルールが解放するまで、そのルールのもとに置かれます。

それ以外は、通常のルールが当てはまります。アプリにはブックマークか公式チャネルのリンクからアクセスし、検索広告やメッセージからはアクセスしないでください。コントラクトが監査済みで、コードが公開されているアプリを選びましょう。まずは少額で試してください。そして、リカバリーフレーズの入力を求められたら、攻撃とみなしてください。リカバリーフレーズを必要とするDAppはありません。

よくある詐欺とその見分け方

Cardano上に構築されたもの​

現在、Cardanoのスマートコントラクト上では何が動いていますか?

トレード、レンディング、ステーブルコイン、マーケットプレイス、ゲームはすべてコントラクト上で動いており、アイデンティティのプロジェクトもコントラクトを使っています。ここでは、アプリショーケースからいくつかの例を、データがある場合はオンチェーンの活動量の順に紹介します。

ステーブルコインとDeFiには専用のページがあり、ショーケースではあらゆるカテゴリーにわたる100以上のアプリを紹介しています。

すべてのアプリを見る

開発​

どうやって作るのですか?

開発者ポータルでは、最初のトランザクションからコントラクトのデプロイまでを案内しています。AikenとPlutusのチュートリアル、安全に試せるテストネットワーク、多くのチームが使っているツールもそろっています。コントラクトはトランザクションの一部としてチェーンに届きます。それを使うトランザクションに添付するか、出力の中に一度公開しておき、後のトランザクションから参照します。グローバルなコントラクトの登録簿はありません。

開発者ポータル

FAQ​

解決する課題は同じですが、仕組みが異なります。Ethereumのコントラクトは、独自の状態を持ち、呼び出されると実行されるアカウントです。Cardanoのコントラクトは、トランザクションを承認または拒否するバリデーターで、多くの場合、対象となるのはスクリプトが守っている出力を使うトランザクションです。Cardanoのモデルでは、署名する前にスクリプトの結果とコストがわかります。ただし、必要な入力が先に使われていた場合は、トランザクションが拒否されることもあります。その代わり、共有された状態ではなく出力を中心に設計する必要があります。

いいえ。スクリプトが管理できるのは、誰かが署名したトランザクションでそのスクリプトに送られた資金だけで、それを使えるのも、スクリプトのルールを満たすトランザクションの中だけです。あなたのウォレット自体の資金は、あなたの署名がなければ動きません。

通常は、署名前にアプリやウォレットがスクリプトを評価するため、失敗するトランザクションが送信されることはめったにありません。それでもトランザクションが送信され、スクリプトがオンチェーンで失敗した場合は、ウォレットが確保していたコラテラルがネットワークの処理コストを賄い、トランザクションの残りの部分は実行されません。

いいえ。Cardanoには、トークンの使用許可(アローワンス)の仕組みがありません。署名は、あなたが署名するその正確なトランザクションに対してのみ有効で、それ以上のものではありません。ウォレットに表示される入力、出力、警告を確認しましょう。DAppが後から、あなたのウォレットのほかの資産を使うことはできません。

スクリプトはコードのハッシュで識別されるため、コード自体を変更することはできません。プロジェクトをアップグレードするには、新しいバージョンをデプロイし、旧スクリプトが許可するルールに従って資金を移します。この操作はガバナンストークンやマルチシグ鍵で管理されることもあります。多額の資金を預ける前に、そのプロジェクトがアップグレードをどう扱っているか確認しましょう。

ほとんどの開発者にとって、最も早く始められるのはAikenです。なじみやすい構文と充実したツールを備えています。すでにHaskellを知っているならPlinth(旧Plutus Tx)、実行コストを細かく制御したいならPlutarchが適しています。いずれも同じオンチェーン言語にコンパイルされます。

腕試しをしてみませんか?技術クイズに挑戦しましょう。