ブラウザで利用できる 最近の Ethereum ウォレットの概要とインテグレーション方法
2020.05.29 荒川
はじめに
2
Ethereum のウォレットは MetaMask が有名だが、UI/UX を改善したウォレットが 2018 年頃から徐々に増えている
これらの概要と Dapps への組み込み方法をまとめてみます
はじめに
3
今回、調査・実装したもの
概要
4
大きく3つにわけられる
5
Chrome 等のブラウザでインストール不要で使える系
MetaMask のようなブラウザ拡張系
モバイルのウォレットアプリで署名する系
(開発中)
利用メリット
6
ユーザ
ブラウザだけあれば、ウォレット利用できる
秘密鍵などを意識せず簡単に使える
サービス提供者
サービスの利用ハードルをさげられる
複数のブロックチェーンへの対応が楽になる(?)
7
EOA(インポート ❌)
メール / SMS / 2段階認証でログイン
Mainnet / Testnet / カスタム
料金
$0 250 active users
$79/mo 1,000 active users
$327/mo 2,500 active users
最近、Flow と連携できる新しい SDK を発表
8
EOA(インポート ⭕)
Google / Facebook / Reddit / Twitch / Discord でログイン
Mainnet / Testnet / localhost
SNSアカウント宛てに送信できる
料金
$0 1,000 active users (web3.js / ethers.js のみ, サポートなし)
$32/mo 1,000 active users:
$293/mo 10,000 active users
OpenSea が最近になって対応
9
EOA(インポート ⭕)
パスワード / 2段階認証 でログイン
Mainnet / Testnet
多くのブロックチェーンに対応(Bitcoin / EOS / Matic / RSK など)
料金
$0 1,000 tx
$999/mo 10,000 tx
$7,999/mo 無制限
最近動きがなさそう…?
10
EOA(インポート ❌)
パスワード / SMS認証 でログイン
Mainnet / Testnet
料金
$0 1,00 tx
$999/mo 10,00 tx
$2,499/mo 25,000 tx
最近、動きがなさそうTwitter のフォロワー数も一番少ない
11
コントラクトウォレット
各デバイスの秘密鍵でログイン
Mainnet / Testnet
料金:記載なし
ENS と連携
ブラウザ拡張を開発中
12
コントラクトウォレット
Chrome 拡張
各デバイスの秘密鍵でログイン
Mainnet / Rinkeby
料金:なし
条件により Gas 無料
Flow 対応予定
13
QRコードを使って、署名を他のウォレットに移譲する
WalletConnect 対応のウォレットでログイン
Mainnet / Testnet / カスタム
料金:なし
ここまでのまとめ
14
Chrome 等のブラウザでインストール不要で使える系
MetaMask のようなブラウザ拡張系
モバイルのウォレットアプリで署名する系
(開発中)
正直どれもよく似ている.ほとんどが EOAユーザが一定数を超えると Dapps 側が料金を払うモデル
料金はかからない
料金はかからない
Demo
https://modern-ethereum-wallet-demo.web.app/
15
インテグレーション方法
16
17
$ yarn add fortmatic
import Fortmatic from 'fortmatic';
import Web3 from 'web3';
const fm = new Fortmatic('YOUR_API_KEY');
const web3 = new Web3(fm.getProvider());
https://docs.fortmatic.com/web3-integration/get-user-account#web3-methods
18
$ yarn add @toruslabs/torus-embed
import Torus from '@toruslabs/torus-embed';
import Web3 from 'web3';
const torus = new Torus();
await torus.init();
await torus.login(); // await torus.ethereum.enable()
const web3 = new Web3(torus.provider);
https://docs.tor.us/torus-wallet/quick-start
19
$ yarn add @portis/web3
import Portis from '@portis/web3';
import Web3 from 'web3';
const portis = new Portis('YOUR_API_KEY', 'mainnet');
const web3 = new Web3(portis.provider);
https://docs.portis.io/#/quick-start
20
$ yarn add bitski
import { Bitski } from 'bitski';
import Web3 from 'web3';
const bitski = new Bitski('CLIENT-ID', 'https://myapp.com/callback.html');
const web3 = new Web3(bitski.getProvider());
await bitski.signIn();
https://docs.bitski.com/
https://github.com/bitskico/bitski-js
OAuth 認証でリダイレクトURLが必要開発者ポータルでリダイレクトURLを登録し、下記ページを用意しておくhttps://github.com/BitskiCo/example-stripe-nft/blob/master/client/public/callback.html
21
$ yarn add authereum
import Authereum from 'authereum';
import Web3 from 'web3';
const authereum = new Authereum('mainnet');
const provider = authereum.getProvider()
const web3 = new Web3(provider);
await provider.enable(); // await web3.currentProvider.enable()
https://docs.authereum.com/getting-started
22
import Web3 from 'web3';
await window.ethereum.enable();
const web3 = new Web3(window.ethereum);
https://support.dapperlabs.com/hc/en-us/articles/360035463853-Ensure-EIP-Connection
注意点: Dapper にログインしていない場合、 ethereum.enable() を呼んでも自動で立ち上がらずエラーになる
23
import Web3 from 'web3';
import WalletConnectProvider from '@walletconnect/web3-provider';
const provider = new WalletConnectProvider(
infuraId: "27e484dcd9e3efcfd25a83a78777cdf1" // Required
);
await provider.enable();
const web3 = new Web3(provider);
https://docs.walletconnect.org/quick-start/dapps/web3-provider
インテグレーションにおけるハマリポイント
24
EIP-712 署名のパラメータが違う
メソッド:eth_signTypedData_v3 vs eth_signTypedData
引数:JSON 文字列 vs JSON オブジェクト
Personal Sign のメッセージに Unicode 文字列が使えないものがある(WalletConnect)
比較してみる
25
比較表(ビジネス視点)
26
Fortmatic
Torus
Portis
Bitski
Authereum
Dapper
WalletConnect
MetaMask
Twitter
アカウント
@fortmatic
@TorusLabs
@portis_io
@bitski
@authereum
@hellodapper
@walletconnect
@metamask_io
Twitter
開始年月
2018/05
2018/09
2018/03
2018/05
2019/04
2019/02
2018/03
2015/07
Twitter
フォロワー数
2654
5454
2072
556
1817
1633
5169
6.4万
ログイン方法
パスワード
SMS
2段階認証
Google
Facebook
Redit
Twitch
Discord
パスワード
2段階認証
パスワード
SMS認証
デバイスの秘密鍵
デバイスの秘密鍵
WalletConnect対応ウォレット(Trust, MetaMask, Gnosis Safe, Argent など)
パスワード
料金/月
$0→250
$79→1000
$327→2500
(active users)
$0→1000
$32→1000
$293→10000
(active users)
$0→1,000 $999→10000$7999→無制限
(tx)
$0→100
$999→1000 $2499→25000
(tx)
無料(?)
無料
無料
※Infuraプロジェクトが必要
無料
26
Fortmatic
Torus
Portis
Bitski
Authereum
Dapper
WalletConnect
MetaMask
Twitter
アカウント
@fortmatic
@TorusLabs
@portis_io
@bitski
@authereum
@hellodapper
@walletconnect
@metamask_io
Twitter
開始年月
2018/05
2018/09
2018/03
2018/05
2019/04
2019/02
2018/03
2015/07
Twitter
フォロワー数
2654
5454
2072
556
1817
1633
5169
6.4万
ログイン方法
パスワード
SMS
2段階認証
Google
Facebook
Redit
Twitch
Discord
パスワード
2段階認証
パスワード
SMS認証
デバイスの秘密鍵
デバイスの秘密鍵
WalletConnect対応ウォレット(Trust, MetaMask, Gnosis Safe, Argent など)
パスワード
料金/月
$0→250
$79→1000
$327→2500
(active users)
$0→1000
$32→1000
$293→10000
(active users)
$0→1,000 $999→10000$7999→無制限
(tx)
$0→100
$999→1000 $2499→25000
(tx)
無料(?)
無料
無料
※Infuraプロジェクトが必要
無料
比較表(ビジネス視点)
27
MetaMask と差はあるが、ユーザーが多そうなのは Torus か?
ログイン方法で他と違いを出している
27
Fortmatic
Torus
Portis
Bitski
Authereum
Dapper
WalletConnect
MetaMask
Twitter
アカウント
@fortmatic
@TorusLabs
@portis_io
@bitski
@authereum
@hellodapper
@walletconnect
@metamask_io
Twitter
開始年月
2018/05
2018/09
2018/03
2018/05
2019/04
2019/02
2018/03
2015/07
Twitter
フォロワー数
2654
5454
2072
556
1817
1633
5169
6.4万
ログイン方法
パスワード
SMS
2段階認証
Google
Facebook
Redit
Twitch
Discord
パスワード
2段階認証
パスワード
SMS認証
デバイスの秘密鍵
デバイスの秘密鍵
WalletConnect対応ウォレット(Trust, MetaMask, Gnosis Safe, Argent など)
パスワード
料金/月
$0→250
$79→1000
$327→2500
(active users)
$0→1000
$32→1000
$293→10000
(active users)
$0→1,000 $999→10000$7999→無制限
(tx)
$0→100
$999→1000 $2499→25000
(tx)
無料(?)
無料
無料
※Infuraプロジェクトが必要
無料
比較表(ビジネス視点)
28
ユーザーが増えると利用料がかかるが、どのくらいユーザーがいるか未知数・・・まずはお試しでいれてみるのがよいか?
28
比較表(技術視点)
29
Fortmatic
Torus
Portis
Bitski
Authereum
Dapper
WalletConnect
MetaMask
アカウント
EOA
EOA
EOA
EOA
Contract
Contract
その他
EOA
秘密鍵インポート
×
○
○
×
-
-
-
○
ネットワーク
Mainnet
Ropsten
Rinkeby
Kovan
カスタム
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
localhost
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
Mainnet
Rinkeby
Kovan
Mainnet
Rinkeby
Kovan
MainnetRinkeby
Mainnet
Ropsten
Rinkeby
Kovan
カスタム
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
カスタム
EIP-712 対応
○
○
○
×
○
×
×
○
EIP-712 の引数
JSON Object
JSON String
JSON String
-
JSON Object
-
-
JSON String
その他
Flow対応予定
SNSアカウント宛てに送信可
他のブロックチェーンも対応
ブラウザ拡張開発中
Flow対応予定
Hex以外の署名に失敗する…
29
比較表(技術視点)
30
Fortmatic
Torus
Portis
Bitski
Authereum
Dapper
WalletConnect
MetaMask
アカウント
EOA
EOA
EOA
EOA
Contract
Contract
その他
EOA
秘密鍵インポート
×
○
○
×
-
-
-
○
ネットワーク
Mainnet
Ropsten
Rinkeby
Kovan
カスタム
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
localhost
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
Mainnet
Rinkeby
Kovan
Mainnet
Rinkeby
Kovan
MainnetRinkeby
Mainnet
Ropsten
Rinkeby
Kovan
カスタム
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
カスタム
EIP-712 対応
○
○
○
×
○
×
×
○
EIP-712 の引数
JSON Object
JSON String
JSON String
-
JSON Object
-
-
JSON String
その他
Flow対応予定
SNSアカウント宛てに送信可
他のブロックチェーンも対応
ブラウザ拡張開発中
Flow対応予定
Hex以外の署名に失敗する…
Bitski は、技術的にもユーザビリティ的にもびみょうかも
30
比較表(技術視点)
31
Fortmatic
Torus
Portis
Bitski
Authereum
Dapper
WalletConnect
MetaMask
アカウント
EOA
EOA
EOA
EOA
Contract
Contract
その他
EOA
秘密鍵インポート
×
○
○
×
-
-
-
○
ネットワーク
Mainnet
Ropsten
Rinkeby
Kovan
カスタム
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
localhost
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
Mainnet
Rinkeby
Kovan
Mainnet
Rinkeby
Kovan
MainnetRinkeby
Mainnet
Ropsten
Rinkeby
Kovan
カスタム
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
カスタム
EIP-712 対応
○
○
○
×
○
×
×
○
EIP-712 の引数
JSON Object
JSON String
JSON String
-
JSON Object
-
-
JSON String
その他
Flow対応予定
SNSアカウント宛てに送信可
他のブロックチェーンも対応
ブラウザ拡張開発中
Flow対応予定
Hex以外の署名に失敗する…
Ethereum 以外を見据えると、このあたりに対応しておいたほうがいい・・・?
31
比較表(技術視点)
32
Fortmatic
Torus
Portis
Bitski
Authereum
Dapper
WalletConnect
MetaMask
アカウント
EOA
EOA
EOA
EOA
Contract
Contract
その他
EOA
秘密鍵インポート
×
○
○
×
-
-
-
○
ネットワーク
Mainnet
Ropsten
Rinkeby
Kovan
カスタム
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
localhost
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
Mainnet
Rinkeby
Kovan
Mainnet
Rinkeby
Kovan
MainnetRinkeby
Mainnet
Ropsten
Rinkeby
Kovan
カスタム
Mainnet
Ropsten
Rinkeby
Kovan
Goerli
カスタム
EIP-712 対応
○
○
○
×
○
×
×
○
EIP-712 の引数
JSON Object
JSON String
JSON String
-
JSON Object
-
-
JSON String
その他
Flow対応予定
SNSアカウント宛てに送信可
他のブロックチェーンも対応
ブラウザ拡張開発中
Flow対応予定
Hex以外の署名に失敗する…
普通のブラウザで使える唯一のコントラクトウォレット
今後の UI/UX 向上に期待・・・
32
最近の動向
33
Trust Wallet のブラウザ機能が Apple App Store のガイドラインに準拠するために削除に→ ウォレットアプリのブラウザ機能は今後なくなっていくかも…?
ひとつのウォレットで複数のブロックチェーンに対応するケースが増えている
将来性
34
MetaMask が一般普及するのは考えにくいので、UI/UX が改善されたものに置き換わる気はする or die
ただ、今回調べたウォレットはいずれもそこまで盛り上がっている感じはない…
参考(公式サイトのキャプチャ)
35
Fortmatic の料金
37
38
https://tor.us/
38
39
https://www.meetdapper.com/
39
40
https://www.portis.io/
40
Portis の料金
41
https://portis.io/pricing
42
https://www.bitski.com/
42
Bitski の料金
43
44
https://authereum.com/
44