from . import data
from p2pool.util import math, pack
+from operator import *
+
+def get_subsidy(nCap, nMaxSubsidy, bnTarget):
+ bnLowerBound = 0.01
+ bnUpperBound = bnSubsidyLimit = nMaxSubsidy
+ bnTargetLimit = 0x00000fffff000000000000000000000000000000000000000000000000000000
+
+ while bnLowerBound + 0.01 <= bnUpperBound:
+ bnMidValue = (bnLowerBound + bnUpperBound) / 2
+ if pow(bnMidValue, nCap) * bnTargetLimit > pow(bnSubsidyLimit, nCap) * bnTarget:
+ bnUpperBound = bnMidValue
+ else:
+ bnLowerBound = bnMidValue
+
+ nSubsidy = round(bnMidValue, 2)
+
+ if nSubsidy > bnMidValue:
+ nSubsidy = nSubsidy - 0.01
+
+ return int(nSubsidy * 1000000)
nets = dict(
- bitcoin=math.Object(
- P2P_PREFIX='f9beb4d9'.decode('hex'),
- P2P_PORT=8333,
- ADDRESS_VERSION=0,
- RPC_PORT=8332,
+ novacoin=math.Object(
+ P2P_PREFIX='e4e8e9e5'.decode('hex'),
+ P2P_PORT=7777,
+ ADDRESS_VERSION=8,
+ RPC_PORT=8344,
RPC_CHECK=defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
- 'bitcoinaddress' in (yield bitcoind.rpc_help()) and
- not (yield bitcoind.rpc_getinfo())['testnet']
- )),
- 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='fabfb5da'.decode('hex'),
- P2P_PORT=18333,
- ADDRESS_VERSION=111,
- RPC_PORT=8332,
- RPC_CHECK=defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
- 'bitcoinaddress' in (yield bitcoind.rpc_help()) and
- (yield bitcoind.rpc_getinfo())['testnet']
- )),
- 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']
- )),
- 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']
- )),
- 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
+ 'novacoinaddress' in (yield bitcoind.rpc_help()) and
not (yield bitcoind.rpc_getinfo())['testnet']
)),
+ SUBSIDY_FUNC=lambda target: get_subsidy(6, 100, target),
+ BLOCKHASH_FUNC=lambda data: pack.IntType(256).unpack(__import__('ltc_scrypt').getPoWHash(data)),
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://abe.liteco.in/block/',
- ADDRESS_EXPLORER_URL_PREFIX='http://abe.liteco.in/address/',
+ BLOCK_PERIOD=600, # s
+ SYMBOL='NVC',
+ CONF_FILE_FUNC=lambda: os.path.join(os.path.join(os.environ['APPDATA'], 'NovaCoin') if platform.system() == 'Windows' else os.path.expanduser('~/Library/Application Support/NovaCoin/') if platform.system() == 'Darwin' else os.path.expanduser('~/.novacoin'), 'novacoin.conf'),
+ BLOCK_EXPLORER_URL_PREFIX='http://novacoin.ru/block/',
+ ADDRESS_EXPLORER_URL_PREFIX='http://novacoin.ru/address/',
SANE_TARGET_RANGE=(2**256//1000000000 - 1, 2**256//1000 - 1),
),
- litecoin_testnet=math.Object(
- P2P_PREFIX='fcc1b7dc'.decode('hex'),
- P2P_PORT=19333,
+ novacoin_testnet=math.Object(
+ P2P_PREFIX='cdf2c0ef'.decode('hex'),
+ P2P_PORT=17777,
ADDRESS_VERSION=111,
- RPC_PORT=19332,
+ RPC_PORT=8344,
RPC_CHECK=defer.inlineCallbacks(lambda bitcoind: defer.returnValue(
- 'litecoinaddress' in (yield bitcoind.rpc_help()) and
+ 'novacoinaddress' in (yield bitcoind.rpc_help()) and
(yield bitcoind.rpc_getinfo())['testnet']
)),
+ SUBSIDY_FUNC=lambda target: get_subsidy(6, 100, target),
+ BLOCKHASH_FUNC=lambda data: pack.IntType(256).unpack(__import__('ltc_scrypt').getPoWHash(data)),
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/',
+ BLOCK_PERIOD=600, # s
+ SYMBOL='tNVC',
+ CONF_FILE_FUNC=lambda: os.path.join(os.path.join(os.environ['APPDATA'], 'NovaCoin') if platform.system() == 'Windows' else os.path.expanduser('~/Library/Application Support/NovaCoin/') if platform.system() == 'Darwin' else os.path.expanduser('~/.novacoin'), 'novacoin.conf'),
+ BLOCK_EXPLORER_URL_PREFIX='http://nonexistent-novacoin-testnet-explorer/block/',
+ ADDRESS_EXPLORER_URL_PREFIX='http://nonexistent-novacoin-testnet-explorer/address/',
SANE_TARGET_RANGE=(2**256//1000000000 - 1, 2**256//1000 - 1),
),
)