クリプトゾンビ

クリプトゾンビLesson 3 Chapter12 For ループ

更新日:

Lesson 3 Chapter12 For ループ

Array vs Mapping

使用目的は両者とも配列、もしくは Key Value な形で "情報を格納する" ということなので、似ていますが、取得方法が違うので、使いどころには気をつける必要があります。
Array: 全件操作する
Mapping: 1件の操作をする
出典 https://qiita.com/yuhattor/items/2bd78cafd1bfd3f08b69

mapping

マッピング
特定のユーザーが保有している全てのゾンビを、uint[]配列として返すgetZombiesByOwner関数を実装する。

簡単な処理とした場合

簡単な処理にすると、オーナーからゾンビ軍団へのmappingをZombieFactoryコントラクトに持たせればいい。

mapping (address => uint[]) public ownerToZombies

新しいゾンビを作る度に、

ownerToZombies[owner].push(zombieId)

を使ってオーナーのゾンビ配列に追加していくだけだ。
するとgetZombiesByOwner関数は非常にシンプルな関数になる。

function getZombiesByOwner(address _owner) external view returns (uint[]) {
return ownerToZombies[_owner];
}

この方法の問題点

ゾンビを誰かに譲る関数をあとで作成した時の問題

必要な関数の処理。

  1. ゾンビを新しいオーナーのownerToZombies配列に追加する
  2. 元のオーナーのownerToZombies配列からゾンビを削除する
  3. 穴を埋めるために、元のオーナーの各ゾンビの配列の番号を変更する
  4. 配列のlengthを1 減らす。
ステップ 3は、ゾンビの位置を全てずらすことになるから、ガスコストは非常に高額になってしまう。
もしオーナーがゾンビを20体持っていて、最初のゾンビを誰かにあげたとする。すると残りの19体の配列番号を書き直さなくてはならなくなる。
この場合、view関数は外部から呼び出した時にガスコストがかからないから、getZombiesByOwner内でforループを使ってそのオーナーのゾンビ軍団の配列を作ってしまえばいい。
そうすればtransfer関数はstorage内の配列を並び替える必要がないため安く抑えられるし、全体のコストも抑えられる。

偶数の数字を格納する配列の例

function getEvens() pure external returns(uint[]) {
uint[] memory evens = new uint[](5);
// 新しい配列のインデックスをトラックする:
uint counter = 0;
// 1から10までループさせる:
for (uint i = 1; i <= 10; i++) { // もし `i` が偶数なら... if (i % 2 == 0) { // 配列に格納する evens[counter] = i; // カウンタを増やして `evens`の空のインデックスにする: counter++; } } return evens; }

この関数は[2, 4, 6, 8, 10]の配列を返す。

getZombiesByOwner関数

forループでDApp内の全てのゾンビをループさせ、オーナーが一致するかどうかを判定し、result 配列に格納して返却する。

function getZombiesByOwner(address _owner) external view returns(uint[]) {
uint[] memory result = new uint[](ownerZombieCount[_owner]);
uint counter = 0;
for (uint i = 0; i < zombies.length; i++) { if (zombieToOwner[i] == _owner) { result[counter] = i; counter++; } } return result; } }

prev

ogp
クリプトゾンビLesson 3 Chapter11 全ゾンビアイテムの表示2

Lesson 3 Chapter11 全ゾンビアイテムの表示2 Storageのコストは高い 変数をStorageとしてデータを書き込んだり、変更するたびに、それがすべてブロックチェーンに永久に書き込 ...

続きを見る

next

ogp
クリプトゾンビLesson 4 Chapter1 Payable関数

Lesson 4 Chapter1 Payable関数 関数修飾詞の種類 可視性修飾詞 private修飾詞 コントラクト内の別の関数からのみ呼び出される。 internal修飾詞 private修飾 ...

続きを見る

ビットコインってなに?

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.