毎晩、0時を過ぎた頃に1日のXCH収入をスプレッドシートに貼り付けるのが日課なのですが、それも面倒になってきたので、自動集計してcsvファイルに追記するスクリプトを作成しました。
参考になれば幸いです
記事作成日:2021年10月13日
必要なもの
- Windows10
- chia blockchain
- python実行環境
Windowsでchia blockchainを動かしているなら、
あとはPython環境を入れるだけです。
(おそらくLinuxやMacでも同じ仕様なので仕組み自体はできるはず)
ソースコード一式
↓githubにアップしましたので、必要に応じてご参照ください。
使い方
- get_chia_income.py を開いて下さい。
- ver_str = ‘1.2.9’ を、自身のChia Blockchainのバージョンに合わせておく。
- address = [
xch1address11111111111111111111111111111111111111111111111111111
・・・・
]
を、全て自身のプール支払先アドレスに変更する。
最後に、chia_wallet_daily.csvを同じフォルダにおいて、以下のコマンドを実行するだけ。
python get_chia_income.py
chia_wallet_daily.csv に、昨日の入金データが1回追記されます。
これを、毎日12時過ぎなど定時に1回、
タスクスケジューラ等で自動実行すれば、自動記帳されていきます。
仕組み
Chia Blockchainのコマンドライン版に、
“wallets get_transactions”というコマンドがあります。
そしてこれに”–no-paginate”オプションを付けると、
直近50件の入出金記録を一斉取得することができます。
chia.exe wallet get_transactions --no-paginate
・実行サンプル
Transaction 5178ca47cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Status: Confirmed Amount: 0.003223548692 xch To address: xch13ekedleexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Created at: 2021-10-04 09:19:07 Transaction 781b3533axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Status: Confirmed Amount: 0.000638780688 xch To address: xch17yxunpswxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Created at: 2021-10-04 13:54:36 <・・・・中略> Transaction 477bb1b9axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Status: Confirmed Amount: 0.001065520104 xch To address: xch17yxunpswxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Created at: 2021-10-13 20:59:40
pythonでこの出力結果を読み込んで、
昨日の日付のものだけ抽出し、支払先アドレス別(プール別)に集計すれば、
毎日1回実行するだけで、「入金記帳」ができるわけです。
注意事項としては、
このコマンドで取得できる履歴は最大が50件なので、
1日に50件を超えるような環境の人にとっては、
スクリプトを変更して1時間毎に対応するなどしないといけません。
pythonからchia.exe実施、結果取得
subprocess.getoutputにてコマンド実行しつつ実行結果を文字列で取得。
# chia.exe コマンド実行、戻り値を取得 result = subprocess.getoutput('%APPDATA%/../Local/chia-blockchain/app-'+ver_str+'/resources/app.asar.unpacked/daemon/chia.exe wallet get_transactions --no-paginate')
なお、バージョンが上がるとパスが変わってしまうため、
ver_str=’1.2.9’を設定しておく必要があるわけです。
昨日のデータの取得
まず、昨日の日付を文字列で取得。
# 昨日の日付算出 td = datetime.timedelta(days=1) yesterday = str((datetime.datetime.now()-td).date())
resultをfor文で1行ずつ読んで、
例えば”2021-10-13″が含まれる文字列の入金データのみを対象とします。
md = re.match(r'^Created at: (.+)( [0-9]{2}:[0-9]{2}:[0-9]{2})$', lines[i+4]) if md.groups()[0] == yesterday:
支払先アドレスごとに集計
さらに、アドレス文字列を比較し、
プール支払先アドレスごとに入金値を集計します。
for inx, addr in enumerate(address): if address[inx]==mw.groups()[0]: xch_count[inx] += float(ma.groups()[0]) # 支払先アドレスごとの入金値集計 xch_total += float(ma.groups()[0]) # 入金値の総計 break
文字列に加工して、csv出力
タブ区切りで文字列を生成します。
copy_str = yesterday copy_str += '\t'+'\t'.join(list(map(str,xch_count))) copy_str += '\t'+str(xch_total)
“2021-10-13 0.0012 0 0.01 0.001234 0 0.12434”
のようにタブ区切りで文字列を生成します。
with open('chia_wallet_daily.csv', 'a') as f: print(copy_str, file=f)
chia_wallet_daily.csvに追記して終了。
さいごに
「不労所得」を目指すなら、
日々のルーチンが最小限の労力で済むようにというわけで、
自動化できるものは自動化しちゃいましょう。
参考になれば幸いでございます。
それではまたー