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
AI 前提社会におけるトラスト / Trust in an AI-Driven Society
ks91
PRO
0
13
非営利組織の起業/発表と総括 / Starting up a Nonprofit Organization, Presentation and Summary
ks91
PRO
0
57
自己開発 / Self-Development
ks91
PRO
1
21
あなたは何によって憶えられたいですか? / What Do You Want to be Remembered for?
ks91
PRO
0
27
ボランティアと理事会 / Volunteers and Board of Directors
ks91
PRO
0
44
メタ・ネイチャーポジティブへの道 / The Path to Meta Nature Positive
ks91
PRO
0
35
アカデミーキャンプ2026 初春「ミライ、ゲーミファイ」DAY 3 / Academy Camp 2026 Early Spring "GAMIFY THE FUTURE!!" DAY 3
ks91
PRO
0
52
アカデミーキャンプ2026 初春「ミライ、ゲーミファイ」DAY 2 / Academy Camp 2026 Early Spring "GAMIFY THE FUTURE!!" DAY 2
ks91
PRO
0
87
アカデミーキャンプ2026 初春「ミライ、ゲーミファイ」DAY 1 / Academy Camp 2026 Early Spring "GAMIFY THE FUTURE!!" DAY 1
ks91
PRO
0
85
Other Decks in Technology
See All in Technology
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
230
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
68k
超初心者からでも大丈夫!オープンソース半導体の楽しみ方〜今こそ!オレオレチップをつくろう〜
keropiyo
0
110
AIと新時代を切り拓く。これからのSREとメルカリIBISの挑戦
0gm
0
910
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.1k
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
930
[CV勉強会@関東 World Model 読み会] Orbis: Overcoming Challenges of Long-Horizon Prediction in Driving World Models (Mousakhan+, NeurIPS 2025)
abemii
0
130
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
450
What happened to RubyGems and what can we learn?
mikemcquaid
0
300
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
240
OWASP Top 10:2025 リリースと 少しの日本語化にまつわる裏話
okdt
PRO
3
750
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
450
Site-Speed That Sticks
csswizardry
13
1.1k
Automating Front-end Workflow
addyosmani
1371
200k
Building Adaptive Systems
keathley
44
2.9k
Chasing Engaging Ingredients in Design
codingconduct
0
110
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
200
sira's awesome portfolio website redesign presentation
elsirapls
0
150
Building a Scalable Design System with Sketch
lauravandoore
463
34k
[SF Ruby Conf 2025] Rails X
palkan
1
750
Making Projects Easy
brettharned
120
6.6k
Leo the Paperboy
mayatellez
4
1.4k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
940
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