Точка смешения, так что вы не можете сказать, кто владеет какими монетами впоследствии. Если у вас есть ТХ, как это:
47 BTC -> 50 BTC
50 BTC -> 47 BTC
Вам не нужно быть гением, чтобы предположить, что BTC вход 47 карт на BTC выходе 47. Смесь не удалось.
Существует не простой способ исправить это, если различия между сторонами огромны. Но если это не так, как указано выше, мы можем сделать:
47 BTC -> 10 BTC
50 BTC -> 10 BTC
-> 10 BTC
-> 10 BTC
-> 1 BTC
-> 1 BTC
-> 5 BTC
-> 5 BTC
-> 5 BTC
-> 20 BTC
-> 20 BTC
и теперь это не совсем ясно, какой выход принадлежит кому. Есть несколько комбинаций, которые работают.
Пусть представляет собой минимальный из входов,
Пусть Ь представляют НОД входов.
Для каждого входа, выход должен быть столько блоков
насколько это возможно, а затем достаточно
б чтобы завершить его.
Этот метод работает прилично:
IN OUT
8 BTC -> 8 BTC
10 BTC -> 8 BTC
-> 2 BTC
IN OUT
3,5 BTC -> 3,5 BTC
6,5 BTC -> 3,5 BTC
9,0 BTC -> 3,5 BTC
-> 3,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
Этот метод, к сожалению, не вполне безопасно. Например, ни один из выходов BTC 0,5 не относятся к первой стороне (в одной питающей 3,5 BTC).
Последний из них можно было бы сделать лучше и короче:
3,5 BTC -> 3,0 BTC
-> 0,5 BTC
6,5 BTC -> 3,0 BTC
-> 3,0 BTC
-> 0,5 BTC
9,0 BTC -> 3,0 BTC
-> 3,0 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
-> 0,5 BTC
13 выходов, вместо 14. Кроме того, глядя на сделку, вы не можете выяснить, какую-либо информацию
со 100% уверенностью о личности любого одного из выходов.
Таким образом, мы должны перевести это
Для каждого входа, выход должен быть столько блоков, насколько это возможно, а затем достаточно б, чтобы завершить его.
В
Для каждого входа, выход должен быть составлен из блоков не больше, чем а. Каждый вход должен соответствовать, по меньшей мере, один выход каждого блока размера.
Что только оценка, а не функция.
Поскольку все входы находятся в одной транзакции, не существует никакого способа, чтобы отобразить вход к выходу. Я не могу найти способ дополнительно сократить в приведенном выше примере.
Этот пример:
IN OUT
8 BTC -> 8 BTC
10 BTC -> 8 BTC
-> 2 BTC
Сбой в очень плохом состоянии: вывести 2 BTC, очевидно, принадлежит владельцу BTC ввода 10.
Существует также несчастный аспект вероятности: глядя на примере с 3.5, 6.5, и 9 в качестве входов, каждый 0,5 выхода имеет 75% вероятность принадлежности к владельцу 9 ввода.
Вот это оптимальное решение.
Несколько партий могут собраться вместе и смешивать, как это:
3,5 BTC 3,5 BTC
6,5 BTC -> 3,5 BTC
9,0 BTC 3,5 BTC
3,0 BTC
5,5 BTC
Конечно, 3.0 и 5.5 BTC выходы могут быть идентифицированы. Они делают другую сделку *
3,0 BTC -> 3,0 BTC
5,5 BTC -> 3,0 BTC
-> 2,5 BTC
Окончательный 2,5 BTC нельзя смешивать удовлетворительно с другими сторонами.
* Все это может быть сделано в одной транзакции, на самом деле
Делая анализ по данной сделке доходности:
- Каждый из 3,5 БТК выходов имеют 33% вероятность принадлежности к той или иной партии. 1/3, очевидно, максимальная анонимную, которая может быть достигнута с 3 сторон.
- Каждый из выходов 3.0 BTC имеет 50% вероятность принадлежности к B или C, и не принадлежит к A. 1/2 является максимальным анонимным, которое может быть достигнуто с 2 сторон, и пытается смешивать эти монеты с руинами стороны А идеальные анонимный из 3,5 BTC выходов (см. ниже)
- BTC Выход 2.5 принадлежит C
Математически, любая хорошая перестановка эквивалентна. Например, данные 38 0.5 выходов, каждый выход имеет шанс 7/38 принадлежности к Стороне А, а 13/38 шанс принадлежности к партии B, и 18/38 шанса принадлежности к партии C.
Теперь, когда я показал идеальные анонимный быть невозможно с неравными входами, вот моя идея практической реализации:
- Каждый узел, который хочет смешивать устанавливает два значения Min и Max. Минимальное время наименьшее значение она желает иметь дело с (это компромисс - более низкое значение означает более высокую анонимность, но более высокое значение экономит деньги на сборы ТХ и blockchain размер и т.д.), и Макс является сумма денег, он хочет поставить на вход операции (установка это максимальное количество денег в кошельке риски раскрытия, сколько денег у вас есть и теоретически может позволить идентифицировать адреса, но она позволяет все ваши деньги будут анонимными позже.)
- Каждый узел также имеет MaxParties или константу MaxTxSize, чтобы избежать некоторого глобального перемешивания, которое происходит сбой каждый компьютер и начинает апокалипсис.
- Узел передает их через некоторый канал (p2p или централизованный) и соединяется с коллегами, что А
Максимум >= В
мин и B
Максимум >= A
мин для всех аналогов А и В.
- После MaxParties достигается или некоторый срок истек, они начинают строить сделки, как и в итерационном примере выше.
Занесения ассоциативного массива с входами с каждой стороны (каждая сторона поставляет Max в эфире в качестве входа Tx) и массивом выходных адресов на вход.
В то время как массив А не пусто
{
найти минимальное значение в
добавить вывод этого минимального размера по первому адресу в каждом массиве outputaddress к сделке
удалить минимальную пару ключ-массив из
удалить первый адрес из каждого массива в A
}
Убедитесь в том, что сделка проводит в общей сложности ваших входных адресов ваших выходных адресов
Подписать сделку
После подписания всеми, транслировать его.
Я бы фиксировать массив А, как что-то вроде {3,2: [1abc, 1DEF] 5.0: [1ghi, 1jkl] ...}
Для того, чтобы найти, сколько выходных адресов на поставку, взять Макс с каждой стороны и запустить приведенный выше код, но сохраняя бирку outputaddresses вместо добавления выходов, указывающей на них.
Как только это будет сделано, каждая из сторон может помочь заполнить массив A, добавив их Макс и список адресов, и подписания, что с адресом, который должен подавать входной сигнал.