import itertools
import os
import random
-import sqlite3
import struct
import sys
import time
import bitcoin.p2p as bitcoin_p2p, bitcoin.getwork as bitcoin_getwork, bitcoin.data as bitcoin_data
from bitcoin import worker_interface
-from util import db, expiring_dict, jsonrpc, variable, deferral, math
+from util import expiring_dict, jsonrpc, variable, deferral, math
from . import p2p, skiplists, networks
import p2pool, p2pool.data as p2pool_data
defer.returnValue(bitcoin_data.pubkey_to_script2(pubkey))
@defer.inlineCallbacks
-def main(args, net):
+def main(args, net, datadir_path):
try:
print 'p2pool (version %s)' % (p2pool.__version__,)
print
tracker = p2pool_data.OkayTracker(net)
shared_share_hashes = set()
- ss = p2pool_data.ShareStore(os.path.join(os.path.dirname(sys.argv[0]), net.NAME + '_shares.'), net)
+ ss = p2pool_data.ShareStore(os.path.join(datadir_path, 'shares.'), net)
known_verified = set()
print "Loading shares..."
for i, (mode, contents) in enumerate(ss.get_shares()):
if net.NAME == 'litecoin':
nodes.add(((yield reactor.resolve('liteco.in')), net.P2P_PORT))
+ addrs = {}
+ try:
+ addrs = dict(eval(x) for x in open(os.path.join(datadir_path, 'addrs.txt')))
+ except:
+ print "error reading addrs"
+
+ def save_addrs():
+ open(os.path.join(datadir_path, 'addrs.txt'), 'w').writelines(repr(x) + '\n' for x in addrs.iteritems())
+ task.LoopingCall(save_addrs).start(60)
+
p2p_node = p2p.Node(
current_work=current_work,
port=args.p2pool_port,
net=net,
- addr_store=db.SQLiteDict(sqlite3.connect(os.path.join(os.path.dirname(sys.argv[0]), 'addrs.dat'), isolation_level=None), net.NAME),
+ addr_store=addrs,
preferred_addrs=set(map(parse, args.p2pool_nodes)) | nodes,
)
p2p_node.handle_shares = p2p_shares
net = networks.nets[args.net_name + ('_testnet' if args.testnet else '')]
+ datadir_path = os.path.join(os.path.dirname(sys.argv[0]), 'data', net.NAME)
+ if not os.path.exists(datadir_path):
+ os.makedirs(datadir_path)
+
if args.logfile is None:
- args.logfile = os.path.join(os.path.dirname(sys.argv[0]), net.NAME + '.log')
+ args.logfile = os.path.join(datadir_path, 'log')
class LogFile(object):
def __init__(self, filename):
if (args.merged_url is None) ^ (args.merged_userpass is None):
parser.error('must specify --merged-url and --merged-userpass')
- reactor.callWhenRunning(main, args, net)
+ reactor.callWhenRunning(main, args, net, datadir_path)
reactor.run()