---
title: "スマートコントラクトと連携する"
description: "デプロイ済みのEthereumスマートコントラクトの変数を更新し、連携する方法をステップごとに解説するガイド。"
---

# スマートコントラクトと連携する

このスマートコントラクトとの連携に関するチュートリアルを始める前に、パート1「[Hello World Smart Contract](https://www.alchemy.com/docs/how-to-deploy-a-smart-contract-to-the-sepolia-testnet)」（スマートコントラクトの作成とデプロイ）を完了しておく必要があります。パート3では、[コントラクトをEtherscanに登録する方法](https://www.alchemy.com/docs/best-practices-for-deploying-a-smart-contract-on-evm-mainnets-1)を説明します。これにより、誰でもそのコントラクトとの連携方法を理解できるようになります！

<ExternalVideo
  url="https://www.youtube.com/watch?v=sQJ-XQBzEuc&embeds_referring_euri=https%3A%2F%2Fcdn.iframe.ly%2F&source_ve_path=OTY3MTQ&feature=emb_imp_woyt&ab_channel=Alchemy"
  provider="youtube"
  providerUid="sQJ-XQBzEuc"
/>

## パート2：スマートコントラクトと連携する

ropstenネットワークへのスマートコントラクトのデプロイに成功したので、web3のスキルを試して、実際にこのコントラクトと連携してみましょう！

### ステップ1：interact.jsファイルを作成する

これが連携用のスクリプトを書くファイルです。パート1で既にインストールしたEthers.jsライブラリを使用します。

hardhatチュートリアル用の`scripts/`フォルダ内、またはTruffleチュートリアル用のホームディレクトリ内に、`interacts.js`という名前の新しいファイルを作成し、以下のコードを追加してください。

### ステップ2：.envファイルを更新する

新しい環境変数を使用するため、`.env`ファイルにそれらを定義し、`dotenv`モジュールがこれらの変数を読み込むようにする必要があります。

Alchemyの`API\_KEY`と、スマートコントラクトがデプロイされた`CONTRACT\_ADDRESS`の定義を追加する必要があります。

`.env`ファイルは以下のようになります：

### ステップ3：コントラクトABIを取得する

コントラクトABI（Application Binary Interface）は、スマートコントラクトと連携するためのインターフェースです。Contract ABIについては、[eth_getLogsの詳細解説](https://www.alchemy.com/docs/deep-dive-into-eth_getlogs)で詳しく説明しています。Hardhat（およびTruffle）はABIを自動生成し、HelloWorld.jsonファイルに保存します。

これを使用するには、`contract-interact.js`ファイルに以下のコードを追加して内容をパースする必要があります：

ABIを確認したい場合は、コンソールに出力できます：

`interact.js`を実行してABIがコンソールに出力されるのを確認するには、ターミナルで以下を実行します：

#### Hardhat：

#### Truffle：

### ステップ4：コントラクトのインスタンスを作成する

コントラクトと連携するには、コード内でそのインスタンスを作成する必要があります。Ethers.jsでこれを行うには、以下の3つの概念を扱います：

1. Provider - ブロックチェーンへの読み取り・書き込みアクセスを提供するノードプロバイダーです。
1. Signer - トランザクションに署名する能力を持つEthereumアカウントを表します。
1. Contract - オンチェーンにデプロイされた特定のコントラクトを表すEthers.jsオブジェクトです。

前のステップで取得したコントラクトABIを使用して、コントラクトのインスタンスを作成します：

[Providers](https://www.alchemy.com/docs)、[Signers](https://www.alchemy.com/docs)、[Contracts](https://www.alchemy.com/docs)についての詳細は、AlchemyのEthers.js解説記事をご覧ください。

### ステップ5：initメッセージを読み取る

`theinitMessage = "Hello world!"`を使ってコントラクトをデプロイした時のことを覚えていますか？今度は、スマートコントラクトに保存されたそのメッセージを読み取り、コンソールに出力してみましょう。

JavaScriptでは、ネットワークと連携するために非同期関数を使用します。

以下のコードを使用して、スマートコントラクト内の`message`関数を呼び出し、initメッセージを読み取ります：

ターミナルで`npx hardhat run scripts/interact.js`を使ってファイルを実行すると、以下のような応答が表示されるはずです：

おめでとうございます！Ethereumブロックチェーンからスマートコントラクトのデータを読み取ることに成功しました！

### ステップ6：メッセージを更新する

メッセージを読み取るだけでなく、`update`関数を使ってスマートコントラクトに保存されたメッセージを更新することもできます！なかなか面白いですよね。

これを行うには、インスタンス化したContractオブジェクトの`update`関数を直接呼び出します：

返されたトランザクションオブジェクトに対して`.wait\(\)`を呼び出している点に注目してください。これにより、スクリプトは処理を進める前に、トランザクションがブロックチェーン上でマイニングされるのを待ちます。この行を省略すると、スクリプトがコントラクト内の更新された`message`の値を認識できない場合があります。

### ステップ7：新しいメッセージを読み取る

ステップ5を繰り返すことで、更新された`message`の値を読み取ることができるはずです。新しい値を出力するために必要な変更を、少し時間をかけて自分で考えてみてください！

ヒントが必要な場合は、この時点での`interact.js`ファイルは以下のようになっているはずです：

あとはスクリプトを実行するだけで、古いメッセージ、更新中のステータス、そして新しいメッセージがターミナルに出力されるのが確認できるはずです！

`npx hardhat run scripts/interact.js --network ropsten`

このスクリプトを実行している間、`Updating the message... `のステップで新しいメッセージが設定されるまでに少し時間がかかることに気づくかもしれません。これはマイニングプロセスによるものです。トランザクションがマイニングされている間にその状況を追跡する方法に興味がある場合は、Alchemyのmempoolにアクセスして、トランザクションのステータス（保留中、マイニング済み、またはネットワークによってドロップされたか）を確認してください。トランザクションがドロップされた場合は、Ropsten Etherscanでトランザクションハッシュを検索するのも役立ちます。

これで完了です！Ethereumスマートコントラクトのデプロイと連携の両方を行いました。誰でもそのコントラクトとの連携方法がわかるように、コントラクトをEtherscanに公開したい場合は、パート3「[スマートコントラクトをetherscanに登録する](https://www.alchemy.com/docs/best-practices-for-deploying-a-smart-contract-on-evm-mainnets-1)」をご覧ください！🎉

このチュートリアルを完了したら、感想やフィードバックをTwitterで@Alchemyまでお知らせください！
