Ethereum入門#2

Ethereum続き。 Bitcoinとは技術的に大きく違うことがよくわかるし、こっちのほうが応用性が高い点は魅力的。

通貨単位

Ethereumの通貨単位Etherは、取引単位であると同時に、アプリケーションを実行するための燃料の役割を果たす。トランザクションに含まれる処理の重さに応じたGas代金が自動で設定される。 * 1 ether = 1,000 finney * 1 ether = 1,000,000 szabo * 1 ether = 1,000,000,000,000,000,000 wei (これらの単位は、仮想通貨の有名人になっているらしい。BitcoinにおけるSatoshiのオマージュか)

https://ethereum.stackexchange.com/questions/253/the-ether-denominations-are-called-finney-szabo-and-wei-what-who-are-these-na

アカウント

アカウントはユーザーを表すアカウント「Externally Owned Account(EOA)」と、トランザクションに基づいて生成される自動エージェントである「Contract」の二種類が存在する。 アカウントは4つのフィールドを含む。

  • nonce:そのアカウントが送信した累積トランザクション
  • ether balance:そのアカウントが所有するether量
  • contract code:コントラクト・コード(EOAの場合は空)
  • storage:そのアカウントが保持する任意のデータ (ContractがEtherを保有する理由が気になる)

トランザクション

EOAからトランザクションを送信し、各アカウントの状態が変化する。トランザクションには主に以下の情報が含まれる。 * ether送金額 * 相手先アドレス * 送信アカウント署名 * 任意データ * STARTGAS値 * GASPRICE値 最初の3つはBitcoinと同じもので、任意データは、Contractとのトランザクションを実行する場合、そのコントラクトに渡すデータを格納する。 STARTGAS値と、GASPRICE値は、トランザクション手数料として支払うetherの量を規定する情報になる。 STARTGASは、トランザクションで支払う最大のGas量になり、Gas:EtherのレートがGASPRICE値になる。 1計算ごとに1Gas(以上)を消費し、ループなどの処理に対してペナルティを貸すようになっている。また、データを保持する量が増える場合も1byte5Gasの手数料がかかる。

トランザクションの処理量がGas値を上回ってしまうと、エラーが返され、処理はロールバックされる。

メッセージ

メッセージは、Contractによって生成される物で、外部で動作しないトランザクションと捉えらえる。メッセージは以下から構成される。

  • メッセージの送信者 (implicit)
  • メッセージの受信者
  • メッセージと一緒に送信されるetherの量
  • オプショナルデータフィールド
  • STARTGAS 値

コントラクトコード

Contract コードは低級スタックベースバイトコードで描かれており、EVM(Ethereum Virtual Machine)コードと呼ばれている。 このコードはスタックと、無限のメモリがあることから、チューリング完全となる。

ブロックチェーン

Ethereumのブロックチェーンは、トランザクションだけでなく、Ethereumに存在する全アカウントの最新状態も記録される。