# Thunder FInance Statistic Code
## For transaction counts
```python=
import asyncio
from pytoncenter import get_client
from pytoncenter.utils import get_opcode
from pytoncenter.v3.models import *
from tonpy import CellSlice
from pytoncenter.extension.message import JettonMessage
import json
"""
EQAYh6Rg1DG2wns5mOZOiOHaWokKeXGItNZk-H976bnv3Nqg
EQAJWjDt-16ycgAhDG3ieHOmut-1KrfLpDqLpx8CDygf_TdE
"""
# targets = ["EQAYh6Rg1DG2wns5mOZOiOHaWokKeXGItNZk-H976bnv3Nqg", "EQAJWjDt-16ycgAhDG3ieHOmut-1KrfLpDqLpx8CDygf_TdE"]
async def fetch(client, target: str):
accounts = set() # unique accounts which are involved in the transactions (from address)
withdraw_cnt = 0 # number of withdraw transactions
deposit_cnt = 0 # number of deposit transactions
claim_cnt = 0 # number of claim transactions
withdraw_and_claim_cnt = 0 # number of withdraw and claim transactions
total_tx = 0 # total number of transactions
offset = 0
while True:
print("fetching transactions from offset", offset)
transactions, _ = await client.get_transactions(GetTransactionsRequest(account=target, sort="asc", limit=128, offset=offset))
if not transactions:
break
offset += len(transactions)
for tx in transactions:
total_tx += 1
if tx.in_msg.message_content is None:
continue
if tx.in_msg.message_content.decoded is not None:
# comment
continue
cs = CellSlice(tx.in_msg.message_content.body)
opcode = get_opcode(cs.preload_uint(32))
if tx.in_msg.source is not None:
accounts.add(tx.in_msg.source)
if opcode == JettonMessage.TransferNotification.OPCODE:
deposit_cnt += 1
if opcode == "0x4212017c": # withdraw and harvest
withdraw_and_claim_cnt += 1
if opcode == "0x097bb407": # withdraw
withdraw_cnt += 1
if opcode == "0x8839dc49": # claim
claim_cnt += 1
return accounts, deposit_cnt, withdraw_cnt, claim_cnt, withdraw_and_claim_cnt, total_tx
def write_json(accounts_cnt, deposit_cnt, withdraw_cnt, claim_cnt, withdraw_and_claim_cnt, total_tx):
# store the statistics to json file
with open(f"statistics.json", "w") as f:
f.write(
json.dumps(
{
"accounts": accounts_cnt,
"total_tx": total_tx,
"deposit_cnt": deposit_cnt,
"withdraw_cnt": withdraw_cnt,
"claim_cnt": claim_cnt,
"withdraw_and_claim_cnt": withdraw_and_claim_cnt,
},
indent=4,
)
)
async def main():
client = get_client(version="v3", network="mainnet")
targets = ["EQAYh6Rg1DG2wns5mOZOiOHaWokKeXGItNZk-H976bnv3Nqg", "EQAJWjDt-16ycgAhDG3ieHOmut-1KrfLpDqLpx8CDygf_TdE"]
accounts = set()
total_deposit_cnt = 0
total_withdraw_cnt = 0
total_claim_cnt = 0
total_withdraw_and_claim_cnt = 0
total_txs = 0
for target in targets:
accounts, deposit, withdraw, claim, withdraw_and_claim, ttx = await fetch(client, target)
accounts.update(accounts)
total_deposit_cnt += deposit
total_withdraw_cnt += withdraw
total_claim_cnt += claim
total_withdraw_and_claim_cnt += withdraw_and_claim
total_txs += ttx
write_json(len(accounts), total_deposit_cnt, total_withdraw_cnt, total_claim_cnt, total_withdraw_and_claim_cnt, total_txs)
if __name__ == "__main__":
asyncio.run(main())
```