どうも、Mejikaです!
唐突ですが、、、
忍者DAO公認WEB3エンジニア育成プロジェクト、最高です😄😄
質問にめちゃ親切に答えてくださる方々ばかり!
ホント、いいコミュニティだなぁ~と日々感謝です!!
興味のある方は コチラ からどうぞ😌
今日は、ether.jsを使ってコントラクトの操作をやってみたので、
メモを残します😌
ether.js は、web3.js と同じような、ブロックチェーンとの接続を簡単にしてくれるライブラリです
まずは、install してみましょう!
npm install –save ethers
今回は、web3 provider に、Infura ではなく Alchemy を使ってみます。
Infura のように、ブロックチェーン上にノードを持っていて、
APIを提供してくれます!
ちなみに、 SDK もあるので便利です!ついでに、以下でインストールしましょう!
npm install alchemy-sdk
関数に呼び出しは、Node.js を使って、index.js を実行する、という形でやってみます。
以下、index.js のコードです。(コミュニティで頂いたアドバイス付きですw)
//index.js
//ethers.jsの読み込み。事前にnpm install ethersを実行してインストールしておく
const ethers = require("ethers")
//ABIファイルを読み込む。(RemixのCompileで生成されたabi コピペで行けました)
const abi = require("./abi.json")
const operation = async () => {
//ブロックチェーンへの接続オブジェクトつくる
const provider = await new ethers.providers.AlchemyProvider("rinkeby", "アルケミーのAPIキー");
//サイナーオブジェクトつくる
const signer = await new ethers.Wallet("プライベートキー", provider);
//コントラクトオブジェクトつくる
const contract = await new ethers.Contract("コントラクトアドレス", abi, signer);
//前に作ったメッセージコントラクトで、最新のメッセージをgetMessage()で呼び出します↓
const message = await contract.getMessage();
console.log('Current engraved message is ', message); //messageをコンソール出力
}
//async関数全体の実行↓
operation();
ちなみに、abi は、以下のような感じで、.json ファイルを作成し、
index.js ファイルと同じ階層に入れておきます。
ここでは、使用したい関数だけあればよいですw
[
{
"constant": false,
"inputs": [
{
"name": "newMessage",
"type": "string"
}
],
"name": "setMessage",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getMessage",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "initialMessage",
"type": "string"
}
],
"name": "Inbox",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "message",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
]
では、node index.js で実行してみましょう。
すると、、、
出来ました!!
これ、めちゃ便利なのでは???!
ちなみに、今回は読み込み関数(現状の文字列や数字の情報だけ入手。Read Contract)
のみで、書き込み関数(Write)を使っていないので、ガス代はかかりません😌
いやはや、ether.js にしても、Alchemy にしても、
便利なプラットフォームやライブラリが増えて
ますます開発がしやすくなってきましたねーーー
それではまた!
ウホウホ🦍
コメント