php-mposの管理画面のお話です。メニュー[Admin Panel]→[Funds]→[Wallet Info]で表示される画面の[Balance Summary]という区画の各項目について調べてみたので記事に残しておこうと思います。
Wallet Balance
これは純粋にwalletに入っているコインの総額になります。ブロックチェーンに記録されているUTXOの総和と考えて問題無いでしょう。但し、coinbaseトランザクションは特定の承認数(たぶん100?)を得ていないと反映されない様に見えます。
Locked for users
これは未払いのコインの総額になります。マイナー側の資産と考えて問題無いでしょう。承認済みの総額から出金済みと各種手数料を引いた値になります。あくまでもdatabaseに記録されているものなので紛失すると(バックアップなど無い限り)復元できないものです。
transactionsテーブルにおいて
[confirmedでtypeがCreditかBonus、またはtypeがCredit_PPSであるレコードの総和] - [typeがDebit_MPかDebit_APであるレコードの総和] - [confirmedでtypeがDonationかFee、またはtypeがDonation_PPSかFee_PPSかTXFeeであるレコードの総和]
Unconfirmed
これは未承認のコインの総額になります。120承認(デフォルト値)を得ていないブロックのコインですね。Orphan等の問題に対応できるよう未承認をカウントさせない仕組みとしてこのUnconfirmedがあると推測します。こちらもdatabaseから情報を拾ってきています。
blocksテーブルにおいて
confirmationsが-1より大きく、confirmationsが設定値(network_confirmations default=120)より小さいレコードの総和
Liquid Assets
これはプール運営者側の資産を指しています。walletのコイン総額からマイナー側資産と未承認を引いたものです。
値は [Wallet Balance] - [Locked for users] - [Unconfirmed] で求めています。
フローとしては以下の感じになるかと思います。(propの場合)
- ブロック発見!
- Unconfirmed が発掘したコイン分増える
- 発見したブロックが100承認を得る頃にWallet Balanceが発掘したコイン分増える
- 発見したブロックが120承認を得る頃にLocked for usersが発掘したコイン分増えると同時にUnconfirmedが同量減る
尚、上記は誰もauto payoutを設定していない場合であって、実際には120承認を超えた時点でauto payoutの閾値を超えたアカウントは出金するのでその分だけWallet BalanceとLocked for usersがほぼ同時に減るといった振る舞いになります(manual payoutはいつでも発生し得ます)。
注目すべきは100承認得てからWallet Balanceが増える為、Liquid Assetsは一時的にマイナスになる点です。この為、プール運営初期は最初のブロック発見時にcronが止まるという事象が発生し得るようです。プールのwalletに予め発掘で得るコイン以上は入れておいた方が良さそうですね。
また、プール運営初期以外にも短時間に運良く大量にブロックを発見した場合、一気にUnconfirmedが増えてしまい結果的にLiquid Assetsがマイナスになる可能性があります。なのでそれなりのコインをプールのwalletに維持しておかないとマズイですね。