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
スマートコントラクトデザイン / Smart Contract Design
Search
Kenji Saito
PRO
October 27, 2025
Technology
0
4
スマートコントラクトデザイン / Smart Contract Design
慶應義塾大学大学院メディアデザイン研究科「サービスデザインプロジェクトB」2025秋 第3回にて使用したスライドです。
Kenji Saito
PRO
October 27, 2025
Tweet
Share
More Decks by Kenji Saito
See All by Kenji Saito
FinTech 7-8 : Blockchain
ks91
PRO
0
68
スマートコントラクトプログラミング / Smart Contract Programming
ks91
PRO
0
18
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
49
FinTech 5-6 : The World of Apps
ks91
PRO
0
100
生成AI による論文執筆サポート・ワークショップ ─ サーベイ/リサーチクエスチョン編 / Workshop on AI-Assisted Paper Writing Support: Survey/Research Question Edition
ks91
PRO
0
78
ブロックチェーン概論とインストール大会 / Introduction to Blockchain and Installation Workshop
ks91
PRO
0
9
FinTech 3-4 : Internet Technology and Governance
ks91
PRO
0
83
民主主義と博愛(Humanitarianism) / Democracy and Humanitarianism
ks91
PRO
0
14
ブロックチェーン概論 / Introduction to Blockchain
ks91
PRO
0
18
Other Decks in Technology
See All in Technology
Amazon Athena で JSON・Parquet・Iceberg のデータを検索し、性能を比較してみた
shigeruoda
1
150
OPENLOGI Company Profile for engineer
hr01
1
45k
AI駆動で進める依存ライブラリ更新 ─ Vue プロジェクトの品質向上と開発スピード改善の実践録
sayn0
1
330
生成AI時代のPythonセキュリティとガバナンス
abenben
0
140
パフォーマンスチューニングのために普段からできること/Performance Tuning: Daily Practices
fujiwara3
2
140
ゼロコード計装導入後のカスタム計装でさらに可観測性を高めよう
sansantech
PRO
1
500
Building a cloud native business on open source
lizrice
0
190
ヘンリー会社紹介資料(エンジニア向け) / company deck for engineer
henryofficial
0
400
クラウドとリアルの融合により、製造業はどう変わるのか?〜クラスメソッドの製造業への取組と共に〜
hamadakoji
0
450
SCONE - 動画配信の帯域を最適化する新プロトコル
kazuho
1
400
AIエージェントによる業務効率化への飽くなき挑戦-AWS上の実開発事例から学んだ効果、現実そしてギャップ-
nasuvitz
5
1.3k
GraphRAG グラフDBを使ったLLM生成(自作漫画DBを用いた具体例を用いて)
seaturt1e
1
150
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
9.6k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
How to Think Like a Performance Engineer
csswizardry
27
2.1k
Optimizing for Happiness
mojombo
379
70k
Into the Great Unknown - MozCon
thekraken
40
2.1k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
620
Agile that works and the tools we love
rasmusluckow
331
21k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
130k
Transcript
generated by Stable Image Ultra B 2025 4 ( )
B 2025 — 4 — 2025-10-27 – p.1/30
https://speakerdeck.com/ks91/collections/service-design-project-b-2025-fall ( ) ( ) Discord Discord ( / /
) Zoom URL ( ) B 2025 — 4 — 2025-10-27 – p.2/30
( ) 1 10 6 • 2 10 13 •
3 10 20 • 4 10 27 • 5 11 10 1 6 11 24 2 7 12 1 8 12 8 ( ) ( ) 4 ( 3 ) ↓ B 2025 — 4 — 2025-10-27 – p.3/30
( ) — (3) : Web3 B 2025 — 4
— 2025-10-27 – p.4/30
( ) — Ethereum Sepolia B 2025 — 4 —
2025-10-27 – p.5/30
infura.io Brownie https://infura.io SIGN UP PROJECT ID infura Ethereum API
infura . . . infura.io Amazon infura.io PROJECT ID WEB3_INFURA_PROJECT_ID PROJECT ID (∼/.bash_profile ) $ export WEB3_INFURA_PROJECT_ID= PROJECT ID B 2025 — 4 — 2025-10-27 – p.6/30
Sepolia ETH brownie console Sepolia >>> network.disconnect() >>> network.connect(’sepolia’) >>>
len(accounts) 0 >>> accounts.add() <LocalAccount object ’ 16 ’> >>> accounts[0].private_key 16 >>> quit() Sepolia Testnet ETH Faucet ETH https://sepoliafaucet.com ( ) ( ) . . . Ethereum 0.001 ETH 0.1 Sepolia ETH B 2025 — 4 — 2025-10-27 – p.7/30
Sepolia ETH brownie console Sepolia ETH >>> network.disconnect() >>> network.connect(’sepolia’)
>>> len(accounts) 0 >>> accounts.add( 16 ) <LocalAccount object ’ 16 ’> >>> accounts[0].balace() ETH >>> quit() ETH >>> accounts[0].transfer(accounts[1], "0.01 ether") B 2025 — 4 — 2025-10-27 – p.8/30
(3) : B 2025 — 4 — 2025-10-27 – p.9/30
transfer settle, retrieve asset, retrieve token 3 B 2025 —
4 — 2025-10-27 – p.10/30
1. ( ) 2. ( ) 3. ( ) B
2025 — 4 — 2025-10-27 – p.11/30
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 B 2025 — 4 — 2025-10-27 – p.12/30
(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") B 2025 — 4 — 2025-10-27 – p.13/30
(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 B 2025 — 4 — 2025-10-27 – p.14/30
(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 ( ) B 2025 — 4 — 2025-10-27 – p.15/30
(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 B 2025 — 4 — 2025-10-27 – p.16/30
$ pytest tests/test_one_time_escrow.py : settle() ⇒ Discord B 2025 —
4 — 2025-10-27 – p.17/30
B 2025 — 4 — 2025-10-27 – p.18/30
1. (1) (2) Ethereum 2025 10 25 ( ) 23:59
JST B 2025 — 4 — 2025-10-27 – p.19/30
. . . . . . 3 1 ( )
( ) ( ) B 2025 — 4 — 2025-10-27 – p.20/30
A ⇒ B 2025 — 4 — 2025-10-27 – p.21/30
A Ethereum NFT NFT NFT B 2025 — 4 —
2025-10-27 – p.22/30
A — NFT NFT NFT ⇒ ( ) B 2025
— 4 — 2025-10-27 – p.23/30
⇒ 20 Discord . . . ( ) B 2025
— 4 — 2025-10-27 – p.24/30
Web3 Web3 HTTPS B 2025 — 4 — 2025-10-27 –
p.25/30
B 2025 — 4 — 2025-10-27 – p.26/30
miro ( ) ( ) B 2025 — 4 —
2025-10-27 – p.27/30
B 2025 — 4 — 2025-10-27 – p.28/30
2. API (1) ( ) (2) Web API 2025 11
8 ( ) 23:59 JST B 2025 — 4 — 2025-10-27 – p.29/30
B 2025 — 4 — 2025-10-27 – p.30/30