[Solidity 初心者] 勉強を始めるならこれ
どうもWeb3 開発初心者です。言語としてのSolidity 勉強、および開発環境を整えるにあたり参考にしたリソースをご紹介します。
Solidity 勉強
Solidity の勉強はこの動画一択でした。非常にわかりやすく、Remix を同様のコードを自分のブラウザで実行し、手を動かして勉強できます。
Remix はブラウザでのみ動き、環境の構築が不要なため、言語の勉強には最適でした。もっと評価されて良いです。
ブロックアカデミー様の動画プレイリストリンク
開発環境
同じ作者様の動画で、Dex 風のアプリ作成を紹介なさっていますが、少し難易度が上がっており、Web ページからチェーン上のスマートコントラクトにアクセスする部分の全体像が(私がアホなために)少し掴み辛いです。
この動画と併せて、Truffle というローカル環境でテスト用Ethereum ノードを構築可能なサービスのチュートリアルをお勧めします。
Truffle 公式Pet Shop チュートリアル
このチュートリアルでは、コントラクトの作成、デプロイ、テスト、フロントエンドの作成までカバーしてくれる優れものです。
この2つをカバーすれば、DApp 作成を体験できます。 ブロックチェーンはDB のような扱いにもできると感じることができるはず。
以下Truffle チュートリアルで、私がつまずいた点です。
つまずき1
テストスクリプト内のこの行なのですが、adopters
はアレイ address[16] public adopters
なのに、なんで[]
でインデックス指定しねえの?
const adopter = await adoption.adopters(8);
答
アレイやマッピングは()の中の数字でインデックスを指定する仕様です。例えば
contract foobar {
int public foo;
int[] public bar;
}
// foo の値取得時
foobarInstance.foo()
// 0 番目のbar の値取得時
foobarInstance.bar(0)
つまずき2
同テストスクリプト内、adopt() は1つのパラメーターしかいらないはずなのに、{ from: accounts[0] }
あなたは誰ですか。
await adoption.adopt(8, { from: accounts[0] });
答
ざっくりいうと、Solidity では追加でオブジェクトを指定可能です。
このパラメーターはトランザクションの一部を変更することが可能です。上記の例だとこのトランザクションはaccount[0]
により実行されるように指定しています。
またこのパラメーターは、最後に指定される必要があります。
つまずき3
window.ethereum あなた誰?
答
基本的に、UI 側は以下の作業を実施する必要があります。
- Ethereum プロバイダーの検知 (window.ethereum)
- どのEthereum ネットワークに接続しているかの確認
- ユーザーの Ethereum アカウント取得