18 октября 2011, 6:23:08 AM   # 1
 
 
Сообщений: 37
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Здравствуй,

Я пытаюсь понять функцию SelectCoins (по крайней мере, на высоком уровне):
https://github.com/bitcoin/bitcoin/blob/master/src/wallet.cpp#L746

Похоже, что у него есть куча оптимизаций, но мне интересно, если что-то простое, как это будет работать, как наивные реализации:

1. найти все выходы ТХ, которые удовлетворяют следующим условиям
 - послал ко мне (есть hash160 принадлежащих к ключу в моем бумажнике)
 - не были потрачены еще
 - находятся в подтвержденном блоке
2. сортировать выходы наименьшего до наибольшего количества
3. для каждого выхода
  - создать вход, который ссылается и добавить к current_amount
  - Перерыв если current_amount > сумма, которую я хочу, чтобы отправить
4. создать один выход (изменить) посылая разницу обратно ко мне на новый адрес

Есть ли что-то подобное имеет смысл или я упускаю какие части? Кроме того, имеет ли смысл использовать самые мелкие монеты первым, чтобы предотвратить фрагментацию или есть способ лучше?

Благодаря! Не видели хорошую рецензию на этом в другом месте, но если я пропустил это, не стесняйтесь, чтобы связать меня с ним.
bitcoinandroid сейчас офлайн Пожаловаться на bitcoinandroid   Ответить с цитированием Мультицитирование сообщения от bitcoinandroid Быстрый ответ на сообщение bitcoinandroid


Как заработать Биткоины?
Без вложений. Не майнинг.


18 октября 2011, 6:55:04 AM   # 2
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Получил 1806 Биткоинов
Реальная история.





1. найти все выходы ТХ, которые удовлетворяют следующим условиям
 - послал ко мне (есть hash160 принадлежащих к ключу в моем бумажнике)
 - не были потрачены еще
 - находятся в подтвержденном блоке
2. сортировать выходы наименьшего до наибольшего количества
3. для каждого выхода
  - создать вход, который ссылается и добавить к current_amount
  - Перерыв если current_amount > сумма, которую я хочу, чтобы отправить
4. создать один выход (изменить) посылая разницу обратно ко мне на новый адрес

наивный действительно! Это будет иметь тенденцию генерировать _much_ крупных сделок, которые необходимы и в значительной степени не работают на многих кошельках.

Рассмотрим, что происходит, когда кто-то идет дождь кучу 1e-8 входов на вас, а затем вы пытаетесь отправить 1BTC ... Ваш результате TXN будет слишком большим и будет необходимо либо огромные сборы и могут быть проигнорированы коллегами и шахтеров даже с гонорарами.

Решатель подмножество сумма является не только оптимизация. Это важная оптимизация.

(Непосредственный выбор монет в Bitcoin может быть намного лучше тоже ... сейчас его гонорар слеп и будет стремиться производить решения, которые платят взносы, которые можно было бы избежать ... единственная реальная защита против этого является то, что предварительная фильтрация, что делает его первым попробуйте входы со многими подтверждает, к сожалению, хорошие решатели для задач большого целочисленного программирования не являются небольшими кусочками коды)


gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

18 октября 2011, 1:29:29 PM   # 3
 
 
Сообщения: 1652
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Что вы оптимизации для? Простота реализации? размер бумажника?

Вот наивная реализация, что я держал пари, будет хорошо работать на практике:

