RemixIDEを使ったOraclize
tr;dr
Ethereumのスマートコントラクト上でOraclizeを使いたい。
基本的にはチュートリアル通りで動くっぽいがやっぱりfunctionのデバッグがしたい!
普段solidityはRemixIDEで書いているので、IDE上でデプロイされたOraclizeを使ったfunctionの実行までをまとめる。
なんか適当にやるとバージョンとかの関係でうまくくいかなかった、、、
ググるとバージョンサポートが追い付いてないみたいな記事もあったので、とりあえず確認できた方法をメモ書きする。
Oraclize
スマートコントラクト上にインターネットの情報を取り込むためのライブラリ(?)
ブロックチェーン上にはデータが永続化されるため、スマートコントラクトに正しいデータを取り込むのは不正のされていない真正性のあるデータを取り込む必要がある。
OraclizeではライブラリからRESTapiを実行してそのレスポンス結果をスマートコントラクト上に取り込むことができる。
(どうもOraclizeProvableという名前に変わったんですかね?ライブラリそのものの名前はOraclizeのままですが、、、)
http://provable.xyz/
https://docs.provable.xyz/#home
Tools
remix-ide
Atomとかいろいろ使ったんですがスマートコントラクトのデバッグをやるにはRemixが一番便利という感想です。
getho使ってたんですがサービス終わってしまうそうで、、残念、、、
Atomとかのエディタで直接できるのがうれしいんですが、使い方が悪いのかあまり安定せず、、、
Remix、ブラウザエディタだと侮っていたのですが、localhostで展開できるIDEの物があったのでこっちを最近は使っています。
ローカル・テストネットにも簡単にコンパイル・デプロイので便利です。
Repository
このリポジトリでサンプル作ってくれるので、これを流用します。
デバッグするまで
まずhttps://github.com/provable-things/ethereum-examples をクローンします。
git clone https://github.com/provable-things/ethereum-examples.git
youtubeにリクエストするサンプルがあるのでまずそれに従います。
Instructionsに従ってtestまでとりあえず通しましょう。
cd ethereum-examples/solidity/truffle-examples/youtube-views && npm install
npx truffle develop
(別ターミナルで)
npx ethereum-bridge -a 9 -H 127.0.0.1 -p 9545 --dev
(truffle developしたターミナルで)
test
こんな感じでテスト通ればおk
https://github.com/provable-things/ethereum-examples/blob/master/solidity/truffle-examples/youtube-views/youtube-views-tests.jpg
ではここから好きにリクエストするようデバッグしてきましょう。
youtube-viewsのディレクトリをRemixIDEで開きましょう。
"Connect to localhost"で行けます。
contracts/YoutubeViews.solの中にupdate関数があり、oraclize_queryに書いているURLにリクエストできます。
レスポンス単位でhtml、json指定いろいろできるようです。
https://docs.provable.xyz/#ethereum-quick-start
ひとまずGitHubにリクエストして、レスポンスをコントラクトに書きましょう。
https://api.github.com/users/[ユーザーID]
このURLにリクエストするとユーザー情報のJSONが返ってくるので、ユーザーIDの"login"を取得するように修正します。
pragma solidity >= 0.5.0 < 0.6.0;
import "./oraclizeAPI.sol";
contract YoutubeViews is usingOraclize {
string public viewsCount;
event LogYoutubeViewCount(string views);
event LogNewOraclizeQuery(string description);
constructor()
public
{
update(); // Update views on contract creation...
}
function __callback(
bytes32 _myid,
string memory _result
)
public
{
require(msg.sender == oraclize_cbAddress());
viewsCount = _result;
emit LogYoutubeViewCount(viewsCount);
// Do something with viewsCount, like tipping the author if viewsCount > X?
}
function update()
public
payable
{
emit LogNewOraclizeQuery("Oraclize query was sent, standing by for the answer...");
oraclize_query("URL", 'json(https://api.github.com/users/[自分のIDを指定しする]).login');
}
}
RemixIDEでコンパイル・デプロイして、、、と思ったんですがどうもいい感じに動かないですね、、、
ローカルで直接コンパイル・デプロイした後、RemixIDEをローカルに接続、デプロイしたコントラクトにアクセスしてデバッグしましょう。
truffle(develop)> compile
truffle(develop)> migrate
migrateが終わるとcontractaddressがわかるのでコピーします。
Deploying 'YoutubeViews'
------------------------
> transaction hash: 0xae586a445b3dbb9871a8f0e8c01775d959f4ee84eca6cc5f449faad47ea6b818
> Blocks: 0 Seconds: 0
> contract address: 0x3Eb157dc17B371bD3ab08043C07F7B32aB7943C0
> account: 0x626A52D9b5F9F050fc73b143f4a99D11F3BeF170
> balance: 99.95846674
> gas used: 1749721
> gas price: 20 gwei
> value sent: 0 ETH
> total cost: 0.03499442 ETH
RemixIDEをローカルで起動したままのRPCに接続します。
Environmentから「Web3Provider」を選択し、
さっきローカルで起動したlocalhost:9545を指定します。
先ほどコピーしたコントラクトアドレスをAtAddressに入力して接続します。
成功するとDeployedContractsに出てきます。
oraclizeのfunctionはデプロイ時に実行されているので、
viewsCountから指定したログインIDが確認できればおkです。
まとめ
OraclizeのRemixIDEを使ったデバッグについて書きました。
直接Remix上でもコンパイル・。デプロイできるんですが、あんまり安定せず、、、
他にもやり方あれば教えてください。
というか皆さんコントラクトのデバッグはどんな感じでやってるんですかね、、、
Author And Source
この問題について(RemixIDEを使ったOraclize), 我々は、より多くの情報をここで見つけました https://qiita.com/mistletoe/items/6305bd02bade1ffd03fc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .