他のPoWチェーンのハッシュパワーをimportする方法


#1

はじめまして。パブリックブロックチェーンVreathを開発しているSoraSue(@SoraSue77)と申します。
他のPoWチェーンのマイニングで消費されたハッシュパワーを自分のチェーン内で再利用して、他のPoWチェーンのハッシュパワーをimportする方法を今考えています。これが実現すれば、全PoWチェーンがBitcoin+αの安全性を得られ、「低ハッシュレートのPoWチェーンが51%攻撃を受ける」ということが少なくなると思います。
アルゴリズムの大まかな流れとしては、以下のようなものを想定しています。
①他のチェーンのマイニングで生成されたハッシュ値をコミット
②各チェーン毎に設定されたハッシュ値検証アルゴリズムを実行(ハッシュ値検証アルゴリズムは任意のものを誰でもデプロイできるが、必ず公開される)
③ハッシュ値がvalidなら、それをコンセンサスアルゴリズムで使える要素に変換(Proof of Unitのunitなど) *以下この「コンセンサスアルゴリズムで使える要素」を便宜上unitと呼びます。
これを安易に実装すると、「制約が緩いハッシュアルゴリズムで大量にハッシュ値を生成して、低コストで51%のunitを得る」ということが可能になります。逆に、どのハッシュアルゴリズムを使ってもunit1個あたりで必要なコストは変わらないことを保証できれば、任意のアルゴリズム・任意の他のチェーンのハッシュ値を、ゲームバランスを崩壊させずにimportすることが可能です。
例えば、「どんなハッシュ値でもいい」というゆるゆるなアルゴリズムがデプロイされた場合、おそらくそのアルゴリズムでのハッシュ値供給量は莫大になります。そこで、「1個のハッシュ値をunit何個分相当として扱うか」というパラメータを用意します。それが供給量に反比例するようなものなら、莫大なハッシュ値をコミットしてもほとんどunitを得られないようになり、全体への影響を大きく薄められます。
このパラメータの仕様はまだ計算できていないのですが、Maker DAOやBancorの知見を生かせないかと思っています。具体的には、基準となるアルゴリズムで1個のunitを作るのにかかるコストと、任意のアルゴリズムでunit1個に相当するだけの量のハッシュ値を作るのにかかるコストの間で等式が成り立つと思います。ちなみに、この仕様をすぐにVreathに取り入れるつもりはありません。
長文失礼しました。皆様のご意見いただけると嬉しいです!


#2

#3

返信ありがとうございます!
merge miningの情報拝見しました。

実は最初、「namecoinのように他のチェーンのハッシュパワーを取り込んで、自分のチェーンのハッシュパワーを大きくする」という方法をuniversalにできないかと考えて思考し始めました。


#4

抽象的なアイデアレベルの話なので、こういう発想もあるのかも?くらいで読んでいただければと思います。

まず、上記の仕組みを Bancor と照らし合わせて、

  • スマートトークンの総供給量(ex. BNT の総供給量):unit の総供給量
  • リザーブされたトークンの総量(ex. リザーブされた ETH の総量):hash の総量
  • スマートトークンの価格(ex. ETH / BNT):hash・unit 間の変換レート(hash / unit)

と考えてみます。また、Bancor に習って「unit の総供給量が増えると hash / unit は上がる」ことがプロトコルとして保証されているとします(これは、SoraSue さんのおっしゃっている「供給量に反比例」の話に相当するのかなと)。

このとき、Bancor との大きな違いとして

  • unit から hash への変換ができない(というか、メリットがない)こと

が挙げられるのかなと。

Bancor の場合「ETH(hash)を BNT(unit)に変えて儲けたい人がいる一方で、BNT(unit)を ETH(hash)に変えて儲けたい人もいるので、どこかに均衡のような状態が生まれる」と考えると、unit から hash への変換が何らかのカタチでマイナーのメリットになるのであれば、一方的に外部から hash を持ち込む行為をより非合理にはできそうです。

ただ、非合理になったとしても、非合理を承知で 50 % 超の unit を持っていけることに変わりはない(むしろ簡単になってしまうかもしれない)と思うので、これではセキュリティ要件を満たしてはいないかなと思います。

うーん、どうすればいいんでしょうね。上では hash のメリットが何なのかについては言及していないので、ここの定義と合わせてうまく解決できるのがベターかなという気はしています。


#5

返信遅くなってしまいすみません!
あれから考察を進めてみました。

新しいルールを2つ追加します。
①マイナーはハッシュ値をコミットしてunitを得るのではなく、ハッシュ値をそのチェーンのunit validatorに購入してもらい、そのチェーンの基軸通貨で報酬を受け取る(ただし、この市場は完全競争市場とする。)
②マイナーがハッシュ値を売る時、tax miningという、「コミットするハッシュ値、コミットするチェーンのid、nonceをinputとするハッシュ値を固定target以下の値にするマイニングをハッシュ値一つごとに売らなければならない。

