Моя цель состояла в том, чтобы создать стабильную и универсальную реализацию протокола P2P клиенты используют для общения друг с другом в Java. Это не простой интерфейс, но попытка создать чистую реализацию номера фактического протокола! Я знаю, что есть тихо несколько человек там пытается сделать то же самое, и я хотел бы, чтобы получить их на борту с этим проектом.
Необходимость альтернативного клиента есть, особенно, если мы хотим получить Bitcoin пойти мобильный, как Android приложение, или просто потому, что мы не хотим, чтобы положить все яйца в одну корзину (прямо сейчас, если ошибка, будет открыт в Традиционный клиент вся сеть может быть снесена одним нападающими).
Что касается того, осуществляется:
- Клиент может подключаться к другим клиентам
- Соединение может быть сохранено (правильное рукопожатия, пинг, ...)
- Все сообщения, кроме getblocks и GetData были реализованы и работают правильно
- Код может уведомить любое количество слушателей о входящих сообщениях и сообщениях может быть отправлен обратно
- 70% покрытие + код с нашими модульными тестами!
Что скоро будет следовать:
- Простой водитель, чтобы сохранить пул соединений живых
- Переход к Неблокирующей IO, с тем чтобы избежать тема холостых хода в ожидании входящих сообщений
- Другие модульные тесты
- Менее уродства, более прохлада
То, что не будет реализован в части сети:
- Crypto материал: Я хотел бы сохранить сетевую реализацию как можно, и классные вещи можно сделать даже без криптографического материала (сеть ползать, передачу сообщений, ...), поэтому я решил перенести крипто вещи из этого модуля и реализовать его в качестве слушателя, который будет подключить к ядру сети.
- Блок хранения: опять же это, чтобы держать вещи простыми, и было бы здорово иметь несколько реализаций этого (плоский файл / хранения SQL, сохранить все / оставить только входы для моей сделки, ...)
Используй это
Как я уже сказал, это библиотека, а не отдельная программа. Для того, чтобы использовать его в вашей программе, чтобы обеспечить реализацию интерфейса BitcoinEventListener, который позволяет библиотеке уведомить код о сообщениях от сети, а также позволяет вашей программе отправлять сообщения обратно. Для примера о том, как использовать его видеть BitcoinClientDriver, который является кодом, который делает рукопожатие и держит соединение живого.
кодирование
Как я уже сказал, я надеюсь, чтобы получить больше людей на борту с этим. Код выпущен под лицензией Apache, который должен сделать это возможным для вас использовать его. Я пытался сохранить количество зависимостей как можно ниже (если подумать об этом, только зависимость является SLF4J, что позволяет подключить любой лесозаготовительной объекта вы хотите).
Код на GitHub (https://github.com/cdecker/BitDroid-Network), Не стесняйтесь раскошелиться это, я только прошу вас помочь мне улучшить его, внося изменения обратно в меня (просто отправить запрос тянуть и я объединить его, если это разумно изменить).
Я использую Maven2 в качестве инструмента сборки, чтобы начать работу проверить код и запустить пакет МВН и он будет строить.
Под / тест / ресурсы Src мы имеем 24 часов стоимостью сплит сети самосвала в отдельных сообщениях, они используются в модульных тестов, которые я с гордостью сказать, покрывающие большую часть кода. Если вы нашли ошибку, пожалуйста, создать модульный тест, который иллюстрирует эту проблему.
А теперь разгореться о качестве кода