クリプトゾンビ

クリプトゾンビLesson 6 capture7 トランザクションの送信

投稿日:

Lesson 6 capture7 トランザクションの送信

前回までの操作でUIはユーザーのMetamaskアカウントを検出して、自動でホームページ上にゾンビ軍団を表示するようになった。

スマートコントラクト上のデータを変更するためのsendの使用

トランザクションをsendするのには関数を呼び出す者のfromアドレスが必要だ(Solidityのコードではmsg.sender)。
これがDAppのユーザーであるようにしたいから、彼らにトランザクションへの署名を要求するようMetamaskがポップアップする。
トランザクションをsendするにはガスがかかる
ユーザーがトランザクションをsendしてから、それが実際にブロックチェーン上で有効になるまでにはかなりの遅れがある。
この原因は、トランザクションがブロックに含まれるのを待つ必要があり、またイーサリアムのブロック生成時間が平均15秒であるからです。
ブロックに取り込まれていないトランザクションはノードからノードへと伝播していき、ブロック生成者(マイナー)まで到達するとブロックチェーンに取り込まれ送金が確定します。
イーサリアム上にたくさん保留中トランザクションがある場合や、ユーザーがあまりに低いガスプライスを送信した場合は、トランザクションが取り込まれるまで数ブロック待たなければならず、数分かかることもあります。
このため、コードの非同期性を処理するためのロジックがアプリケーションで必要となる。

ゾンビの作成

ゾンビ作成関数の復習。

ゾンビの作成コントラクトの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 + "!");
// トランザクションがブロックチェーンに取り込まれた。UIをアップデートしよう
getZombiesByOwner(userAccount).then(displayZombies);
})
.on("error", function(error) {
// トランザクションが失敗したことをユーザーに通知するために何かを行う
$("#txStatus").text(error);
});
}

関数はトランザクションをWeb3プロバイダにsendして、いくつかのイベントリスナーを連ねていく:

receiptは、トランザクションがEthereumのブロックに含まれると発行される。
これはゾンビが作成され、コントラクトに保存されたことを意味する。
errorは十分な量のガスを送っていないといったように、ブロックへのトランザクションの取り込みを妨げる問題があるときに発生する。
UIでトランザクションがうまくいかなかったことをユーザーに通知し、トランザクションをやり直せるようにしたい。

注:

sendを呼び出す場合、オプションでgasとgasPriceを指定することができます。
(例 .send({ from: userAccount, gas: 3000000 })) これを指定しなければ、Metamaskがこれらの数値をユーザーに選ばせます。

補足 jquery

JQueryも知らなかったんだ

cryptoZombiを進んでいくうちに知っていたつもりがよくわかっていなかったこと JQueryも知らなかったんだね 【jQueryの基本ルール】 jQueryが使えるタイミング HTML=DOMの ...

続きを見る

prev

ogp
クリプトゾンビLesson 6 capture6 ゾンビ軍団の表示

Lesson 6 capture6 ゾンビ軍団の表示 ゾンビデータの表示 prev NEXT

続きを見る

NEXT

ogp
クリプトゾンビLesson 6 capture8 Payable関数の呼び出し

Lesson 6 capture8 Payable関数の呼び出し payable関数でレベルアップ contract ZombieHelper内 function levelUp(uint _zomb ...

続きを見る

ビットコインってなに?

2008年11月、metzdowd.comにナカモトサトシにより投稿された論文Bitcoin:A Peer-to-Peer Electronic Cash Systemで定義された仕様とをもとにビットコイン・コミュニティーで開発が続けられる製造と取引に暗号学を使った通貨のことです。

ビットコイン自体は、フリー・ソフトウエアで、ソフトウェア開発のプラットフォームGitHubに登録すれば、ソースやドキュメント閲覧が可能で、開発に参加も可能です。

ナカモトサトシは、2010年12月まで開発に携わっていましたが、その後姿を消しました。日本名ですが、国籍も含め匿名性が高く身元も不明です。

真偽のほどは、不明ですがSBI社長の北尾氏が、2018年3月期第2四半期 SBIホールディングス(株)決算説明会動画の1:29:20頃)でナカモトサトシと議論を交わしたと発言して話題になりました。

ビットコインの仕組み

ビットコインは、P2P型の公開型分散台帳技術(DLT)によって信頼性を担保され運用されるブロックチェーンで結合された暗号通貨(cryptocurrency)のことです。

ビットコインは、P2Pネットワーク上のサーバー上で同一取引情報を持ちコントロールすることで取引の妥当性のチェックが行われるため、銀行など、特定の管理者がいない非中央集権型の仮想通貨と呼ばれています。

ブロックチェーン


GitHub

ブロックチェーンの動き

マイニング

ビットコインは送信アドレス(Tx)に対するデジタル署名によって保護されており、一定時間(10分)ごとに、すべての取引記録を分散台帳に追加します。

その追加処理には、ネットワーク上の分散取引台帳データと、10分間に発生したすべての取引のデータの整合性を取りながら正確に記録することが必要です。

整合性を取る作業は、膨大な計算量が必要となるため専用のハードウエアの計算能力を使って、誰でもが取引を処理することができます。

この手伝いをしてくれた人(膨大な計算処理を行った人)の中で、結果として追記処理を成功させた人には、その見返りとしてビットコインが支払われます。

この作業をマイニングと呼びます。

マイニングには、ソロマイニングとプールマイニングがあり、個人のPCでも余った演算能力でプールマイニングに参加できます。

ブロックチェーンをより深く理解する

全画面にして字幕設定を自動翻訳 イタリア語=>自動翻訳を経由して日本語に設定するとよくわかります。

上記デモは、下記リンク先サイトを使用しているので、自分でも試すことができます。

 

ジェネシス・マイニングでのハッシュパワー購入

ジェネシス・マイニングは世界最大の高く信頼されたビットコイン クラウド マイニングのプロバイダーです。ハッシュパワー購入時に,コード(kjx2uz)を使用した人は、購入時に3%の割引になります。

ブロックチェーンエクスプローラー

ブロックチェーンアドレスを入力することで、送金状況(confirmation回数の確認)が行えます。

イーサリウムの仕組み

-クリプトゾンビ

Copyright© 仮想通貨アンテナ , 2021 All Rights Reserved.