info_infoman (OP)
|
|
October 06, 2014, 10:33:31 AM |
|
подскажите пжлст вкладка "транзакции" там отображаются транзакции находящиеся на стадии генерации? (mempool) и отображаются ли там транзакции входящие которые еще не приняты в блок (на стадии генерации) на эту мысль меня натолкнул этот кусок кода в transactionrecord.cpp я правильно понимаю что туда падают транзакции еще даже не включенные в блок?: // For generated transactions, determine maturity if(type == TransactionRecord::Generated) { int64 nCredit = wtx.GetCredit(true); if (nCredit == 0) { status.maturity = TransactionStatus::Immature;
if (wtx.IsInMainChain()) { status.matures_in = wtx.GetBlocksToMaturity();
// Check if the block was requested by anyone if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) status.maturity = TransactionStatus::MaturesWarning; } else { status.maturity = TransactionStatus::NotAccepted; } } else { status.maturity = TransactionStatus::Mature; } }
|
|
|
|
amaclin
Legendary
Offline
Activity: 1260
Merit: 1019
|
|
October 06, 2014, 12:39:49 PM |
|
Не очень понял вопрос. Но в мемпуле транзакции, которые еще не включены в блок. Да.
Что значит "на стадии генерации"? Неподписанные чтоли? Ну это вообще не транзакции собственно, а набор байтов. (Что означает данный код - я понять не могу - не разбирался конкретно с этим)
|
|
|
|
Sheogorath
Newbie
Offline
Activity: 41
Merit: 0
|
|
October 06, 2014, 02:17:19 PM |
|
Но в мемпуле транзакции, которые еще не включены в блок. Да.
+1 И внимание, транзакция может исчезнуть из основной цепочки блоков при реорганизации.
|
|
|
|
amaclin
Legendary
Offline
Activity: 1260
Merit: 1019
|
|
October 06, 2014, 02:30:36 PM |
|
И внимание, транзакция может исчезнуть из основной цепочки блоков при реорганизации. Ну, да. Причем она в этом случае может как вытряхнуться в мемпул, так и вообще оказаться конфликтущей с уже имеющимися в мемпуле и даже в мейнчейне - тогда клиент её просто отбрасывает.
|
|
|
|
Sheogorath
Newbie
Offline
Activity: 41
Merit: 0
|
|
October 06, 2014, 03:00:09 PM |
|
Ну, да. Причем она в этом случае может как вытряхнуться в мемпул, так и вообще оказаться конфликтущей с уже имеющимися в мемпуле и даже в мейнчейне - тогда клиент её просто отбрасывает.
Там какая-то непонятная логика, у меня на форках иногда сгенерированный блок совсем пропадал из списка, а иногда оставался висеть как неподтверждённый.
|
|
|
|
amaclin
Legendary
Offline
Activity: 1260
Merit: 1019
|
|
October 06, 2014, 03:19:29 PM |
|
Там какая-то непонятная логика, у меня на форках иногда сгенерированный блок совсем пропадал из списка, а иногда оставался висеть как неподтверждённый.
Ээээ! Полегче! Что такое неподтвержденный блок? Орфан что ли? Если у вас блоки 100500-100501-100502... И тут приходит блок 100504 (а пятьсот третьего нет) то клиент вообще говоря просто его может выкинуть и ждать, когда придет сперва пятьсот третий, а потом от той же ноды и пятьсот четвертый Куда клиент сует орфан-блок - это его собачье дело. Может сохранять, может отбрасывать Важно то, что орфан-блок никак не влияет на мемпул и мейнчейн
|
|
|
|
Sheogorath
Newbie
Offline
Activity: 41
Merit: 0
|
|
October 06, 2014, 03:26:38 PM |
|
Там какая-то непонятная логика, у меня на форках иногда сгенерированный блок совсем пропадал из списка, а иногда оставался висеть как неподтверждённый.
Ээээ! Полегче! Что такое неподтвержденный блок? Орфан что ли? Если у вас блоки 100500-100501-100502... И тут приходит блок 100504 (а пятьсот третьего нет) то клиент вообще говоря просто его может выкинуть и ждать, когда придет сперва пятьсот третий, а потом от той же ноды и пятьсот четвертый Куда клиент сует орфан-блок - это его собачье дело. Может сохранять, может отбрасывать Важно то, что орфан-блок никак не влияет на мемпул и мейнчейн Майнил соло, прямо на qt кошелёк, вот такие варианты и наблюдал. Потом приходилось пересканировать, иначе при попытке отправить намайненое транзакции не проходили. Хз, это глюки форка, исходного bitcoin кода или мои собственные )) Что-то не то с терминами, орфан, по идее, блок без предка. А как выкинутый от реорганизации блок называется?
|
|
|
|
amaclin
Legendary
Offline
Activity: 1260
Merit: 1019
|
|
October 06, 2014, 03:30:16 PM |
|
Что-то не то с терминами, орфан, по идее, блок без предка. А как выкинутый от реорганизации блок называется?
А фиг знает. Если приходят два разных блока и оба пятьсот-третьи, то клиент при приходе второго из них выбирает большую сложность цепочки и либо игнорирует второй, либо реорганизует. В этом случае в самом blk-файле блок остается (вдруг потом придется опять реорганизовывать?) UPD: а, ну значит нельзя "просто выкидывать". чтоб потом от него тоже можно было бы чейн строить. я бы предложил так: орфан - блок без предка вообще блок с предком но не в мейнчейне - это сайдчейн или сайдблок Но это моё понимание, может быть имеются более устоявшиеся названия
|
|
|
|
Sheogorath
Newbie
Offline
Activity: 41
Merit: 0
|
|
October 06, 2014, 03:47:25 PM |
|
Что-то не то с терминами, орфан, по идее, блок без предка. А как выкинутый от реорганизации блок называется?
А фиг знает. Если приходят два разных блока и оба пятьсот-третьи, то клиент при приходе второго из них выбирает большую сложность цепочки и либо игнорирует второй, либо реорганизует. В этом случае в самом blk-файле блок остается (вдруг потом придется опять реорганизовывать?) UPD: а, ну значит нельзя "просто выкидывать". чтоб потом от него тоже можно было бы чейн строить. я бы предложил так: орфан - блок без предка вообще блок с предком но не в мейнчейне - это сайдчейн или сайдблок Но это моё понимание, может быть имеются более устоявшиеся названия Когда имеются два блока-"брата" нельзя выбирать из них лучший по сложности, иначе можно придержать удачный блок и запустить в сеть позже. Вроде в такой ситуации выбирается первый пришедший блок, надо посмотреть в код. В моей ситуации (майнил молодую валюту, сидел за NAT - хороший хешрейт, плохая connectivity) непонятно как блок умудрялся совсем исчезнуть, вроде должен был остаться в sidechain (блин, этот термин уже занят под валидные цепочки, которые целиком в основной blockchain не включаются!) и висеть неподтверждённым.
|
|
|
|
amaclin
Legendary
Offline
Activity: 1260
Merit: 1019
|
|
October 06, 2014, 03:53:07 PM |
|
Когда имеются два блока-"брата" нельзя выбирать из них лучший по сложности, иначе можно придержать удачный блок и запустить в сеть позже. А откуда взялся второй? Если он пришел из сети и имеет большую сложность - то нода должна взять его в мейнчейн и майнить от него Иначе большой риск майнить сайдчейн. Если второй блок мы сами сгенерировали - то мы сами себе злобные буратины - надо было при приходе "первого" блока переключиться и не майнить сайдчейн. Какая пох разница? ТС не об этом спрашивал!
|
|
|
|
Sheogorath
Newbie
Offline
Activity: 41
Merit: 0
|
|
October 06, 2014, 04:03:26 PM |
|
Если он пришел из сети и имеет большую сложность - то нода должна взять его в мейнчейн и майнить от него
Если считать чисто по сложности, у кого хэш меньше, тот и главный, то придержав свой удачный блок можно почти гарантированно выбить чужой. Отсюда selfish-mining и зародыш даблспенда. Надо подумать, вдруг что полезное придумается. Какая пох разница? ТС не об этом спрашивал!
Кстати, да. Ещё научим чему плохому ))
|
|
|
|
amaclin
Legendary
Offline
Activity: 1260
Merit: 1019
|
|
October 06, 2014, 04:18:36 PM |
|
Если считать чисто по сложности, у кого хэш меньше, тот и главный, то придержав свой удачный блок можно почти гарантированно выбить чужой. Отсюда selfish-mining и зародыш даблспенда. Надо подумать, вдруг что полезное придумается.
А сложность по-моему меряется не только по хешу блока, но и с учетом транзакций в нем То есть блок с большим числом транзакций будет в некоторых случаях перешибать блок с меньшим хешом А уж в случае если в цепочке несколько блоков - то там суммируется. То есть "придержав" свой случайно найденный блок с очень маленьким хешом вы рискуете что его сеть не примет в мейнчейн.
|
|
|
|
info_infoman (OP)
|
|
October 07, 2014, 04:36:24 AM |
|
я имею ввиду интерфейс вкладки "Транзакции" в клиенте что там отображается? судя по коду там отображаются вообще все транзакции поступившие ноде и созданные нодой а именно дебитовые(входящие) и кредитовые(исходящие) на адреса в кошельке причем судя по коду там отображаются все транзакции попавшие в mempool то есть еще не включенные в блок: ниже кусок кода transactionrecord.cpp он подгружается в transactionmodel и transactiontable а они отвечают именно за вкладку "Транзакции" я прав? // // Credit // BOOST_FOREACH(const CTxOut& txout, wtx.vout) { if(wallet->IsMine(txout)) { TransactionRecord sub(hash, nTime); CTxDestination address; sub.txcomment = txcomment; sub.idx = parts.size(); // sequence number sub.credit = txout.nValue; if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*wallet, address)) { // Received by Bitcoin Address sub.type = TransactionRecord::RecvWithAddress; sub.address = CBitcoinAddress(address).ToString(); } else { // Received by IP connection (deprecated features), or a multisignature or other non-simple transaction sub.type = TransactionRecord::RecvFromOther; sub.address = mapValue["from"]; } if (wtx.IsCoinBase()) { // Generated sub.type = TransactionRecord::Generated; }
parts.append(sub); } } } else { bool fAllFromMe = true; BOOST_FOREACH(const CTxIn& txin, wtx.vin) fAllFromMe = fAllFromMe && wallet->IsMine(txin);
bool fAllToMe = true; BOOST_FOREACH(const CTxOut& txout, wtx.vout) fAllToMe = fAllToMe && wallet->IsMine(txout);
if (fAllFromMe && fAllToMe) { // Payment to self int64 nChange = wtx.GetChange();
parts.append(TransactionRecord(hash, nTime, TransactionRecord::SendToSelf, "", -(nDebit - nChange), nCredit - nChange, txcomment)); } else if (fAllFromMe) { // // Debit // int64 nTxFee = nDebit - wtx.GetValueOut();
for (unsigned int nOut = 0; nOut < wtx.vout.size(); nOut++) { const CTxOut& txout = wtx.vout[nOut]; TransactionRecord sub(hash, nTime); sub.idx = parts.size(); sub.txcomment = txcomment;
if(wallet->IsMine(txout)) { // Ignore parts sent to self, as this is usually the change // from a transaction sent back to our own address. continue; }
CTxDestination address; if (ExtractDestination(txout.scriptPubKey, address)) { // Sent to Bitcoin Address sub.type = TransactionRecord::SendToAddress; sub.address = CBitcoinAddress(address).ToString(); } else { // Sent to IP, or other non-address transaction like OP_EVAL sub.type = TransactionRecord::SendToOther; sub.address = mapValue["to"]; }
int64 nValue = txout.nValue; /* Add fee to first output */ if (nTxFee > 0) { nValue += nTxFee; nTxFee = 0; } sub.debit = -nValue;
parts.append(sub); } } else
|
|
|
|
in100
Legendary
Offline
Activity: 1200
Merit: 1021
|
|
October 07, 2014, 05:31:43 AM |
|
судя по коду там отображаются вообще все транзакции поступившие ноде и созданные нодой а именно дебитовые(входящие) и кредитовые(исходящие) на адреса в кошельке причем судя по коду там отображаются все транзакции попавшие в mempool то есть еще не включенные в блок
Да, достаточно понаблюдать за работой кошелька Сначала он видит входящую или исходящую транзакцию в mempool, выдает всплывающее сообщение и добавляет эту транзакцию в список. После того, как транзакция будет включена в блок, кошель начинает отсчитывать подтверждения.
|
1BTCin1ooigFtHHD82qquqysdfxFZGdd8a | LTCin1oo9JhxcZu8ZK5HivqwvzAdQSaoua | 4NVCin1ooAd2XKoEfEhBn6tYNUHhojf4QS Блокчейн биткоина с его алгоритмом децентрализованного консенсуса на самом деле неэффективен, но неэффективность – это та цена, которую мы платим за свободу. © Andreas Antonopoulos
|
|
|
info_infoman (OP)
|
|
October 07, 2014, 05:54:08 AM |
|
спасибо! просто я не мог наблюдать входящие транзы... никто не шлет и монетка специфическая
|
|
|
|
|