Я имел в виду следующие подразделения, но ядро Bitcoin разработчики могли бы иметь лучшие идеи:
- центр знаний: Это отслеживает известных операций и блоков, а также их статус
- Обработчик протокола P2P: Обмен информацией между центром знаний и другими узлами в сети Интернет
- Блок хранение цепи: Выполняет загрузку / хранение информации об операции в / из центра знаний
- контрольник: Проверяет обоснованность операций и блоков, а также уведомляет центр знаний результата
- шахтер: Создает новые блоки (получает транзакции от центра знаний и представляют блоки в него)
- UI: Показывает информацию пользователя и позволяет пользователю выполнять действия.
- Бумажник: магазины закрытых ключей и создает / признаки сделок по запросу UI
Это будет иметь ряд преимуществ:
- Каждый отдельный компонент меньше, и, следовательно, его код легче понять, чем ее эквивалент в монолитном клиента. Это главным образом потому, что сам дроблении архитектура создает хороший обзор, и потому, что интерфейсы между компонентами (предполагается) хорошо документирована.
- Производное от этого: это позволяет больше разработчиков к участию в разработке программного обеспечения. Он также может выступать в качестве ориентира для организационного подразделения, где развитие каждого компонента может иметь различное "ведущий разработчик",
- Кроме того, полученные от того более понятного кода безопасности улучшится.
- Безопасность также улучшится, потому что каждый модуль будет иметь только подмножество всех угроз для беспокойства. Торговцы более параноидально / крупнообъемные может улучшить безопасность за счет выполнения каждого компонента в виде отдельного процесса в специализированном контексте безопасности минимального привилегий.
- Инновации в различных компонентах могут быть разработаны более или менее независимо друг от друга. Люди могут использовать раскрывающийся в замене одного компонента, сохраняя при этом других компонентах без изменений. Например, люди могут сделать компоненты пользовательского интерфейса с дополнительными функциями, или использовать компонент мозга бумажника вместо зашифрованного хранения на диске. Или можно заменить центр знаний с чем-то на основе услуг, таких как blockchain.info (или использовать менее радикальную идею для создания легкого клиента). Некоторые нововведения требуют изменений интерфейса между компонентами; чтобы позволить этому, я думаю, что интерфейсы должны быть расширяемым (по аналогии с OpenGL API)
Для повышения эффективности, я думаю, что может быть какой-то "общий код" между этими компонентами, например, определения классов с функциональными сериализации и код для принятия (RPC?) интерфейсов. Для того, чтобы не отменить преимущества дробя кодекс, "общий код" должно содержать как можно меньше функциональные возможности, как это возможно.