Можно ли объединить две отдельные транзакции в одну транзакцию, используя только их подписи?

У меня есть два действительных txs и две действительные подписи для этих txs.

Прямо сейчас они выглядят так:

1) A -> B 
2) C -> D

A и C — входы, B и D — выходы.

Я хочу иметь возможность объединить их в:

1) A, C -> B, D

Есть ли способ, которым я могу объединить эти два tx и их соответствующие подписи в один действительный tx, не имея доступа к ключам?

Я не уверен, что здесь спрашивают. Есть Aи Cтранзакции? Подписи? Что такое «В» и «Д»? Вы имеете в виду «UTXO», когда говорите «txs»? Я не знаю, к чему ты клонишь.
@Jestin Возможно, я использую неправильную терминологию ... A и C - входы, B и D - выходы.
Из любопытства, почему вы хотите это сделать?

Ответы (2)

Единственная возможность в Биткойне сегодня — это та, которую описал Кайкурокава. Каждая подпись указывает, какие входы и выходы она подписывает, поэтому, если вам нужны независимо созданные подписи, всем будет очевидно, какие входы и выходы были созданы одновременно.

Общая практика объединения нескольких частей транзакций в одну называется CoinJoin. Теоретически это хорошо работает, но требует сотрудничества разных сторон (каждая подписывает ввод и вывод каждого).

Потенциальная будущая разработка, которая может изменить это, основана на односторонних агрегируемых подписях (OWAS) (см. ://bitcointalk.org/index.php?topic=290971.0 ). Этот механизм позволит любому в сети взять две транзакции и выполнить их CoinJoin, не имея возможности впоследствии определить, какие входы и выходы связаны. В качестве дополнительного преимущества он также объединяет все подписи в таких транзакциях в одну. В крайнем случае это будет означать, что блок может быть просто сведен к одной транзакции, созданной майнерами, применяющими эту операцию объединения ко всем транзакциям, которые они хотят включить.

К сожалению, OWAS использует схему подписи под названием BLS, которая намного новее и не так хорошо изучена, как ECDSA (которую сейчас использует Биткойн), поэтому ее безопасность менее надежна. Кроме того, он намного медленнее и потребует очень инвазивных изменений в биткойнах. Тем не менее, это активная область исследований.

Совсем недавно была предложена система под названием MimbleWimble, которая поддерживает агрегацию транзакций в автономном режиме, а также сквозные транзакции, опираясь только на криптографию EC.

Да. Но они требуют, чтобы транзакция была подписана определенным образом. OP_CHECKSIG имеет устанавливаемые флаги, которые определяют, какие из входов и выходов подписаны.

Если SIGHASH_SINGLE и SIGHASH_ANYONECANPAY используются для OP_CHECKSIG, каждая подпись подписывается для соответствующих входных и выходных данных, позволяя другим добавлять новые входные и выходные данные в транзакцию.

https://en.bitcoin.it/wiki/OP_CHECKSIG

https://bitcoin.org/en/glossary/sighash-single

https://bitcoin.org/en/glossary/sighash-anyonecanpay

Если вы используете SIGHASH_SINGLE, вы в основном выдаете, что ввод и вывод связаны. К сожалению, это означает, что цель coinjoin (конфиденциальность) побеждена.
@Jimmy Song Возможно, конфиденциальность - не причина, по которой ОП хочет этого.
Это правда, что это противоречит цели CoinJoin, четко связывая входы и выходы. Но это может быть использовано для снижения сборов. Представьте себе сервис, который переупаковывает пары ввода-вывода, подписанные с помощью SINGLE/ANYONECANPAY, в более крупные транзакции, чтобы уменьшить нагрузку на хранилище.