-
Notifications
You must be signed in to change notification settings - Fork 451
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
Blockchain Engineering - class of 2024 - Team Democracy-1: blockchain networking (a) #7911
Comments
For the task to get the uTP transfer going, should we just make a completely fresh project and somehow already integrate it into the current project? uTP Thesis - link |
First task, get uTP working, minimal changes. No superapp integration yet. |
Sprint goal this week: structural measurement table of uTP. read example table Measurement environment with packet loss and latency with reproducible performance test. One script to produce the example table with various conditions: 2 laptop and 1% packet loss rate |
ToDo:
|
Skipped packages needed before fast retransmit Target Delay of Congestion Control Test performed with 1% package loss under 250 ms latency, transfer speed taken as average of 10 runs Benchmark Program Location: https://github.com/iiljkic/utp4j/blob/master/src/main/java/net/utp4j/examples/configtest/ConfigTestWrite.java |
We've actually contacted the author of the utp4j library and he personally suggested to rewrite it from scratch. Still in the contact about some other details, but this was his main reply about the maintenance/taking over the project. Current versions:
Current week progress update:
|
Week Update:
Example: fast restransmission Benchmark without latencyExample: same fast restransmission Benchmark with 50ms latency |
|
Starting off this week updates:
|
Callum: Was sick for most of last week so will need to do some catching up the upcoming week(s). |
Weekly Update Benchmarking Team:
Benchmark results (performed on 4mB file): At 500ms delay, with 10ms jitter and 1% pkt loss |
|
This week:
|
Week 6 Report Benchmarking team: This week:
|
For the next week:
|
These are two opposites. The simple way is not elegant and the elegant way is not simple. First, the difficult/elegant way would be to have channel separation for control logic and data streaming. You would have to puncture the NAT in a separate community with a separate socket and "hand off" this socket to your uTP streaming protocol. In a fantasy world, this would be on a separate physical channel as well (but this is obviously not realistic for consumer connections). You would need to use some form of DHT to couple the peer identity in the streaming community to the identity in your control logic community. Second, the simple way: create a new IPv8 message to wrap your uTP packets. You will not get optimal performance, you will hinder other communities, and you will not have nice logical separation.. but it works 🤷 If your goal is to "just get something running", pick this option. |
I think that still the "difficult" solution would be actually easier if we're supposed to reuse the library code. As right now all the socket stuff, threads and listeners are quite coupled with the logic of uTP making it hard to just reuse the existing IPv8 socket. I've already attempted it and made quite a bit of progress, but still there would need to be quite a lot of refactoring required in the library to actually get it working well, which then makes it even less sense to use the library and probably just better to rewrite it from scratch with the separation (due to other known issues). For now I was able to get the separate socket and everything working on local networks only reusing the IPv8 to exchange status messages about file transfer request and other metadata, then the separate socket is used to actually send binary data. I'm now considering what would be the way to actually properly get the NAT puncture to work. Do you have any suggestion on what to use for it to work in a simple way? I don't think it's possible to somehow open another port with the existing p2p connection, we'd still have to use 3rd party to establish the external ports and that's what I'm currently considering. |
Weekly update:
|
|
UTP_demo.webmHere is the demo of how it looks at the moment, as soon as we receive a package from one of these peers, the status indicator should turn to green. Post-meeting notes: |
This week progress:
|
Great progress. The apk is working with speed up to 1 MB/s For next week:
|
Project contentDownload APK here. For documented details regarding the app usage, click here. For documented details regarding benchmarking done over the course time, click here. All relevant work for the project on respective repositories is linked below:uTP4jFor documented details on relevant changes and benchmarking, click here. trustchain-superappkotlin-ipv8For more documented details about the uTP integration, click here Overall project overviewLibrary
Benchmarking
App
IPv8
|
Project assignment for Delft University of Technology master course called "blockchain engineering".
Democracy-1: Blockchain networking
Replay historical voting rounds on the live network. Emulate 10..50 identities from a single smartphone.Understand and re-use existing ready-to-go datasets with DAO votes.Create transaction blocks within Trustchain in a custom IPv8 community using Kotlin superappBackground reading:
Upcoming sprint assignment
The text was updated successfully, but these errors were encountered: