149 lines
3.7 KiB
Python
149 lines
3.7 KiB
Python
import csv
|
||
import json
|
||
import datetime
|
||
|
||
# 1.NFT总量 (宝箱+赠送)
|
||
# 2.NFT mint数量 (卖出的宝箱+赠送)
|
||
# 3.NFT宝箱已开和未开数量(总数即可)
|
||
# 4.NFT持有人数量排序 (已购的宝箱+赠送)
|
||
|
||
mintTable = []
|
||
nftTable = []
|
||
nftTransferTable = []
|
||
|
||
contracts = lambda : json.load(open('contract.json', 'r'))
|
||
|
||
stat = {
|
||
'nft_total': 0,
|
||
'nft_mint': 0,
|
||
'bindBox': {
|
||
'hold': 0,
|
||
'open': 0
|
||
},
|
||
'nft_rank': [
|
||
]
|
||
}
|
||
|
||
EMPTY_ADDRESS = '0x000000000000000000000000000000000'
|
||
|
||
def exportMintTable():
|
||
rows = []
|
||
with open('mint.raw.csv', 'w', newline='') as f:
|
||
writer = csv.writer(f)
|
||
writer.writerows(rows)
|
||
|
||
def exportNftTable():
|
||
rows = []
|
||
with open('nft.raw.csv', 'w', newline='') as f:
|
||
writer = csv.writer(f)
|
||
writer.writerows(rows)
|
||
|
||
def exportNftTransferTable():
|
||
rows = []
|
||
with open('nft_transfer.raw.csv', 'w', newline='') as f:
|
||
writer = csv.writer(f)
|
||
writer.writerows(rows)
|
||
|
||
def exportNftSumTable():
|
||
rows = []
|
||
for nft in nftTable:
|
||
rows.push(
|
||
(
|
||
nft['token_id'],
|
||
nft['token_type'],
|
||
nft['creator_address'],
|
||
nft['owner_address'],
|
||
nft['tags'],
|
||
datetime.datetime.fromtimestamp(nft['modifytime'])
|
||
)
|
||
)
|
||
with open('nft.sum.csv', 'w', newline='') as f:
|
||
writer = csv.writer(f)
|
||
writer.writerows(rows)
|
||
|
||
def statData():
|
||
for row in nftTransferTable:
|
||
rawData = json.loads(row['raw_data'])
|
||
if rawData['address'].lower() == '0x8444404bD78089A5a6d5Cc57f7Df8924f2DdACB4'.lower() and \
|
||
rawData['event'] == 'Transfer':
|
||
if rawData['returnValues']['from'] == EMPTY_ADDRESS:
|
||
stat['nft_total'] += 1
|
||
if rawData['returnValues']['to'] == EMPTY_ADDRESS:
|
||
stat['bindBox']['open'] += 1
|
||
#end for
|
||
for row in nftTable:
|
||
if row['owner_address'] != EMPTY_ADDRESS:
|
||
stat['nft_total'] += 1
|
||
stat['nft_mint'] += 1
|
||
print(json.dumps(stat))
|
||
|
||
def loadData():
|
||
def rowToObj(row, fields):
|
||
assert(len(row) == len(fields))
|
||
obj = {}
|
||
for idx in range(len(fields)):
|
||
obj[fields[idx]] = row[idx]
|
||
return obj
|
||
def loadCsv(data, fileName, fields):
|
||
with open(fileName, "r", encoding="utf-8") as f:
|
||
reader = csv.reader(f)
|
||
for row in reader:
|
||
data.append(rowToObj(row, fields))
|
||
loadCsv(mintTable, 't_mint.txt', [
|
||
'idx',
|
||
'unikey',
|
||
'account',
|
||
'game_id',
|
||
'ignore',
|
||
'bc_minted',
|
||
'bc_mint_txhash',
|
||
'bc_mint_itemid',
|
||
'bc_mint_tokenid',
|
||
'bc_mint_token_type',
|
||
'bc_mint_tags',
|
||
'bc_mint_count',
|
||
'bc_mint_time',
|
||
'bc_mint_prepare_block_number',
|
||
'bc_mint_success_block_number',
|
||
'bc_mint_confirm_time',
|
||
'suspend',
|
||
'suspend_reason',
|
||
'done',
|
||
'createtime',
|
||
'modifytime'
|
||
])
|
||
loadCsv(nftTable, 't_nft.txt', [
|
||
'idx',
|
||
'owner_address',
|
||
'creator_address',
|
||
'token_id',
|
||
'token_type',
|
||
'token_state',
|
||
'game_id',
|
||
'item_id',
|
||
'deleted',
|
||
'opened',
|
||
'confirm_count',
|
||
'confirm_block_number',
|
||
'rand_attr',
|
||
'tags',
|
||
'createtime',
|
||
'modifytime'
|
||
])
|
||
loadCsv(nftTable, 't_nft_transfer.txt', [
|
||
'idx',
|
||
'token_id',
|
||
'txhash',
|
||
'block_number',
|
||
'log_index',
|
||
'_from',
|
||
'_to',
|
||
'raw_data',
|
||
'owner_confirmed',
|
||
'createtime',
|
||
'modifytime'
|
||
])
|
||
|
||
loadData()
|
||
statData()
|