payment/payment_backend/api/tronscan.py

412 lines
17 KiB
Python
Raw Normal View History

import requests
from custom_decorators import singleton
from utils.tronscan import convert_to_tronscan_timestamp
trc20token_info = {
"usdt": {"tokenId": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"tokenAbbr": "USDT",
"tokenName": "Tether USD",
"tokenLogo": "https://static.tronscan.org/production/logo/usdtlogo.png",
"issuerAddr": "THPvaUhoh2Qn2y9THCZML3H815hhFhn5YC",
"vip": True}
}
@singleton
class Tronscan:
def __init__(self, api_key):
self.api_key = api_key
def accountv2(self, address):
"""
Get account detail information
:param address: Account address
:return: Returns the detail information of an account.
"""
response = requests.get(f"https://apilist.tronscanapi.com/api/accountv2?address={address}",
headers={'TRON-PRO-API-KEY': self.api_key})
return response.json()
def transactions(self, start=0, limit=10, start_timestamp=None, end_timestamp=None,
from_address=None, to_address=None, tokens=None, block=None,
type_=None, method=None):
"""
Get a list of transactions.
:param start: Start number. Default 0
:param limit: Number of items per page. Default 10
:param start_timestamp: Start time
:param end_timestamp: End time
:param from_address: Sender's address.
:param to_address: Recipient's address.
:param tokens: Tokens involved
:param block: Block
:param type_: Transaction type
:param method: Method called in a smart contract signature. Only one value can be specified each time.
:return: Getx a list of transactions.
"""
params = {
"sort": "-timestamp",
"count": "true",
"start": start,
"limit": limit,
}
if start_timestamp is not None:
params["start_timestamp"] = convert_to_tronscan_timestamp(start_timestamp)
if end_timestamp is not None:
params["end_timestamp"] = convert_to_tronscan_timestamp(end_timestamp)
if from_address is not None:
params["fromAddress"] = from_address
if to_address is not None:
params["toAddress"] = to_address
if tokens is not None:
params["tokens"] = tokens
if block is not None:
params["block"] = block
if type_ is not None:
params["type"] = type_
if method is not None:
params["method"] = method
response = requests.get(
"https://apilist.tronscanapi.com/api/transaction",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params
)
return response.json()
def transaction_info(self, hash_):
"""
Get transaction detail information by transaction hash.
:param hash_: Transaction hash
:return: Get transaction information.
"""
params = {
"hash": hash_,
}
response = requests.get(
"https://apilist.tronscanapi.com/api/transaction-info",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params
)
return response.json()
def token_trc20_transfers(self, start=None, limit=None, contract_address=None,
start_timestamp=None, end_timestamp=None, confirm=True,
related_address=None, from_address=None, to_address=None):
"""
Get the transfer list of TRC20 and TRC721 tokens.
:param start: Start number. Default 0
:param limit: Number of items per page. Default 10
:param contract_address: Contract address
:param start_timestamp: Start time
:param end_timestamp: End time
:param confirm: Whether to return confirmed transfers only. Default: True
:param related_address: Account address
:param from_address: Sender's address
:param to_address: Recipient's address
:return: Get the transfer list of TRC20 and TRC721 tokens.
"""
params = {
"filterTokenValue": 1
}
if start is not None:
params["start"] = start
if limit is not None:
params["limit"] = limit
if contract_address is not None:
params["contract_address"] = contract_address
if start_timestamp is not None:
params["start_timestamp"] = convert_to_tronscan_timestamp(start_timestamp)
if end_timestamp is not None:
params["end_timestamp"] = convert_to_tronscan_timestamp(end_timestamp)
if confirm is not None:
params["confirm"] = str(confirm).lower()
if related_address is not None:
params["relatedAddress"] = related_address
if from_address is not None:
params["fromAddress"] = from_address
if to_address is not None:
params["toAddress"] = to_address
response = requests.get(
"https://apilist.tronscanapi.com/api/token_trc20/transfers",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params
)
return response.json()
def transfer(self, sort="-timestamp", start=0, limit=10, count="true",
address=None, from_address=None, to_address=None, tokens=None, block=None):
"""
Get account's transfer list.
:param sort: Sort type
:param start: Start index, default is 0
:param limit: Number of transfers per page
:param count: Whether to return total transfer number.
:param address: Address, like contract address
:param from_address: Sender's address
:param to_address: Recipient's address
:param tokens: Specific tokens
:param block: Block number
:return: Get account's transfer list.
"""
params = {
"sort": sort,
"start": start,
"limit": limit,
"count": count,
"filterTokenValue": 1
}
if address is not None:
params["address"] = address
if from_address is not None:
params["fromAddress"] = from_address
if to_address is not None:
params["toAddress"] = to_address
if tokens is not None:
params["tokens"] = tokens
if block is not None:
params["block"] = block
response = requests.get(
"https://apilist.tronscanapi.com/api/transfer",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params
)
return response.json()
def internal_transactions(self, start=0, limit=10, address=None, contract=None, block=None):
"""
Get internal transaction list for a specific address or block.
:param start: Start index, default is 0
:param limit: Number of transfers per page
:param address: Specific address. At least one of address, block, or contract must be specified
:param contract: Sender's address
:param block: Block number
:return: Get the internal transaction list.
"""
params = {
"start": start,
"limit": limit
}
if address is not None:
params["address"] = address
if contract is not None:
params["contract"] = contract
if block is not None:
params["block"] = block
response = requests.get(
"https://apilist.tronscanapi.com/api/internal-transaction",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params
)
return response.json()
def token_trc20_transfers_with_status(self, start=0, limit=10, trc20Id=None, address=None,
direction=0, db_version=0, reverse="false"):
"""
Get account's transaction data.
:param start: Start index, default is 0
:param limit: Number of transfers per page
:param trc20Id: TRC20 token address
:param address: Account address
:param direction: 0 for all, 1 for transfer-out, 2 for transfer-in
:param db_version: Whether to include approval transfers. 1 for include, 0 for exclude
:param reverse: Sort by creation time. Valid values: "true" or "false"
:return: Get account's transaction data.
"""
params = {
"start": start,
"limit": limit,
"direction": direction,
"db_version": db_version,
"reverse": reverse
}
if trc20Id is not None:
params["trc20Id"] = trc20Id
if address is not None:
params["address"] = address
response = requests.get(
"https://apilist.tronscanapi.com/api/token_trc20/transfers-with-status",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params
)
return response.json()
def search(self, term, type="token", start=0, limit=10):
"""
Search token/contract/account information
Note : The maximum value for limit is 50.
:param term: Search term
:param type: Search type, including "token", "address", "contract", "transaction" and "block"
:param start: Start number. Default: 0
:param limit: Number of items per page. Default: 10
:return: Returns account authorization change records.
"""
params = {
"term": term,
"type": type,
"start": start,
"limit": limit,
}
response = requests.get("https://apilist.tronscanapi.com/api/search/v2",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params)
return response.json()
def approve_change(self, contract_address, from_address, to_address, start=0, limit=20, show=3):
"""
Returns account authorization change records.
:param contract_address: Contract address
:param from_address: Originator address
:param to_address: Recipient address
:param start: Start number. Default: 0
:param limit: Number of items per page. Default: 20
:param show: Token type. 1: TRC20 2: TRC721 3: ALL(default) 4: TRC1155
:return:
"""
params = {
"contract_address": contract_address,
"from_address": from_address,
"to_address": to_address,
"start": start,
"limit": limit,
"show": show,
"type": "approve",
}
response = requests.get("https://apilist.tronscanapi.com/api/account/approve/change",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params)
return response.json()
def transfer_trx(self, address, start_timestamp=None, end_timestamp=None, start=0, limit=20, direction=1,
db_version=0,
reverse=True, fee=False):
"""
Get the list of trx transfers related to a specific address
Note : The value sum of start and limit must be less than or equal to 10000.
:param address: Query address
:param start_timestamp: Start timestamp
:param end_timestamp: End timestamp
:param start: Start number. Default: 0
:param limit: Number of items per page. Default: 20
:param direction: Default: 1. 1 represents inbound transfers, 2 represents outbound transfers, and 0 represents both.
:param db_version: Default: 0, which indicates to filter transfers with invalid to or from addresses out.
:param reverse: Sort the data in a descending order. Default: true
:param fee: Whether to return data of TRX burning for resource consumption. Default: false
:return: Returns the list of TRX transfers for a specific address.
"""
params = {
"address": address,
"start": start,
"limit": limit,
"direction": direction,
"db_version": db_version,
"reverse": reverse,
"fee": fee,
}
if start_timestamp is not None:
params["start_timestamp"] = convert_to_tronscan_timestamp(start_timestamp)
if end_timestamp is not None:
params["end_timestamp"] = convert_to_tronscan_timestamp(end_timestamp)
response = requests.get("https://apilist.tronscanapi.com/api/transfer/trx",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params)
return response.json()
def transfer_token10(self, address, trc10Id, start_timestamp=None, end_timestamp=None, start=0, limit=20,
direction=1, db_version=0, reverse=True):
"""
Get the transfer list of a specific TRC10 token for a certain address
Note : The value sum of start and limit must be less than or equal to 10000.
:param address: Query address
:param trc10Id: TRC10 token ID
:param start_timestamp: Start timestamp
:param end_timestamp: End timestamp
:param start: Start number. Default: 0
:param limit: Number of items per page. Default: 20
:param direction: Default: 1. 1 represents inbound transfers, 2 represents outbound transfers, and 0 represents both.
:param db_version: Default: 0, which indicates to filter transfers with invalid to or from addresses out.
:param reverse: Sort the data in a descending order. Default: true
:return: Returns the transfer list of a TRC10 token for a specific account.
"""
params = {
"address": address,
"trc10Id": trc10Id,
"start": start,
"limit": limit,
"direction": direction,
"db_version": db_version,
"reverse": reverse,
}
if start_timestamp is not None:
params["start_timestamp"] = convert_to_tronscan_timestamp(start_timestamp)
if end_timestamp is not None:
params["end_timestamp"] = convert_to_tronscan_timestamp(end_timestamp)
response = requests.get("https://apilist.tronscanapi.com/api/transfer/token10",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params)
return response.json()
def transfer_trc20(self, address, trc20Id, start_timestamp=None, end_timestamp=None, start=0, limit=20,
direction=1, db_version=0, reverse=True):
"""
Get the transfer list of a specific TRC20 token for a certain address
Note : The value sum of start and limit must be less than or equal to 10000.
:param address: Query address
:param trc20Id: TRC20 token ID
:param start_timestamp: Start timestamp
:param end_timestamp: End timestamp
:param start: Start number. Default: 0
:param limit: Number of items per page. Default: 20
:param direction: Default: 1. 1 represents inbound transfers, 2 represents outbound transfers, and 0 represents both.
:param db_version: Default: 0, which indicates to filter transfers with invalid to or from addresses out.
:param reverse: Sort the data in a descending order. Default: true
:return: Returns the transfer list of a TRC20 token for a specific account.
"""
params = {
"address": address,
"trc20Id": trc20Id,
"start": start,
"limit": limit,
"direction": direction,
"db_version": db_version,
"reverse": reverse,
}
if start_timestamp is not None:
params["start_timestamp"] = convert_to_tronscan_timestamp(start_timestamp)
if end_timestamp is not None:
params["end_timestamp"] = convert_to_tronscan_timestamp(end_timestamp)
response = requests.get("https://apilist.tronscanapi.com/api/transfer/trc20",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params)
return response.json()
def account_wallet(self, address, asset_type=0):
"""
Get the information of tokens held and followed in the account's web wallet
:param address: Query address
:param asset_type: Asset types: 0 - All (default); 1 - Assets (TRX, TRC10, TRC20); 2 - Collectibles (TRC721 and TRC1155)
:return: Returns a list of tokens held and followed by an account.
"""
params = {
"address": address,
"asset_type": asset_type,
}
response = requests.get("https://apilist.tronscanapi.com/api/account/wallet",
headers={'TRON-PRO-API-KEY': self.api_key},
params=params)
return response.json()
if __name__ == '__main__':
address = "TB592A5QwHvvcJoCmvALmzT3S9Pux91Gub"
tronscan = Tronscan(api_key='cc87d361-7cd6-4f69-a57b-f0a77a213355')
print(tronscan.transfer_trc20(address, trc20token_info["usdt"]["tokenId"]))