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
マニフェスト: 人類の知のフロンティアに向けた拡張的足場へ / Manifesto: Toward Expansive Scaffolding for Humanity's Knowledge Frontier
ks91
PRO
0
8
続・スマートコントラクトと分散ファイナンス / Smart Contracts and Decentralized Finance, Continued
ks91
PRO
0
43
スマートコントラクトと分散ファイナンス / Smart Contracts and Decentralized Finance
ks91
PRO
0
63
シン・ブロックチェーン / Truth of Blockchain
ks91
PRO
0
97
パスワード/パスフレーズと認証 / Password, Passphrase and Authentication
ks91
PRO
0
37
git と GitHub / git and GitHub
ks91
PRO
0
36
ソフトウェアの開発と保守 / Software Development and Maintenance
ks91
PRO
0
50
インターネットの特徴 / Features of the Internet
ks91
PRO
0
34
インターネットのガバナンス / Governance of the Internet
ks91
PRO
0
30
Other Decks in Technology
See All in Technology
Claude Code に プロジェクト管理やらせたみた
unson
6
4.5k
What’s new in Android development tools
yanzm
0
330
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
960
2025-07-06 QGIS初級ハンズオン「はじめてのQGIS」
kou_kita
0
170
対話型音声AIアプリケーションの信頼性向上の取り組み
ivry_presentationmaterials
1
270
Geminiとv0による高速プロトタイピング
shinya337
1
280
マネジメントって難しい、けどおもしろい / Management is tough, but fun! #em_findy
ar_tama
7
1.1k
AI専用のリンターを作る #yumemi_patch
bengo4com
6
4.3k
American airlines ®️ USA Contact Numbers: Complete 2025 Support Guide
airhelpsupport
0
390
高速なプロダクト開発を実現、創業期から掲げるエンタープライズアーキテクチャ
kawauso
3
9.6k
MobileActOsaka_250704.pdf
akaitadaaki
0
150
Delta airlines Customer®️ USA Contact Numbers: Complete 2025 Support Guide
deltahelp
0
810
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
695
190k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Producing Creativity
orderedlist
PRO
346
40k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Writing Fast Ruby
sferik
628
62k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
BBQ
matthewcrist
89
9.7k
Docker and Python
trallard
44
3.5k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.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