Augurのローンチ時に想定される混乱

今回は、Augurのローンチ時に想定される混乱について述べます。

結論から言うと、ローンチ後にAugurでREPを使いたければ、まずその保有するREPをジェネシスユニバースに移行しなくてはならず、これによって複数のバージョンのREPが存在することとなり混乱を招く可能性があります。

以下にもう少し詳しく説明するため、まず用語を解説します。

ユニバース(universe)とは?

ユニバースとは、REPやマーケットを入れておく器のようなものです。Augurの機能としてのフォーク(過去ブログ参照)が発生すると、このユニバースはアウトカム毎に分裂し、複数のユニバースが誕生します。分裂元となるユニバースを「ペアレントユニバース」、分裂後のユニバースを「チャイルドユニバース」と呼びます。Augurローンチ直後のユニバースを「ジェネシスユニバース」と呼びます。ローンチ直後のユニバースは、このジェネシスユニバース一つだけです。例えば、ローンチ後に初めてフォークが発生すれば、「ジェネシスユニバース」が「ペアレントユニバース」となり「チャイルドユニバース」が生成されます。

移行(migration)とは?

REPをユニバースに移動させることです。フォークが発生した場合、REP保有者はペアレントユニバースに存在する自身のREPを移動したいチャイルドユニバースを選択し、移動させる必要があります。このユニバースへのREPの移動が「移行(migration)」です。なお、移行とは一方向かつ不可逆であり、やり直しやチャイルドユニバース間の移行はできないため、細心の注意を払って行う必要があります。

なぜ混乱が起きるの?

最初に述べた通り、ローンチ後にAugurでREPを使ってレポート等を行いたい場合、保有するREPをジェネシスユニバースに移行する必要があります。

「移行しないと使えないならば移行すれば良いだけ。大した問題ではないのでは?」と思うかもしれません。しかし問題は、移行するとERC20コントラクトアドレスが変わる、ということです。コントラクトアドレスが違うということは、移行前のREPと移行後のREPは全く別物になるということです。例えるならEOSとTRXぐらい違います。

ウォレットや取引所などのサービス提供者はこの違いに対応する必要があります。ウォレットはMyEtherWalletのように既にERC20に対応しているためあまり問題ないかもしれません。しかし、取引所とそこのユーザーは混乱する可能性が高いです。扱っている「REP」が移行前/移行後のどちらを指しているかはコントラクトアドレスを見ないと分かりません。例えばアービトラージのためだけにREPのトレードを行う人が、ある取引所で買ったREPを別の取引所で売ろうとしても、それぞれの取引所で扱っていたREPが別物だったために取引できないということが起こり得ます。

対策は?

基本的なことですが、ERC20に対応しているウォレットでREPを所有しておくことだと思います。取引所が預かっているREPを勝手にジェネシスユニバースへ移行しないと思いますが、自分のREPがどのコントラクトアドレスのものなのか、また、必要な時に自分の意志でREPを移行できるよう、自身のウォレットで所有すべきと考えています。

開発者側でも「移行前後のREPを区別できるようティッカーシンボルを都度変更する機能を実装すべきか?」を激しく議論していましたが、そのティッカーシンボルが使われる保証は無いため、実装しないという結論に至っていました(技術的には、ERC20トークンコントラクトに共通で実装されているティッカーシンボルを返却する関数「contract.symbol()」をカスタムすれば、例えば”REP-1Az”のように現在の”REP”にランダムなサフィックス”-xxx”を付けたティッカーシンボルを生成することは可能なようです)。

また、「あらかじめ開発者が全REPをジェネシスユニバースに移行してくれればいいのに」と思うかもしれませんが(私は思いました)、ジェネシスユニバースはAugurのAPI「augur.api.Augur.createGenesisUniverse」を使えば作成可能であり、もし作成されれば複数のジェネシスユニバースから移行先を選択する必要がありますが「Augurは非中央集権的であるべき」という原則から、移行先のジェネシスユニバースを開発者が決定することはしないそうです。

最後に

ローンチが楽しみな反面、このように課題・リスクもあり、今後も注視していきたいと思います。
なお、ネガティブなことばかり書いていますが、私はAugurの失敗を望んでいるわけではなく、あまり公開されていない情報が共有されれば良いなという希望から書いています。Augur大好きです。