Lesson 6 capture7 トランザクションの送信
前回までの操作でUIはユーザーのMetamaskアカウントを検出して、自動でホームページ上にゾンビ軍団を表示するようになった。
スマートコントラクト上のデータを変更するためのsendの使用
これがDAppのユーザーであるようにしたいから、彼らにトランザクションへの署名を要求するようMetamaskがポップアップする。
この原因は、トランザクションがブロックに含まれるのを待つ必要があり、またイーサリアムのブロック生成時間が平均15秒であるからです。
ゾンビの作成
ゾンビ作成関数の復習。
ゾンビの作成コントラクトのSolidityコードは以下。
require(ownerZombieCount[msg.sender] == 0);
uint randDna = _generateRandomDna(_name);
randDna = randDna - randDna % 100;
_createZombie(_name, randDna);
}
次はMetamaskを使ってWeb3.jsでこの関数を呼び出す例
// しばらく時間がかかるので、UIを更新してユーザーに
// トランザクションが送信されたことを知らせる
$("#txStatus").text("Creating new zombie on the blockchain. This may take a while...");
// トランザクションをコントラクトに送信する:
return cryptoZombies.methods.createRandomZombie(name)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Successfully created " + name + "!");
// トランザクションがブロックチェーンに取り込まれた。UIをアップデートしよう
getZombiesByOwner(userAccount).then(displayZombies);
})
.on("error", function(error) {
// トランザクションが失敗したことをユーザーに通知するために何かを行う
$("#txStatus").text(error);
});
}
関数はトランザクションをWeb3プロバイダにsendして、いくつかのイベントリスナーを連ねていく:
これはゾンビが作成され、コントラクトに保存されたことを意味する。
UIでトランザクションがうまくいかなかったことをユーザーに通知し、トランザクションをやり直せるようにしたい。
注:
(例 .send({ from: userAccount, gas: 3000000 })) これを指定しなければ、Metamaskがこれらの数値をユーザーに選ばせます。
補足 jquery
-
JQueryも知らなかったんだ
cryptoZombiを進んでいくうちに知っていたつもりがよくわかっていなかったこと JQueryも知らなかったんだね 【jQueryの基本ルール】 jQueryが使えるタイミング HTML=DOMの ...
prev
-
クリプトゾンビLesson 6 capture6 ゾンビ軍団の表示
Lesson 6 capture6 ゾンビ軍団の表示 ゾンビデータの表示 prev NEXT
NEXT
-
クリプトゾンビLesson 6 capture8 Payable関数の呼び出し
Lesson 6 capture8 Payable関数の呼び出し payable関数でレベルアップ contract ZombieHelper内 function levelUp(uint _zomb ...