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

続・スマートコントラクトと分散ファイナンス / Smart Contracts and Dec...

続・スマートコントラクトと分散ファイナンス / Smart Contracts and Decentralized Finance, Continued

早稲田大学大学院経営管理研究科「フィンテック ─ 金融革新とインターネット」2025 夏の第7-8回で使用したスライドです。

Avatar for Kenji Saito

Kenji Saito

July 05, 2025
Tweet

More Decks by Kenji Saito

Other Decks in Technology

Transcript

  1. Light and Shadow — Generated by Stable Diffusion 3.5 —

    2025 9-10 (WBS) — 2025 9-10 — 2025-07-07 – p.1/58
  2. ( ) 1 6 9 (1) • 2 6 9

    (2) • 3 6 16 Web3 (1) • 4 6 16 Web3 (2) • 5 6 23 (1) • 6 6 23 (2) • 7 6 30 (1) • 8 6 30 (2) • 9 7 7 (1) • 10 7 7 (2) • 11 7 14 12 7 14 13 7 21 (1) ( ) 14 7 21 (2) ( ) W-IOI ( ) — 2025 9-10 — 2025-07-07 – p.3/58
  3. ( 20 ) 1 ↑ 2 ↓ 2025 3 4

    (TCP/IP ) 5 6 7 8 ↑ 9 ↓ 2024 ( ) 10 World Wide Web 11 Web API 12 * 13 git GitHub 14 (6/23 ) / (2 ) OK / — 2025 9-10 — 2025-07-07 – p.4/58
  4. Y The DAO ⇒ Monacoin (2018), Bitcoin Gold (2020), etc.

    Ethereum The DAO ( ) ( ) Ethereum Classic — 2025 9-10 — 2025-07-07 – p.8/58
  5. M AI AI? ( ) AI ⇒ AI — 2025

    9-10 — 2025-07-07 – p.9/58
  6. S ( JPMC CBDC( )) 1 1USD Bit Coin ⇒

    OK CBDC — 2025 9-10 — 2025-07-07 – p.12/58
  7. S proof of state proof of works proof of stake

    ⇒ PoS PoS 2 — 2025 9-10 — 2025-07-07 – p.13/58
  8. N ⇒ — . . . Discuss. — 2025 9-10

    — 2025-07-07 – p.14/58
  9. Ethereum · → · → · → — 2025 9-10

    — 2025-07-07 – p.17/58
  10. (by ) 1. 2. ( ) ( ) . .

    . cf. by McLuhan cf. by McLuhan → — 2025 9-10 — 2025-07-07 – p.19/58
  11. by SNS AI AI ⇒ ( ) ⇒ — 2025

    9-10 — 2025-07-07 – p.21/58
  12. Ethereum Vitalik Buterin, “Ethereum White Paper: A NEXT GENERATION SMART

    CONTRACT & DECENTRALIZED APPLICATION PLATFORM” (Dec. 2013∼) 12 ( ) (= ) = = ( ) CPU ⇒ DApps DApps = / — 2025 9-10 — 2025-07-07 – p.23/58
  13. = ( ) run = → — 2025 9-10 —

    2025-07-07 – p.24/58
  14. [Lamport 1984][Schneider 1990] ( ) (1) 0 ( ) (2)

    (3) (4) ( ) ← — 2025 9-10 — 2025-07-07 – p.25/58
  15. Ether (ETH) Ethereum EOA : Externally-Owned Account ( ) (

    ) ( ) ( ) ← Ether ( ) EVM EVM = Ethereum = — 2025 9-10 — 2025-07-07 – p.26/58
  16. EVM : Ethereum Virtual Machine ঢ়ଶ ֎෦ΞΫλʔ ΞΧ΢ϯτ &7. ίʔυ

    &UIFSˠ(BT ىಈ ίϯτϥΫτ ϝοηʔδ͔ɺ৽͍ࣗ͠ಈΦϒδΣΫτ ΞΧ΢ϯτؒͰ΍ΓऔΓ͞ΕΔσʔλ΍&UIFS ετϨʔδ ঢ়ଶ` τϥϯβΫγϣϯ ηοτ σδλϧॺ໊ &7. ਓؒͱ͔ ࣗಈ ΦϒδΣΫτ ( ) Gas ( EVM = ( burn)) — 2025 9-10 — 2025-07-07 – p.27/58
  17. / / (1) Ethereum Bitcoin ( OK) 1 — 2025

    9-10 — 2025-07-07 – p.28/58
  18. / / (2) 3 ( ) · ( ) (

    ) 1 — 2025 9-10 — 2025-07-07 – p.29/58
  19. / / (3) ( ) ( ) 1 ( )

    1,500 3,000 (← . . . ) Ethereum 2022 9 — 2025 9-10 — 2025-07-07 – p.30/58
  20. / / (4) Gwei Gwei ETH 32 ETH ( )

    ETH ETH · 32 ETH ( OK) · 16 ETH ( ) 12 ( ) ( ) 1 — 2025 9-10 — 2025-07-07 – p.31/58
  21. / / (5) 32 1 (384 ) ( ) (

    ) 2 3 ( ) 256 512 — 2025 9-10 — 2025-07-07 – p.32/58
  22. / / (6) ( ) 5 2 3 (36 )

    — 2025 9-10 — 2025-07-07 – p.33/58
  23. / / (7) ( ) ( ) DAO (RANDAO) 1

    — 2025 9-10 — 2025-07-07 – p.34/58
  24. Ethereum        ߹ҙ͞Εͨཤྺ ϩʔΧϧʹෳ੡Λҡ࣋

    ϒϩοΫ εϩοτ  ඵִؒ  εϩοτͰ  ΤϙοΫ ҉߸ֶతμΠδΣετ ϒϩοΫνΣʔϯͷҡ࣋ࢀՃऀ͕ϩʔΧϧʹ؅ཧ͢Δσʔλۭؒ ࣌ؒ ΑΓ৽͍͠ه࿥ ΦϒδΣΫτ τʔΫϯγεςϜ౳ͷεϚʔτίϯτϥΫτ ֤Ϣʔβͷ ࢒ߴ౳ͷঢ়ଶ ঢ়ଶ` ঢ়ଶ`` τϥϯβΫγϣϯ ΦϒδΣΫτͷੜ੒ ·ͨ͸ঢ়ଶભҠͷࢦࣔ ແޮͳཤྺ ω ỽ τ ϫ ồ Ϋ Λ ௨ ͠ ͯ ૹ ड ৴ ͞ Ε Δ ϩ ồ Χ ϧ ʹ ࣋ ͭ ܨ͙ͨΊʹ͸&5) Ͱͷσϙδοτͱ σϙδοτ૯ֹͷ ♤ ૬౰ͷϢʔβʹΑΔ ΤϙοΫ΁ͷূݴ͕ඞཁ શΦϒδΣΫτͷભҠޙͷঢ়ଶ ͕ϋογϡ໦˞ʹू໿͞Ε ͦͷ ϧʔτ஋͕ϒϩοΫʹॻ͔ΕΔ ঢ়ଶભҠ ˞ϋογϡ໦σʔλ܈ͷ҉߸ֶతμΠδΣετ ϋογϡ ɹΛ໦ߏ଄ʹදݱͨ͠΋ͷͰ ෆ੔߹ͷݕग़ʹ༻͍ΒΕΔ ETH ( ) ⇒ ETH = Ethereum Virtual Machine (EVM) 2 3 ETH ⇒ ETH — 2025 9-10 — 2025-07-07 – p.35/58
  25. ERC-20 ERC (Ethereum Request for Comments) 20 https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md (EIP: Ethereum

    Improvement Proposal) ← EIP ( ) contract ERC20 { function totalSupply() constant returns (uint totalSupply); function balanceOf(address _owner) constant returns (uint balance); function transfer(address _to, uint _value) returns (bool success); function transferFrom(address _from, address _to, uint _value) returns (bool success); function approve(address _spender, uint _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint remaining); event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value); } name/ , symbol/ , decimals/ approve allowance ERC-777 ( ) — 2025 9-10 — 2025-07-07 – p.38/58
  26. ERC-20 ERC-20 ← ( ) ( ) ⇒ ERC-20 (

    ERC-20 ) ERC-20 ⇒ — 2025 9-10 — 2025-07-07 – p.39/58
  27. (fungible) ERC-20 → ERC-223 (draft) or ERC-777 ( )( )

    (non-fungible) ERC-721 ( ) ( ) ERC-1155 ( ) ERC-3525 (SLOT ) — 2025 9-10 — 2025-07-07 – p.40/58
  28. — τʔΫϯ ୅ସ՟ฎ εϚʔτίϯτϥΫτ ݕূՄೳͳঢ়ଶϚγϯ ϓϩϏφϯε དྷྺূ໌  ୅ସՄೳ ঈؐෆೳ

    ୅ସՄೳ ঈؐՄೳ ୅ସෆೳ ঈؐՄೳ ୅ସෆೳ ঈؐෆೳ ূ໌͢Δ ಉఆ͢Δ ࢧ෷͍౳ ࠷ॳͷԠ༻ *%Χʔυ౳ ηΩϡϦςΟ τʔΫϯ ূ݊ ౳ ηϯαʔ౳ ෺ྲྀɾ Ҩݴॻ౳ อݥਃ੥౳ ௥੻͢Δ ײ஌͢Δ தԝۜߦ σδλϧ௨՟౳ ҭ੒ήʔϜ౳ ൿີ伴Λ࢖͑Δ͔Βຊਓʁ ෛ࠴  Ξηοτͷ ਺஋දݱΛҠసͰ͖Δʁ ొ࿥͞Εͨίʔυͱ ͦͷ࣮ߦϩάͱ݁Ռͷ ਅਖ਼ੑΛ୲อͰ͖Δʁ ݖҖ͕  Կ͔ͷ಺༰Λূ໌͢Δʁ ࣋ଓ͢Δଘࡏʹ͍ͭͯ ه࿥ΛΞοϓσʔτՄʁ ओମ͕͍ͳ͘ͳͬͯ΋ աڈͷσʔλ͸༗ޮʁ /'5 Ұൠతͳ ೝࣝ ػೳͷ ෼ੳ݁Ռ — 2025 9-10 — 2025-07-07 – p.41/58
  29. ( ( )) ( ) / / — 2025 9-10

    — 2025-07-07 – p.44/58
  30. — 1. ( ) 2. ( ) 3. ( )

    — 2025 9-10 — 2025-07-07 – p.45/58
  31. token (ERC-20 ) $ brownie bake token GitHub git clone

    $ git clone https://github.com/ks91/sample-smart-contracts.git sample-smart-contracts contracts, scripts tests token Token — 2025 9-10 — 2025-07-07 – p.46/58
  32. OneTimeEscrow settle() function settle() public returns (bool) { require(_token_.balanceOf(address(this)) >=

    _price_); /* this */ require(_asset_.getOwner() == address(this)); _token_.transfer(_seller_ , _price_); _asset_.transfer(_buyer_); emit Settled(); /* */ return true; } settle() transfer $ brownie compile — 2025 9-10 — 2025-07-07 – p.47/58
  33. (1) from brownie import * import pytest seller = accounts[0]

    buyer = accounts[1] def test_deploy_and_settle(Token, IndivisibleAsset, OneTimeEscrow): asset = accounts[0].deploy(IndivisibleAsset, "5322 Endo", "mˆ2", 300) token = accounts[0].deploy(Token, "Test Token", "TEST", 18, "1000 ether") — 2025 9-10 — 2025-07-07 – p.48/58
  34. (2) token.transfer(buyer, 300, {’from’: accounts[0]}) escrow = accounts[0].deploy(OneTimeEscrow, token, buyer,

    asset, seller, 300) accounts[0]/seller accounts[1]/buyer 300 300 TX buyer seller 300 bake Token 300 ETH wei — 2025 9-10 — 2025-07-07 – p.49/58
  35. (3) token.transfer(escrow, 300, {’from’: buyer}) asset.transfer(escrow, {’from’: seller}) assert token.balanceOf(seller)

    == 999999999999999999700 assert token.balanceOf(buyer) == 0 assert token.balanceOf(escrow) == 300 assert asset.getOwner() == escrow buyer ( ) 300 seller ( ) — 2025 9-10 — 2025-07-07 – p.50/58
  36. (4) escrow.settle({’from’: seller}) assert token.balanceOf(seller) == 1000000000000000000000 assert token.balanceOf(buyer) ==

    0 assert token.balanceOf(escrow) == 0 assert asset.getOwner() == buyer settle() seller OK — 2025 9-10 — 2025-07-07 – p.51/58
  37. 4. (1) × OK (2) 2025 7 3 ( )

    23:59 JST ( ) Waseda Moodle — 2025 9-10 — 2025-07-07 – p.53/58
  38. . . . . . . 17 15 (7/5( )

    ) ( ) (4 ) (4 ) ( ) (3 ) (2 ) (1 ) (1 ) — 2025 9-10 — 2025-07-07 – p.54/58
  39. I — CO2 ⇒ . . . — 2025 9-10

    — 2025-07-07 – p.55/58
  40. 5. AI (1) AI (a) (b) (c) AI (2) 2025

    7 10 ( ) 23:59 JST ( ) Waseda Moodle — 2025 9-10 — 2025-07-07 – p.57/58