おそらくこの計算式で合っていると思う。
ブロック生成時間はUnixTimeで、秒単位で記録されている。そのため、まずは現在時刻とブロック生成時刻の差を求める。
現在時刻 - ブロック生成時刻 = a (現在時刻は1秒につき1ずつ加算されるのでaは必ず正の値、つまりマイナスにはならない)
次に、ブロックの基礎weightを求める。生成時間から6時間はweightがつかないはずなので、そこに注意。
ブロックのコイン数 × ( a - 21600[秒,6時間] ) = b
ある時点における管理人@0時の、あるブロックについて検証すると(小数点以下は記述しない)
3,795(Rin) × (17,719[承認] × 60[秒に戻す] - 21,600[PoS除外時間] = 4,034,594,700 (bの値)
bの値がマイナスの場合は6時間経過していないのでPoSの対象ではない、この場合はbの値をゼロとし、そのブロックの計算は中断する。マイナスにはならない
これら式から出た b の値は大きすぎるので、1日の秒で除算する(割る)。
b ÷ ( 60 × 60× 24 ) =x
先ほどの実例なら、
3,034,594,700 ÷ 86,400 = 25,156.233333...
となり、xの値(このブロックのweight)はおよそ25,156ということになる。
これを手持ちの取引ブロックすべてで計算し、そのxの合計量がクライアントに「weightは○○(小数点は見えない)」と表示される。
表計算ソフト等で計算式を組み立てるなら、コインコントロールで一覧を出して、ブロックごとのコイン数と承認数を入力、
= coin*(承認数*60-21600)/86400
この式で、おおよその数値を求めることができる。
計算していくと多少の誤差が出るが、処理上の都合だったり、Stake中だと値に大きな差が出たりする(可能性がある)。
これらの計算式は暫定ですので、間違いがあれば掲示板かコメントで指摘してください。