![見出し画像](https://assets.st-note.com/production/uploads/images/95502855/rectangle_large_type_2_dedc8fb4485d2628c48252ad2d9d7c10.png?width=1200)
トランザクションを発行するBot作成の道のり その③~コントラクト・コードのプログラミングから実行まで~
はじめに
前回からの続き。
前回はすでにイーサリアムチェーンにデプロイ済みのコントラクトに対してRead系のコントラクトを実行しました。
次はWrite系のコントラクトを実行、といきたいところですがWrite系のコントラクトはNFTだとミントなど、トークンだと実際にトークン売買を行う必要があり、リアルに取引が発生します。
開発中に間違って実行したトランザクションで大損、なんてことがないようにテストをしたうえで本番のトランザクションを実行する必要があります。
今回は、テストのためにローカルPC上でコントラクトをデプロイして実行するための準備としてコントラクト・コードをプログラミングして実行するまでを行います。
スマートコントラクトの開発環境(Remix)
ローカルPC上でコントラクトをデプロイするためには、コントラクト・コードをプログラミング→コンパイル→デプロイ→実行の流れを踏む必要があります。
まず、プログラミング・コンパイルを行うための環境を用意します。
スマートコントラクトの開発言語で有名なSolidyを、オンライン上で開発できる開発環境であるWeb版のRemixを使って開発してみます。
コントラクト・コードをプログラミング
Web版RemixにアクセスするとVSCodeチックなエディタが開かれます。
左メニューの「File Exploror」から「contracts」フォルダを見ると.solファイルがいくつかあります。
これがSolidy言語で書かれたスマートコントラクトのソースコードです。
1_Storage.solを開いてみると、storeとretrieveの2つのメソッドが定義されており、storeで数値を格納してretrieveで格納した数値を返却するようになっています。
![](https://assets.st-note.com/img/1673531507356-Ph0mlBq4BO.png?width=1200)
コントラクト・コードのコンパイル
コントラクト・コードをプログラミングで1_Storage.solを作成したとして、次はコンパイルを行います。
コンパイルもRemixで行うことができます。
左メニューの「Solidity Compiler」を選択すると、「Compile 1_Storage.sol」というボタンが表示されるのでここをクリックするとコンパイルされます。
![](https://assets.st-note.com/img/1673532062530-utG6pzX9Un.png?width=1200)
コンパイルに成功すると左メニューの「Solidity Compiler」にチェックマークがつき、下のほうにABIというアイコンが表示されます。
ABIのアイコンをクリックするとこのコントラクトのABIをコピーすることができます。
トランザクション実行に必要なのが「Contract」アカウントのアドレスとABIで、ABIはContractの取り扱い説明書のようなものでしたね。
![](https://assets.st-note.com/img/1673532368220-zHOkKWgKst.png)
コンパイル済みのコントラクトのデプロイ
コントラクト・コードをコンパイルできたので、デプロイして実行していきます。
デプロイも「ひとまず」Remixで行うことができます。
「ひとまず」というのは、Remix上の実行環境はサンドボックスといわれるお試し環境なので毎回「Contract」アカウントのアドレスが変わってしまいます。
永続的に使用できるスマートコントラクトの実行環境については、次回以降で説明しますので、今回はひとまずRemix上でデプロイして動作確認をしてみます。
Remixでのデプロイは、左メニューの「Deploy」から行います。
ENVIRONMENTが実行環境で、Remix VMはRemixのサンドボックスのことです。デフォルトのままで「Deploy」をクリックしてみましょう。
![](https://assets.st-note.com/img/1673533044728-9pHXnCWIGY.png)
成功すると、下のほうに「Deployed Contracts」が表示されます。
ここで、デプロイしたスマートコントラクトを実行することができます。
STORAGE AAT 0xD91….となっている箇所は「Contract」アカウントのアドレスです。
![](https://assets.st-note.com/img/1673533193813-XwSpC6gona.png)
retrieveを実行すると最初は0が返却されます。
![](https://assets.st-note.com/img/1673533343192-KCsMIy00F8.png)
一度storeを実行した後で、retrieveを実行するとstoreした値が返却されます。
![](https://assets.st-note.com/img/1673533392363-DvMunXJeww.png)
ここまでの流れで、コントラクト・コードをプログラミング→コンパイル→デプロイ→実行までを行うことができましたが、デプロイと実行の部分でサンドボックスを使っているという課題があります。
次回はこの課題に対して実行環境を作成してPythonから実行するところまでを実施していきます。
今回参考にさせていただいたサイトはこちらです。
参考にさせていただいたっていうか、ほぼまんま。
すごくわかりやすかったのでこっち見たほうがいいまである。
https://qiita.com/abenben/items/e8b12b183de59b781283