GithubHelp home page GithubHelp logo

gittorrent's People

Contributors

anarcat avatar bencevans avatar cjb avatar danhawkes avatar daveloyall avatar devonharvey avatar mgalgs avatar ralphtheninja avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gittorrent's Issues

can't seed multiple repos on the same machine

i have gittorrentd running in one git repo. i want to seed another:

anarcat@marcos:~$ git init test
Dépôt Git existant réinitialisé dans /home/anarcat/test/.git/
anarcat@marcos:~$ cd test
anarcat@marcos:test$ touch .git/git-daemon-export-ok
anarcat@marcos:test$ gittorrentd

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:901:11)
    at Server._listen2 (net.js:1039:14)
    at listen (net.js:1061:10)
    at Server.listen (net.js:1127:5)
    at DHT.<anonymous> (/home/anarcat/node_modules/gittorrent/gittorrentd:195:6)
    at DHT.EventEmitter.emit (events.js:117:20)
    at /home/anarcat/node_modules/gittorrent/node_modules/bittorrent-dht/client.js:799:16
    at f (/home/anarcat/node_modules/gittorrent/node_modules/bittorrent-dht/node_modules/once/once.js:17:25)
    at onResponse (/home/anarcat/node_modules/gittorrent/node_modules/bittorrent-dht/client.js:987:7)
    at onResponse (/home/anarcat/node_modules/gittorrent/node_modules/bittorrent-dht/client.js:1188:21)

boom.

Leaks personal details / email addresses

gittorrentd uses 'git config user.name/user.email' to support the full p2p mode of operation, uploading both real name and email address to the BitTorrent tracker.

This is problematic on a few counts:

  1. It currently ignores GIT_AUTHOR_NAME and other environment variables that are meant to override it. In my case it submitted a confidential work email address, including division and employer details that should never have been visible to third-parties.

  2. The typical user of the gittorrentd command will be mirroring third-party repositories. Identity/key features are only useful for repository authors, and should probably be off by default. Mirroring repos ought to be totally anonymous by default.

  3. ISPs filter and log torrent streams, looking for the tiniest scraps of identifiable metadata. Posting your users' real names and email addresses in a BitTorrent transaction is giving away easy lawsuit targets if their neighbour happens to be sharing dubious torrents through the same wifi.

So, I'd suggest putting the publish_mutable_key() behind a command line flag like "--publish". That way the GitHub mirroring will still work and the user can actively consent to associating their personal details with the mirrored repositories using the flag, if that's what they really want.

make gittorrentd follow symlinks on first level?

one of the issues i'm having deploying this is to try to put all the repos in the same directory, to work around #23. now that often means using symlinks, as my repositories are spread all over my filesystem...

it seems that gittorrentd doesn't follow symlinks, as it doesn't find the repos with symlinks here...

anarcat@marcos:~$ cd /tmp
anarcat@marcos:tmp$ mkdir test
anarcat@marcos:tmp$ cd test
anarcat@marcos:test$ git init test
Initialized empty Git repository in /tmp/test/test/.git/
anarcat@marcos:test$ touch test/.git/git-daemon-export-ok
anarcat@marcos:test$ touch readme
anarcat@marcos:test$ git add readme
anarcat@marcos:test$ git commit -m"test"
[master (root-commit) a549173] test
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 readme
anarcat@marcos:test$ cd ..
anarcat@marcos:test$ gittorrentd
in repo test/.git/git-daemon-export-ok
test/.git/
Announcing a5491738f6415acb996f98800b33421ea472d2d6 for ref refs/heads/master on repo test/.git/
{"repositories":{"test":{"master":"a5491738f6415acb996f98800b33421ea472d2d6"}}}
^Canarcat@marcos:test$ git init /tmp/test2
Reinitialized existing Git repository in /tmp/test2/.git/
anarcat@marcos:test$ ln -s /tmp/test2 test2
anarcat@marcos:test$ touch test2/git-daemon-export-ok
anarcat@marcos:test$ gittorrentd
in repo test/.git/git-daemon-export-ok
test/.git/
Announcing a5491738f6415acb996f98800b33421ea472d2d6 for ref refs/heads/master on repo test/.git/
{"repositories":{"test":{"master":"a5491738f6415acb996f98800b33421ea472d2d6"}}}
errors= []
hash= 30c2b6a80ec64021b58a592b8b1750433df4c185

notice, above, how test2 is not found.. is there a way to fix that?

Feedback

Hi, I have read your blog post (http://blog.printf.net/articles/2015/05/29/announcing-gittorrent-a-decentralized-github/) and find the concept interesting and would like to provide you with some feedback.

I find the first part about using a DHT to get repositories very good. I agree with almost everything done there and think this is definitely the way to go and what we will use in the future.

My only concern with regard to DHT use is security. When we use git:// URIs to fetch a repository, we run the risk of having someone get in the middle and send a completely unrelated repository. So we use https:// (or git+ssh://) URIs to validate that we are speaking to the right server and will get what we asked (essentially pushing the security concerns to another layer). What about your DHT though? Can we know for sure that what we ask for is what we are going to get, and not someone trying to hijack the project and send their own repository?

Next comes the topic of names. I feel that using a blockchain is going way too far. We already have a distributed naming system, why not just use it? You can use the DNS to associate a public key to a domain name and do a DNS lookup to get that key and then use Gittorrent as before.

In fact you may not need to do anything at all, because this is what the SSHFP record does as far as I understand. According to Wikipedia: Resource record for publishing SSH public host key fingerprints in the DNS System, in order to aid in verifying the authenticity of the host.

how to determine my hash?

so one thing that's still not clear to me is how to announce my gittorrent urls. i understand there's some magic stuff going on on the side of bitcoin, but i don't really care about that - i'm fine with the hash for now.

(besides, it's not clear to me how gittorrentd talks to bitcoin and how i tell it which username i want, but that's another bug report. :)

if i run bittorrentd in a git repository, it seems to do something but I don't know how to do anything after that.

it would be nice if bittorrentd had some sort of usage (-h) or would at least tell the url we can use to fetch from the repo later...

K closest nodes empty

When running gittorrent, I don't see any nodes. Is this normal?

(its possible that this coffee shop's interent connection is actively blocking the torrent protocol)

gittorrent

Clones somewhat works, but never finishes.

On my server:

Received handshake for 3a1ce06c0140d62d86c82634268316f4a2c2e020
Received handshake for 633217c8dcfd510ef2c633236ab90d66bfbe3288
Received handshake for ffc459a246d02cf112cad2822f3edb530b80686f
calling git pack-objects for 3a1ce06c0140d62d86c82634268316f4a2c2e020
calling git pack-objects for 633217c8dcfd510ef2c633236ab90d66bfbe3288
calling git pack-objects for ffc459a246d02cf112cad2822f3edb530b80686f
Counting objects: 294, done.
Total 0 (delta 0), reused 0 (delta 0)
Finished writing 633217c8dcfd510ef2c633236ab90d66bfbe3288.pack
Compressing objects: 100% (222/222), done.
Counting objects: 9496, done.
Total 294 (delta 138), reused 79 (delta 33)
Finished writing 3a1ce06c0140d62d86c82634268316f4a2c2e020.pack
Compressing objects: 100% (1903/1903), done.
Total 9496 (delta 8294), reused 8645 (delta 7445)
Finished writing ffc459a246d02cf112cad2822f3edb530b80686f.pack
969fb84a2ca3e05b982ef9f2500ca2230ce6cc3d
6d3bc573f556e0eec179ae821a3770304c707772
1b450fa3dd5934ffa23ba5eeb74af683abc04b1e

so I know everything was sent.

On my client:

[dpc@host-x:/tmp]% git clone gittorrent://8956ee05815d27f458673c076d0ffcfa7bcbd78d/mioco
Cloning into 'mioco'...

Mutable key 8956ee05815d27f458673c076d0ffcfa7bcbd78d returned:
repositories: 
  mioco: 
    refs/heads/devel:    633217c8dcfd510ef2c633236ab90d66bfbe3288
    refs/heads/gh-pages: ffc459a246d02cf112cad2822f3edb530b80686f
    refs/heads/master:   3a1ce06c0140d62d86c82634268316f4a2c2e020
    HEAD:                3a1ce06c0140d62d86c82634268316f4a2c2e020

Okay, we want to get HEAD: 3a1ce06c0140d62d86c82634268316f4a2c2e020
Okay, we want to get devel: 633217c8dcfd510ef2c633236ab90d66bfbe3288
Okay, we want to get gh-pages: ffc459a246d02cf112cad2822f3edb530b80686f
Okay, we want to get master: 3a1ce06c0140d62d86c82634268316f4a2c2e020

Adding swarm peer: MYHOSTIP:30000 for 3a1ce06c0140d62d86c82634268316f4a2c2e020

Adding swarm peer: MYHOSTIP:30000 for 633217c8dcfd510ef2c633236ab90d66bfbe3288

Adding swarm peer: MYHOSTIP:30000 for ffc459a246d02cf112cad2822f3edb530b80686f

But it never exits.

Downloads should be faster

We're dropping the peer connection after they make a pack for us and then doing a new lookup for the infoHash they gave us, which is unnecessary because we know they have that pack -- they just made it. We should add them to the swarm manually.

bare repository support

it looks like gittorrentd doesn't know/like bare repositories, e.g.:

  var repos = glob.sync('*/.git/git-daemon-export-ok')

Namecoin

I just learned about this project and am so excited!

I think the proper solution for storing usernames is namecoin which you should be aware of. It's an old fork of bitcoin which is still active and is designed to solve exactly this problem, and handles name expiry, registration, history view etc with a simple API. It's much cheaper than bitcoin, but is nearly as secure because it is merge-mined (a huge percentage of the bitcoin miners also mine namecoin simultaneously so it has large PoW security). Alternate solutions are far more vulnerable to various issues and attacks. (blockstore can lose data if all peers holding it disappear, datacoin has very low PoW security ...)

A GUI version with electron

It should have:

  • basic watching on repos
  • distributed issue and wiki sub modules
  • Other helpers function

I could write a basic demo in recent days.

Seeding without key?

I think there should be a way for a single gittorrentd instance to serve multiple repositories with multiple keys/signers. The use case is as follows: let's say I want to seed the official gittorent gittorrent repository, to increase availability, download speed, and bandwidth. I should be able to easily and through the provided tools clone and seed this repository to other peers, though obviously I will not be able to sign updates (due to not having the key).

This seems like something technically possible with the protocol that's not implemented in the tool. If only people who have access to the mutable key can seed the repository, it places the burden on developers to either maintain a robust hosting infrastructure (at which point they may as well use a standard Git instance) or to trust external entities with their keys.

Cannot clone repo

I'm playing with gittorrent. Trying to clone a repository it hung reporting the following output:

$ git clone gittorrent://github.com/cbcrg/ampa-nf/
Cloning into 'ampa-nf'...
Okay, we want to get HEAD: 3c2bce5f758585fe3e0bf23df77f6f53853bc3b8
Okay, we want to get master: 3c2bce5f758585fe3e0bf23df77f6f53853bc3b8
Okay, we want to get tags/v1.0: ca3d597ea2149978840d5c7a43e3149079fab184

Any clue what it could be the problem?

lookup times out here

i tried to clone this repo with gittorrent, and it never finished. it seems to hang after peer discovery:

anarcat@marcos:~$ DEBUG='*' git clone gittorrent://github.com/cjb/GitTorrent
Clonage dans 'GitTorrent'...
  bittorrent-dht [9e615d0] new DHT 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 +0ms
  bittorrent-dht [9e615d0] bootstrap with ["dht.gittorrent.org:6881","core.gittorrent.org:6881"] +28ms
  bittorrent-dht [9e615d0] listen undefined +4ms
  bittorrent-dht [9e615d0] emit listening 43291 +2ms
  bittorrent-dht [9e615d0] lookup (find_node) 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 +1ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 192.34.86.36:6881 +1ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 192.34.86.38:6881 +1ms
  bittorrent-dht [9e615d0] addNode 658e53cd96cb0b1144543dfe2b4b8fcb5649d39c 192.34.86.36:6881 discovered from 192.34.86.36:6881 +31ms
  bittorrent-dht [9e615d0] addNode 9c1e0ac27b6112fc1d4f30d61bc6df0fed6e6d48 71.82.56.112:40778 discovered from 192.34.86.36:6881 +2ms
  bittorrent-dht [9e615d0] addNode e4475a6b29056e4a60268e0e94d0426ce80ae65e 71.82.56.112:49336 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 9a250142b40eef2ce32e5ea73aa98fedb967bce6 104.236.212.110:6881 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode fb1a213dc231d0b5f3f448ccd35ea2984b6b2060 71.82.56.112:55217 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 81e24205d4bac8496d3e13282c90ead5045f09ea 127.0.0.1:6881 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode b3055a4fba6f3251ce0c6bbe3945c09e8195d2b0 85.221.134.21:6881 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode a51150c5bf1807792056e0c0867a2d4264be1bb5 71.82.56.112:46848 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode ce9da6f560ada0fe8351e960349483cc31c33f68 104.236.212.110:6881 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode c8247a17a8ce49ac99e701c086407dc7b16416db 71.82.56.112:55412 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 82cce048f764485bb6d445616c1aaad4f5106cc5 127.0.0.1:56990 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode b726aa98707ff2f7cfd92845d29ad65d33949488 71.82.56.112:47985 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode b4154492fc4ce2bddcbe2fc13105cfaf3ad5aa85 50.1.232.3:34731 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode b242d7412eb9a4e76b13c730f316260504155197 71.82.56.112:46101 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode dc553d8a3f63cefe4d6ac2a788a0f765b8224833 71.82.56.112:55424 discovered from 192.34.86.36:6881 +1ms
  bittorrent-dht [9e615d0] addNode cd532a1e29be3818a2ea2e2e15caeaba10ee2a2c 71.82.56.112:33834 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode f242e48020f24e6e226bb59bfd56cdba3996ef96 127.0.0.1:50658 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode f2dc7916a860903f7de126452f4340700e8cd908 71.82.56.112:40186 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode e9a1fb5b6e5a312104de76b887dd09e2e1d26905 71.82.56.112:59925 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode bc1b4d816175129e0b440c3c58b718f871755010 50.1.232.3:45135 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode df3abf86e91f53bbc0dd6f71bed423af9e04996a 71.82.56.112:51538 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] got lookup response from 658e53cd96cb0b1144543dfe2b4b8fcb5649d39c +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:51538 +2ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 50.1.232.3:45135 +1ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:59925 +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:40186 +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 127.0.0.1:50658 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +2s
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:33834 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +34ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:55424 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:46101 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 50.1.232.3:34731 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:47985 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 127.0.0.1:56990 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +2s
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:55412 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +34ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:46848 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 85.221.134.21:6881 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 127.0.0.1:6881 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:55217 +1ms
  bittorrent-dht [9e615d0] addNode ce9da6f560ada0fe8351e960349483cc31c33f68 104.236.212.110:6881 discovered from 104.236.212.110:6881 +30ms
  bittorrent-dht [9e615d0] skip addNode 72.0.72.144:56780 9e615d0d05c500f96bfd4fe9332f48bceb6d7440; that is us! +1ms
  bittorrent-dht [9e615d0] addNode 9c1e0ac27b6112fc1d4f30d61bc6df0fed6e6d48 71.82.56.112:40778 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode a9fd03be040a5959d0580c193613c50f2a1c78d3 71.82.56.112:51694 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 9a250142b40eef2ce32e5ea73aa98fedb967bce6 127.0.0.1:6881 discovered from 104.236.212.110:6881 +1ms
  bittorrent-dht [9e615d0] addNode b3055a4fba6f3251ce0c6bbe3945c09e8195d2b0 85.221.134.21:6881 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode a51150c5bf1807792056e0c0867a2d4264be1bb5 71.82.56.112:46848 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 99e729f4cb19d6bff536cf6e6edd6576e844a587 72.0.72.144:55037 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 8542cecd23f0d247e036df559e7d628b6744c549 71.82.56.112:36457 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 82cce048f764485bb6d445616c1aaad4f5106cc5 192.34.86.36:56990 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode bf5ccade63e3a61e15c576d1649eaabc19e91188 72.0.72.144:56617 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode b726aa98707ff2f7cfd92845d29ad65d33949488 71.82.56.112:47985 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode b4154492fc4ce2bddcbe2fc13105cfaf3ad5aa85 50.1.232.3:34731 discovered from 104.236.212.110:6881 +1ms
  bittorrent-dht [9e615d0] addNode b242d7412eb9a4e76b13c730f316260504155197 71.82.56.112:46101 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode bc1b4d816175129e0b440c3c58b718f871755010 50.1.232.3:45135 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode a11830e3dd778376b96764da7bb9737010cbdcdc 72.0.72.144:54152 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode e4475a6b29056e4a60268e0e94d0426ce80ae65e 71.82.56.112:49336 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode fb1a213dc231d0b5f3f448ccd35ea2984b6b2060 71.82.56.112:55217 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode c8247a17a8ce49ac99e701c086407dc7b16416db 71.82.56.112:55412 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode dc553d8a3f63cefe4d6ac2a788a0f765b8224833 71.82.56.112:55424 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode cd532a1e29be3818a2ea2e2e15caeaba10ee2a2c 71.82.56.112:33834 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] got lookup response from ce9da6f560ada0fe8351e960349483cc31c33f68 +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:49336 +3ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +2s
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 72.0.72.144:54152 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +34ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 72.0.72.144:56617 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 192.34.86.36:56990 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:36457 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 72.0.72.144:55037 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +28ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:51694 +1ms
  bittorrent-dht [9e615d0] addNode 82cce048f764485bb6d445616c1aaad4f5106cc5 192.34.86.36:56990 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] skip addNode 72.0.72.144:60742 9e615d0d05c500f96bfd4fe9332f48bceb6d7440; that is us! +1ms
  bittorrent-dht [9e615d0] addNode 9c1e0ac27b6112fc1d4f30d61bc6df0fed6e6d48 71.82.56.112:40778 discovered from 192.34.86.36:56990 +1ms
  bittorrent-dht [9e615d0] addNode 9a250142b40eef2ce32e5ea73aa98fedb967bce6 127.0.0.1:6881 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 81e24205d4bac8496d3e13282c90ead5045f09ea 127.0.0.1:6881 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode a51150c5bf1807792056e0c0867a2d4264be1bb5 71.82.56.112:46848 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 99e729f4cb19d6bff536cf6e6edd6576e844a587 72.0.72.144:64563 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 8542cecd23f0d247e036df559e7d628b6744c549 71.82.56.112:36457 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode b726aa98707ff2f7cfd92845d29ad65d33949488 71.82.56.112:47985 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode b4154492fc4ce2bddcbe2fc13105cfaf3ad5aa85 50.1.232.3:34731 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode b242d7412eb9a4e76b13c730f316260504155197 71.82.56.112:46101 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode bc1b4d816175129e0b440c3c58b718f871755010 50.1.232.3:45135 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode e4475a6b29056e4a60268e0e94d0426ce80ae65e 71.82.56.112:49336 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode fb1a213dc231d0b5f3f448ccd35ea2984b6b2060 71.82.56.112:55217 discovered from 192.34.86.36:56990 +1ms
  bittorrent-dht [9e615d0] addNode ce9da6f560ada0fe8351e960349483cc31c33f68 104.236.212.110:6881 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode c8247a17a8ce49ac99e701c086407dc7b16416db 71.82.56.112:55412 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode dc553d8a3f63cefe4d6ac2a788a0f765b8224833 71.82.56.112:55424 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode cd532a1e29be3818a2ea2e2e15caeaba10ee2a2c 71.82.56.112:33834 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode f242e48020f24e6e226bb59bfd56cdba3996ef96 192.34.86.36:50658 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode f2dc7916a860903f7de126452f4340700e8cd908 71.82.56.112:40186 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode ec120920310ca04e6471c5add2b1cdc261253ec8 71.82.56.112:55357 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] got lookup response from 82cce048f764485bb6d445616c1aaad4f5106cc5 +0ms
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 72.0.72.144:64563 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +2s
  bittorrent-dht [9e615d0] sent find_node 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 to 71.82.56.112:40778 +2ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +32ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +3ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +34ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +2s
  bittorrent-dht [9e615d0] terminating lookup (find_node) 9e615d0d05c500f96bfd4fe9332f48bceb6d7440 +0ms
  bittorrent-dht [9e615d0] K closest nodes are: +1ms
  bittorrent-dht [9e615d0]   71.82.56.112:40778 9c1e0ac27b6112fc1d4f30d61bc6df0fed6e6d48 +1ms
  bittorrent-dht [9e615d0]   71.82.56.112:51694 a9fd03be040a5959d0580c193613c50f2a1c78d3 +0ms
  bittorrent-dht [9e615d0]   127.0.0.1:6881 9a250142b40eef2ce32e5ea73aa98fedb967bce6 +0ms
  bittorrent-dht [9e615d0]   127.0.0.1:6881 81e24205d4bac8496d3e13282c90ead5045f09ea +0ms
  bittorrent-dht [9e615d0]   85.221.134.21:6881 b3055a4fba6f3251ce0c6bbe3945c09e8195d2b0 +0ms
  bittorrent-dht [9e615d0]   71.82.56.112:46848 a51150c5bf1807792056e0c0867a2d4264be1bb5 +0ms
  bittorrent-dht [9e615d0]   72.0.72.144:64563 99e729f4cb19d6bff536cf6e6edd6576e844a587 +1ms
  bittorrent-dht [9e615d0]   71.82.56.112:36457 8542cecd23f0d247e036df559e7d628b6744c549 +0ms
  bittorrent-dht [9e615d0]   192.34.86.36:56990 82cce048f764485bb6d445616c1aaad4f5106cc5 +0ms
  bittorrent-dht [9e615d0]   72.0.72.144:56617 bf5ccade63e3a61e15c576d1649eaabc19e91188 +0ms
  bittorrent-dht [9e615d0]   71.82.56.112:47985 b726aa98707ff2f7cfd92845d29ad65d33949488 +0ms
  bittorrent-dht [9e615d0]   50.1.232.3:34731 b4154492fc4ce2bddcbe2fc13105cfaf3ad5aa85 +0ms
  bittorrent-dht [9e615d0]   71.82.56.112:46101 b242d7412eb9a4e76b13c730f316260504155197 +1ms
  bittorrent-dht [9e615d0]   50.1.232.3:45135 bc1b4d816175129e0b440c3c58b718f871755010 +0ms
  bittorrent-dht [9e615d0]   72.0.72.144:54152 a11830e3dd778376b96764da7bb9737010cbdcdc +0ms
  bittorrent-dht [9e615d0]   71.82.56.112:49336 e4475a6b29056e4a60268e0e94d0426ce80ae65e +0ms
  bittorrent-dht [9e615d0]   71.82.56.112:55217 fb1a213dc231d0b5f3f448ccd35ea2984b6b2060 +0ms
  bittorrent-dht [9e615d0]   104.236.212.110:6881 ce9da6f560ada0fe8351e960349483cc31c33f68 +0ms
  bittorrent-dht [9e615d0]   71.82.56.112:55412 c8247a17a8ce49ac99e701c086407dc7b16416db +0ms
  bittorrent-dht [9e615d0]   71.82.56.112:55424 dc553d8a3f63cefe4d6ac2a788a0f765b8224833 +0ms
  bittorrent-dht [9e615d0] emit ready +0ms

