From 13997eafc10e7e83b08eaae8c79e9a1235328f02 Mon Sep 17 00:00:00 2001 From: D4708 Date: Sat, 26 Jun 2021 12:32:44 +0300 Subject: [PATCH] initial commit --- follower.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/follower.py b/follower.py index 8b13789..ca46cc6 100644 --- a/follower.py +++ b/follower.py @@ -1 +1,56 @@ +#!/usr/bin/python +# +# Auto-following/reading bot written in Python 2 that has a mission to safe distributed data shared in the twister network +# (https://github.com/twisterarmy/twister-data-guard) +# This script based on the official usernameCrawler +# (https://github.com/miguelfreitas/twister-core/blob/master/contrib/usernameCrawler.py) +# +# Downloaded data is cached in a python pickle file, so it may be executed +# again and it won't need to get everything all over again (you may run it +# from cron scripts, for example) +import sys, cPickle + +dbFileName = "twisterDataGuard.pickle" +nodeUserName = "twisterdataguard" + +try: + from bitcoinrpc.authproxy import AuthServiceProxy +except ImportError as exc: + sys.stderr.write("Error: install python-bitcoinrpc (https://github.com/jgarzik/python-bitcoinrpc)\n") + exit(-1) + +serverUrl = "http://user:pwd@127.0.0.1:28332" +if len(sys.argv) > 1: + serverUrl = sys.argv[1] + +twister = AuthServiceProxy(serverUrl) + +class MyDb: + lastBlockHash = 0 + +try: + db = cPickle.load(open(dbFileName)) + nextHash = db.lastBlockHash +except: + db = MyDb() + nextHash = twister.getblockhash(0) + +print "blockchain reading..." + +while True: + block = twister.getblock(nextHash) + db.lastBlockHash = block["hash"] + print "block", str(block["height"]) + "\r", + usernames = block["usernames"] + for u in usernames: + print "follow", u + twister.follow(nodeUserName, [u]) + if block.has_key("nextblockhash"): + nextHash = block["nextblockhash"] + else: + break + +cPickle.dump(db,open(dbFileName, "w")) + +print "task completed."