1. First Steps

[Previous << Why Use Cadence?](https://qiita.com/flowcadence/items/39aa658f81f39a30e861)
[Next >> 2. Hello World](https://qiita.com/flowcadence/items/8d5bce1f1feaf5404d2b)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#cadenceの言語仕様を学ぶ

このチュートリアルでは、スマートコントラクトの使い方やアカウントの切替え方、アカウントのステート(state)を見る方法を私たちは学んでいきます。
<h1 id="What-is-Cadence?">What is Cadence?</h1>

Cadenceは、Flow Blockchainで使用するための新しいスマートコントラクトプログラミング言語です。Cadenceは、スマートコントラクトプログラミングに新たな機能をもたらし、開発者がコードの安全性、セキュリティ、明瞭性、およびアクセス性を確保できるようにします。これらの機能の一部は以下の通りです:
* 型安全性と強力な静的型システム
* リソース指向プログラミング：リソース（および関連資産）が同時に1つの場所にしか存在できず、コピーもできず、誤って紛失または削除されることもないことを保証することで、デジタル所有権のための安全で宣言的なモデルを作成する、線形型(Linear Type)とオブジェクト機能(object capabilities)の組み合わせによる新しいパラダイム
* 関数および[トランザクション](https://qiita.com/flowcadence/items/0d73ce09c9da04d8b697)のためにビルトインされた事前条件および事後条件
* オブジェクトへのアクセスは所有者およびオブジェクトへの有効な参照を持つ者に限定されることを要求することでアクセス制御を強化する、機能群(Capability)ベースのセキュリティおよび権限の活用

言語のハイレベル設計の詳細については、[Cadenceの紹介](https://qiita.com/flowcadence/items/87147a26f1d2b89b46ca)を参照してください。

<h1 id="What-is-the-Flow-Developer-Playground?">What is the Flow Developer Playground?</h1>

[Flow Playground](https://play.flow.com/)には、Flowを試すためのブラウザ内エディタとFlowエミュレータが含まれています。Flow Playgroundを使用すると、Cadenceスマートコントラクトを記述し、それをローカルのFlowエミュレートされたブロックチェーンにデプロイし、トランザクションを送信することができます。

Flow Playgroundは、標準的なウェブブラウザであればどれでも動作するはずです。ただし、主にChromeブラウザ向けにテストおよび最適化されているため、Google Chromeの使用を推奨します。(補足: MacではChromeよりSafariの方が機能することが多いです。おそらくChrome Webstoreの影響と思われます。)

<h1 id="Getting-to-know-the-Playground">Getting to know the Playground</h1>

Playgroundには、Cadenceスマートコントラクトのデプロイとトランザクションおよびスクリプトとのやり取りに慣れるために必要なものがすべて含まれています。

Playgroundには、docsサイトの各チュートリアルに対応するコントラクトとトランザクションのテンプレートがあらかじめロードされています。特定のチュートリアルのコントラクトをロードするには、サイドバーで希望のチュートリアルを開き、チュートリアルの冒頭にある吹き出しボックス（補足: 💡 TIPと書かれている枠のこと）の中に書かれているリンクをクリックします。

吹き出しボックスは次のようになります。

:::note info
💡 TIP
このチュートリアルのスターターコードを Flow Playground で開きます。
https://play.flow.com/
:::
これらのリンクをクリックすると、チュートリアルのコードが新しいタブで開き、スマートコントラクト、トランザクション、およびスクリプトが Playground のテンプレートに読み込まれ、使用できるようになります。 説明を読み、コードに変更を加えるには、エディターとこのチュートリアルを行き来していただく必要があります。
<h1 id="What-is-a-smart-contract?">What is a smart contract?</h1>

通常、コントラクト(契約)とは、情報や資産の交換を目的とした2者間の合意を指します。通常、コントラクト(契約)の条件は、銀行や弁護士などの信頼できる第三者機関によって監督および執行されます。

スマートコントラクトとは、ブロックチェーンのようなネットワーク上に保存されたコンピュータプログラムであり、コントラクト(契約)の履行を検証し、実行します（弁護士が行うような役割です）。このプロセスでは、信頼できる第三者機関は一切必要ありません。なぜなら、コード自体が信頼されているからです。

ブロックチェーン上で実行されるプログラムは、銀行のような中央機関に頼らずにデジタル通貨の管理などの重要な機能を容易にするため、一般的にスマートコントラクトと呼ばれています。

[Cadenceは、スマートコントラクトの開発に最適なリソース指向のプログラミング言語であり](https://play.flow.com/)、現在、Flow Blockchainの主要なスマートコントラクトプログラミング言語です。

<h1 id="Accounts-and-Contracts">Accounts and Contracts</h1>

スマートコントラクトに加えて、ブロックチェーンにはアカウントも存在します。アカウントは、ユーザーがオンチェーンのコードや資産とやりとりするための主要な手段です。ユーザーはアカウントでトランザクション(取引)を承認し、所有する資産をアカウントのストレージに保管します。

Flow playgroundでは、アカウントあらかじめ作成されているため、自動的に利用できます。

画面左下の「Accounts」セクションには、アクティブなアカウントがリスト表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912821/476ba3c3-1890-49d6-a164-eb74c11a136a.png)
一つのアカウントには複数のスマートコントラクトをデプロイすることができます。これについては後ほど説明します。アカウントをクリックすると、メインエディタでそのアカウントに関連付けられているスマートコントラクトの一覧と、そのアカウントが保存しているもののリストが表示されます。

デフォルトでは、すべてのアカウントにはデプロイされたスマートコントラクトはなく、ストレージにも何も入っていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912821/0684214f-92e1-8df9-20d4-5c1dbc45e317.png)
画面左側の`Contracts`の下にあるスマートコントラクト名をクリックすると、アカウントに紐付けられているスマートコントラクトのコードを確認できます。新規で始めた Playground セッションのデフォルトのスマートコントラクトは、シンプルな`HelloWorld` スマートコントラクトです。

アカウントエディタでスマートコントラクトを含んだ Cadenceの コードを開いている場合、画面の右下にあるデプロイボタンをクリックすると、現在選択されているアカウントにそのスマートコントラクトをデプロイできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912821/2706dd3e-89e4-34b4-f337-3d01e728b169.png)
数秒後にはスマートコントラクトがデプロイされます。アカウントのセクションでは、デプロイを行った選択中アカウントの隣にはスマートコントラクトの名前が表示されているはずです。画面の下部にある「ログ」をクリックすると、コンソールにスマートコントラクトがデプロイされ、どのアカウントにデプロイされたかを確認できるメッセージが表示されます。またここには、デプロイの過程で発生するかもしれないエラーも表示されます。

さらに、そのスマートコントラクトがデプロイされたアカウントをクリックすることでそのエディタを再度確認することができます。`HelloWorld`スマートコントラクトがデプロイされたことが確認でき、`FlowToken`オブジェクトが`Account Storage`セクションにリストされていることも確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912821/d20ad9a1-3e29-803d-f63d-1f631ae1a5b1.png)
すべてのFlowアカウントは、Flowトークンを管理する機能とともに作成されます。 ここでは、具体的な内容については心配する必要はありません。後ほど学習します。

また、左側の選択メニューからトランザクションやスクリプトを選択し、デプロイしたスマートコントラクトとやりとりするために送信することもできます。これについては、Hello Worldチュートリアルで説明します。

これは、Playgroundでできることのごく一部です。残りのチュートリアルでは、すべての機能をより詳しく説明します。
<h1 id="Resources">Resources</h1>
このパッケージの各チュートリアルでは、トランザクション、スマートコントラクト、スクリプトを含む複数のファイルを使用します。各チュートリアルには、チュートリアルを完了するために実行する必要のあるすべてのコードを含む、事前に作成されたCadenceプロジェクトへのリンクが含まれています。さらに、すべてのコードは、必要に応じて各自のプレイグラウンドプロジェクトにコピー＆ペーストできるよう、チュートリアル内に提供されています。

<h1 id="Say Hello, World!">Say Hello, World!</h1>

さぁ稼働しているFlow Developer Playgroundが手に入りましたので、Flow用の[スマートコントラクトをこれから作成](https://qiita.com/abcdefgac153131/items/8d5bce1f1feaf5404d2b)できますよ！

翻訳元

https://cadence-lang.org/docs/tutorial/first-steps

***
<b>[Previous << Why Use Cadence?](https://qiita.com/flowcadence/items/39aa658f81f39a30e861)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (1. First Steps)

<b>[Next >> 2. Hello World](https://qiita.com/flowcadence/items/8d5bce1f1feaf5404d2b)</b>