Okay, we want to get: 3c29320fd5c9e9d4ea2b4936fead9046b6a96534

  bittorrent-dht [9e615d0] lookup (get_peers) 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 +3ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 192.34.86.36:6881 +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 127.0.0.1:6881 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:46101 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 72.0.72.144:54152 +4ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 127.0.0.1:6881 +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 50.1.232.3:45135 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 50.1.232.3:34731 +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:47985 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:46848 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:40778 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:36457 +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 72.0.72.144:56617 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 85.221.134.21:6881 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:51694 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 72.0.72.144:64563 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:55424 +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:55412 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:55217 +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 192.34.86.36:50658 +0ms
  bittorrent-swarm new swarm (i 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 p 2d5757303031312d613731376161393334636362) +0ms
  bittorrent-dht [9e615d0] addNode 658e53cd96cb0b1144543dfe2b4b8fcb5649d39c 192.34.86.36:6881 discovered from 192.34.86.36:6881 +53ms
  bittorrent-dht [9e615d0] addNode 35581e95400c3549e87682c277148aa7626d083f 72.0.72.144:59250 discovered from 192.34.86.36:6881 +1ms
  bittorrent-dht [9e615d0] addNode 2eefc9a4f7c0dc150f735642b892a81061c18583 71.82.56.112:38739 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 3dce5c7b205bdcfc038d69199670c9ddc2dcd90d 192.34.86.36:47566 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 1a01c8ef25bad9be6b6f9a1ffd268eb141d61186 71.82.56.112:56295 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 0d7cee61eef62ec64f0c7827fc9abd778cb44b69 104.236.212.110:6881 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 03b0f07ea02503155104e15aa1b0c2e4e17564d8 71.82.56.112:48939 discovered from 192.34.86.36:6881 +1ms
  bittorrent-dht [9e615d0] addNode 3811e7e6be694c089fee89fa2cc306cd3470dbd1 71.82.56.112:40541 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 346dc17d291396989d870df97b7864dbe4089790 183.5.240.231:3803 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 35a517b95664a06bd8ab1c6fcbf78733255ccf24 72.0.72.144:53482 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 1eafabf4b94346a3aef9d19b92b6ac14fbb0f198 72.0.72.144:50773 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 1fd44aea04eb913200e9cb5c85d4599e40b5c901 23.91.142.184:55670 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 6b4941b03dcf9ad0e9d007f774549438fc29bf01 104.236.212.110:6881 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 4c9acd5397f34d74e44bdfcd5dc202425f8e1eac 71.82.56.112:36063 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 497ec1cbf85f191fd8fcf23b73ad16dfa30cd28b 71.82.56.112:53620 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 4b9f05a76f5bfa02952e800060ee4869d9beb33b 50.1.232.3:40755 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 6e18c6eda783692c54f25491f5d0e0bec73e3225 71.82.56.112:49167 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 6351f85ac19863c6f19b4e62c930e7aa1a698cbf 104.236.212.110:58096 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 4c4095fe5c2834790fd7c71226b4a1965f266ec5 71.82.56.112:57236 discovered from 192.34.86.36:6881 +1ms
  bittorrent-dht [9e615d0] addNode 4e8547c575f04d889fa1a62ee8e19ad02d7079b6 71.82.56.112:56163 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] addNode 45821aff179c9c8d852f02f2ece0a36a2b1fe39a 71.82.56.112:39612 discovered from 192.34.86.36:6881 +0ms
  bittorrent-dht [9e615d0] got lookup response from 658e53cd96cb0b1144543dfe2b4b8fcb5649d39c +0ms
  bittorrent-dht [9e615d0] addNode 82cce048f764485bb6d445616c1aaad4f5106cc5 192.34.86.36:56990 discovered from 192.34.86.36:56990 +2ms
  bittorrent-dht [9e615d0] addNode 4c9acd5397f34d74e44bdfcd5dc202425f8e1eac 71.82.56.112:36063 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 497ec1cbf85f191fd8fcf23b73ad16dfa30cd28b 71.82.56.112:53620 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 4b9f05a76f5bfa02952e800060ee4869d9beb33b 50.1.232.3:40755 discovered from 192.34.86.36:56990 +1ms
  bittorrent-dht [9e615d0] addNode 2eefc9a4f7c0dc150f735642b892a81061c18583 71.82.56.112:38739 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 3dce5c7b205bdcfc038d69199670c9ddc2dcd90d 192.34.86.36:47566 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 3811e7e6be694c089fee89fa2cc306cd3470dbd1 71.82.56.112:40541 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 658e53cd96cb0b1144543dfe2b4b8fcb5649d39c 127.0.0.1:6881 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 4c4095fe5c2834790fd7c71226b4a1965f266ec5 71.82.56.112:57236 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 4e8547c575f04d889fa1a62ee8e19ad02d7079b6 71.82.56.112:56163 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 45821aff179c9c8d852f02f2ece0a36a2b1fe39a 71.82.56.112:39612 discovered from 192.34.86.36:56990 +1ms
  bittorrent-dht [9e615d0] addNode 5c3725a7c7be534e6f8690631f64b1ca6016468c 71.82.56.112:40606 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 9a250142b40eef2ce32e5ea73aa98fedb967bce6 127.0.0.1:6881 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] skip addNode 72.0.72.144:60742 9e615d0d05c500f96bfd4fe9332f48bceb6d7440; that is us! +0ms
  bittorrent-dht [9e615d0] addNode b242d7412eb9a4e76b13c730f316260504155197 71.82.56.112:46101 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 81e24205d4bac8496d3e13282c90ead5045f09ea 127.0.0.1:6881 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode bc1b4d816175129e0b440c3c58b718f871755010 50.1.232.3:45135 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode b4154492fc4ce2bddcbe2fc13105cfaf3ad5aa85 50.1.232.3:34731 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode b726aa98707ff2f7cfd92845d29ad65d33949488 71.82.56.112:47985 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode a51150c5bf1807792056e0c0867a2d4264be1bb5 71.82.56.112:46848 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] addNode 9c1e0ac27b6112fc1d4f30d61bc6df0fed6e6d48 71.82.56.112:40778 discovered from 192.34.86.36:56990 +0ms
  bittorrent-dht [9e615d0] got lookup response from 82cce048f764485bb6d445616c1aaad4f5106cc5 +0ms
  bittorrent-dht [9e615d0] addNode f242e48020f24e6e226bb59bfd56cdba3996ef96 192.34.86.36:50658 discovered from 192.34.86.36:50658 +1ms
  bittorrent-dht [9e615d0] addNode 6b4941b03dcf9ad0e9d007f774549438fc29bf01 104.236.212.110:6881 discovered from 192.34.86.36:50658 +1ms
  bittorrent-dht [9e615d0] addNode 4c9acd5397f34d74e44bdfcd5dc202425f8e1eac 71.82.56.112:36063 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 4b9f05a76f5bfa02952e800060ee4869d9beb33b 50.1.232.3:40755 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 2eefc9a4f7c0dc150f735642b892a81061c18583 71.82.56.112:38739 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 3dce5c7b205bdcfc038d69199670c9ddc2dcd90d 192.34.86.36:47566 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 1a01c8ef25bad9be6b6f9a1ffd268eb141d61186 71.82.56.112:56295 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 0d7cee61eef62ec64f0c7827fc9abd778cb44b69 104.236.212.110:6881 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 3811e7e6be694c089fee89fa2cc306cd3470dbd1 71.82.56.112:40541 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 6e18c6eda783692c54f25491f5d0e0bec73e3225 71.82.56.112:49167 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 658e53cd96cb0b1144543dfe2b4b8fcb5649d39c 192.34.86.36:6881 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 4c4095fe5c2834790fd7c71226b4a1965f266ec5 71.82.56.112:57236 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 4e8547c575f04d889fa1a62ee8e19ad02d7079b6 71.82.56.112:56163 discovered from 192.34.86.36:50658 +1ms
  bittorrent-dht [9e615d0] addNode 45821aff179c9c8d852f02f2ece0a36a2b1fe39a 71.82.56.112:39612 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 346dc17d291396989d870df97b7864dbe4089790 183.5.240.231:3803 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 5c3725a7c7be534e6f8690631f64b1ca6016468c 71.82.56.112:40606 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 9a250142b40eef2ce32e5ea73aa98fedb967bce6 127.0.0.1:6881 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] skip addNode 72.0.72.144:50986 9e615d0d05c500f96bfd4fe9332f48bceb6d7440; that is us! +0ms
  bittorrent-dht [9e615d0] addNode a11830e3dd778376b96764da7bb9737010cbdcdc 72.0.72.144:57705 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 81e24205d4bac8496d3e13282c90ead5045f09ea 127.0.0.1:6881 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] addNode 82cce048f764485bb6d445616c1aaad4f5106cc5 127.0.0.1:56990 discovered from 192.34.86.36:50658 +0ms
  bittorrent-dht [9e615d0] got lookup response from f242e48020f24e6e226bb59bfd56cdba3996ef96 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +2s
  bittorrent-dht [9e615d0] got lookup error: query timed out +2ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:56163 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +3ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:57236 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:49167 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 50.1.232.3:40755 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:53620 +1ms
  bittorrent-dht [9e615d0] addNode 6351f85ac19863c6f19b4e62c930e7aa1a698cbf 104.236.212.110:58096 discovered from 104.236.212.110:58096 +33ms
  bittorrent-dht [9e615d0] addNode 6b4941b03dcf9ad0e9d007f774549438fc29bf01 104.236.212.110:6881 discovered from 104.236.212.110:58096 +1ms
  bittorrent-dht [9e615d0] addNode 35581e95400c3549e87682c277148aa7626d083f 72.0.72.144:60660 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 4c9acd5397f34d74e44bdfcd5dc202425f8e1eac 71.82.56.112:36063 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 497ec1cbf85f191fd8fcf23b73ad16dfa30cd28b 71.82.56.112:53620 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 4b9f05a76f5bfa02952e800060ee4869d9beb33b 50.1.232.3:40755 discovered from 104.236.212.110:58096 +1ms
  bittorrent-dht [9e615d0] addNode 2eefc9a4f7c0dc150f735642b892a81061c18583 71.82.56.112:38739 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 3dce5c7b205bdcfc038d69199670c9ddc2dcd90d 192.34.86.36:47566 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 1a01c8ef25bad9be6b6f9a1ffd268eb141d61186 71.82.56.112:56295 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 0d7cee61eef62ec64f0c7827fc9abd778cb44b69 104.236.212.110:6881 discovered from 104.236.212.110:58096 +1ms
  bittorrent-dht [9e615d0] addNode 03b0f07ea02503155104e15aa1b0c2e4e17564d8 71.82.56.112:48939 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 3811e7e6be694c089fee89fa2cc306cd3470dbd1 71.82.56.112:40541 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 6e18c6eda783692c54f25491f5d0e0bec73e3225 71.82.56.112:49167 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 658e53cd96cb0b1144543dfe2b4b8fcb5649d39c 192.34.86.36:6881 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 4c4095fe5c2834790fd7c71226b4a1965f266ec5 71.82.56.112:57236 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 4e8547c575f04d889fa1a62ee8e19ad02d7079b6 71.82.56.112:56163 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 45821aff179c9c8d852f02f2ece0a36a2b1fe39a 71.82.56.112:39612 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 346dc17d291396989d870df97b7864dbe4089790 183.5.240.231:3803 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 35a517b95664a06bd8ab1c6fcbf78733255ccf24 72.0.72.144:53201 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 1fd44aea04eb913200e9cb5c85d4599e40b5c901 23.91.142.184:55670 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] addNode 5c3725a7c7be534e6f8690631f64b1ca6016468c 71.82.56.112:40606 discovered from 104.236.212.110:58096 +0ms
  bittorrent-dht [9e615d0] got lookup response from 6351f85ac19863c6f19b4e62c930e7aa1a698cbf +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:36063 +2ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +2s
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 104.236.212.110:6881 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 23.91.142.184:55670 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 72.0.72.144:50773 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 72.0.72.144:53201 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 183.5.240.231:3803 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +40ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:40541 +0ms
  bittorrent-dht [9e615d0] addNode ce9da6f560ada0fe8351e960349483cc31c33f68 104.236.212.110:6881 discovered from 104.236.212.110:6881 +2ms
  bittorrent-dht [9e615d0] addNode 35581e95400c3549e87682c277148aa7626d083f 72.0.72.144:62254 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 4c9acd5397f34d74e44bdfcd5dc202425f8e1eac 71.82.56.112:36063 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 497ec1cbf85f191fd8fcf23b73ad16dfa30cd28b 71.82.56.112:53620 discovered from 104.236.212.110:6881 +1ms
  bittorrent-dht [9e615d0] addNode 4b9f05a76f5bfa02952e800060ee4869d9beb33b 50.1.232.3:40755 discovered from 104.236.212.110:6881 +1ms
  bittorrent-dht [9e615d0] addNode 2eefc9a4f7c0dc150f735642b892a81061c18583 71.82.56.112:38739 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 3dce5c7b205bdcfc038d69199670c9ddc2dcd90d 192.34.86.36:47566 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 1a01c8ef25bad9be6b6f9a1ffd268eb141d61186 71.82.56.112:56295 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 03b0f07ea02503155104e15aa1b0c2e4e17564d8 71.82.56.112:48939 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 3811e7e6be694c089fee89fa2cc306cd3470dbd1 71.82.56.112:40541 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 6e18c6eda783692c54f25491f5d0e0bec73e3225 71.82.56.112:49167 discovered from 104.236.212.110:6881 +1ms
  bittorrent-dht [9e615d0] addNode 658e53cd96cb0b1144543dfe2b4b8fcb5649d39c 192.34.86.36:6881 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 6351f85ac19863c6f19b4e62c930e7aa1a698cbf 104.236.212.110:58096 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 4c4095fe5c2834790fd7c71226b4a1965f266ec5 71.82.56.112:57236 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 4e8547c575f04d889fa1a62ee8e19ad02d7079b6 71.82.56.112:56163 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 45821aff179c9c8d852f02f2ece0a36a2b1fe39a 71.82.56.112:39612 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 346dc17d291396989d870df97b7864dbe4089790 183.5.240.231:3803 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 35a517b95664a06bd8ab1c6fcbf78733255ccf24 72.0.72.144:60961 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 1eafabf4b94346a3aef9d19b92b6ac14fbb0f198 72.0.72.144:57547 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 1fd44aea04eb913200e9cb5c85d4599e40b5c901 23.91.142.184:55670 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] addNode 5c3725a7c7be534e6f8690631f64b1ca6016468c 71.82.56.112:40606 discovered from 104.236.212.110:6881 +0ms
  bittorrent-dht [9e615d0] got lookup response from ce9da6f560ada0fe8351e960349483cc31c33f68 +2ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 72.0.72.144:57547 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +2s
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 72.0.72.144:60961 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:48939 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:56295 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 192.34.86.36:47566 +1ms
  bittorrent-dht [9e615d0] addNode 3dce5c7b205bdcfc038d69199670c9ddc2dcd90d 192.34.86.36:47566 discovered from 192.34.86.36:47566 +30ms
  bittorrent-dht [9e615d0] addNode 35581e95400c3549e87682c277148aa7626d083f 72.0.72.144:51530 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 2eefc9a4f7c0dc150f735642b892a81061c18583 71.82.56.112:38739 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 1a01c8ef25bad9be6b6f9a1ffd268eb141d61186 71.82.56.112:56295 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 0d7cee61eef62ec64f0c7827fc9abd778cb44b69 104.236.212.110:6881 discovered from 192.34.86.36:47566 +1ms
  bittorrent-dht [9e615d0] addNode 03b0f07ea02503155104e15aa1b0c2e4e17564d8 71.82.56.112:48939 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 3811e7e6be694c089fee89fa2cc306cd3470dbd1 71.82.56.112:40541 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 346dc17d291396989d870df97b7864dbe4089790 183.5.240.231:3803 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 35a517b95664a06bd8ab1c6fcbf78733255ccf24 72.0.72.144:57615 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 1eafabf4b94346a3aef9d19b92b6ac14fbb0f198 72.0.72.144:52360 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 1fd44aea04eb913200e9cb5c85d4599e40b5c901 23.91.142.184:55670 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 6b4941b03dcf9ad0e9d007f774549438fc29bf01 104.236.212.110:6881 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 4c9acd5397f34d74e44bdfcd5dc202425f8e1eac 71.82.56.112:36063 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 497ec1cbf85f191fd8fcf23b73ad16dfa30cd28b 71.82.56.112:53620 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 4b9f05a76f5bfa02952e800060ee4869d9beb33b 50.1.232.3:40755 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 6e18c6eda783692c54f25491f5d0e0bec73e3225 71.82.56.112:49167 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 658e53cd96cb0b1144543dfe2b4b8fcb5649d39c 127.0.0.1:6881 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 6351f85ac19863c6f19b4e62c930e7aa1a698cbf 104.236.212.110:58096 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 4c4095fe5c2834790fd7c71226b4a1965f266ec5 71.82.56.112:57236 discovered from 192.34.86.36:47566 +1ms
  bittorrent-dht [9e615d0] addNode 4e8547c575f04d889fa1a62ee8e19ad02d7079b6 71.82.56.112:56163 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] addNode 45821aff179c9c8d852f02f2ece0a36a2b1fe39a 71.82.56.112:39612 discovered from 192.34.86.36:47566 +0ms
  bittorrent-dht [9e615d0] got lookup response from 3dce5c7b205bdcfc038d69199670c9ddc2dcd90d +0ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 72.0.72.144:52360 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +9ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 72.0.72.144:57615 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 71.82.56.112:38739 +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +2s
  bittorrent-dht [9e615d0] sent get_peers 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 to 72.0.72.144:51530 +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +1ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +31ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +12ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +0ms
  bittorrent-dht [9e615d0] got lookup error: query timed out +2s
  bittorrent-dht [9e615d0] terminating lookup (get_peers) 3c29320fd5c9e9d4ea2b4936fead9046b6a96534 +0ms
  bittorrent-dht [9e615d0] K closest nodes are: +1ms
  bittorrent-dht [9e615d0]   192.34.86.36:56990 82cce048f764485bb6d445616c1aaad4f5106cc5 +0ms
  bittorrent-dht [9e615d0]   192.34.86.36:47566 3dce5c7b205bdcfc038d69199670c9ddc2dcd90d +0ms
  bittorrent-dht [9e615d0]   192.34.86.36:6881 658e53cd96cb0b1144543dfe2b4b8fcb5649d39c +0ms
  bittorrent-dht [9e615d0]   104.236.212.110:58096 6351f85ac19863c6f19b4e62c930e7aa1a698cbf +0ms
  bittorrent-dht [9e615d0]   192.34.86.36:50658 f242e48020f24e6e226bb59bfd56cdba3996ef96 +0ms
  bittorrent-dht [9e615d0]   104.236.212.110:6881 ce9da6f560ada0fe8351e960349483cc31c33f68 +0ms

anything i'm doing wrong?

Check that we ended up at the wanted sha1

The reason we're okay with pulling objects from anonymous peers is that we have a trusted hash to compare against -- apply the object, see where we ended up. If it's the wrong sha1, we could retry from other peers until we get the right one, but for now let's just leave a big red noticeable error and exit.

NAT traversal?

does gittorrentd attempt any tricks to traverse nats? i tried to serve a repo behind a NAT and i can't access it from the outside at all...

No Pull Requests in the Protocol

People use public version control in general because it offers free public hosting, but they use github specifically because of how easy it is to fork a new repo and because of how nice the pull request workflow is. Git will never be distributed in any useful sense as long as the entire project's merge process and history are centralized and without an easy export format.

I'd like to consider using git itself to track this kind of thing, kind of like a "side chain" running on top of git. In another branch for a given repo, the state of bugs and PRs could be tracked.

userProfile can't grow very large

950 bytes for publishing all of one's repositories and branch names with 40-byte shas puts too many constraints on what we can store. A repo named with just one letter requires 74 bytes ({'repositories':{'X':{'HEAD':'sha'}}}), then each branch requires at least 58 bytes (including the comma: ,'refs/heads/X':'sha') which means we can store at most 11 branches (74 + x58 < 950 => x < 12). This should be sufficient for most people's local repositories, if they consistently prune branches that have been merged or become moot, but we can't host pull requests this way, which means we're still tied to github. This repository only has 3 open pulls right now, but larger projects can have hundreds.

Just some brain stormed ideas:

We can compress userProfile: Instead of having the top-level item be a field, repositories, just make userProfile be a list of repositories. We don't need to store HEAD's sha, explicitly, just which branch it points to, unless it's detached. Or we could always report refs/heads/master as HEAD, even when it's not. Every eight characters in the sha could be stored in a 32-bit integer, requiring 20 bytes total, but not using json to encode it.

Not use json: very convenient and simple, but not compact, especially not for raw integers. I've worked with msgpack before and it does have a js implementation. Not familiar with the js ecosystem, but I'm sure other equally efficient serialization libraries exist. I do think it's important, though, that we use something implemented in multiple languages for (ref: #12).

A linked list of mutable keys? We could subvert all limitations by allocating another key when we run out of space and having a next or previous field.

Let users manually decide which branches to share via git-export-ok. We could put regex patterns in this file for what to include, or what to exclude. The default could look something like this:

include: refs/heads/*
exclude: refs/remotes/*

(exclude: could be used to not add files that include: would match. include: could also just be *)

What is the trust model?

I haven't read too much into this project yet, but what is the trust model in use?
Is there any way to verify [other than GitHub obviously] that you have been served the right repository?

gittorrent doesn't build a "diff" packfile

A peer can ask another peer for a given revision (here) but it cannot say "I already have xxxxxx" for efficient packfile generation (and, indeed, the daemon builds pack from scratch). It would be nice for a peer to be able to send its current revision so that the remote can build an efficient diff packfile instead of a full one.

If I understand correctly, this means changing ut_gittorrent

Explore blockchain-id Profile-Schema integration instead of a custom name resolver

blockchain-id Profile-Schema already exists, is blockchain based, and has public key support, why not leverage that project for username lookups.

for example my username is
https://onename.com/ericwooley

There is an API for getting a users info, which could be used as a second option to manually looking through the blockchain, which could take a long time.
https://api.onename.com/

{  
   ericwooley:{  
      profile:{  
         avatar:{  
            url:"https://s3.amazonaws.com/kd4/ericwooley"
         },
         bitcoin:{  
            address:"1ABYJjvgXoiQ2eY5Apu59px9Wo8mimPmBy"
         },
         cover:{  
            url:"https://s3.amazonaws.com/dx3/ericwooley"
         },
         facebook:{  
            proof:{  
               url:"https://facebook.com/eric.wooley/posts/10206812517728011"
            },
            username:"eric.wooley"
         },
         github:{  
            proof:{  
               url:"https://gist.github.com/ericwooley/a0e8fe9dcd2e4f8fdecf"
            },
            username:"ericwooley"
         },
         graph:{  
            url:"https://s3.amazonaws.com/grph/ericwooley"
         },
         location:{  
            formatted:"Atascadero California"
         },
         name:{  
            formatted:"eric wooley"
         },
         pgp:{  
            fingerprint:"949DF59F1B8DD286853DCB802DE3727B8E4993F",
            url:"https://s3.amazonaws.com/pk9/ericwooley"
         },
         twitter:{  
            proof:{  
               url:"https://twitter.com/ericwooley/status/652203639109324800"
            },
            username:"ericwooley"
         },
         v:"0.2",
         website:"https://ericwooley.github.io"
      },
      verifications:[  
         {  
            identifier:"ericwooley",
            proof_url:"https://gist.github.com/ericwooley/a0e8fe9dcd2e4f8fdecf",
            service:"github",
            valid:true
         },
         {  
            identifier:"ericwooley",
            proof_url:"https://twitter.com/ericwooley/status/652203639109324800",
            service:"twitter",
            valid:true
         },
         {  
            identifier:"eric.wooley",
            proof_url:"https://facebook.com/eric.wooley/posts/10206812517728011",
            service:"facebook",
            valid:true
         }
      ]
   }
}

One issue with this is that onename.com is obviously centralized, but after some research, I found that you can role you own "resolver" pretty easily. https://github.com/blockstack/resolver
So it may work to make the resolver a config option, in addition to the default option of parsing the blockchain yourself.

Feature request: LFS support

It would be great if lfs is served via gittorrent. Torrent is famous for sharing large binaries, so it seems natural to expand the territory of gittorrent.

updated dht_store method signatures

The patch has changed to use a different interface, but gittorrent depends against that branch directly, not a specific commit.

Now you've got to pass in a sign function: https://github.com/substack/bittorrent-dht/blob/dht-store/test/dht_store_mutable.js#L22 https://github.com/substack/bittorrent-dht/blob/dht-store/test/dht_store_mutable.js#L459
and pass in a verify function to the DHT constructor https://github.com/substack/bittorrent-dht/blob/dht-store/test/dht_store_mutable.js#L12

Using ed25519-supercop the signatures should finally be compatible with normal bittorrent clients.

multi protocol handoff

it would be great to support handing off to different git protocols with:

gittorrent+https://some.http.git.server/path/to/repo.git

Crash in BitTorrent DHT

Long-running gittorrent crashes with the following trace (reproduction steps unknown):

hash= 3f0fc224fab0389c20e3e7281fb9ff51a475c533
Received handshake for c08084026e299f855f845430688ef0798b1649ee
calling git pack-objects for c08084026e299f855f845430688ef0798b1649ee
Counting objects: 33, done.
Compressing objects: 100% (31/31), done.
Total 33 (delta 1), reused 0 (delta 0)
Finished writing c08084026e299f855f845430688ef0798b1649ee.pack
Received handshake for c08084026e299f855f845430688ef0798b1649ee
calling git pack-objects for c08084026e299f855f845430688ef0798b1649ee
Counting objects: 33, done.
Compressing objects: 100% (31/31), done.
Total 33 (delta 1), reused 0 (delta 0)
Finished writing c08084026e299f855f845430688ef0798b1649ee.pack
81dfc4f5d974b5f716c000b1615c8f02bec320fc
81dfc4f5d974b5f716c000b1615c8f02bec320fc
Received handshake for c08084026e299f855f845430688ef0798b1649ee
calling git pack-objects for c08084026e299f855f845430688ef0798b1649ee
Counting objects: 33, done.
Compressing objects: 100% (31/31), done.
Total 33 (delta 1), reused 0 (delta 0)
Finished writing c08084026e299f855f845430688ef0798b1649ee.pack
81dfc4f5d974b5f716c000b1615c8f02bec320fc
/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/node_modules/k-bucket/index.js:225
    if ((id.length <= bytesDescribedByBitIndex)
           ^
TypeError: Cannot read property 'length' of undefined
    at KBucket.determineBucket (/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/node_modules/k-bucket/index.js:225:12)
    at KBucket.get (/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/node_modules/k-bucket/index.js:258:18)
    at DHT._onPut (/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/client.js:485:27)
    at DHT._onQuery (/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/client.js:1051:30)
    at DHT._onData (/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/client.js:1035:10)
    at Socket.emit (events.js:110:17)
    at UDP.onMessage (dgram.js:472:8)

i2p support

hey, question. Since this is bitcoin like and other altcoins support i2p... does this have the capability to work with i2p aswell?

Easily finding mutable key?

So I'm running gittorrentd on a repository, and even with debug mode on, there is nowhere I can see the mutable key printed out by the daemon. I've tried manually SHA1'ing the pub, and clone failed with hash not found.

I think there should be some output in gittorrentd to the effect of "Now serving [mutable key]/[repo name] over Gittorrent DHT and accepting new connections. Clone at gittorrent://[uri], and update by pushing to this local repository."

There is one line in the output to the effect of:

  bittorrent-dht [bd32ebb] new DHT bd32ebb5eb22f8b9bde7229754c70b12c8e95380 +0ms

While I thought this may be the key's hash, it does not work in clone (though I'm listening on 6881 with the port properly forwarded, and on a server with no forwarding required), and it changes every time I restart gittorentd (with the same ed25519.key). Also, it does not correspond to the sha1 of my "pub" key.

Edit: I see this is fixed in #28... feel free to close 👍

E2: On further inspection, it looks like my gittorrentd is not successfully hosting. Full log here: http://pastebin.com/iNsKmm2Z Seems to be a repeat of #22 but my export file is touched. Tried on three separate machines, same result. What's going on here?

E3: I see, this needs to be run from the root Git directory, where each repo is a subdir (./*/.git/git-daemon-export must exist). This should be made clearer in the README, as well as where the repo name derives from (subdir name). Everything is working now, sorry about the spam 👍

clone hangs

Here is the debug output:

$ DEBUG=* git clone gittorrent://github.com/cjb/gittorrent

Cloning into 'gittorrent'...
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] new DHT d7fe598df94d12af9477db69aed2f12ab096464a
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] bootstrap with ["dht.gittorrent.org:6881","core.gittorrent.org:6881"]
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] listen undefined
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] emit listening 41222
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] lookup (find_node) d7fe598df94d12af9477db69aed2f12ab096464a
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 192.34.86.38:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode e2d7c060225f930c31dc1bf7462ad09ac6ca466c 192.34.86.36:6881 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] skip addNode 73.168.2.221:41222 d7fe598df94d12af9477db69aed2f12ab096464a; that is us!
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode d9865c86f89aa55ca0cd984cab1ca7e2b581259a 73.168.2.221:37335 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode dcb37497b0878541013b0a7de3a15f296d9e6f4f 73.168.2.221:53820 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode d6b0494f23abf02509b1de3b185afde071cda4d7 82.45.235.43:56617 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode c401b3f55206687eda7f816394a1c4111aff02eb 82.45.235.43:52879 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode ce9ac7747e93163a9c1c450d8faa3749496f3fc5 82.45.235.43:54735 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode fd0a6337596327d4953e4876070bf66b11d33714 82.45.235.43:57172 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode d075284ce79f859e75091a2d0323b70f0e6248be 82.45.235.43:50705 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode c6caf10b65f8193a39443094c74383e0008dca9e 82.45.235.43:52492 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode cd8e56c8de267fec0ba54ca4d195d01b8a2dc56e 50.1.232.3:35918 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode fa5286343da2cb7f50652f7a09a422df20932f77 82.45.235.43:57819 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode e883c39f42901f886ec336878b500d88455992af 82.45.235.43:56478 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode dcdae15336ab944c4a45c8d586c2ace7db7cdb2e 82.45.235.43:58892 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode db9fde2135b74a4db96092fe97fa610a0ffcc0bf 82.45.235.43:59452 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode ce1e99f5653e08f17733b2b37cf756b98d5d1781 73.168.2.221:6881 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode b05d46ffab4160614f2ecbe49fd5ccba4aa6463d 82.45.235.43:61191 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode 9bcec17e614ff04a7f20256237f1714ba901850d 82.45.235.43:6882 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode 98eea28601788e854e94479754b3f9eb3d5573af 82.45.235.43:6882 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode b966c91332578679cb99722810fda6c8dc917643 82.45.235.43:50447 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] addNode 9620fb55b2931c8b8af25c8f42b5a762d451c702 73.168.2.221:58470 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] got lookup response from e2d7c060225f930c31dc1bf7462ad09ac6ca466c
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 73.168.2.221:6881
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:59452
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:58892
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 73.168.2.221:58470
Sat, 30 May 2015 03:42:19 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:56478
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:57819
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 50.1.232.3:35918
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:52492
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:50705
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:50447
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:21 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:6882
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:57172
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:54735
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:52879
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:61191
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 82.45.235.43:56617
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:23 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 73.168.2.221:53820
Sat, 30 May 2015 03:42:25 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:25 GMT bittorrent-dht [d7fe598] sent find_node d7fe598df94d12af9477db69aed2f12ab096464a to 73.168.2.221:37335
Sat, 30 May 2015 03:42:25 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:25 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:25 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:25 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:25 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] terminating lookup (find_node) d7fe598df94d12af9477db69aed2f12ab096464a
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] K closest nodes are:
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   73.168.2.221:37335 d9865c86f89aa55ca0cd984cab1ca7e2b581259a
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   73.168.2.221:53820 dcb37497b0878541013b0a7de3a15f296d9e6f4f
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:56617 d6b0494f23abf02509b1de3b185afde071cda4d7
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:61191 b05d46ffab4160614f2ecbe49fd5ccba4aa6463d
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:52879 c401b3f55206687eda7f816394a1c4111aff02eb
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:54735 ce9ac7747e93163a9c1c450d8faa3749496f3fc5
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:57172 fd0a6337596327d4953e4876070bf66b11d33714
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:6882 9bcec17e614ff04a7f20256237f1714ba901850d
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:6882 98eea28601788e854e94479754b3f9eb3d5573af
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:50447 b966c91332578679cb99722810fda6c8dc917643
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:50705 d075284ce79f859e75091a2d0323b70f0e6248be
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:52492 c6caf10b65f8193a39443094c74383e0008dca9e
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   50.1.232.3:35918 cd8e56c8de267fec0ba54ca4d195d01b8a2dc56e
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:57819 fa5286343da2cb7f50652f7a09a422df20932f77
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   192.34.86.36:6881 e2d7c060225f930c31dc1bf7462ad09ac6ca466c
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:56478 e883c39f42901f886ec336878b500d88455992af
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   73.168.2.221:58470 9620fb55b2931c8b8af25c8f42b5a762d451c702
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:58892 dcdae15336ab944c4a45c8d586c2ace7db7cdb2e
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   82.45.235.43:59452 db9fde2135b74a4db96092fe97fa610a0ffcc0bf
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598]   73.168.2.221:6881 ce1e99f5653e08f17733b2b37cf756b98d5d1781
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] emit ready

Okay, we want to get: �[32mef27491bdebe1026b1be58c295c8d1c9fe5f99c1�[39m

Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] lookup (get_peers) ef27491bdebe1026b1be58c295c8d1c9fe5f99c1
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 73.168.2.221:58470
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:56478
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:59452
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:56617
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:54735
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 50.1.232.3:35918
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:50447
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:61191
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 73.168.2.221:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:52492
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:52879
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:58892
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:6882
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:57172
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:57819
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 73.168.2.221:53820
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 73.168.2.221:37335
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:50705
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 82.45.235.43:6882
Sat, 30 May 2015 03:42:27 GMT bittorrent-swarm new swarm (i ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 p 2d5757303031312d363864656230616238623831)
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode e2d7c060225f930c31dc1bf7462ad09ac6ca466c 192.34.86.36:6881 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode e883c39f42901f886ec336878b500d88455992af 82.45.235.43:56478 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode db9fde2135b74a4db96092fe97fa610a0ffcc0bf 82.45.235.43:59452 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode d6b0494f23abf02509b1de3b185afde071cda4d7 82.45.235.43:56617 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode ce9ac7747e93163a9c1c450d8faa3749496f3fc5 82.45.235.43:54735 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode cd8e56c8de267fec0ba54ca4d195d01b8a2dc56e 50.1.232.3:35918 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode ce1e99f5653e08f17733b2b37cf756b98d5d1781 73.168.2.221:6881 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode c6caf10b65f8193a39443094c74383e0008dca9e 82.45.235.43:52492 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode c401b3f55206687eda7f816394a1c4111aff02eb 82.45.235.43:52879 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode dcdae15336ab944c4a45c8d586c2ace7db7cdb2e 82.45.235.43:58892 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] skip addNode 73.168.2.221:41222 d7fe598df94d12af9477db69aed2f12ab096464a; that is us!
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode fd0a6337596327d4953e4876070bf66b11d33714 82.45.235.43:57172 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode fa5286343da2cb7f50652f7a09a422df20932f77 82.45.235.43:57819 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode dcb37497b0878541013b0a7de3a15f296d9e6f4f 73.168.2.221:53820 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode d9865c86f89aa55ca0cd984cab1ca7e2b581259a 73.168.2.221:37335 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode d075284ce79f859e75091a2d0323b70f0e6248be 82.45.235.43:50705 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode 81e24205d4bac8496d3e13282c90ead5045f09ea 127.0.0.1:6881 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode 9620fb55b2931c8b8af25c8f42b5a762d451c702 73.168.2.221:58470 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode b293437525bf23f70354c65f8bc4468987325554 122.172.203.144:62523 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode 9a250142b40eef2ce32e5ea73aa98fedb967bce6 104.236.212.110:6881 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] addNode b966c91332578679cb99722810fda6c8dc917643 82.45.235.43:50447 discovered from 192.34.86.36:6881
Sat, 30 May 2015 03:42:27 GMT bittorrent-dht [d7fe598] got lookup response from e2d7c060225f930c31dc1bf7462ad09ac6ca466c
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 104.236.212.110:6881
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 122.172.203.144:62523
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] sent get_peers ef27491bdebe1026b1be58c295c8d1c9fe5f99c1 to 127.0.0.1:6881
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:29 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:31 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:31 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:31 GMT bittorrent-dht [d7fe598] got lookup error: query timed out
Sat, 30 May 2015 03:42:31 GMT bittorrent-dht [d7fe598] terminating lookup (get_peers) ef27491bdebe1026b1be58c295c8d1c9fe5f99c1
Sat, 30 May 2015 03:42:31 GMT bittorrent-dht [d7fe598] K closest nodes are:
Sat, 30 May 2015 03:42:31 GMT bittorrent-dht [d7fe598]   192.34.86.36:6881 e2d7c060225f930c31dc1bf7462ad09ac6ca466c

Can't install using npm on Kubuntu 15.04

sudo npm install gittorrent
npm WARN engine [email protected]: wanted: {"node":"0.6"} (current: {"node":"0.10.25","npm":"1.4.21"})

> [email protected] install /home/coderus/node_modules/gittorrent/node_modules/webtorrent/node_modules/chromecast-js/node_modules/node-ssdp/node_modules/bunyan/node_modules/dtrace-provider
> node scripts/install.js

npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian                                                                                                                                                           

npm WARN optional dep failed, continuing [email protected]

> [email protected] install /home/coderus/node_modules/gittorrent/node_modules/webtorrent/node_modules/torrent-discovery/node_modules/bittorrent-tracker/node_modules/ws/node_modules/utf-8-validate
> node-gyp rebuild

gyp: Call to 'node -e "require('nan')"' returned exit status 1. while trying to load binding.gyp
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/share/node-gyp/lib/configure.js:344:16)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:797:12)
gyp ERR! System Linux 4.0.4-040004-generic
gyp ERR! command "nodejs" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /home/coderus/node_modules/gittorrent/node_modules/webtorrent/node_modules/torrent-discovery/node_modules/bittorrent-tracker/node_modules/ws/node_modules/utf-8-validate
gyp ERR! node -v v0.10.25
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok 
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian                                                                                                                                                           

npm WARN optional dep failed, continuing [email protected]

> [email protected] install /home/coderus/node_modules/gittorrent/node_modules/webtorrent/node_modules/torrent-discovery/node_modules/bittorrent-tracker/node_modules/ws/node_modules/bufferutil
> node-gyp rebuild

gyp: Call to 'node -e "require('nan')"' returned exit status 1. while trying to load binding.gyp
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/share/node-gyp/lib/configure.js:344:16)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:797:12)
gyp ERR! System Linux 4.0.4-040004-generic
gyp ERR! command "nodejs" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /home/coderus/node_modules/gittorrent/node_modules/webtorrent/node_modules/torrent-discovery/node_modules/bittorrent-tracker/node_modules/ws/node_modules/bufferutil
gyp ERR! node -v v0.10.25
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok 
npm WARN optional dep failed, continuing [email protected]
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian                                                                                                                                                           

npm WARN optional dep failed, continuing [email protected]
npm WARN deprecated [email protected]: module has been merged into crc32-stream
-
> [email protected] install /home/coderus/node_modules/gittorrent/node_modules/webtorrent/node_modules/torrent-discovery/node_modules/bittorrent-tracker/node_modules/wrtc
> node-pre-gyp install --fallback-to-build

npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian                                                                                                                                                           

npm WARN optional dep failed, continuing [email protected]
[email protected] ../node_modules/gittorrent
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
└── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected])

Additional DHT Bootstrap Servers

core.gittorrent.org (but not dht.gittorrent.org) looks offline.

errors= [ { [Error: query timed out] address: '192.34.86.36:6881' } ]

Is there community run list of reliable dht nodes ? I can offer a dht bootstrap if needed.

Is this Project abandoned?

Is this project abandoned? I was searching for real distributed peer to peer git systems and found this awesome repo. Kudos for creating this technology. What is the roadmap for this project?

Simplify GitTorrent

I think it is easier for users to use git clone gitt@sjb/something rather than git clone gittorrent://sjb/something. Is it better that way? And what about gt?

Bitcoin username registration

This feature is not going to work on the live Bitcoin network until the OP_RETURN length is increased from 40 to 80 bytes, which will happen in Bitcoin Core v0.11, currently scheduled for release on July 1 2015. Until then, we'll use the Bitcoin testnet, but username registrations will be discarded when the move to the live network happens.

It's past July 2015 now; looks like it should be done? bitcoin/bitcoin#5286

Blockchain point to signed username request in DHT?

As suggested by dominictarr -- this has the advantage that you can't register a username on behalf of someone else, but a disadvantage that the blockchain isn't sufficient by itself to create the user database.

Oh! Maybe we just add the "username" into the user profile. That's already signed.

Open to burning coins to an unspendable address?

Is GitTorrent open to burning coins to an unspendable address (e.g. 1GitTorrentXXXXXXXXXXXXXXXXXahssxC) when storing data in the Bitcoin blockchain? This would let the GitTorrent client retrieve usernames with an SPV client instead of a full client by taking advantage of BIP 37. An SPV client should require about 10,000x less bandwidth than a full client. You would still need to use OP_RETURN outputs to store the actual data; this would just help with retrieving it efficiently.

How to integrate naming services with GitTorrent?

There have been a couple proposals for integrating different decentralized naming systems with GitTorrent (see #71, #72). If we go with the "namespacing" option (e.g. paulkernfeld@namecoin), how should these systems be integrated with GitTorrent?

It seems like a bad idea to integrate these libraries directly into GitTorrent for a couple reasons. First, this would bloat GitTorrent, increasing install time and complexity. Second, not all decentralized naming clients are written in Node.

So, perhaps the best option is to have GitTorrent run clients by calling out to an external process?

CC @blockstack, @xloem

Reapproach as a standard, implemented by one example application.

As it stands GitTorrent centralizes on JavaScript. I would wholeheartedly support the decentralization of the code itself on a language level, by implementing this in Ruby... if it were spelled out as a standard.

I see the GitTorrent organization exists. Is there a plan to move this repository over as GitTorrent-JS or the like, expecting GitTorrent-Ruby and similar, for other languages?

I propose a standard be extracted from this implementation, then this implementation become a demonstration/primary implementation, anticipating others.

`TypeError: Cannot read property 'length' of undefined`

vinipsmaker ~/test $ git clone gittorrent://github.com/cjb/recursers
Cloning into 'recursers'...

Okay, we want to get: 5fbfea8de70ddc686dafdd24b690893f98eb9475

/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/node_modules/k-bucket/index.js:225
    if ((id.length <= bytesDescribedByBitIndex)
           ^
TypeError: Cannot read property 'length' of undefined
    at KBucket.determineBucket (/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/node_modules/k-bucket/index.js:225:12)
    at KBucket.get (/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/node_modules/k-bucket/index.js:258:18)
    at DHT._onPut (/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/client.js:485:27)
    at DHT._onQuery (/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/client.js:1051:30)
    at DHT._onData (/usr/lib/node_modules/gittorrent/node_modules/bittorrent-dht/client.js:1035:10)
    at Socket.emit (events.js:110:17)
    at UDP.onMessage (dgram.js:472:8)
zsh: exit 128   git clone gittorrent://github.com/cjb/recursers

Version 0.1.7 installed through npm.

Watch git repositories for changes

So it seems that I have to restart gittorrentd after modifying the master of any repositories I'm hosting (either that or any update is really slow). This is not ideal, as I would like to have my developers push to a copy of the repo being watched by gittorrent, with gittorrent being notified of such a change and immediately updating the DHT / hosting the new master ref.

Perhaps this could be accomplished through a Git post-receive hook with a documented example? I'm restarting the daemon in a post-receive hook now as a temporary fix.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.