nanopool での仮想通貨マイニングの税計算を行う(2017 年 12 月 17 日時点およそ 60% 完成)

漢ならマイニングプールでの仮想通貨マイニングの税計算を極めたいですね!

やりましょう!

国民の三大義務のひとつは, 納税の義務ですね!
エンジニアリングしつつ納税の喜びを得たいですね!

## 前提と背景

個人で仮想通貨のマイニングをした場合の確定申告での税務計算(雑所得)について考えます.
個人事業主や法人で, マイニングを事業として行った場合は別の税務処理になります
(が, 取得価格計算はここで取り上げるやり方と一緒かも?)

https://www.nta.go.jp/taxanswer/shotoku/1524.htm
https://www.susi-paku.com/pakubitcointax2.html
https://bitcoin-yoro.com/kisochishiki/tax-return
https://www.nta.go.jp/shiraberu/zeiho-kaishaku/joho-zeikaishaku/shotoku/shinkoku/171127/01.pdf

個人の場合(サラリーマン的な属性の方)は, マイニングなどによる雑所得が 20 万円を超えなければ申告不要ですが, その次の年の確定申告のためにも, マイニングした仮想通貨の取得価格については計算しておいたほうがよいでしょう.
(+ 市民税についてはいずれにせよ申告)

## 方針とやり方

pool は nanopool です.
nanopool では REST API があるのでそれを使い, 仮想通貨がプールからウォレットに払い出されたときのヒストリを取得します.

Google spreadsheet を使います.
JSON をインポートできる https://github.com/bradjasper/ImportJSON をインストールしておきます(やりかたはググってね).
デプロイ時にセキュリティの warning が出ますがとりあえずは無視します... たぶんセキュリティ上の問題はないはず?

払い出し(pool から wallet への送金)は, 当然ながらブロックチェーンに記録されますので, ここで改ざんはできずきちんと送金があったことを国税庁に証明できます! 仮想通貨の利点ですね, 素晴らしいですね.
(もし pool がサービスを終了してしまったりなどで, 払い出しの記録が残っていないなどあっても, 最悪ブロックチェーンの記録を解析すればわかる)

REST API を提供しているプールであれば, 似たようなやり方で処理できるでしょう

### 取得例

Zcash の払い出しのヒストリを取得します.

https://zec.nanopool.org/api

の

payment です.

Google spreadsheet で `importJSON` で REST API を叩きます.

<img width="524" alt="Screen Shot 2017-12-06 at 1.30.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/36275/6df3470e-11b0-fcab-5bd3-57dff78889f2.png">

Voala! めでたくヒストリを Google spreadsheet に取り込むことができました!

仮想通貨と円の時価については, とりあえず日単位で値洗いすることにします.
仮想通貨のレートを調べるにはいくつかあると思います. 

fau_ig さんから教えていただいた, 仮想通貨のレートを CSV で取得できる CoinGecko を使うことにします. ありがとうございます.

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr"><a href="https://t.co/gAgvesP3v1">https://t.co/gAgvesP3v1</a><br><br>And there is &quot;Export as&quot; Excel/CSV<br>The data starts at    2013-04-28 00:00:00   UTC</p>&mdash; Игор Петрушевски (@fau_ig) <a href="https://twitter.com/fau_ig/status/936549672348418053?ref_src=twsrc%5Etfw">December 1, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

(open, high, low, close とあり, どれを基準にするかは最初に決めておく必要があります. (high + low)/2 で最高値と最低値の平均か, close を選ぶのがよさそう?)

あとはこれを使って, 仮想通貨が払い出されたときと, そのときの交換レートとで取得したときの時価をまとめれば完成です!

Happy tax returning!

## TODO

* pool fee を考慮する
* 仮想通貨を売買したとき(FIAT へ変換, 他の仮想通貨との交換など)の税務計算も行う. マイニングと売買の取引記録を時間軸でソートし, 移動平均で計算すればよいか.
* 優秀な税務計算自動化若人が, 人類至上最速で仮想通貨マイニングの税計算を極めてくれるスキームを確立する旅に出たい.
* 対 FIAT との時価計算をより正確に行う(プールから払い出されたときの unix time の時点での交換レートを調べられるサービスほしい) 
* Python あたりで書き直して全部自動化し, かつ matplotlib あたりで損益を可視化してれる優秀な若人を探す旅に出たい
* Wallet が日本の仮想通貨取引所だった場合, 仮想通貨取引所が公開している API があればそれを使い交換レート計算を行う.

## 課題

### マイニングプールでの仮想通貨の獲得とはいつか?

Nanopool の場合, XMR(Monero) は払い出しが 1 XMR なので(設定すれば 0.3 XMR まで減らすことは可能), 2017 年 12 月 17 日時点ですと 3.8 万円相当であり, 普通の 4 コア CPU 1 台でマイニングとかですと 1 日 50 ~ 100 円相当なので, 払い出しまで 1 年くらいかかってしまい, なかなか払い出しのステップまで到達しません.

その上, マイニングしないで放置する期間がありますと, たとえば FIAT に対して価値が上昇していき 5 ~ 10 倍とかになりますと, 1 XMR を獲得したときに, 取得価格が本来かけたコストよりも高くなってしまうという問題があります.

また, Nanopool では, 獲得した share のヒストリは取得できますが, その時点のプールでの獲得仮想通貨量はわからない(?)ので推定が難しいです.
(nanopool は share difficulty が static ですと, Variable Share Difficulty なプールだとより難しくなりそう)

また, nanopool では, 払い出しまでは Unconfirmed Balance となり, 支払い量が確定された状況では無いので, nanopool の場合は払い出された段階で仮想通貨を獲得, と理解するのがよいかも?(**国税庁および/または税理士による検証要**. 見解を示していただける税理士を探す旅に出たい)

税務計算を考えますと, とりあえずはより払い出しの間隔が小さいプールや仮想通貨を選ぶのがよさそうです.

### 経費の計上

電気代, CPU/GPU の購入費用を合理的な範囲で鞍分計算 & 経費計上できるスキームを確立したい.
(IoT で電力, CPU/GPU 稼働率の監視とか?)