Litecoin: Protocol.

This commit is contained in:
Adrian Gallagher 2015-01-19 18:05:34 +11:00 committed by Warren Togami
parent 327970b682
commit 9a98061200
23 changed files with 92 additions and 96 deletions

View File

@ -11,9 +11,9 @@ rpcpass = ""
if rpcpass == "": if rpcpass == "":
access = ServiceProxy("http://127.0.0.1:8332") access = ServiceProxy("http://127.0.0.1:9332")
else: else:
access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:8332") access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:9332")
cmd = sys.argv[1].lower() cmd = sys.argv[1].lower()
if cmd == "backupwallet": if cmd == "backupwallet":

View File

@ -38,11 +38,11 @@
# Use as many addnode= settings as you like to connect to specific peers # Use as many addnode= settings as you like to connect to specific peers
#addnode=69.164.218.197 #addnode=69.164.218.197
#addnode=10.0.0.2:8333 #addnode=10.0.0.2:9333
# Alternatively use as many connect= settings as you like to connect ONLY to specific peers # Alternatively use as many connect= settings as you like to connect ONLY to specific peers
#connect=69.164.218.197 #connect=69.164.218.197
#connect=10.0.0.1:8333 #connect=10.0.0.1:9333
# Listening mode, enabled by default except when 'connect' is being used # Listening mode, enabled by default except when 'connect' is being used
#listen=1 #listen=1
@ -79,7 +79,7 @@
#rpcallowip=2001:db8:85a3:0:0:8a2e:370:7334/96 #rpcallowip=2001:db8:85a3:0:0:8a2e:370:7334/96
# Listen for RPC connections on this TCP port: # Listen for RPC connections on this TCP port:
#rpcport=8332 #rpcport=9332
# You can use Bitcoin or bitcoind to send commands to Bitcoin/bitcoind # You can use Bitcoin or bitcoind to send commands to Bitcoin/bitcoind
# running on another host using this option: # running on another host using this option:

View File

@ -41,7 +41,7 @@ Use proxy to reach tor hidden services (default: same as \fB\-proxy\fR)
Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR
.TP .TP
\fB\-port=\fR<port> \fB\-port=\fR<port>
Listen for connections on <port> (default: 8333 or testnet: 18333) Listen for connections on <port> (default: 9333 or testnet: 19333)
.TP .TP
\fB\-maxconnections=\fR<n> \fB\-maxconnections=\fR<n>
Maintain at most <n> connections to peers (default: 125) Maintain at most <n> connections to peers (default: 125)
@ -122,7 +122,7 @@ Username for JSON\-RPC connections
Password for JSON\-RPC connections Password for JSON\-RPC connections
.TP .TP
\fB\-rpcport=\fR<port> \fB\-rpcport=\fR<port>
Listen for JSON\-RPC connections on <port> (default: 8332 or testnet: 18332) Listen for JSON\-RPC connections on <port> (default: 9332 or testnet: 19332)
.TP .TP
\fB\-rpcallowip=\fR<ip> \fB\-rpcallowip=\fR<ip>
Allow JSON\-RPC connections from specified IP address Allow JSON\-RPC connections from specified IP address

View File

@ -18,10 +18,10 @@ Enable or disable run on the test network instead of the real *bitcoin* network.
\fBproxy=\fR\fI'127.0.0.1:9050'\fR \fBproxy=\fR\fI'127.0.0.1:9050'\fR
Connect via a socks4 proxy. Connect via a socks4 proxy.
.TP .TP
\fBaddnode=\fR\fI'10.0.0.2:8333'\fR \fBaddnode=\fR\fI'10.0.0.2:9333'\fR
Use as many *addnode=* settings as you like to connect to specific peers. Use as many *addnode=* settings as you like to connect to specific peers.
.TP .TP
\fBconnect=\fR\fI'10.0.0.1:8333'\fR \fBconnect=\fR\fI'10.0.0.1:9333'\fR
Use as many *connect=* settings as you like to connect ONLY to specific peers. Use as many *connect=* settings as you like to connect ONLY to specific peers.
.TP .TP
\fRmaxconnections=\fR\fI'value'\fR \fRmaxconnections=\fR\fI'value'\fR
@ -40,7 +40,7 @@ You must set *rpcpassword* to secure the JSON-RPC api.
\fBrpcallowip=\fR\fI'192.168.1.*'\fR \fBrpcallowip=\fR\fI'192.168.1.*'\fR
By default, only RPC connections from localhost are allowed. Specify as many *rpcallowip=* settings as you like to allow connections from other hosts (and you may use * as a wildcard character). By default, only RPC connections from localhost are allowed. Specify as many *rpcallowip=* settings as you like to allow connections from other hosts (and you may use * as a wildcard character).
.TP .TP
\fBrpcport=\fR\fI'8332'\fR \fBrpcport=\fR\fI'9332'\fR
Listen for RPC connections on this TCP port. Listen for RPC connections on this TCP port.
.TP .TP
\fBrpcconnect=\fR\fI'127.0.0.1'\fR \fBrpcconnect=\fR\fI'127.0.0.1'\fR

