Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
イーサリアム実習 I / Practicing Ethereum I
Search
Kenji Saito
PRO
November 01, 2017
Technology
0
190
イーサリアム実習 I / Practicing Ethereum I
2017年11月1日(水)、ブロックチェーンアカデミー「スマートコントラクトプログラミング講座(3)」にて使用のスライドです。
Kenji Saito
PRO
November 01, 2017
Tweet
Share
More Decks by Kenji Saito
See All by Kenji Saito
FinTech Lecture 1-2 : Overview of FinTech
ks91
PRO
0
76
ブロックチェーンと分散ファイナンス概論 / Introduction to Blockchain and Decentralized Finance
ks91
PRO
0
25
アカデミーキャンプ 2024秋「都の西北で、もう一度AI(アイ)を叫ぶ」DAY 3 / Academy Camp 2024 Fall - Screaming AI at the North-West of the Capital - DAY 3
ks91
PRO
0
48
アカデミーキャンプ 2024秋「都の西北で、もう一度AI(アイ)を叫ぶ」DAY 2 / Academy Camp 2024 Fall - Screaming AI at the North-West of the Capital - DAY 2
ks91
PRO
0
36
アカデミーキャンプ 2024秋「都の西北で、もう一度AI(アイ)を叫ぶ」DAY 1 / Academy Camp 2024 Fall - Screaming AI at the North-West of the Capital - DAY 1
ks91
PRO
0
71
デジタル製品パスポート | 身体を持つ生成AI / Digital Product Passports | Generative AI with a Body
ks91
PRO
0
27
ゼミ紹介 : 公共の利益のためのデジタルトランスフォーメーション / Zemi Introduction : Digital Transformation for Public Good
ks91
PRO
0
32
最新 DX 推進論 / Latest DX Promotion Theory
ks91
PRO
0
220
そのデジタル製品パスポートでどこへ行く? / Where Are You Going with That Digital Product Passport?
ks91
PRO
0
25
Other Decks in Technology
See All in Technology
Strict Concurrencyにしたらdeinitでクラッシュする話
0si43
0
120
Oracle GoldenGate 23ai 導入Tips
oracle4engineer
PRO
1
200
My Generation 年配者がこの先生きのこるには/My Generation How elder engineers can survive
kwappa
3
5.1k
スモールスタート、不都合な真実 〜 耳当たりの良い言葉に現場が振り回されないために/20240930-ssmjp-small-start
opelab
12
1.7k
PREEMPT_RT over the years
ennael
PRO
0
290
Amazon BedrockとPR-Agentでコードレビュー自動化に挑戦・実際に運用してみた
diggymo
0
550
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
2
200
低コストで実現する社内文書RAG機能を搭載したAIチャットボット開発
takapy
3
560
How CERN serves 1EB of data via FUSE
ennael
PRO
0
15k
入門 バックアップ
ryuichi1208
5
1k
XPを始める新人に伝えたい近道の鍵
nakasho
1
230
virtme-ng
ennael
PRO
0
310
Featured
See All Featured
Optimizing for Happiness
mojombo
375
69k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
37
6.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
1
230
Visualization
eitanlees
143
15k
Thoughts on Productivity
jonyablonski
67
4.2k
Writing Fast Ruby
sferik
625
60k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
A Philosophy of Restraint
colly
202
16k
GraphQLの誤解/rethinking-graphql
sonatard
65
9.9k
Transcript
I (3) CSO / SFC
[email protected]
I – (3) –
2017-11-01 – p.1/37
1. 2. 3. 4. 5. Populus “Bash on Ubuntu on
Windows” geth (Go segmentation fault ) I – (3) – 2017-11-01 – p.2/37
1. : 2. ∼ ∼ I – (3) – 2017-11-01
– p.3/37
1. : I – (3) – 2017-11-01 – p.4/37
BcH-smart-contract-programming.zip init.py Populus 1.11.0 init10.py Populus 1.10.1 contracts tests I
– (3) – 2017-11-01 – p.5/37
Solidity JavaScript ( , ) (constructor) ( ) ( )
Ether I – (3) – 2017-11-01 – p.6/37
pragma solidity ˆ0.4.8; contract MyToken { ( ) : (EVM
) : function MyToken(...) { /* */ : } : } function C (/* */ // ) I – (3) – 2017-11-01 – p.7/37
MyToken string public name; string public symbol; uint8 public decimals;
mapping (address => uint256) public balanceOf; name, symbol decimals : 2 100 1.00 mapping balanceOf I – (3) – 2017-11-01 – p.8/37
MyToken event Transfer(address indexed from, address indexed to, uint256 value);
indexed (3 ) MyToken function Transfer() Ethereum-Wallet I – (3) – 2017-11-01 – p.9/37
MyToken function MyToken(uint256 _supply, string _name, string _symbol, uint8 _decimals)
{ if (_supply == 0) { _supply = 1000000; /* _supply 1,000,000 */ } balanceOf[msg.sender] = _supply; name = _name; symbol = _symbol; decimals = _decimals; } msg.sender _supply C++ _ I – (3) – 2017-11-01 – p.10/37
MyToken getBalanceOf() function getBalanceOf(address _addr) returns (uint256 balance) { return
(balanceOf[_addr]); } I – (3) – 2017-11-01 – p.11/37
MyToken transfer() function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender]
< _value) { /* */ throw; } if (balanceOf[_to] + _value < balanceOf[_to]) { /* */ throw; } balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); } throw (function ) catch I – (3) – 2017-11-01 – p.12/37
(1) import pytest @pytest.fixture() def token_contract(chain): TokenFactory = chain.provider.get_contract_factory(’MyToken’) deploy_txid
= TokenFactory.deploy(args=[ 0, "BcH Coin", "BcH", 0, ]) contract_address = chain.wait.for_contract_address(deploy_txid) return TokenFactory(address=contract_address) populus I – (3) – 2017-11-01 – p.13/37
(2) def test_my_token(token_contract, chain): account0 = chain.web3.eth.accounts[0] account1 = chain.web3.eth.accounts[1]
assert token_contract.call().getBalanceOf(account0) == 1000000 assert token_contract.call().getBalanceOf(account1) == 0 txid = token_contract.transact().transfer(account1, 10) chain.wait.for_receipt(txid) assert token_contract.call().getBalanceOf(account0) == 999990 assert token_contract.call().getBalanceOf(account1) == 10 account0 coinbase account1 account0 account1 10BcH I – (3) – 2017-11-01 – p.14/37
$ py.test -k test_my_token.py I – (3) – 2017-11-01 –
p.15/37
2. ∼ ∼ I – (3) – 2017-11-01 – p.16/37
A, B A-B m A B A B A B
. . . I – (3) – 2017-11-01 – p.17/37
1. X 2. X C 3. C 1. 2. 3.
reliable multicast I – (3) – 2017-11-01 – p.18/37
: I – (3) – 2017-11-01 – p.19/37
(safety) (liveness) ( ) ( = ) I – (3)
– 2017-11-01 – p.20/37
→ / (benign) → (Byzantine) (malicious) I – (3) –
2017-11-01 – p.21/37
FLP Fischer, Lynch, Paterson I – (3) – 2017-11-01 –
p.22/37
CAP Consistency ( ) Availability ( ) Partition tolerance (
) ⇒ 3 C Eventual consistency ( ) . . . I – (3) – 2017-11-01 – p.23/37
Consistency ( ) Strong consistency ( ) (safety) Eventual consistency
( ) (liveness) ↑ Weak consistency ( ) ↑ ( ) I – (3) – 2017-11-01 – p.24/37
n = f ( ) ⇒ I – (3) –
2017-11-01 – p.25/37
(1) 1 1, 2 n ≤ 3f I – (3)
– 2017-11-01 – p.26/37
(2) I – (3) – 2017-11-01 – p.27/37
CS1 : CS2 : CS3 : CL1 : CL2 :
: : (e.g. ) I – (3) – 2017-11-01 – p.28/37
(B)FT-CUP (Consensus with Unknown Participants) ( / ) : FT
(Fault-Tolerant) : BFT (Byzantine Fault-Tolerant) P2P n FT/BFT I – (3) – 2017-11-01 – p.29/37
State Machine Replication ( ) (by ) (since 1984) (
) ( ) . . . ( ) I – (3) – 2017-11-01 – p.30/37
( ) ( ) ( ) ( ) (by )
⇒ ( ) I – (3) – 2017-11-01 – p.31/37
P2P : P2P 3 3 ( ) strategyproof group strategyproof
I – (3) – 2017-11-01 – p.32/37
(Sybil) 16 I – (3) – 2017-11-01 – p.33/37
again n > 3f R F R > 2F ⇒
I – (3) – 2017-11-01 – p.34/37
( ) f = 1 ⇒ R I – (3)
– 2017-11-01 – p.35/37
(centralized) (decentralized) (distributed) Paul Baran, “On Distributed Communications Networks”, 1964
(C) (A) I – (3) – 2017-11-01 – p.36/37
II Hyperledger I – (3) – 2017-11-01 – p.37/37