Slide 1

Slide 1 text

2020.04.28 荒川


Slide 2

Slide 2 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 2 Ethereum のメタトランザクションは今まさに標準化に向けて動いて いるが、決定打がない! • 最近 MetaMask が、メタトランザクションのバーチャルハッカソン を開催し、有望な標準の候補が出てきたので、今回これを紹介します

Slide 3

Slide 3 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 3 Ethereum でトランザクションを送るには Gas が必要 Gas は ETH で支払われる ETH を使わないアプリでも少額の ETH が必要 → 利用ハードルが高い (取引所の口座開設と、利用アドレスへの ETH 送金が必須) トランザクションを別の人が送信する仕組み = Gas を別の人が肩代わりしたり、ERC-20 トークンで払ったりできる

Slide 4

Slide 4 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 4 ETH を使わないサービスで特に有用 ○ ゲーム内で作成したウォレットで、オフチェーンのアイテムをオ ンチェーンに移す ○ アプリ内の ERC-20 トークンだけですべてを行う ○ ステーキングするときに、そのトークン以外を用意したくない

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 6 • 署名済みのトランザクションをこのサービスに送ると、 実行に必要な ETH を、署名アカウントに送信する https://medium.com/@hamzamaslah/all-you-need-to-know-about-uport-identity-management-3fc49db25332

Slide 7

Slide 7 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 7 • ERC-20 を拡張して、 と同じ処理を トークン保有者の署名があれば実行できるようにしている https://github.com/makerdao/dss/blob/b1fdcf/src/dai.sol#L114-L138

Slide 8

Slide 8 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 8 • リレイヤーコントラクトからのトランザクションは実行を許す • リレイヤーコントラクトで署名検証 + コントラクトの関数呼び出し https://github.com/Bounties-Network/StandardBounties/blob/c087b4/contracts/BountiesMetaTxRelayer.sol https://medium.com/bounties-network/going-live-with-meta-transactions-a425ab6b6994 略 略 略

Slide 9

Slide 9 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 9 • OpenZeppelin が提唱するリレイヤーのネットワーク • 簡単にメタトランザクションに対応できるライブラリを提供 https://gsn.openzeppelin.com

Slide 10

Slide 10 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 10 • Dapper Labs、Gnosis、Argent、Authereum など多くの組織が提供 • マルチシグウォレットにすることで、メタトランザクションを実現 https://github.com/dapperlabs/dapper-contracts

Slide 11

Slide 11 text

© 2020 Metaps Alpha Inc. All Rights Reserved. • = コントラクトの実装がバラバラ → アプリ側は個別対応が必要 11 そして決定打がない・・・ • 新規アカウントのみ対応(GSN、コントラクトウォレット) • リレイヤーがサポートしないコントラクトは非対応(GSN) • リプレイ保護がない(GSN) • ENS 連携によるプライバシー問題 (一部コントラクトウォレット)

Slide 12

Slide 12 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 12

Slide 13

Slide 13 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 13 • Mariano Conti ― DAI の permit() をリリース • Mark Beylin ― Bounties.network 創設者 • Austin Griffith ― メタトランザクションの提唱者

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 15 https://github.com/wighawag/singleton-1776-meta-transaction https://twitter.com/wighawag

Slide 16

Slide 16 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 16 • EIP-1776 を採用(その他、多くの既存 EIP も再利用) • トランザクション失敗時の考慮 • シンプルでありながら高度なパラメータも設定可能 • この標準を使用するには、コントラクトにわずかな変更を加えるのみ

Slide 17

Slide 17 text

© 2020 Metaps Alpha Inc. All Rights Reserved. ― 17 メタトランザクション対応させたいコントラクトに継承させるコントラクト https://github.com/wighawag/singleton-1776-meta-transaction/blob/dda23e/contracts/src/EIP1776MetaTxReceiverBase.sol

Slide 18

Slide 18 text

© 2020 Metaps Alpha Inc. All Rights Reserved. ― 18 メタトランザクション実行のエントリーポイント https://github.com/wighawag/singleton-1776-meta-transaction/blob/dda23e/contracts/src/GenericMetaTxProcessor.sol#L81-L92 ※現在の実装はトークンはERC-20のみ対応 Tx を複数回処理しないためのロック制御 パラメータと署名の検証 パラメータと署名の検証 実際の処理