View File

@ -3,7 +3,7 @@
rpcuser=someuser rpcuser=someuser
rpcpassword=somepassword rpcpassword=somepassword
host=127.0.0.1 host=127.0.0.1
port=8332 port=9332
# bootstrap.dat hashlist settings (linearize-hashes) # bootstrap.dat hashlist settings (linearize-hashes)
max_height=313000 max_height=313000

View File

@ -96,7 +96,7 @@ if __name__ == '__main__':
if 'host' not in settings: if 'host' not in settings:
settings['host'] = '127.0.0.1' settings['host'] = '127.0.0.1'
if 'port' not in settings: if 'port' not in settings:
settings['port'] = 8332 settings['port'] = 9332
if 'min_height' not in settings: if 'min_height' not in settings:
settings['min_height'] = 0 settings['min_height'] = 0
if 'max_height' not in settings: if 'max_height' not in settings:

View File

@ -1,5 +1,5 @@
### Qos ### ### Qos ###
This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitcoin network. It limits outbound TCP traffic with a source or destination port of 8333, but not if the destination IP is within a LAN (defined as 192.168.x.x). This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitcoin network. It limits outbound TCP traffic with a source or destination port of 9333, but not if the destination IP is within a LAN (defined as 192.168.x.x).
This means one can have an always-on bitcoind instance running, and another local bitcoind/bitcoin-qt instance which connects to this node and receives blocks from it. This means one can have an always-on bitcoind instance running, and another local bitcoind/bitcoin-qt instance which connects to this node and receives blocks from it.

View File

@ -32,10 +32,10 @@ tc filter add dev ${IF} parent 1: protocol ip prio 2 handle 2 fw classid 1:11
# ret=$? # ret=$?
#done #done
#limit outgoing traffic to and from port 8333. but not when dealing with a host on the local network #limit outgoing traffic to and from port 9333. but not when dealing with a host on the local network
# (defined by $LOCALNET) # (defined by $LOCALNET)
# --set-mark marks packages matching these criteria with the number "2" # --set-mark marks packages matching these criteria with the number "2"
# these packages are filtered by the tc filter with "handle 2" # these packages are filtered by the tc filter with "handle 2"
# this filter sends the packages into the 1:11 class, and this class is limited to ${LIMIT} # this filter sends the packages into the 1:11 class, and this class is limited to ${LIMIT}
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8333 ! -d ${LOCALNET} -j MARK --set-mark 0x2 iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 9333 ! -d ${LOCALNET} -j MARK --set-mark 0x2
iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8333 ! -d ${LOCALNET} -j MARK --set-mark 0x2 iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 9333 ! -d ${LOCALNET} -j MARK --set-mark 0x2

View File

@ -23,7 +23,7 @@ import re
import sys import sys
import dns.resolver import dns.resolver
PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):8333$") PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):9333$")
PATTERN_AGENT = re.compile(r"^(\/Satoshi:0.8.6\/|\/Satoshi:0.9.(2|3)\/|\/Satoshi:0.10.\d{1,2}\/)$") PATTERN_AGENT = re.compile(r"^(\/Satoshi:0.8.6\/|\/Satoshi:0.9.(2|3)\/|\/Satoshi:0.10.\d{1,2}\/)$")
def parseline(line): def parseline(line):

View File

@ -67,7 +67,7 @@ def connect_JSON(config):
testnet = config.get('testnet', '0') testnet = config.get('testnet', '0')
testnet = (int(testnet) > 0) # 0/1 in config file, convert to True/False testnet = (int(testnet) > 0) # 0/1 in config file, convert to True/False
if not 'rpcport' in config: if not 'rpcport' in config:
config['rpcport'] = 18332 if testnet else 8332 config['rpcport'] = 19332 if testnet else 9332
connect = "http://%s:%s@127.0.0.1:%s"%(config['rpcuser'], config['rpcpassword'], config['rpcport']) connect = "http://%s:%s@127.0.0.1:%s"%(config['rpcuser'], config['rpcpassword'], config['rpcport'])
try: try:
result = ServiceProxy(connect) result = ServiceProxy(connect)

View File

@ -119,7 +119,7 @@ Threads
- ThreadMapPort : Universal plug-and-play startup/shutdown - ThreadMapPort : Universal plug-and-play startup/shutdown
- ThreadSocketHandler : Sends/Receives data from peers on port 8333. - ThreadSocketHandler : Sends/Receives data from peers on port 9333.
- ThreadOpenAddedConnections : Opens network connections to added nodes. - ThreadOpenAddedConnections : Opens network connections to added nodes.
@ -131,7 +131,7 @@ Threads
- ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used in 500ms. - ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used in 500ms.
- ThreadRPCServer : Remote procedure call handler, listens on port 8332 for connections and services them. - ThreadRPCServer : Remote procedure call handler, listens on port 9332 for connections and services them.
- BitcoinMiner : Generates bitcoins (if wallet is enabled). - BitcoinMiner : Generates bitcoins (if wallet is enabled).

