Upgrade to Pro — share decks privately, control downloads, hide ads and more …

イーサリアム実習 I / Practicing Ethereum I

イーサリアム実習 I / Practicing Ethereum I

2017年11月1日(水)、ブロックチェーンアカデミー「スマートコントラクトプログラミング講座(3)」にて使用のスライドです。

Kenji Saito
PRO

November 01, 2017
Tweet

More Decks by Kenji Saito

Other Decks in Technology

Transcript

  1. I (3) CSO / SFC [email protected] I – (3) –

    2017-11-01 – p.1/37
  2. 1. 2. 3. 4. 5. Populus “Bash on Ubuntu on

    Windows” geth (Go segmentation fault ) I – (3) – 2017-11-01 – p.2/37
  3. 1. : 2. ∼ ∼ I – (3) – 2017-11-01

    – p.3/37
  4. 1. : I – (3) – 2017-11-01 – p.4/37

  5. 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
  6. Solidity JavaScript ( , ) (constructor) ( ) ( )

    Ether I – (3) – 2017-11-01 – p.6/37
  7. pragma solidity ˆ0.4.8; contract MyToken { ( ) : (EVM

    ) : function MyToken(...) { /* */ : } : } function C (/* */ // ) I – (3) – 2017-11-01 – p.7/37
  8. 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
  9. 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
  10. 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
  11. MyToken getBalanceOf() function getBalanceOf(address _addr) returns (uint256 balance) { return

    (balanceOf[_addr]); } I – (3) – 2017-11-01 – p.11/37
  12. 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
  13. (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
  14. (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
  15. $ py.test -k test_my_token.py I – (3) – 2017-11-01 –

    p.15/37
  16. 2. ∼ ∼ I – (3) – 2017-11-01 – p.16/37

  17. A, B A-B m A B A B A B

    . . . I – (3) – 2017-11-01 – p.17/37
  18. 1. X 2. X C 3. C 1. 2. 3.

    reliable multicast I – (3) – 2017-11-01 – p.18/37
  19. : I – (3) – 2017-11-01 – p.19/37

  20. (safety) (liveness) ( ) ( = ) I – (3)

    – 2017-11-01 – p.20/37
  21. → / (benign) → (Byzantine) (malicious) I – (3) –

    2017-11-01 – p.21/37
  22. FLP Fischer, Lynch, Paterson I – (3) – 2017-11-01 –

    p.22/37
  23. CAP Consistency ( ) Availability ( ) Partition tolerance (

    ) ⇒ 3 C Eventual consistency ( ) . . . I – (3) – 2017-11-01 – p.23/37
  24. Consistency ( ) Strong consistency ( ) (safety) Eventual consistency

    ( ) (liveness) ↑ Weak consistency ( ) ↑ ( ) I – (3) – 2017-11-01 – p.24/37
  25. n = f ( ) ⇒ I – (3) –

    2017-11-01 – p.25/37
  26. (1) 1 1, 2 n ≤ 3f I – (3)

    – 2017-11-01 – p.26/37
  27. (2) I – (3) – 2017-11-01 – p.27/37

  28. CS1 : CS2 : CS3 : CL1 : CL2 :

    : : (e.g. ) I – (3) – 2017-11-01 – p.28/37
  29. (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
  30. State Machine Replication ( ) (by ) (since 1984) (

    ) ( ) . . . ( ) I – (3) – 2017-11-01 – p.30/37
  31. ( ) ( ) ( ) ( ) (by )

    ⇒ ( ) I – (3) – 2017-11-01 – p.31/37
  32. P2P : P2P 3 3 ( ) strategyproof group strategyproof

    I – (3) – 2017-11-01 – p.32/37
  33. (Sybil) 16 I – (3) – 2017-11-01 – p.33/37

  34. again n > 3f R F R > 2F ⇒

    I – (3) – 2017-11-01 – p.34/37
  35. ( ) f = 1 ⇒ R I – (3)

    – 2017-11-01 – p.35/37
  36. (centralized) (decentralized) (distributed) Paul Baran, “On Distributed Communications Networks”, 1964

    (C) (A) I – (3) – 2017-11-01 – p.36/37
  37. II Hyperledger I – (3) – 2017-11-01 – p.37/37