Транзакция

Транзакция - это подписанный набор данных, который распространяется в сети и объединяется в блоки. Обычно она ссылается на предыдущие транзакции и направляет определенное количество новакоинов из них на один или несколько новых публичных ключей.

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

Пользовательская операция

Такие транзакции обычно используются для передачи новакоинов из непотраченных входов. Как правило, они ссылаются на непотраченные входы и создают новые выход(ы) с указанием сумм и получателей.

Coinbase

Coinbase имеет один вход с параметром 'coinbase' вместо scriptSig. В 'coinbase' могут быть любые данные, они не используются. Novacoin помещает туда текущую целевую величину в компактном формате и число произвольной точности 'extraNonce', которое увеличивается каждый раз при переволнении поля Nonce в заголовке блока. extranonce участвует в увеличении области определения функции proof of work.

Эти транзакции используются для выдачи награды майнерам Proof-of-Work. Блоки proof-of-stake также содержат транзакцию coinbase, но с пустым выходом.

Coinstake

Эти транзакции используются для предоставления доказательства в заголовке блока Proof-of-Stake. Они похожи на пользовательские транзакции, но имеют некоторые отличия:

Общий формат транзакции

ПолеТипРазмерОписание
Версияunsigned int4В настоящее время 1
Timestampunsigned int4Время транзакции
Число входовvariable int1 - 9-
Массив входовTxIn[]размер набора входовМассив входов или coinbase
Число выходовvariable int1 - 9-
Массив выходовTxOut[]размер набора выходовМассив структур выходов
Время блокировкиunsigned int4Высота блока или timestamp, когда транзакцию считать завершенной

Формат входа

Вход - это ссылка на выход другой транзакции. Транзакция часто содержит несколько входов. Величины указанных выходов суммируются, и сумму можно использовать в выходах этой транзакции.

ПолеТипРазмерОписание
txidunsigned char[]32Хеш предыдущей транзакции
nunsigned int4Номер выхода предыдущей транзакции
scriptSigLengthvariable int1-9Длина scriptSig
scriptSigunsigned char[]-Первая половина скрипта, подписи для scriptPubKey
nSequenceunsigned int4Номер варианта транзакции, не имеет значения, если не указано nLockTime. 0xffffffff по умолчанию, см. подробное описание.

Формат выхода

Выход содержит инструкции для отправки новакоинов. Величина - количество сатоши (1 NVC = 1,000,000 сатоши), которое этот выход будет стоить при использовании.

ПолеТипРазмерОписание
nValueunsigned long int8количество передаваемых сатоши(NVC/106)
scriptPubKeyLengthvariable int1-9длина scriptPubKey
scriptPubKeyunsigned char[]-вторая половина скрипта, инструкции по расходованию

Получатели

Существуют следующие типы получателей для пользовательских и coinbase транзакций:

Pay-to-Pubkey

 scriptPubKey: [pubKey] OP_CHECKSIG
 scriptSig: [sig]

Pay-to-PubkeyHash

 scriptPubKey: OP_DUP OP_HASH160 [pubKeyHash] OP_EQUALVERIFY OP_CHECKSIG
 scriptSig: [sig] [pubKey]

Pay-to-ScriptHash

Отправка на хеш скрипта:

 scriptPubKey: OP_HASH160 [20-byte-hash of {[pubkey] OP_CHECKSIG} ] OP_EQUAL
 scriptSig: <зависит от типа входов>

Пример расходования:

 scriptPubKey: OP_HASH160 [20-byte-hash of {[pubkey] OP_CHECKSIG} ] OP_EQUAL
 scriptSig: [signature] {[pubkey] OP_CHECKSIG}

Пустой получатель

 scriptPubKey: (пусто)
 scriptSig: (пусто)

Нестандартные скрипты

Любой может потратить:

 scriptPubKey: (empty)
 scriptSig: OP_TRUE

Основные принципыБазовые определенияПрограммное обеспечениеСвязанные страницы