Ethereum の Smart Contracts やアプリの作り方

NO IMAGE
  • 書き途中なので、追記していきます。
  • 2014年3月現在、コンセプト証明の状態 Proof of Concept 3 (POC3) なので、仕様がどんどん変わる可能性が高いです。

Contract って何?

概念上の説明

  • Ethereum 上で実行できるプログラム
  • スマートコントラクト(契約)を書ける

仕様的な説明

  • contract は、Ethereumネットワーク上の自動化されたエージェント
  • contract がアドレスを持っている
  • contract のアドレスにトランザクションを送ると、contract のコードが実行される

用語: 予備知識

Bitcoinの予備知識

Ethereumの予備知識

  • EVM-code (旧 EtherScript)
    • Ethereum クライアントに入っている Virtual Machine上で動く?

作れるもの

  • currency
  • finacial derivatives
  • wallet
  • data storage
  • name registration (DNS, Namecoin)
  • Decentralized Organizations

Languages

  • ECLL/CLL (Cのような言語)
    • Ethereum C-Like Language
  • HLL (python inspired)
  • LLL (LISP inspired)
  • シミュレータでは、JavaScriptっぽいのが動いている

上記を(EtherScript 2.0? EVM?)バイナリにする

仕様系用語

Contracts

  • トランザクションを作成、受け取りできるのは、人かcontracts
  • contract は、Ethereum network上に生きる基本的に自動化されたエージェント
  • contract は、EthereumアドレスとEthereumのbalanceを持っていて、トランザクションの送受信ができる
  • contract は、誰かがトランザクションを送るたびにアクティベートされ、その時にコードを実行する
  • もしかすると、内部のステータスを変更したり、トランザクションを送ったりしてから、シャットダウンするかもしれない。
  • contract用のコードは、特別な目的のための低レベル言語で書かれていて、以下項目から構成される
    • stack (not persistent)
    • 2^256 メモリー・エントリー (not persistent)
    • 2^256 ストレージ・エントリー (永久的なステータスを保持)

Applications

incoming トランザクション の変数

  • call.sender (address)
  • call.value
  • call.datasize

tx??

contract

  • contract.storage
  • contract.address

block

  • block.account_balance
  • block.number
  • block.difficulty
  • block.parenthash
  • block.basefee
  • block.timestamp

定数: constants

大文字で始まる変数は、定数

functions

関数もあるはずだが、ドキュメントになく、サンプルにある状態

  • mktx()

Data Format: データ・フォーマット

全てのデータは、RLP (recursive length prefix encoding)に入っている

Block ブロック

[
    block_header,
    transaction_list,
    uncle_list 
]

それらは

transaction_list = [
    transaction 1,
    transaction 2,
    ...
]

uncle list = [
    uncle_block_header_1,
    uncle_block_header_2,
    ...
]

block_header = [
    parent hash,
    sha3(rlp_encode(uncle_list)),
    coinbase address,
    state_root,
    sha3(rlp_encode(transaction_list)),
    difficulty,
    timestamp,
    extra_data,
    nonce
]

トランザクション

[ nonce, receiving_address, value, [ data item 0, data item 1 ... data item n ], v, r, s ]
  • アドレスとして空stringに送られたトランザクションは、特別なタイプのトランザクションで、”contract” を作る

コンパイラ

色々な言語で書いたものをコンパイルする

Etherchain上に、Web上のコンパイラ

Simulators: シミュレータ

Ethereum testnetに繋がないで、シミュレータで contract を送ったりできる。

Ethereum Simulator

Web上で利用できるシミュレータ (JavaScript)

使い方

  • 見えづらいボタンが3つある
    • send a transaction: トランザクションを送る
    • create a contract: コントラクトを作る
    • create a wallet: ウォレットを作る
  • テストを実行する
    • cryptsyfeedのコントラクトを実行する
    • create a transaction: のアイコンをクリック
    • From: で crypty.com を選択
    • To: で crypty.com を選択
    • Value と Fee を適当に設定
    • Data: の一行目に JPN/ETH 。二行目に 1000 的な値を書く
    • $submit transaction をクリック
    • 確認: 下のBLOCKの欄に追加される
    • 確認: Contract に値が追加される

CLL Simulator

CLL のシミュレータ。CLIベースの表示。
Pythonでのユニットテストのような感じ。

サンプル

Jam10o/contracts

FAQ from Forum

Writing Smart Contracts FAQ (live updates) – ethereum
http://forum.ethereum.org/discussion/505/writing-smart-contracts-faq-live-updates/p1

LLL Tutorial

LLL Tutorial · ethereum/cpp-ethereum Wiki

Write your own contracts: Slide and Video

Slide

Ethereum: Write your own contracts

Video

Ethereum: Write your own smart contracts + Q&A – YouTube

ビデオにおける説明

単なるメモです。

  • ether を配る
  • storage を保存するくらいのインセンティブになると、etherがないとダメ
if tx.value < 100 * block.basefee:
    stop
  • フィー(報酬)が足りないなら、ストップ
  • block.basefee はまだ決ってないが、定数が入る
  • tx: transaction
  • tx.value:
elif contract.storage[1000]:
  • はじめての実行か、2回目以降の実行か?の判断
  • contract.storage の アドレス 1000 のところにデータが入っているなら、実行。
  • contract.storage[1000]: strage indexes: memory position: used ad a flag: executed only once
  • block.basefee: constant, 100
    • why 1000? avoid to override memory
else:
    contract.storage[MYCREATOR] = 10^18
    contract.storage[1000] = 1
  • MYCREATOR = 999 とかあるはず
  • 10^18は、コイン数
  • contract.storage[1000] = 1は、初回実行したというフラグ
  • MYCREATOR: placeholder: public your ethereum account: creator of the cotract
  • from: local stroge

  • value = txdata[1]: how much currency

FAQ

  • どこに書く?
  • どう配布する?

Ethereum Blockchain Explorer

Etherchain – An Ethereum Blockchain Explorer

     

免責事項

本記事に掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。

技術・サービス・実装方法等のレビュー、その他解説・分析・意見につきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。

     

コンセンサス・ベイス(株)とブロックチェーン事業を行なってみませんか?

当サイトを運営するコンセンサス・ベイス株式会社は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。

ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。

     
     

ブロックチェーン学習に最適の書籍の紹介

図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書

ブロックチェーン イーサリアムへの入り口 第二版 (ブロックチェーン技術書籍)

本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。(はじめにより)

イーサリアム(Ethereum)カテゴリの最新記事