イーサリアムとは
イーサリアムとはスマートコントラクトを実現するためのプラットフォームです。
スマートコントラクトとは、、、??日本語に訳すと「賢い契約」
賢いというのは自動という意味です。
つまりある条件を満たすと自動で契約を実行するという仕組みを実現するのがイーサリアムなのです。
あらゆるアプリケーションがイーサリアム上で動作可能でスマートコントラクトを実現しています。
スマートコントラクトを実装する場合は、Solidityというプログラミング言語で実装します。
イーサリアムは、分散型のコンピューター、分散型のアプリケーション、分散型の計算をする仕組みにより、「スマートコントラクト」を実現するためのプラットフォームです。特定のアプリケーションだけに適用するブロックチェーンではなく、あらゆるアプリケーションがイーサリアムのプラットフォーム上で動作可能になるサービスのため、
「スマートな契約(contract)」という意味です。
ブロックチェーン分野においては「決められたある条件を満たすと自動的に契約を実行する」ということが記述されたコードのことを指します。
スマートコントラクトを実装する場合は、Solidityというプログラミング言語で実装します。SolidityはJavaScriptの文法に似たプログラミング言語で、コンパイル後、Ethereum(イーサリアム)上で実行可能です。
BitcoinとEthereumの違う点は、ブロックチェーン上に「取引と一緒に契約も残せる」ことです。
Contractとは
コントラクトとはイーサリアムアプリケーションの基本ブロックのことです。
変数や関数は全てコントラクトに属しています。
コントラクトは以下のように書きます。
Ethereumで動作させるために作成する
処理の塊
イーサリアムアプリケーションの基本ブロックのこと
コントラクトが呼び出されることで処理が実行される
コントラクトとは、一言で表すと「ブロックチェーン上で動作するアプリケーション」です。なんらかの処理を書いたプログラム(ビジネスロジック)を「コントラクト」と呼んでいる、と思って良いでしょう。
solidityにおけるコントラクトはオブジェクト指向言語におけるクラスのようなものである。コントラクトはトランザクションもしくは他のコントラクトを通して作られる。
クリプトゾンビではZombieFactoryというコントラクトを作りますが、とてもいい例です。ゾンビを作成する一連の処理が詰まったブロックです。工場というコントラクトがブロックチェーン上で呼び出されるたびにゾンビが生まれるのです。
contract Factory {
//一体のゾンビを作り出すための一連の処理
}
状態変数とは
コントラクト内に永遠に保管され続けるもの
イーサリアムのブロックチェーン上に記載されます。
contract Factory {
// この部分がブロックチェーン上に記載される
uint dna = 100fjakd348901;
}
構造体とは(Struct)
複数のデータ型を保存するための容器
ゾンビはname(string)やage(int)複雑なデータをたくさん持っている。
それらをstructにまとめて保存するのである。
配列の種類
solidityでは2種類の配列があります
uint[2] fixedArray; // 2つの要素が入る固定長配列
uint[] dynamicArray; //可変長配列
固定長配列=>配列の要素数が決定してる
可変長配列
ブロックチェーン上における可変長配列の場合、いくらでも格納できるためデータベースのように扱うこともできる。仮想通過では取引されるたびに取引が有効かどうかを判断する暗号が追加されていく。こういった半無限に増えていくデータを保存するのに適している。
構造体と可変長配列の関係6
ゾンビっていう構造体がある=>いろんなデータを集めたもの(name age Kao color height 声のトーンなど、体の凹凸)=>ゾンビ軍団というグループ=>可変長配列=>ゾンビは無限に増やしたいから可変にしよう
Zombie[] public zombies;
function createZombie(string _name, uint _dna) {
}
関数
関数とは処理の塊=>動詞である
引数とは目的語である
例えば、食べる行為(関数)を赤ちゃんに覚えさせるとする
しかし何を食べるかをいちいち教えていたらキリがない。
eatcake = フォークを使って
関数と引数
戻り値
処理を実行した結果、返ってくる値のこと
走るという行為を実行しても戻り値はなにも返ってこない
しかし料理するという処理の場合、結果としてできあがった料理を返してもらわないと意味がない。
この処理は戻り値が必要なのかどうか常に意識しよう
View
関数が動作しても、データの保存や変更は一切行わず、データの閲覧のみを行うと宣言します。
view修飾子がある関数は、状態の変更を行いません。そして、状態変数の参照が可能です。
Pure
view と同じように、関数が動作してもデータの保存や変更を行わないだけでなく、読み取りすらも行わないことを宣言します。
pure修飾子がある関数は、状態の変更も参照も行いません。受け取った値しか使いません。
keccak256とは
EthereumにはSHA-3の一つであるハッシュ関数keccak256が組み込まれています。ランダムな256ビットの16進数へマッピングします。
つまり暗号してくれるようなもの