はじめに
RinHash は、私が開発している仮想通貨 RinCoin のために設計した
独自の Proof-of-Work(PoW)アルゴリズムです。
既存の PoW(SHA-256 / Scrypt / Ethash など)は、最終的に ASIC による
ハッシュ集中が起きやすく、GPU・CPU マイナーが排除されがちです。
そこで私は 「GPU・CPU で現実的に掘れ、ASIC では効率が出にくい」
ことを目標に RinHash を設計しました。
RinHash とは
RinHash は、複数のハッシュ関数を直列に組み合わせた PoW アルゴリズムです。
BLAKE3 → Argon2d → SHA3-256
設計思想
なぜ ASIC 耐性が必要か
- ASIC によるハッシュ集中
- ネットワークの中央集権化
- 個人マイナーの排除
のような問題点が挙げられます。RinHashは独自のアルゴリズムを実装することによりGPUやCPUでもマイニング可能にし、企業が独占するのではなく公平なマイニングを目指しています。
RinHash の狙い
- GPU・CPU でマイニング可能
- ASIC ではコスト効率が出にくい
- 実装を公開し、検証可能にする
各アルゴリズムの役割
BLAKE3
- 非常に高速なハッシュ関数
- ブロックヘッダー(80byte)を一度拡散する役割
Argon2d
- メモリハード関数
- RinHash では Argon2d を採用
- ランダムメモリアクセスが多く ASIC 実装が難しい
SHA3-256
- 最終ハッシュの整形
- 出力を 32 byte に固定
RinHash の仕様
Input : 80 bytes (Block Header)
Output : 32 bytes
C 実装例(簡略)
void rinhash(const uint8_t *input, uint8_t *output)
{
uint8_t blake3_out[32];
uint8_t argon2_out[32];
blake3_hasher hasher;
blake3_hasher_init(&hasher);
blake3_hasher_update(&hasher, input, 80);
blake3_hasher_finalize(&hasher, blake3_out, 32);
argon2d_hash_raw(
2, 64, 1,
blake3_out, 32,
"RinCoinSalt", 11,
argon2_out, 32
);
sha3_256(output, argon2_out, 32);
}
まとめ
RinHash を始めPoWにはいくつもの種類がありますが、PoWには今後も発展の余地があると考えています。
この記事を読んで少しでも気になってくれたら嬉しいです。