Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
スマートコントラクトプログラミング (3) イーサリアム実習 I / Ethereum Pra...
Search
Kenji Saito
PRO
May 24, 2017
Technology
470
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
スマートコントラクトプログラミング (3) イーサリアム実習 I / Ethereum Practice I
ブロックチェーンハブ主催で開催している (第2期) スマートコントラクトプログラミング講義 (3) 「イーサリアム実習 I」のスライドです。2017年5月24日(水) に使用しました。
Kenji Saito
PRO
May 24, 2017
More Decks by Kenji Saito
See All by Kenji Saito
Fall 2026: A Guide & Workshop on Using AI for Academic Paper Writing
ks91
PRO
0
35
FinTech 5-6 : The World of Apps
ks91
PRO
0
54
終わらない幼年期とそのための下部構造・社会資本 / The Never-Ending Childhood and the Infrastructure and Social Capital Needed to Support It
ks91
PRO
0
28
FinTech 3-4 : Internet Technology and Governance
ks91
PRO
0
72
2026 秋 生成AI を活用した論文執筆ガイド/ワークショップ / Fall 2026: Guide and Workshop on Writing Papers Using Generative AI
ks91
PRO
0
140
AIとビジネス・メガトレンド 〜 サイバネティクス的経営観 / AI and Business Megatrends: A Cybernetic Perspective on Management
ks91
PRO
0
43
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
160
アカデミーキャンプ 2026秋「位置ゲーに秀でよ!ウチらとヤツらのゲーム・デザイン」DAY 4 / Academy Camp 2026 Fall - Excel at Location-Based Games! Our and Their Game Design DAY 4
ks91
PRO
0
65
アカデミーキャンプ 2026秋「位置ゲーに秀でよ!ウチらとヤツらのゲーム・デザイン」DAY 3 / Academy Camp 2026 Fall - Excel at Location-Based Games! Our and Their Game Design DAY 3
ks91
PRO
0
75
Other Decks in Technology
See All in Technology
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
860
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
150
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.3k
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1.1k
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
280
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
490
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
470
Local CI × GitHub Actions
gogutan
2
190
AI コーディングと人間の認知スループット / CTO Night & Day 2026 Morning Session / AI Coding and Human Cognitive Throughput
prog893
4
1k
Classmethod Company Deck
satoshi7
1
680
Kiro Crewをはじめよう
kizawa2020
1
160
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1369
210k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Done Done
chrislema
187
17k
How to train your dragon (web standard)
notwaldorf
96
6.9k
From π to Pie charts
rasagy
1
400
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.4k
Technical Leadership for Architectural Decision Making
baasie
3
600
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Balancing Empowerment & Direction
lara
6
1.3k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
600
Transcript
I (3) CSO / SFC
[email protected]
I – (3) –
2017-05-24 – p.1/37
1. 2. 3. 4. 5. I – (3) – 2017-05-24
– p.2/37
1. : 2. ∼ ∼ I – (3) – 2017-05-24
– p.3/37
1. : I – (3) – 2017-05-24 – p.4/37
BcH-smart-contract-programming.zip contracts tests I – (3) – 2017-05-24 – p.5/37
Solidity JavaScript ( , ) (constructor) ( ) ( )
Ether I – (3) – 2017-05-24 – p.6/37
pragma solidity ˆ0.4.8; contract MyToken { ( ) : (EVM
) : function MyToken(...) { /* */ : } : } function C (/* */ // ) I – (3) – 2017-05-24 – 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-05-24 – p.8/37
MyToken event Transfer(address indexed from, address indexed to, uint256 value);
indexed (3 ) MyToken function Transfer() Ethereum-Wallet I – (3) – 2017-05-24 – 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-05-24 – p.10/37
MyToken getBalanceOf() function getBalanceOf(address _addr) returns (uint256 balance) { return
(balanceOf[_addr]); } I – (3) – 2017-05-24 – 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-05-24 – p.12/37
(1) import pytest @pytest.fixture() def token_contract(chain): TokenFactory = chain.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-05-24 – 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-05-24 – p.14/37
$ py.test tests/test_my_token.py I – (3) – 2017-05-24 – p.15/37
2. ∼ ∼ I – (3) – 2017-05-24 – p.16/37
A, B A-B m A B A B A B
. . . I – (3) – 2017-05-24 – p.17/37
1. X 2. X C 3. C 1. 2. 3.
reliable multicast I – (3) – 2017-05-24 – p.18/37
: I – (3) – 2017-05-24 – p.19/37
(safety) (liveness) ( ) ( = ) I – (3)
– 2017-05-24 – p.20/37
→ / (benign) → (Byzantine) (malicious) I – (3) –
2017-05-24 – p.21/37
FLP Fischer, Lynch, Paterson I – (3) – 2017-05-24 –
p.22/37
CAP Consistency ( ) Availability ( ) Partition tolerance (
) ⇒ 3 C Eventual consistency ( ) . . . I – (3) – 2017-05-24 – p.23/37
Consistency ( ) Strong consistency ( ) (safety) Eventual consistency
( ) (liveness) ↑ Weak consistency ( ) ↑ ( ) I – (3) – 2017-05-24 – p.24/37
n = f ( ) ⇒ I – (3) –
2017-05-24 – p.25/37
(1) 1 1, 2 n ≤ 3f I – (3)
– 2017-05-24 – p.26/37
(2) I – (3) – 2017-05-24 – p.27/37
CS1 : CS2 : CS3 : CL1 : CL2 :
: : (e.g. ) I – (3) – 2017-05-24 – p.28/37
(B)FT-CUP (Consensus with Unknown Participants) ( / ) : FT
(Fault-Tolerant) : BFT (Byzantine Fault-Tolerant) P2P n FT/BFT I – (3) – 2017-05-24 – p.29/37
State Machine Replication ( ) (by ) (since 1984) (
) ( ) . . . ( ) I – (3) – 2017-05-24 – p.30/37
( ) ( ) ( ) ( ) (by )
⇒ ( ) I – (3) – 2017-05-24 – p.31/37
P2P : P2P 3 3 ( ) strategyproof group strategyproof
I – (3) – 2017-05-24 – p.32/37
(Sybil) 16 I – (3) – 2017-05-24 – p.33/37
again n > 3f R F R > 2F ⇒
I – (3) – 2017-05-24 – p.34/37
( ) f = 1 ⇒ R I – (3)
– 2017-05-24 – p.35/37
(centralized) (decentralized) (distributed) Paul Baran, “On Distributed Communications Networks”, 1964
(C) (A) I – (3) – 2017-05-24 – p.36/37
II Hyperledger I – (3) – 2017-05-24 – p.37/37