Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from web3 import Web3
- from web3 import Account
- Account.enable_unaudited_hdwallet_features()
- ERC20_RPC = 'https://ethereum-rpc.publicnode.com'
- OPTIMISM_RPC = 'https://optimism-rpc.publicnode.com'
- ARBITRUM_RPC = 'https://arbitrum-one.publicnode.com'
- ZKSYNC_RPC = 'https://mainnet.era.zksync.io'
- LINEA_RPC = 'https://rpc.linea.build'
- BASE_RPC = 'https://base-rpc.publicnode.com'
- TOKEN_ABI = '[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_upgradedAddress","type":"address"}],"name":"deprecate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"deprecated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_evilUser","type":"address"}],"name":"addBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradedAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_maker","type":"address"}],"name":"getBlackListStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newBasisPoints","type":"uint256"},{"name":"newMaxFee","type":"uint256"}],"name":"setParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"issue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"basisPointsRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBlackListed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_UINT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_blackListedUser","type":"address"}],"name":"destroyBlackFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_initialSupply","type":"uint256"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Issue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAddress","type":"address"}],"name":"Deprecate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"feeBasisPoints","type":"uint256"},{"indexed":false,"name":"maxFee","type":"uint256"}],"name":"Params","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_blackListedUser","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"AddedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"RemovedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]'
- def create_object(wallet):
- network = wallet['network']
- if network == 'ERC20':
- return Erc20Account(wallet['seed'], wallet['address'], wallet['drain_address'], wallet['tokens'])
- elif network == 'Optimism':
- return OptimismAccount(wallet['seed'], wallet['address'], wallet['drain_address'], wallet['tokens'])
- elif network == 'Arbitrum One':
- return ArbitrumAccount(wallet['seed'], wallet['address'], wallet['drain_address'], wallet['tokens'])
- elif network == 'ZkSync':
- return ZkSyncAccount(wallet['seed'], wallet['address'], wallet['drain_address'], wallet['tokens'])
- elif network == 'Linea':
- return LineaAccount(wallet['seed'], wallet['address'], wallet['drain_address'], wallet['tokens'])
- elif network == 'Base':
- return BaseAccount(wallet['seed'], wallet['address'], wallet['drain_address'], wallet['tokens'])
- else:
- raise Exception(f'У кошелька {wallet["address"]} указана неверная сеть')
- class Account:
- rpc = None
- usdt_contract = None
- usdc_contract = None
- def __init__(self, seed, address, drain_address, watch_tokens):
- self.address = address
- self.drain_address = drain_address
- self.w3 = Web3(Web3.HTTPProvider(self.rpc))
- self.private_key = self.w3.eth.account.from_mnemonic(seed).key.hex()
- self.usdt = self.w3.eth.contract(address=self.usdt_contract, abi=TOKEN_ABI) if self.usdt_contract else None
- self.usdc = self.w3.eth.contract(address=self.usdc_contract, abi=TOKEN_ABI) if self.usdc_contract else None
- self.watch_tokens = watch_tokens
- self.snapshot = {
- 'eth': self.eth_balance,
- 'usdt': self.usdt_balance,
- 'usdc': self.usdc_balance
- }
- def drain(self):
- if self.usdt and self.usdt_balance > 0.01:
- usdt_balance = int(self.usdt_balance * 10 ** 6)
- tx = self.usdt.functions.transfer(self.drain_address, usdt_balance).build_transaction({
- 'from': self.address,
- 'gasPrice': self.w3.eth.gas_price,
- 'nonce': self.w3.eth.get_transaction_count(self.address)
- })
- signed_tx = self.w3.eth.account.sign_transaction(tx, self.private_key)
- self.w3.eth.send_raw_transaction(signed_tx.raw_transaction)
- if self.usdc and self.usdc_balance > 0.01:
- usdc_balance = int(self.usdc_balance * 10 ** 6)
- tx = self.usdc.functions.transfer(self.drain_address, usdc_balance).build_transaction({
- 'from': self.address,
- 'gasPrice': self.w3.eth.gas_price,
- 'nonce': self.w3.eth.get_transaction_count(self.address)
- })
- signed_tx = self.w3.eth.account.sign_transaction(tx, self.private_key)
- self.w3.eth.send_raw_transaction(signed_tx.raw_transaction)
- if self.eth_balance > 0.00001:
- eth_balance = self.w3.to_wei(self.eth_balance, 'ether')
- gas_estimate = self.w3.eth.estimate_gas({'to': self.drain_address, 'value': eth_balance})
- gas_price = self.w3.eth.gas_price
- gas_cost = gas_estimate * gas_price
- amount_to_send = eth_balance - gas_cost
- tx = {
- 'to': self.drain_address,
- 'value': amount_to_send,
- 'gas': gas_estimate,
- 'gasPrice': gas_price,
- 'nonce': self.w3.eth.get_transaction_count(self.address)
- }
- signed_tx = self.w3.eth.account.sign_transaction(tx, self.private_key)
- self.w3.eth.send_raw_transaction(signed_tx.raw_transaction)
- @property
- def eth_balance(self):
- balance = self.w3.eth.get_balance(self.w3.to_checksum_address(self.address))
- return float(self.w3.from_wei(balance, 'ether'))
- @property
- def usdt_balance(self):
- if self.usdt:
- balance = self.usdt.functions.balanceOf(self.address).call()
- return balance / 10 ** 6
- else:
- return 0
- @property
- def usdc_balance(self):
- if self.usdc:
- balance = self.usdc.functions.balanceOf(self.address).call()
- return balance / 10 ** 6
- else:
- return 0
- def check(self):
- if self.eth_balance < self.snapshot['eth'] or self.usdt_balance < self.snapshot['usdt'] or self.usdc_balance < self.snapshot['usdc']:
- return False
- return True
- class Erc20Account(Account):
- rpc = ERC20_RPC
- usdt_contract = '0xdAC17F958D2ee523a2206206994597C13D831ec7'
- usdc_contract = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
- class OptimismAccount(Account):
- rpc = OPTIMISM_RPC
- usdt_contract = '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58'
- usdc_contract = '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'
- class ArbitrumAccount(Account):
- rpc = ARBITRUM_RPC
- usdt_contract = '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'
- usdc_contract = '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'
- class ZkSyncAccount(Account):
- rpc = ZKSYNC_RPC
- usdt_contract = '0x493257fD37EDB34451f62EDf8D2a0C418852bA4C'
- usdc_contract = '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4'
- class LineaAccount(Account):
- rpc = LINEA_RPC
- usdt_contract = '0xA219439258ca9da29E9Cc4cE5596924745e12B93'
- usdc_contract = '0x176211869cA2b568f2A7D4EE941E073a821EE1ff'
- class BaseAccount(Account):
- rpc = BASE_RPC
- usdc_contract = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement