· 4 years ago · Aug 02, 2021, 12:18 PM
1#!/usr/bin/env python
2
3# pip install web3
4#
5
6import os
7import sys
8import json
9import requests
10import logging
11from web3 import Web3
12
13BSC_RPC = "https://bsc-dataseed.binance.org"
14BSCSCAN_API = "https://api.bscscan.com"
15
16BSCSCAN_API_KEY = os.getenv("BSCSCAN_API_KEY", "YOUR API KEY")
17MASTERCHEF_CONTRACT = "0xA3fDF7F376F4BFD38D7C4A5cf8AAb4dE68792fd4"
18
19def get_contract(w3, address):
20 url = f"{BSCSCAN_API}/api?module=contract&action=getabi&address={address}&apikey={BSCSCAN_API_KEY}"
21 logging.debug("Retrieving contract ABI")
22 r = requests.get(url)
23 if not r.ok is True:
24 logging.error("Contract ABI retrieving failed")
25 return None
26 abi = json.loads(r.json()["result"])
27 contract = w3.eth.contract(address=address, abi=abi)
28 return contract
29
30
31def check_emergency_withdraw(w3, contract, txid) -> int:
32 total = 0
33 receipt = w3.eth.getTransactionReceipt(txid)
34 if receipt.status != 1:
35 logging.info(f"{txid} status is {receipt.status}")
36 return False
37 try:
38 for ll in contract.events.EmergencyWithdraw().processReceipt(receipt):
39 amount = ll['args']['amount']
40 logging.debug(f"Amount: {amount}")
41 total += amount
42 return total
43 except:
44 e = sys.exc_info()[0]
45 logging.error(f"{e}")
46
47if __name__ == "__main__":
48 w3 = Web3(Web3.HTTPProvider(BSC_RPC))
49 contract = get_contract(w3, MASTERCHEF_CONTRACT)
50 if contract is not None:
51 received = check_emergency_withdraw(w3=w3, contract=contract, txid=sys.argv[1])
52 print(received)
53