View File

@ -42,11 +42,11 @@ reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equiv
config file): config file):
HiddenServiceDir /var/lib/tor/bitcoin-service/ HiddenServiceDir /var/lib/tor/bitcoin-service/
HiddenServicePort 8333 127.0.0.1:8333 HiddenServicePort 9333 127.0.0.1:9333
HiddenServicePort 18333 127.0.0.1:18333 HiddenServicePort 19333 127.0.0.1:19333
The directory can be different of course, but (both) port numbers should be equal to The directory can be different of course, but (both) port numbers should be equal to
your bitcoind's P2P listen port (8333 by default). your bitcoind's P2P listen port (9333 by default).
-externalip=X You can tell bitcoin about its publicly reachable address using -externalip=X You can tell bitcoin about its publicly reachable address using
this option, and this can be a .onion address. Given the above this option, and this can be a .onion address. Given the above
@ -76,7 +76,7 @@ specify:
./bitcoind ... -discover ./bitcoind ... -discover
and open port 8333 on your firewall (or use -upnp). and open port 9333 on your firewall (or use -upnp).
If you only want to use Tor to reach onion addresses, but not use it as a proxy If you only want to use Tor to reach onion addresses, but not use it as a proxy
for normal IPv4/IPv6 communication, use: for normal IPv4/IPv6 communication, use:

View File

@ -124,10 +124,10 @@ def main():
g.write(' * IPv4 as well as onion addresses are wrapped inside a IPv6 address accordingly.\n') g.write(' * IPv4 as well as onion addresses are wrapped inside a IPv6 address accordingly.\n')
g.write(' */\n') g.write(' */\n')
with open(os.path.join(indir,'nodes_main.txt'),'r') as f: with open(os.path.join(indir,'nodes_main.txt'),'r') as f:
process_nodes(g, f, 'pnSeed6_main', 8333) process_nodes(g, f, 'pnSeed6_main', 9333)
g.write('\n') g.write('\n')
with open(os.path.join(indir,'nodes_test.txt'),'r') as f: with open(os.path.join(indir,'nodes_test.txt'),'r') as f:
process_nodes(g, f, 'pnSeed6_test', 18333) process_nodes(g, f, 'pnSeed6_test', 19333)
g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n') g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n')
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -17,7 +17,7 @@ static const CAmount COIN = 100000000;
static const CAmount CENT = 1000000; static const CAmount CENT = 1000000;
/** No amount larger than this (in satoshi) is valid */ /** No amount larger than this (in satoshi) is valid */
static const CAmount MAX_MONEY = 21000000 * COIN; static const CAmount MAX_MONEY = 84000000 * COIN;
inline bool MoneyRange(const CAmount& nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); } inline bool MoneyRange(const CAmount& nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); }
/** Type-safe wrapper class to for fee rates /** Type-safe wrapper class to for fee rates

View File

@ -30,7 +30,7 @@ std::string HelpMessageCli()
strUsage += " -regtest " + _("Enter regression test mode, which uses a special chain in which blocks can be " strUsage += " -regtest " + _("Enter regression test mode, which uses a special chain in which blocks can be "
"solved instantly. This is intended for regression testing tools and app development.") + "\n"; "solved instantly. This is intended for regression testing tools and app development.") + "\n";
strUsage += " -rpcconnect=<ip> " + strprintf(_("Send commands to node running on <ip> (default: %s)"), "127.0.0.1") + "\n"; strUsage += " -rpcconnect=<ip> " + strprintf(_("Send commands to node running on <ip> (default: %s)"), "127.0.0.1") + "\n";
strUsage += " -rpcport=<port> " + strprintf(_("Connect to JSON-RPC on <port> (default: %u or testnet: %u)"), 8332, 18332) + "\n"; strUsage += " -rpcport=<port> " + strprintf(_("Connect to JSON-RPC on <port> (default: %u or testnet: %u)"), 9332, 19332) + "\n";
strUsage += " -rpcwait " + _("Wait for RPC server to start") + "\n"; strUsage += " -rpcwait " + _("Wait for RPC server to start") + "\n";
strUsage += " -rpcuser=<user> " + _("Username for JSON-RPC connections") + "\n"; strUsage += " -rpcuser=<user> " + _("Username for JSON-RPC connections") + "\n";
strUsage += " -rpcpassword=<pw> " + _("Password for JSON-RPC connections") + "\n"; strUsage += " -rpcpassword=<pw> " + _("Password for JSON-RPC connections") + "\n";

View File

@ -110,20 +110,20 @@ public:
* The characters are rarely used upper ASCII, not valid as UTF-8, and produce * The characters are rarely used upper ASCII, not valid as UTF-8, and produce
* a large 4-byte int at any alignment. * a large 4-byte int at any alignment.
*/ */
pchMessageStart[0] = 0xf9; pchMessageStart[0] = 0xfb;
pchMessageStart[1] = 0xbe; pchMessageStart[1] = 0xc0;
pchMessageStart[2] = 0xb4; pchMessageStart[2] = 0xb6;
pchMessageStart[3] = 0xd9; pchMessageStart[3] = 0xdb;
vAlertPubKey = ParseHex("04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284"); vAlertPubKey = ParseHex("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9");
nDefaultPort = 8333; nDefaultPort = 9333;
bnProofOfWorkLimit = ~uint256(0) >> 32; bnProofOfWorkLimit = ~uint256(0) >> 20;
nSubsidyHalvingInterval = 210000; nSubsidyHalvingInterval = 840000;
nEnforceBlockUpgradeMajority = 750; nEnforceBlockUpgradeMajority = 750;
nRejectBlockOutdatedMajority = 950; nRejectBlockOutdatedMajority = 950;
nToCheckBlockUpgradeMajority = 1000; nToCheckBlockUpgradeMajority = 1000;
nMinerThreads = 0; nMinerThreads = 0;
nTargetTimespan = 14 * 24 * 60 * 60; // two weeks nTargetTimespan = 3.5 * 24 * 60 * 60; // 3.5 days
nTargetSpacing = 10 * 60; nTargetSpacing = 2.5 * 60; // 2.5 minutes
/** /**
* Build the genesis block. Note that the output of the genesis coinbase cannot * Build the genesis block. Note that the output of the genesis coinbase cannot
@ -135,34 +135,34 @@ public:
* CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B) * CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B)
* vMerkleTree: 4a5e1e * vMerkleTree: 4a5e1e
*/ */
const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"; const char* pszTimestamp = "NY Times 05/Oct/2011 Steve Jobs, Apples Visionary, Dies at 56";
CMutableTransaction txNew; CMutableTransaction txNew;
txNew.vin.resize(1); txNew.vin.resize(1);
txNew.vout.resize(1); txNew.vout.resize(1);
txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
txNew.vout[0].nValue = 50 * COIN; txNew.vout[0].nValue = 50 * COIN;
txNew.vout[0].scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; txNew.vout[0].scriptPubKey = CScript() << ParseHex("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9") << OP_CHECKSIG;
genesis.vtx.push_back(txNew); genesis.vtx.push_back(txNew);
genesis.hashPrevBlock = 0; genesis.hashPrevBlock = 0;
genesis.hashMerkleRoot = genesis.BuildMerkleTree(); genesis.hashMerkleRoot = genesis.BuildMerkleTree();
genesis.nVersion = 1; genesis.nVersion = 1;
genesis.nTime = 1231006505; genesis.nTime = 1317972665;
genesis.nBits = 0x1d00ffff; genesis.nBits = 0x1e0ffff0;
genesis.nNonce = 2083236893; genesis.nNonce = 2084524493;
hashGenesisBlock = genesis.GetHash(); hashGenesisBlock = genesis.GetHash();
assert(hashGenesisBlock == uint256("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")); assert(hashGenesisBlock == uint256("0x12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2"));
assert(genesis.hashMerkleRoot == uint256("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); assert(genesis.hashMerkleRoot == uint256("0x97ddfbbae6be97fd6cdf3e7ca13232a3afff2353e29badfab7f73011edd4ced9"));
vSeeds.push_back(CDNSSeedData("bitcoin.sipa.be", "seed.bitcoin.sipa.be")); vSeeds.push_back(CDNSSeedData("litecointools.com", "dnsseed.litecointools.com"));
vSeeds.push_back(CDNSSeedData("bluematt.me", "dnsseed.bluematt.me")); vSeeds.push_back(CDNSSeedData("litecoinpool.org", "dnsseed.litecoinpool.org"));
vSeeds.push_back(CDNSSeedData("dashjr.org", "dnsseed.bitcoin.dashjr.org")); vSeeds.push_back(CDNSSeedData("xurious.com", "dnsseed.ltc.xurious.com"));
vSeeds.push_back(CDNSSeedData("bitcoinstats.com", "seed.bitcoinstats.com")); vSeeds.push_back(CDNSSeedData("koin-project.com", "dnsseed.koin-project.com"));
vSeeds.push_back(CDNSSeedData("xf2.org", "bitseed.xf2.org")); vSeeds.push_back(CDNSSeedData("weminemnc.com", "dnsseed.weminemnc.com"));
base58Prefixes[PUBKEY_ADDRESS] = list_of(0); base58Prefixes[PUBKEY_ADDRESS] = list_of(48);
base58Prefixes[SCRIPT_ADDRESS] = list_of(5); base58Prefixes[SCRIPT_ADDRESS] = list_of(5);
base58Prefixes[SECRET_KEY] = list_of(128); base58Prefixes[SECRET_KEY] = list_of(176);
base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x04)(0x88)(0xB2)(0x1E); base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x04)(0x88)(0xB2)(0x1E);
base58Prefixes[EXT_SECRET_KEY] = list_of(0x04)(0x88)(0xAD)(0xE4); base58Prefixes[EXT_SECRET_KEY] = list_of(0x04)(0x88)(0xAD)(0xE4);
@ -193,31 +193,30 @@ public:
CTestNetParams() { CTestNetParams() {
networkID = CBaseChainParams::TESTNET; networkID = CBaseChainParams::TESTNET;
strNetworkID = "test"; strNetworkID = "test";
pchMessageStart[0] = 0x0b; pchMessageStart[0] = 0xfc;
pchMessageStart[1] = 0x11; pchMessageStart[1] = 0xc1;
pchMessageStart[2] = 0x09; pchMessageStart[2] = 0xb7;
pchMessageStart[3] = 0x07; pchMessageStart[3] = 0xdc;
vAlertPubKey = ParseHex("04302390343f91cc401d56d68b123028bf52e5fca1939df127f63c6467cdf9c8e2c14b61104cf817d0b780da337893ecc4aaff1309e536162dabbdb45200ca2b0a"); vAlertPubKey = ParseHex("04302390343f91cc401d56d68b123028bf52e5fca1939df127f63c6467cdf9c8e2c14b61104cf817d0b780da337893ecc4aaff1309e536162dabbdb45200ca2b0a");
nDefaultPort = 18333; nDefaultPort = 19333;
nEnforceBlockUpgradeMajority = 51; nEnforceBlockUpgradeMajority = 51;
nRejectBlockOutdatedMajority = 75; nRejectBlockOutdatedMajority = 75;
nToCheckBlockUpgradeMajority = 100; nToCheckBlockUpgradeMajority = 100;
nMinerThreads = 0; nMinerThreads = 0;
nTargetTimespan = 14 * 24 * 60 * 60; //! two weeks nTargetTimespan = 3.5 * 24 * 60 * 60; // 3.5 days
nTargetSpacing = 10 * 60; nTargetSpacing = 2.5 * 60; // 2.5 minutes
//! Modify the testnet genesis block so the timestamp is valid for a later start. //! Modify the testnet genesis block so the timestamp is valid for a later start.
genesis.nTime = 1296688602; genesis.nTime = 1317798646;
genesis.nNonce = 414098458; genesis.nNonce = 385270584;
hashGenesisBlock = genesis.GetHash(); hashGenesisBlock = genesis.GetHash();
assert(hashGenesisBlock == uint256("0x000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943")); assert(hashGenesisBlock == uint256("0xf5ae71e26c74beacc88382716aced69cddf3dffff24f384e1808905e0188f68f"));
vFixedSeeds.clear(); vFixedSeeds.clear();
vSeeds.clear(); vSeeds.clear();
vSeeds.push_back(CDNSSeedData("alexykot.me", "testnet-seed.alexykot.me")); vSeeds.push_back(CDNSSeedData("litecointools.com", "testnet-seed.litecointools.com"));
vSeeds.push_back(CDNSSeedData("bitcoin.petertodd.org", "testnet-seed.bitcoin.petertodd.org")); vSeeds.push_back(CDNSSeedData("xurious.com", "testnet-seed.ltc.xurious.com"));
vSeeds.push_back(CDNSSeedData("bluematt.me", "testnet-seed.bluematt.me")); vSeeds.push_back(CDNSSeedData("wemine-testnet.com", "dnsseed.wemine-testnet.com"));
vSeeds.push_back(CDNSSeedData("bitcoin.schildbach.de", "testnet-seed.bitcoin.schildbach.de"));
base58Prefixes[PUBKEY_ADDRESS] = list_of(111); base58Prefixes[PUBKEY_ADDRESS] = list_of(111);
base58Prefixes[SCRIPT_ADDRESS] = list_of(196); base58Prefixes[SCRIPT_ADDRESS] = list_of(196);
@ -266,8 +265,8 @@ public:
genesis.nBits = 0x207fffff; genesis.nBits = 0x207fffff;
genesis.nNonce = 2; genesis.nNonce = 2;
hashGenesisBlock = genesis.GetHash(); hashGenesisBlock = genesis.GetHash();
nDefaultPort = 18444; nDefaultPort = 19444;
assert(hashGenesisBlock == uint256("0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")); assert(hashGenesisBlock == uint256("0x9372df8b4c0144d2238b73d65ce81b5eb37ec416c23fc29307b89de4b0493cf8"));
vFixedSeeds.clear(); //! Regtest mode doesn't have any fixed seeds. vFixedSeeds.clear(); //! Regtest mode doesn't have any fixed seeds.
vSeeds.clear(); //! Regtest mode doesn't have any DNS seeds. vSeeds.clear(); //! Regtest mode doesn't have any DNS seeds.

View File

@ -22,7 +22,7 @@ public:
CBaseMainParams() CBaseMainParams()
{ {
networkID = CBaseChainParams::MAIN; networkID = CBaseChainParams::MAIN;
nRPCPort = 8332; nRPCPort = 9332;
} }
}; };
static CBaseMainParams mainParams; static CBaseMainParams mainParams;
@ -36,7 +36,7 @@ public:
CBaseTestNetParams() CBaseTestNetParams()
{ {
networkID = CBaseChainParams::TESTNET; networkID = CBaseChainParams::TESTNET;
nRPCPort = 18332; nRPCPort = 19332;
strDataDir = "testnet3"; strDataDir = "testnet3";
} }
}; };

View File

@ -283,7 +283,7 @@ std::string HelpMessage(HelpMessageMode mode)
strUsage += " -onion=<ip:port> " + strprintf(_("Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: %s)"), "-proxy") + "\n"; strUsage += " -onion=<ip:port> " + strprintf(_("Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: %s)"), "-proxy") + "\n";
strUsage += " -onlynet=<net> " + _("Only connect to nodes in network <net> (ipv4, ipv6 or onion)") + "\n"; strUsage += " -onlynet=<net> " + _("Only connect to nodes in network <net> (ipv4, ipv6 or onion)") + "\n";
strUsage += " -permitbaremultisig " + strprintf(_("Relay non-P2SH multisig (default: %u)"), 1) + "\n"; strUsage += " -permitbaremultisig " + strprintf(_("Relay non-P2SH multisig (default: %u)"), 1) + "\n";
strUsage += " -port=<port> " + strprintf(_("Listen for connections on <port> (default: %u or testnet: %u)"), 8333, 18333) + "\n"; strUsage += " -port=<port> " + strprintf(_("Listen for connections on <port> (default: %u or testnet: %u)"), 9333, 19333) + "\n";
strUsage += " -proxy=<ip:port> " + _("Connect through SOCKS5 proxy") + "\n"; strUsage += " -proxy=<ip:port> " + _("Connect through SOCKS5 proxy") + "\n";
strUsage += " -seednode=<ip> " + _("Connect to a node to retrieve peer addresses, and disconnect") + "\n"; strUsage += " -seednode=<ip> " + _("Connect to a node to retrieve peer addresses, and disconnect") + "\n";
strUsage += " -timeout=<n> " + strprintf(_("Specify connection timeout in milliseconds (minimum: 1, default: %d)"), DEFAULT_CONNECT_TIMEOUT) + "\n"; strUsage += " -timeout=<n> " + strprintf(_("Specify connection timeout in milliseconds (minimum: 1, default: %d)"), DEFAULT_CONNECT_TIMEOUT) + "\n";
@ -378,7 +378,7 @@ std::string HelpMessage(HelpMessageMode mode)
strUsage += " -rpcbind=<addr> " + _("Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6. This option can be specified multiple times (default: bind to all interfaces)") + "\n"; strUsage += " -rpcbind=<addr> " + _("Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6. This option can be specified multiple times (default: bind to all interfaces)") + "\n";
strUsage += " -rpcuser=<user> " + _("Username for JSON-RPC connections") + "\n"; strUsage += " -rpcuser=<user> " + _("Username for JSON-RPC connections") + "\n";
strUsage += " -rpcpassword=<pw> " + _("Password for JSON-RPC connections") + "\n"; strUsage += " -rpcpassword=<pw> " + _("Password for JSON-RPC connections") + "\n";
strUsage += " -rpcport=<port> " + strprintf(_("Listen for JSON-RPC connections on <port> (default: %u or testnet: %u)"), 8332, 18332) + "\n"; strUsage += " -rpcport=<port> " + strprintf(_("Listen for JSON-RPC connections on <port> (default: %u or testnet: %u)"), 9332, 19332) + "\n";
strUsage += " -rpcallowip=<ip> " + _("Allow JSON-RPC connections from specified source. Valid for <ip> are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times") + "\n"; strUsage += " -rpcallowip=<ip> " + _("Allow JSON-RPC connections from specified source. Valid for <ip> are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times") + "\n";
strUsage += " -rpcthreads=<n> " + strprintf(_("Set the number of threads to service RPC calls (default: %d)"), 4) + "\n"; strUsage += " -rpcthreads=<n> " + strprintf(_("Set the number of threads to service RPC calls (default: %d)"), 4) + "\n";
strUsage += " -rpckeepalive " + strprintf(_("RPC support for HTTP persistent connections (default: %d)"), 1) + "\n"; strUsage += " -rpckeepalive " + strprintf(_("RPC support for HTTP persistent connections (default: %d)"), 1) + "\n";

View File

@ -1663,13 +1663,10 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
// See BIP30 and http://r6.ca/blog/20120206T005236Z.html for more information. // See BIP30 and http://r6.ca/blog/20120206T005236Z.html for more information.
// This logic is not necessary for memory pool transactions, as AcceptToMemoryPool // This logic is not necessary for memory pool transactions, as AcceptToMemoryPool
// already refuses previously-known transaction ids entirely. // already refuses previously-known transaction ids entirely.
// This rule was originally applied all blocks whose timestamp was after March 15, 2012, 0:00 UTC. // This rule was originally applied all blocks whose timestamp was after October 1, 2012, 0:00 UTC.
// Now that the whole chain is irreversibly beyond that time it is applied to all blocks except the // Now that the whole chain is irreversibly beyond that time it is applied to all blocks,
// two in the chain that violate it. This prevents exploiting the issue against nodes in their // this prevents exploiting the issue against nodes in their initial block download.
// initial block download. bool fEnforceBIP30 = true;
bool fEnforceBIP30 = (!pindex->phashBlock) || // Enforce on CreateNewBlock invocations which don't have a hash.
!((pindex->nHeight==91842 && pindex->GetBlockHash() == uint256("0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")) ||
(pindex->nHeight==91880 && pindex->GetBlockHash() == uint256("0x00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721")));
if (fEnforceBIP30) { if (fEnforceBIP30) {
BOOST_FOREACH(const CTransaction& tx, block.vtx) { BOOST_FOREACH(const CTransaction& tx, block.vtx) {
const CCoins* coins = view.AccessCoins(tx.GetHash()); const CCoins* coins = view.AccessCoins(tx.GetHash());
@ -1679,8 +1676,8 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
} }
} }
// BIP16 didn't become active until Apr 1 2012 // BIP16 didn't become active until Oct 1 2012
int64_t nBIP16SwitchTime = 1333238400; int64_t nBIP16SwitchTime = 1349049600;
bool fStrictPayToScriptHash = (pindex->GetBlockTime() >= nBIP16SwitchTime); bool fStrictPayToScriptHash = (pindex->GetBlockTime() >= nBIP16SwitchTime);
unsigned int flags = fStrictPayToScriptHash ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE; unsigned int flags = fStrictPayToScriptHash ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE;

View File

@ -174,8 +174,8 @@ Value addnode(const Array& params, bool fHelp)
"1. \"node\" (string, required) The node (see getpeerinfo for nodes)\n" "1. \"node\" (string, required) The node (see getpeerinfo for nodes)\n"
"2. \"command\" (string, required) 'add' to add a node to the list, 'remove' to remove a node from the list, 'onetry' to try a connection to the node once\n" "2. \"command\" (string, required) 'add' to add a node to the list, 'remove' to remove a node from the list, 'onetry' to try a connection to the node once\n"
"\nExamples:\n" "\nExamples:\n"
+ HelpExampleCli("addnode", "\"192.168.0.6:8333\" \"onetry\"") + HelpExampleCli("addnode", "\"192.168.0.6:9333\" \"onetry\"")
+ HelpExampleRpc("addnode", "\"192.168.0.6:8333\", \"onetry\"") + HelpExampleRpc("addnode", "\"192.168.0.6:9333\", \"onetry\"")
); );
string strNode = params[0].get_str(); string strNode = params[0].get_str();
@ -228,7 +228,7 @@ Value getaddednodeinfo(const Array& params, bool fHelp)
" \"connected\" : true|false, (boolean) If connected\n" " \"connected\" : true|false, (boolean) If connected\n"
" \"addresses\" : [\n" " \"addresses\" : [\n"
" {\n" " {\n"
" \"address\" : \"192.168.0.201:8333\", (string) The bitcoin server host and port\n" " \"address\" : \"192.168.0.201:9333\", (string) The bitcoin server host and port\n"
" \"connected\" : \"outbound\" (string) connection, inbound or outbound\n" " \"connected\" : \"outbound\" (string) connection, inbound or outbound\n"
" }\n" " }\n"
" ,...\n" " ,...\n"

View File

