Solidity の基礎~Ethereumの理解を深める

Solidity の基礎~Ethereumの理解を深める
DAppの開発などに使われる非中央集権ネットワークのイーサリアムの概要をメモしておきます。

【環境構築】スマートコントラクト開発

イーサリアムの基礎

イーサリアムは分散型アプリであるDApps(Decentralized Applications)やスマート・コントラクトを構築するためのプラットフォームの名称です。

イーサリアムを利用するために必要な内部流通通貨として「Ether(イーサ)」が用いられています。

Etherの単位

イーサリアムの単位はETH(イーサ〜ether)。

最小単位は「wei(ウェイ)」。

1ether=100京wei。

100京(ケイ)は10億が10億個=10の18乗となります。

実際はweiよりもgwei表記のことが多く、1gwei = 10億weiとなり、10億gweiが1etherとなります。

gweiは、情報理論の父としてしられる数学者のクロード・シャノンにちなんで、Shannonというニックネームが付いています。

Claude Elwood Shannon, 1916年4月30日 – 2001年2月24日 / 引用:Wikipedia
情報理論の父と呼ばれ、情報、通信、暗号、データ圧縮、符号化など現代の情報社会に必要不可欠な分野での先駆的研究を多数残しました。
アラン・チューリングやジョン・フォン・ノイマンとともに現代のコンピュータ技術の基盤を作り上げた人物として、名前が並びます。

ネットワーク

イーサリアムプロトコルは1つですが、プロトコルを実行するためのネットワークは複数存在しています。

メインネット

パブリックイーサリアムネットワークは開発者間ではメインネットと呼ばれています。

テストネット(フォーセット)

コミュニティーがステージング環境として利用するためのテストネットというパブリックネットワークも存在しており、テストネットにはフォーセット(faucet)があり、フォーセットは開発者がスマートコントラクトをテストできるようにイーサリアムを無償で配布するメカニズムとなっています。

イーサリアムプロトコルを実行しているネットワークではすべてでイーサリアムを使用しますが、実際に価値を持つのはメインネットのイーサリアムだけになります。

イーサリアム自体をメインネットにデプロイして実行するためにはメインネットのイーサリアムが必要になります。

イーサリアムを手に入れるためには取引所で購入するか友人から分けてもらうか、仕事の報酬としてもらうか採掘するかの方法があります。

Gas

ガス(イーサリアムトランザクション手数料)はイーサリアムの価格に依存しません。

イーサリアムの価格変動によってエコシステム全体に悪影響にならないようにするためです。

イーサリアムトランザクションはwei単位でGasPriceを設定します。

ブロックの作成者がブロックに追加するトランザクションを決める際に設定しますが、Gasには暗黙の相場が存在しています。

トランザクションの実行に速度を求める際はGasの価格を高く設定する必要があり、速度を必要としない場合は低く設定することで、費用対効果の調整をトランザクション作成者が自分で調整することができます。

Gasのルール

イーサリアムのトランザクションにはgas属性とgasPrice属性がそれぞれ必ず含まれている必要があります。

これらの属性の掛け合わせで実行予定のトランザクション手数料の最も高い数値がwei建てで設定されます。

gas属性はトランザクションで実行される計算に上限を課す(gaslimit)ため、この上限を超過した分はトランザクション作成者に返還されます。

Solidityについて

Solidity(イーサリアム用のプログラミング言語)はオブジェクト指向型の言語になります。

Solidityでは読み取り専用の関数をpureキーワードとviewキーワードで表します。

書き込み専用の関数はSolidityのデフォルト関数でありキーワードは不要になります。

関数を実行するためにデータをトランザクション経由で送信し、ブロックに書き込みます。

書き込み専用関数が失敗した場合、その処理は元に返されます。

トランザクション属性

Solidityではトランザクション(tx)の属性として2つ定義されています。

gasPrice

トランザクションを作成したEOAが設定するガス価格(wei建てで決まります)

origin

トランザクションを作成したEOAアドレスです。

メッセージ属性

Solidityはトランザクション属性が他にもありますが、それらはメッセージ(msg)という概念で統一されています。

コントラクト関数の呼び出しには必ずmsg.senderがあります。

data

実行中の外部関数やパブリック関数に送信されたデータの生のバイトでコールデータとも呼ばれています。

sender

実行中の外部関数または、パブリック関数の呼び出し元アドレス。

sig

呼び出し中の関数を特定するためのコールデータのうち最初の4バイトで、関数IDとも呼ばれています。

value

この関数に送信されているweiの量。

number

新しいブロックが増えるたびに増加。

timestamp

ブロックが作成された時刻。

blockhash

ハッシュ値は16進数であり、当然現在のハッシュ値は入手不可能ですが、直近の256ブロックまでなら入手可能。

difficulty

現在のブロックのマイニング難易度。

gaslimit

ブロックで消費できるガスの最大値。

coinbase

ブロック作成者のアドレス。

となっています。

プロフィール

こうたろう
こうたろう
音大を卒業後ピアニストとして活動。
日本で活動後北欧スウェーデンへ。
アーティストLindha Kallerdahlと声帯とピアノによる即興哲学を研究。
その後ドイツ・ケルンに渡りAchim Tangと共にアルバム作品制作。
帰国後、金田式DC録音の第一人者:五島昭彦氏のスタジオ「タイムマシンレコード」にアシスタントとして弟子入り。
独立後音楽レーベル「芸術工房Pinocoa(現:Kotaro Studio)」を結成。
タンゴやクラシックなどアコースティック音楽作品を多数プロデュース。
大阪ベンチャー研究会にて『芸術家皆起業論~変化する社会の中、芸術家で在り続けるために』を講演。
その後、秋山庄太郎氏後継の写真スタジオ「村上アーカイブス」でサウンドデザイナー兼音響担当として映像制作チームに参加。
村上宏治氏の元で本格的に写真、映像技術を学ぶ。
祖父母の在宅介護をきっかけにプログラムの世界に興味を持ち、株式会社 ジオセンスの代表取締役社長:小林一英氏よりプログラムを学ぶ。
現在はKotaro Studioにて『あなたのためのアートスタジオ』音と絵をテーマに芸術家として活動中。
2023年より誰かのための癒しの場所『Curanz Sounds』をプロデュース。

Share this post