Aragon の主なビルドターゲットを選択したとき、Electron + MetaMask を選択する上での我々の優先事項はセキュリティと使いやすさでした。

もちろん、Aragon は Web3 のどの環境( Mist や Parity, Chrome & MetaMask のような)でも動作しますが、ユーザーの経験を完全に制御できるビルドターゲットを求めていました。

私たちのインプリメンテーションの仕組みに興味を持っているコミュニティの一部になったので、私たちの判断とチャレンジを説明することを望んでいます。

なぜ Electron ?

・あなたの代わりに契約コードを実行する dApps はパッケージ化され、リリースされる整合性を証明するべきです。

Electron はすべてのデスクトッププラットフォームでの簡単なパッケージ化を可能にしている。

・私たちはいくつかのシステム機能(例:keybase )にアクセスする必要があります。
それがまさに私たちを Electron に導いたものでした。

それが私たちが目指すセキュリティと使いやすさのコントロールを私たちに与えてくれるでしょう。

なぜ MetaMask

・それは Web3 と対話する最も簡単な方法です。 エコシステムではすでに多くの人がそれに慣れています。

・それを実行するのにギガバイトのダウンロードは必要ありません。 これが以下に示すように、FTUE( First Time User Experience )スムーズにします。

・それは非常にユーザーに優しいです。 UI / UX のフロントではまだ多くの作業が必要ですが、将来的に進歩します。

・彼らは軽いクライアントになる計画を持っているので、AFAIK は将来的に INFURA が作動することを必要としません。

私たちの脅威モデル

攻撃者が Aragon の中でで悪質なコードを取得したとしても、オペレーティングシステム全体または、ユーザーの財布 ( MetaMask )を攻撃することはできません 。

デフォルトで Electron は基本、含まれているアプリケーションに任意の NodeJS コードを実行させます。

これが意味することは、攻撃者が効果的にあなたのオペレーティングシステムを占有することができます。

私たたちは nodeIntegration を false に変えることでこの攻撃面を削除したので、dapp は通常のブラウザで実行されるようにサンドボックス化されています。

Electron のメインプロセスでオペレーティングシステムコール(例:Keybase 統合など)が必要なコードを実行し、残りをレンダラープロセス(サンドボックス)で実行します。

NodeJS の統合を無効にするときの Electron で IPC を実行する標準的な方法はいなくなることです。 なので、私たちは Intertron と呼ばれる独自の安全で安全な IPC メソッドを開発しなければなりませんでした。

MetaMask の埋め込み

MetaMask のビルドターゲットはブラウザ拡張です。

では、MetaMask のようなブラウザ拡張を Google の Electron アプリにどのように埋め込むことができましたか?

我々がやるべきことは

・ダミーの API をたくさん実装して Chrome を偽装したので、コードベースから多くの距離をとる必要はありませんでした。

・拡張機能と webapp( ポートを使用する)間のデフォルトの通信方法を、 postMessage を使用して独立した発信元の通信で置き換えます。

・スタムプロトコルを実装することで、Aragon は aragon ://および MetaMask over metamask://の形で提供されます。 このやり方で、私たちはさまざまな起源を強制し、完全なコンテキストの隔離を実現します(例:Aragon の dapp が MetaMask の秘密鍵にアクセスするどんな方法はありません)

・ユーザー入力が必要なトランザクションを検出した場合は、MetaMask を表示します。

まとめ

エコシステムでは、セキュリティと使いやすさの観点から dapp のパッケージ化を進化させるための仕事がまだまだたくさんあります。

私たちは MetaMask のすばらしいチームの努力に感謝し、彼らと協力し続けることを楽しみにしています。

あなたは MetaMask フォークをチェックすることができます。

私はそれが長く存在せず、最終的に上流の repo の一部になることを望みます。

Source : Electron + MetaMask = Secure, Easy to Use Dapps

※ 原著者に翻訳及び転載の許諾を得ています。