Satoshi Client Operation: Transaction Обмен
---------------------------------------------------------
Клиент Satoshi рекламирует локально сгенерированные операции и реле
Операции с других узлов. В данной статье описывается операция
что сделка с этим обменом сделок.
Смотрите эту статью для получения дополнительной информации о том, как сделки проверяются:
https://en.bitcoin.it/wiki/Protocol_rules#.22tx.22_messages
-- Бумажник Send -
Клиент периодически вызывает SendMessages () (в main.cpp), который вызывает
ResendWalletTransactions для отправки транзакций, генерируемых locallly.
Эта процедура выглядит, чтобы увидеть, если там был новый блок, так как в последний раз,
и если да, и локальная транзакция еще не в блоке,
то транзакции посылаются всем узлам.
Это делается только приблизительно каждые 30 минут.
Сделки только ретранслировать, если они имеют метку времени, по крайней мере
5 минут старше, чем последний блок был получен. Они сортируются
и послал старые сверху. [1]
-- Периодическая Реклама -
Клиент периодически вызывает SendMessages () (в main.cpp), который
определяет, является ли сообщение должно быть отправлено на удаленный узел.
Для каждой итерации обработки сообщений, один узел выбран в качестве
"струйка узел". [2] Этот узел является единственным выбран, чтобы получить
"адр" сообщение, если это необходимо. [3]
В разделе инвентаризации, клиент отправляет 1/4 сделки
инвентаризации, определяются случайным образом [4], если они не являются узлом струйки,
в этом случае они получают ВСЕ сделки. [5] Да, что кажется обратное,
Но что есть, то есть. Если узел должен получить 1/4 (не все), то
код также позволяет избежать отправки каких-либо операций, которые пришли из местного
бумажник. [6] Комментарии показывают, это предназначено для повышения конфиденциальности.
-- реле -
Когда клиент получает транзакцию с помощью "Техас" Сообщения,
он вызывает RelayMessage, который вызывает RelayInventory, которые Очереди
инвентаризации для отправки на все остальные узлы. [7]
Сноски
----------
1. См CWallet :: ResendWalletTransactions в wallet.cpp.
2. См:
pnodeTrickle = vNodesCopy [GetRand (vNodesCopy.size ())];
... а также ...
SendMessages (pnode, pnode == pnodeTrickle);
в ThreadMessageHandler2 () в net.cpp.
3. См:
//
// Сообщение: адр
//
если (fSendTrickle)
{
в SendMessages () в main.cpp.
4. См:
BOOL fTrickleWait = ((hashRand & 3) = 0!);
в SendMessages () в main.cpp.
5. См:
// сочиться ТМИ и для защиты конфиденциальности
если (inv.type == MSG_TX && ! FSendTrickle)
{
в SendMessages () в main.cpp.
6. См:
// всегда сочиться наши собственные операции
если (! fTrickleWait)
{
CWalletTx WTX;
если (GetTransaction (inv.hash, WTX))
если (wtx.fFromMe)
fTrickleWait = TRUE;
}
в SendMessages () в main.cpp.
7. Оба RelayMessage и RelayInventory в net.h.
--
Поиск по "Satoshi Операция клиента" для большего количества статей в этой серии.