I made a random re-sender...


Grizzled Member
Sep 19, 2014
I've been debating if I should post this or not for a while...

A version exists that interconnects multiple dashd's to send to each other instead of sending to self. Randomly, from a list of IPs... But, I'm super bad at the coding gig, and it has a lot of private network stuff built into it.... So, not posting that. I don't know how to read and parse my own config files yet...
import subprocess
import secrets
import random
import json
import time
def timeconvert(seconds):
    min, sec = divmod(seconds, 60)
    hour, min = divmod(min, 60)
    return "%d:%02d:%02d" % (hour, min, sec)

def rollbooleandice():
    zeroorone = secrets.randbelow(2)
    if zeroorone == 1:
        result = "true"
        return result
        result = "false"
        return result

while True:
    info = json.loads(subprocess.getoutput("~/.dashcore/dash-cli getinfo"))
    psb_intdec = str(info["privatesend_balance"]).split('.')

    if int(psb_intdec[0]) < 1 or int(psb_intdec[1][:3]) < 1:
        date = subprocess.getoutput("date")

        print("PrivateSend Balance: " + psb_intdec[0] + "." + psb_intdec[1][:3])

        longdelay = random.randint((60*60*24), (60*60*48))
        print("Insufficient PrivateSend Balance")
        print("Sleeping for " + str(timeconvert(longdelay)))

        date = subprocess.getoutput("date")

        print("PrivateSend Balance: " + psb_intdec[0] + "." + psb_intdec[1][:3])

        new_intdec = ["", ""]
        new_intdec[0] = secrets.randbelow(int(psb_intdec[0]))
        new_intdec[1] = secrets.randbelow(int(psb_intdec[1][:3]))

        newaddress = subprocess.getoutput("~/.dashcore/dash-cli getnewaddress")
#        print("New Address: " + newaddress)
        newamount = float(str(new_intdec[0]) + "." + str(new_intdec[1]))
#        print("Amount to be sent: " + str(newamount))

        includefeeintx = rollbooleandice()
        sendstr = "~/.dashcore/dash-cli sendtoaddress " + str(newaddress) + " " + str(newamount) + " \"\" \"\" " + includefeeintx  + " false true"
        print("Command used: " + sendstr)

        txid = subprocess.getoutput(sendstr)
        print("TXID: " + txid)

        normaldelay = random.randint((60*60*4), (60*60*16))
        print("Sleeping for " + str(timeconvert(normaldelay)))
Please don't waste time telling me how much I suck at this. I already know...

There are some situations it doesn't handle, but I don't care that much...

I just thought someone might find this useful. It basically makes random sized transactions at random times within a specified range, and even randomizes whether the fee is included in the TX amount or not. It has an extra long delay for when the balance is really small. I'd like to make that number even smaller, but it isn't a critical thing to fix... It requests a new address from the local dashd, as mentioned, the other version can randomly select from a list of listening dashd's... It has a bit of debug/status output... This keeps your dash constantly floating, moving, re-PrivateSending. You'll never get linked to a rich list. It can't be linked to any metadata about you because it runs when you're on a plane, out at sea, etc. and all nodes are behind Tor anyway... I like to use this setup with 1 to 9 other nodes which also randomly turn their dashd's on and off, and even randomly reboot themselves and zapwallettxes... Fun to use in conjunction with the --usehd flag and HD input that matches your Trezor accounts. It stays in motion, stays in your Trezor, and you never have to worry about losing anything to a node storage fail.

With 3+ nodes online at once, yes, you sometimes mix with yourself. And sometimes not. Tor makes sure you stay geographically diverse and there's no way to correlate anything with certainty, or even speculatively... It's a huge mess. Exactly what we want.

It should be noted that running this on Raspberry Pis with only 1gb of RAM is not longer viable. Adding swap only results in gross overuse of the SD card and it will be corrupted in a few days. You need something with more RAM. XU4, Rock64, NanoPi M4/V2... You don't really need more CPU oomph, just more RAM.

I was using this to be an unofficial liquidity provider from back in the day. It's good for staying off rich lists, and other forms of dirty bastards spying on your finances. No one will ever know what you have.

Privacy is a fundamental human right.
Last edited:
  • Like
Reactions: qwizzie