-
Notifications
You must be signed in to change notification settings - Fork 7
/
autominer.py
133 lines (115 loc) · 5.01 KB
/
autominer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
##################################################
## General BNB-Miner Web3 Automation Script
##################################################
## Distributed under the MIT License
##################################################
## Author: @robertrittmuller (TW: @rjrittmuller)
##################################################
from tkinter import E
from web3 import Web3
import time, json
import json
import os
import sys
import random
import csv
import datetime
# import project specific modules
import bakedbeans_module
import roastbeef_module
import grinchbucks_module
import solarfarm_module
import bnbminer_module
# Settings
intervalTime = 3600 # time to wait between checks on the reward balance (default is once per day)
api_rate_limit = 5 # good idea to never drop this below 5 or transactions might be blocked
try:
#***************************************************************************
myWalletAddress = "" # Variable for your public wallet address
myPrivateKey = "" # Variable for your wallet's private key
#***************************************************************************
except:
print("Wallet keys not found!")
sys.exit()
# check to make sure we have something that looks like a key pair
if(len(myWalletAddress) == 42):
if(len(myPrivateKey) == 64):
print("Required wallet keys loaded sucessfully!")
else:
print("Public key loaded, no private key found, transactions will be disabled!")
else:
print("ERROR: Wallet keys invalid!")
sys.exit()
# setup connnection(s) to projects
projects = []
projects.append(bakedbeans_module.bakedbeans(myWalletAddress, myPrivateKey))
time.sleep(api_rate_limit) # rate limit for API
projects.append(roastbeef_module.roastbeef(myWalletAddress, myPrivateKey))
time.sleep(api_rate_limit) # rate limit for API
projects.append(grinchbucks_module.grinchbucks(myWalletAddress, myPrivateKey))
time.sleep(api_rate_limit) # rate limit for API
projects.append(solarfarm_module.solarfarm(myWalletAddress, myPrivateKey))
time.sleep(api_rate_limit) # rate limit for API
projects.append(bnbminer_module.bnbminer(myWalletAddress, myPrivateKey))
time.sleep(api_rate_limit) # rate limit for API
print('-' * 100, 'All Contracts Loaded!')
# Setup main loop
while True:
# Loop forever or until the contract runs out of money
i = 0
while i < len(projects):
# define log file for this round
csvLine = []
errorMsg = 'None'
print('Working on', projects[i].projectName)
# Let's pull some contract / wallet data
myPendingReward = projects[i].getCurrentReward()
myTotalMiners = projects[i].getCurrentMiners()
# Important to make sure there actually is still money in the contract otherwise you incur wasted gas charges!
minerBalance = projects[i].getContractBalance()
print('Total Contract Balance (' + str(projects[i].projectCurrency) + ') =', minerBalance)
print('Pending Reward (' + str(projects[i].projectCurrency) + ') =', myPendingReward)
print('Total # of Miners =', myTotalMiners)
action = 'None'
if(minerBalance > 0):
# Now we need to validate some criteria before taking any actions
if(myPendingReward >= projects[i].actionThreshold and projects[i].getWalletBalance() > 0):
# Now check to see what action we should do (withdraw or compound)
print('Current action count =', projects[i].currentActionCount)
if projects[i].currentActionCount >= projects[i].numActions:
# Withdraw rewards
try:
projects[i].withdraw()
action = 'withdraw'
except Exception as e:
errorMsg = 'Withdraw error: ' + str(e)
projects[i].currentActionCount = 0
print('-' * 100, 'Transaction Submitted')
else:
# Compound Rewards
try:
projects[i].compound()
action = 'compound'
except Exception as e:
errorMsg = 'Compound error: ' + str(e)
projects[i].currentActionCount += 1
print('-' * 100, 'Transaction Submitted')
# save status in case we stop the script
projects[i].saveStatus()
print('-' * 100, '*')
# write out the log data
csvLine.append(datetime.datetime.now())
csvLine.append(action)
csvLine.append(minerBalance)
csvLine.append(myPendingReward)
csvLine.append(myTotalMiners)
csvLine.append(errorMsg)
projects[i].logTransaction(csvLine)
csvLine = []
# advance to the next project
i += 1
time.sleep(api_rate_limit) # rate limit for API
# No wait for the specififed time
print()
print('Waiting for', intervalTime, 'seconds.')
time.sleep(intervalTime)