Commit Graph

173 Commits

Author SHA1 Message Date
Jude Nelson
fe8741da4b all rpc_ methods receive **con_info to contain client information 2016-08-22 18:00:05 -04:00
Jude Nelson
f67c2258b1 rework peer discovery and peer retention logic:
* use metropolis-hastings random walk with random backtracking (variant of MRWB)
to sample the peer graph in as unbiased a way as we can.  The only major
difference between this and MRWB is that we don't maintain a peer stack;
we just select a random peer instead of backtracking.
* keep the peer table and the peer database in sync--the table is the
cache-coherent copy.
* keep only 65536 peers.  Hash the peer address and a nonce to select a
slot, and ping an old peer before evicting it on collision (and keep the
old peer on collision if it responds)
* a peer can ask for all other peers.
* remove up to 10 peers that are unhealthy per walk; add up to 10 new
peers that we discover on remote peer queries.
* use socket-determined peer address, not RPC-given peer address
* various code cleanups.
2016-08-22 17:55:58 -04:00
Jude Nelson
566b6f5735 numerous bugfixes found in testing 2016-08-18 18:33:54 -04:00
Jude Nelson
5e6344dc37 atlas inventory requests are in terms of byte offset and length 2016-08-18 18:33:25 -04:00
Jude Nelson
4ac8651741 use correct zonefile cache path; disable update tx check when testing 2016-08-18 18:33:08 -04:00
Jude Nelson
f71b91983a plumb through atlas support to peer and zonefile queries 2016-08-17 00:36:54 -04:00
Jude Nelson
5fc3851aed more work on atlas support:
* push zonefiles if we receive them, and know of another peer that needs
them (i.e. should happen frequently near the chain tip)
* when getting the peer list, queue the requester for pinging
* move unit tests to integration test framework
2016-08-17 00:35:59 -04:00
Jude Nelson
d01edf1f10 WIP: Atlas peer code and (rough) unit tests.
* Atlas nodes are a lot like BitTorrent nodes, where the blockchain
gets used to encode the sequence of zonefiles (chunks) a peer goes and
fetches.
* Atlas nodes discover each other from a set of seed nodes, and try
to construct a K-regular network graph using a random walk through
the peers neighbor relations.
* Atlas nodes propagate peer information to each other in a "K-rarest
known peers that are alive" fashion, to encourage even peer mixing.
* Atlas nodes maintain a bitwise big-endian "zonefile inventory vector"
where bit i is set if the ith NAME_UPDATE's associated zonefile has
been obtained.
* Atlas nodes exchange zonefile inventory vectors amongst their
neighbors in an effort to find missing zonefiles.  They obtain zonefiles
in a rarest-first fashion--i.e. the first missing zonefile to fetch
should be the one known by the least amount of neighbors.
* Atlas nodes occasionally refresh inventory vectors with neighbors to
ensure that knowledge of a zonefile propagates through the network.

This is mostly untested code, save for what the unit tests at the end of
the file cover.  TODO: integrate with CircleCI
2016-08-15 18:20:43 -04:00
Jude Nelson
9de8cb6fdb update symbols 2016-08-15 18:20:35 -04:00
Jude Nelson
7b69b499cc tweak comments; add get_zonefile_hashes_at() for Atlas node support 2016-08-15 18:20:18 -04:00
Jude Nelson
7cd61e362f remove dead imports; if unit-testing, then set a version directly (won't
be used unless the right envars are set)
2016-08-15 18:19:41 -04:00
Jude Nelson
3d96a7ad55 WIP: add Atlas RPC methods 2016-08-15 18:19:26 -04:00
Jude Nelson
5e570de5bf remove dead code 2016-08-15 18:19:12 -04:00
Jude Nelson
21285a9d7e remove dead code 2016-08-15 18:19:00 -04:00
Jude Nelson
6263fb41a2 add tx_filter to select only 'id' op_returns 2016-08-10 19:49:18 -04:00
Jude Nelson
59930bfcbf use blockstack_client's semvar; add expected_snapshots argument (pulled
from sqlite3 branch)
2016-08-10 19:30:58 -04:00
Jude Nelson
c8f857a241 version 0.14.0 2016-08-10 16:07:49 -04:00
Jude Nelson
4b5b72fa77 enforce op_fee formatting quirk; check for absurdly high-value transactions
while testing
2016-08-10 16:07:21 -04:00
Jude Nelson
7a7692ba8e if there's no analytics key, then log it 2016-08-10 16:07:03 -04:00
Jude Nelson
ccc6f91e5e some things don't have to be considered p2pkh scripts any longer :D 2016-08-06 00:15:45 -04:00
Jude Nelson
4656fe951a CONSENSUS-BREAKING CHANGE: if we can't find the pubkey hex in the script
sig, then set it to "", not None.  This hadn't been a problem before,
because all keys were p2pkh and always had public keys.  With multisig
support, this will no longer be the case.
2016-08-06 00:14:42 -04:00
Jude Nelson
070e9b86de period 2016-08-06 00:14:32 -04:00
Jude Nelson
0006c7b48d remove now-unneeded code 2016-08-06 00:14:07 -04:00
Jude Nelson
162c9174e9 use virtualchain's key logic 2016-08-04 15:43:06 -04:00
Jude Nelson
d86cbee2de use virtualchain's key logic 2016-08-04 15:42:51 -04:00
Jude Nelson
f0e1ad44e9 use virtualchain's key logic (to automatically use testnet); convert
import addresses to testnet addresses if we're in testnet mode.
2016-08-04 15:42:20 -04:00
Jude Nelson
4f27523f9b convert burn address hash to proper address format 2016-08-04 13:50:38 -04:00
Jude Nelson
2f4c0019e8 disable mock_bitcoind support 2016-08-04 13:50:16 -04:00
Jude Nelson
b376052833 version bump 2016-08-01 17:35:35 -04:00
Jude Nelson
18aba7382b use virtualchain's bitcoin key classes 2016-08-01 17:35:23 -04:00
Jude Nelson
ae0f59b21b use a different start block if given in the environment variable 2016-08-01 17:35:07 -04:00
Jude Nelson
667bffc4e3 Merge branch 'master' into rc-0.0.14.0 2016-07-27 17:57:45 -04:00
Jude Nelson
225b7e1964 If there is no server_version in the config file, automatically add it
when generating the new config file (#229).  However, don't add it if it
was already present in the config file, or if the config file already
exists (in which case, the appropriate action is to use the version
given, or back up the old config file).
2016-07-27 16:12:28 -04:00
Jude Nelson
ac1a610921 Hard fork: use namespace lifetime multipler to determine expiration 2016-07-27 15:36:14 -04:00
Jude Nelson
182a86a7e7 Hard fork: namespace lifetime multipler 2016-07-27 15:36:03 -04:00
Jude Nelson
bd3edd8997 Expand namespace lifetime by 4x 2016-07-20 10:37:08 -04:00
Jude Nelson
c9f441d572 version bump 2016-07-18 16:53:16 -04:00
Jude Nelson
e0ca82f97f remove dead code 2016-07-18 16:44:53 -04:00
Jude Nelson
bfda61280f get public key from zonefile and then from profile once the profile has
been validated.  Don't try to extract it from the old profile.
2016-07-18 16:40:57 -04:00
Jude Nelson
c666852baf debug all returns in put_profiles 2016-07-18 16:26:34 -04:00
Jude Nelson
c1be35a888 no profile == empty string 2016-07-18 16:13:42 -04:00
Jude Nelson
88cb282c95 add server analytics 2016-07-18 15:59:20 -04:00
Jude Nelson
0a7c5996cc get_name_history() should return a dict, keyed by block height 2016-07-18 15:59:00 -04:00
Jude Nelson
a59a62c27c store server version in the config file, and use it to determine whether
or not the config file is obsolete and needs to be regenerated
2016-07-13 15:42:47 -04:00
Jude Nelson
a5d0c1e68f (temporarily) remove get_zonefile_from_peers from the module 2016-07-12 16:34:56 -04:00
Jude Nelson
16e2cf9f12 store zonefiles as directory trees to avoid filling a single directory
with too many entries
2016-07-12 16:34:00 -04:00
Jude Nelson
d1839e40c0 zonefiles are 4K tops, in order to preserve backwards-compatibility with
UDP-based protocols (like the old DHT)
2016-07-12 16:33:05 -04:00
Jude Nelson
44eb556788 Only store a profile if it is accompanied by a client-given signature
from the data private key over the hash of the previous profile (or "") and new profile's
canonical serialization.  This is meant to prevent malicious replay
attacks using stale profiles.
2016-07-12 16:31:37 -04:00
Jude Nelson
363b52de4f serve back a *raw* profile 2016-07-10 23:40:04 -04:00
Jude Nelson
8042a14eae don't rely on the user-supplied zonefile URLs 2016-07-10 18:09:07 -04:00