Slide 19

Slide 19 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 19 元のトランザクションの送信元アドレス 送信先アドレス コールデータ 署名 署名タイプ トークンのアドレス 送付額 任意の数値 ナンス( から始まるメタトランザクションの連番) 有効期限( 秒) トランザクション実行時の最大 量 リレイヤーに支払う の最低量 で支払う の価格 リレイヤーのアドレス(メタトランザクションの送信者)

Slide 20

Slide 20 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 20 • リレイヤー(トランザクション送信者)がパラメータと一致するか • 有効期限が切れてないか • ナンスが正しいか(リプレイ攻撃を防ぐため)

Slide 21

Slide 21 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 21 3種類の署名タイプをサポート(すべて EIP-712 形式の署名であること) • EIP-1271: • EIP-1654: • 通常の EOA 署名 EIP712 ハッシュを取得

Slide 22

Slide 22 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 22 トランザクションの処理(複数パターンがある)  パラメータによって処理の内容が変わる • なし/あり ※ Gas を ERC-20 で支払うか? • なし/あり ※ コントラクトの関数を実行するか?

Slide 23

Slide 23 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 23 通常の ERC-20 トークンの送金

Slide 24

Slide 24 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 24 通常の ERC-20 トークンの送金に加えて、 指定額 + 利用分 の Gas を ERC-20 トークンでリレイヤーに支払う ※ 便宜上、コードを一部変更

Slide 25

Slide 25 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 25 指定した最大 Gas でコントラクトを実行

Slide 26

Slide 26 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 26 指定した最大 Gas でコントラクトを実行して、 指定額 + 利用分 の Gas を ERC-20 トークンでリレイヤーに支払う ※ 便宜上、コードを一部変更

Slide 27

Slide 27 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 27 トランザクションをまとめて実行できる

Slide 28

Slide 28 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 28 • コントラクトをメタトランザクション対応させるのが簡単 (関数に 修飾子をつけるだけ) • 送信者は誰でもよい • バッチ処理をサポート • 送信者への手数料を署名者が決められる • すぐに試せて綺麗に機能するデモ

Slide 29

Slide 29 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 29 • メタトランザクションの著名な人物が審査をしたハッカソンで優勝し たという事実は、標準化に向けた大きな一歩 • いまの実装だとトークンは ERC-20 のみ対応なので、オプションとし て ERC-721 / ERC-1155 の実装が出てくるのが待たれる (ERC-20 と同様に作れそう)

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 31 • これまでの提案(ハッカソンで実装された EIP-1776、EIP-1613、 EIP-1077)はどれも複雑で、開発者の摩擦が大きい • この提案は、拡張性を持った、必要最小限の機能を探すことが目的 • 署名されたメッセージが有効であることを保証する、各コントラクト が信頼する唯一のユニバーサルコントラクトをつくりたい

Slide 32

Slide 32 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 32 • EIP-1776 は非常にエレガントな実装 • メタトランザクションという、実現方法が様々な概念を、 これまでの議論を集約して一つの形にまとめたのは素晴らしい (これまでの技術がわかりやすく整理されている) • Ethereum のメタトランザクションの標準化は、まだ道のりが長い… 特に、Gas の仕様が問題を複雑にしている

Slide 33

Slide 33 text

© 2020 Metaps Alpha Inc. All Rights Reserved. 33 • Our MetaTransaction Hackathon Winner! - MetaMask - Medium https://medium.com/metamask/our-metatransaction-hackathon-winner-a620551ccb9b • Ethereum Meta Transactions : Our Take - Bloxis - Medium https://medium.com/bloxis/generalised-ethereum-meta-transactions-our-take-cb9f027866e9 • Generalized Meta Transaction Processor with EIP-1776 Support https://github.com/wighawag/singleton-1776-meta-transaction • EIP-1776 Native Meta Transactions https://github.com/ethereum/EIPs/issues/1776 • EIP-2585 Minimal And Extensible Meta Transaction Forwarder https://github.com/ethereum/EIPs/issues/2585 • MetaMask MetaTransaction Panel - YouTube https://www.youtube.com/watch?v=X5L4fQbUxsA