はじめに
2019年頃にNemKitというエクスプローラーっぽいサービスを作って運用してました。
当時は業務系システムがメインのSIerからフリーランスとして独立したばかりでそれはそれはイマイチなWEBサービスだったんですが()
しかしながら、ハーベスティングに必要な既得バランス周りの機能はそこそこ独自性があったと思うので、今回コアとなる3つのサービスをGoogle SpreadSheetで再現する方法を紹介していきます。
目次
- Vested Schedule: 日ごとに既得バランスがいくら増えていくか←今回これ
- After Vested Balance: XEM送金後に残る既得バランスを調べる
- Keep10k: 10,000XEMの既得バランスを残して送れる上限を計算する
既得バランスについておさらい
NEM では、残高を保有しているだけで時間経過とともに「既得バランス」が増えていき、10,000 XEM の既得残高に到達すると委任ハーベストが可能になる…という独特のシステムでした。
「あとどれくらいで 10,000 XEM に到達するんだろう?」と気になった方も多いはず。
このあたりの「残高が条件を満たしてから実際にハーベスト可能になるまでの待ち時間や計算方法」の概念が、NEM の頃とはけっこう違います。めんどくさいですね。
本記事では、かつてNemKitにあった機能の一つ Vested Schedule(既得バランスの獲得スケジュール計算)をGoogle SpreadSheetで利用する方法を詳しく解説します。
アドベントカレンダー企画として、懐かしの NEM ユーティリティを現代の技術スタックで蘇らせるシリーズの第1弾です。
Vested Schedule とは?
現在の残高と既得残高から、目標とする既得残高(通常は 10,000 XEM)に到達するまでの成長スケジュールを日次で計算・表示する機能です。
計算ロジック
既得バランスの成長ルールは以下の通り:
1日あたりの増加量 = (残高 - 現在の既得残高) × 0.1
翌日の既得残高 = 現在の既得残高 + 1日あたりの増加量
例えば、残高 80,000 XEM、既得残高 2,000 XEM の場合:
1日目: 増加量 = (80,000 - 2,000) × 0.1 = 7,800 XEM
既得残高 = 2,000 + 7,800 = 9,800 XEM
2日目: 増加量 = (80,000 - 9,800) × 0.1 = 7,020 XEM
既得残高 = 9,800 + 7,020 = 16,820 XEM(目標達成!)
このように、未既得分が減るにつれて増加量も減少していくため、指数関数的に目標に近づいていきます。
逆に言うと、10,000XEMちょうどを入金しても一生既得バランスは10,000にはなりません。
実装方法
スプレッドシートの数式
セル配置
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 項目 | 値 | ||
| 2 | 残高 | 15000 | ||
| 3 | 既得残高 | 0 | ||
| 4 | 目標既得残高 | 10000 | ||
| 5 | 開始日 | =TODAY() |
||
| 6 | ||||
| 7 | 日付 | 既得残高 | 増加量 | 目標達成 |
| 8 | =B5 |
=B3+C8 |
=($B$2-B3)*0.1 |
=IF(B8>=$B$4, "達成", "") |
| 9 | =A8+1 |
=B8+C9 |
=($B$2-B8)*0.1 |
=IF(B9>=$B$4, "達成", "") |
各列の数式解説
A列(日付):
- A8:
=B5(開始日を参照) - A9以降:
=A8+1(前日+1日)
C列(増加量):
- C8:
=($B$2-B3)*0.1(初日は初期既得残高から計算) - C9以降:
=($B$2-B8)*0.1(未既得分の10%)
B列(既得残高):
- B8:
=B3+C8(初期既得残高 + 増加量) - B9以降:
=B8+C9(前日の既得残高 + 増加量)
D列(目標達成判定):
- D8以降:
=IF(B8>=$B$4, "達成", "")(目標達成したら「達成」と表示)
9行目の数式を下方向にフィルすれば、日次で既得残高が自動計算されます。
確認
NEMKit(公開終了)での確認
サマリ
日次
細かい小数点以下の誤差はあるが、概ねOK!
次回は「送金後の既得バランス計算」を Google Spreadsheet で実装します。


