Ницца! Код выглядит чистым.
caveden, там было несколько других полной заново реализованным. BitcoinJS это один, я думаю, Ufasoft сделал один, и на самом деле я только что закончил слияние кода с Мэтта, что делает bitcoinj полностью подтверждающее выполнение стиля ультра-сливовым, а также (конечно, он все еще может работать в режиме SPV тоже).
Таким образом, эта реализация вступает в ряды.
Тем не менее, от глядя на код, я не могу найти несколько особенностей, я ожидал, чтобы быть там:
- Где реализация кошелек? Как бы я реализовать PingService из каталога примеров bitcoinj?
- Где тесты доказать соответствие со всеми Satoshis ошибок? Я вижу несколько тестов, но они довольно минималистские.
- документация по API
например, есть тесты сценария в bitcoinj (со вчерашнего дня) и клиент Satoshi, что проверить выполнение каждого сценарий опкода правильно и в положительных и отрицательных путях. Было бы хорошо, чтобы увидеть их. Твердая часть создания полных узлов не реализует протокол, это обеспечение вы получили все детали правильно.
Re: Ваши комментарии о монолитной конструкции. Что касается вашего опыта, я не думаю, что просто с помощью Spring делает что-то "модульная" против "монолитный", Позволяя людям создавать мощные приложения, как много о документации, примеры, хорошо указанных интерфейсов обратного вызова, как это о хорошо использовать дизайн OO. Например, существует множество интерфейсов слушателей по всему bitcoinj, и каждый из них хорошо определены и последовательное поведение: слушатели запустить заперта, они могут удалить себя во время выполнения, но не других слушателей. Кроме того, большинство из них документирует разрешено повторное entrancy. Такого рода вещи делает написание приложений намного проще.
Я был бы первым, чтобы признать, что bitcoinj может использовать некоторые любящий рефакторинг. API в местах довольно грязно. Существует на самом деле не достаточно хорошо блок цепи API. Кошелек необходимо расщепление из настраиваемых в объекты политики. Тем не менее, вы, кажется, не есть объект Wallet на всех, если я что-то не пропустил, так что я не чувствую себя слишком плохо о том, что он выглядит так, как это делает, потому что bitcoinj уже используется для записи всех видов приложений, от конечного пользователя перед бумажники к SatoshiDice. Таким образом, в настоящее время мы, как правило, приоритеты несколько новых возможностей рефакторинга и API маслобойки, что делает его трудно идти в ногу.
В будущем может быть bitcoinj2 усилия, реорганизует вещи немного.
Кстати:
Вам не нужно ждать ultraprune, просто придерживаться в более высокой производительности базы данных ...
Я не уверен, что вы понимаете, что ultraprune делает или почему производительность выше. Во-первых, это делает своп из BDB для LevelDB, который не совсем трудно изменить. Но что более важно, это уменьшает размер базы данных рабочего набора по принципиально реорганизовать, как используются данные. Это не имеет значения, какую базу данных бэкэнд вы используете или как легко поменять или, если так, как вы храните данные неэффективно.