Към съдържанието
ДаретеEN

Трансакции

Неизразходван изход (UTXO)

UTXO в биткойн е неизразходван изход на трансакция. Вижте как UTXO множеството помага на нодовете да проверяват трансакции и да броят баланса на адрес.

От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.

UTXO е неизразходван изход: изход, който никоя по-късна трансакция още не е похарчила. UTXO множеството е съвкупността от всички такива. Нодовете проверяват всяка нова трансакция спрямо това множество. Портфейлите и експлорърите събират UTXO-тата, заключени за даден адрес, за да покажат баланса му.

Какво прави един изход неизразходван?

Всяка трансакция създава изходи, а всеки изход може да се използва като вход в по-късна трансакция. Когато изходът се използва, той се харчи цял. Рестото се връща към изпращача като нов изход.

Ако си представите всички трансакции като един голям граф, UTXO-тата са свободните краища. Всеки от тях е част от биткойн, която още може да се похарчи.

Трансакция A има два изхода; трансакция B харчи първия, така че вторият на A и двата на B са неизразходвани. Трансакция A A:0 похарчен A:1 неизразходван Трансакция B B:0 B:1 и двата неизразходвани UTXO множество A:1 B:0 B:1 A:0 вече го няма
Оранжевите изходи са неизразходвани. Харченето на изход 0 от A го изважда от множеството.

Защо нодовете следят UTXO множеството?

Нодът се нуждае от множеството за две задачи: проверка на новите трансакции и броене на баланси. И двете зависят от това кои изходи още не са похарчени.

Как нодът проверява трансакция?

Когато пристигне трансакция, нодът чете всеки вход. Входът назовава изход чрез outpoint, който е идентификаторът на трансакцията, последван от индекса на изхода, vout. Изходът трябва да е в UTXO множеството. Ако го няма, трансакцията се отхвърля, защото изходът е бил похарчен или изобщо не е съществувал.

Нов вход назовава изход; нодът приема трансакцията само ако изходът все още е в UTXO множеството. нов вход харчи …37718126:0 UTXO множеството Прието изходът излиза Отказано вече похарчен, или не съществува
Проверката намира изход, който вече е похарчен или никога не е съществувал, и така спира двойното харчене.

Наличието в множеството е само половината от проверката. Нодът проверява и дали данните за отключване на входа изпълняват заключването на изхода, например валиден подпис. UTXO множеството отговаря на въпроса „този изход налице ли е?“, а скриптовете отговарят на „този ли може да го похарчи?“.

Как се брои балансът на адрес?

Съберете UTXO-тата, заключени за адреса, и получавате баланса му. Монетите не стоят в адресите. Те са заключени в изходи, а адресът е заключването, сложено върху изхода. Два различни изхода могат да принадлежат на един и същ адрес, и всеки от тях се брои в баланса.

Адресната страница в нашия експлорър, на /address/<address>, показва неизразходваните му изходи. Балансът е тяхната сума. Всеки валиден адрес работи, включително адресите, които никога не са били използвани. Те показват празно множество.

Къде се пази UTXO множеството?

В Bitcoin Core множеството се пази в подпапката chainstate в папката с данни на нода. Базата е LevelDB, хранилище ключ-стойност. Всеки запис има:

  • Ключ: outpoint-ът, тоест идентификаторът на трансакцията и индексът на изхода, който определя един изход еднозначно.
  • Стойност: височината на блока, който е създал изхода, флаг, който казва дали той идва от coinbase трансакция, сумата в сатоши и заключващия скрипт.

Когато пристигне блок, нодът премахва всеки изход, който блокът харчи, и добавя всеки нов изход. Така множеството винаги отразява веригата в сегашния ѝ вид.

Каква е ролята на RAM?

Базата е на диск, но нодът държи част от нея в паметта като кеш. Опцията -dbcache задава колко памет може да заема този кеш, в MiB. От Bitcoin Core 31.0 стойността по подразбиране е 1,024 MiB на машини с поне 4 GiB RAM, а на по-малките е 450 MiB. По-големият кеш позволява на нода да проверява входящите трансакции, без да чете диска толкова често, и така валидирането е по-бързо.

Как се измерва UTXO множеството?

Командата gettxoutsetinfo чете цялото множество и показва обобщени стойности. Изпълнена на нод, тя показва:

  • txouts: броят неизразходвани изходи.
  • transactions: броят трансакции, които още имат неизразходвани изходи.
  • total_amount: стойността на всички неизразходвани изходи в BTC.
  • disk_size: колко място на диска заема множеството.

Командата сканира цялото множество, така че може да отнеме няколко секунди или повече. Не е нещо, което да пускате в цикъл.

Стойността total_amount е близка до монетите в обръщение, но не е точна. Монетите, които са загубени завинаги, остават неизразходвани, така че остават в множеството. Изходите, които никога не могат да се похарчат, като тези, чийто скрипт започва с OP_RETURN, изобщо не се добавят в множеството.

Защо coinbase изходите чакат 100 блока?

Първата трансакция във всеки блок, coinbase, плаща наградата за блок и таксите на майнъра. Изходите ѝ не могат да се харчат, докато не са получили 100 потвърждения. Това правило задава COINBASE_MATURITY в кода за консенсус на Bitcoin Core.

Множеството UTXO записва флага за coinbase точно заради това. Така нодът може да види дали изходът е достатъчно стар, за да се харчи, без да търси блока, който го е създал.

Може ли изход да се похарчи преди потвърждение?

Да, но с уговорка. Трансакция може да харчи изход от трансакция, която още е в мемпула, чакалнята за непотвърдени трансакции. Нодът проверява такова харчене спрямо UTXO множеството и мемпула заедно. Така работи child pays for parent (CPFP): нова трансакция харчи непотвърден изход, за да вкара и предишната в блок.

Обобщение

UTXO е изход, който не е похарчен. Нодовете пазят всички UTXO-та в UTXO множеството, ползват го, за да отхвърлят двойните харчения, и събират UTXO-тата, заключени за адрес, за да получат баланса му. Множеството е на диск и е частично кеширано в паметта, така че нодът може бързо да проверява трансакции. Входовете на трансакцията харчат UTXO-та, а това, което изходите не претендират, става такса, за която разказва страницата за таксата.

Източници

В този раздел: Трансакции

Целият курс „Биткойн от нулата“

Нещо не изглежда наред? Кажете ни