После вникания в суть
вот такого предложения у меня родилась идея.
Перед операцией, майнер и клиент создают у себя некие рендомные одноразовые пароли:
* passC - клиентский пароль, hash_passC - его хеш sha256(RIPEMD160()) (соответствует OP_HASH160 в скриптах)
* passM - майнерский пароль, hash_passM - его хеш sha256(RIPEMD160())
Так же,
* bit_pub_M - публичный ключ (адрес) bitcoin, принадлежащий майнеру и hash_bit_pub_M - его хеш160
* dia_pub_C - публичный ключ dianna, принадлежащий клиенту и его хеш hash_dia_pub_C
Майнер дает hash_passM клиенту.
Клиент создает транзакцию Bitcoin с sigScript в ауте:
OP_HASH160 <hash_passM> OP_EQUALVERIFY OP_HASH160 <hash_passC> OP_EQUALVERIFY OP_DUP OP_HASH160 <hash_bit_pub_M> OP_EQUALVERIFY OP_CHECKSIG
Для того, чтобы забрать эту транзакцию, майнеру нужно будет в следующем INPUT предъявить два пароля в открытом виде + нормальная биткоин проверка на сигнатуры (все что после OP_DUP). Input должен будет быть таким:
signature bit_pub_M passC passM
Клиент так же создает транзакцию DIANNA с sigScript в ауте:
OP_HASH160 <hash_passM> OP_EQUALVERIFY OP_HASH160 <hash_passC> OP_EQUALVERIFY OP_DUP OP_HASH160 <hash_dia_pub_C> OP_EQUALVERIFY OP_CHECKSIG
Чтобы клиент мог воспользоваться в дальнейшем этим доменом, ему так же надо будет предъявить два пароля + проверка сигнатуры:
signature dia_pub_C passC passM
Таким образом любой стороне, чтобы забрать свою транзакцию в будущем, надо в блок чейн, прямым текстом, выпалить оба одноразовых пароля.
Получается обоим нужен пароль другой стороны и как только одна сторона забирает транзакцию, палится пароль другой стороны на публику.
Однако тут есть недостаток. Что если майнер скажет: А вот хрен с теми деньгами, не дам я тебе пароль! И клиент теряет домен через TTL блоков.
Проблема в том, что по ссылке что я привел описана схема обмена двух равноценных активов. А у нас домен может быть подороже чем операция за него. Что ж теперь, просить залог?