Клиент Оригинал Bitcoin Satoshi в - Оперативный Просмотр
Предисловие
---------
Я думал, что мой клиент слишком долго, чтобы загрузить блок цепь и
видимому, не работать гладко. Я думал, что я мог бы сделать что-то, чтобы уменьшить
время блок загрузки. Так что я скачал код и окопался. В конце концов,
Я не смог найти серебряную пулю для устранения длинных задержек скачать
(Большой сюрприз!). Но мне удалось проникнуть ++ код C и фигуру
о том, как все работает по большей части.
Итак, я решил записать свое понимание кода от оперативного
в перспективе, чтобы избавить тех, кто не владеет в C ++ от необходимости продираться
через код, который довольно плотно и немного муторно, чтобы выбрать обособленно,
когда они на самом деле просто хотят знать "как это работает",
Мое внимание было сосредоточено в первую очередь на процесс загрузки блока, но я решил
идти вперед и охватывают все основные операционные аспекты я мог (до потери
интерес . Я действительно думаю, что я нашел несколько областей для улучшения, но это не
точка этих статей. Я буду стараться, чтобы понять, когда я констатирую
факты против, когда я пишу комментарий.
Я намереваюсь эти статьи, чтобы перейти в вики на какой-то момент, но я также
думал, что это было бы полезно, чтобы открыть темы на форуме для того, чтобы
позволяют для рассмотрения в случае, если я допустил ошибку или пропустил что-то большое,
и для справки.
обзор
------------
Эта серия статей будет сосредоточено на том, как Satoshi Bitcoin клиента
Программа работает, и в меньшей степени на детали протокола и правила
для обработки блоков и операций.
Bitcoin клиент Satoshi является программа C ++, так что искать код в
как .cpp и .h файлы заголовков. Кроме того, программа является многопоточной.
Это приводит к некоторой сложности и использование определенных шаблонов коды для решения
с параллелизмом, которые могут быть не знакомы многим программистам. Так же
код агрессивен в использовании конструкций C ++, так что это поможет быть
свободно с картой, multmap, набор, веревок, вектор, iostream и шаблонов.
Для получения информации о том, как работает протокол Bitcoin, см:
Оригинальный Satoshi Whitepaper:
http://bitcoin.org/bitcoin.pdf
Статьи на bitcoin.it Wiki:
https://en.bitcoin.it/wiki/Category:Technical
С особым упоминанием спецификации протокола:
https://en.bitcoin.it/wiki/Protocol_specification
И правила протокола:
https://en.bitcoin.it/wiki/Protocol_rules
-- Операции -
Клиент ориентирован вокруг нескольких основных операций, в том числе:
Инициализация и запуск
При запуске клиент выполняет различные процедуры initilization
в том числе, начиная несколько потоков для обработки параллельных операций.
Узел обнаружения
Клиент использует различные методы, узнать о других Bitcoin
узлы, которые могут существовать.
Connectivity Node
Клиент инициирует и поддерживает соединения с другими узлами.
Розетки и сообщения
Клиент обрабатывает сообщения от других узлов и посылает
Сообщения к другим узлам с помощью подключения к сокету.
Блок обмена
Узлы рекламировать свой перечень блоков друг к другу и
обменные блоки для построения блок-цепи.
Транзакция Обмен
обмен Узлы и релейные сделки друг с другом.
Клиент связывает операции с Bitcoin адреса в
местный бумажник.
бумажник Услуги
Клиент может создавать операции с использованием локального бумажника.
Клиент связывает операции с Bitcoin адреса в
местный бумажник. Клиент предоставляет услуги по управлению
местный бумажник.
RPC интерфейс
Клиент предлагает интерфейс JSON-RPC через HTTP через сокеты
для выполнения различных оперативных функций и управления местного
бумажник.
Пользовательский интерфейс
Код пользовательского интерфейса планируется вытеснены Bitcoin-Qt.
Таким образом, она не покрыта более подробно.
Смотрите их отдельные статьи более подробно на каждом из этих операций.
-- fClient Mode -
Стоит отметить, что есть код на клиенте, чтобы позволить ему
работать в режиме, когда он только загрузка заголовков блоков.
Реализация предназначена для использования в качестве режима легкого клиента, который
может работать без проверки и хранения всех блоков и транзакций.
Это управляется переменной fClient в коде, который в настоящее время
закодирована ложным. Это в настоящее время не считается законченным кодом.
Этот режим называется режимом fClient и фраза упрощенных оплат
Режим проверки (или SPV) также используется для описания облегченный
клиент подход.
-- Основные функции Уровень темы -
init.cpp:
главный()
ExitTimeout
Неисправность
net.cpp:
StartNode
ThreadGetMyExternalIP
ThreadMapPort
ThreadSocketHandler
ThreadOpenConnections
ThreadMessageHandler
rpc.cpp:
ThreadRPCServer
irc.cpp:
ThreadIRCSeed
db.cpp:
ThreadFlushWalletDB
ui.cpp:
ThreadDelayedRepaint
SendingDialogStartTransfer
-- Значительные классы File -
net.cpp / .h:
CNode: handes соединение один сокет
CINV
CAddress
CMessageHeader
CRequestTracker
main.cpp / .h:
CDiskTxPos
CInPoint
COutPoint
CTxIn
CTxOut
CTransaction
CMerkleTx
CTxIndex
CBlock
CBlockIndex
CDiskBlockIndex
CBlockLocator
CAlert: CUnsignedAlert
wallet.cpp / .h
CWallet: CKeyStore
CReserveKey
CWalletTx: CMerkleTx
CWalletKey
CAccount
CAccountingEntry
db.cpp / .h:
CTxDB
CKeyPool
CWalletDB
bignum.h
CBigNum
util.h
CCriticalSection: используется для нарезания раздора
--
Поиск по "Satoshi Операция клиента" для большего количества статей в этой серии.
Сделки по обмену:
Блок обмена:
Розетки и сообщения:
Connectivity Node:
Discovery Node:
Инициализация и запуск Темы: