More Related Content More from Kenichi Kurimoto (9) Ethereum whitepaper14. 外部アカウント 秘密鍵コントロール
• nonce
• Ether balance
• storage
contract アカウント
• nonce
• Ether balance
• contract code
• storage
transactionを作ってsign
message
を送ることができる
messageを受け取ってcodeアクティベート
•storageへの読み書き
•他のmessageを送る
•contractを作る
Ethereum acount, message and transaction(1)
15. Ethereum acount, message and transaction(2)
Ethereumのtransactionとは:
外部accountから送られるmessageを保持しておく
署名されたデータパッケージ
• messageの受信者
• messageの送信者と署名
• Ether
• 送付データ
• ‘STARTGAS’, ‘GASPRICE’
STARTGAS 上限
GASPRICE 演算step毎に払う額
16. Ethereum acount, message and transaction(3)
Transactionとmessageの仕組み
Ethereumの重要なアイデア
‘外部accountとcontractが対等’である
(どちらもmessageを送ったり、contractを作ったりできる)
18. Ethereum State Transition Function(2):例
if !contract.storage[msg.data[0]]:
contract.storage[msg.data[0]] = mesg.data[1]
Serpantという上位言語 -> EVMコードにコンパイルされる
contractのstorageは空で始まる
transactionは10Etherと共に送付される
STARTGAS=2000 GASPRICE=0.001
データフィールドは二つ [2, ‘CHARLIE’]
19. Ethereum State Transition Function(3):例
if !contract.storage[msg.data[0]]:
contract.storage[msg.data[0]] = mesg.data[1]
1. transactionが有効でformatが正しいかチェック
2. transactionのsenderが 2000x0.001=2 ether持っているかチェック
持っていればsender accountから2 ether 引く
3. gasを2000に初期化: トランザクションが170バイトでバイトあたりのフィーが 5と
仮定する。850を引く事になるので、 1150gasが残っている事になる。
4. 10以上のetherを送付者のacountから引いて、contractのアカウントにそれを足す。
5. コードを実行する。: contractのストレージのインデックス 2が使われているか
チェックし、もし使われていなければストレージのインデックス 2に CHARLIE を
セットする。これは187 gasを使用するので、残った gasの量は 1150 - 187 = 963になる。
6. 963 * 0.001 = 0.963 ether を送付者のアカウントに戻す。結果の状態を返す。
20. Ethereum State Transition Function(4)
•transactionの最後を受信した時に contractが無い場合: フィーはGASPRICEに
transactionのバイト数を掛けたもの
•contractによって始められた messageは子計算に対して上限を決めれる
•子計算が燃料切れになった時、 messageコールが起きた所まで状態が戻る
25. トークンシステム
from = msg.sender
to = msg.data[0]
value = msg.data[1]
if contract.storage[from] >= value:
contract.storage[from] = contract.storage[from] -
value
contract.storage[to] = contract.storage[to] + value
26. 金融デリバティブ
EtherのUS$に対するボラタリティに対するヘッジ contract
1. 団体Aが1000 ether入力するのを待つ
2. 団体Bが1000 ether入力するのを待つ
3. データフィードcontractに問い合わせる事で計算された、 1000 etherのUSDでの
価値をstorageに記録する。これを $xとする
4. 30日後、AとBがcontractを再アクティーベートできるようにしておいて、 (再びデータフィード
contractに問い合わせることによって得られた新しい値に相当する )$xの価値があるetherをAに送り、
残りをBに送る。
28. Identity and Reputation System
Namecoinのような名前登録システム
if !contract.storage[tx.data[0]]:
contract.storage[tx.data[0]] = tx.data[1]
30. Decentralized Autonomous Organizations
仮想的なエンティティで、 67%以上のメンバー、またはシェアホルダーがファンドを使ったり、コードを
書き換える権利を持つ
コードのアウトライン: 2/3のメンバーが賛成した時に自分自身を修正するコード
[0,i,K,V] ストレージインデックス kのvalueをvに変更する提案iの登録
[0,i] 提案iに対する賛成の登録
[2,i] 提案iを充分な投票が行われた後、確定する
さらに伝達する委任を組み込む -> 問題に対して専門家が現れては消える
-> 固定された有識者という権益層を作らない