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

スマートコントラクトとメタトランザクションについて/meta-transaction

Yosuke
July 15, 2023

 スマートコントラクトとメタトランザクションについて/meta-transaction

Yosuke

July 15, 2023
Tweet

More Decks by Yosuke

Other Decks in Technology

Transcript

  1. ERC20 とは Ethereum (EVM )におけるトークンの共通規格 function name() public view returns

    (string) function symbol() public view returns (string) function decimals() public view returns (uint8) function totalSupply() public view returns (uint256) function balanceOf(address _owner) public view returns (uint256 balance) function transfer(address _to, uint256 _value) public returns (bool success) function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) function approve(address _spender, uint256 _value) public returns (bool success) function allowance(address _owner, address _spender) public view returns (uint256 remaining) event Transfer(address indexed _from, address indexed _to, uint256 _value) event Approval(address indexed _owner, address indexed _spender, uint256 _value) by @ _ywzx 7
  2. ERC20 の balance と transfer balance ( 残⾼) mapping(address =>

    uint256) private _balances; *key-value (ex. 社員番号) function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } transfer ( 送信) function _transfer( address from, address to, uint256 amount ) internal virtual { uint256 fromBalance = _balances[from]; unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } } by @ _ywzx 8
  3. トランザクションの仕組み { nonce: "", gasPrice: "", gasLimit: "", to: "0x0001...",

    value: "1ETH", data: "0x", type: "0" } 秘密鍵で署名 ブロックチェーンに 送信 ブロックチェーンで 検証 ブロックチェーンに 保存 by @ _ywzx 13
  4. EIP 2612 / EIP 3009 EIP 2612 署名でapprove が実行できるもの EIP

    3009 署名でtransfer が実行できるもの by @ _ywzx 16
  5. EIP 3009 と 通常とERC20 のTransfer function _transferWithAuthorization( address from, address

    to, uint256 value, uint256 validAfter, uint256 validBefore, bytes32 nonce, uint8 v, bytes32 r, bytes32 s ) internal { _requireValidAuthorization(from, nonce, validAfter, validBefore); bytes memory data = abi.encode( TRANSFER_WITH_AUTHORIZATION_TYPEHASH, from, to, value, validAfter, validBefore, nonce ); require( EIP712.recover(_domainSeparatorV4(), v, r, s, data) == from, "EIP3009: invalid signature" ); _markAuthorizationAsUsed(from, nonce); _transfer( from , to, value); } function transfer(address to, uint256 value) external override whenNotPaused notBlocklisted(msg.sender) notBlocklisted(to) returns (bool) { _transfer( msg.sender , to, value); return true; } by @ _ywzx 17
  6. EIP 3009 { nonce: "", gasPrice: "", gasLimit: "", to:

    "contract address", value: "", data: "0x...", type: "0" } 秘密鍵で署名 (ex: JPYC 利⽤者) ブロックチェーンに 送信 ブロックチェーンで 検証 ブロックチェーンに 保存 EIP3009 を実⾏する 署名データ 秘密鍵で署名 (ex: JPYC 利⽤者) by @ _ywzx 18
  7. 開発者としてブロックチェーンをどう捉えるか Web2 : 情報革命 → 完成系としてのAI Web3 : 価値革命 →

     ?? ブロックチェーンではそれ以外の分野(何かしらの価値がつくもの)も大きく 変える by @ _ywzx 21
  8. 開発者としてブロックチェーンをどう捉えるか ブロックチェーン = Ethereum はstate machine ≒ DB スマートコントラクト =

    state の書き込みと読み込みの定義 ≒ API お金を払えば誰でも書き込みができる、読み込みはタダでできる その書き込まれたデータは恣意的に変更できない(セキュリティー) 価値がつかなかったものに価値をつける 流動性の低かった(市場に出てなかった)資産の流動性を向上させる by @ _ywzx 22