aboutsummaryrefslogtreecommitdiff
path: root/src/p2p/net_node.h (follow)
AgeCommit message (Collapse)AuthorFilesLines
2021-01-19Remove payload copy in all outgoing p2p messagesLee Clagett1-3/+2
2021-04-16Revert "Merge pull request #7136"luigi11111-2/+3
This reverts commit 63c7ca07fba2f063c760f786a986fb3e02fb040e, reversing changes made to 2218e23e84a89e9a1e4c0be5d50f891ab836754f.
2021-01-16Remove payload copy in all outgoing p2p messagesLee Clagett1-3/+2
2021-02-15p2p: add --max-connections-per-ip daemon optionmoneromooo-monero1-1/+5
Helps daemons behind a proxy get more than one connection. Defaults to 1 (no change)
2020-12-22Command max_bytes moved from dynamic map to static switchLee Clagett1-2/+0
2020-12-17Add aggressive restrictions to pre-handshake p2p buffer limitLee Clagett1-0/+3
2020-12-20Optional DNS based blocklistmoneromooo-monero1-1/+6
If enabled, pulls IPs to block on blocklist.moneropulse.*, and blocks then for 8 days (so IPs dropping from the list will eventually get unblocked, and DNS failures don't result in instant clearing of the blocklist). Enable with --enable-dns-blocklist
2020-12-07Merge pull request #7070luigi11111-1/+1
281b42a p2p: fix race condition accessing a deleted context (moneromooo-monero)
2020-12-06p2p: fix race condition accessing a deleted contextmoneromooo-monero1-1/+1
2020-12-04Merge pull request #7017Alexander Blair1-1/+1
13350f79d Do not use peer_id tracking method over i2p/tor (Lee Clagett)
2020-11-29Merge pull request #6920luigi11111-0/+1
aad2f87 net_node: add --ban-list option (selsta)
2020-11-29Merge pull request #6897luigi11111-8/+15
2abdbf6 Add support for i2p and tor seed nodes (vtnerd)
2020-10-20net_node: add --ban-list optionselsta1-0/+1
2020-10-19Add support for i2p and tor seed nodesLee Clagett1-8/+15
2020-10-15Do not use peer_id tracking method over i2p/torLee Clagett1-1/+1
2020-10-12Dandelion++: skip desynced peers in stem phasexiphon1-1/+1
2020-05-06Update copyright year to 2020SomaticFanatic1-1/+1
Update copyright year to 2020
2020-05-01Merge pull request #6443luigi11111-1/+4
145be6d p2p: startup speedup, init seed nodes on first 'connect_to_seed()' (xiphon)
2020-04-21p2p: startup speedup, init seed nodes on first 'connect_to_seed()'xiphon1-1/+4
2020-03-27Merge pull request #6295Alexander Blair1-1/+1
bcae95a2 p2p: do not add recently failed addresses to the peerlist (moneromooo-monero)
2020-03-26Adding Dandelion++ support to public networks:Lee Clagett1-1/+1
- New flag in NOTIFY_NEW_TRANSACTION to indicate stem mode - Stem loops detected in tx_pool.cpp - Embargo timeout for a blackhole attack during stem phase
2020-03-20p2p: remove old debug commandsAaron Hook1-17/+0
2020-03-20p2p: do not add recently failed addresses to the peerlistmoneromooo-monero1-1/+1
2020-01-29p2p: avoid sending the same peer list over and overmoneromooo-monero1-0/+1
Nodes remember which connections have been sent which peer addresses and won't send it again. This causes more addresses to be sent as the connection lifetime grows, since there is no duplication anymore, which increases the diffusion speed of peer addresses. The whole white list is now considered for sending, not just the most recent seen peers. This further hardens against topology discovery, though it will more readily send peers that have been last seen earlier than it otherwise would. While this does save a fair amount of net bandwidth, it makes heavy use of std::set lookups, which does bring network_address::less up the profile, though not too aggressively.
2020-01-26p2p: remove obsolete local time from TIMED_SYNCmoneromooo-monero1-1/+1
2019-11-04Change to Tx diffusion (Dandelion++ fluff) instead of floodingLee Clagett1-2/+12
2019-11-02Adding support for hidden (anonymity) txpoolLee Clagett1-1/+2
2019-10-25Merge pull request #6021luigi11111-1/+1
65e8a89 Change monerod --proxy to --tx-proxy (vtnerd)
2019-10-25daemon, wallet: new pay for RPC use systemmoneromooo-monero1-0/+7
Daemons intended for public use can be set up to require payment in the form of hashes in exchange for RPC service. This enables public daemons to receive payment for their work over a large number of calls. This system behaves similarly to a pool, so payment takes the form of valid blocks every so often, yielding a large one off payment, rather than constant micropayments. This system can also be used by third parties as a "paywall" layer, where users of a service can pay for use by mining Monero to the service provider's address. An example of this for web site access is Primo, a Monero mining based website "paywall": https://github.com/selene-kovri/primo This has some advantages: - incentive to run a node providing RPC services, thereby promoting the availability of third party nodes for those who can't run their own - incentive to run your own node instead of using a third party's, thereby promoting decentralization - decentralized: payment is done between a client and server, with no third party needed - private: since the system is "pay as you go", you don't need to identify yourself to claim a long lived balance - no payment occurs on the blockchain, so there is no extra transactional load - one may mine with a beefy server, and use those credits from a phone, by reusing the client ID (at the cost of some privacy) - no barrier to entry: anyone may run a RPC node, and your expected revenue depends on how much work you do - Sybil resistant: if you run 1000 idle RPC nodes, you don't magically get more revenue - no large credit balance maintained on servers, so they have no incentive to exit scam - you can use any/many node(s), since there's little cost in switching servers - market based prices: competition between servers to lower costs - incentive for a distributed third party node system: if some public nodes are overused/slow, traffic can move to others - increases network security - helps counteract mining pools' share of the network hash rate - zero incentive for a payer to "double spend" since a reorg does not give any money back to the miner And some disadvantages: - low power clients will have difficulty mining (but one can optionally mine in advance and/or with a faster machine) - payment is "random", so a server might go a long time without a block before getting one - a public node's overall expected payment may be small Public nodes are expected to compete to find a suitable level for cost of service. The daemon can be set up this way to require payment for RPC services: monerod --rpc-payment-address 4xxxxxx \ --rpc-payment-credits 250 --rpc-payment-difficulty 1000 These values are an example only. The --rpc-payment-difficulty switch selects how hard each "share" should be, similar to a mining pool. The higher the difficulty, the fewer shares a client will find. The --rpc-payment-credits switch selects how many credits are awarded for each share a client finds. Considering both options, clients will be awarded credits/difficulty credits for every hash they calculate. For example, in the command line above, 0.25 credits per hash. A client mining at 100 H/s will therefore get an average of 25 credits per second. For reference, in the current implementation, a credit is enough to sync 20 blocks, so a 100 H/s client that's just starting to use Monero and uses this daemon will be able to sync 500 blocks per second. The wallet can be set to automatically mine if connected to a daemon which requires payment for RPC usage. It will try to keep a balance of 50000 credits, stopping mining when it's at this level, and starting again as credits are spent. With the example above, a new client will mine this much credits in about half an hour, and this target is enough to sync 500000 blocks (currently about a third of the monero blockchain). There are three new settings in the wallet: - credits-target: this is the amount of credits a wallet will try to reach before stopping mining. The default of 0 means 50000 credits. - auto-mine-for-rpc-payment-threshold: this controls the minimum credit rate which the wallet considers worth mining for. If the daemon credits less than this ratio, the wallet will consider mining to be not worth it. In the example above, the rate is 0.25 - persistent-rpc-client-id: if set, this allows the wallet to reuse a client id across runs. This means a public node can tell a wallet that's connecting is the same as one that connected previously, but allows a wallet to keep their credit balance from one run to the other. Since the wallet only mines to keep a small credit balance, this is not normally worth doing. However, someone may want to mine on a fast server, and use that credit balance on a low power device such as a phone. If left unset, a new client ID is generated at each wallet start, for privacy reasons. To mine and use a credit balance on two different devices, you can use the --rpc-client-secret-key switch. A wallet's client secret key can be found using the new rpc_payments command in the wallet. Note: anyone knowing your RPC client secret key is able to use your credit balance. The wallet has a few new commands too: - start_mining_for_rpc: start mining to acquire more credits, regardless of the auto mining settings - stop_mining_for_rpc: stop mining to acquire more credits - rpc_payments: display information about current credits with the currently selected daemon The node has an extra command: - rpc_payments: display information about clients and their balances The node will forget about any balance for clients which have been inactive for 6 months. Balances carry over on node restart.
2019-10-24Change monerod --proxy to --tx-proxyLee Clagett1-1/+1
2019-10-14Merge pull request #5943luigi11111-1/+1
d4d2b5c p2p+rpc: don't skip p2p or rpc port bind failure by default (xiphon)
2019-10-13p2p+rpc: don't skip p2p or rpc port bind failure by defaultxiphon1-1/+1
2019-09-25ban peers sending bad pow outrightmoneromooo-monero1-1/+1
PoW is expensive to verify, so be strict
2019-09-16p2p: fix bans taking port into accountmoneromooo-monero1-3/+3
2019-09-08Merge pull request #5839luigi11111-2/+1
e353e3d p2p: sanitize peer lists (moneromooo-monero)
2019-08-21p2p: sanitize peer listsmoneromooo-monero1-2/+1
Also remove the delta time fixup, since we now ignore those as they're attacker controlled
2019-08-19daemon: fix print_pl only printing public zone peersmoneromooo-monero1-0/+1
2019-07-31Add IPv6 supportThomas Winget1-1/+20
new cli options (RPC ones also apply to wallet): --p2p-bind-ipv6-address (default = "::") --p2p-bind-port-ipv6 (default same as ipv4 port for given nettype) --rpc-bind-ipv6-address (default = "::1") --p2p-use-ipv6 (default false) --rpc-use-ipv6 (default false) --p2p-require-ipv4 (default true, if ipv4 bind fails and this is true, will not continue even if ipv6 bind successful) --rpc-require-ipv4 (default true, description as above) ipv6 addresses are to be specified as "[xx:xx:xx::xx:xx]:port" except in the cases of the cli args for bind address. For those the square braces can be omitted.
2019-07-24Merge pull request #5610luigi11111-2/+10
068fa1c p2p: delay IGP probing on startup (moneromooo-monero)
2019-07-24Merge pull request #5582luigi11111-0/+2
fcfcc3a rpc: in/out peers can now return the setting's value (moneromooo-monero)
2019-07-24Merge pull request #5530luigi11111-10/+0
6abaaaa remove obsolete save_graph skeleton code (moneromooo-monero)
2019-07-17Added support for "noise" over I1P/Tor to mask Tx transmission.Lee Clagett1-2/+8
2019-07-16allow blocking whole subnetsmoneromooo-monero1-2/+7
2019-07-16p2p: store network address directly in blocked host listmoneromooo-monero1-2/+2
rather than their string representation
2019-06-06p2p: delay IGP probing on startupmoneromooo-monero1-2/+10
We might have external access without having to do this
2019-05-30rpc: in/out peers can now return the setting's valuemoneromooo-monero1-0/+2
2019-05-10remove obsolete save_graph skeleton codemoneromooo-monero1-10/+0
2019-03-19Merge pull request #5195Riccardo Spagni1-0/+1
a54e81e5 daemon: add '--no-sync' arg to optionally disable blockchain sync (xiphon)
2019-03-17Merge pull request #5190Riccardo Spagni1-0/+8
551104fb daemon: add --public-node mode, RPC port propagation over P2P (xiphon)
2019-03-05Update 2019 copyrightbinaryFate1-1/+1
2019-03-04default initialize rpc structuresmoneromooo-monero1-2/+3
2019-02-25daemon: add '--no-sync' arg to optionally disable blockchain syncxiphon1-0/+1
2019-02-25daemon: add --public-node mode, RPC port propagation over P2Pxiphon1-0/+8
2019-02-02epee: add SSL supportmoneromooo-monero1-3/+5
RPC connections now have optional tranparent SSL. An optional private key and certificate file can be passed, using the --{rpc,daemon}-ssl-private-key and --{rpc,daemon}-ssl-certificate options. Those have as argument a path to a PEM format private private key and certificate, respectively. If not given, a temporary self signed certificate will be used. SSL can be enabled or disabled using --{rpc}-ssl, which accepts autodetect (default), disabled or enabled. Access can be restricted to particular certificates using the --rpc-ssl-allowed-certificates, which takes a list of paths to PEM encoded certificates. This can allow a wallet to connect to only the daemon they think they're connected to, by forcing SSL and listing the paths to the known good certificates. To generate long term certificates: openssl genrsa -out /tmp/KEY 4096 openssl req -new -key /tmp/KEY -out /tmp/REQ openssl x509 -req -days 999999 -sha256 -in /tmp/REQ -signkey /tmp/KEY -out /tmp/CERT /tmp/KEY is the private key, and /tmp/CERT is the certificate, both in PEM format. /tmp/REQ can be removed. Adjust the last command to set expiration date, etc, as needed. It doesn't make a whole lot of sense for monero anyway, since most servers will run with one time temporary self signed certificates anyway. SSL support is transparent, so all communication is done on the existing ports, with SSL autodetection. This means you can start using an SSL daemon now, but you should not enforce SSL yet or nothing will talk to you.
2019-01-28Adding initial support for broadcasting transactions over TorLee Clagett1-70/+184
- Support for ".onion" in --add-exclusive-node and --add-peer - Add --anonymizing-proxy for outbound Tor connections - Add --anonymous-inbounds for inbound Tor connections - Support for sharing ".onion" addresses over Tor connections - Support for broadcasting transactions received over RPC exclusively over Tor (else broadcast over public IP when Tor not enabled).
2019-01-22Pruningmoneromooo-monero1-0/+15
The blockchain prunes seven eighths of prunable tx data. This saves about two thirds of the blockchain size, while keeping the node useful as a sync source for an eighth of the blockchain. No other data is currently pruned. There are three ways to prune a blockchain: - run monerod with --prune-blockchain - run "prune_blockchain" in the monerod console - run the monero-blockchain-prune utility The first two will prune in place. Due to how LMDB works, this will not reduce the blockchain size on disk. Instead, it will mark parts of the file as free, so that future data will use that free space, causing the file to not grow until free space grows scarce. The third way will create a second database, a pruned copy of the original one. Since this is a new file, this one will be smaller than the original one. Once the database is pruned, it will stay pruned as it syncs. That is, there is no need to use --prune-blockchain again, etc.
2019-01-16Merge pull request #4976Riccardo Spagni1-4/+4
85665003 epee: better network buffer data structure (moneromooo-monero)
2018-12-23epee: better network buffer data structuremoneromooo-monero1-4/+4
avoids pointless allocs and memcpy
2018-12-07p2p: use vector instead of list for peer listsmoneromooo-monero1-3/+3
2018-12-04Merge pull request #4854Riccardo Spagni1-1/+3
bd98e99c Removed a lot of unnecessary includes (Martijn Otto)
2018-11-16Merge pull request #4776Riccardo Spagni1-1/+1
03fc731b p2p: less frequent incoming connections check (moneromooo-monero) 14a5c206 p2p: tone down "no incoming connections" warning to info if in peers is 0 (moneromooo-monero)
2018-11-15Removed a lot of unnecessary includesMartijn Otto1-1/+3
2018-11-01p2p: less frequent incoming connections checkmoneromooo-monero1-1/+1
2018-10-31Expose limit-rate defaults from command line helpRaskaRuby1-2/+2
2018-06-19Merge pull request #3861luigi11111-0/+2
de1ffe0 p2p: warn when no incoming connections are seen for a while (moneromooo-monero)
2018-05-26p2p: warn when no incoming connections are seen for a whilemoneromooo-monero1-0/+2
2018-04-29p2p: fix fallback seed node usagemoneromooo-monero1-0/+1
Those were added to the seed nodes list even when they had already been added. Moreover, the current index was not reset after they were added, typically causing previous seeds to be used, and some of those fallback seeds to not be tried.
2018-04-25Fix broken interactive daemon 'limit' commands plus RPC callsrbrunner71-2/+2
2018-03-05Stagenetstoffu1-3/+3
2018-02-16options: remove testnet-* optionswhythat1-2/+1
2018-02-16Merge pull request #3226Riccardo Spagni1-1/+1
e4646379 keccak: fix mdlen bounds sanity checking (moneromooo-monero) 2e3e90ac pass large parameters by const ref, not value (moneromooo-monero) 61defd89 blockchain: sanity check number of precomputed hash of hash blocks (moneromooo-monero) 9af6b2d1 ringct: fix infinite loop in unused h2b function (moneromooo-monero) 8cea8d0c simplewallet: double check a new multisig wallet is multisig (moneromooo-monero) 9b98a6ac threadpool: catch exceptions in dtor, to avoid terminate (moneromooo-monero) 24803ed9 blockchain_export: fix buffer overflow in exporter (moneromooo-monero) f3f7da62 perf_timer: rewrite to make it clear there is no division by zero (moneromooo-monero) c6ea3df0 performance_tests: remove add_arg call stray extra param (moneromooo-monero) fa6b4566 fuzz_tests: fix an uninitialized var in setup (moneromooo-monero) 03887f11 keccak: fix sanity check bounds test (moneromooo-monero) ad11db91 blockchain_db: initialize m_open in base class ctor (moneromooo-monero) bece67f9 miner: restore std::cout precision after modification (moneromooo-monero) 1aabd14c db_lmdb: check hard fork info drop succeeded (moneromooo-monero)
2018-02-02pass large parameters by const ref, not valuemoneromooo-monero1-1/+1
Coverity 136394 136397 136409 136526 136529 136533 175302
2018-01-29Allow the number of incoming connections to be limitedErik de Castro Lopo1-0/+6
It was already possible to limit outgoing connections. One might want to do this on home network connections with high bandwidth but low usage caps.
2018-01-29Rename delete_connections to delete_out_connectionsErik de Castro Lopo1-1/+1
This rename is needed so that delete_in_connections can be added.
2018-01-26Update 2018 copyrightxmr-eric1-1/+1
2017-12-16cryptonote_core does not depend on p2p anymoremoneromooo-monero1-9/+24
As a followon side effect, this makes a lot of inline code included only in particular cpp files (and instanciated when necessary.
2017-09-01Rename m_listenning_port to m_listening_portMaxXor1-2/+2
2017-08-29Delete UPnP port mapping on exitMaxXor1-0/+2
2017-08-09p2p: fallback on seed nodes if we can't make a connectionmoneromooo-monero1-0/+1
This avoids failing to connect to the network in case all known peers are unavailable (which can happen if the peer list is small).
2017-08-08net_node: fix m_in_timedsync initializationmoneromooo-monero1-1/+1
This fixes nodes not being able to connect to nodes which use recent code. While there, init peer_id too.
2017-08-07Merge pull request #2149Riccardo Spagni1-0/+1
158c3ecf core: thread most of handle_incoming_tx (moneromooo-monero) f57ee382 cryptonote_protocol: retry stale spans early (moneromooo-monero) 90df52e1 cryptonote_protocol: light cleanup (moneromooo-monero) 84e23156 cryptonote_protocol: avoid spurious SYNCHRONIZED OK messages (moneromooo-monero) 5be43fcd cryptonote_protocol_handler: sync speedup (moneromooo-monero)
2017-08-07cryptonote_protocol_handler: sync speedupmoneromooo-monero1-0/+1
A block queue is now placed between block download and block processing. Blocks are now requested only from one peer (unless starved). Includes a new sync_info coommand.
2017-08-01p2p: move m_in_timedsync from connection_context to p2p_connection_contextmoneromooo-monero1-0/+3
It's got no place in the base class as it's P2P specific field
2017-05-27abstracted nework addressesmoneromooo-monero1-21/+21
All code which was using ip and port now uses a new IPv4 object, subclass of a new network_address class. This will allow easy addition of I2P addresses later (and also IPv6, etc). Both old style and new style peer lists are now sent in the P2P protocol, which is inefficient but allows peers using both codebases to talk to each other. This will be removed in the future. No other subclasses than IPv4 exist yet.
2017-05-05Merge pull request #1701Riccardo Spagni1-2/+6
8277e67f Add anchor connections (Miguel Herranz)
2017-03-18p2p: use the fallback seed IPs when not enough seeds are foundmoneromooo-monero1-1/+3
In case the DNS seed(s) is/are down, which would otherwise cause the fallback seeds to never be used. Also if the seeds resolve to too few IPs.
2017-02-21update copyright year, fix occasional lack of newline at line endRiccardo Spagni1-1/+1
2017-02-12net_node: fix spurious warning about using uninitialized datamoneromooo-monero1-1/+1
This is only used to load, not save
2017-02-10Add anchor connectionsMiguel Herranz1-2/+6
Based on https://eprint.iacr.org/2015/263.pdf 4. Anchor connections. Peer list serialisation version bumped to 5.
2017-01-22Remove boost/foreach.cpp includesMiguel Herranz1-1/+0
2017-01-22Merge pull request #1609Riccardo Spagni1-1/+7
4cdf0a35 p2p: always recreate a new peer id on startup (moneromooo-monero)
2017-01-22p2p: always recreate a new peer id on startupmoneromooo-monero1-1/+7
This prevents easy fingerprinting when you change IPs, and will be a must when kovri gets used.
2017-01-21Add gray peer list housekeeping systemMiguel Herranz1-0/+4
A random peer from the gray peer list is selected and a connection is made to check if the peer is alive. If the connection and handshake are successful the peer is promoted to the white peer list, in case of failure the peer is evicted from the gray peer list. The connection is closed after the check in either case.
2017-01-15Limit incoming connections from the same IPMiguel Herranz1-0/+2
2016-12-01p2p: possibly fix crash in relay_blocksmoneromooo-monero1-0/+1
2016-11-09add lightweight block propagation ("fluffy blocks")Dion Ahmetaj1-1/+7
Added a new command to the P2P protocol definitions to allow querying for support flags. Implemented handling of new support flags command in net_node. Changed for_each callback template to include support flags. Updated print_connections command to show peer support flags. Added p2p constant for signaling fluffy block support. Added get_pool_transaction function to cryptnote_core. Added new commands to cryptonote protocol for relaying fluffy blocks. Implemented handling of fluffy block command in cryptonote protocol. Enabled fluffy block support in node initial configuration. Implemented get_testnet function in cryptonote_core. Made it so that fluffy blocks only run on testnet.
2016-03-12p2p: lock access to the blocked ips mapmoneromooo-monero1-1/+1
2016-02-18Use boost::thread instead of std::threadHoward Chu1-1/+1
std::thread crashes on (at least) ARMv6 g++ 4.8/4.9
2015-12-31updated copyright yearRiccardo Spagni1-1/+1
2015-12-15Replace tabs with two spaces for consistency with rest of codebasewarptangent1-33/+33
Remove trailing whitespace in same files.
2015-12-07net_node: add a --offline argumentmoneromooo-monero1-0/+2
It will not try to connect to the monero network, nor listen
2015-11-26add RPC calls and commands to get/set bansmoneromooo-monero1-1/+3
2015-11-25net_node: allow bans for custom amounts of timemoneromooo-monero1-1/+1
m_blocked_ips now stores the unblocking time, rather than the blocking time. Also change > to >=, since banning for 0 seconds should not ban
2015-11-23Add IP blocking for misbehaving nodes (adapted from Boolberry)Javier Smooth1-1/+18
With minor cleanup and fixes (spelling, indent) by moneromooo
2015-07-15** CHANGES ARE EXPERIMENTAL (FOR TESTING ONLY)NoodleDoodleNoodleDoodleNoodleDoodleNoo1-1/+2
Bockchain: 1. Optim: Multi-thread long-hash computation when encountering groups of blocks. 2. Optim: Cache verified txs and return result from cache instead of re-checking whenever possible. 3. Optim: Preload output-keys when encoutering groups of blocks. Sort by amount and global-index before bulk querying database and multi-thread when possible. 4. Optim: Disable double spend check on block verification, double spend is already detected when trying to add blocks. 5. Optim: Multi-thread signature computation whenever possible. 6. Patch: Disable locking (recursive mutex) on called functions from check_tx_inputs which causes slowdowns (only seems to happen on ubuntu/VMs??? Reason: TBD) 7. Optim: Removed looped full-tx hash computation when retrieving transactions from pool (???). 8. Optim: Cache difficulty/timestamps (735 blocks) for next-difficulty calculations so that only 2 db reads per new block is needed when a new block arrives (instead of 1470 reads). Berkeley-DB: 1. Fix: 32-bit data errors causing wrong output global indices and failure to send blocks to peers (etc). 2. Fix: Unable to pop blocks on reorganize due to transaction errors. 3. Patch: Large number of transaction aborts when running multi-threaded bulk queries. 4. Patch: Insufficient locks error when running full sync. 5. Patch: Incorrect db stats when returning from an immediate exit from "pop block" operation. 6. Optim: Add bulk queries to get output global indices. 7. Optim: Modified output_keys table to store public_key+unlock_time+height for single transaction lookup (vs 3) 8. Optim: Used output_keys table retrieve public_keys instead of going through output_amounts->output_txs+output_indices->txs->output:public_key 9. Optim: Added thread-safe buffers used when multi-threading bulk queries. 10. Optim: Added support for nosync/write_nosync options for improved performance (*see --db-sync-mode option for details) 11. Mod: Added checkpoint thread and auto-remove-logs option. 12. *Now usable on 32-bit systems like RPI2. LMDB: 1. Optim: Added custom comparison for 256-bit key tables (minor speed-up, TBD: get actual effect) 2. Optim: Modified output_keys table to store public_key+unlock_time+height for single transaction lookup (vs 3) 3. Optim: Used output_keys table retrieve public_keys instead of going through output_amounts->output_txs+output_indices->txs->output:public_key 4. Optim: Added support for sync/writemap options for improved performance (*see --db-sync-mode option for details) 5. Mod: Auto resize to +1GB instead of multiplier x1.5 ETC: 1. Minor optimizations for slow-hash for ARM (RPI2). Incomplete. 2. Fix: 32-bit saturation bug when computing next difficulty on large blocks. [PENDING ISSUES] 1. Berkely db has a very slow "pop-block" operation. This is very noticeable on the RPI2 as it sometimes takes > 10 MINUTES to pop a block during reorganization. This does not happen very often however, most reorgs seem to take a few seconds but it possibly depends on the number of outputs present. TBD. 2. Berkeley db, possible bug "unable to allocate memory". TBD. [NEW OPTIONS] (*Currently all enabled for testing purposes) 1. --fast-block-sync arg=[0:1] (default: 1) a. 0 = Compute long hash per block (may take a while depending on CPU) b. 1 = Skip long-hash and verify blocks based on embedded known good block hashes (faster, minimal CPU dependence) 2. --db-sync-mode arg=[[safe|fast|fastest]:[sync|async]:[nblocks_per_sync]] (default: fastest:async:1000) a. safe = fdatasync/fsync (or equivalent) per stored block. Very slow, but safest option to protect against power-out/crash conditions. b. fast/fastest = Enables asynchronous fdatasync/fsync (or equivalent). Useful for battery operated devices or STABLE systems with UPS and/or systems with battery backed write cache/solid state cache. Fast - Write meta-data but defer data flush. Fastest - Defer meta-data and data flush. Sync - Flush data after nblocks_per_sync and wait. Async - Flush data after nblocks_per_sync but do not wait for the operation to finish. 3. --prep-blocks-threads arg=[n] (default: 4 or system max threads, whichever is lower) Max number of threads to use when computing long-hash in groups. 4. --show-time-stats arg=[0:1] (default: 1) Show benchmark related time stats. 5. --db-auto-remove-logs arg=[0:1] (default: 1) For berkeley-db only. Auto remove logs if enabled. **Note: lmdb and berkeley-db have changes to the tables and are not compatible with official git head version. At the moment, you need a full resync to use this optimized version. [PERFORMANCE COMPARISON] **Some figures are approximations only. Using a baseline machine of an i7-2600K+SSD+(with full pow computation): 1. The optimized lmdb/blockhain core can process blocks up to 585K for ~1.25 hours + download time, so it usually takes 2.5 hours to sync the full chain. 2. The current head with memory can process blocks up to 585K for ~4.2 hours + download time, so it usually takes 5.5 hours to sync the full chain. 3. The current head with lmdb can process blocks up to 585K for ~32 hours + download time and usually takes 36 hours to sync the full chain. Averate procesing times (with full pow computation): lmdb-optimized: 1. tx_ave = 2.5 ms / tx 2. block_ave = 5.87 ms / block memory-official-repo: 1. tx_ave = 8.85 ms / tx 2. block_ave = 19.68 ms / block lmdb-official-repo (0f4a036437fd41a5498ee5e74e2422ea6177aa3e) 1. tx_ave = 47.8 ms / tx 2. block_ave = 64.2 ms / block **Note: The following data denotes processing times only (does not include p2p download time) lmdb-optimized processing times (with full pow computation): 1. Desktop, Quad-core / 8-threads 2600k (8Mb) - 1.25 hours processing time (--db-sync-mode=fastest:async:1000). 2. Laptop, Dual-core / 4-threads U4200 (3Mb) - 4.90 hours processing time (--db-sync-mode=fastest:async:1000). 3. Embedded, Quad-core / 4-threads Z3735F (2x1Mb) - 12.0 hours processing time (--db-sync-mode=fastest:async:1000). lmdb-optimized processing times (with per-block-checkpoint) 1. Desktop, Quad-core / 8-threads 2600k (8Mb) - 10 minutes processing time (--db-sync-mode=fastest:async:1000). berkeley-db optimized processing times (with full pow computation) 1. Desktop, Quad-core / 8-threads 2600k (8Mb) - 1.8 hours processing time (--db-sync-mode=fastest:async:1000). 2. RPI2. Improved from estimated 3 months(???) into 2.5 days (*Need 2AMP supply + Clock:1Ghz + [usb+ssd] to achieve this speed) (--db-sync-mode=fastest:async:1000). berkeley-db optimized processing times (with per-block-checkpoint) 1. RPI2. 12-15 hours (*Need 2AMP supply + Clock:1Ghz + [usb+ssd] to achieve this speed) (--db-sync-mode=fastest:async:1000).
2015-05-06Merge branch 'clang_fixes' into clang_fixes-masterSergey Kazenyuk1-6/+7
2015-04-20Fix missing virtual destructorSergey Kazenyuk1-0/+2
2015-04-08[fix] Network 1.8: unlimited the RPC connectionsrfree2monero1-1/+2
works for unit tests build, too
2015-04-01remerged; commands JSON. logging upgrade. doxygenrfree2monero1-8/+11
2015-04-01Merge remote-tracking branch 'monero-official/master' into network-1.6-work1rfree2monero1-12/+8
2015-02-24fix locking in count-peers thread (2)rfree2monero1-1/+10
2015-02-24Daemonize changes pulled in -- daemon buildsThomas Winget1-3/+1
many RPC functions added by the daemonize changes (and related changes on the upstream dev branch that were not merged) were commented out (apart from return). Other than that, this *should* work...at any rate, it builds, and that's something.
2015-02-202014 network limit 1.2 +utils +toc -doc -drmonerorfree2monero1-2/+2
new update of the pr with network limits more debug options: discarding downloaded blocks all or after given height. trying to trigger the locking errors. debug levels polished/tuned to sane values. debug/logging improved. warning: this pr should be correct code, but it could make an existing (in master version) locking error appear more often. it's a race on the list (map) of peers, e.g. between closing/deleting them versus working on them in net-limit sleep in sending chunk. the bug is not in this code/this pr, but in the master version. the locking problem of master will be fixed in other pr. problem is ub, and in practice is seems to usually cause program abort (tested on debian stable with updated gcc). see --help for option to add sleep to trigger the error faster.
2015-02-202014 network limit 1.1 +utils +toc -doc -drmonerorfree2monero1-1/+11
Update of the PR with network limits works very well for all speeds (but remember that low download speed can stop upload because we then slow down downloading of blockchain requests too) more debug options fixed pedantic warnings in our code should work again on Mac OS X and FreeBSD fixed warning about size_t tested on Debian, Ubuntu, Windows(testing now) TCP options and ToS (QoS) flag FIXED peer number limit FIXED some spikes in ingress/download FIXED problems when other up and down limit
2015-02-202014 network limit 1.0a +utils +toc -doc -drmonerorfree2monero1-9/+22
commands and options for network limiting works very well e.g. for 50 KiB/sec up and down ToS (QoS) flag peer number limit TODO some spikes in ingress/download TODO problems when other up and down limit added "otshell utils" - simple logging (with colors, text files channels)
2015-01-02year updated in licenseRiccardo Spagni1-1/+1
2014-09-23ipv4 and ipv6 resolution workingThomas Winget1-0/+7
IPv4 and IPv6 name resolution working. Unit tests written (and passing). net_node.{h,inl} code modified to use DNS seeds.
2014-09-15Separate network id for testnetZachary Michaels1-2/+10
2014-09-15Separate p2p port for testnetZachary Michaels1-1/+4
2014-09-15Reorganize testnet constantsZachary Michaels1-2/+2
2014-09-15Add testnet flagZachary Michaels1-2/+3
Source: cryptonotefoundation
2014-07-23License updated to BSD 3-clausefluffypony1-3/+29
2014-05-250.8.8updatemydesktop1-9/+16
2014-03-20some fixesAntonio Juarez1-1/+1
2014-03-03moved all stuff to githubAntonio Juarez1-0/+204