В биткойне входы транзакций (UTXO) указываются в виде кортежа (индекс транзакции, vout), поскольку в системе биткойн нет понятия учетной записи, и одного адреса (на который указывает vout) недостаточно. Вместо этого транзакции являются первичными объектами.
С другой стороны, Ripple делает учетную запись основным объектом, а транзакции изменяют баланс учетной записи. Это позволяет указать только адрес (счета) в качестве входных данных для транзакции.
Это дизайнерские решения. Каковы плюсы и минусы двух моделей? Какая мотивация стояла за ними?
Спасибо.
Преимущества подхода UTXO/блокчейн:
Преимущества подхода «счет/бухгалтерская книга»:
Дизайн Биткойна естественным образом соответствует подходу UTXO. Результаты транзакций просты, и нет необходимости в параметрах счета.
Такой подход не сработал бы в Ripple по ряду причин:
Поскольку Ripple поддерживает произвольные активы, многие из которых могут быть бесполезными, у получателей должен быть способ указать, какие активы они примут в качестве оплаты. Это означает, что что-то должно иметь это как свойство, для которого требуется учетная запись.
Что-то должно выпускать эти активы, что требует, чтобы учетные записи выступали в качестве эмитентов.
Кросс-валютные платежи могут привести к сложным результатам, и попытка детерминистически сопоставить их с операциями UTXO не является естественной. Регулировка баланса учетной записи проще, чем выбор UTXO для потребления и создания во время обработки транзакции. Транзакции Ripple не могли, например, указать, какие UTXO они будут потреблять, потому что это неизвестно во время формирования транзакции. (Откуда вы знаете, кто предложит лучшую ставку, когда ваша транзакция будет выполнена? Если все будут конкурировать с транзакциями, жестко запрограммированными для получения максимальной ликвидности, большинство транзакций потерпит неудачу.)
Более сложное состояние сети требует более сложной структуры, чтобы гарантировать, что сеть согласуется с этим состоянием. Структура Биткойна не имеет способа защититься от расхождений UTXO, которые могут иметь катастрофические последствия, за исключением того, что транзакции должны быть достаточно простыми, чтобы ошибка такого типа была маловероятной. Более сложные транзакции Ripple нуждаются в мощной защите от расхождений, иначе небольшие ошибки в коде могут привести к катастрофическим результатам.
Поскольку транзакции Ripple имеют более сложные выходные данные, они, как правило, больше. Подход Ripple упрощает отбрасывание истории транзакций, потому что все, что вам действительно нужно, — это текущий статус всех учетных записей и другие постоянные структуры.
Вы можете практически удовлетворить любые требования с любым подходом. Есть способы обойти каждую из этих проблем без изменения подхода. Но часто проще начать с дизайна, который наиболее естественно соответствует вашим требованиям, чем бриться и заклинивать, чтобы вставить круглую шпильку в квадратное отверстие.
Марч
vout
это просто индекс вывода в списке вывода транзакции. Это просто целое число. Адрес является частью выходного сценария, содержащегося в UTXO. Кортеж, на который вы ссылаетесь, является уникальным идентификатором UTXO, а не полным UTXO.