初投稿です。よろしくお願い致します。こちらの記事を参考にweb3.jsを使って展開済のコントラクトを呼び出そうとしたのですが、えらいハマってしまい大変な思いをしたので、どんな点でハマってしまったのかを書いていきたいと思います。
前提条件
- gethが正常に動作している(gethのバージョンは1.8.8)。
- Remixが正常に動作している(Remixのバージョンは0.6.3)。
- gethとRemixの連携ができており、コントラクトのデプロイまでできている。
- web3.jsがインストールされている(web3.jsのバージョンは0.20.0)。
- なお、こちらはgethとRemixをレンタルサーバー(VPS)上で動かしています。OSはUbuntu16.04です。
なお、前提条件ができていない場合は、一番下の参考記事を参考にしてみて下さい。
展開済のコントラクトを呼び出してみる
var Web3 = require('web3');
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));
//abi情報
var abi = [{"constant": true,"inputs": [],"name": "HelloEther","outputs": [{"name": "","type": "string"}],"payable": false,"stateMutability": "pure","type": "function"}];
//コントラクトのアドレス
var address = "0xb37ea71ecdcb442c3a5c9ce3ce63fdaaa6976da5";
//コントラクトの取得
var contract = web3.eth.contract(abi).at(address);
//実行
var response = contract.HelloEther.call();
console.log(response);
web3.jsをインストールしたフォルダに、上記のjsファイルを置いて、実行します。なお、IPアドレスと、abi情報、コントラクトのアドレスはご自身の環境のものを記して下さい。
コントラクトは、以下のファイルになります。
pragma solidity ^0.4.22;
contract helloWorld {
function HelloEther () public pure returns (string) {
return 'Hi Ether';
}
}
上記のコントラクトをデプロイまでしてあげてから、上のjsファイルを実行して下さい。
自分がハマったポイント
では、自分がハマってしまったポイントをご紹介しようと思います。以下の3つになります。
コントラクトのアドレス
まずは、test.jsの中にある、コントラクトのアドレスですね。これを自分はてっきり図の①のアドレスだと思っていましたが、そうではなく②のアドレスなのですね。
abiはコピペしないとダメ
abi情報は目で見れるものを打ち込むのではなく、クリップボード機能を使ってコピペしたものを書いてあげないとダメです。
contractの次は関数名
こんなの間違えるのは自分だけかもしれませんが、var response = contract.HelloEther.call();のcontractの次はコントラクト名ではなく、その中の関数名を書いてあげないとダメです(この場合、HelloEther)。自分はここをhelloWorldって書いてました。
まとめ
以上駆け足で、ハマったポイントをご紹介してきました。いかがでしたでしょうか。こんなの当たり前じゃんと思われる方が大半かもしれませんが、自分のような初心者はハマっちゃうんじゃないかなと思い、書いてみました。この記事が誰かのお役に立てれば幸いです。
参考記事
-
『gethの機能やコントラクトをweb3.jsを利用して呼び出す』ーこちらの記事のおかげで学習することができ、またこの記事を書くことができました。本当にありがとうございました。
-
『スマートコントラクト開発環境RemixをUbuntu16.04にインストールしてみよう!』ーRemixのインストールについて、とてもわかりやすく書かれています。
-
『EthereumとRemixでスマートコントラクトを作って動かしてみよう!』ー上の記事の続編です。コントラクトをデプロイするまでが、とてもわかりやすく書かれています。