Slide 1

Slide 1 text

C R Y P T O B A S E W E B 3 S T U D Y 2022 年 10 月 19 日 手を動かしながら スマートコントラクトについて学ぶ

Slide 2

Slide 2 text

コンテンツ ERC (EIP )とは トークン(ERC20 )をデプロイ NFT (ERC721 )をデプロイ etherscan の解説 data の解説 トランザクションデータの解説 Metamask が何をしてるかの解説 【第一部】トークンとNFT をデプロイしてみよう 【第二部】トランザクションのデータについて理解しよう *おまけ solidity を読めるようになろう!

Slide 3

Slide 3 text

ERC とは Ethereum Request for Comments の略 スマートコントラクトの規格 https://github.com/ethereum/EIPs/tree/master/EIP S 代表例 ERC20 トークンの規格(USDC, JPYC... ) ERC721 NFT ERC1155 ERC20 とERC721 を合わせたようなもの

Slide 4

Slide 4 text

Openzeppelin Contract Wizard リンク:https://wizard.openzeppelin.com/

Slide 5

Slide 5 text

トークン(ERC20 )をデプロイ Name 、Symbol はお好みで Name はトークンの名前 Symbol はトークンのティッカー ex. BTC mintable 【コントラクトの作成】

Slide 6

Slide 6 text

トークン(ERC20 )をデプロイ Remix を開く https://remix.ethereum.org 右上のファイルアイコンから、ファイルを作成。 コードをコピペする 右のタブからSOLIDITY COMPILER に移動 一番上の「COMPILER 」を、コードの「pragma solidity ^0.0.0; 」のバージョンと合わせる。 「Compile 」を押してコードをコンパイルする 「ENVIRONMENT 」を「Injected Provider 」に変 更 「Contract 」が、コードの「contract 」の名前と一 致してることを確認 「Deploy 」でトークンを作成 【コントラクトのデプロイ】

Slide 7

Slide 7 text

トークン(ERC20 )をデプロイ to : 送り先アドレス amount : 発行額(18 桁) 【トークンの発行】

Slide 8

Slide 8 text

トークン(ERC20 )を追加

Slide 9

Slide 9 text

トークン(ERC20 )を送信 トークンを選択 send を押す 送り先のアドレ スを記載 額を記入 confirm

Slide 10

Slide 10 text

balance (残高) mapping(address => uint256) private _balances; *key-value (ex. 社員番号) function balanceOf( address account ) public view virtual override returns (uint256) {  return _balances[account]; } トークン(ERC20 )のコード解説 transfer (送信) function _transfer( address from, address to, uint256 amount ) internal virtual { uint256 fromBalance = _balances[from]; unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } } リンク:https://github.com/OpenZeppelin/openzeppelin- contracts/blob/master/contracts/token/ERC20/ERC20.sol

Slide 11

Slide 11 text

NFT (ERC721 )をデプロイ 右上の「+ 」から、ファイルを作成。 コードをコピペする https://github.com/0xywzx/event/blob/main/2 0221019_cryptobase_how_smartcontract_wor ks/NFT/ERC721.sol 右のタブからSOLIDITY COMPILER に移動 「Compile 」を押してコードをコンパイルする 「Contract 」が、コードの「contract 」の名前と一 致してることを確認 「Deploy 」でNFT を作成 【コントラクトのデプロイ】

Slide 12

Slide 12 text

NFT (ERC721 )を発行 safeMint to name description image https://raw.githubusercontent.com/0xywz x/event/main/20221019_cryptobase_how_s martcontract_works/image.png trait value

Slide 13

Slide 13 text

NFT (ERC721 )をOpensea で確認 Opensea を開く https://testnets.opensea.io/account wallet を接続 「Accept and sign 」でログイン

Slide 14

Slide 14 text

第一部 まとめ 誰でも簡単にトークン、NFT は作成できる 作成したものは誰でもみることができる

Slide 15

Slide 15 text

input data の解説 activity transfer した activity view on block exploler etherscan

Slide 16

Slide 16 text

input data の解説 Method Id transfer(address,uint) をKeccak-256 でハッシュ 化したもの https://emn178.github.io/online- tools/keccak_256.html 引数2 つ 16 進数で表現 https://hogehoge.tk/tool/number.html 64bytes で管理 足りない分は0 で埋め合わせ https://tomari.org/main/java/mojicnt.html 【input data の中身】

Slide 17

Slide 17 text

input data の解説 直コン ≒提供されるUI を使わずにコントラクトの関数を叩くこと Metamask で、設定→ 高度な設定→16 進データを表示 送信ボタン→ 送信先=デプロイしたトークンのアドレス 16 進数データにinput date を入力 次へでtx を送信 【メタマスクで直コン!!】

Slide 18

Slide 18 text

Metamask の裏側で何をしているのか JSON データの作成 作成されたデータを秘密書で署名 署名されたデータをブロックチェーンに送信 参考 リンクのスクリプトを実行 https://github.com/0xywzx/event/blo b/main/20221019_cryptobase_how_s martcontract_works/script/index.js data をコピー blockchain にbroadcast https://goerli.etherscan.io/pushTx balance (残高) let details = {   nonce: "",   gasPrice: "",   gasLimit: "",   to: "",   from: "",   value: "",   data: "",   type: "0" }

Slide 19

Slide 19 text

Solidity を読めるようになろう!! function (引数、修飾子) public, internal, external, view... 型と変数 address, uint, bytes ... mapping require 他コントラクトの関数の呼び出しかた interface.methodName() グローバル変数 msg.sender, msg.value 参考 https://polygonscan.com/address/0xf4c64A797 1154f63f9Cc1C8D8f1Bcc4b7c644e77#code