+ Сортировка потенциальных входов по приоритету (приоритет является #confirmations * сумма)

+ Используйте N высшего приоритета монеты, сумма которых >= Количество, необходимое

Если вы хотите оптимизировать для фрагментации и / или уплаты сборов, то и делают:

+ Если транзакция изменения больше некоторого порогового значения, а затем разделить его пополам (или, возможно, разделить его на выходы изменения Y, каждый из которых имеет размер пороговой суммы).

+ Если сделка изменения мало и есть другие мелкий многозначный / низкий приоритет входы доступны, добавьте несколько входов на небольшие суммы, чтобы объединить их вместе.

Кроме того, можно оптимизировать для обеспечения конфиденциальности (старайтесь не использовать более одного входа и / или всегда создавать несколько выходов изменений), или изменить вышеуказанные правила, чтобы попытаться всегда избегать сборов ...
Гэвин Андресен сейчас офлайн Пожаловаться на Гэвин Андресен   Ответить с цитированием Мультицитирование сообщения от Gavin Andresen Быстрый ответ на сообщение Гэвин Андресен

18 октября 2011, 6:08:15 PM   # 4
 
 
Сообщения: 1988
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Я пытаюсь понять функцию SelectCoins (по крайней мере, на высоком уровне):
Он вычисляет приближенное решение одномерной задачи о рюкзаке. В учебниках, как правило, ставится как найти максимум ниже, чем размер рюкзака (чтобы минимизировать пустое пространство). Здесь он инвертируется: цель состоит в том, чтобы найти минимум выше, чем размер рюкзака (для минимизации изменений, необходимых).

Что бы вы ни делали, не изобретать колесо, есть богатая литература по этой проблеме.
2112 сейчас офлайн Пожаловаться на 2112   Ответить с цитированием Мультицитирование Сообщения от 2112 Быстрый ответ на сообщение 2112

19 октября 2011, 3:54:17 AM   # 5
 
 
Сообщений: 37
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Большая информация, спасибо, ребята!

Да, я помню эту проблему рюкзака со спины в день. Похоже, есть несколько реализаций здесь:
http://rosettacode.org/wiki/Knapsack_problem/0-1

Gavin, ваша наивная реализация кажется отличным началом. Я был немного смущен, почему вы использовали NUM Подтверждение * сумму в качестве приоритета, но после прочтения этого (технической информации в нижней части) имеет больше смысла: https://en.bitcoin.it/wiki/Transaction_fees

И да, в этот момент я оптимизация для простоты реализации.

Я медленно понимать больше, спасибо, ребята!
bitcoinandroid сейчас офлайн Пожаловаться на bitcoinandroid   Ответить с цитированием Мультицитирование сообщения от bitcoinandroid Быстрый ответ на сообщение bitcoinandroid

19 октября 2011, 4:26:57 AM   # 6
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Я пытаюсь понять функцию SelectCoins (по крайней мере, на высоком уровне):
Он вычисляет приближенное решение одномерной задачи о рюкзаке. В учебниках, как правило, ставится как найти максимум ниже, чем размер рюкзака (чтобы минимизировать пустое пространство). Здесь он инвертируется: цель состоит в том, чтобы найти минимум выше, чем размер рюкзака (для минимизации изменений, необходимых).

Что бы вы ни делали, не изобретать колесо, есть богатая литература по этой проблеме.

Ну, в идеале (но не в официальной Bitcoin сегодня) это осложняется дополнительным целочисленного линейного ограничения: Вы хотите, чтобы приоритет быть больше, чем плата минимум, если не будет не реальным решением с этим ограничением.

Вы также хотите, чтобы избежать создания изменений менее 0,01 BTC, все равно, если у вас есть реальный выход меньше, чем 0,01, или если BTC встречи это ограничение заставляет вас обязательно предварительное один. (В этом случае, отказавшись от этого один лучше)


gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

19 октября 2011, 4:39:52 AM   # 7
 
 
Сообщений: 37
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Это большая просьба, но я брошу его в любом случае.

Имея какой-то рецензии, как это: https://en.bitcoin.it/wiki/Protocol_rules
но для процесса создания новой транзакции может быть полезным.

Похоже, есть несколько подводных камней, чтобы быть в курсе с гонорарами, выбор монет и т.д.
bitcoinandroid сейчас офлайн Пожаловаться на bitcoinandroid   Ответить с цитированием Мультицитирование сообщения от bitcoinandroid Быстрый ответ на сообщение bitcoinandroid

19 октября 2011, 5:02:00 AM   # 8
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Это большая просьба, но я брошу его в любом случае.

Имея какой-то рецензии, как это: https://en.bitcoin.it/wiki/Protocol_rules
но для процесса создания новой транзакции может быть полезным.

Похоже, есть несколько подводных камней, чтобы быть в курсе с гонорарами, выбор монет и т.д.

Но это не правило протокола (ну, максимальный размер TXN как я предполагаю, но тот уже там) ... это скорее вопрос общих норм в сети сегодня, в жизни сверстников sure-, но его не является частью распределенного алгоритма, узлы могут и не согласиться на него, и он не раскошелиться Bitcoin.

Возможно, лучшие практики должны быть описаны, но так же, как протокол правило не говорит, чтобы не выполнять неопределенные операции в C Я не знаю, что эти и другие рекомендации принадлежат там.



gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

19 октября 2011, 5:31:13 AM   # 9
 
 
Сообщений: 37
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Хорошая мысль - испытание "бы это форк blockchain" имеет смысл. Не уверен, что если вики является правильным местом.

Этот форум был очень полезным в качестве нового разработчика пытается понять куски лучше.

Еще одна я просто думал о том, при выборе монет, чтобы создать новую транзакцию, имеет смысл использовать транзакции, которые еще не в блоке? наивная реализация Гэвины выше преуменьшает их, но в худшем случае я предполагаю, что это все еще хорошо, чтобы включить ТЙ не в блоке, потому что правила протокола предотвратят двойные расходы?

Кроме того, это официальный клиент очистить бесхозных сделки после того, как какой-то период, если они не сделали его в блок?

Я очень ценю помощь. Он берет меня долгое время, чтобы обернуть мою голову вокруг него, но я чувствую, что я медленно попасть туда.
bitcoinandroid сейчас офлайн Пожаловаться на bitcoinandroid   Ответить с цитированием Мультицитирование сообщения от bitcoinandroid Быстрый ответ на сообщение bitcoinandroid

19 октября 2011, 6:10:05 AM   # 10
 
 
Сообщения: 2870
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Еще одна я просто думал о том, при выборе монет, чтобы создать новую транзакцию, имеет смысл использовать транзакции, которые еще не в блоке?

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

Эти операции будут иметь очень низкий (возможно 0) приоритет, но это будет возрастать по мере увеличения возраста входов.

Цитата: bitcoinandroid
Кроме того, это официальный клиент очистить бесхозных сделки после того, как какой-то период, если они не сделали его в блок?

Нет, но это было бы неплохо.
theymos сейчас офлайн Пожаловаться на theymos   Ответить с цитированием Мультицитирование сообщения от theymos Быстрый ответ на сообщение theymos

25 октября 2011, 3:20:02 AM   # 11
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Вот наивная реализация, что я держал пари, будет хорошо работать на практике:
+ Сортировка потенциальных входов по приоритету (приоритет является #confirmations * сумма)
+ Используйте N высшего приоритета монеты, сумма которых >= Количество, необходимое

Я знаю, что ты просто бросил эту идею там с верхней части головы, так что это не настоящая критика, я просто расширение на вашей первоначальной идеи. Я думаю, что это будет серьезно пренебрегать своими выходами с маленькими значениями - после какой-то момент времени, вы собираетесь остаться с тысячами крошечных входов ... которые вы собираетесь придется использовать много десятков для выполнения последующих операций , Например: если у вас есть выход в вашем бумажнике для 0.0001 BTC, вы собираетесь придется ждать 1440000 блоков для того, чтобы начислять такой же приоритет, как выход 1 BTC, который 1 день назад.

Я начал исследовать это с мыслью, что, может быть, я могу даже его немного, просто изменяя количество BTC до того умножения на numConfirm. После игры с этим в таблице, я вижу, это не решит всю проблему, но, возможно, это сочетание может. Вот три варианта:


("дней сезам погашения" это время, пока BTC сумма не достигает того же приоритизации как 1,0 BTC через 1 день)

Методы сортируются из крутого в мелке (слева направо). Я просто делал до уравнений, которые я знаю, будет гарантировать зрелость все выходы до солнца исчерпывает энергии. Лично я считаю, что кубический корень (метод 1) имеет много обещаний, чтобы убедиться, что ваш крошечный TxOuts в конечном итоге получить израсходованы. Я собираюсь рассмотреть попытку идеи Гэвины, но применяя технику 1 до сортировки значений, а иногда бросаю в верхнем значении от метода 2 или 3, чтобы убедиться, что я не давая слишком много крошечных входов накапливают.

etotheipi сейчас офлайн Пожаловаться на etotheipi   Ответить с цитированием Мультицитирование сообщения от etotheipi Быстрый ответ на сообщение etotheipi

6 ноября 2011, 3:28:08 PM   # 12
 
 
Сообщения: 1428
Цитировать по имени
цитировать ответ
по умолчанию Re: алгоритм SelectCoins

Таким образом, проведя пару дней боролись мой собственный алгоритм SelectCoins, я пришел с достойной идеей, как сделать это, не задумываясь слишком трудно, но все еще сохраняют способность расширить его, позже. Магия в определении следующего метода:

      uint32_t ScoreSelectCoinsOutput(вектор selectedCoins, uint64_t targetVal, uint64_t minFee)

Ввод этой функции является монетой выбор, значение выходного целевым и плата. При написании метода, который присваивает балл на выбор, вы можете случайным образом сортировать ваш список ввода в 100 раз, выбрать главные входы X, которые удовлетворяют ваши цели + плату, а затем сохранить один с лучшим счетом. В моем коде, я медленно добавляя умнее решений и постепенный отказ от произвольно выбранных из них, но если вы выбираете достаточно высокий размер выборки, вы обязаны получить, по крайней мере, один хорошо решение в горшке даже ничего, кроме случайных выборов в поиске:

Код:
вектор finalSelection;
uint32_t bestScore = UINT32_MAX;
для (INT I = 0; я<100; я ++)
{
   random_shuffle (unspentTxOutList.begin (), unspentTxOutList.end ())
   uint64_t сумма = 0;
   Индекс uint32_t = 0
   вектор отбор;
   в то время как (сумма < целевая + плата)
   {
      selection.push_back (выбор [индекс]);
      сумма + = Выбор [индекс] .getValue ();
      индекс ++
   }
   uint32_t оценка = ScoreSelectCoinsOutput (выбор, цель, плата);
   если (оценка < лучший результат)
   {
      finalSelection = выбор;
      bestScore = оценка;
   }
}
// Теперь у вас есть очень хороший выбор!

Затем алгоритм всего SelectCoins основан на том, как вы "Гол" раствор selectCoins. В моем коде, я оцениваю кучу разных "факторы выбора", Например, сколько входных адресов он сочетает в себе, если она включает в себя нуль-Confirm Txs, сколько байт, как это и очевидно, какой выход является изменение / получателя и т.д. Я убедитесь, что каждый из этих факторов выплевывает число от 0 до 1 (где 1 благоприятным), а затем умножить каждый балл по весу:

Код:
WEIGHT_NOZEROCONF = 1000
WEIGHT_ALLOWFREE = 100
WEIGHT_NUMADDR = 100
WEIGHT_TXSIZE = 50
WEIGHT_PRIORITY = 60
WEIGHT_OUTANONYM = 30

Веса настраиваются (и совершенно произвольно - единственным существенным по отношению друг к другу), и дает возможность изменить их для вашего сценария использования: вы можете сделать "WEIGHT_NUMADDR = 10000" а также "WEIGHT_OUTANONYM = 10000" чтобы попытаться максимально тотальной анонимности любой ценой.  
etotheipi сейчас офлайн Пожаловаться на etotheipi   Ответить с цитированием Мультицитирование сообщения от etotheipi Быстрый ответ на сообщение etotheipi



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW