Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I2P Integration #1111

Open
ebfull opened this issue Jul 18, 2016 · 7 comments
Open

I2P Integration #1111

ebfull opened this issue Jul 18, 2016 · 7 comments
Assignees
Labels
C-future-proofing Category: Changes that minimise the effects of shocks and stresses of future events. C-upstream-port Category: Changes that are ported from the Bitcoin Core codebase. F-i2p Feature: I2P integration

Comments

@ebfull
Copy link
Contributor

ebfull commented Jul 18, 2016

Let's consider how to integrate and use I2P, leveraging the work upstream might be doing in this area.

@str4d str4d added C-upstream-port Category: Changes that are ported from the Bitcoin Core codebase. C-future-proofing Category: Changes that minimise the effects of shocks and stresses of future events. F-i2p Feature: I2P integration labels Jul 19, 2016
@str4d
Copy link
Contributor

str4d commented Jul 19, 2016

The corresponding upstream issue is bitcoin/bitcoin#2091.

@str4d
Copy link
Contributor

str4d commented Jul 19, 2016

Several years ago, upstream Bitcoin was forked and extended with native I2P support:

https://github.com/VirtualDestructor/bitcoin-qt-i2p

We may be able to leverage some of this - certainly the I2P-specific components like the C++ SAM library. The network integration may want to be made more generic, particularly if we want to pre-emptively add support for other longer addresses like Tor's next-gen onion services (mentioned in #917).

@bitcartel
Copy link
Contributor

bitcartel commented Jul 19, 2016

Note: this ticket emerged from discussion in zcash #917

@Cryptoslave
Copy link

Cryptoslave commented Jul 21, 2016

@str4d You are welcome to get inspiration from our I2P integration reworked by GroundRod on Anoncoin.
https://github.com/Anoncoin/anoncoin
Anoncoin is the only coin with I2Psam integrated right now, and not using some kind of proxy for I2P.
https://wiki.anoncoin.net/How_to_install_and_use_I2P
https://wiki.anoncoin.net/How_to_install_Anoncoin
https://wiki.anoncoin.net/images/0/01/Walleti2p.PNG

@str4d
Copy link
Contributor

str4d commented Apr 1, 2017

I have extracted the I2P SAM library from Anoncoin (complete with history back to giv's original work on bitcoin-qt-i2p) into https://github.com/i2p/i2psam. Next step is to examine the I2P wrapper and get my head around how it is integrated into the network subsystem, so I can try and distill it into a design document.

@SamsungGalaxyPlayer
Copy link

I think Kovri can really help with this. It's being developed for Monero, but it should (in my understanding) also work with Zcash. Here is the GitHub repository:

https://github.com/monero-project/kovri

And their website:

https://getkovri.org/

Now, Kovri is nearing an alpha release in a few weeks (the main developer says it is 99% ready), so it still has some work to be done. On top of this, the alpha only brings basic I2P router functionality. The client and core are still being developed, which would allow integration with Monero and really any other project that wants to use it:

monero-project/kovri#350 (libcore)
monero-project/kovri#351 (libclient)

I think this is the best project for your requirements going forward.

@str4d
Copy link
Contributor

str4d commented May 10, 2017

[I2P developer hat on]

Kovri as-is would be one of the easiest means to integrate I2P, as all functionality would be included and nothing unnecessary would be present (and it is also being written with cryptocurrency in mind). However, monero-project/kovri#351 would necessarily require using Kovri as the router, because AFAICT that client library will only interface with Kovri's core API. If we want users to be able to optionally leverage their existing non-Kovri router, we'd need to use a different client library (like i2psam above) that speaks a common API (Java I2P and i2pd have SAM, and Kovri could have it added later).

Note also that the decision of how to interface with I2P (i2psam vs Kovri vs other options) is only a small part of this ticket. The majority of the design and engineering work will be on designing and implementing the Zcash network protocol extensions, which will not depend on the I2P interface (and in fact can be shared with upstream Bitcoin).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-future-proofing Category: Changes that minimise the effects of shocks and stresses of future events. C-upstream-port Category: Changes that are ported from the Bitcoin Core codebase. F-i2p Feature: I2P integration
Projects
Protocol Team
  
Network Privacy and Security
Development

No branches or pull requests

5 participants