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

手を動かしながら スマートコントラクトについて学ぶ/how-smartcontract-works

Yosuke
November 20, 2022

手を動かしながら スマートコントラクトについて学ぶ/how-smartcontract-works

Yosuke

November 20, 2022
Tweet

More Decks by Yosuke

Other Decks in Technology

Transcript

  1. C R Y P T O B A S E

    W E B 3 S T U D Y 2022 年 10 月 19 日 手を動かしながら スマートコントラクトについて学ぶ
  2. コンテンツ ERC (EIP )とは トークン(ERC20 )をデプロイ NFT (ERC721 )をデプロイ etherscan

    の解説 data の解説 トランザクションデータの解説 Metamask が何をしてるかの解説 【第一部】トークンとNFT をデプロイしてみよう 【第二部】トランザクションのデータについて理解しよう *おまけ solidity を読めるようになろう!
  3. ERC とは Ethereum Request for Comments の略 スマートコントラクトの規格 https://github.com/ethereum/EIPs/tree/master/EIP S

    代表例 ERC20 トークンの規格(USDC, JPYC... ) ERC721 NFT ERC1155 ERC20 とERC721 を合わせたようなもの
  4. トークン(ERC20 )をデプロイ Remix を開く https://remix.ethereum.org 右上のファイルアイコンから、ファイルを作成。 コードをコピペする 右のタブからSOLIDITY COMPILER に移動

    一番上の「COMPILER 」を、コードの「pragma solidity ^0.0.0; 」のバージョンと合わせる。 「Compile 」を押してコードをコンパイルする 「ENVIRONMENT 」を「Injected Provider 」に変 更 「Contract 」が、コードの「contract 」の名前と一 致してることを確認 「Deploy 」でトークンを作成 【コントラクトのデプロイ】
  5. 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
  6. 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 を作成 【コントラクトのデプロイ】
  7. 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 の中身】
  8. input data の解説 直コン ≒提供されるUI を使わずにコントラクトの関数を叩くこと Metamask で、設定→ 高度な設定→16 進データを表示

    送信ボタン→ 送信先=デプロイしたトークンのアドレス 16 進数データにinput date を入力 次へでtx を送信 【メタマスクで直コン!!】
  9. 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" }
  10. Solidity を読めるようになろう!! function (引数、修飾子) public, internal, external, view... 型と変数 address,

    uint, bytes ... mapping require 他コントラクトの関数の呼び出しかた interface.methodName() グローバル変数 msg.sender, msg.value 参考 https://polygonscan.com/address/0xf4c64A797 1154f63f9Cc1C8D8f1Bcc4b7c644e77#code