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

スマートコントラクトプログラミング (4) イーサリアム実習 II / Ethereum Pr...

スマートコントラクトプログラミング (4) イーサリアム実習 II / Ethereum Practice II

ブロックチェーンハブ主催で開催している (第2期) スマートコントラクトプログラミング講義 (4) 「イーサリアム実習 II」のスライドです。2017年5月31日(水) に使用しました。

Avatar for Kenji Saito

Kenji Saito

May 31, 2017
Tweet

More Decks by Kenji Saito

Other Decks in Technology

Transcript

  1. 1. : 2. : 3. / II – (4) –

    2017-05-31 – p.3/45
  2. 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
  3. 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
  4. 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
  5. (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
  6. (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
  7. 1. ( ) 2. ( ) 3. ( ) II

    – (4) – 2017-05-31 – p.16/45
  8. 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
  9. (1) import pytest @pytest.fixture() def token_contract(chain): . . . @pytest.fixture()

    def asset_contract(chain): . . . II – (4) – 2017-05-31 – p.18/45
  10. (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
  11. (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
  12. (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
  13. (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
  14. 3. / Hyperledger (Fabric, Sawtooth, Iroha, Burrow) R3 Corda Enterprise

    Ethereum Alliance II – (4) – 2017-05-31 – p.24/45
  15. (Hyperledger ) ( ) ( ) ( ) IoT /

    / II – (4) – 2017-05-31 – p.25/45
  16. / : Proposal → Incubation → Active → Deprecated →

    End of Life II – (4) – 2017-05-31 – p.28/45
  17. (Docker) (chaincode) PBFT (Practical BFT) RocksDB CA PKI v1.0 DB

    CA II – (4) – 2017-05-31 – p.33/45
  18. ( ) (permissioned) (permissionless) Proof of Elapsed Time (PoET) Proof

    of Work ( ) (Intel ) Transaction Families II – (4) – 2017-05-31 – p.35/45
  19. R3 R3CEV 77 (2017 2 ) 3 SBI , R3Net(

    ) Corda II – (4) – 2017-05-31 – p.41/45
  20. JVM ( ) (Uniqueness Services) UTXO X.509 PKI ( )

    II – (4) – 2017-05-31 – p.44/45