SteemHub: Automated Token Emission


Python3 version 0.0.0.1-beta by Oaldamster

_Forked from Steem Engine Airdrop Tool {seairdrop} by The Marky Mark and Holger80.

  • [x] Use it with a combination of unique config. json and airdrop.dat files.
  • [-] Make it work for 'Issue' and 'Stake', right out of the box.
  • [-] Switch between different servers.
  • [-] Create a GUI, in Kivy for instance. :: https://kivy.org/#download
  • [-] Grab data from Steem blockchain, then create a Transfer list, completely automated.

Command line

python3 gogo.py config.json airdrop.dat

FILES

  • gogo.py
    The main file, will do the actual airdropping
  • config.json
    A JSON preferences file
  • airdrop.dat
    A CSV data file that holds the Steem accounts and the values

File: gogo.py

import csv
import json
import sys
import time

from beem import Steem
from beem.account import Account
from beem.exceptions import AccountDoesNotExistsException
from beem.instance import set_shared_steem_instance

config = {}
user_list = []

def load_config():
global config

if len(sys.argv) == 1:
print("ERROR: Please specify a config file")
quit()

try:
with open(sys.argv[1]) as config_file:
config = json.load(config_file)
except:
print("Unable to open configuration file")
quit()

def load_users():
global user_list

if len(sys.argv) == 2:
print("ERROR: Please specify airdrop file")
quit()

try:
with open(sys.argv[2]) as user_file:
reader = csv.reader(user_file)
user_list = list(reader)
except:
print("Unable to open airdrop file")
quit()

def build_payload(user, amount):
data = {}
data['contractName'] = 'tokens'
data['contractAction'] = config['mode']

data['contractPayload'] = {}
data['contractPayload']['to'] = user
data['contractPayload']['symbol'] = config['token'].upper()
data['contractPayload']['quantity'] = f"{amount}"
data['contractPayload']['memo'] = config['memo']

return data

def send_tokens(stm, user, amount, retries=0):
data = build_payload(user, amount)

if not config['dry_run']:
try:
stm.custom_json('ssc-mainnet1', data,
required_auths=[config['account_name']])
except:
if retries < 3:
send_tokens(stm, user, amount,
else:
print(f"Airdrop aborted at user: {user[0]}")
quit()

def do_airdrop(stm):
estimated_time * config['delay']) / 60, 1)

estimated_tokens
for user in user_list:
estimated_tokens

print("Starting Airdrop")

if config['dry_run']:
print("DRY RUN! - Tokens will not be transfered.")
print(f"Estimated Time: {estimated_time} minutes")
print(f"Estimated Tokens Used: {estimated_tokens}")
print("")

for x in range(10, -1, -1):
print(f"Starting in {x} seconds...",
time.sleep(1)
sys.stdout.flush()

for user in user_list:
try:
Account(user[0])
except AccountDoesNotExistsException:
print(f"Skipping user {user[0]} - Does not exist")
continue

print(f"Sending {user[1]} {config['token']} tokens to @{user[0]}")
if not config['dry_run']:
send_tokens(stm, user[0], user[1])

time.sleep(config['delay'])

def main():
load_config()
load_users()

stm
stm.wallet.unlock(config['ww'])
set_shared_steem_instance(stm)

do_airdrop(stm)

if name 'main':
main()

gogo.py


config.json

{
"account_name" : "yoursteemaccount",
"ww" : "youkeywalletpwd",
"token" : "TKN",
"memo" : "Here's is some ToKeN for you to enjoy!.",
"mode" : "transfer",
"delay" : 10,
"dry_run" : true
}

config.json


airdrop.dat

holger80, 10000
themarkymark, 1000
felixxx, 1000
oaldamster, 1000

airdrop.dat




Python3 and Beem, a powerfull Steem team.
2020-02-06-170119_1366x768_scrot.png
_Screenshot taken at https://www.python.org/downloads/_

Please note that SteemHub is merely an idea. Whomever is able to create it for real: Make it so!


Comments 0