@ -95,7 +95,7 @@ static inline int64_t roundint64(double d)
CAmount AmountFromValue(const Value& value) CAmount AmountFromValue(const Value& value)
{ {
double dAmount = value.get_real(); double dAmount = value.get_real();
if (dAmount <= 0.0 || dAmount > 21000000.0) if (dAmount <= 0.0 || dAmount > 84000000.0)
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount"); throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount");
CAmount nAmount = roundint64(dAmount * COIN); CAmount nAmount = roundint64(dAmount * COIN);
if (!MoneyRange(nAmount)) if (!MoneyRange(nAmount))
@ -1027,7 +1027,7 @@ std::string HelpExampleCli(string methodname, string args){
std::string HelpExampleRpc(string methodname, string args){ std::string HelpExampleRpc(string methodname, string args){
return "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", " return "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", "
"\"method\": \"" + methodname + "\", \"params\": [" + args + "] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/\n"; "\"method\": \"" + methodname + "\", \"params\": [" + args + "] }' -H 'content-type: text/plain;' http://127.0.0.1:9332/\n";
} }
const CRPCTable tableRPC; const CRPCTable tableRPC;

View File

@ -60,15 +60,15 @@ BOOST_AUTO_TEST_CASE(netbase_splithost)
BOOST_CHECK(TestSplitHost("www.bitcoin.org:80", "www.bitcoin.org", 80)); BOOST_CHECK(TestSplitHost("www.bitcoin.org:80", "www.bitcoin.org", 80));
BOOST_CHECK(TestSplitHost("[www.bitcoin.org]:80", "www.bitcoin.org", 80)); BOOST_CHECK(TestSplitHost("[www.bitcoin.org]:80", "www.bitcoin.org", 80));
BOOST_CHECK(TestSplitHost("127.0.0.1", "127.0.0.1", -1)); BOOST_CHECK(TestSplitHost("127.0.0.1", "127.0.0.1", -1));
BOOST_CHECK(TestSplitHost("127.0.0.1:8333", "127.0.0.1", 8333)); BOOST_CHECK(TestSplitHost("127.0.0.1:9333", "127.0.0.1", 9333));
BOOST_CHECK(TestSplitHost("[127.0.0.1]", "127.0.0.1", -1)); BOOST_CHECK(TestSplitHost("[127.0.0.1]", "127.0.0.1", -1));
BOOST_CHECK(TestSplitHost("[127.0.0.1]:8333", "127.0.0.1", 8333)); BOOST_CHECK(TestSplitHost("[127.0.0.1]:9333", "127.0.0.1", 9333));
BOOST_CHECK(TestSplitHost("::ffff:127.0.0.1", "::ffff:127.0.0.1", -1)); BOOST_CHECK(TestSplitHost("::ffff:127.0.0.1", "::ffff:127.0.0.1", -1));
BOOST_CHECK(TestSplitHost("[::ffff:127.0.0.1]:8333", "::ffff:127.0.0.1", 8333)); BOOST_CHECK(TestSplitHost("[::ffff:127.0.0.1]:9333", "::ffff:127.0.0.1", 9333));
BOOST_CHECK(TestSplitHost("[::]:8333", "::", 8333)); BOOST_CHECK(TestSplitHost("[::]:9333", "::", 9333));
BOOST_CHECK(TestSplitHost("::8333", "::8333", -1)); BOOST_CHECK(TestSplitHost("::9333", "::9333", -1));
BOOST_CHECK(TestSplitHost(":8333", "", 8333)); BOOST_CHECK(TestSplitHost(":9333", "", 9333));
BOOST_CHECK(TestSplitHost("[]:8333", "", 8333)); BOOST_CHECK(TestSplitHost("[]:9333", "", 9333));
BOOST_CHECK(TestSplitHost("", "", -1)); BOOST_CHECK(TestSplitHost("", "", -1));
} }
@ -83,10 +83,10 @@ bool static TestParse(string src, string canon)
BOOST_AUTO_TEST_CASE(netbase_lookupnumeric) BOOST_AUTO_TEST_CASE(netbase_lookupnumeric)
{ {
BOOST_CHECK(TestParse("127.0.0.1", "127.0.0.1:65535")); BOOST_CHECK(TestParse("127.0.0.1", "127.0.0.1:65535"));
BOOST_CHECK(TestParse("127.0.0.1:8333", "127.0.0.1:8333")); BOOST_CHECK(TestParse("127.0.0.1:9333", "127.0.0.1:9333"));
BOOST_CHECK(TestParse("::ffff:127.0.0.1", "127.0.0.1:65535")); BOOST_CHECK(TestParse("::ffff:127.0.0.1", "127.0.0.1:65535"));
BOOST_CHECK(TestParse("::", "[::]:65535")); BOOST_CHECK(TestParse("::", "[::]:65535"));
BOOST_CHECK(TestParse("[::]:8333", "[::]:8333")); BOOST_CHECK(TestParse("[::]:9333", "[::]:9333"));
BOOST_CHECK(TestParse("[127.0.0.1]", "127.0.0.1:65535")); BOOST_CHECK(TestParse("[127.0.0.1]", "127.0.0.1:65535"));
BOOST_CHECK(TestParse(":::", "")); BOOST_CHECK(TestParse(":::", ""));
} }

View File

@ -17,7 +17,7 @@ class CAutoFile;
inline double AllowFreeThreshold() inline double AllowFreeThreshold()
{ {
return COIN * 144 / 250; return COIN * 576 / 250;
} }
inline bool AllowFree(double dPriority) inline bool AllowFree(double dPriority)