Account Abstraction(AA)とは?(パート1)
TwitterでVitalik氏をフォローしている人なら、Account Abstractionについて聞いたことがあるかもしれません。Vitalik氏は、これを実装することはEthereum開発者の長期的な「夢」であったと述べています。そして、彼はそのための提案をいくつか行っています。
また、Layer2ソリューションの代表格であるStarkNetとzkSyncの両方が、ネイティブなAccount Abstractionを搭載してローンチすると発表したこともご存知でしょうか。
しかし、それは一体何なのでしょうか?
また、なぜそれがクリプトの普及にとってゲームチェンジャーとなるのでしょうか。
この短いブログ記事のシリーズで、これらの疑問にお答えしていこうと思います。最初の投稿では、Ethereumアカウントを取り上げ、その制限をいくつか明らかにします。そして、Account Abstractionと、それがどのようにこれらの問題を解決するのかについて説明します。
要約すると、Account Abstractionはクリプトを、小さなミスですべてを失う可能性のある現在のone-account-fits-allのアプローチから、個人のニーズに合わせてアカウントをカスタマイズできる未来に移行させるものです。セルフカストディのためのセーフティネットを構築することができる場所。そして、より洗練されたUXを提供することができます。
これは、セルフカストディが主流の人々にとって現実的な選択肢となるため、私たちはとても興奮しています。シードフレーズや中央集権的な取引所だけに依存する危険な世界に対する代替案です。
では、さっそく見ていきましょう。
Ethereumのアカウントはどのように機能するのでしょうか?
Account Abstractionを理解するためには、まず現在のEthereumでアカウントがどのように動作しているかを理解する必要があります。
Ethereumには2種類のアカウントが存在します。
- 外部所有アカウント(EOA)
- コントラクトアカウント(CA)
この記事では、ユーザーにとって(今のところ)最も重要なのはEOAであるため、EOAに焦点を当てます。単にアカウントと呼ぶこともあります。コントラクトアカウントについてもっと知りたい場合は、こちらをご覧ください。
その名の通り、EOAはブロックチェーンの外部にあるもの、つまりユーザーが所有するアカウントです。
EOAには3つのプロパティがあります。
- アカウントで利用可能なETHの量を表す残高
- すべてのトランザクションが一意であることを保証するためのnonce
- ネットワーク上でアカウントを一意に識別するためのアドレス
ブロックチェーンの状態、つまりアカウントの状態は、取引を通じてのみ変更することができます。このトリガーはブロックチェーンの外部の何かから来る必要があり、したがってEthereumでは、すべてのトランザクションはEOAから開始されなければなりません。つまり、Ethereum仮想マシン(EVM)によって取引が実行されるとき、最初に触れられるアカウントはEOAでなければならず、対応するアカウントは取引全体の実行のためにマイナーに手数料を支払わなければなりません。
アカウントの所有権はどのように証明するのですか?
自分のアカウントのETHを誰かに使われないようにするために、何らかの権限が必要ですよね?
ここからが面白いんです!
Ethereumのすべてのアカウントは、署名者(Signer)と呼ばれるオブジェクトと関連付けられています。
署名者はキーペアとも呼ばれ、秘密鍵と公開鍵の2つの鍵でできています。
秘密鍵はデジタルメッセージに署名するために使用され、公開鍵はある署名が対応する秘密鍵によって署名されたことを誰でも確認できるようにすることができます。この暗号技術は、私の公開鍵から、秘密鍵を導き出す方法がないことを保証し、私の秘密鍵で署名したメッセージを提供したら、私が署名することができた唯一の人であることを確認することができます。
キーペアに基づいて暗号署名を生成する方法は複数存在します。Ethereumでは、Secp256k1という特定の楕円曲線上でECDSAという特定の署名方式を採用しています。
アカウントはどのように署名者と関連付けられるのですか?アカウントアドレスを通じてです。
EOAのアドレスは署名者の公開鍵から導かれます。具体的には、公開鍵のKeccak-256ハッシュの最後の20バイトがアドレスとなります。
したがって、口座の所有者は、対応する秘密鍵でトランザクションに署名することで、その口座からのトランザクションを承認することができます。取引と署名を受け取ると、EVMは署名が対象アカウントで有効であることを検証し、取引nonceがアカウントnonceと一致することを検証し、取引を実行し、アカウント残高から取引手数料を差し引きます。
これまで学んできたことを振り返ってみましょう。
Ethereumのアカウントは3つの要素で構成されています。
- 残高とnonceを含むステート
- アカウントからのトランザクションを検証・実行するためにEVMにハードコーディングされたロジック
- アドレス
また、署名者の公開鍵から得られるアドレスと、署名者からの有効な署名を正確に指定するハードコーディングされたロジックにより、アカウントは署名者(鍵ペア)と緊密に結合していることが分かっています。
最後のポイントは、Ethereumブロックチェーンの非常に重要な設計上の選択を強調しています:アカウントの概念(あなたのトークンを保持するオブジェクト)と署名者の概念(これらのトークンを移動する権限を与えられたオブジェクト)は、基本的に同じものです!秘密鍵を持っている場合、あなたは自動的に署名することができます。 秘密鍵を持っていれば、自動的に関連するアドレスにアカウントを持っており、あるアドレスにアカウントを持つには、対応する秘密鍵を所有していなければなりません。このロジックは、EVMの心臓部にハードコーディングされています。
この方法は、理解しやすく、実装が簡単という利点があります。また、コンピュータ上でキーペアを生成するだけで、簡単に始めることができます。
さらに重要なのは、「あなたの鍵ではない、あなたのコインではない」というキャッチーなフレーズを口にできることです。
しかし、このアカウントと署名者のカップリングには、多くの問題もあります。
秘密鍵を紛失したり、他人に知られてしまった場合はどうすればよいですか?
秘密鍵はあなたのアカウントなので、鍵を失うことはあなたのアカウントを失うことを意味します。
さらに悪いことに、もし他の誰かがあなたの秘密鍵を手に入れたら、あなたのアカウントも、そしてそれに含まれるすべてのトークンも手に入れることになります。そして、あなたはそれに対して何もすることができません!
秘密鍵の紛失や盗難が原因で、何億ドル、何十億ドルというお金がすでに失われたり、盗まれたりしているのです。
確かに、ハードウェアウォレットを使って、秘密鍵を金属片に書き込み、金庫に保管することは可能です。これは、クリプトアーリーアダプターにとっては構わないことでした。しかし、このやり方で何十億人ものユーザーにスケールアップできると、本当に信じられるでしょうか?
ECDSAとは異なる署名方式を使いたい、あるいは異なる楕円曲線を使いたい場合はどうすればいいのでしょうか。量子コンピュータが登場し、ECDSAを破ることができることは分かっています。
私たちはそれ以上のことができるでしょうか?
—できます。そして、理解するのは簡単です。
トークンを保持するオブジェクト(アカウント)と、トークンを移動する権限を持つオブジェクト(署名者)を分離しましょう。
どうやるのでしょうか?
アカウントを、有効な取引とは何かを定義する独自のロジックを持つスマートコントラクトに変えるのです。唯一の要件は、トランザクションを検証し実行するためのメソッドを持つ特定のインターフェースに準拠することです。
コンピュータサイエンスの専門用語では、アカウントが抽象化されたと言いますが、これが「Account Abstraction(アカウントの抽象化)」という用語の由来です。
そして、なぜこのような強力な機能があるのか、すぐに理解できます。もはや、one-account-fits-allのユースケースではありません。その代わり、各ユーザーは自分のニーズに合ったアカウントを持つことができます。
- ECDSAとは異なる署名方式を使いたいですか?問題ありません。そのためのアカウントを作成することができます。
- トランザクションの認証に複数の鍵を使用したいですか?問題ありません。そのためのアカウントを作成することができます。
- 毎週、署名者を変更したいですか? 問題ありません。そのための口座を作ることができます。
可能性は無限大で、StarkNetやzkSync 2.0のようなAccount Abstractionをサポートするチェーンで、どんな新しいユースケースが現れるか楽しみです。
本連載の第2回では、Account Abstractionによって独自に実現される機能の具体例をいくつか紹介し、なぜそれがブロックチェーン技術の採用にとってゲームチェンジャーになると考えているのかを紹介していきます。