+import os
+import platform
+
from twisted.internet import defer
from . import data
+from p2pool.util import math, pack
-
-class BitcoinMainnet(object):
- BITCOIN_P2P_PREFIX = 'f9beb4d9'.decode('hex')
- BITCOIN_P2P_PORT = 8333
- BITCOIN_ADDRESS_VERSION = 0
- BITCOIN_RPC_PORT = 8332
- BITCOIN_RPC_CHECK = staticmethod(defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
- 'bitcoinaddress' in (yield bitcoind.rpc_help()) and
- not (yield bitcoind.rpc_getinfo())['testnet']
- )))
- BITCOIN_SUBSIDY_FUNC = staticmethod(lambda height: 50*100000000 >> (height + 1)//210000)
- BITCOIN_POW_FUNC = data.block_header_type.hash256
- BITCOIN_SYMBOL = 'BTC'
-
-class BitcoinTestnet(object):
- BITCOIN_P2P_PREFIX = 'fabfb5da'.decode('hex')
- BITCOIN_P2P_PORT = 18333
- BITCOIN_ADDRESS_VERSION = 111
- BITCOIN_RPC_PORT = 8332
- BITCOIN_RPC_CHECK = staticmethod(defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
- 'bitcoinaddress' in (yield bitcoind.rpc_help()) and
- (yield bitcoind.rpc_getinfo())['testnet']
- )))
- BITCOIN_SUBSIDY_FUNC = staticmethod(lambda height: 50*100000000 >> (height + 1)//210000)
- BITCOIN_POW_FUNC = data.block_header_type.hash256
- BITCOIN_SYMBOL = 'tBTC'
-
-
-class NamecoinMainnet(object):
- BITCOIN_P2P_PREFIX = 'f9beb4fe'.decode('hex')
- BITCOIN_P2P_PORT = 8334
- BITCOIN_ADDRESS_VERSION = 52
- BITCOIN_RPC_PORT = 8332
- BITCOIN_RPC_CHECK = staticmethod(defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
- 'namecoinaddress' in (yield bitcoind.rpc_help()) and
- not (yield bitcoind.rpc_getinfo())['testnet']
- )))
- BITCOIN_SUBSIDY_FUNC = staticmethod(lambda height: 50*100000000 >> (height + 1)//210000)
- BITCOIN_POW_FUNC = data.block_header_type.hash256
- BITCOIN_SYMBOL = 'NMC'
-
-class NamecoinTestnet(object):
- BITCOIN_P2P_PREFIX = 'fabfb5fe'.decode('hex')
- BITCOIN_P2P_PORT = 18334
- BITCOIN_ADDRESS_VERSION = 111
- BITCOIN_RPC_PORT = 8332
- BITCOIN_RPC_CHECK = staticmethod(defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
- 'namecoinaddress' in (yield bitcoind.rpc_help()) and
- (yield bitcoind.rpc_getinfo())['testnet']
- )))
- BITCOIN_SUBSIDY_FUNC = staticmethod(lambda height: 50*100000000 >> (height + 1)//210000)
- BITCOIN_POW_FUNC = data.block_header_type.hash256
- BITCOIN_SYMBOL = 'tNMC'
-
-
-class LitecoinMainnet(object):
- BITCOIN_P2P_PREFIX = 'fbc0b6db'.decode('hex')
- BITCOIN_P2P_PORT = 9333
- BITCOIN_ADDRESS_VERSION = 48
- BITCOIN_RPC_PORT = 9332
- BITCOIN_RPC_CHECK = staticmethod(defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
- 'litecoinaddress' in (yield bitcoind.rpc_help()) and
- not (yield bitcoind.rpc_getinfo())['testnet']
- )))
- BITCOIN_SUBSIDY_FUNC = staticmethod(lambda height: 50*100000000 >> (height + 1)//840000)
- BITCOIN_POW_FUNC = data.block_header_type.scrypt
- BITCOIN_SYMBOL = 'LTC'
-
-class LitecoinTestnet(object):
- BITCOIN_P2P_PREFIX = 'fcc1b7dc'.decode('hex')
- BITCOIN_P2P_PORT = 19333
- BITCOIN_ADDRESS_VERSION = 111
- BITCOIN_RPC_PORT = 19332
- BITCOIN_RPC_CHECK = staticmethod(defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
- 'litecoinaddress' in (yield bitcoind.rpc_help()) and
- (yield bitcoind.rpc_getinfo())['testnet']
- )))
- BITCOIN_SUBSIDY_FUNC = staticmethod(lambda height: 50*100000000 >> (height + 1)//840000)
- BITCOIN_POW_FUNC = data.block_header_type.scrypt
- BITCOIN_SYMBOL = 'tLTC'
+nets = dict(
+ bitcoin=math.Object(
+ P2P_PREFIX='f9beb4d9'.decode('hex'),
+ P2P_PORT=8333,
+ ADDRESS_VERSION=0,
+ RPC_PORT=8332,
+ RPC_CHECK=defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
+ 'bitcoinaddress' in (yield bitcoind.rpc_help()) and
+ not (yield bitcoind.rpc_getinfo())['testnet']
+ )),
+ SUBSIDY_FUNC=lambda height: 50*100000000 >> (height + 1)//210000,
+ POW_FUNC=data.hash256,
+ BLOCK_PERIOD=600, # s
+ SYMBOL='BTC',
+ CONF_FILE_FUNC=lambda: os.path.join(os.path.join(os.environ['APPDATA'], 'Bitcoin') if platform.system() == 'Windows' else os.path.expanduser('~/Library/Application Support/Bitcoin/') if platform.system() == 'Darwin' else os.path.expanduser('~/.bitcoin'), 'bitcoin.conf'),
+ BLOCK_EXPLORER_URL_PREFIX='http://blockexplorer.com/block/',
+ ADDRESS_EXPLORER_URL_PREFIX='http://blockexplorer.com/address/',
+ SANE_TARGET_RANGE=(2**256//2**32 - 1, 2**256//2**32 - 1),
+ ),
+ bitcoin_testnet=math.Object(
+ P2P_PREFIX='0b110907'.decode('hex'),
+ P2P_PORT=18333,
+ ADDRESS_VERSION=111,
+ RPC_PORT=18332,
+ RPC_CHECK=defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
+ 'bitcoinaddress' in (yield bitcoind.rpc_help()) and
+ (yield bitcoind.rpc_getinfo())['testnet']
+ )),
+ SUBSIDY_FUNC=lambda height: 50*100000000 >> (height + 1)//210000,
+ POW_FUNC=data.hash256,
+ BLOCK_PERIOD=600, # s
+ SYMBOL='tBTC',
+ CONF_FILE_FUNC=lambda: os.path.join(os.path.join(os.environ['APPDATA'], 'Bitcoin') if platform.system() == 'Windows' else os.path.expanduser('~/Library/Application Support/Bitcoin/') if platform.system() == 'Darwin' else os.path.expanduser('~/.bitcoin'), 'bitcoin.conf'),
+ BLOCK_EXPLORER_URL_PREFIX='http://blockexplorer.com/testnet/block/',
+ ADDRESS_EXPLORER_URL_PREFIX='http://blockexplorer.com/testnet/address/',
+ SANE_TARGET_RANGE=(2**256//2**32 - 1, 2**256//2**32 - 1),
+ ),
+
+ namecoin=math.Object(
+ P2P_PREFIX='f9beb4fe'.decode('hex'),
+ P2P_PORT=8334,
+ ADDRESS_VERSION=52,
+ RPC_PORT=8332,
+ RPC_CHECK=defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
+ 'namecoinaddress' in (yield bitcoind.rpc_help()) and
+ not (yield bitcoind.rpc_getinfo())['testnet']
+ )),
+ SUBSIDY_FUNC=lambda height: 50*100000000 >> (height + 1)//210000,
+ POW_FUNC=data.hash256,
+ BLOCK_PERIOD=600, # s
+ SYMBOL='NMC',
+ CONF_FILE_FUNC=lambda: os.path.join(os.path.join(os.environ['APPDATA'], 'Namecoin') if platform.system() == 'Windows' else os.path.expanduser('~/Library/Application Support/Namecoin/') if platform.system() == 'Darwin' else os.path.expanduser('~/.namecoin'), 'bitcoin.conf'),
+ BLOCK_EXPLORER_URL_PREFIX='http://explorer.dot-bit.org/b/',
+ ADDRESS_EXPLORER_URL_PREFIX='http://explorer.dot-bit.org/a/',
+ SANE_TARGET_RANGE=(2**256//2**32 - 1, 2**256//2**32 - 1),
+ ),
+ namecoin_testnet=math.Object(
+ P2P_PREFIX='fabfb5fe'.decode('hex'),
+ P2P_PORT=18334,
+ ADDRESS_VERSION=111,
+ RPC_PORT=8332,
+ RPC_CHECK=defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
+ 'namecoinaddress' in (yield bitcoind.rpc_help()) and
+ (yield bitcoind.rpc_getinfo())['testnet']
+ )),
+ SUBSIDY_FUNC=lambda height: 50*100000000 >> (height + 1)//210000,
+ POW_FUNC=data.hash256,
+ BLOCK_PERIOD=600, # s
+ SYMBOL='tNMC',
+ CONF_FILE_FUNC=lambda: os.path.join(os.path.join(os.environ['APPDATA'], 'Namecoin') if platform.system() == 'Windows' else os.path.expanduser('~/Library/Application Support/Namecoin/') if platform.system() == 'Darwin' else os.path.expanduser('~/.namecoin'), 'bitcoin.conf'),
+ BLOCK_EXPLORER_URL_PREFIX='http://testnet.explorer.dot-bit.org/b/',
+ ADDRESS_EXPLORER_URL_PREFIX='http://testnet.explorer.dot-bit.org/a/',
+ SANE_TARGET_RANGE=(2**256//2**32 - 1, 2**256//2**32 - 1),
+ ),
+
+ litecoin=math.Object(
+ P2P_PREFIX='fbc0b6db'.decode('hex'),
+ P2P_PORT=9333,
+ ADDRESS_VERSION=48,
+ RPC_PORT=9332,
+ RPC_CHECK=defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
+ 'litecoinaddress' in (yield bitcoind.rpc_help()) and
+ not (yield bitcoind.rpc_getinfo())['testnet']
+ )),
+ SUBSIDY_FUNC=lambda height: 50*100000000 >> (height + 1)//840000,
+ POW_FUNC=lambda data: pack.IntType(256).unpack(__import__('ltc_scrypt').getPoWHash(data)),
+ BLOCK_PERIOD=150, # s
+ SYMBOL='LTC',
+ CONF_FILE_FUNC=lambda: os.path.join(os.path.join(os.environ['APPDATA'], 'Litecoin') if platform.system() == 'Windows' else os.path.expanduser('~/Library/Application Support/Litecoin/') if platform.system() == 'Darwin' else os.path.expanduser('~/.litecoin'), 'litecoin.conf'),
+ BLOCK_EXPLORER_URL_PREFIX='http://explorer.litecoin.net/block/',
+ ADDRESS_EXPLORER_URL_PREFIX='http://explorer.litecoin.net/address/',
+ SANE_TARGET_RANGE=(2**256//1000000000 - 1, 2**256//1000 - 1),
+ ),
+ litecoin_testnet=math.Object(
+ P2P_PREFIX='fcc1b7dc'.decode('hex'),
+ P2P_PORT=19333,
+ ADDRESS_VERSION=111,
+ RPC_PORT=19332,
+ RPC_CHECK=defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
+ 'litecoinaddress' in (yield bitcoind.rpc_help()) and
+ (yield bitcoind.rpc_getinfo())['testnet']
+ )),
+ SUBSIDY_FUNC=lambda height: 50*100000000 >> (height + 1)//840000,
+ POW_FUNC=lambda data: pack.IntType(256).unpack(__import__('ltc_scrypt').getPoWHash(data)),
+ BLOCK_PERIOD=150, # s
+ SYMBOL='tLTC',
+ CONF_FILE_FUNC=lambda: os.path.join(os.path.join(os.environ['APPDATA'], 'Litecoin') if platform.system() == 'Windows' else os.path.expanduser('~/Library/Application Support/Litecoin/') if platform.system() == 'Darwin' else os.path.expanduser('~/.litecoin'), 'litecoin.conf'),
+ BLOCK_EXPLORER_URL_PREFIX='http://nonexistent-litecoin-testnet-explorer/block/',
+ ADDRESS_EXPLORER_URL_PREFIX='http://nonexistent-litecoin-testnet-explorer/address/',
+ SANE_TARGET_RANGE=(2**256//1000000000 - 1, 2**256 - 1),
+ ),
+)
+for net_name, net in nets.iteritems():
+ net.NAME = net_name