Bitcoin Forum
November 17, 2024, 09:19:19 PM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: unlocked transactions  (Read 696 times)
Alda Gordaya (OP)
Member
**
Offline Offline

Activity: 61
Merit: 10



View Profile
January 27, 2013, 05:01:24 AM
Last edit: January 27, 2013, 05:12:44 AM by Alda Gordaya
 #1

Чем locked transactions отличаются от unlocked transactions ?

Можно ли сказать, что клиент отправляет locked-транзакцию, в которой указывается что она валидна в течении такого-то времени
и если она не будет за это время включена в блок, то она будет отброшена?

Или это что-то другое, что именно?


UPD:
это вот отсюда:
http://bitcoin.stackexchange.com/questions/2025/what-is-txins-sequence

а что будет, если будет послана замещающая транзакция, но не успеет дойти,
а в блок будет принята более старая транзакция?

Чем мотивируется хранение траких транзакций?
Что, например, мешает провести DOS-атаку зафлудив такими транзакциями сеть?
Yurock
Sr. Member
****
Offline Offline

Activity: 462
Merit: 250


View Profile
January 27, 2013, 06:14:01 AM
 #2

Чем locked transactions отличаются от unlocked transactions ?
Locked transactions should be considered final. Unlocked transactions can be changed by broadcasting a new version of the transaction.

Можно ли сказать, что клиент отправляет locked-транзакцию, в которой указывается что она валидна в течении такого-то времени
и если она не будет за это время включена в блок, то она будет отброшена?
Неправильно.

Или это что-то другое, что именно?
Такая транзакция не может быть включена в блок до lock_time. At the point determined by  lock_time the transaction becomes locked/final and can be included in the block chain. Также, до того, как наступит lock_time, может быть создана и передана в сеть окончательная версия транзакции с максимально возможным порядковым номером, которая может быть сразу включена в блок.
Alda Gordaya (OP)
Member
**
Offline Offline

Activity: 61
Merit: 10



View Profile
January 27, 2013, 06:19:38 AM
 #3

может быть создана и передана в сеть окончательная версия транзакции с максимально возможным порядковым номером, которая может быть сразу включена в блок.

А что у такой транзакции можно поменять?
Например сумму денег можно изменить? или получателя?

Идея такая - резервируем сумму денег до даты завершения работ по контракту.
Если контракт выполнен - подтверждаем
Если не выполнен - отменяем

Пример, правда неудачный. Надо сделать невозможной отмену для отправителя...

Зачем ещё это может понадобиться?
Yurock
Sr. Member
****
Offline Offline

Activity: 462
Merit: 250


View Profile
January 27, 2013, 08:00:08 AM
 #4

А что у такой транзакции можно поменять?
Например сумму денег можно изменить? или получателя?
Можно. "Вход" должен быть тот же,  с увеличенным серийником. Другие "входы" и "выходы" могут быть изменены.

Зачем ещё это может понадобиться?
Когда есть доверие к отправителю и заранее неизвестна общая сумма перевода. Например, я собираю бутылки на улице. Наполнил сумки и отнёс в приёмный пункт. Пункт вещает транзу на стоимость бутылок, анлокнутую до момента закрытия, например. Я приношу ещё бутылки и пункт увеличивает сумму. К концу дня транза становится окончательной и я могу потратить битки на буханку хлеба и сырок. Smiley Смысл в том, что только одна транзакция попадает в блок и только за неё надо платить комсу.
viv
Newbie
*
Offline Offline

Activity: 17
Merit: 0


View Profile
January 27, 2013, 05:57:16 PM
 #5

Возможность изменения транзакций сейчас заблокирована.

 // Check for conflicts with in-memory transactions
    CTransaction* ptxOld = NULL;
    for (unsigned int i = 0; i < tx.vin.size(); i++)
    {
        COutPoint outpoint = tx.vin.prevout;
        if (mapNextTx.count(outpoint))
        {
            // Disable replacement feature for now
            return false;


            // Allow replacing with a newer version of the same transaction
            if (i != 0)
                return false;
            ptxOld = mapNextTx[outpoint].ptx;
            if (ptxOld->IsFinal())
                return false;
            if (!tx.IsNewerThan(*ptxOld))
                return false;
            for (unsigned int i = 0; i < tx.vin.size(); i++)
            {
                COutPoint outpoint = tx.vin.prevout;
                if (!mapNextTx.count(outpoint) || mapNextTx[outpoint].ptx != ptxOld)
                    return false;
            }
            break;
        }
    }
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!