算出方法

Mizukagami は、過去の JST 日付で買って今まで持っていたらどうなっていたかを計算する hindsight simulation です。見た目は遊んでも、価格・為替・ランキングの扱いは server 側で固定し、共有や順位が後からぶれないようにしています。

1. 何を計算するか

  • 機能は「過去の JST 日付で買って、今まで持っていたら」に限定しています。
  • 未来の投資助言や、公開の結果専用ページは作りません。
  • 共有文面の「あの時売っていなければ」はコピー軸だけで、別の計算モードではありません。

2. 価格ソースと JST 日付

  • 履歴価格は Pyth Benchmarks 系のデータと日次アーカイブを基準に扱います。
  • 日付の判定は JST で統一し、当日分は未確定として計算対象から外します。
  • 上場前の日付は選択不可にし、必要な例外は provider 層の override で吸収します。

3. 現在価格キャッシュ

  • 現在価格は server-side の current-price cache から読み、60 秒ごとに更新します。
  • 本番では Redis か DB を背面 cache に使い、ページ更新のたびに live provider を乱打しない形を前提にしています。
  • cron refresh が入らない状況でも、server 側で stale 判定と refresh を管理します。

4. 円表示と為替差分

  • JPY 表示は historical/current の USD 価格と USD/JPY を一貫した経路で合成します。
  • 詳細欄では、暗号資産そのものの変化と為替差分を分けて扱います。
  • 英語版では USD を基準通貨にし、為替の影響セクションは出しません。

5. スナップショット、共有、ランキング

  • ランキングと share card は、計算時に保存した simulation snapshot を基準にします。
  • 共有画像や X 文面は live 再計算ではなく、保存済み snapshot から生成します。
  • そのため、後で現在価格 cache が更新されても、共有済み・順位化済みの結果は凍結されたままです。

6. 制限と防御

  • ランキング対象は初期投資 50,000,000 円以下、1 人 1 ボード 1 記録、1 分以内の連続投稿は rate limit です。
  • identity は browser_id と IP hash を組み合わせて扱い、display name は validation を通します。
  • 外部投稿フローは将来拡張できますが、source-of-truth の計算、順位、共有値は server 側で守ります。