$30 off During Our Annual Pro Sale. View details »

スマートコントラクト入門

 スマートコントラクト入門

2022/06/10のOkachi.js vol.60で話したスライドです。その先週参加した合宿で作ったものがベースになっています。

kazuhiro hara

June 11, 2022
Tweet

More Decks by kazuhiro hara

Other Decks in Programming

Transcript

  1. スマートコントラクト入門 Solidity と Truffle に入門
 2022/06/10 Okachi.js vol.60
 
 KAZUHIRO

    HARA
 @kara_d

  2. 構成
 • 自己紹介
 • Web3とは
 • スマートコントラクトって何ですか?
 • Solidity?
 •

    NFT?
 • いろいろツールたち
 • テストネットについて

  3. 自己紹介


  4. 自己紹介
 • 原 一浩 (はら かずひろ)
 • Kansock.Industries 代表
 1998年に独立し、同年、ウェブデザイン専門のメールメディアの発

    行を開始。 Webデザインやフロントエンド、バックエンドなど雑食的にいろいろ な仕事に関わるかたわら、 Webデザイントレンドを通して情報発信 を行ってきた。 上場企業・自治体・グローバル企業および海外サイトなどを定点観 測し続けている。 最近はNreal社のXRデバイスを使ってメタバースの UIを研究する 日々。
  5. Web3とは


  6. Web3
 • (?) Web3というJavaScriptライブラリ
 ◦ (オライリーのスマートコントラクト本では、ということ) 
 ◦ web3.js -

    Ethereum JavaScript API — web3.js 1.0.0 documentation https://web3js.readthedocs.io/en/v1.7.3/ 
 • (こちらに賛成) どういうものを指すか
 ◦ Web3の「魂」は何なのか? 
 https://wirelesswire.jp/2022/06/82564/ 
 "
  7. スマートコントラクトって何ですか?


  8. スマートコントラクトとは
 • 1994年に登場
 ◦ 当初は様々な文書うぃデジタルプロトコルや暗号署名を 
 使って自動的に履行できるのが目的 
 • プラットフォーム


    ◦ ブロックチェーンのデータを格納、更新、削除する 
 • よく使われる言語
 ◦ Solidity : プログラミング言語 
 SolidityとEthereumによる実践スマートコントラクト開発 p4, p5, frontend Web3 blockchain
  9. Solidity?


  10. Solidityについて
 • 概要
 ◦ C++、Python、JavaScriptを参考に、 
 Ethereum Virtual Machine(EVM) 


    の操作を目的に作られている 
 ◦ EVM (イーサリアム仮想マシン) 上で実行 
 • Document (日本語)
 • Remix IDE で試すことができる
 ◦ https://remix.ethereum.org/ 
 • 拡張子
 ◦ .sol
 ◦ VSCode のプラグインあり 

  11. NFT?


  12. NFT? (1)
 • Non-Fungible Token (非代替性トークン)
 • ERC-721という規格で定義 (Ethereum Request

    for Comments)
 ◦ https://ethereum.org/ja/developers/docs/standards/tokens/erc-721/ 
 • 以下の関数が実装されていること
 ◦ balanceOf(address _owner) 
 ◦ ownerOf(uint256 _tokenId) 
 ◦ safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) 
 ◦ safeTransferFrom(address _from, address _to, uint256 _tokenId) 
 ◦ transferFrom(address _from, address _to, uint256 _tokenId) 
 ◦ approve(address _approved, uint256 _tokenId) 
 ◦ setApprovalForAll(address _operator, bool _approved) 
 ◦ getApproved(uint256 _tokenId) 
 ◦ isApprovedForAll(address _owner, address _operator) 

  13. その他のERC (1)
 • ERC-20
 ◦ https://ethereum.org/ja/developers/docs/standards/tokens/erc-20/ 
 ◦ Fungible Tokenを作るときに使われる規格

    
 ◦ 相互に交換可能なトークン。残高を追跡する役割に使われる 
 ◦ 以下の関数が実装されていること 
 ▪ totalSupply()
 ▪ balanceOf(address _owner) 
 ▪ transfer(address _to, uint256 _value) 
 ▪ transferFrom(address _from, address _to, uint256 _value) 
 ▪ approve(address _spender, uint256 _value) 
 ▪ allowance(address _owner, address _spender) 
 ◦ OpenZeppelinのコントラクトをベースにやるのがオススメとのこと 
 ▪ 厳正に監査されているため 

  14. その他のERC (2)
 • ERC-1155
 ◦ https://ethereum.org/ja/developers/docs/standards/tokens/erc-1155/ 
 ◦ トークン標準と言われている 


    ▪ バッチ転送:1回の呼び出しで複数のアセットを転送 
 ▪ バッチ残高:1回の呼び出しで複数の資産の残高を取得 
 ▪ バッチ承認:アドレスへのすべてのトークンを承認 
 ▪ フック:トークンフックを受け取る 
 ▪ NFTサポート:供給が1のみの場合は、NFTとして扱う 
 ▪ 安全な転送ルール:安全な転送のための一連のルール 

  15. いろいろツールたち


  16. いろいろなツール
 • Geth https://geth.ethereum.org/ 
 ◦ Ethereumクライアント 
 • MetaMask

    https://metamask.io/ 
 ◦ Ethereum系ブロックチェーンの通貨やNFTを管理できるソフトウェアウォレット 
 • Truffle Suite https://trufflesuite.com/ 
 ◦ Ethereum 用 Blockchain の Smart Contract 開発用フレームワーク 
 • Ganache https://trufflesuite.com/ganache/ 
 ◦ Ethereum のローカル開発環境 
 • Goerli https://goerli.net/ 
 ◦ 開発用のテストネット 
 • Infura https://infura.io/ 
 ◦ Ethereumノードホスティングサービス 

  17. サンプル


  18. サンプル
 こういうアーキテクチャという理解
 Ganache localhost:8545 MetaMask Web3 window.ethereum React

  19. テストネットへのデプロイ


  20. テストネットについて
 • インターネット上にあるテスト用のEthereumネットワーク
 • これもデプロイにはETHが必要
 • テストネット用にETHを送金してくれるサービスがある
 ◦ Paradigm MultiFaucet

    https://faucet.paradigm.xyz/ 

  21. END 
 KAZUHIRO HARA
 @kara_d