From 50716685684d8447829c6b41c4446f561fac582f Mon Sep 17 00:00:00 2001 From: neila <40727091+neila@users.noreply.github.com> Date: Sat, 15 Jun 2024 15:47:53 +0900 Subject: [PATCH 1/2] clean control characters --- .../ja/section-0/lesson-3_ENS\343\201\250\343\201\257.md" | 2 +- ...\201\225\343\201\206\343\201\256\343\201\213\357\274\237.md" | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git "a/docs/Polygon-ENS-Domain/ja/section-0/lesson-3_ENS\343\201\250\343\201\257.md" "b/docs/Polygon-ENS-Domain/ja/section-0/lesson-3_ENS\343\201\250\343\201\257.md" index 4f3b9bcd3..4e0920beb 100644 --- "a/docs/Polygon-ENS-Domain/ja/section-0/lesson-3_ENS\343\201\250\343\201\257.md" +++ "b/docs/Polygon-ENS-Domain/ja/section-0/lesson-3_ENS\343\201\250\343\201\257.md" @@ -48,7 +48,7 @@ ENSの最大の問題は取引手数料です。 名前を登録するには、 ENSを使用すると、登録したネームにたくさんの独自データを紐付けて保存できます。 - [ENS の例 ( cryptonerdtokyo.eth )](https://app.ens.domains/name/cryptonerdtokyo.eth/details) + [ENS の例 ( cryptonerdtokyo.eth )](https://app.ens.domains/name/cryptonerdtokyo.eth/details) ![](/images/Polygon-ENS-Domain/section-0/0_3_2.png) diff --git "a/docs/Solana-NFT-Drop/ja/section-1/lesson-1_Solana\343\201\256NFT\343\201\257\344\275\225\343\201\214\351\201\225\343\201\206\343\201\256\343\201\213\357\274\237.md" "b/docs/Solana-NFT-Drop/ja/section-1/lesson-1_Solana\343\201\256NFT\343\201\257\344\275\225\343\201\214\351\201\225\343\201\206\343\201\256\343\201\213\357\274\237.md" index c989a1ad4..35d9090ac 100644 --- "a/docs/Solana-NFT-Drop/ja/section-1/lesson-1_Solana\343\201\256NFT\343\201\257\344\275\225\343\201\214\351\201\225\343\201\206\343\201\256\343\201\213\357\274\237.md" +++ "b/docs/Solana-NFT-Drop/ja/section-1/lesson-1_Solana\343\201\256NFT\343\201\257\344\275\225\343\201\214\351\201\225\343\201\206\343\201\256\343\201\213\357\274\237.md" @@ -47,7 +47,7 @@ Candy Machineの非常に優れている特徴の1つとして、販売するNFT 6\. AさんはNFTを受け取ることができず、お金も失いました。Bさんは幸せです。 -これは、並列コンピューティングにおける、典型的な課題です。解決策としては [ミューテックス](https://doc.rust-lang.org/std/sync/struct.Mutex.html) と [アトミックトランザクション]() の使用が挙げられます。 +これは、並列コンピューティングにおける、典型的な課題です。解決策としては [ミューテックス](https://doc.rust-lang.org/std/sync/struct.Mutex.html) と [アトミックトランザクション](https://en.wikipedia.org/wiki/Atomicity_%28database_systems%29)の使用が挙げられます。 これらは実装がかなり複雑です。 From d3c053788d5b3961b3e568aacccf17117bdbc0b1 Mon Sep 17 00:00:00 2001 From: neila <40727091+neila@users.noreply.github.com> Date: Sat, 15 Jun 2024 15:50:36 +0900 Subject: [PATCH 2/2] standardize codeblock langnames --- ...62\343\201\227\343\202\210\343\201\206.md" | 2 +- ...05\343\201\227\343\202\210\343\201\206.md" | 2 +- ...46\343\201\277\343\202\210\343\201\206.md" | 6 +- ...22\345\207\272\343\201\235\343\201\206.md" | 2 +- ...44\343\201\227\343\202\210\343\201\206.md" | 6 +- ...32\343\201\227\343\202\210\343\201\206.md" | 4 +- ...46\343\201\277\343\202\210\343\201\206.md" | 6 +- ...44\343\201\227\343\202\210\343\201\206.md" | 4 +- ...44\343\201\217\343\202\215\343\201\206.md" | 8 +- ...44\343\201\217\343\202\215\343\201\206.md" | 4 +- ...53\343\201\227\343\202\210\343\201\206.md" | 14 +- ...44\343\201\227\343\202\210\343\201\206.md" | 211 +++++++++--------- ...44\343\201\227\343\202\210\343\201\206.md" | 2 +- ...nt\343\201\227\343\202\210\343\201\206.md" | 12 +- ...22\344\275\234\343\202\215\343\201\206.md" | 6 +- ...22\344\275\234\343\202\215\343\201\206.md" | 8 +- ...32\343\201\227\343\202\210\343\201\206.md" | 20 +- ...63\345\207\272\343\201\235\343\201\206.md" | 24 +- ...11\343\201\227\343\202\210\343\201\206.md" | 101 +++++---- ...44\343\201\227\343\202\210\343\201\206.md" | 8 +- ...22\344\275\234\343\202\215\343\201\206.md" | 10 +- ...22\344\275\234\343\202\215\343\201\206.md" | 4 +- ...nt\343\201\227\343\202\210\343\201\206.md" | 6 +- ...44\343\201\227\343\202\210\343\201\206.md" | 4 +- ...05\343\201\227\343\202\210\343\201\206.md" | 8 +- ...76\343\201\227\343\202\210\343\201\206.md" | 2 +- ...16\343\201\210\343\202\210\343\201\206.md" | 2 +- ...22\344\275\234\343\202\215\343\201\206.md" | 14 +- ...27\343\201\227\343\202\210\343\201\206.md" | 10 +- ...63\345\207\272\343\201\235\343\201\206.md" | 32 +-- ...22\344\275\234\343\202\215\343\201\206.md" | 40 ++-- ...22\344\275\234\343\202\215\343\201\206.md" | 28 +-- ...11\343\201\227\343\202\210\343\201\206.md" | 28 +-- ...11\343\201\227\343\202\210\343\201\206.md" | 18 +- ...46\343\201\277\343\202\210\343\201\206.md" | 20 +- ...22\344\275\234\343\202\215\343\201\206.md" | 6 +- ...27\343\202\210\343\201\206\357\274\201.md" | 38 ++-- ...63\345\207\272\343\201\235\343\201\206.md" | 20 +- ...nt\343\201\227\343\202\210\343\201\206.md" | 28 +-- ...10\343\201\227\343\202\210\343\201\206.md" | 116 +++++----- ...44\343\201\227\343\202\210\343\201\206.md" | 2 +- ...05\343\201\227\343\202\210\343\201\206.md" | 141 ++++++------ ...05\343\201\227\343\202\210\343\201\206.md" | 6 +- ...11\343\201\227\343\202\210\343\201\206.md" | 2 +- ...12\343\201\222\343\202\210\343\201\206.md" | 8 +- ...14\343\201\227\343\202\210\343\201\206.md" | 19 +- ...30\343\201\227\343\202\210\343\201\206.md" | 26 +-- ...44\343\201\227\343\202\210\343\201\206.md" | 16 +- ...44\343\201\227\343\202\210\343\201\206.md" | 2 +- ...32\343\201\227\343\202\210\343\201\206.md" | 14 +- ...63\345\207\272\343\201\235\343\201\206.md" | 26 +-- ...30\343\201\227\343\202\210\343\201\206.md" | 40 ++-- ...22\351\200\201\343\202\215\343\201\206.md" | 14 +- ...05\343\201\227\343\202\210\343\201\206.md" | 139 ++++++------ ...22\344\275\234\343\202\215\343\201\206.md" | 10 +- ...05\343\201\227\343\202\210\343\201\206.md" | 30 +-- ...05\343\201\227\343\202\210\343\201\206.md" | 16 +- ...05\343\201\227\343\202\210\343\201\206.md" | 18 +- ...05\343\201\227\343\202\210\343\201\206.md" | 22 +- ...25\343\201\233\343\202\210\343\201\206.md" | 4 +- ...05\343\201\227\343\202\210\343\201\206.md" | 4 +- ...20\343\201\227\343\202\210\343\201\206.md" | 6 +- ...20\343\201\227\343\202\210\343\201\206.md" | 4 +- ...30\343\201\227\343\202\210\343\201\206.md" | 4 +- ...51\343\201\227\343\202\210\343\201\206.md" | 4 +- ...20\343\201\227\343\202\210\343\201\206.md" | 2 +- ...22\343\201\227\343\202\210\343\201\206.md" | 4 +- ...20\343\201\227\343\202\210\343\201\206.md" | 10 +- ...25\343\201\233\343\202\210\343\201\206.md" | 10 +- ...22\343\201\227\343\202\210\343\201\206.md" | 4 +- ...05\343\201\227\343\202\210\343\201\206.md" | 24 +- ...20\343\201\227\343\202\210\343\201\206.md" | 10 +- ...25\343\201\233\343\202\210\343\201\206.md" | 52 ++--- ...05\343\201\227\343\202\210\343\201\206.md" | 83 ++++--- ...05\343\201\227\343\202\210\343\201\206.md" | 18 +- ...20\343\201\227\343\202\210\343\201\206.md" | 14 +- ...53\343\201\227\343\202\210\343\201\206.md" | 10 +- ...53\343\201\227\343\202\210\343\201\206.md" | 12 +- ...53\343\201\227\343\202\210\343\201\206.md" | 6 +- ...22\343\201\227\343\202\210\343\201\206.md" | 8 +- ...46\343\201\277\343\202\210\343\201\206.md" | 23 +- ...46\343\201\277\343\202\210\343\201\206.md" | 94 ++++---- ...53\343\201\227\343\202\210\343\201\206.md" | 4 +- ...44\343\201\227\343\202\210\343\201\206.md" | 4 +- ...05\343\201\227\343\202\210\343\201\206.md" | 6 +- ...10\343\201\227\343\202\210\343\201\206.md" | 16 +- ...05\343\201\227\343\202\210\343\201\206.md" | 43 ++-- ...27\343\201\227\343\202\210\343\201\206.md" | 10 +- ...15\343\201\227\343\202\210\343\201\206.md" | 12 +- ...44\343\201\227\343\202\210\343\201\206.md" | 2 +- ...11\343\202\222\343\201\231\343\202\213.md" | 4 +- ...44\343\201\227\343\202\210\343\201\206.md" | 2 +- ...44\343\201\227\343\202\210\343\201\206.md" | 14 +- ...15\343\201\227\343\202\210\343\201\206.md" | 2 +- ...46\343\201\277\343\202\210\343\201\206.md" | 10 +- ...22\344\275\234\343\202\215\343\201\206.md" | 58 ++--- .../en/section-4/lesson-2_Build Frontend.md | 2 +- .../lesson-1_Monorepo configration.md | 2 +- .../lesson-2_Automated contract testing.md | 8 +- ...11\343\201\256\346\247\213\347\257\211.md" | 2 +- ...35\343\201\256\350\250\255\345\256\232.md" | 2 +- ...25\343\203\206\343\202\271\343\203\210.md" | 8 +- ...20\343\201\227\343\202\210\343\201\206.md" | 8 +- ...05\343\201\227\343\202\210\343\201\206.md" | 6 +- ...05\343\201\227\343\202\210\343\201\206.md" | 6 +- ...40\343\201\227\343\202\210\343\201\206.md" | 6 +- ...20\343\201\227\343\202\210\343\201\206.md" | 32 +-- ...10\343\201\227\343\202\210\343\201\206.md" | 34 +-- ...27\343\201\227\343\202\210\343\201\206.md" | 18 +- ...22\344\275\234\343\202\215\343\201\206.md" | 20 +- ...22\344\275\234\343\202\215\343\201\206.md" | 28 +-- ...27\343\202\210\343\201\206\357\274\201.md" | 6 +- ...27\343\202\210\343\201\206\357\274\201.md" | 4 +- ...27\343\202\210\343\201\206\357\274\201.md" | 14 +- ...27\343\202\210\343\201\206\357\274\201.md" | 15 +- ...27\343\202\210\343\201\206\357\274\201.md" | 40 ++-- ...27\343\202\210\343\201\206\357\274\201.md" | 19 +- ...27\343\202\210\343\201\206\357\274\201.md" | 14 +- ...33\343\202\210\343\201\206\357\274\201.md" | 41 ++-- ...27\343\202\210\343\201\206\357\274\201.md" | 2 +- ...10\343\201\227\343\202\210\343\201\206.md" | 25 +-- 121 files changed, 1203 insertions(+), 1191 deletions(-) diff --git "a/docs/AVAX-Asset-Tokenization/ja/section-3/lesson-3_Upkeep\343\202\222\347\231\273\351\214\262\343\201\227\343\202\210\343\201\206.md" "b/docs/AVAX-Asset-Tokenization/ja/section-3/lesson-3_Upkeep\343\202\222\347\231\273\351\214\262\343\201\227\343\202\210\343\201\206.md" index b9f37a9d2..1f5d33f22 100644 --- "a/docs/AVAX-Asset-Tokenization/ja/section-3/lesson-3_Upkeep\343\202\222\347\231\273\351\214\262\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/AVAX-Asset-Tokenization/ja/section-3/lesson-3_Upkeep\343\202\222\347\231\273\351\214\262\343\201\227\343\202\210\343\201\206.md" @@ -35,7 +35,7 @@ yarn contract deploy その後`assetTokenization address:`に続くコントラクトのアドレスを`client`ディレクトリ内、 `hooks/useContract.ts`の中の以下の部分に貼り付けてください。 -```javascript +```js export const AssetTokenizationAddress = "コントラクトのデプロイ先アドレス"; ``` diff --git "a/docs/AVAX-Messenger/ja/section-1/lesson-3_\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\343\201\256\344\277\235\345\255\230\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" "b/docs/AVAX-Messenger/ja/section-1/lesson-3_\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\343\201\256\344\277\235\345\255\230\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" index 0997f6372..881072735 100644 --- "a/docs/AVAX-Messenger/ja/section-1/lesson-3_\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\343\201\256\344\277\235\345\255\230\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/AVAX-Messenger/ja/section-1/lesson-3_\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\343\201\256\344\277\235\345\255\230\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" @@ -135,7 +135,7 @@ contract Messenger { > Solidity の`mapping`は、ほかの言語におけるハッシュテーブルや辞書のような役割を果たします。 > これらは、下記のように`_Key`と`_Value`のペアの形式でデータを格納するために使用されます。 > -> ```javascript +> ```js > mapping(_Key => _Value)public mappingName > ``` diff --git "a/docs/ETH-DAO/ja/section-1/lesson-3_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\201\253\346\216\245\347\266\232\343\201\227\343\201\246\343\201\277\343\202\210\343\201\206.md" "b/docs/ETH-DAO/ja/section-1/lesson-3_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\201\253\346\216\245\347\266\232\343\201\227\343\201\246\343\201\277\343\202\210\343\201\206.md" index 22b3844c0..94b478e4b 100644 --- "a/docs/ETH-DAO/ja/section-1/lesson-3_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\201\253\346\216\245\347\266\232\343\201\227\343\201\246\343\201\277\343\202\210\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-1/lesson-3_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\201\253\346\216\245\347\266\232\343\201\227\343\201\246\343\201\277\343\202\210\343\201\206.md" @@ -12,7 +12,7 @@ `src/pages/_app.tsx`に移動して、以下のようにコードを更新しましょう。 -```typescript +```ts import { Sepolia } from "@thirdweb-dev/chains"; import { ThirdwebProvider } from "@thirdweb-dev/react"; import type { AppProps } from "next/app"; @@ -42,7 +42,7 @@ Next.jsにおいてAppコンポーネント (`_app.tsx`) で全ページ共通 srcディレクトリの中に`components/head.tsx`を作成し、以下のコードを追加します。 -```typescript +```ts import * as React from "react"; import Head from "next/head"; @@ -109,7 +109,7 @@ yarn dev `src/pages/index.tsx`に移動して、コードを以下とおり更新しましょう。 -```typescript +```ts import { ConnectWallet } from "@thirdweb-dev/react"; import type { NextPage } from "next"; diff --git "a/docs/ETH-DAO/ja/section-1/lesson-4_\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\343\201\256\350\255\246\345\221\212\343\202\222\345\207\272\343\201\235\343\201\206.md" "b/docs/ETH-DAO/ja/section-1/lesson-4_\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\343\201\256\350\255\246\345\221\212\343\202\222\345\207\272\343\201\235\343\201\206.md" index 77bfcc5d9..8203cde34 100644 --- "a/docs/ETH-DAO/ja/section-1/lesson-4_\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\343\201\256\350\255\246\345\221\212\343\202\222\345\207\272\343\201\235\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-1/lesson-4_\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\343\201\256\350\255\246\345\221\212\343\202\222\345\207\272\343\201\235\343\201\206.md" @@ -6,7 +6,7 @@ `src/pages/index.tsx`のコードを以下のとおり更新しましょう。 -```typescript +```ts import { Sepolia } from "@thirdweb-dev/chains"; import { ConnectWallet, diff --git "a/docs/ETH-DAO/ja/section-2/lesson-2_NFT\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-DAO/ja/section-2/lesson-2_NFT\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" index 895598d87..5add13489 100644 --- "a/docs/ETH-DAO/ja/section-2/lesson-2_NFT\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-2/lesson-2_NFT\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" @@ -6,7 +6,7 @@ `src/scripts/1-initialize-sdk.ts`を作成して、以下を追加します。 -```typescript +```ts import nextEnv from "@next/env"; import { ThirdwebSDK } from "@thirdweb-dev/sdk"; @@ -65,7 +65,7 @@ export default sdk; 続いて、`next.config.js`を以下のとおり変更します。 -```typescript +```ts /** @type {import('next').NextConfig} */ export const nextConfig = { reactStrictMode: true, @@ -109,7 +109,7 @@ _📝 備考: `ExperimentalWarning`のようなランダムな警告が表示さ ※ コレクションのアイコンとなる画像はお気に入りの画像に変更しておきましょう。 -```typescript +```ts import { AddressZero } from "@ethersproject/constants"; import { readFileSync } from "fs"; diff --git "a/docs/ETH-DAO/ja/section-2/lesson-3_NFT\343\201\256\343\203\241\343\202\277\343\203\207\343\203\274\343\202\277\343\202\222\350\250\255\345\256\232\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-DAO/ja/section-2/lesson-3_NFT\343\201\256\343\203\241\343\202\277\343\203\207\343\203\274\343\202\277\343\202\222\350\250\255\345\256\232\343\201\227\343\202\210\343\201\206.md" index f4f6806ee..67754be06 100644 --- "a/docs/ETH-DAO/ja/section-2/lesson-3_NFT\343\201\256\343\203\241\343\202\277\343\203\207\343\203\274\343\202\277\343\202\222\350\250\255\345\256\232\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-2/lesson-3_NFT\343\201\256\343\203\241\343\202\277\343\203\207\343\203\274\343\202\277\343\202\222\350\250\255\345\256\232\343\201\227\343\202\210\343\201\206.md" @@ -10,7 +10,7 @@ ※ あなたのメンバーシップNFT用の画像を設定することを忘れないでください! -```typescript +```ts import { readFileSync } from "fs"; import sdk from "./1-initialize-sdk"; @@ -88,7 +88,7 @@ Done in 30.57s. `src/scripts/4-set-claim-condition.ts`を作成し、下記のコードを追加しましょう。 -```typescript +```ts import { MaxUint256 } from "@ethersproject/constants"; import sdk from "./1-initialize-sdk"; diff --git "a/docs/ETH-DAO/ja/section-2/lesson-4_NFT\343\202\222\343\203\237\343\203\263\343\203\210\343\201\227\343\201\246\343\201\277\343\202\210\343\201\206.md" "b/docs/ETH-DAO/ja/section-2/lesson-4_NFT\343\202\222\343\203\237\343\203\263\343\203\210\343\201\227\343\201\246\343\201\277\343\202\210\343\201\206.md" index c5c9b130b..9dbf161c1 100644 --- "a/docs/ETH-DAO/ja/section-2/lesson-4_NFT\343\202\222\343\203\237\343\203\263\343\203\210\343\201\227\343\201\246\343\201\277\343\202\210\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-2/lesson-4_NFT\343\202\222\343\203\237\343\203\263\343\203\210\343\201\227\343\201\246\343\201\277\343\202\210\343\201\206.md" @@ -12,7 +12,7 @@ ※ あなたのコントラクトアドレスを設定することを忘れないでください! -```typescript +```ts import { Sepolia } from "@thirdweb-dev/chains"; import { ConnectWallet, @@ -123,7 +123,7 @@ export default Home; ※ あなたのコントラクトアドレスを設定することを忘れないでください! -```typescript +```ts import { Sepolia } from "@thirdweb-dev/chains"; import { ConnectWallet, @@ -300,7 +300,7 @@ NFTのミント画面を描画する前に、以下のコメント`DAO ダッシ `src/pages/index.tsx`に移動し、コードの一部を以下のとおり変更します。 -```typescript +```ts // ウォレットと接続していなかったら接続を促す if (!address) { return ( diff --git "a/docs/ETH-DAO/ja/section-3/lesson-1_\343\202\254\343\203\220\343\203\212\343\203\263\343\202\271\343\203\210\343\203\274\343\202\257\343\203\263\343\201\256\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-DAO/ja/section-3/lesson-1_\343\202\254\343\203\220\343\203\212\343\203\263\343\202\271\343\203\210\343\203\274\343\202\257\343\203\263\343\201\256\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" index 7be7cd135..d6fda393c 100644 --- "a/docs/ETH-DAO/ja/section-3/lesson-1_\343\202\254\343\203\220\343\203\212\343\203\263\343\202\271\343\203\210\343\203\274\343\202\257\343\203\263\343\201\256\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-3/lesson-1_\343\202\254\343\203\220\343\203\212\343\203\263\343\202\271\343\203\210\343\203\274\343\202\257\343\203\263\343\201\256\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" @@ -137,7 +137,7 @@ MetaMask"Import Token" をクリックするだけです。 `src/scripts/6-print-money.ts`を作成し、下記コードを追加しましょう。 -```typescript +```ts import sdk from "./1-initialize-sdk"; import { ERCTokenAddress } from "./module"; @@ -212,7 +212,7 @@ Done in 32.95s. `src/scripts/7-airdrop-token.ts`を作成し、以下のコードを追加してください。 -```typescript +```ts import sdk from "./1-initialize-sdk"; import { editionDropAddress, ERCTokenAddress } from "./module"; diff --git "a/docs/ETH-DAO/ja/section-3/lesson-2_\344\274\232\345\223\241\351\231\220\345\256\232\343\201\256\343\203\200\343\203\203\343\202\267\343\203\245\343\203\234\343\203\274\343\203\211\343\202\222\343\201\244\343\201\217\343\202\215\343\201\206.md" "b/docs/ETH-DAO/ja/section-3/lesson-2_\344\274\232\345\223\241\351\231\220\345\256\232\343\201\256\343\203\200\343\203\203\343\202\267\343\203\245\343\203\234\343\203\274\343\203\211\343\202\222\343\201\244\343\201\217\343\202\215\343\201\206.md" index 0eadd262f..f7c3e1ba2 100644 --- "a/docs/ETH-DAO/ja/section-3/lesson-2_\344\274\232\345\223\241\351\231\220\345\256\232\343\201\256\343\203\200\343\203\203\343\202\267\343\203\245\343\203\234\343\203\274\343\203\211\343\202\222\343\201\244\343\201\217\343\202\215\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-3/lesson-2_\344\274\232\345\223\241\351\231\220\345\256\232\343\201\256\343\203\200\343\203\203\343\202\267\343\203\245\343\203\234\343\203\274\343\203\211\343\202\222\343\201\244\343\201\217\343\202\215\343\201\206.md" @@ -6,7 +6,7 @@ まず、`src/pages/index.tsx`へ移動し、`react`のインポート部分のコードを以下のとおり変更します。 -```typescript +```ts import { useEffect, useMemo, useState } from "react"; ``` @@ -18,7 +18,7 @@ import { useEffect, useMemo, useState } from "react"; ※ あなたのアドレスを設定することを忘れないでください! -```typescript +```ts // トークンコントラクトの初期化 const token = useContract("INSERT_TOKEN_ADDRESS", "token").contract; ``` @@ -31,7 +31,7 @@ ERC-20から、各メンバーが持っているトークンの数を取得し 次に、`const [isClaiming, setIsClaiming] = useState(false)`の下に、以下のコードを追加します。 -```typescript +```ts // メンバーごとの保有しているトークンの数をステートとして宣言 const [memberTokenAmounts, setMemberTokenAmounts] = useState([]); @@ -136,7 +136,7 @@ stateにデータを保持するところまではできているので、早速 `src/pages/index.tsx`のDAOダッシュボード画面を表示している箇所を以下のとおり置き換えます(161行目のあたりです)。 -```typescript +```ts // ユーザーがすでに NFT を要求している場合は、内部 DAO ページを表示します // これは DAO メンバーだけが見ることができ、すべてのメンバーとすべてのトークン量をレンダリングします else if (hasClaimedNFT){ diff --git "a/docs/ETH-DAO/ja/section-3/lesson-3_\343\203\210\343\203\254\343\202\270\343\203\243\343\203\252\343\203\274\343\201\250\346\212\225\347\245\250\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\201\244\343\201\217\343\202\215\343\201\206.md" "b/docs/ETH-DAO/ja/section-3/lesson-3_\343\203\210\343\203\254\343\202\270\343\203\243\343\203\252\343\203\274\343\201\250\346\212\225\347\245\250\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\201\244\343\201\217\343\202\215\343\201\206.md" index 9cc8cbb39..a8cd5f48f 100644 --- "a/docs/ETH-DAO/ja/section-3/lesson-3_\343\203\210\343\203\254\343\202\270\343\203\243\343\203\252\343\203\274\343\201\250\346\212\225\347\245\250\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\201\244\343\201\217\343\202\215\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-3/lesson-3_\343\203\210\343\203\254\343\202\270\343\203\243\343\203\252\343\203\274\343\201\250\346\212\225\347\245\250\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\201\244\343\201\217\343\202\215\343\201\206.md" @@ -22,7 +22,7 @@ DAOの運営のために使われるガバナンストークンは素晴らし それでは早速、`src/scripts/8-deploy-vote.ts`を作成し、以下のコードを追加しましょう。 -```typescript +```ts import sdk from "./1-initialize-sdk"; import { ERCTokenAddress } from "./module"; @@ -143,7 +143,7 @@ ENSでは、供給量の50% がコミュニティ、25% はエアドロッ それでは、`src/scripts/9-setup-vote.ts`を作成し、以下のコードを追加しましょう。 -```typescript +```ts import sdk from "./1-initialize-sdk"; import { ERCTokenAddress, governanceAddress } from "./module"; diff --git "a/docs/ETH-DAO/ja/section-3/lesson-4_\343\203\227\343\203\255\343\203\235\343\203\274\343\202\266\343\203\253\343\201\253\346\212\225\347\245\250\343\201\247\343\201\215\343\202\213\343\202\210\343\201\206\343\201\253\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-DAO/ja/section-3/lesson-4_\343\203\227\343\203\255\343\203\235\343\203\274\343\202\266\343\203\253\343\201\253\346\212\225\347\245\250\343\201\247\343\201\215\343\202\213\343\202\210\343\201\206\343\201\253\343\201\227\343\202\210\343\201\206.md" index 068e9b8d6..f2ed41a2c 100644 --- "a/docs/ETH-DAO/ja/section-3/lesson-4_\343\203\227\343\203\255\343\203\235\343\203\274\343\202\266\343\203\253\343\201\253\346\212\225\347\245\250\343\201\247\343\201\215\343\202\213\343\202\210\343\201\206\343\201\253\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-3/lesson-4_\343\203\227\343\203\255\343\203\235\343\203\274\343\202\266\343\203\253\343\201\253\346\212\225\347\245\250\343\201\247\343\201\215\343\202\213\343\202\210\343\201\206\343\201\253\343\201\227\343\202\210\343\201\206.md" @@ -4,7 +4,7 @@ まず、`src/scripts/10-create-vote-proposals.ts`を作成し、以下のとおりコードを変更します。 -```typescript +```ts import { ethers } from "ethers"; import sdk from "./1-initialize-sdk"; @@ -122,7 +122,7 @@ Done in 54.29s. まず、`Proposal`をインポートします。 -```typescript +```ts import { Proposal } from "@thirdweb-dev/sdk"; ``` @@ -130,14 +130,14 @@ import { Proposal } from "@thirdweb-dev/sdk"; ※ あなたのアドレスを設定することを忘れないでください! -```typescript +```ts // 投票コントラクトの初期化 const vote = useContract("INSERT_VOTE_ADDRESS", "vote").contract; ``` さらに、`const [memberAddresses, setMemberAddresses] = useState...`の下に新しい`useState`を追加します。 -```typescript +```ts const [proposals, setProposals] = useState([]); const [isVoting, setIsVoting] = useState(false); const [hasVoted, setHasVoted] = useState(false); @@ -145,7 +145,7 @@ const [hasVoted, setHasVoted] = useState(false); さいごに、`shortenAddress`関数の下に以下のコードを追加します。 -```typescript +```ts // コントラクトから既存の提案を全て取得します useEffect(() => { if (!hasClaimedNFT) { @@ -218,13 +218,13 @@ useEffect(() => { まず、以下の`AddressZero`をインポートします。 -```typescript +```ts import { AddressZero } from "@ethersproject/constants"; ``` 続いて、DAOダッシュボード画面を表示している`else if (hasClaimedNFT) {...}`の中身を以下のコードに置き換えます。 -```typescript +```ts return (
diff --git "a/docs/ETH-DAO/ja/section-4/lesson-1_\347\256\241\347\220\206\346\250\251\351\231\220\343\202\222\350\247\243\351\231\244\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-DAO/ja/section-4/lesson-1_\347\256\241\347\220\206\346\250\251\351\231\220\343\202\222\350\247\243\351\231\244\343\201\227\343\202\210\343\201\206.md" index ebb8f078e..86d734e59 100644 --- "a/docs/ETH-DAO/ja/section-4/lesson-1_\347\256\241\347\220\206\346\250\251\351\231\220\343\202\222\350\247\243\351\231\244\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-4/lesson-1_\347\256\241\347\220\206\346\250\251\351\231\220\343\202\222\350\247\243\351\231\244\343\201\227\343\202\210\343\201\206.md" @@ -10,33 +10,32 @@ それでは早速、`src/scripts/11-revoke-roles.ts`を作成し、以下のとおりコードを変更します。 -```typescript -import sdk from './1-initialize-sdk'; -import { ERCTokenAddress } from './module'; +```ts +import sdk from "./1-initialize-sdk"; +import { ERCTokenAddress } from "./module"; -const token = sdk.getContract(ERCTokenAddress, 'token'); +const token = sdk.getContract(ERCTokenAddress, "token"); (async () => { try { // 現在のロールを記録します const allRoles = await (await token).roles.getAll(); - console.log('👀 Roles that exist right now:', allRoles); + console.log("👀 Roles that exist right now:", allRoles); // ERC-20 のコントラクトに関して、あなたのウォレットが持っている権限をすべて取り消します await (await token).roles.setAll({ admin: [], minter: [] }); console.log( - '🎉 Roles after revoking ourselves', - await (await token).roles.getAll(), + "🎉 Roles after revoking ourselves", + await (await token).roles.getAll() ); console.log( - '✅ Successfully revoked our superpowers from the ERC-20 contract', + "✅ Successfully revoked our superpowers from the ERC-20 contract" ); } catch (error) { - console.error('Failed to revoke ourselves from the DAO treasury', error); + console.error("Failed to revoke ourselves from the DAO treasury", error); } })(); - ``` それでは、ターミナルに移動し、下記コマンドを実行してみましょう。 @@ -82,44 +81,38 @@ Done in 44.18s. 参考までに、ここまで修正を重ねた`src/pages/index.tsx`は以下のとおりとなっております。 -```typescript -import { AddressZero } from '@ethersproject/constants'; -import { Sepolia } from '@thirdweb-dev/chains'; +```ts +import { AddressZero } from "@ethersproject/constants"; +import { Sepolia } from "@thirdweb-dev/chains"; import { ConnectWallet, useAddress, useChain, useContract, -} from '@thirdweb-dev/react'; -import { Proposal } from '@thirdweb-dev/sdk'; -import type { NextPage } from 'next'; -import { useEffect, useMemo, useState} from 'react'; +} from "@thirdweb-dev/react"; +import { Proposal } from "@thirdweb-dev/sdk"; +import type { NextPage } from "next"; +import { useEffect, useMemo, useState } from "react"; -import styles from '../styles/Home.module.css'; +import styles from "../styles/Home.module.css"; const Home: NextPage = () => { const address = useAddress(); - console.log('👋Wallet Address: ', address); + console.log("👋Wallet Address: ", address); const chain = useChain(); // editionDrop コントラクトを初期化 const editionDrop = useContract( - 'INSERT_EDITION_DROP_ADDRESS', - 'edition-drop', + "INSERT_EDITION_DROP_ADDRESS", + "edition-drop" ).contract; // トークンコントラクトの初期化 - const token = useContract( - 'INSERT_TOKEN_ADDRESS', - 'token', - ).contract; + const token = useContract("INSERT_TOKEN_ADDRESS", "token").contract; // 投票コントラクトの初期化 - const vote = useContract( - 'INSERT_VOTE_ADDRESS', - 'vote', - ).contract; + const vote = useContract("INSERT_VOTE_ADDRESS", "vote").contract; // ユーザーがメンバーシップ NFT を持っているかどうかを知るためのステートを定義 const [hasClaimedNFT, setHasClaimedNFT] = useState(false); @@ -131,7 +124,9 @@ const Home: NextPage = () => { const [memberTokenAmounts, setMemberTokenAmounts] = useState([]); // DAO メンバーのアドレスをステートで宣言 - const [memberAddresses, setMemberAddresses] = useState([]); + const [memberAddresses, setMemberAddresses] = useState( + [] + ); const [proposals, setProposals] = useState([]); const [isVoting, setIsVoting] = useState(false); @@ -139,7 +134,7 @@ const Home: NextPage = () => { // アドレスの長さを省略してくれる便利な関数 const shortenAddress = (str: string) => { - return str.substring(0, 6) + '...' + str.substring(str.length - 4); + return str.substring(0, 6) + "..." + str.substring(str.length - 4); }; // コントラクトから既存の提案を全て取得します @@ -153,9 +148,9 @@ const Home: NextPage = () => { try { const proposals = await vote!.getAll(); setProposals(proposals); - console.log('🌈 Proposals:', proposals); + console.log("🌈 Proposals:", proposals); } catch (error) { - console.log('failed to get proposals', error); + console.log("failed to get proposals", error); } }; getAllProposals(); @@ -174,19 +169,21 @@ const Home: NextPage = () => { const checkIfUserHasVoted = async () => { try { - const hasVoted = await vote!.hasVoted(proposals[0].proposalId.toString(), address); + const hasVoted = await vote!.hasVoted( + proposals[0].proposalId.toString(), + address + ); setHasVoted(hasVoted); if (hasVoted) { - console.log('🥵 User has already voted'); + console.log("🥵 User has already voted"); } else { - console.log('🙂 User has not voted yet'); + console.log("🙂 User has not voted yet"); } } catch (error) { - console.error('Failed to check if wallet has voted', error); + console.error("Failed to check if wallet has voted", error); } }; checkIfUserHasVoted(); - }, [hasClaimedNFT, proposals, address, vote]); // メンバーシップを保持しているメンバーの全アドレスを取得します @@ -198,13 +195,12 @@ const Home: NextPage = () => { // 先ほどエアドロップしたユーザーがここで取得できます(発行された tokenchainID 0 のメンバーシップ NFT) const getAllAddresses = async () => { try { - const memberAddresses = await editionDrop?.history.getAllClaimerAddresses( - 0 - ); + const memberAddresses = + await editionDrop?.history.getAllClaimerAddresses(0); setMemberAddresses(memberAddresses); - console.log('🚀 Members addresses', memberAddresses); + console.log("🚀 Members addresses", memberAddresses); } catch (error) { - console.error('failed to get member list', error); + console.error("failed to get member list", error); } }; getAllAddresses(); @@ -220,9 +216,9 @@ const Home: NextPage = () => { try { const amounts = await token?.history.getAllHolderBalances(); setMemberTokenAmounts(amounts); - console.log('👜 Amounts', amounts); + console.log("👜 Amounts", amounts); } catch (error) { - console.error('failed to get member balances', error); + console.error("failed to get member balances", error); } }; getAllBalances(); @@ -235,12 +231,12 @@ const Home: NextPage = () => { // その場合、ユーザーが持っているトークンの量を返します // それ以外の場合は 0 を返します const member = memberTokenAmounts?.find( - ({ holder }: {holder: string}) => holder === address, + ({ holder }: { holder: string }) => holder === address ); return { address, - tokenAmount: member?.balance.displayValue || '0', + tokenAmount: member?.balance.displayValue || "0", }; }); }, [memberAddresses, memberTokenAmounts]); @@ -256,14 +252,14 @@ const Home: NextPage = () => { const balance = await editionDrop!.balanceOf(address, 0); if (balance.gt(0)) { setHasClaimedNFT(true); - console.log('🌟 this user has a membership NFT!'); + console.log("🌟 this user has a membership NFT!"); } else { setHasClaimedNFT(false); console.log("😭 this user doesn't have a membership NFT."); } } catch (error) { setHasClaimedNFT(false); - console.error('Failed to get balance', error); + console.error("Failed to get balance", error); } }; // 関数を実行 @@ -273,14 +269,14 @@ const Home: NextPage = () => { const mintNft = async () => { try { setIsClaiming(true); - await editionDrop!.claim('0', 1); + await editionDrop!.claim("0", 1); console.log( `🌊Successfully Minted! Check it out on etherscan: https://sepolia.etherscan.io/address/${editionDrop!.getAddress()}/0` ); setHasClaimedNFT(true); } catch (error) { setHasClaimedNFT(false); - console.error('Failed to mint NFT', error); + console.error("Failed to mint NFT", error); } finally { setIsClaiming(false); } @@ -291,9 +287,7 @@ const Home: NextPage = () => { return (
-

- Welcome to Tokyo Sauna Collective !! -

+

Welcome to Tokyo Sauna Collective !!

@@ -303,8 +297,8 @@ const Home: NextPage = () => { } // テストネットが Sepolia ではなかった場合に警告を表示 else if (chain && chain.chainId !== Sepolia.chainId) { - console.log('wallet address: ', address); - console.log('chain name: ', chain.name); + console.log("wallet address: ", address); + console.log("chain name: ", chain.name); return (
@@ -318,12 +312,12 @@ const Home: NextPage = () => { } // ユーザーがすでに NFT を要求している場合は、内部 DAO ページを表示します // これは DAO メンバーだけが見ることができ、すべてのメンバーとすべてのトークン量をレンダリングします - else if (hasClaimedNFT){ + else if (hasClaimedNFT) { return (
-

🍪DAO Member Page

-

Congratulations on being a member

+

🍪DAO Member Page

+

Congratulations on being a member

■ Member List

@@ -364,7 +358,7 @@ const Home: NextPage = () => { }; proposal.votes.forEach((vote) => { const elem = document.getElementBychainId( - proposal.proposalId + '-' + vote.type + proposal.proposalId + "-" + vote.type ) as HTMLInputElement; if (elem!.checked) { @@ -410,15 +404,15 @@ const Home: NextPage = () => { ); // 投票成功と判定する setHasVoted(true); - console.log('successfully voted'); + console.log("successfully voted"); } catch (err) { - console.error('failed to execute votes', err); + console.error("failed to execute votes", err); } } catch (err) { - console.error('failed to vote', err); + console.error("failed to vote", err); } } catch (err) { - console.error('failed to delegate tokens'); + console.error("failed to delegate tokens"); } finally { setIsVoting(false); } @@ -432,13 +426,13 @@ const Home: NextPage = () => {
-
@@ -449,16 +443,16 @@ const Home: NextPage = () => {

{!hasVoted && ( - This will trigger multiple transactions that you will need to - sign. + This will trigger multiple transactions that you will need + to sign. )} @@ -475,7 +469,7 @@ const Home: NextPage = () => {

Mint your free 🍪DAO Membership NFT

@@ -489,43 +483,44 @@ export default Home; ### 🧙‍♂️ テストを作成・実行する ここまでの作業でコントラクトには基本機能として以下の機能が追加されました。 -* NFTをmintする機能 -* トークン,ガバナンストークンをデプロイする機能 -* NFT,トークン,ガバナンストークンの情報を取得する機能 -* NFT,トークン,ガバナンストークンに操作を加える機能 + +- NFTをmintする機能 +- トークン,ガバナンストークンをデプロイする機能 +- NFT,トークン,ガバナンストークンの情報を取得する機能 +- NFT,トークン,ガバナンストークンに操作を加える機能 これらの基本機能をテストスクリプトとして記述していきましょう。 ではsrcディレクトリの中に`test`ディレクトリを作成し、その中に`test.ts`という名前でファイルを作成して、以下のように記述しましょう。 -```typescript -import { AddressZero } from '@ethersproject/constants'; -import { ThirdwebSDK } from '@thirdweb-dev/sdk'; -import assert from 'assert'; -import ethers from 'ethers'; -import { describe, it } from 'node:test'; +```ts +import { AddressZero } from "@ethersproject/constants"; +import { ThirdwebSDK } from "@thirdweb-dev/sdk"; +import assert from "assert"; +import ethers from "ethers"; +import { describe, it } from "node:test"; import { editionDropAddress, ERCTokenAddress, governanceAddress, ownerWalletAddress, -} from '../scripts/module.js'; +} from "../scripts/module.js"; -describe('ETH-DAO test', function () { +describe("ETH-DAO test", function () { // テスト用のウォレットを作成 const demoWallet = ethers.Wallet.createRandom(); // テスト用のPublic RPC Endpointを設定 - const demoAlchemyRPCEndpoint = 'https://eth-sepolia.g.alchemy.com/v2/demo'; + const demoAlchemyRPCEndpoint = "https://eth-sepolia.g.alchemy.com/v2/demo"; const sdk = new ThirdwebSDK( new ethers.Wallet( demoWallet.privateKey, - ethers.getDefaultProvider(demoAlchemyRPCEndpoint), - ), + ethers.getDefaultProvider(demoAlchemyRPCEndpoint) + ) ); // 1-initialize-sdk.tsのテスト - it('sdk is working', async function () { + it("sdk is working", async function () { // sdkからアドレスを取得 const address = await sdk.getSigner()?.getAddress(); @@ -534,12 +529,12 @@ describe('ETH-DAO test', function () { }); // edition-drop, ERC1155-token, governance-tokenの3つのコントラクトを取得 - const editionDrop = sdk.getContract(editionDropAddress, 'edition-drop'); - const token = sdk.getContract(ERCTokenAddress, 'token'); - const vote = sdk.getContract(governanceAddress, 'vote'); + const editionDrop = sdk.getContract(editionDropAddress, "edition-drop"); + const token = sdk.getContract(ERCTokenAddress, "token"); + const vote = sdk.getContract(governanceAddress, "vote"); // 2-deploy-drop.tsのテスト - it('metadata is set', async function () { + it("metadata is set", async function () { // メタデータを取得 const metadata = await (await editionDrop).metadata.get(); @@ -551,7 +546,7 @@ describe('ETH-DAO test', function () { }); // 3-config-nft.tsのテスト - it('NFT is minted', async function () { + it("NFT is minted", async function () { // 最初にmintされたNFTの情報を取得する const NFTInfo = await (await editionDrop).get(0); @@ -560,36 +555,36 @@ describe('ETH-DAO test', function () { }); // 4-set-claim-condition.tsのテスト - it('NFT condition is set', async function () { + it("NFT condition is set", async function () { // トークンに与えられた条件を取得する const condition = await ( await editionDrop - ).erc1155.claimConditions.getActive('0'); + ).erc1155.claimConditions.getActive("0"); // 条件として与えられたものの一つであるNFTの価格が0であることを確認する assert.equal(condition.price.toNumber(), 0); }); // 5-deploy-token.tsのテスト - it('token contract is deployed', async function () { + it("token contract is deployed", async function () { // トークンに与えられた情報を取得する const tokenInfo = await (await token).balance(); // トークンのシンボルがTSCとなっているか確認する - assert.equal(tokenInfo.symbol, 'TSC'); + assert.equal(tokenInfo.symbol, "TSC"); }); // 6-print-money.tsのテスト - it('token is minted', async function () { + it("token is minted", async function () { // トークンの情報を取得する const tokenInfo = await (await token).totalSupply(); // トークンの合計が1e+24となっているか確認する - assert.equal(Number(tokenInfo.value).toString(), '1e+24'); + assert.equal(Number(tokenInfo.value).toString(), "1e+24"); }); // 7-airdrop-token.tsのテスト - it('token is transfered', async function () { + it("token is transfered", async function () { // このコントラクトのオーナーに与えられているトークンの合計を確認する const balance = await (await token).balanceOf(ownerWalletAddress); @@ -597,20 +592,20 @@ describe('ETH-DAO test', function () { const fixedBalance = Number(balance.value).toString(); // コントラクトのトークンの合計が1e+22となっているか確認 - assert.equal(fixedBalance, '1e+22'); + assert.equal(fixedBalance, "1e+22"); }); // 8-deploy-vote.tsのテスト - it('vote contract has right info', async function () { + it("vote contract has right info", async function () { // 投票コントラクトのメタデータを取得 const metadata = await (await vote).metadata.get(); // 投票コントラクトに正しく情報が入っているか確認 - assert.equal(metadata.name, 'My amazing DAO'); + assert.equal(metadata.name, "My amazing DAO"); }); // 9-setup-vote.tsのテスト - it('vote contract has as 9 times much tokens as owner has', async function () { + it("vote contract has as 9 times much tokens as owner has", async function () { // ウォレットのトークン残高を取得します const ownedTokenBalance = ( await (await token).balanceOf(ownerWalletAddress) @@ -626,19 +621,19 @@ describe('ETH-DAO test', function () { }); // 10-create-vote-proposals.tsのテスト - it('vote contract has proposal', async function () { + it("vote contract has proposal", async function () { // 投票コントラクトに挙げられた提案を取得します const proposal = (await (await vote).getAll())[0]; // 投票コントラクトへ提案がされているか確認する assert.equal( proposal.description, - 'Should the DAO mint an additional 420000 tokens into the treasury?', + "Should the DAO mint an additional 420000 tokens into the treasury?" ); }); // 11-revoke-roles.tsのテスト - it('token role is passed to contract', async function () { + it("token role is passed to contract", async function () { // 投票コントラクトに挙げられた提案を取得します const roles = await (await token).roles.getAll(); @@ -646,7 +641,7 @@ describe('ETH-DAO test', function () { assert.equal(roles.admin, [].toString()); }); - console.log('test'); + console.log("test"); }); ``` diff --git "a/docs/ETH-DAO/ja/section-4/lesson-2_\343\202\242\343\203\203\343\203\227\343\202\260\343\203\254\343\203\274\343\203\211\343\201\227\343\201\237WEB\343\202\242\343\203\227\343\203\252\343\202\222Vercel\343\201\253\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-DAO/ja/section-4/lesson-2_\343\202\242\343\203\203\343\203\227\343\202\260\343\203\254\343\203\274\343\203\211\343\201\227\343\201\237WEB\343\202\242\343\203\227\343\203\252\343\202\222Vercel\343\201\253\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" index e2c44085c..2c2397a15 100644 --- "a/docs/ETH-DAO/ja/section-4/lesson-2_\343\202\242\343\203\203\343\203\227\343\202\260\343\203\254\343\203\274\343\203\211\343\201\227\343\201\237WEB\343\202\242\343\203\227\343\203\252\343\202\222Vercel\343\201\253\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-DAO/ja/section-4/lesson-2_\343\202\242\343\203\203\343\203\227\343\202\260\343\203\254\343\203\274\343\203\211\343\201\227\343\201\237WEB\343\202\242\343\203\227\343\203\252\343\202\222Vercel\343\201\253\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" @@ -34,7 +34,7 @@ Vercelに関する詳しい説明は、[こちら](https://zenn.dev/lollipop_onl `next.config.js`では、全てのコードを以下のとおり更新します。 -```javascript +```js /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, diff --git "a/docs/ETH-NFT-Collection/ja/section-1/lesson-3_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247NFT\343\202\222mint\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-NFT-Collection/ja/section-1/lesson-3_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247NFT\343\202\222mint\343\201\227\343\202\210\343\201\206.md" index f47ebcd24..964d1e7ca 100644 --- "a/docs/ETH-NFT-Collection/ja/section-1/lesson-3_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247NFT\343\202\222mint\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-NFT-Collection/ja/section-1/lesson-3_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247NFT\343\202\222mint\343\201\227\343\202\210\343\201\206.md" @@ -122,7 +122,7 @@ classの概念については、[ここ](https://aiacademy.jp/media/?p=131)を `scripts/deploy.js`ファイルを、以下の内容に書き換えてください。 -```javascript +```js // deploy.js async function main() { // コントラクトがコンパイルします @@ -133,7 +133,7 @@ async function main() { // コントラクトが Mint され、ローカルのブロックチェーンにデプロイされるまで待ちます。 await nftContract.deployed(); console.log("Contract deployed to:", nftContract.address); -}; +} main().catch((error) => { console.error(error); @@ -143,7 +143,7 @@ main().catch((error) => { 一行ずつコードを見ていきましょう。 -```javascript +```js // deploy.js const nftContractFactory = await hre.ethers.getContractFactory("MyEpicNFT"); ``` @@ -164,7 +164,7 @@ const nftContractFactory = await hre.ethers.getContractFactory("MyEpicNFT"); > > つまり、`hre.ethers.getContractFactory("MyEpicNFT")`の処理が終わるまで、`main`関数の中に記載されている他の処理は実行されないということです。 -```javascript +```js // deploy.js const nftContract = await nftContractFactory.deploy(); ``` @@ -175,7 +175,7 @@ HardhatがローカルのEthereumネットワークを、コントラクトの - 常にゼロリセットとなるので、エラーのデバッグがしやすくなります。 -```javascript +```js // deploy.js await nftContract.deployed(); ``` @@ -185,7 +185,7 @@ Hardhatは実際にあなたのマシン上に「マイナー」を作成し、 最後に、デプロイされると、`nftContract.address`はデプロイされたコントラクトのアドレスを出力します。 -```javascript +```js console.log("Contract deployed to:", nftContract.address); ``` diff --git "a/docs/ETH-NFT-Collection/ja/section-1/lesson-4_NFT\343\202\222\347\231\272\350\241\214\343\201\231\343\202\213\343\202\271\343\203\236\343\203\274\343\203\210\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\344\275\234\343\202\215\343\201\206.md" "b/docs/ETH-NFT-Collection/ja/section-1/lesson-4_NFT\343\202\222\347\231\272\350\241\214\343\201\231\343\202\213\343\202\271\343\203\236\343\203\274\343\203\210\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\344\275\234\343\202\215\343\201\206.md" index 57985e940..d6d60665c 100644 --- "a/docs/ETH-NFT-Collection/ja/section-1/lesson-4_NFT\343\202\222\347\231\272\350\241\214\343\201\231\343\202\213\343\202\271\343\203\236\343\203\274\343\203\210\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\344\275\234\343\202\215\343\201\206.md" +++ "b/docs/ETH-NFT-Collection/ja/section-1/lesson-4_NFT\343\202\222\347\231\272\350\241\214\343\201\231\343\202\213\343\202\271\343\203\236\343\203\274\343\203\210\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\344\275\234\343\202\215\343\201\206.md" @@ -214,7 +214,7 @@ _setTokenURI(newItemId, "Valuable data!"); 最後に、下記のコードを見ていきましょう。 -```javascript +```js console.log("An NFT w/ ID %s has been minted to %s", newItemId, msg.sender); ``` @@ -296,7 +296,7 @@ _setTokenURI( `scripts/deploy.js`ファイルを下記のように変更しましょう。 -```javascript +```js // deploy.js async function main() { const nftContractFactory = await hre.ethers.getContractFactory("MyEpicNFT"); @@ -461,7 +461,7 @@ contracts test 下記のように、`hardhat.config.js`の中身を更新します。 -```javascript +```js // hardhat.config.js require("@nomicfoundation/hardhat-toolbox"); diff --git "a/docs/ETH-NFT-Collection/ja/section-2/lesson-3_\343\203\226\343\203\255\343\203\203\343\202\257\343\203\201\343\202\247\343\203\274\343\203\263\344\270\212\343\201\247\345\213\225\347\232\204\343\201\252SVG\343\202\222\344\275\234\343\202\215\343\201\206.md" "b/docs/ETH-NFT-Collection/ja/section-2/lesson-3_\343\203\226\343\203\255\343\203\203\343\202\257\343\203\201\343\202\247\343\203\274\343\203\263\344\270\212\343\201\247\345\213\225\347\232\204\343\201\252SVG\343\202\222\344\275\234\343\202\215\343\201\206.md" index 2374ad612..9d8694ad2 100644 --- "a/docs/ETH-NFT-Collection/ja/section-2/lesson-3_\343\203\226\343\203\255\343\203\203\343\202\257\343\203\201\343\202\247\343\203\274\343\203\263\344\270\212\343\201\247\345\213\225\347\232\204\343\201\252SVG\343\202\222\344\275\234\343\202\215\343\201\206.md" +++ "b/docs/ETH-NFT-Collection/ja/section-2/lesson-3_\343\203\226\343\203\255\343\203\203\343\202\257\343\203\201\343\202\247\343\203\274\343\203\263\344\270\212\343\201\247\345\213\225\347\232\204\343\201\252SVG\343\202\222\344\275\234\343\202\215\343\201\206.md" @@ -274,7 +274,7 @@ packages/ 続いて、作成した`MyEpicNFT.js`に以下のコードを書き込みます。 -```javascript +```js const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); const { ethers } = require("hardhat"); const { expect } = require("chai"); @@ -351,7 +351,7 @@ describe("MyEpicNFT", function () { その中で定義している文字列の配列は、ご自身が`MyEpicNFT`コントラクト内で定義したものと一致するように適宜変更してください。 -```javascript +```js // コントラクト内で使用する単語の配列を定義します。 const firstWords = [ "Epic", @@ -367,7 +367,7 @@ const thirdWords = ["Kitten", "Puppy", "Monkey", "Bird", "Panda", "Elephant"]; `deployMyEpicNFTFixture`関数の後に続く3つの`describe`ブロックが、実際に`MyEpicNFT`コントラクト内の各関数を呼び出してテストを行なっている部分になります。 -```javascript +```js describe("pickRandomFirstWord", function () { it("should get strings in firstWords", async function () { // テストの準備を行います。 @@ -815,7 +815,7 @@ NFT Previewを使用すれば、テストネットにデプロイしなくても - 変更点は、2つ目のNFT発行を削除しているだけです。 -```javascript +```js // deploy.js async function main() { // コントラクトがコンパイルします diff --git "a/docs/ETH-NFT-Collection/ja/section-3/lesson-2_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\202\222WEB\343\202\242\343\203\227\343\203\252\343\201\253\346\216\245\347\266\232\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-NFT-Collection/ja/section-3/lesson-2_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\202\222WEB\343\202\242\343\203\227\343\203\252\343\201\253\346\216\245\347\266\232\343\201\227\343\202\210\343\201\206.md" index dcc674cf2..804ce5b89 100644 --- "a/docs/ETH-NFT-Collection/ja/section-3/lesson-2_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\202\222WEB\343\202\242\343\203\227\343\203\252\343\201\253\346\216\245\347\266\232\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-NFT-Collection/ja/section-3/lesson-2_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\202\222WEB\343\202\242\343\203\227\343\203\252\343\201\253\346\216\245\347\266\232\343\201\227\343\202\210\343\201\206.md" @@ -12,7 +12,7 @@ Webアプリケーション上で、ユーザーがイーサリアムネット - `App.js`はあなたのWebアプリケーションのフロントエンド機能を果たします。 -```javascript +```js // App.js import React, { useEffect } from "react"; import "./styles/App.css"; @@ -73,7 +73,7 @@ export default App; 新しく追加したコードを見ていきましょう。 -```javascript +```js // App.js // ユーザーがMetaMaskを持っているか確認します。 const { ethereum } = window; @@ -117,7 +117,7 @@ Consoleに`We have the ethereum object`と表示されているでしょうか 以下の通り、`App.js`を修正してください。 -```javascript +```js // App.js // useEffect と useState 関数を React.js からインポートしています。 import React, { useEffect, useState } from "react"; @@ -200,7 +200,7 @@ export default App; 新しく追加したコードを見ていきましょう。 -```javascript +```js // App.js // ユーザーのウォレットアドレスを格納するために使用する状態変数を定義します。 const [currentAccount, setCurrentAccount] = useState(""); @@ -212,7 +212,7 @@ console.log("currentAccount: ", currentAccount); 以下で`currentAccount`を更新しています。 -```javascript +```js // App.js // accountsにWEBサイトを訪れたユーザーのウォレットアカウントを格納する(複数持っている場合も加味、よって account's' と変数を定義している) const accounts = await ethereum.request({ method: "eth_accounts" }); @@ -236,7 +236,7 @@ if (accounts.length !== 0) { 下記の通り`App.js`を更新していきましょう。 -```javascript +```js // App.js // useEffect と useState 関数を React.js からインポートしています。 import React, { useEffect, useState } from "react"; @@ -358,7 +358,7 @@ export default App; **1 \. `connectWallet`メソッドを実装** -```javascript +```js // App.js const connectWallet = async () => { try { @@ -382,7 +382,7 @@ const connectWallet = async () => { **2 \. `renderNotConnectedContainer`メソッドを実装** -```javascript +```js // App.js const renderNotConnectedContainer = () => (
@@ -286,7 +286,7 @@ const imageToNFT = async (e) => { `imageToNFT`関数について解説していきます! -```javascript +```js // NftUploader.jsx const imageToNFT = async (e) => { const client = new Web3Storage({ token: API_KEY }) @@ -310,14 +310,14 @@ const imageToNFT = async (e) => { `NftUploader.jsx`に戻って、API_KEYを定義しましょう。 -```javascript +```js // NftUploader.jsx const API_KEY = "あなたのKEYをいれてください"; ``` 次は、下記のコードを解説します。 -```javascript +```js // NftUploader.jsx const rootCid = await client.put(image.files, { name: "experiment", @@ -331,7 +331,7 @@ const rootCid = await client.put(image.files, { 次は、下記のコードを解説します。 -```javascript +```js // NftUploader.jsx const res = await client.get(rootCid); // Web3Response const files = await res.files(); // Web3File[] diff --git "a/docs/ETH-NFT-Maker/ja/section-4/lesson-1_Web\343\202\242\343\203\227\343\203\252\343\202\222\343\202\242\343\203\203\343\203\227\343\203\207\343\203\274\343\203\210\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-NFT-Maker/ja/section-4/lesson-1_Web\343\202\242\343\203\227\343\203\252\343\202\222\343\202\242\343\203\203\343\203\227\343\203\207\343\203\274\343\203\210\343\201\227\343\202\210\343\201\206.md" index 5a7ffd209..60e73a780 100644 --- "a/docs/ETH-NFT-Maker/ja/section-4/lesson-1_Web\343\202\242\343\203\227\343\203\252\343\202\222\343\202\242\343\203\203\343\203\227\343\203\207\343\203\274\343\203\210\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-NFT-Maker/ja/section-4/lesson-1_Web\343\202\242\343\203\227\343\203\252\343\202\222\343\202\242\343\203\203\343\203\227\343\203\207\343\203\274\343\203\210\343\201\227\343\202\210\343\201\206.md" @@ -1,4 +1,5 @@ ### 🪄 MVP = web3Mint.sol × NftUploader.jsx + 今回のプロジェクトのMVP(=最小限の機能を備えたプロダクト)を構築するweb3Mint.solとNftUploader.jsxのスクリプトを共有します。 見やすいように少し整理整頓してあります 🧹✨ @@ -63,59 +64,60 @@ contract Web3Mint is ERC721 { } } ``` + **`NftUploader.jsx`はこちら:** -```javascript -import { Button } from '@mui/material'; -import { ethers } from 'ethers'; -import React from 'react'; -import { useEffect, useState } from 'react' -import { Web3Storage } from 'web3.storage' +```js +import { Button } from "@mui/material"; +import { ethers } from "ethers"; +import React from "react"; +import { useEffect, useState } from "react"; +import { Web3Storage } from "web3.storage"; -import Web3Mint from '../../utils/Web3Mint.json'; -import ImageLogo from './image.svg'; -import './NftUploader.css'; +import Web3Mint from "../../utils/Web3Mint.json"; +import ImageLogo from "./image.svg"; +import "./NftUploader.css"; const NftUploader = () => { /* * ユーザーのウォレットアドレスを格納するために使用する状態変数を定義します。 */ - const [currentAccount, setCurrentAccount] = useState(''); + const [currentAccount, setCurrentAccount] = useState(""); /*この段階でcurrentAccountの中身は空*/ - console.log('currentAccount: ', currentAccount); + console.log("currentAccount: ", currentAccount); const checkIfWalletIsConnected = async () => { const { ethereum } = window; if (!ethereum) { - console.log('Make sure you have MetaMask!'); + console.log("Make sure you have MetaMask!"); return; } else { - console.log('We have the ethereum object', ethereum); + console.log("We have the ethereum object", ethereum); } - const accounts = await ethereum.request({ method: 'eth_accounts' }); + const accounts = await ethereum.request({ method: "eth_accounts" }); if (accounts.length !== 0) { const account = accounts[0]; - console.log('Found an authorized account:', account); + console.log("Found an authorized account:", account); setCurrentAccount(account); } else { - console.log('No authorized account found'); + console.log("No authorized account found"); } }; - const connectWallet = async () =>{ + const connectWallet = async () => { try { const { ethereum } = window; if (!ethereum) { - alert('Get MetaMask!'); + alert("Get MetaMask!"); return; } /* * ウォレットアドレスに対してアクセスをリクエストしています。 */ const accounts = await ethereum.request({ - method: 'eth_requestAccounts', + method: "eth_requestAccounts", }); - console.log('Connected', accounts[0]); + console.log("Connected", accounts[0]); /* * ウォレットアドレスを currentAccount に紐付けます。 */ @@ -126,8 +128,7 @@ const NftUploader = () => { }; const askContractToMintNft = async (ipfs) => { - const CONTRACT_ADDRESS = - '0x35558364D864EAAcE19c10d84437969F133eDf12'; + const CONTRACT_ADDRESS = "0x35558364D864EAAcE19c10d84437969F133eDf12"; try { const { ethereum } = window; if (ethereum) { @@ -138,9 +139,9 @@ const NftUploader = () => { Web3Mint.abi, signer ); - console.log('Going to pop wallet now to pay gas...'); - let nftTxn = await connectedContract.mintIpfsNFT('sample',ipfs); - console.log('Mining...please wait.'); + console.log("Going to pop wallet now to pay gas..."); + let nftTxn = await connectedContract.mintIpfsNFT("sample", ipfs); + console.log("Mining...please wait."); await nftTxn.wait(); console.log( `Mined, see transaction: https://sepolia.etherscan.io/tx/${nftTxn.hash}` @@ -153,12 +154,14 @@ const NftUploader = () => { } }; - const renderNotConnectedContainer = () => ( - - ); + + ); /* * ページがロードされたときに useEffect()内の関数が呼び出されます。 */ @@ -166,28 +169,29 @@ const NftUploader = () => { checkIfWalletIsConnected(); }, []); - const API_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkaWQ6ZXRocjoweGU4MTQxMmVkYTk5NUI5NjMzMDIwNTYxRDkzMTRhNGE5NEQyMDIyNTQiLCJpc3MiOiJ3ZWIzLXN0b3JhZ2UiLCJpYXQiOjE2NDkzMTE5NzIxNjYsIm5hbWUiOiJzYW1wbGUifQ.1q2qbS-4FgjREAr_wVE0QtRI68QLEfPQdPO-B-7ixjg'; + const API_KEY = + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkaWQ6ZXRocjoweGU4MTQxMmVkYTk5NUI5NjMzMDIwNTYxRDkzMTRhNGE5NEQyMDIyNTQiLCJpc3MiOiJ3ZWIzLXN0b3JhZ2UiLCJpYXQiOjE2NDkzMTE5NzIxNjYsIm5hbWUiOiJzYW1wbGUifQ.1q2qbS-4FgjREAr_wVE0QtRI68QLEfPQdPO-B-7ixjg"; const imageToNFT = async (e) => { - const client = new Web3Storage({ token: API_KEY }) - const image = e.target - console.log(image) + const client = new Web3Storage({ token: API_KEY }); + const image = e.target; + console.log(image); const rootCid = await client.put(image.files, { - name: 'experiment', - maxRetries: 3 - }) - const res = await client.get(rootCid) // Web3Response - const files = await res.files() // Web3File[] + name: "experiment", + maxRetries: 3, + }); + const res = await client.get(rootCid); // Web3Response + const files = await res.files(); // Web3File[] for (const file of files) { - console.log('file.cid:',file.cid) - askContractToMintNft(file.cid) + console.log("file.cid:", file.cid); + askContractToMintNft(file.cid); } -} + }; return (
- {currentAccount === '' ? ( + {currentAccount === "" ? ( renderNotConnectedContainer() ) : (

If you choose image, you can mint your NFT

@@ -200,12 +204,24 @@ const NftUploader = () => { imagelogo

ここにドラッグ&ドロップしてね

- +

または

); @@ -232,13 +248,13 @@ MVPを起点にWebアプリケーションを自分の好きなようにアッ 下記のコードを`NftUploader.jsx`に組み込んでみましょう。 -```javascript +```js // NftUploader.jsx -let chainId = await ethereum.request({ method: 'eth_chainId' }); -console.log('Connected to chain ' + chainId); +let chainId = await ethereum.request({ method: "eth_chainId" }); +console.log("Connected to chain " + chainId); -if (chainId !== '11155111') { - alert('You are not connected to the sepolia Test Network!'); +if (chainId !== "11155111") { + alert("You are not connected to the sepolia Test Network!"); } ``` diff --git "a/docs/ETH-NFT-Maker/ja/section-4/lesson-2_Vercel\343\202\222\344\275\277\343\201\243\343\201\246\343\202\242\343\203\227\343\203\252\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-NFT-Maker/ja/section-4/lesson-2_Vercel\343\202\222\344\275\277\343\201\243\343\201\246\343\202\242\343\203\227\343\203\252\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" index 2fb743a30..f092d4a5f 100644 --- "a/docs/ETH-NFT-Maker/ja/section-4/lesson-2_Vercel\343\202\222\344\275\277\343\201\243\343\201\246\343\202\242\343\203\227\343\203\252\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-NFT-Maker/ja/section-4/lesson-2_Vercel\343\202\222\344\275\277\343\201\243\343\201\246\343\202\242\343\203\227\343\203\252\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" @@ -41,7 +41,7 @@ STAGING_ALCHEMY_KEY=https://... `.env`を更新したら、 `hardhat.config.js`ファイルを次のように更新してください。 -```javascript +```js require("@nomicfoundation/hardhat-toolbox"); require("dotenv").config(); module.exports = { diff --git "a/docs/ETH-Yield-Farm/ja/section-2/lesson-3_\343\203\210\343\203\274\343\202\257\343\203\263\343\201\256\347\231\272\350\241\214\343\200\201\343\202\242\343\203\263\343\202\271\343\203\206\343\203\274\343\202\255\343\203\263\343\202\260\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-Yield-Farm/ja/section-2/lesson-3_\343\203\210\343\203\274\343\202\257\343\203\263\343\201\256\347\231\272\350\241\214\343\200\201\343\202\242\343\203\263\343\202\271\343\203\206\343\203\274\343\202\255\343\203\263\343\202\260\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" index 2bddd41af..3e0a8907d 100644 --- "a/docs/ETH-Yield-Farm/ja/section-2/lesson-3_\343\203\210\343\203\274\343\202\257\343\203\263\343\201\256\347\231\272\350\241\214\343\200\201\343\202\242\343\203\263\343\202\271\343\203\206\343\203\274\343\202\255\343\203\263\343\202\260\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-Yield-Farm/ja/section-2/lesson-3_\343\203\210\343\203\274\343\202\257\343\203\263\343\201\256\347\231\272\350\241\214\343\200\201\343\202\242\343\203\263\343\202\271\343\203\206\343\203\274\343\202\255\343\203\263\343\202\260\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" @@ -1,54 +1,55 @@ -### 🖥 このレッスンの参考動画URL +### 🖥 このレッスンの参考動画 URL + [Dapp University](https://youtu.be/CgXQC4dbGUE?t=5089) ### 🧙‍♂️ テストを作成・実行する ここまでの作業でコントラクトには基本機能として以下の機能が追加されました。 -* 2種類のトークンの作成 -* トークンをステーキングする機能 -* トークンをアンステーキングする機能 +- 2種類のトークンの作成 +- トークンをステーキングする機能 +- トークンをアンステーキングする機能 これらの基本機能をテストスクリプトとして記述していきましょう。 ではpackages/contract/testに`test.js`という名前でファイルを作成して、以下のように記述しましょう。 -```javascript -const hre = require('hardhat'); -const { assert, expect } = require('chai'); -const web3 = require('web3'); -const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers'); +```js +const hre = require("hardhat"); +const { assert, expect } = require("chai"); +const web3 = require("web3"); +const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); function tokens(n) { - return web3.utils.toWei(n, 'ether'); + return web3.utils.toWei(n, "ether"); } // eslint-disable-next-line no-undef -describe('TokenFarm', () => { +describe("TokenFarm", () => { async function deployTokenFixture() { const [owner, investor] = await hre.ethers.getSigners(); // コントラクトのdeploy const daitokenContractFactory = await hre.ethers.getContractFactory( - 'DaiToken', + "DaiToken" ); const dapptokenContractFactory = await hre.ethers.getContractFactory( - 'DappToken', + "DappToken" ); const tokenfarmContractFactory = await hre.ethers.getContractFactory( - 'TokenFarm', + "TokenFarm" ); const daiToken = await daitokenContractFactory.deploy(); const dappToken = await dapptokenContractFactory.deploy(); const tokenFarm = await tokenfarmContractFactory.deploy( dappToken.address, - daiToken.address, + daiToken.address ); // 全てのDappトークンをファームに移動する(1 million) - await dappToken.transfer(tokenFarm.address, tokens('1000000')); + await dappToken.transfer(tokenFarm.address, tokens("1000000")); - await daiToken.transfer(investor.address, tokens('100')); + await daiToken.transfer(investor.address, tokens("100")); return { owner, @@ -60,39 +61,39 @@ describe('TokenFarm', () => { } // テスト1 - describe('Mock DAI deployment', () => { - it('has a name', async () => { + describe("Mock DAI deployment", () => { + it("has a name", async () => { const { daiToken } = await loadFixture(deployTokenFixture); const name = await daiToken.name(); - assert.equal(name, 'Mock DAI Token'); + assert.equal(name, "Mock DAI Token"); }); }); // テスト2 - describe('Dapp Token deployment', async () => { - it('has a name', async () => { + describe("Dapp Token deployment", async () => { + it("has a name", async () => { const { dappToken } = await loadFixture(deployTokenFixture); const name = await dappToken.name(); - assert.equal(name, 'DApp Token'); + assert.equal(name, "DApp Token"); }); }); - describe('Token Farm deployment', async () => { + describe("Token Farm deployment", async () => { // テスト3 - it('has a name', async () => { + it("has a name", async () => { const { tokenFarm } = await loadFixture(deployTokenFixture); const name = await tokenFarm.name(); - assert.equal(name, 'Dapp Token Farm'); + assert.equal(name, "Dapp Token Farm"); }); // テスト4 - it('contract has tokens', async () => { + it("contract has tokens", async () => { const { dappToken, tokenFarm } = await loadFixture(deployTokenFixture); const balance = await dappToken.balanceOf(tokenFarm.address); - assert.equal(balance.toString(), tokens('1000000')); + assert.equal(balance.toString(), tokens("1000000")); }); }); - describe('Farming tokens', async () => { - it('rewards investors for staking mDai tokens', async () => { + describe("Farming tokens", async () => { + it("rewards investors for staking mDai tokens", async () => { const { daiToken, dappToken, tokenFarm, investor, owner } = await loadFixture(deployTokenFixture); let result; @@ -101,46 +102,46 @@ describe('TokenFarm', () => { result = await daiToken.balanceOf(investor.address); assert.equal( result.toString(), - tokens('100'), - 'investor Mock DAI wallet balance correct before staking', + tokens("100"), + "investor Mock DAI wallet balance correct before staking" ); // テスト6. 偽のDAIトークンを確認する await daiToken .connect(investor) - .approve(tokenFarm.address, tokens('100')); - await tokenFarm.connect(investor).stakeTokens(tokens('100')); + .approve(tokenFarm.address, tokens("100")); + await tokenFarm.connect(investor).stakeTokens(tokens("100")); // テスト7. ステーキング後の投資家の残高を確認する result = await daiToken.balanceOf(investor.address); assert.equal( result.toString(), - tokens('0'), - 'investor Mock DAI wallet balance correct after staking', + tokens("0"), + "investor Mock DAI wallet balance correct after staking" ); // テスト8. ステーキング後のTokenFarmの残高を確認する result = await daiToken.balanceOf(tokenFarm.address); assert.equal( result.toString(), - tokens('100'), - 'Token Farm Mock DAI balance correct after staking', + tokens("100"), + "Token Farm Mock DAI balance correct after staking" ); // テスト9. 投資家がTokenFarmにステーキングした残高を確認する result = await tokenFarm.stakingBalance(investor.address); assert.equal( result.toString(), - tokens('100'), - 'investor staking balance correct after staking', + tokens("100"), + "investor staking balance correct after staking" ); // テスト10. ステーキングを行った投資家の状態を確認する result = await tokenFarm.isStaking(investor.address); assert.equal( result.toString(), - 'true', - 'investor staking status correct after staking', + "true", + "investor staking status correct after staking" ); // ----- 追加するテストコード ------ // @@ -152,46 +153,46 @@ describe('TokenFarm', () => { result = await dappToken.balanceOf(investor.address); assert.equal( result.toString(), - tokens('100'), - 'investor DApp Token wallet balance correct after staking', + tokens("100"), + "investor DApp Token wallet balance correct after staking" ); // あなた(owner)のみがトークンを発行できることを確認する(もしあなた以外の人がトークンを発行しようとした場合、却下される) await expect(tokenFarm.connect(investor).issueTokens()).to.be.reverted; // トークンをアンステーキングする - await tokenFarm.connect(investor).unstakeTokens(tokens('60')); + await tokenFarm.connect(investor).unstakeTokens(tokens("60")); // テスト11. アンステーキングの結果を確認する result = await daiToken.balanceOf(investor.address); assert.equal( result.toString(), - tokens('60'), - 'investor Mock DAI wallet balance correct after staking', + tokens("60"), + "investor Mock DAI wallet balance correct after staking" ); // テスト12.投資家がアンステーキングした後の Token Farm 内に存在する偽の Dai 残高を確認する result = await daiToken.balanceOf(tokenFarm.address); assert.equal( result.toString(), - tokens('40'), - 'Token Farm Mock DAI balance correct after staking', + tokens("40"), + "Token Farm Mock DAI balance correct after staking" ); // テスト13. 投資家がアンステーキングした後の投資家の残高を確認する result = await tokenFarm.stakingBalance(investor.address); assert.equal( result.toString(), - tokens('40'), - 'investor staking status correct after staking', + tokens("40"), + "investor staking status correct after staking" ); // テスト14. 投資家がアンステーキングした後の投資家の状態を確認する result = await tokenFarm.isStaking(investor.address); assert.equal( result.toString(), - 'false', - 'investor staking status correct after staking', + "false", + "investor staking status correct after staking" ); }); }); @@ -201,9 +202,11 @@ describe('TokenFarm', () => { `追加するテストコード`の中身をよく見てみてください。 ここでのポイントは、`approve`関数を呼び出して、`investor`を`TokenFarm`の承認済みユーザとして登録している点です。 + - `approve`関数について復習したい方は、section 1のlesson 2を参照してください! `approve`関数が実行されることにより、`investor`は自身のトークンをToken Farmにステークできるようになります。 + ### 🔥 テストを実行する それでは、ターミナルで下記のコマンドを実行しすることでテストしていきましょう! @@ -212,7 +215,7 @@ describe('TokenFarm', () => { yarn test ``` -以下のような結果がターミナルに出力されていれば成功です🎉 +以下のような結果がターミナルに出力されていれば成功です 🎉 ``` Contract: TokenFarm @@ -236,9 +239,9 @@ Contract: TokenFarm ではpackages/contract/scriptsに`deploy.js`という名前でファイルを作成して、以下のように記述しましょう。 -```javascript -const hre = require('hardhat'); -const web3 = require('web3'); +```js +const hre = require("hardhat"); +const web3 = require("web3"); async function main() { // コントラクトをdeployしているアドレスの取得 @@ -246,31 +249,31 @@ async function main() { // コントラクトのdeploy const daitokenContractFactory = await hre.ethers.getContractFactory( - 'DaiToken', + "DaiToken" ); const dapptokenContractFactory = await hre.ethers.getContractFactory( - 'DappToken', + "DappToken" ); const tokenfarmContractFactory = await hre.ethers.getContractFactory( - 'TokenFarm', + "TokenFarm" ); const daiToken = await daitokenContractFactory.deploy(); const dappToken = await dapptokenContractFactory.deploy(); const tokenFarm = await tokenfarmContractFactory.deploy( dappToken.address, - daiToken.address, + daiToken.address ); // 全てのDappトークンをファームに移動する(1 million) await dappToken.transfer( tokenFarm.address, - web3.utils.toWei('1000000', 'ether'), + web3.utils.toWei("1000000", "ether") ); - console.log('Deploying contracts with account: ', deployer.address); - console.log('Dai Token Contract has been deployed to: ', daiToken.address); - console.log('Dapp Token Contract has been deployed to: ', dappToken.address); - console.log('TokenFarm Contract has been deployed to: ', tokenFarm.address); + console.log("Deploying contracts with account: ", deployer.address); + console.log("Dai Token Contract has been deployed to: ", daiToken.address); + console.log("Dapp Token Contract has been deployed to: ", dappToken.address); + console.log("TokenFarm Contract has been deployed to: ", tokenFarm.address); } // We recommend this pattern to be able to use async/await everywhere @@ -293,6 +296,7 @@ dApp用のトークンはアンステーキングのときに投資家の方に "deploy": "npx hardhat run scripts/deploy.js --network sepolia" }, ``` + その後ルートディレクトリにいることを確認して、ターミナル上で下記を実行してみましょう。 では下記のコマンドを実行してコントラクトをdeployしましょう! @@ -327,6 +331,7 @@ TokenFarm Contract has been deployed to: 0x3f8237063F68F034BF25Cf096B164486eCD0 ``` --- -これでバックエンドの作成は完了です!お疲れ様でした🎉 + +これでバックエンドの作成は完了です!お疲れ様でした 🎉 ターミナルの出力結果を`#ethereum`にシェアしましょう! -次のセクションではフロントエンドの作成に取り掛かっていきます。Token Farmの完成まで後少しです!頑張っていきましょう💪 +次のセクションではフロントエンドの作成に取り掛かっていきます。Token Farmの完成まで後少しです!頑張っていきましょう 💪 diff --git "a/docs/ETH-Yield-Farm/ja/section-3/lesson-1_\343\203\225\343\203\255\343\203\263\343\203\210\343\202\250\343\203\263\343\203\211\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-Yield-Farm/ja/section-3/lesson-1_\343\203\225\343\203\255\343\203\263\343\203\210\343\202\250\343\203\263\343\203\211\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" index 3cbff220f..6a92b6fe4 100644 --- "a/docs/ETH-Yield-Farm/ja/section-3/lesson-1_\343\203\225\343\203\255\343\203\263\343\203\210\343\202\250\343\203\263\343\203\211\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-Yield-Farm/ja/section-3/lesson-1_\343\203\225\343\203\255\343\203\263\343\203\210\343\202\250\343\203\263\343\203\211\343\202\222\345\256\237\350\243\205\343\201\227\343\202\210\343\201\206.md" @@ -112,7 +112,7 @@ yarn client start jsonファイルのコピー & ペーストが完了したら、`App.js`ファイルを以下のように更新してください。 -```javascript +```js import { ethers } from "ethers"; import React, { useEffect, useState } from "react"; @@ -278,7 +278,7 @@ export default App; では接続の確認部分を解説していきます。 -```javascript +```js const checkIfWalletIsConnected = async () => { try { const { ethereum } = window; @@ -311,7 +311,7 @@ const checkIfWalletIsConnected = async () => { 次にウォレット接続部分を確認しましょう。 -```javascript +```js // ウォレットに接続する関数 const connectWallet = async () => { try { diff --git "a/docs/ETH-Yield-Farm/ja/section-3/lesson-2_\343\203\225\343\203\255\343\203\263\343\203\210\343\202\222\343\202\242\343\203\203\343\203\227\343\202\260\343\203\254\343\203\274\343\203\211\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-Yield-Farm/ja/section-3/lesson-2_\343\203\225\343\203\255\343\203\263\343\203\210\343\202\222\343\202\242\343\203\203\343\203\227\343\202\260\343\203\254\343\203\274\343\203\211\343\201\227\343\202\210\343\201\206.md" index bfcd52c42..700fdd8e7 100644 --- "a/docs/ETH-Yield-Farm/ja/section-3/lesson-2_\343\203\225\343\203\255\343\203\263\343\203\210\343\202\222\343\202\242\343\203\203\343\203\227\343\202\260\343\203\254\343\203\274\343\203\211\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-Yield-Farm/ja/section-3/lesson-2_\343\203\225\343\203\255\343\203\263\343\203\210\343\202\222\343\202\242\343\203\203\343\203\227\343\202\260\343\203\254\343\203\274\343\203\211\343\201\227\343\202\210\343\201\206.md" @@ -10,7 +10,7 @@ 23~25行目の部分には、コントラクトのデプロイ時に出てくるアドレスをそれぞれ対応する変数に代入してください。 -```javascript +```js import { ethers } from "ethers"; import React, { useEffect, useState } from "react"; diff --git "a/docs/ETH-dApp/ja/section-1/lesson-1_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247\343\202\244\343\203\274\343\202\265\343\203\252\343\202\242\343\203\240\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\343\202\222\347\253\213\343\201\241\344\270\212\343\201\222\343\202\210\343\201\206.md" "b/docs/ETH-dApp/ja/section-1/lesson-1_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247\343\202\244\343\203\274\343\202\265\343\203\252\343\202\242\343\203\240\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\343\202\222\347\253\213\343\201\241\344\270\212\343\201\222\343\202\210\343\201\206.md" index 2e0a65dfd..c11b9a724 100644 --- "a/docs/ETH-dApp/ja/section-1/lesson-1_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247\343\202\244\343\203\274\343\202\265\343\203\252\343\202\242\343\203\240\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\343\202\222\347\253\213\343\201\241\344\270\212\343\201\222\343\202\210\343\201\206.md" +++ "b/docs/ETH-dApp/ja/section-1/lesson-1_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247\343\202\244\343\203\274\343\202\265\343\203\252\343\202\242\343\203\240\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\343\202\222\347\253\213\343\201\241\344\270\212\343\201\222\343\202\210\343\201\206.md" @@ -221,7 +221,7 @@ hardhatの自動テストを実行するためのコマンドを追加しまし **(変更前)** -```javascript +```js const { time, loadFixture, @@ -230,7 +230,7 @@ const { **(変更後)** -```javascript +```js const { time, loadFixture, @@ -241,13 +241,13 @@ const { **(変更前)** -```javascript +```js expect(await ethers.provider.getBalance(lock.target)).to.equal(lockedAmount); ``` **(変更後)** -```javascript +```js expect(await ethers.provider.getBalance(lock.address)).to.equal(lockedAmount); ``` diff --git "a/docs/ETH-dApp/ja/section-1/lesson-3_\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247\343\202\263\343\203\263\343\203\221\343\202\244\343\203\253\343\201\227\343\201\246\345\256\237\350\241\214\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-dApp/ja/section-1/lesson-3_\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247\343\202\263\343\203\263\343\203\221\343\202\244\343\203\253\343\201\227\343\201\246\345\256\237\350\241\214\343\201\227\343\202\210\343\201\206.md" index 5e5a3642c..1deca071f 100644 --- "a/docs/ETH-dApp/ja/section-1/lesson-3_\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247\343\202\263\343\203\263\343\203\221\343\202\244\343\203\253\343\201\227\343\201\246\345\256\237\350\241\214\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-dApp/ja/section-1/lesson-3_\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\247\343\202\263\343\203\263\343\203\221\343\202\244\343\203\253\343\201\227\343\201\246\345\256\237\350\241\214\343\201\227\343\202\210\343\201\206.md" @@ -20,13 +20,13 @@ `run.js`の中身に、以下を記入しましょう。 -```javascript +```js const main = async () => { - const waveContractFactory = await hre.ethers.getContractFactory('WavePortal'); + const waveContractFactory = await hre.ethers.getContractFactory("WavePortal"); const waveContract = await waveContractFactory.deploy(); const wavePortal = await waveContract.deployed(); - console.log('WavePortal address: ', wavePortal.address); + console.log("WavePortal address: ", wavePortal.address); }; const runMain = async () => { @@ -44,8 +44,8 @@ runMain(); それでは、1行ずつコードの理解を深めましょう。 -```javascript -const waveContractFactory = await hre.ethers.getContractFactory('WavePortal'); +```js +const waveContractFactory = await hre.ethers.getContractFactory("WavePortal"); ``` これにより、`WavePortal`コントラクトがコンパイルされます。 @@ -68,7 +68,7 @@ const waveContractFactory = await hre.ethers.getContractFactory('WavePortal'); 次に、下記の処理を見ていきましょう。 -```javascript +```js const waveContract = await waveContractFactory.deploy(); ``` @@ -82,7 +82,7 @@ HardhatがローカルのEthereumネットワークを、コントラクトの 次に下記の処理を見ていきましょう。 -```javascript +```js const wavePortal = await waveContract.deployed(); ``` @@ -94,8 +94,8 @@ Hardhatは実際にあなたのマシン上に「マイナー」を作成し、 最後に、下記の処理を見ていきましょう。 -```javascript -console.log('WavePortal address:', wavePortal.address); +```js +console.log("WavePortal address:", wavePortal.address); ``` 最後に、デプロイされると、`wavePortal.address`はデプロイされたコントラクトのアドレスを出力します。 @@ -119,6 +119,7 @@ console.log('WavePortal address:', wavePortal.address); "deploy": "npx hardhat run scripts/deploy.js --network sepolia" }, ``` + その後ルートディレクトリにいることを確認して、ターミナル上で下記を実行してみましょう。 ``` diff --git "a/docs/ETH-dApp/ja/section-1/lesson-4_\343\202\271\343\203\236\343\203\274\343\203\210\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\201\253\343\203\207\343\203\274\343\202\277\343\202\222\344\277\235\345\255\230\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-dApp/ja/section-1/lesson-4_\343\202\271\343\203\236\343\203\274\343\203\210\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\201\253\343\203\207\343\203\274\343\202\277\343\202\222\344\277\235\345\255\230\343\201\227\343\202\210\343\201\206.md" index d0b8ffcae..7c3021f05 100644 --- "a/docs/ETH-dApp/ja/section-1/lesson-4_\343\202\271\343\203\236\343\203\274\343\203\210\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\201\253\343\203\207\343\203\274\343\202\277\343\202\222\344\277\235\345\255\230\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-dApp/ja/section-1/lesson-4_\343\202\271\343\203\236\343\203\274\343\203\210\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\201\253\343\203\207\343\203\274\343\202\277\343\202\222\344\277\235\345\255\230\343\201\227\343\202\210\343\201\206.md" @@ -150,7 +150,7 @@ function getTotalWaves() public view returns (uint256) { 次に、`run.js`を以下のように更新していきます。 -```javascript +```js const main = async () => { const [owner, randomPerson] = await hre.ethers.getSigners(); const waveContractFactory = await hre.ethers.getContractFactory("WavePortal"); @@ -193,7 +193,7 @@ runMain(); 更新された部分を1行ずつ見ていきましょう。 -```javascript +```js const [owner, randomPerson] = await hre.ethers.getSigners(); ``` @@ -207,13 +207,13 @@ const [owner, randomPerson] = await hre.ethers.getSigners(); 次に、下記のコードを見ていきましょう。 -```javascript +```js console.log("Contract deployed to:", wavePortal.address); ``` ここでは、あなたのスマートコントラクトのデプロイ先のアドレス(= `wavePortal.address`)をターミナルに出力しています。 -```javascript +```js console.log("Contract deployed by:", owner.address); ``` @@ -221,7 +221,7 @@ console.log("Contract deployed by:", owner.address); 最後に、下記のコードを見ていきましょう。 -```javascript +```js let waveCount; waveCount = await waveContract.getTotalWaves(); @@ -233,7 +233,7 @@ waveCount = await waveContract.getTotalWaves(); ここでは、通常のAPIと同じように、関数を手動で呼び出しています。1行ずつ見ていきましょう。 -```javascript +```js let waveCount; waveCount = await waveContract.getTotalWaves(); ``` @@ -242,7 +242,7 @@ waveCount = await waveContract.getTotalWaves(); 次に、`waveContract.getTotalWaves()`で`WavePortal.sol`に記載された`getTotalWaves()`を呼び出し、既存の「👋(wave)」の総数を取得します。 -```javascript +```js let waveTxn = await waveContract.wave(); await waveTxn.wait(); ``` @@ -257,7 +257,7 @@ MetaMaskを使っていて、取引を承認するために数秒手間どった 承認が終わったら、`await waveTxn.wait()`が実行され、トランザクションの結果を取得します。コードが冗長に感じるかもしれませんが、大事な処理です。 -```javascript +```js waveCount = await waveContract.getTotalWaves(); ``` @@ -303,7 +303,7 @@ We have 1 total waves! 下記を`run.js`に反映させて、ターミナルにどのような結果がでるかテストしてみましょう。 -```javascript +```js const main = async () => { const [owner, randomPerson] = await hre.ethers.getSigners(); const waveContractFactory = await hre.ethers.getContractFactory("WavePortal"); @@ -342,7 +342,7 @@ runMain(); `run.js`に追加されたコードは以下になります。確認していきましょう。 -```javascript +```js waveTxn = await waveContract.connect(randomPerson).wave(); await waveTxn.wait(); waveCount = await waveContract.getTotalWaves(); @@ -353,13 +353,13 @@ waveCount = await waveContract.getTotalWaves(); - `randomPerson`には、Hardhatが取得したランダムなアドレスが格納されています。 - `randomPerson`は、このシミュレーションのために存在していたのです。 -```javascript +```js waveTxn = await waveContract.connect(randomPerson).wave(); ``` ここでは、`.connect(randomPerson)`を用いて、ほかのユーザーがあなたに「👋(wave)」を送った状態をシミュレーションしています。 -```javascript +```js await waveTxn.wait(); waveCount = await waveContract.getTotalWaves(); ``` @@ -395,7 +395,7 @@ We have 2 total waves! 下記のように`run.js`に`randomPerson`を追加すると、さらにもう一人追加して、シミュレーションを行うこともできます。 -```javascript +```js const [owner, randomPerson1, randomPerson2] = await hre.ethers.getSigners(); ``` diff --git "a/docs/ETH-dApp/ja/section-1/lesson-5_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\253\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-dApp/ja/section-1/lesson-5_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\253\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" index bd04cce75..f17e7b1ad 100644 --- "a/docs/ETH-dApp/ja/section-1/lesson-5_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\253\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-dApp/ja/section-1/lesson-5_\343\203\255\343\203\274\343\202\253\343\203\253\347\222\260\345\242\203\343\201\253\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" @@ -24,6 +24,7 @@ ``` では下のコマンドを実行してみましょう。 + ``` yarn contract start ``` @@ -40,18 +41,18 @@ yarn contract start - `run.js`がテスト用のプログラムなら、`deploy.js`は本番用です。 -```javascript +```js const main = async () => { const [deployer] = await hre.ethers.getSigners(); const accountBalance = await deployer.getBalance(); - const waveContractFactory = await hre.ethers.getContractFactory('WavePortal'); + const waveContractFactory = await hre.ethers.getContractFactory("WavePortal"); const waveContract = await waveContractFactory.deploy(); - const wavePortal = await waveContract.deployed() + const wavePortal = await waveContract.deployed(); - console.log('Deploying contracts with account: ', deployer.address); - console.log('Account balance: ', accountBalance.toString()); - console.log('Contract deployed to: ', wavePortal.address); - console.log('Contract deployed by: ', deployer.address); + console.log("Deploying contracts with account: ", deployer.address); + console.log("Account balance: ", accountBalance.toString()); + console.log("Contract deployed to: ", wavePortal.address); + console.log("Contract deployed by: ", deployer.address); }; const runMain = async () => { @@ -124,6 +125,7 @@ Contract deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3 ``` ここには、**あなたのスマートコントラクトのデプロイ先のアドレス**が表示されています。 + ### 🙋‍♂️ 質問する ここまでの作業で何かわからないことがある場合は、Discordの`#ethereum`で質問をしてください。 diff --git "a/docs/ETH-dApp/ja/section-2/lesson-1_\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\206\343\202\271\343\203\210\343\203\215\343\203\203\343\203\210\343\201\253\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-dApp/ja/section-2/lesson-1_\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\206\343\202\271\343\203\210\343\203\215\343\203\203\343\203\210\343\201\253\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" index 04152a98f..8e2f7a22e 100644 --- "a/docs/ETH-dApp/ja/section-2/lesson-1_\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\206\343\202\271\343\203\210\343\203\215\343\203\203\343\203\210\343\201\253\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-dApp/ja/section-2/lesson-1_\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\343\203\206\343\202\271\343\203\210\343\203\215\343\203\203\343\203\210\343\201\253\343\203\207\343\203\227\343\203\255\343\202\244\343\201\227\343\202\210\343\201\206.md" @@ -120,7 +120,7 @@ README.md artifacts cache contracts hardhat. `hardhat.config.js`をVS Codeで開いて、中身を編集していきます。 -```javascript +```js require("@nomicfoundation/hardhat-toolbox"); module.exports = { diff --git "a/docs/ETH-dApp/ja/section-2/lesson-2_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\202\222WEB\343\202\242\343\203\227\343\203\252\343\201\253\346\216\245\347\266\232\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-dApp/ja/section-2/lesson-2_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\202\222WEB\343\202\242\343\203\227\343\203\252\343\201\253\346\216\245\347\266\232\343\201\227\343\202\210\343\201\206.md" index fab296004..8d5f5d0c4 100644 --- "a/docs/ETH-dApp/ja/section-2/lesson-2_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\202\222WEB\343\202\242\343\203\227\343\203\252\343\201\253\346\216\245\347\266\232\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-dApp/ja/section-2/lesson-2_\343\202\246\343\202\251\343\203\254\343\203\203\343\203\210\343\202\222WEB\343\202\242\343\203\227\343\203\252\343\201\253\346\216\245\347\266\232\343\201\227\343\202\210\343\201\206.md" @@ -10,7 +10,7 @@ Webアプリケーション上で、ユーザーがイーサリアムネット - `App.js`はあなたのWebアプリケーションのフロントエンド機能を果たします。 -```javascript +```js import React, { useEffect } from "react"; import "./App.css"; @@ -95,7 +95,7 @@ Consoleに`We have the ethereum object`と表示されているでしょうか 下記のように、`App.js`の中身を更新します。 -```javascript +```js import React, { useEffect, useState } from "react"; import "./App.css"; @@ -166,7 +166,7 @@ export default App; 新しく追加したコードを見ていきます。 -```javascript +```js /* ユーザーのウォレットへのアクセスが許可されているかどうかを確認します */ const accounts = await ethereum.request({ method: "eth_accounts" }); if (accounts.length !== 0) { @@ -199,7 +199,7 @@ yarn client start > ✍️: Console の結果を見てわかること > `App.js`に記載されているコードは上から順を追って走っているので、最初に`currentAccount`の状態変数を定義したときには、中身が空であることがわかります。 -> ```javascript +> ```js > // App.js > const [currentAccount, setCurrentAccount] = useState(""); > /*この段階でcurrentAccountの中身は空*/ @@ -238,7 +238,7 @@ yarn client start `connectWallet`ボタンを作成していきます。 -```javascript +```js import React, { useEffect, useState } from "react"; import "./App.css"; @@ -339,7 +339,7 @@ export default App; **1 \. `connectWallet`メソッドを実装** -```javascript +```js const connectWallet = async () => { try { // ユーザーが認証可能なウォレットアドレスを持っているか確認 @@ -362,7 +362,7 @@ const connectWallet = async () => { **2 \. ウォレットコネクトのボタンを実装** -```javascript +```js // currentAccountが存在しない場合は、「Connect Wallet」ボタンを実装 { !currentAccount && ( diff --git "a/docs/ETH-dApp/ja/section-2/lesson-3_WEB\343\202\242\343\203\227\343\203\252\343\201\213\343\202\211\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\345\221\274\343\201\263\345\207\272\343\201\235\343\201\206.md" "b/docs/ETH-dApp/ja/section-2/lesson-3_WEB\343\202\242\343\203\227\343\203\252\343\201\213\343\202\211\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\345\221\274\343\201\263\345\207\272\343\201\235\343\201\206.md" index 7261cea9f..13476687d 100644 --- "a/docs/ETH-dApp/ja/section-2/lesson-3_WEB\343\202\242\343\203\227\343\203\252\343\201\213\343\202\211\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\345\221\274\343\201\263\345\207\272\343\201\235\343\201\206.md" +++ "b/docs/ETH-dApp/ja/section-2/lesson-3_WEB\343\202\242\343\203\227\343\203\252\343\201\213\343\202\211\343\202\263\343\203\263\343\203\210\343\203\251\343\202\257\343\203\210\343\202\222\345\221\274\343\201\263\345\207\272\343\201\235\343\201\206.md" @@ -13,7 +13,7 @@ `App.js`を以下のように更新して、フロントエンドから`getTotalWaves`関数へアクセスできるようにします。 -```javascript +```js /* ethers 変数を使えるようにする*/ import { ethers } from "ethers"; import React, { useEffect, useState } from "react"; @@ -140,7 +140,7 @@ export default App; **1 \. ethers 変数を使えるようにする** -```javascript +```js import { ethers } from "ethers"; ``` @@ -148,7 +148,7 @@ import { ethers } from "ethers"; **2 \. wave の回数をカウントする関数を実装する** -```javascript +```js const wave = async () => { try { // ユーザーがMetaMaskを持っているか確認 @@ -177,7 +177,7 @@ const wave = async () => { **I\. `provider`** -> ```javascript +> ```js > const provider = new ethers.providers.Web3Provider(ethereum); > ``` > @@ -189,7 +189,7 @@ const wave = async () => { **II\. `signer`** -> ```javascript +> ```js > const signer = provider.getSigner(); > ``` > @@ -201,7 +201,7 @@ const wave = async () => { **III\. コントラクトインスタンス** -> ```javascript +> ```js > const wavePortalContract = new ethers.Contract( > contractAddress, > contractABI, @@ -270,7 +270,7 @@ yarn contract deploy `const [currentAccount, setCurrentAccount] = useState('')`の直下に`contractAddress`を作成しましょう。以下のようになります。 -```javascript +```js const [currentAccount, setCurrentAccount] = useState(""); /* * デプロイされたコントラクトのアドレスを保持する変数を作成 @@ -338,7 +338,7 @@ ABIファイルの準備ができたので、`App.js`にインポートしまし 下記のように`App.js`を更新します。 -```javascript +```js /* ethers 変数を使えるようにする*/ import { ethers } from "ethers"; import React, { useEffect, useState } from "react"; @@ -502,7 +502,7 @@ export default App; コントラクトアドレスをご自身のものに更新するのをお忘れなく! -```javascript +```js const contractAddress = "あなたのコントラクトアドレスを貼り付けてください"; ``` @@ -510,19 +510,19 @@ const contractAddress = "あなたのコントラクトアドレスを貼り付 **1 \. ABI ファイルを含む WavePortal.json ファイルをインポートする** -```javascript +```js import abi from "./utils/WavePortal.json"; ``` **2 \. ABI の内容を参照する変数を作成** -```javascript +```js const contractABI = abi.abi; ``` ABIの参照先を確認しましょう。`wave`関数の中に実装されています。 -```javascript +```js const wave = async () => { try { const { ethereum } = window; @@ -554,7 +554,7 @@ ABIファイルを`App.js`に追加すると、フロントエンドで`Wave`ボ コントラクトにデータを書き込むためのコードを実装しました。 -```javascript +```js const wave = async () => { try { const { ethereum } = window; diff --git "a/docs/ETH-dApp/ja/section-3/lesson-1_\343\203\226\343\203\255\343\203\203\343\202\257\343\203\201\343\202\247\343\203\274\343\203\263\344\270\212\343\201\253\343\203\207\343\203\274\343\202\277\343\202\222\344\277\235\345\255\230\343\201\227\343\202\210\343\201\206.md" "b/docs/ETH-dApp/ja/section-3/lesson-1_\343\203\226\343\203\255\343\203\203\343\202\257\343\203\201\343\202\247\343\203\274\343\203\263\344\270\212\343\201\253\343\203\207\343\203\274\343\202\277\343\202\222\344\277\235\345\255\230\343\201\227\343\202\210\343\201\206.md" index ad21a0b67..1eff2135e 100644 --- "a/docs/ETH-dApp/ja/section-3/lesson-1_\343\203\226\343\203\255\343\203\203\343\202\257\343\203\201\343\202\247\343\203\274\343\203\263\344\270\212\343\201\253\343\203\207\343\203\274\343\202\277\343\202\222\344\277\235\345\255\230\343\201\227\343\202\210\343\201\206.md" +++ "b/docs/ETH-dApp/ja/section-3/lesson-1_\343\203\226\343\203\255\343\203\203\343\202\257\343\203\201\343\202\247\343\203\274\343\203\263\344\270\212\343\201\253\343\203\207\343\203\274\343\202\277\343\202\222\344\277\235\345\255\230\343\201\227\343\202\210\343\201\206.md" @@ -112,7 +112,7 @@ emit NewWave(msg.sender, block.timestamp, _message); `const contractABI = abi.abi;`の直下に下記を追加しましょう。 -```javascript +```js /* すべてのwavesを保存する状態変数を定義 */ const [allWaves, setAllWaves] = useState([]); @@ -193,7 +193,7 @@ useEffect(() => { `getAllWaves`関数は、`waves`関数とほぼ同じ仕様をしています。 -```javascript +```js const getAllWaves = async () => { const { ethereum } = window; @@ -230,7 +230,7 @@ const getAllWaves = async () => { まずは下記のコードを見ていきましょう。 -```javascript +```js const provider = new ethers.providers.Web3Provider(ethereum); ``` @@ -238,7 +238,7 @@ const provider = new ethers.providers.Web3Provider(ethereum); 次に、下記のコードを見ていきましょう。 -```javascript +```js const signer = provider.getSigner(); ``` @@ -246,7 +246,7 @@ const signer = provider.getSigner(); 次に、下記のコードを見ていきましょう。 -```javascript +```js const wavePortalContract = new ethers.Contract( contractAddress, contractABI, @@ -265,7 +265,7 @@ const wavePortalContract = new ethers.Contract( 最後に、下記のコードを見ていきましょう。 -```javascript +```js const wavesCleaned = waves.map((wave) => { return { address: wave.waver, @@ -283,7 +283,7 @@ const wavesCleaned = waves.map((wave) => { それでは、`onNewWave`関数を見ていきましょう。 -```javascript +```js const onNewWave = (from, timestamp, message) => { console.log("NewWave", from, timestamp, message); setAllWaves((prevState) => [ @@ -319,7 +319,7 @@ const onNewWave = (from, timestamp, message) => { 次に、下記のコードを見ていきましょう。 -```javascript +```js if (window.ethereum) { const provider = new ethers.providers.Web3Provider(window.ethereum); const signer = provider.getSigner(); @@ -342,7 +342,7 @@ if (window.ethereum) { 最後に下記のコードを見ていきましょう。 -```javascript +```js return () => { if (wavePortalContract) { /* ここに注目 */ @@ -362,7 +362,7 @@ if (window.ethereum) { 下記のように`run.js`を更新してください。 -```javascript +```js const main = async () => { const waveContractFactory = await hre.ethers.getContractFactory("WavePortal"); const waveContract = await waveContractFactory.deploy(); @@ -513,7 +513,7 @@ Contract deployed to: 0x... ← あなたのコントラクトアドレスをコ 3. Webサイトにそのデータを表示する。 -```javascript +```js /* ethers 変数を使えるようにする*/ import { ethers } from "ethers"; import React, { useEffect, useState } from "react"; @@ -770,7 +770,7 @@ export default App; 下記をReactNodeを返す関数型`App`の中に実装しました。 -```javascript +```js /* ユーザーのパブリックウォレットアドレスを保存するために使用する状態変数を定義 */ const [currentAccount, setCurrentAccount] = useState(""); /* ユーザーのメッセージを保存するために使用する状態変数を定義 */ @@ -781,21 +781,21 @@ const [allWaves, setAllWaves] = useState([]); ここでは、ユーザーの情報を保存するために使用する変数と関数を定義し、初期化しています。 -```javascript +```js const [currentAccount, setCurrentAccount] = useState(""); ``` - ユーザーのパブリックウォレットを格納する変数(= `currentAccount`) - ユーザーのパブリックウォレットを更新する関数(= `setCurrentAccount`) -```javascript +```js const [messageValue, setMessageValue] = useState(""); ``` - ユーザーのメッセージを格納する変数(= `messageValue`) - ユーザーのメッセージを更新する関数(= `setMessageValue`) -```javascript +```js const [allWaves, setAllWaves] = useState([]); ``` @@ -806,7 +806,7 @@ const [allWaves, setAllWaves] = useState([]); 詳しく見ていきましょう。 -> ```javascript +> ```js > const wavesCleaned = waves.map((wave) => { > return { > address: wave.waver, @@ -829,7 +829,7 @@ const [allWaves, setAllWaves] = useState([]); > > 最後に、`AllWaves`の状態を更新しています。 > -> ```javascript +> ```js > setAllWaves(wavesCleaned); > ``` > @@ -839,7 +839,7 @@ const [allWaves, setAllWaves] = useState([]); > 下記を実装して、トランザクションに使用できるガス代(=`gasLimit`)に制限を設けています。 > -> ```javascript +> ```js > wavePortalContract.wave(messageValue, { gasLimit: 300000 }); > ``` > @@ -876,7 +876,7 @@ const [allWaves, setAllWaves] = useState([]); 下記をフロントエンドに実装しました。 -```javascript +```js { currentAccount && (