もしhash power importの仕組みを持ったチェーンが複数あるとき、tax miningがなければ、マイナーは同じハッシュ値をコスト0で複数回販売することができ、ある一つのチェーンにおいてのそのハッシュ値の代金はマイニングコストに比べかなり低価格まで下げることができます。(n個チェーンがあるとき、n個分の代金の総和がコスト以上であればいいので)
将来的にチェーンが無限個になればハッシュ値の価格は限りなく0に近づきます。逆に、tax miningという形で、そのチェーンのためにハッシュ値を売る際の最低支払コストを規定してしまうとどうでしょうか?完全競争市場下だと限界費用 = 価格になるので、マイナーが一つのハッシュ値に設定する価格は、少なくともtax miningにかかったコスト以上になります。
そこで、次にunitを供給トークン、消費コストを担保としてBancor式で「1unitあたりにかかるコスト」を計算してみます。(固定準備率は1とおきます。)ただし、cost = (提示される)price、unit = t * hash、1unitあたりにかかるコストをcとします。このtをチェーンが知りうるパラメーターのみで表すことが目的です。
まず、基準となるアルゴリズムAを考えます。(ex:Proof of Unitのデフォルトのunit)(Aにおいてはunit = hash)このAにおいてのc1と任意のアルゴリズムでのc2が等しいと言うのが、条件です。
c1 = cost1 / unit1 = price1 / hash1
c2 = cost2 / unit2 = price2 / t * hash2
c1 = c2より
price 1 / hash1 = price2 / t * hash2
これを解いて
t = (price2 * hash1) / (price1 * hash2)
これらのパラメーターは全てチェーンが取得可能なので、命題を満たすことができました。
つまり、発行するunit量は
unit2 = t * hash2 = (price2 * hash1) / price1
ただし、これは微小変化についての式なので、実際は積分しないといけません。
マイナーはprice2を上げると発行unit量が増えますが、今度は高くなり買い手がつきにくくなります。(でも、得られるunit量が増えるなら買い手にとっても問題ないのでは?と思ってしまいました。)


#6

1 つの方向性としてよさそうな感じがします。また、自分も、マイナーが price を上げる行為に関しては特に問題ないのかなと思いました。

というか、そもそも unit という概念によって hash と unit の間にある種の市場を生めるという性質が merge mining を考える際にこう活きてくるんですね。興味深いです。

少し本筋から逸れますが、もし unit に対する cost の固定準備率が 1 を下回る場合、あるチェーンだけの unit が膨れ上がらないような力が働く感じになるんですかね?これはこれで、技術目線でも世界観目線でもどういう利点があるのか考えてみるとおもしろいのかもしれません。

あ、あと、unit の発行量って増加し続ける想定でしょうか?


#7

ありがとうございます!

Proof of UnitはProof of WorkをProof of Stakeでwrappingしたアルゴリズムなので、PoSのようにstakeされているhash powerをチェーンが認識したり、unitのインセンティブ設計を通してvalidatorの行動を規定することが出来ます。その応用の一つがこのhash-power-importing systemではないかなと思います。

ところで、priceと発行unitの関係なのですが、1 unitあたりのpriceを計算すると
price 2 / unit2 = price 1/ hash 1 となります。
美しいことに、バリデーターはどのunitを買っても経済的には同じだと言えます。
しかし逆に考えると、price 2はvalidatorの購買意欲と関係ないことになるので、前提が崩れてしまいそうです。

まだ検証しきれていないですが、固定準備率が1でない場合、おそらくそのツケがtにあらわれていくのではないかと思います。

unitの量はマイニングで増えると同時に、毎ブロックごとに自動減少していきます。(balance(n+1) = α * balance(n)など) そのため、validatorはunitを新たに買い続けなければいけません。


#8

あれから考えを進め、ハッシュ値の価格=限界費用が確かに成り立つようにしました。
まず、流れを以下のように変更します。
①マイナーは自分のハッシュ値を任意の価格で販売する。
②バリデーターは提示された価格を基軸通貨で支払い、1ハッシュ値あたり1HSHトークンを手に入れる。
③バリデーターは任意のタイミングで自分のHSHをunitに変換する。
ただし、基準アルゴリズムでの1HSHの価格をp1、対象のアルゴリズムでの1HSHの価格をp2とするとき、unit = (p2/p1) * HSH

以前からの大きな変更点は、1 hashあたり1つ発行されるHSHトークンを入れたことです。この市場が完全競争市場なら、「マイナーはできるだけ高く売りたい」「バリデーターはできるだけ安く買いたい」という状態が成り立ち、価格がハッシュ値一個あたりの限界費用と等しい時に利潤は最大化します。
そのため、基準アルゴリズム、対象アルゴリズムにおいて、マイナーが一つのハッシュ値を計算するのにかかるコストをそれぞれc1、c2とおくと、
p1 = c1, p2 = c2が成り立ちます。

ここで、hash値1個あたりでかけたコストと生成されるunitの比を考えると、
基準アルゴリズムは c1: 1 = p1: 1
対象アルゴリズムは c2: unit = p2 : (p2/p1) * 1 = p1 : 1
より、比は等しくなります。

ただし、これにもまだ問題点があります。
攻撃者がチェーンをフォークすると、バリデーターもマイナーも一人だけになり、完全競争市場の仮定が崩壊します。
そのため、「p1とp2を低くすることでunitへの変換比率を釣り上げ、基準アルゴリズムよりコストが低いアルゴリズムで大量にunitを生成する」といったことが可能になってしまいます。


#9

もし、完全競争市場での理想的な買い手をアルゴリズム的に再現して、実際に購入を行うのをスマートコントラクトだけにすれば、フォーク時でもunit比率を適切に維持できるのではないでしょうか?
つまり、ハッシュ値の価格を供給が増えれば低く、供給が減れば高くするということです。
攻撃者がチェーンをフォークして、簡単なアルゴリズムで低コストに大量のハッシュ値を生成すると、そのハッシュ値の価格は低下します。一方、基準アルゴリズムでの供給を維持することができなければ、基準アルゴリズムのほうのハッシュ値の価格は高くなります。よって、unitへの変換比率p2/p1は小さくなっていき、攻撃は失敗します。

このように、アルゴリズムを完全競争市場下の買い手のように振る舞わせようと思うと、具体的にどのような仕組みにすればいいでしょうか?
皆さんのご意見いただけると嬉しいです。