У меня есть транзакция. Эта транзакция брала значение AddrX
и отправляла его себе в своего рода «разделении». В транзакции есть один VIN
из 98000000
. Эта транзакция разделяет стек и имеет два файла VOUT
. Они оба 49000000.5
. Существует комиссия за транзакцию в размере 1.00
.
В этом случае общая сумма VOUT
превышает 98000001
общую VIN
сумму 98000000
. Однако эта разница заключается в комиссии за транзакцию.
Из того, что я понял о блокчейне и транзакциях, комиссия за транзакцию: Fee: sum(vin) - sum(vout)
так что это приводит к комиссии за -1
транзакцию.
Моя проблема здесь в том, что если бы я создавал базу данных для отслеживания этого адреса, я бы в конечном итоге вычел 98000000
из их баланса, а затем добавил бы два входящих значения, 49000000.5
которые в конечном итоге поместили бы их общий баланс после этой транзакции, 98000001
что было бы неправильно. Теперь я мог бы добавить логику, чтобы вручную убрать комиссию за транзакцию; однако я бы предположил, что эта транзакция будет недействительной, потому что общая сумма VOUT
была больше, чем общая VIN
.
Возможна ли такая ситуация? До сих пор из транзакций, которые я видел, комиссия за транзакцию уже применялась к одной из них VOUT
и, следовательно, не вызывала этой ошибки. Если это возможно, как я могу это обнаружить и исправить?
Такие сделки будут недействительны. Хотя вы можете их создать, все узлы отклонят их как недействительные, и такие транзакции никогда не будут подтверждены. Если бы это было возможно, то можно было бы создавать деньги из ничего (за исключением транзакций Coinbase), а это было бы невозможно.
Вы либо неправильно построили свою транзакцию, либо неправильно ее интерпретируете.
Правила протокола биткойн https://en.bitcoin.it/wiki/Protocol_rules#.22tx.22_messages (правило 14) предотвращают это. Это критерий отклонения для узлов.
Пиксель
Эндрю Чоу
Пиксель