Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
calculate your masternode queue position
import io
import os
from bitcoinrpc.authproxy import AuthServiceProxy
def ParseConfig(fileBuffer):
assert type(fileBuffer) is type(b'')
f = io.StringIO(fileBuffer.decode('ascii', errors='ignore'), newline=None)
result = {}
for line in f:
assert type(line) is type(b''.decode())
stripped = line.strip()
if stripped.startswith('#'):
continue
if stripped == '':
continue
parts = stripped.split('=')
assert len(parts) == 2
parts[0] = parts[0].strip()
parts[1] = parts[1].strip()
result[parts[0]] = parts[1]
return result
# fix lib pathing - cwd only for now
def Connect():
home = os.path.expanduser("~")
with open(os.path.join(home,'.dashcore','dash.conf'), mode='rb') as f:
configFileBuffer = f.read()
config = ParseConfig(configFileBuffer)
protocol = 'http'
if 'rpcssl' in config and bool(config['rpcssl']) and int(config['rpcssl']) > 0:
protocol = 'https'
serverURL = protocol + '://' + config['rpcuser'] + ':' + config['rpcpassword'] + \
'@127.0.0.1:' + str(config['rpcport'])
return AuthServiceProxy(serverURL)
def getrpc():
return Connect()
#!/usr/bin/env python
import json
import subprocess
import sys
import time
import datetime
sys.path.insert(0, '.')
import dashrpc
rpc = dashrpc.getrpc()
mns = rpc.masternodelist('full')
now = int(datetime.datetime.utcnow().strftime("%s"))
mn_queue=[]
for line in mns:
mnstat = mns[line].split()
if mnstat[0] == 'ENABLED':
# if last paid time == 0
if int(mnstat[5]) == 0:
# use active seconds
mnstat.append(int(mnstat[4]))
else:
# now minus last paid
delta = now - int(mnstat[5])
# if > active seconds, use active seconds
if delta >= int(mnstat[4]):
mnstat.append(int(mnstat[4]))
# use active seconds
else:
mnstat.append(delta)
mn_queue.append(mnstat)
mn_queue = sorted(mn_queue, key=lambda x: x[8])
for line in mn_queue:
print line
#!/bin/bash
MNLISTCMD="dash-cli masternodelist full 2>/dev/null"
MNADDR=$1
if [ -z $MNADDR ]; then
echo "usage: $0 <masternode address>"
exit -1
fi
function _cache_command(){
# cache life in minutes
AGE=2
FILE=$1
AGE=$2
CMD=$3
OLD=0
CONTENTS=""
if [ -e $FILE ]; then
OLD=$(find $FILE -mmin +$AGE -ls | wc -l)
CONTENTS=$(cat $FILE);
fi
if [ -z "$CONTENTS" ] || [ "$OLD" -gt 0 ]; then
echo "REBUILD"
CONTENTS=$(eval $CMD)
echo "$CONTENTS" > $FILE
fi
echo "$CONTENTS"
}
MN_LIST=$(_cache_command /tmp/cached_mnlistfull 2 "$MNLISTCMD")
SORTED_MN_LIST=$(echo "$MN_LIST" | grep -w ENABLED | sed -e 's/[}|{]//' -e 's/"//g' -e 's/,//g' | grep -v ^$ | \
awk ' \
{
if ($7 == 0) {
TIME = $6
print $_ " " TIME
}
else {
xxx = ("'$NOW'" - $7)
if ( xxx >= $6) {
TIME = $6
}
else {
TIME = xxx
}
print $_ " " TIME
}
}' | sort -k10 -n)
MN_VISIBLE=$(echo "$SORTED_MN_LIST" | grep $MNADDR | wc -l)
MN_QUEUE_LENGTH=$(echo "$SORTED_MN_LIST" | wc -l)
MN_QUEUE_POSITION=$(echo "$SORTED_MN_LIST" | grep -A9999999 $MNADDR | wc -l)
MN_QUEUE_IN_SELECTION=$(( $MN_QUEUE_POSITION <= $(( $MN_QUEUE_LENGTH / 10 )) ))
echo "masternode $MNADDR"
if [ $MN_VISIBLE -gt 0 ]; then
echo " -> queue position $MN_QUEUE_POSITION/$MN_QUEUE_LENGTH"
if [ $MN_QUEUE_IN_SELECTION -gt 0 ]; then
echo " -> SELECTION PENDING"
fi
else
echo "is not in masternode list"
fi
@moocowmoo

This comment has been minimized.

Copy link
Owner Author

@moocowmoo moocowmoo commented Feb 2, 2017

thanks go to @chaeplin for the awk preprocessing!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment