Timezone/country doesn't matter
Oh it does
it allows us to go to a block explorer and skim it for addresses inside transactions made between midnight (wherever your TZ is) and date of the OP so we can check the results against a list of addresses instead of making an expensive network call. This assumes you made the transaction today though, where "today" begins at midnight, your timzeone.
But if you don't tell us we can always assume it was made in Hawaii timezone (UTC-10) which isn't going to add too many extra addresses if we use its midnight as the starting point.
A few gems I'll post here; they are the basis for a client-server implementation I'm writing that'll let everyone share the load on their systems:
Server:
!/usr/bin/env python
# Python Network Programming Cookbook,
Second Edition -- Chapter - 1
# This program is optimized for Python 2.7.12
and Python 3.5.2.
# It may run on any other version with/without
modifications.
import socket
import sys
import argparse
host = 'localhost'
data_payload = 2048
def echo_server(port):
""" A simple echo server """
# Create a UDP socket
sock = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)
# Bind the socket to the port
server_address = (host, port)
print ("Starting up echo server
on %s port %s" % server_address)
sock.bind(server_address)
while True:
print ("Waiting to receive message
from client")
data, address = sock.
recvfrom(data_payload)
print ("received %s bytes
from %s" % (len(data), address))
print ("Data: %s" %data)
if data == "PROOFOFWORK":
pass
# validates via block explorer
elif data == "GETWORK":
# generate work and send it to client
else:
# unrecognized command
if proof_of_work == true:
message = "MATCH {} {} {}".format(address, pubkey, prvkey)
# send this to all clients:
for address in addressess:
sent = sock.sendto(message, address)
else:
# Normally this would be whether the work is
# the correct address or not but here we just
# insert a dummy
message = "NOTMATCH {} {} {}" .format(address, pubkey, prvkey);
sent = sock.sendto(data, address)
if __name__ == '__main__':
parser = argparse.ArgumentParser
(description='Seedshifter Cracker Server')
parser.add_argument('--port', action="store", dest="port", type=int, required=True)
given_args = parser.parse_args()
port = given_args.port
echo_server(port)
Client:
#!/usr/bin/env python
# Python Network Programming Cookbook, Second Edition -- Chapter - 1
# This program is optimized for Python 2.7.12 and Python 3.5.2.
# It may run on any other version with/without modifications.
import socket
import sys
import argparse
host = 'localhost'
data_payload = 2048
def echo_client(port):
""" A simple echo client """
# Create a UDP socket
sock = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)
server_address = (host, port)
while true:
try:
# Send data
message = "GETWORK"
sent = sock.sendto(message.encode
('utf-8'), server_address)
# Receive response
message, server = sock.recvfrom(data_payload)
# get head of message
if message == "WORK"
# perform work on GPU
elif message == "FOUND"
# record private key, public key and address and break
break
else:
# ignore all unrecognized commands
except Exception as e:
break
print ("Closing connection to the server")
sock.close()
if __name__ == '__main__':
parser = argparse.ArgumentParser
(description='Seedshifter Cracker Client')
parser.add_argument('--port', action="store", dest="port", type=int, required=True)
given_args = parser.parse_args()
port = given_args.port
echo_client(port)
It won't run as is though because this is just a skeleton I found in a book and slightly adapted to act as a PoW server, similar to the stratum servers used in mining.
EDIT:
I just tried querying Blockchair's API, it limits me to 10 records per call, ironically I went to buy an API key but their only payment processor is PayPal (!) I mean, not even CC, much less crypto.
So this means unless someone already has an API key it is technically infeasible to gather a large number of addresses.
I think this highlights one of the big problems with the current state of APIs, namely, there is no easy way to [pay to] query them in bulk, if you can even query them at all - and Blockchair is pretty much the only one with this feature (blockchain.info has a very very limited set of endpoints).