Files
stacks-puppet-node/blockstack_registrar/tools/namespace_diff.py
2017-01-17 11:16:19 -05:00

121 lines
3.0 KiB
Python

# -*- coding: utf-8 -*-
"""
Registrar
~~~~~
:copyright: (c) 2014-2016 by Halfmoon Labs, Inc.
:copyright: (c) 2016 blockstack.org
:license: MIT, see LICENSE for more details.
"""
from pybitcoin import address_to_new_cryptocurrency
from registrar.network import get_blockchain_record
from registrar.network import get_dht_profile
from registrar.network import bs_client
from registrar.config import DEFAULT_NAMESPACE
from registrar.config import IGNORE_USERNAMES
from registrar.db import users, registrations, state_diff
from registrar.utils import get_hash
def insert_state_diff(username, profile, nmc_address):
check_diff = state_diff.find_one({"username": username})
if check_diff is None:
new_entry = {}
new_entry['username'] = username
new_entry['btc_address'] = address_to_new_cryptocurrency(nmc_address, 0)
new_entry['profile'] = profile
new_entry['profile_hash'] = get_hash(profile)
print "inserting in diff: %s" % username
state_diff.insert(new_entry)
else:
print "already in diff: %s" % username
def populate_diff_db():
counter = 0
for new_user in registrations.find():
user_id = new_user['user_id']
user = users.find_one({"_id": user_id})
if user is None:
continue
if not user['username_activated']:
continue
username = user['username']
if username in IGNORE_USERNAMES:
continue
resp = bs_client.lookup(username + "." + DEFAULT_NAMESPACE)
resp = resp[0]
if resp is None:
insert_state_diff(username, user['profile'], str(user['namecoin_address']))
counter += 1
print counter
def cleanup_diff_db():
for entry in state_diff.find():
username = entry['username']
profile = get_dht_profile(username)
if profile is None:
#print "Not registered: %s" % username
continue
dht_profile_hash = get_hash(profile)
check_user = users.find_one({"username": username})
try:
db_profile_hash = get_hash(check_user['profile'])
except:
db_profile_hash = None
print "ERROR: %s not in DB" % username
if dht_profile_hash == db_profile_hash:
print "registered: %s" % username
state_diff.remove({"username": username})
else:
print "profile hash doesn't match: %s" % username
def process_name_updates(list_usernames):
for username in list_usernames:
if check_ownership(username):
user = users.find_one({"username": username})
insert_state_diff(username, user['profile'], str(user['namecoin_address']))
def get_latest_diff():
for user in state_diff.find():
username = user['username']
if username == 'fred':
print user
if __name__ == '__main__':
print check_ownership('fboya')
#cleanup_diff_db()
#get_latest_diff()
#populate_diff_db()