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
スマートコントラクトプログラミング (3) イーサリアム実習 I / Ethereum Pra...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kenji Saito
PRO
May 24, 2017
Technology
460
1
Share
スマートコントラクトプログラミング (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
ワールドカフェ再び、そしてゴール・ルール・ロール・ツール / World Café Revisited, and the Goals-Rules-Roles-Tools
ks91
PRO
0
26
AI の技術 / AI technology
ks91
PRO
0
1
AI 前提社会における(地球)環境データのセンシング / Sensing of (Global) Environmental Data in an AI-Driven Society
ks91
PRO
0
19
自然言語の扱いと翻訳のためのプロンプト / Handling Natural Language and Prompts for Translation
ks91
PRO
0
18
シリアスゲームとしてのRPG / RPGs as Serious Games
ks91
PRO
0
25
“September 12th” ゲームのプロンプトの構造 / The Structure of the "September 12th" Game Prompt
ks91
PRO
0
22
ウェブとイノベーション / The Web and Innovation
ks91
PRO
0
130
試作とデモンストレーション / Prototyping and Demonstrations
ks91
PRO
0
200
アカデミーキャンプ2026GW「前倒し!ウチらとヤツらの自由研究」DAY 4 / Academy Camp 2026 GW "Bringing It Forward! Our and Their Free Research Projects" DAY 4
ks91
PRO
0
33
Other Decks in Technology
See All in Technology
サービスの信頼性を高めるため、形骸化した「プロダクションミーティング」を立て直すまでの取り組み
stefafafan
1
260
AIエージェントの支払い基盤 AgentCore Payments概要
kmiya84377
2
160
サンプリングは「作る」のか「使う」のか? 分散トレースのコストと運用を両立する実践的戦略 / Why you need the tail sampling and why you don't want it
ymotongpoo
3
150
多角的な視点から見たAGI
terisuke
0
130
自動テストだけで リリース判断できるチームへ - 鍵はテストの量ではなくリリース判断基準の再設計にあった / Redesigning Release Criteria for Lightweight Releases
ewa
7
3.6k
エージェント時代の UIとAPI、CLI戦略
coincheck_recruit
0
160
SREの仕事は「壊さないこと」ではなくなった 〜自律化していくシステムに、責任と判断を与えるという価値〜 / 20260515 Naoki Shimada
shift_evolve
PRO
1
110
QAエンジニアはどうやって プロダクト議論の場に入れるのか?
moritamasami
2
410
要件定義の精度を高めるための型と生成AIの活用 / Using Types and Generative AI to Improve the Accuracy of Requirements Definition
haru860
0
310
AI対話分析の夢と、汚いデータの現実 Looker / Dataplex / Dataform で実現する品質ファーストな基盤設計
waiwai2111
0
280
AI時代の品質はテストプロセスの作り直し #scrumniigata
kyonmm
PRO
4
1.4k
生成AIはソフトウェア開発の革命か、ソフトウェア工学の宿題再提出なのか -ソフトウェア品質特性の追加提案-
kyonmm
PRO
2
870
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
790
30 Presentation Tips
portentint
PRO
1
290
A Modern Web Designer's Workflow
chriscoyier
698
190k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.8k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
540
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
260
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
70
39k
Are puppies a ranking factor?
jonoalderson
1
3.4k
Into the Great Unknown - MozCon
thekraken
41
2.5k
AI: The stuff that nobody shows you
jnunemaker
PRO
6
630
GitHub's CSS Performance
jonrohan
1032
470k
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