Remixを用いたSolidityのハンズオン


概要

2019年11月20日(水)に行われた「先端情報経済AI公開講座」の備忘録です。
Rinkbyネットワークへのスマートコントラクトのデプロイを行います。

必要な環境

  • Google Chrome

セットアップ

ウォレットのインストール

ETHのウォレットであるメタマスクをインストールする

1. Chromeに追加ボタンを押す

2. Get Started ボタンを押す

当該画面が表示されていない場合は、右上のAppのボタンを押してください。

3. Create a Walletボタンを押す

4. I agreeボタンを押す

5. 必要な情報を入力する

① 任意のパスワードを入力
② 欄内に①と同様の物を入力
③ 【利用規約を読み、同意します】にチェック
作成ボタンを押す

6. パスフレーズの確認

①の部分をクリックするとパスフレーズが表示されます。
万が一の為にどこかに保存しておいてください!
他人には教えないでください。

確認が終了したら②をクリックしてください。

7. パスフレーズの確認

先ほど保存したパスフレーズを入力して、確認ボタンを押す

以上でウォレットの登録は完了です!

RinkebyテストネットでETHを取得する

FacebookやTwitterで取得する方法があるそうです。
今回はTwitterを利用します。

1. ウォレットのネットワークをRinkebyテストネットワークに変更する

①の部分を選択して、メニューが表示されたら、②のRinkedyテストネットワークを押す

2. Rinkeby Authenticated Faucetにアクセスします。

3. Twitterの投稿URLへジャンプします。

4. Twitterへの投稿

Twitterの投稿内容のアドレスの部分を自分のウォレットのアドレスに変更して投稿します。

■ 変更箇所

■ 自分のウォレットのアドレスコピー方法
 MetaMaskのアカウント情報からコピーできます。
 この際、右上のネットワークが「Rinkeby テストネットワーク」になっている事を確認してください。

5. Twitterへの投稿内容の確認

下記のTwitterで確認→ボタンを押す

6. 投稿のURLを取得する

投稿の下部のボタンからリンクを取得する

  1. 共有ボタンを押す

  2. ツイートのリンクをコピーボタンを押す

7. ETHの取得

コピーしたURLをRinkeby Authenticated Faucetの①「Social network URL containing your Ethereum address...」に入力する
②で取得したいETHを選択する

8. 確認

Chromeの右上のアプリの部分で「MetaMask」をクリックすると、ETHが取得できている事がわかる。

Remixを用いてSolidityを使ってみよう

RemixはSolidityのコンパイラ兼統合開発環境です。
バージョンアップも頻繁なので、UIは良く変更される。

1. 開発環境の設定

Remixへアクセスする

RemixのサイトへアクセスしてIDEを起動してください。

開発環境を選択する

「Home」のタブで開発環境を選択します。
Environmentsの部分のSolidityボタンを押します。

選択すると左側にSolidityのコンパイラ等の設定が表示されます。

※ 追記
「Compiler Configuration」の「Auto compile」を有効にすると、
プログラム書いている途中からコンパイルしてくれるので、どこが間違えているのかすぐわかります!
と教えていただいたので追記しておきます!

今回は、0.5.11のコンパイラを利用します。

2. コーディングしてみる

+ボタンを押し、ファイル名(今回はtest.sol)を指定して、OKを押します。

エディター部分に以下のコードを書きます。

test.sol
pragma solidity ^0.5.11;

contract Test{
    uint public num = 5;
}

3. コンパイルを行う

コードを書き終わったら、左の①部分を選択し、コンパイラの画面を開く。
その後、Compile test.solボタンを押す。

コンパイラのアイコンにチェックマークが付いた場合は、コンパイルが成功しています。

4. 自分のローカル環境にデプロイしてみる

①のボタンを押し、「DEPLOY & RUN TRANSACTIONS」を開きます。
②の「Environment」が「JavaScript VM」になっている事を確認します。
(JavaScript VMに指定する事で自分のパソコン上でデプロイすることができる)
③のDeployボタンを押すと、④の「Deployed Contracts」にコントラクトが表示される。
⑤のnumボタンを選択すると、プログラムで指定した変数の内容「5」が確認できる。

5. さらにコーディングしてみる

エディターに下記のコードを書き込む

test.sol
pragma solidity ^0.5.11;

contract Test{
    uint private num = 5;

    mapping (address=>uint) public balances;
    mapping (uint=>address) public owner;

    function getNum() public view returns(uint) {
        return num;
    }

    function setNum(uint _num) public {
        num = _num;
    }

    function setBalances(uint _num) public {
        balances[msg.sender] = _num;
    }
}

先ほどと同様にコンパイルし、デプロイしてみる。

今回は、変数numをprivateに設定したため、ここでは内容を表示できなくなっている。

setNum・getNumについての動作確認

①の欄に適当な値を書いて②のsetNumボタンを押すと変数numに記載した値が設定されます。
③のgetNumボタンを押すと先ほど設定した値が表示されると思います。

6. setBalances・balancesについての動作確認

①の欄に適当な値を入力し、②のsetBalancesボタンを押すとBalancesに値が記憶されます。
(ここら辺の動作がまだしっかり理解できていません)
③の欄に上部の「Account」の値をコピペし、④のbalancesボタンを押すと先ほどの値が表示されます。

7. Rinkebyのテストネットにデプロイする

①の「Enviroment」の欄を「Injectid Web3」に変更します。
すると、②の欄に、自分のRinkebyテストネットワークのウォレットアドレスが表示されると思います。
その後、③のDeployボタンを押してください。

すると、下記のようにGAS代についての確認画面が出るため、確認ボタンを押してください。

確認後、「Deployed Contracts」に表示が追加されればデプロイ完了です。

8. テストネットワーク上での動作確認

先ほどと同様に動作させてみましょう。
今回は、テストネットワーク上にデプロイして動作させているため、下記の操作を行う際は、GAS代が請求されます。

  • setNum
  • setBalances

下記の操作を行う際は、GAS代が請求されません。

  • balances
  • getNum
  • owner

まとめ

とても、長くなってしまいましたが、ハンズオンは以上です。
思っていたより簡単にデプロイすることができました。
簡単なDAppsとか作ってみたいと思いました!

内容が間違っている部分や書き方がおかしい部分が有りましたら、ご指摘宜しくお願い致します。