初心者文系主婦がブロックチェーンを学ぶブログ

IT革命のビッグウェーブに乗り遅れた主婦が、ブロックチェーン革命の波にのるべく、ブロックチェーン技術を学ぶブログです。

【CryptZombies】レッスン3チャプター7:Public関数とセキュリティ

ここで、feedAndMultiply関数を見てみます。 前のレッスンではpublicで作成しています。 publicやexternalの関数では、onlyOwnerのような修飾子をつけない限り、誰でも関数を実行して好きなデータを渡すことができてしまいます。 この関数では、ユーザーが直…

【CryptZombies】レッスン3チャプター6:ゾンビのクールダウン(ヘルパー関数(structを引数にする))

ゾンビのクールダウンタイマーを実装するために、feedAndMultiplyを次のように編集します。 ①捕食することでゾンビのクールダウンが始まる。 ②ゾンビはクールダウン期間が終わるまで子猫を捕食することはできない。 まずは、ヘルパー関数を定義して、ゾンビ…

【CryptZombies】レッスン3チャプター5:Time Units

時間の単位 Solidityには時間を扱うための固有の単位がいくつか用意されています。 now変数は、現在のunixタイムスタンプ(1970年1月1日から経過した秒数のこと)を返します。unixタイムスタンプは歴史的に32ビットの数値として格納されています。 Solidity…

【CryptZombies】レッスン3チャプター4:ガス(燃料)

ガス:イーサリアムDAppの燃料 Solidityでは、ユーザーが関数を使用するたびに、ガスと呼ばれる通貨を支払うことになっています。 ユーザーはEtherでガスを買い、アプリの関数を実行するのです。 関数を実行するために必要なガスの量は、関数のロジックの複…

【CryptZombies】レッスン3チャプター4:ガス(燃料)

ガス:イーサリアムDAppの燃料 Solidityでは、ユーザーが関数を使用するたびに、ガスと呼ばれる通貨を支払うことになっています。 ユーザーはEtherでガスを買い、アプリの関数を実行するのです。 関数を実行するために必要なガスの量は、関数のロジックの複…

【CryptZombies】レッスン3ャプター3:onlyOwner関数の修飾子

