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
スマートコントラクトプログラミング (4) イーサリアム実習 II / Ethereum Pr...
Search
Kenji Saito
PRO
May 31, 2017
Technology
1
280
スマートコントラクトプログラミング (4) イーサリアム実習 II / Ethereum Practice II
ブロックチェーンハブ主催で開催している (第2期) スマートコントラクトプログラミング講義 (4) 「イーサリアム実習 II」のスライドです。2017年5月31日(水) に使用しました。
Kenji Saito
PRO
May 31, 2017
Tweet
Share
More Decks by Kenji Saito
See All by Kenji Saito
スマートコントラクトデザイン / Smart Contract Design
ks91
PRO
0
7
FinTech 7-8 : Blockchain
ks91
PRO
0
73
スマートコントラクトプログラミング / Smart Contract Programming
ks91
PRO
0
19
AI が研究する時代に、人はどう育つのか? — GAMER PAT にみる "シリアスゲームとしての知的訓練" / In an era where AI conducts research, how will humans develop? — "Intellectual Training as a Serious Game" Seen in GAMER PAT
ks91
PRO
0
59
FinTech 5-6 : The World of Apps
ks91
PRO
0
110
生成AI による論文執筆サポート・ワークショップ ─ サーベイ/リサーチクエスチョン編 / Workshop on AI-Assisted Paper Writing Support: Survey/Research Question Edition
ks91
PRO
0
84
ブロックチェーン概論とインストール大会 / Introduction to Blockchain and Installation Workshop
ks91
PRO
0
11
FinTech 3-4 : Internet Technology and Governance
ks91
PRO
0
83
民主主義と博愛(Humanitarianism) / Democracy and Humanitarianism
ks91
PRO
0
19
Other Decks in Technology
See All in Technology
DMMの検索システムをSolrからElasticCloudに移行した話
hmaa_ryo
0
280
新米エンジニアをTech Leadに任命する ー 成長を支える挑戦的な人と組織のマネジメント
naopr
1
210
AI駆動で進める依存ライブラリ更新 ─ Vue プロジェクトの品質向上と開発スピード改善の実践録
sayn0
1
340
オブザーバビリティと育てた ID管理・認証認可基盤の歩み / The Journey of an ID Management, Authentication, and Authorization Platform Nurtured with Observability
kaminashi
2
1.3k
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
0
390
RemoteFunctionを使ったコロケーション
mkazutaka
1
150
知覚とデザイン
rinchoku
1
640
AWSが好きすぎて、41歳でエンジニアになり、AAIを経由してAWSパートナー企業に入った話
yama3133
2
200
アウトプットから始めるOSSコントリビューション 〜eslint-plugin-vueの場合〜 #vuefes
bengo4com
3
1.9k
組織全員で向き合うAI Readyなデータ利活用
gappy50
5
1.8k
AI連携の新常識! 話題のMCPをはじめて学ぶ!
makoakiba
0
160
文字列操作の達人になる ~ Kotlinの文字列の便利な世界 ~ - Kotlin fest 2025
tomorrowkey
1
200
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Leading Effective Engineering Teams in the AI Era
addyosmani
7
670
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Code Reviewing Like a Champion
maltzj
526
40k
Code Review Best Practice
trishagee
72
19k
Balancing Empowerment & Direction
lara
5
700
Transcript
II (4) CSO / SFC
[email protected]
II – (4) –
2017-05-31 – p.1/45
1. : 2. ∼ ∼ II – (4) – 2017-05-31
– p.2/45
1. : 2. : 3. / II – (4) –
2017-05-31 – p.3/45
1. II – (4) – 2017-05-31 – p.4/45
(m2 ) 1 1 II – (4) – 2017-05-31 –
p.5/45
IndivisibleAsset string public _name; string public _symbol; uint256 public _quantity;
address public _owner; _name ( ) _symbol _quantity (m2 ) _owner _ Solidity . . . II – (4) – 2017-05-31 – p.6/45
IndivisibleAsset event Transfer(address indexed from, address indexed to); from to
II – (4) – 2017-05-31 – p.7/45
IndivisibleAsset function IndivisibleAsset(string name, string symbol, uint256 quantity) { _name
= name; _symbol = symbol; _quantity = quantity; _owner = msg.sender; } II – (4) – 2017-05-31 – p.8/45
IndivisibleAsset getOwner() function getOwner() returns (address owner) { return (_owner);
} II – (4) – 2017-05-31 – p.9/45
IndivisibleAsset transfer() function transfer(address to) { if (_owner != msg.sender)
{ throw; } _owner = to; Transfer(msg.sender, to); } ( / ) $ populus compile II – (4) – 2017-05-31 – p.10/45
(1) import pytest @pytest.fixture() def asset_contract(chain): AssetFactory = chain.get_contract_factory(’IndivisibleAsset’) deploy_txid
= AssetFactory.deploy(args=[ "5322 Endo, Fujisawa", "mˆ2", 300, ]) contract_address = chain.wait.for_contract_address(deploy_txid) return AssetFactory(address=contract_address) SFC (300m2 ) II – (4) – 2017-05-31 – p.11/45
(2) def test_indivisible_assset(asset_contract, chain): account0 = chain.web3.eth.accounts[0] account1 = chain.web3.eth.accounts[1]
assert asset_contract.call().getOwner() == account0 txid = asset_contract.transact().transfer(account1) chain.wait.for_receipt(txid) assert asset_contract.call().getOwner() == account1 account0 account1 II – (4) – 2017-05-31 – p.12/45
$ py.test tests/test_indivisible_asset.py II – (4) – 2017-05-31 – p.13/45
2. II – (4) – 2017-05-31 – p.14/45
transfer settle, retrieve asset, retrieve token 3 II – (4)
– 2017-05-31 – p.15/45
1. ( ) 2. ( ) 3. ( ) II
– (4) – 2017-05-31 – p.16/45
OneTimeEscrow settle() function settle() { address addr = this; /*
this */ if (_token.getBalanceOf(this) < _price || _asset.getOwner() != addr) { throw; } _token.transfer(_seller , _price); _asset.transfer(_buyer); Settled(); /* */ } settle() transfer ( / ) $ populus compile II – (4) – 2017-05-31 – p.17/45
(1) import pytest @pytest.fixture() def token_contract(chain): . . . @pytest.fixture()
def asset_contract(chain): . . . II – (4) – 2017-05-31 – p.18/45
(2) def test_one_time_escrow(token_contract, asset_contract, chain): account0 = chain.web3.eth.accounts[0] account1 =
chain.web3.eth.accounts[1] txid = chain.web3.eth.sendTransaction({ ’from’: account0, ’to’: account1, ’value’: chain.web3.toWei(1, "ether") }) chain.wait.for_receipt(txid) txid = token_contract.transact().transfer(account1, 300) chain.wait.for_receipt(txid) account0 account1 1Ether 300BcH 300BcH TX II – (4) – 2017-05-31 – p.19/45
(3) EscrowFactory = chain.get_contract_factory(’OneTimeEscrow’) txid = EscrowFactory.deploy(args=[ token_contract.address, account1, asset_contract.address,
account0, 300, ]) contract_address = chain.wait.for_contract_address(txid) EscrowFactory.address = contract_address; account1 account0 300BcH II – (4) – 2017-05-31 – p.20/45
(4) txid = token_contract.transact({ ’from’: account1 }).transfer(contract_address, 300) chain.wait.for_receipt(txid) txid
= asset_contract.transact().transfer(contract_address) chain.wait.for_receipt(txid) assert token_contract.call().getBalanceOf(account0) == 999700 assert token_contract.call().getBalanceOf(account1) == 0 assert token_contract.call().getBalanceOf(contract_address) == 300 assert asset_contract.call().getOwner() == contract_address account1 300BcH account0 II – (4) – 2017-05-31 – p.21/45
(5) txid = EscrowFactory.transact().settle(); chain.wait.for_receipt(txid) assert token_contract.call().getBalanceOf(account0) == 1000000 assert
token_contract.call().getBalanceOf(account1) == 0 assert token_contract.call().getBalanceOf(contract_address) == 0 assert asset_contract.call().getOwner() == account1 settle() II – (4) – 2017-05-31 – p.22/45
$ py.test tests/test_one_time_escrow.py : settle() II – (4) – 2017-05-31
– p.23/45
3. / Hyperledger (Fabric, Sawtooth, Iroha, Burrow) R3 Corda Enterprise
Ethereum Alliance II – (4) – 2017-05-31 – p.24/45
(Hyperledger ) ( ) ( ) ( ) IoT /
/ II – (4) – 2017-05-31 – p.25/45
( ) ( ) ← II – (4) – 2017-05-31
– p.26/45
(Linux Foundation) https://www.hyperledger.org Apache License, Version 2.0 II – (4)
– 2017-05-31 – p.27/45
/ : Proposal → Incubation → Active → Deprecated →
End of Life II – (4) – 2017-05-31 – p.28/45
: https://www.hyperledger.org/about/members II – (4) – 2017-05-31 – p.29/45
Fabric (IBM) IBM Digital Asset Holdings http://hyperledger-fabric.readthedocs.io/en/latest/ State : Active
II – (4) – 2017-05-31 – p.30/45
( ) II – (4) – 2017-05-31 – p.31/45
II – (4) – 2017-05-31 – p.32/45
(Docker) (chaincode) PBFT (Practical BFT) RocksDB CA PKI v1.0 DB
CA II – (4) – 2017-05-31 – p.33/45
Sawtooth (Intel) https://github.com/hyperledger/sawtooth-core State : Active II – (4) –
2017-05-31 – p.34/45
( ) (permissioned) (permissionless) Proof of Elapsed Time (PoET) Proof
of Work ( ) (Intel ) Transaction Families II – (4) – 2017-05-31 – p.35/45
(transaction families) (PoET ) PoET ( ) (transaction families) II
– (4) – 2017-05-31 – p.36/45
Iroha ( ) https://github.com/hyperledger/iroha State : Active II – (4)
– 2017-05-31 – p.37/45
( ) DLT : C++ Sumeragi Whitepaper : https://github.com/hyperledger/iroha/blob/master/docs/iroha_whitepaper.md II
– (4) – 2017-05-31 – p.38/45
JVM (chaincode) Sumeragi (BFT) II – (4) – 2017-05-31 –
p.39/45
Corda (R3) R3 https://github.com/corda/corda II – (4) – 2017-05-31 –
p.40/45
R3 R3CEV 77 (2017 2 ) 3 SBI , R3Net(
) Corda II – (4) – 2017-05-31 – p.41/45
Corda Corda : : II – (4) – 2017-05-31 –
p.42/45
+ CAP II – (4) – 2017-05-31 – p.43/45
JVM ( ) (Uniqueness Services) UTXO X.509 PKI ( )
II – (4) – 2017-05-31 – p.44/45
⇒ ⇒ II – (4) – 2017-05-31 – p.45/45