Metamaskを使ってWeb3.jsでコントラクト関数を呼び出す例
コントラクトのSolidityコード:
function createRandomZombie(string _name) public {
require(ownerZombieCount[msg.sender] == 0);
uint randDna = _generateRandomDna(_name);
randDna = randDna - randDna % 100;
_createZombie(_name, randDna);
}
Metamaskを使ってWeb3.jsで上記コントラクト関数を呼び出す例
function createRandomZombie(name) {
// しばらく時間がかかるので、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 + "!");
// トランザクションがブロックチェーンに取り込まれた。
getZombiesByOwner(userAccount).then(displayZombies);
})
.on("error", function(error) {
// トランザクションが失敗したことをユーザーに通知するために何かを行う
$("#txStatus").text(error);
});
}
receiptは、トランザクションがEthereumのブロックに含まれると発行される。
errorは十分な量のガスを送っていないといったように、ブロックへのトランザクションの取り込みを妨げる問題があるときに発生する。
sendを呼び出す場合、オプションでgasとgasPriceを指定することができます。(例 .send({ from: userAccount, gas: 3000000 })