関数修飾子 関数修飾子は一見関数のように見えますが、functionの代わりにmodifierを使います。 また、関数のように直接呼び出すことはできず、代わりに関数定義の最後に修飾子の名前をつけることで、関数の動きを変更します。 /** * @dev Throws if called …

【CryptZombies】レッスン3チャプター2:Ownableコントラクト

チャプター1で作成したコードにはセキュリティホールがあります。 setKittyContractAddressはexternalなので、だれでも呼び出すことができるのです。 つまり、この関数を呼び出した者はクリプトキティーズのコントラクトのアドレスを変更することで、私たち…

【CryptZombies】レッスン3チャプター1:Immutability of Contracts

SolidityはJavaScriptに似ている言語ですが、イーサリアムのDApp(Decentralized Application=分散型アプリケーション)は普通のアプリケーションとはかなり違う点があります。 Immutable まず、コントラクトをイーサリアム上にデプロイ(利用可能な状態)…

【CryptZombies】レッスン2チャプター13:ボーナスKitty Genes(Ifステートメント)

ここでは、猫ゾンビを作ります。 レッスン1で、ゾンビの外見を決めるのに、16桁の数字のうち最初の12桁しか使いませんでした。 余っているうちの最後の2桁を使って特別な特徴を追加します。 とりあえず、猫ゾンビはDNAを末尾を99とします。 コードに…

【CryptZombies】レッスン2チャプター12:複数の返り値の処理

複数の返り値の処理 複数の値を返す例 function multipleReturns() internal returns(uint a, uint b, uint c) { return (1, 2, 3); } function processMultipleReturns() external { // 例として、まずa,b,cという名前のuint関数を宣言 uint a; uint b; uin…

【CryptZombies】レッスン2チャプター11:Interfaceを使用する

Interfaceの使用 チャプター10の例をNumberInterfaceを使って、interfaceを次のように定義します。 contract NumberInterface { function getNum(address _myAddress) public view returns (uint); } これをコントラクト内で使用します。 contract MyContr…

【CryptZombies】レッスン2チャプター10:ゾンビは何を食べるのか?interface(別のコントラクトとのやりとり)

別のコントラクトとのやりとり ブロックチェーン上の他人のコントラクトとやりとりするには、最初にinterfaceを定義します。 例として、以下のコントラクトがブロックチェーン上にあったとします。 contract LuckyNumber { mapping(address => uint) numbers…

【CryptZombies】レッスン2チャプター9:別の関数とビジビリティ(InternalとExternal)

InternalとExternal Solidityにはpublicとprivateの他に、internalとexternalという関数用のビジビリティ(表示/非表示)が用意されています。 internalはprivateと同じですが、このコントラクトから継承したコントラクトにもアクセスできるようになります。…

【CryptZombies】レッスン2チャプター8:ゾンビDNA

平均値 新しいゾンビDNAを計算するためには、元のゾンビのDN単だ:元のゾンビのDNAと捕食された人間のDNAの平均値を出すだけでいい。 function testDnaSplicing() public { uint zombieDna = 2222222222222222; uint targetDna = 4444444444444444; uint new…

【CryptZombies】レッスン2チャプター7:ストレージVSメモリ

StroageとMemory Storageはブロックチェーン上に永久に格納される変数です。 状態変数(関数外で宣言された変数のこと)の場合はデフォルトでstorageで格納されます。 Memoryは一時的な変数で、外部関数をコントラクトに呼び出す際に消去されます。 関数内で…

【CryptZombies】レッスン2チャプター6:Import

Import 長いコードを処理するときに、いくつかのファイルに分けて把握しやすいようにすることがあります。 importは、ファイルがいくつかある場合で、別のファイルをインポートしたい場合に使用します。 import "./someothercontract.sol"; contract newCont…

【CryptZombies】レッスン2チャプター5:継承

継承 コントラクトの継承は、ロジック毎に分けて、後で見直したときにコードを理解しやすくしておくものです。 これは、論理的な継承に利用されています。 例:猫が動物のサブクラス しかし、それだけでなく、同じようなロジックを別々のコントラクトにまと…

【CryptZombies】レッスン2チャプター4:Require

Require requireはある条件を満たさない場合はエラーを投げて実行を止めることができるものです。 条件次第で関数を実行したいときにかなり使えます。 エクセルでいうところのif関数みたいなもの? function sayHiToVitalik(string _name) public returns (s…

【CryptZombies】レッスン2チャプター3:Msg.sender

msg.sender msg.senderとは、全ての関数で利用できるグローバル変数の一つです。 msg.senderを利用すると、その関数を呼び出したユーザー(またはスマートコントラクト)のaddressを参照できます。 msg.senderの使用例とmappingの更新 mapping (address => u…

【CryptZombies】レッスン2チャプター2:マッピング(Mapping)とアドレス(Address)

アドレス イーサリアムのブロックチェーンは銀行口座と同じようにアカウント(口座)で構成されています。 このアカウント(口座)には、Ether(イーサ)の残高が記録されていて、Etherを送金したり受け取ったり、別のアカウントに支払うこともできます。 銀…

【CryptZombies】レッスン1チャプター13:イベント

イベント eventsは、ブロックチェーンで何かが生じたときに、コントラクトがアプリのフロントエンドに伝えることができるものです。 しかも特定のイベントを”listening"状態にして、何かあったときにアクションを起こすこともできます。 // イベントの宣言 e…

【CryptZombies】レッスン1チャプター12:統合

チャプター12では、は、すべてを統合する関数を作成します。 関数の作成方法については、今まで学習してきたとおりです。 テストの実行 ①createRandomZombieという名前のpublic関数を作成せよ。そこに_name(string)とうパラメータを設定せよ。 ②関数の最初…

【CryptZombies】レッスン1チャプター11:Keccak256と型キャスト

keccak256 イーサリアムにはSHA3というハッシュ関数のバージョンの一つであるkeccak256が組み込まれています。 ハッシュ関数は基本的には、文字列をランダムな256ビットの16進数に位置づける機能です。 文字列を1字でも変更すれば、ハッシュ値は大きく変わ…

【CryptZombies】レッスン1チャプター10:さらに関数を続ける

戻り値 戻り値は、関数に処理を依頼した後、呼び出して元の関数に返す値のことをいいます。 例えば「料理」という関数に「じゃがいも、にんじん、たまねぎ、肉、カレールー、水、ごはん」という引数を渡して処理をしてもらい、できあがった「カレー」が戻り…

【CryptZombies】レッスン1チャプター9:Private / Public関数

Solidityでは関数はデフォルトでpublicになっています。 要するに、誰でも(別のコントラクトからでも)自身のコントラクトの関数を呼び出して、実行できるということです。 これでは、攻撃に対してコントラクトが脆弱になることになります。 なので、自分が…

【CryptZombies】レッスン1チャプター8:構造体と配列の操作

新しい構造体を作る チャプター5でPerson構造体を作成し、チャプター6でpepleという名前のPerson構造体の配列を設定しました。 ここでは、新しいPersonを作成し、それをpeople配列に格納します。 ①新しいPersonを作る Person構造体を使って、新しいPerson…

【CryptZombies】レッスン1チャプター7:関数の宣言

関数(function)とは、同じ処理をまとめて定義し、何度も使いまわしができるかたちにしたものです。 さらに、その処理の部分に共通の変更点が生じた場合にも、変更が一か所ですむというメリットもあります。 なので、同じような処理が何度も出てくる場合は…

【CryptZombies】レッスン1チャプター6:配列

配列とは? なんだか数学の授業で聞いたことがあるようなないような…。 配列とはなんぞやについて、次のサイトで解説してあったので、ご紹介します。 配列(array)とは同じ型の複数の値を一つの名前(変数名)と添え字によって管理する仕組みです。 例えば…

【CryptZombies】レッスン1チャプター5:構造体

構造体 複雑なデータ型を作成する場合に、構造体(structure)を使用します。 構造体を使えば、複数のプロパティを持つ複雑なデータ型を作成することができます。 上記例では、Personという名前のstruct(構造体)を作成し、Person構造体のプロパティとして、…

【CryptZombies】レッスン1チャプター4:数式演算

Solidityで使う数式はエクセルなどで使うものと同じです。 ・加算(足し算):x + y ・減産(引き算):x - y ・乗算(掛け算):x * y ・除算(割り算):x / y ・剰余(余り) :x % y(例えば、13 % 5は3になります。なぜかというと、5を13で割ると、余り…