Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
10 августа 2013, 5:32:44 PM   # 1
 
 
Сообщения: 331
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Я пишу свою собственную библиотеку Python для работы с Bitcoin эллиптической кривой арифметики на некоторое время теперь, и только вчера я сделал серьезный толчок, чтобы он включает гораздо больше возможностей. Он поддерживает сжатые ключи, RFC6979 детерминированных подпись ECDSA сообщений (совместимую с Электрум, см tests.py), строительством сделки и подписание и даже бумажники Электрум стиля.

Вот репо: https://github.com/vbuterin/pybitcointools

Я специально разработан библиотеку, чтобы быть простой и без излишеств. Нет сто строк монолитных функций, ни классов, ни объекты оболочки, только шестигранные / двоичные / цифр в и шестигранном / двоичной / цифрах из. Вам не нужно тратить много времени "обучение" Это; независимо от того, какой формат использует ваши данные, нет какой-то способ обращения с ним где-то там. Обратите внимание, что это не полностью функциональный кошелек; он не поддерживает генерацию транзакций или проверку, сети или что-либо делать с блоками. Вам все еще нужно * coind или * монета-Qt вместе с командой importprivkey, чтобы сделать это. Это не полный узел, но есть основные возможности для построения Bitcoin операций и включает в себя две функции для выборки истории и толкая сделки с blockchain.info.

Вот некоторые основные сценарии использования:

> от pybitcointools импорта *
> собств = sha256 ( «некоторые большие длинные brainwallet пароль»)
> собств
'57c617d9b4e1f7af6ec97ca2ff57e94a28279a7eedd4d12a99fa11170e94f5a4'
> Паб = privtopub (собств)
> паб
«0420f34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523 fb01be2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9'
> адр = pubtoaddr (Паб)
> адр
'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6'


материал сделки:


> ч = История (адрес)
> час
[{ 'Выход': u'97f7c7d8ac85e40c255f8a763b6cd9a68f3a94d2e93e8bfa08f977b92e55465e: 0' , 'значение': 50000, 'адрес': u'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6 '}, {' Выход ': u'4cc806bb04f730c445c60b3e0f4f44b54769a1c196ca37d8d4002135e4abd171: 1', 'значение': 50000, 'адрес' : u'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6' }]
> выходы = [{ 'значение': 90000, 'адрес': '16iw1MQ1sy1DtRPYw3ao1bCamoyBJtRB4t'}]
> Тх = mktx (ч, выходы)
> Техас
«01000000025e46552eb977f908fa8b3ee9d2943a8fa6d96c3b768a5f250ce485acd8c7f79700000 00000ffffffff71d1abe4352100d4d837ca96c1a16947b5444f0f3e0bc645c430f704bb06c84c01 00000000ffffffff01905f0100000000001976a9143ec6c3ed8dfc3ceabcc1cbdb0c5aef4e2d028 73c88ac00000000'
> tx2 знак = (ТХ, 0, собств)
> tx2
«01000000025e46552eb977f908fa8b3ee9d2943a8fa6d96c3b768a5f250ce485acd8c7f79700000 0008b483045022100fc9ec3f6c66f630604e76309092ae00b48d39a83f8683bbf9d6310084e70ea bd022058333d7a1d2158529ce39f9b48dea23dedefbe85028cdceab34e1ee9b1518c3201410420f 34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01b e2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9ffffffff71d1abe4352100d4d837ca96c 1a16947b5444f0f3e0bc645c430f704bb06c84c0100000000ffffffff01905f0100000000001976 a9143ec6c3ed8dfc3ceabcc1cbdb0c5aef4e2d02873c88ac00000000'
> TX3 знак = (tx2,1, собств)
> TX3
«01000000025e46552eb977f908fa8b3ee9d2943a8fa6d96c3b768a5f250ce485acd8c7f79700000 0008b483045022100fc9ec3f6c66f630604e76309092ae00b48d39a83f8683bbf9d6310084e70ea bd022058333d7a1d2158529ce39f9b48dea23dedefbe85028cdceab34e1ee9b1518c3201410420f 34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01b e2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9ffffffff71d1abe4352100d4d837ca96c 1a16947b5444f0f3e0bc645c430f704bb06c84c010000008c493046022100da7fa563ce34af5a4c 8167a2978cb5517ded494e52a29ea4103ff2c67bce77c102210094a18bda1109591a82d5cf5e444 6b12b3c399401c0f668755ac7f614eb3baa7701410420f34c2786b4bae593e22596631b025f3ff4 6e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01be2294a1f8a5eb0cf71a203cc034ced46e a92a8df16c6e9ffffffff01905f0100000000001976a9143ec6c3ed8dfc3ceabcc1cbdb0c5aef4e 2d02873c88ac00000000'
> pushtx (TX3)
«Сделка Представлено»


ECDSA (Электрум-совместимый):

> сиг = ecdsa_sign ("Hallo мир", Sha256 ("123"))
> сиг
«G9vmnqdlS9hmP7qT6ReRJEqldYn7f6xc47ado3zg7g4LKpLgVmpmSttDNAAPSizww7zzKDamsyD7bhh fAqaAJ0s =»
> ecdsa_verify ("Hallo мир", Сиг, privtopub (sha256 ("123")))
Правда
> ecdsa_verify ("Hallo мир!", Сиг, privtopub (sha256 ("123")))
Ложь
> ecdsa_recover ("Hallo мир", Сиг)
«04be686ed7f0539affbaf634f3bcc2b235e8e220e7be57e9397ab1c14c39137eb43705125aac75a 865268ef33c53897c141bd092cf4d1a306b2a57e37e1386826d»
> privtopub (sha256 ("123"))
«04be686ed7f0539affbaf634f3bcc2b235e8e220e7be57e9397ab1c14c39137eb43705125aac75a 865268ef33c53897c141bd092cf4d1a306b2a57e37e1386826d»


Электрум:

> семян = sha256 ("корова") [: 32]
> MPK = electrum_mpk (начальный)
> для г в диапазоне (5): печать electrum_privkey (семян, I, 0), pubkey_to_address (privtopub (electrum_privkey (семена, я, 0)))
daa19f768ea1a7bc8e33d83f9401ef237f5164ce39bf8000ec9630d088cec028 1GG9cGb7KW6qNBCxcU7Y3NH3mPRz9YSxgG
c45ad49da1ccb0ba30258902ed3de66af571de7421f9c73ffc0a8c2bde9ca596 19zxmnE4hmTwPFxhoDAxjtfnKQcRES4Sm2
c31100a56692314248a73f29b767ca252c3847eae15ce5d06e7e7f67a63ee5df 17mJpsyEVykxuf5H4YWsyhatXFyuJmkuoh
302362a97a2db566c5c65b875388db7cce246355faa72f15b486111c2f380bf3 16PGWQwcXM37iY7dPHqqVFit4GXsifRuAM
869424a50260cca7a7fa475c85e48ddf0e47abb0474df59ee45e72e6b95c8333 15QgAJmroGtExvVqVd8MGs1ZZvwYsk39i7
> для г в диапазоне (5): печать pubkey_to_address (electrum_pubkey (MPK, я, 0))
1GG9cGb7KW6qNBCxcU7Y3NH3mPRz9YSxgG
19zxmnE4hmTwPFxhoDAxjtfnKQcRES4Sm2
17mJpsyEVykxuf5H4YWsyhatXFyuJmkuoh
16PGWQwcXM37iY7dPHqqVFit4GXsifRuAM
15QgAJmroGtExvVqVd8MGs1ZZvwYsk39i7


Гораздо быстрее Электрум, предварительно рассчитав секретный показатель:

> семян = sha256 ("корова") [: 32]
> secexp = electrum_stretch (начальный)
> для г в диапазоне (5): печать electrum_privkey (secexp, I, 0), (pubkey_to_address privtopub (electrum_privkey (secexp, я, 0)))
daa19f768ea1a7bc8e33d83f9401ef237f5164ce39bf8000ec9630d088cec028 1GG9cGb7KW6qNBCxcU7Y3NH3mPRz9YSxgG
c45ad49da1ccb0ba30258902ed3de66af571de7421f9c73ffc0a8c2bde9ca596 19zxmnE4hmTwPFxhoDAxjtfnKQcRES4Sm2
c31100a56692314248a73f29b767ca252c3847eae15ce5d06e7e7f67a63ee5df 17mJpsyEVykxuf5H4YWsyhatXFyuJmkuoh
302362a97a2db566c5c65b875388db7cce246355faa72f15b486111c2f380bf3 16PGWQwcXM37iY7dPHqqVFit4GXsifRuAM
869424a50260cca7a7fa475c85e48ddf0e47abb0474df59ee45e72e6b95c8333 15QgAJmroGtExvVqVd8MGs1ZZvwYsk39i7


BIP32:

> bip32_master_key ( '123456789')
«xprv9s21ZrQH143K2zm1WhDFQqHVdgzoyBWfghiTfgdVJDSjZtTupL9eeg7391hLNjHQNAbd1qLobce ZcaYvrKZ81E3SwtiZ2UbPsP2zm9HeDJo»
> bip32_ckd (bip32_master_key ( '123456789'), 0)
«xprv9ujNqB68cg8G1owbyxEwLHMBYbB1RCyrcra4i8BciNhBrsWeQaEj8FBPNnRmGedK1Q9A5DD3vLe c8me5pBPSwdhckMPQPTWBMtiesu688LN»
> bip32_extract_key (bip32_ckd (bip32_privtopub (bip32_master_key ( '123456789')), 0))
'02e7f3eb95c70480f3f850198017644a84654325b2a4b038268546ea60c1814f6f'
> bip32_extract_key (bip32_privtopub (bip32_ckd (bip32_master_key ( '123456789'), 0)))
'02e7f3eb95c70480f3f850198017644a84654325b2a4b038268546ea60c1814f6f'
> privtopub (bip32_extract_key (bip32_ckd (bip32_master_key ( '123456789'), 0)))
'02e7f3eb95c70480f3f850198017644a84654325b2a4b038268546ea60c1814f6f'


(Те сжимаются открытые ключи, что делает BIP0032 стандарт)

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


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


10 августа 2013, 5:57:01 PM   # 2
 
 
Сообщения: 1610
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

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





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

10 августа 2013, 6:51:44 PM   # 3
 
 
Сообщения: 331
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Ницца, поздравления. Хотя я бы предложил другой язык причина просто Python не все так быстро, когда дело доходит до этих дорогостоящих операций там.

Если вы хотите быстро я настоятельно рекомендую вам посмотреть на C ++ основанное libbitcoin и SX: http://bitcoinmagazine.com/what-libbitcoin-and-sx-are-and-why-they-matter/ SX не поддерживает эллиптическую кривую арифметику или подписание сообщения ECDSA, но он отлично подходит для фактического Bitcoin вещи!

И я понимаю, что есть много неэффективности в моем коде, используемой выше преобразование между числами и шестнадцатеричным и обратно. Я намеренно ориентации разработчиков простоту использования. Нет зависимости чеканка, не ./configure, не делают, Sudo сделать установку, только Python файл, который вы можете даже копировать + вставить одиночные функции из.
Виталик Батерин сейчас офлайн Пожаловаться на Виталик Бутерин   Ответить с цитированием Мультицитирование сообщения от Виталик Бутерин Быстрый ответ на сообщение Виталик Бутерин

9 октября 2013, 6:39:20 PM   # 4
 
 
Сообщения: 331
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Смотрите мои последние коммиты:

http://github.com/vbuterin/pybitcointools

Новые возможности:

* История: возвращает историю адреса в виде выходов, в том числе, был ли или не был проведен каждый выход (использует blockchain.info)
* Pushtx: выталкивает сделку с blockchain.info/pushtx
* Mktx, знак (строить сделки)
* Детерминированным (RFC6979) подписание ECDSA, так что те, зло генераторы случайных чисел никогда не повредит вам снова.
* Pybtctool: инструмент командной строки для вызова любой из функций в библиотеке
* A setup.py скрипта, чтобы сделать библиотеку устанавливаемым
* Фактический файл README.md (более скоро)

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

22 октября 2013, 10:39:47 PM   # 5
 
 
Сообщений: 40
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Я очень люблю свою библиотеку.
Это мне потребовалось некоторое время, чтобы понять, что он на самом деле делает обрабатывать формат импорта бумажника. Это работает, если вы поставите WIF в privtopub (), хотя это заняло у меня некоторый поиск и мышления, чтобы понять, что вы можете использовать bin_to_b58check (), чтобы сделать WIF из двоичного ключа. Может быть, функция priv_to_wif () должна быть сделана?

Таким образом, для генерации ключей для бумажного бумажника. (Может быть, на LiveCD, без браузера, где вы не можете загрузить bitaddress.org)


>>> собств = random_key ()
>>> bin_to_b58check (priv.decode ("наговор"), 0x80)
'5JjCeDuxt9jWdb7nw43w7zQSB53MYpVi1aXe7XoxrhebWB3ft5k'
>>> privtoaddr (собств)
'1Jx1tHXNLRHyDQUxhNAaWdMRRk5vUmSEeC'
>>>



Я имею в виду, может быть, реализации BIP38, в основном для создания шифрованных бумаги бумажники.
Какие лицензии это под? Поскольку некоторые чистые реализации питон AES256 Я смотрю на это в соответствии с лицензией Apache. Я никогда не обращал особого внимания на лицензии, но я должен спросить, как она идет здесь, прежде чем я только CopyPaste ее части в этой библиотеке.
Кроме того, кажется, не существует чисто питона осущ из Scrypt. Я знаю, что это идет вразрез с вашим намерением (я согласен с) из не имеющей чеканки зависимостей. Я полагаю, я буду пытаться кодировать BIP38 и если он хорошо попытаться закодировать чистый питон Scrypt.
Петрови сейчас офлайн Пожаловаться на ковым   Ответить с цитированием Мультицитирование сообщения от Yakov Быстрый ответ на сообщении ков

23 октября 2013, 6:26:55 AM   # 6
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

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

23 октября 2013, 4:18:06 PM   # 7
 
 
Сообщения: 469
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Это, кажется, очень рядный с тем, что я пытаюсь сделать, так что я очень ценю это.
Можно ли получить быстрое пошаговое руководство о том, как осуществить multisig сделок, по линии пошаговый Gavin Андрисен для 2of3: https://gist.github.com/gavinandresen/3966071 ?

Edit: может быть, было бы лучше для меня, чтобы попросить о помощи с конкретной проблемой, так что здесь идет:

Я попытался построить потратить от multisig в ​​адрес:

2 из 3 multisig был создан:
Код:
mscript = mk_multisig_script (бары, 2,3)
msigaddr = scriptaddr (mscript)

и пабы список из 3 публичных адресов, с соответствующим списком privs и список адресами.

Я пытался провести таким образом:

Код:
Диффузоры = [{ 'значение': 20000, 'адрес': '38izn5J4EECw5NNFBE27fwLyxkaBAsavSF'}, { 'значение': 60000, 'адрес': адреса [2]}]
TX3 = mktx (история (msigaddr), выходы)
sig1 = multisign (tx3,0, mscript, privs [0])
Распечатать "Проверка sig1:", verify_tx_input (tx3,0, mscript, sig1, бары [0])
Sig2 = multisign (tx3,0, mscript, privs [2])
Распечатать "Проверка sig2:", verify_tx_input (tx3,0, mscript, Sig2, бары [2])
TX4 = apply_multisignatures (tx3,0, mscript, [sig1, Sig2])
печать Deserialize (TX4)
pushtx (TX4)

# для ссылок, история (msigaddr) дает: [{ 'Выход': u'aba22dd8cab30ffcfb0c57eb20d3dc9412de4e28fda6a10375b5292a03892467: 0' , 'значение': 100000, 'адрес': u'38izn5J4EECw5NNFBE27fwLyxkaBAsavSF '}]

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

24 октября 2013, 4:55:43 PM   # 8
 
 
Сообщения: 469
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Еще один вопрос; возможно, связано, возможно, нет.

Создание multisig адреса с bitcoind:

Код:
>_ ~ / .bitcoin # bitcoind createmultisig 2 «["0453170015ba9dd27388e51e824a8d5516b7627c025e3727232d9803ffd9c2b99d3ac338b28656aa6461e751758ce22399128f4a290a0ba705ae137baadd548f24","048c3acf5cad1a4c18467ea64382b1e50d2a5f4cc9060219d360c5f50a8ef7c01875295a3b0801c06240e888afce9c17d2bbd295bea9aafb0b6d7d1c69b0e154c5","04a8b14eb8ae0a6decb12e3b8b3c907e2084fd74d30bd00b93e687b0bf7a450055706aed7f2aaf5ae1bff08b49a0310af3f1cc5b949607f522810ed9a139f6a69e"]»
{
    "адрес" : "3Ej7teuzS7AGQGFdGPfRpyCwzRUq7fUHoQ",
    "redeemScript" : "52410453170015ba9dd27388e51e824a8d5516b7627c025e3727232d9803ffd9c2b99d3ac338b28656aa6461e751758ce22399128f4a290a0ba705ae137baadd548f2441048c3acf5cad1a4c18467ea64382b1e50d2a5f4cc9060219d360c5f50a8ef7c01875295a3b0801c06240e888afce9c17d2bbd295bea9aafb0b6d7d1c69b0e154c54104a8b14eb8ae0a6decb12e3b8b3c907e2084fd74d30bd00b93e687b0bf7a450055706aed7f2aaf5ae1bff08b49a0310af3f1cc5b949607f522810ed9a139f6a69e53ae"
}

Попытка создать такой же multisig адрес с pybitcointools:
Код:
Пабы = [те же 3 Паб клавиши, как указано выше]
mscript = mk_multisig_script (бары, 2,3)
msigaddr = scriptaddr (mscript)
печать msigaddr
печать mscript

дает следующий результат:
Код:
38izn5J4EECw5NNFBE27fwLyxkaBAsavSF
 52410453170015ba9dd27388e51e824a8d5516b7627c025e3727232d9803ffd9c2b99d3ac338b28656aa6461e751758ce22399128f4a290a0ba705ae137baadd548f2441048c3acf5cad1a4c18467ea64382b1e50d2a5f4cc9060219d360c5f50a8ef7c01875295a3b0801c06240e888afce9c17d2bbd295bea9aafb0b6d7d1c69b0e154c54104a8b14eb8ae0a6decb12e3b8b3c907e2084fd74d30bd00b93e687b0bf7a450055706aed7f2aaf5ae1bff08b49a0310af3f1cc5b949607f522810ed9a139f6a69e53ae

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

24 октября 2013, 9:51:25 PM   # 9
 
 
Сообщений: 16
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Ваша проблема заключается в том, что mk_multisig_script возвращает шестнадцатеричную строку и scriptaddr ожидает бинарной. Fix:

Код:
msigaddr = scriptaddr (mscript.decode ( 'шестигранной'))
Неразрешимый сейчас офлайн Пожаловаться на Неразрешимом   Ответить с цитированием Мультицитирование сообщения от Неразрешимого Быстрый ответ на сообщение Неразрешимые

24 октября 2013, 10:24:47 PM   # 10
 
 
Сообщения: 469
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Ваша проблема заключается в том, что mk_multisig_script возвращает шестнадцатеричную строку и scriptaddr ожидает бинарной. Fix:

Код:
msigaddr = scriptaddr (mscript.decode ( 'шестигранной'))

Большое спасибо. Это решило, что один. Вы случайно не знаете ответ на мой предыдущий вопрос тоже? (То есть я все еще получаю "Неправильная подпись" после подписания с двумя секретными ключами).
свиристель сейчас офлайн Пожаловаться на свиристель   Ответить с цитированием Мультицитирование сообщения от свиристеля Быстрый ответ на сообщение свиристель

25 октября 2013, 5:49:20 AM   # 11
 
 
Сообщения: 331
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Хорошо, сделал некоторые исправления.

1. scriptaddr принимает шестигранную или бен вход
2. mk_multisig_script больше не сортирует открытые ключи (сначала я сделал это так, чтобы люди могли детерминировано сделать multisig из некоторых клавиш без необходимости запоминать порядок, этот инцидент в настоящее время не убедил меня в том, что такое решение было неуместным для библиотеки низкого уровня как pybitcointools). Это должно исправить некоторые проблемы, как вопросы проверки подписи может возникнуть, если multisig подпись в неправильном порядке.

Однако "Неправильная подпись" проблемы не полностью ошибка (2); а, похоже, blockchain.info завинчивания вверх. Я провел некоторое время отладки это; Затем, однако я пытался нажав ту же операцию с помощью `электрума sendrawtransaction [TX]` и все работало нормально. Я запускаю это снова; Тот же результат.

Кроме того, здесь приведены инструкции о том, как сделать multisig с pybtctool (прилежащий командной строки обертка для pybitcointools), скопированный прямо из командной строки:

Код:
VUB @ VUB-U200: pybtctool random_key > k1
VUB @ VUB-U200: pybtctool random_key > k2
VUB @ VUB-U200: pybtctool random_key > k3

VUB @ VUB-U200: кошки k1 | pybtctool -s privtopub > p1
VUB @ VUB-U200: кошки k2 | pybtctool -s privtopub > p2
VUB @ VUB-U200: кошки k3 | pybtctool -s privtopub > p3

VUB @ VUB-U200: кошка p1 p2 p3 | pybtctool -s mk_multisig_script 2 3
524104b469d4fafd936e8630a5377223c5b7acfa9d2948b96845cc332607ec8528e6018abe46af616567ca44fca2d703a400dfdae73d0e21265c4dbeaf09e6294aa41941048ac7607d833aedb50c7be390955513f40327ff83891b53db2b241af64526ac17b37e7599f5ab2d4c7152779470dbc95c91526217de7bc002197ded7410526bfe4104cad74f0cf89dca7e13f37257e81308772fe3c7280f656ac88367867c54256ed606aa4dd2dc8ce4e73abb3159974f11657d2a365cee6fe86eeec4a8ce529cecd153ae
VUB @ VUB-U200: кошка p1 p2 p3 | pybtctool -s mk_multisig_script 2 3 > скрипт

VUB @ VUB-U200: pybtctool multisign `кота tx` 0` кошки script` `кот k1` > s1
VUB @ VUB-U200: pybtctool multisign `кота tx` 0` кошки script` `кот k2` > s2
VUB @ VUB-U200: pybtctool multisign `кота tx` 0` кошки script` `кот k3` > s3

VUB @ VUB-U200: pybtctool apply_multisignatures `кошка tx` 0` кошки script` `` кошки s1` кошки s3` > STX
VUB @ VUB-U200: pybtctool apply_multisignatures `кошка tx` 0` кошки script` `` кошки s1` кошки s3`
010000000125b98a02b8eb1ef3efb471cc87d6f028b53eadf29fe1cfb73fd0151188b6fe9300000000fd5f0100493046022100bcb0e128a7f4f39575f538979ecce4d49142ef6b613b4a98609bc14a7ae5ee0c02210094aca62aeae8301711560171087d8f069b79016d037f4e806df6c2efe12354e3014830450220257a3130f1d47ddf06b6a33882a1f1295cd8506f1ba1383b8b4cb5a40813c7ff022100ccea8cf93c54540f770e805a61585fb0ae82d6b6f68929b65afb0d6a9c0aa4ab014cc9524104b469d4fafd936e8630a5377223c5b7acfa9d2948b96845cc332607ec8528e6018abe46af616567ca44fca2d703a400dfdae73d0e21265c4dbeaf09e6294aa41941048ac7607d833aedb50c7be390955513f40327ff83891b53db2b241af64526ac17b37e7599f5ab2d4c7152779470dbc95c91526217de7bc002197ded7410526bfe4104cad74f0cf89dca7e13f37257e81308772fe3c7280f656ac88367867c54256ed606aa4dd2dc8ce4e73abb3159974f11657d2a365cee6fe86eeec4a8ce529cecd153aeffffffff0110270000000000001976a91405778c85c60c69598ea5bc896f872415fa7100b288ac00000000
VUB @ VUB-U200: pybtctool pushtx `кот stx`
Traceback (самый последний вызов последнего):
  файл "/ USR / местные / бен / pybtctool", Строка 14, в <модуль>
    о = вары () [CMD] (* арг)
  файл "/usr/local/lib/python2.7/dist-packages/pybitcointools/bci.py", Строка 57, в pushtx
    вернуться make_request ( 'http://blockchain.info/pushtx','tx='+tx)
  файл "/usr/local/lib/python2.7/dist-packages/pybitcointools/bci.py", Строка 13, в make_request
    повысить Exception (р)
Исключение: Неправильная подпись
VUB @ VUB-U200: Электрум sendrawtransaction `кот stx`
Traceback (самый последний вызов последнего):
  файл "/usr/local/lib/python2.7/dist-packages/electrum/interface.py", Линия 329, в init_tcp
    s.connect ((self.host.encode ( 'ASCII'), Int (self.port)))
  файл "/usr/lib/python2.7/ssl.py", Линия 331, в коммутации
    self._real_connect (адрес, False)
  файл "/usr/lib/python2.7/ssl.py", Линия 324, в _real_connect
    поднять е
Тайм-аут: Тайм-аут
Использование случайного сервера ...
electrum.stepkrav.pw:50002:s
Подключен к electrum.stepkrav.pw:50002
"914be4d2d48426959844520264e75f4c751b93cef8b5c13b2365bebcd9aa7181"

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

25 октября 2013, 8:56:14 AM   # 12
 
 
Сообщения: 469
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Хорошо, сделал некоторые исправления.

1. scriptaddr принимает шестигранную или бен вход
2. mk_multisig_script больше не сортирует открытые ключи (сначала я сделал это так, чтобы люди могли детерминировано сделать multisig из некоторых клавиш без необходимости запоминать порядок, этот инцидент в настоящее время не убедил меня в том, что такое решение было неуместным для библиотеки низкого уровня как pybitcointools). Это должно исправить некоторые проблемы, как вопросы проверки подписи может возникнуть, если multisig подпись в неправильном порядке.

Однако "Неправильная подпись" проблемы не полностью ошибка (2); а, похоже, blockchain.info завинчивания вверх. Я провел некоторое время отладки это; Затем, однако я пытался нажав ту же операцию с помощью `электрума sendrawtransaction [TX]` и все работало нормально. Я запускаю это снова; Тот же результат.

Кроме того, здесь приведены инструкции о том, как сделать multisig с pybtctool (прилежащий командной строки обертка для pybitcointools), скопированный прямо из командной строки:

Код:
VUB @ VUB-U200: pybtctool random_key > k1
VUB @ VUB-U200: pybtctool random_key > k2
VUB @ VUB-U200: pybtctool random_key > k3

VUB @ VUB-U200: кошки k1 | pybtctool -s privtopub > p1
VUB @ VUB-U200: кошки k2 | pybtctool -s privtopub > p2
VUB @ VUB-U200: кошки k3 | pybtctool -s privtopub > p3

VUB @ VUB-U200: кошка p1 p2 p3 | pybtctool -s mk_multisig_script 2 3
524104b469d4fafd936e8630a5377223c5b7acfa9d2948b96845cc332607ec8528e6018abe46af616567ca44fca2d703a400dfdae73d0e21265c4dbeaf09e6294aa41941048ac7607d833aedb50c7be390955513f40327ff83891b53db2b241af64526ac17b37e7599f5ab2d4c7152779470dbc95c91526217de7bc002197ded7410526bfe4104cad74f0cf89dca7e13f37257e81308772fe3c7280f656ac88367867c54256ed606aa4dd2dc8ce4e73abb3159974f11657d2a365cee6fe86eeec4a8ce529cecd153ae
VUB @ VUB-U200: кошка p1 p2 p3 | pybtctool -s mk_multisig_script 2 3 > скрипт

VUB @ VUB-U200: pybtctool multisign `кота tx` 0` кошки script` `кот k1` > s1
VUB @ VUB-U200: pybtctool multisign `кота tx` 0` кошки script` `кот k2` > s2
VUB @ VUB-U200: pybtctool multisign `кота tx` 0` кошки script` `кот k3` > s3

VUB @ VUB-U200: pybtctool apply_multisignatures `кошка tx` 0` `кота script` кота s1`` `кошки s2` кошки s3` > STX
VUB @ VUB-U200: pybtctool apply_multisignatures `кошка tx` 0` `кота script` кота s1`` `кошки s2` кошки s3`
010000000125b98a02b8eb1ef3efb471cc87d6f028b53eadf29fe1cfb73fd0151188b6fe9300000000fda80100493046022100bcb0e128a7f4f39575f538979ecce4d49142ef6b613b4a98609bc14a7ae5ee0c02210094aca62aeae8301711560171087d8f069b79016d037f4e806df6c2efe12354e30148304502207aebad2cafeabe58f4313cf380f48a3bf4b773819f2e617cdc6e68eddef99b380221009062bfbc94efce86807c7fd01d94211c75041e49f9564b900f3457e2676ea5b1014830450220257a3130f1d47ddf06b6a33882a1f1295cd8506f1ba1383b8b4cb5a40813c7ff022100ccea8cf93c54540f770e805a61585fb0ae82d6b6f68929b65afb0d6a9c0aa4ab014cc9524104b469d4fafd936e8630a5377223c5b7acfa9d2948b96845cc332607ec8528e6018abe46af616567ca44fca2d703a400dfdae73d0e21265c4dbeaf09e6294aa41941048ac7607d833aedb50c7be390955513f40327ff83891b53db2b241af64526ac17b37e7599f5ab2d4c7152779470dbc95c91526217de7bc002197ded7410526bfe4104cad74f0cf89dca7e13f37257e81308772fe3c7280f656ac88367867c54256ed606aa4dd2dc8ce4e73abb3159974f11657d2a365cee6fe86eeec4a8ce529cecd153aeffffffff0110270000000000001976a91405778c85c60c69598ea5bc896f8724 15fa7100b288ac00000000
VUB @ VUB-U200: pybtctool pushtx `кот stx`
Traceback (самый последний вызов последнего):
  файл "/ USR / местные / бен / pybtctool", Строка 14, в <модуль>
    о = вары () [CMD] (* арг)
  файл "/usr/local/lib/python2.7/dist-packages/pybitcointools/bci.py", Строка 57, в pushtx
    вернуться make_request ( 'http://blockchain.info/pushtx','tx='+tx)
  файл "/usr/local/lib/python2.7/dist-packages/pybitcointools/bci.py", Строка 13, в make_request
    повысить Exception (р)
Исключение: Неправильная подпись
VUB @ VUB-U200: Электрум sendrawtransaction `кот stx`
Traceback (самый последний вызов последнего):
  файл "/usr/local/lib/python2.7/dist-packages/electrum/interface.py", Линия 329, в init_tcp
    s.connect ((self.host.encode ( 'ASCII'), Int (self.port)))
  файл "/usr/lib/python2.7/ssl.py", Линия 331, в коммутации
    self._real_connect (адрес, False)
  файл "/usr/lib/python2.7/ssl.py", Линия 324, в _real_connect
    поднять е
Тайм-аут: Тайм-аут
Использование случайного сервера ...
electrum.stepkrav.pw:50002:s
Подключен к electrum.stepkrav.pw:50002
"914be4d2d48426959844520264e75f4c751b93cef8b5c13b2365bebcd9aa7181"

Инструкции с гладким pybitcointools в значительной степени точно так же.

Благодаря muchly.
О сортировке pubkeys, я согласен; Я был немного сбит с толку сначала, почему вы сделали это, то я увидел точку, но в конце концов я согласен, что это менее запутанной, чтобы просто не сделать это.
О blockchain.info, поэтому я и не подозревал, что быть проблема в том, что по крайней мере один человек (и, возможно, другие, которые я прочитал в Интернете) сказали мне, что они, безусловно, принимают multisig передатчиков. Есть ли какие-либо контакты / поддержка люди там я мог бы попросить подтверждения, интересно?

И один последний вопрос об этом сообщении: Почему вы претендуете все 3 подписи? Не является ли это 2 из 3?
свиристель сейчас офлайн Пожаловаться на свиристель   Ответить с цитированием Мультицитирование сообщения от свиристеля Быстрый ответ на сообщение свиристель

25 октября 2013, 9:37:56 AM   # 13
 
 
Сообщения: 331
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Благодаря muchly.
О сортировке pubkeys, я согласен; Я был немного сбит с толку сначала, почему вы сделали это, то я увидел точку, но в конце концов я согласен, что это менее запутанной, чтобы просто не сделать это.
О blockchain.info, поэтому я и не подозревал, что быть проблема в том, что по крайней мере один человек (и, возможно, другие, которые я прочитал в Интернете) сказали мне, что они, безусловно, принимают multisig передатчиков. Есть ли какие-либо контакты / поддержка люди там я мог бы попросить подтверждения, интересно?

И один последний вопрос об этом сообщении: Почему вы претендуете все 3 подписи? Не является ли это 2 из 3?

Да, извини, предназначено для применения только 2 из 3. Я сделал ошибку в первом и скопировал чужие строку из моей истории командной строки. Заднее число фиксируется в моих выше комментариях.

Что касается ошибок, я представил его тему:

Кроме того, один запрос предложения: я должен автоматически сделал десериализацию вызова deserialize_script? Таким образом десериализации будет разлагаться Сделке весь путь, в том числе разбив сценарий. Если нет, то я, вероятно, сделать отдельный метод ShowTx, который будет делать полное разложение, а также попытаться вычислить входные адреса для стандартных Публичных и p2sh сделок.
Виталик Батерин сейчас офлайн Пожаловаться на Виталик Бутерин   Ответить с цитированием Мультицитирование сообщения от Виталик Бутерин Быстрый ответ на сообщение Виталик Бутерин

25 октября 2013, 10:20:35 AM   # 14
 
 
Сообщения: 469
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Могу ли я спросить, какую версию электрума вы используете? Я 0,9 установлен на моем VPS (потому что они находятся в процессе реализации multisig в ​​новой версии), но я не могу заставить его работать прямо сейчас с этим, по крайней мере пока.

Редактирование: игнорировать это; Я звала sendtx неправильно в Электрум. Я, наконец, удалось отправить свой первый платеж multisig в ​​сети

Я считаю, Электрум действительно слоеное хотя; он взял меня три попытки бежать мой сценарий, прежде чем ТХ был принят сервером. Иногда он просто зависает (сообщения типа SSL Рукопожатие таймаута и другие), и удачливый во второй раз я послал сделку я получил код ошибки -22 ((False, у"Ошибка: {u'message ': u'TX отвергнуто', u'code ": -22}")), Но в третий раз он получил послал ((Правда, u'3e1dbe4c661b83b3d5ff22abf0e545924350c666c65ca875ac6aed741fb902b7' )).
Любые намеки о том, как сделать его надежным, имея в виду, что я пытаюсь сделать все, что в Python?

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

25 октября 2013, 6:03:10 PM   # 15
 
 
Сообщения: 469
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Кроме того, один запрос предложения: я должен автоматически сделал десериализацию вызова deserialize_script? Таким образом десериализации будет разлагаться Сделке весь путь, в том числе разбив сценарий. Если нет, то я, вероятно, сделать отдельный метод ShowTx, который будет делать полное разложение, а также попытаться вычислить входные адреса для стандартных Публичных и p2sh сделок.

Я не достаточно в этой области хорошо осведомлен, чтобы быть хорошо знакомы с тем, что люди хотят, но попробовав его, я могу определенно видеть, использование для него (сценария десериализации). Есть ли использование дело, связанное с не делать это, например, связать формат с тем, что bitcoind произвожу, я не знаю, но я так думаю. Очевидный ответ, чтобы сделать его необязательным значение по умолчанию не делает, т.е. десериализации (ТХ, deserialize_script = False)

Edit: небольшая мысль, вы можете перевести 174 в OP_CHECKMULTISIG или что-то подобное. Будучи нуб в развитии Bitcoin я был смущен тем, что такие вещи в первый
свиристель сейчас офлайн Пожаловаться на свиристель   Ответить с цитированием Мультицитирование сообщения от свиристеля Быстрый ответ на сообщение свиристель

28 октября 2013, 6:07:46 AM   # 16
 
 
Сообщения: 331
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Я очень люблю свою библиотеку.
Это мне потребовалось некоторое время, чтобы понять, что он на самом деле делает обрабатывать формат импорта бумажника. Это работает, если вы поставите WIF в privtopub (), хотя это заняло у меня некоторый поиск и мышления, чтобы понять, что вы можете использовать bin_to_b58check (), чтобы сделать WIF из двоичного ключа. Может быть, функция priv_to_wif () должна быть сделана?

Готово, хотя и не совсем в той форме. Это:

> ключ = sha256 ( '123')
> ключ
'A665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3'
> encode_privkey (клавиша 'WIF')
'5K5ZyFA5NqiBzCbiaTh5KYJmSh7dXdk65DvGkcx9G6ydsj83TM1'


Или просто
Код:
ключ кошки | pybtctool -s encode_privkey WIF

Какие лицензии это под?

Всеобщее достояние; если это не принято в вашей юрисдикции, то MIT. Просто добавил файл лицензии сегодня.

котировка
Кроме того, кажется, не существует чисто питона осущ из Scrypt. Я знаю, что это идет вразрез с вашим намерением (я согласен с) из не имеющей чеканки зависимостей.

Опираясь на внешнюю библиотеку C ++ для Scrypt отлично; делая это чище питон силу установить более низкие параметры для практичности, что ослабляет безопасность. Мое общее правило, если это в установке на Python по умолчанию, это, наверное, хорошо.
Виталик Батерин сейчас офлайн Пожаловаться на Виталик Бутерин   Ответить с цитированием Мультицитирование сообщения от Виталик Бутерин Быстрый ответ на сообщение Виталик Бутерин

29 октября 2013, 12:58:18 PM   # 17
 
 
Сообщения: 469
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

При подписании multisig сделок с pybitcointools.apply_multisignatures, я обнаружил, что вы должны подать подписи в правильном порядке.

Я не могу найти четкое объяснение того, как где-нибудь применяются подписи, но Вот он говорит:
котировка
Для каждой подписи и пары открытых ключей, OP_CHECKSIG выполняется. Если больше, чем открытые ключи подписей перечислены некоторые пары ключей / сиг может потерпеть неудачу. Все подписи должны соответствовать открытому ключу. Если все подписи действительны, 1 возвращаются, 0 в противном случае
Это немного неоднозначным ("Все SIGs должны соответствовать открытый ключ"), Но, похоже, это означает, что каждый сиг-Публичный проверяются в пару. Я не понимаю, как это работает.

Например. pubkeys PA, PB, PC. Применим подписи SA SB. Первый сиг SA соответствует первым Публичным PA, вторым соответствует второму, поэтому она возвращает 1. Но что, если мы применим SA SC? Кажется, из моих экспериментов, что это работает, но если применить SC SA, это не так. Это то, что должно произойти?

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

29 октября 2013, 1:21:04 PM   # 18
 
 
Сообщения: 1512
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

Эта библиотека, кажется, нет никаких проблем положить недопустимые личные ключей через математику без проверки:
Код:
>>> pybitcointools.privtopub ( '0000000000000000000000000000000000000000000000000000000000000000')
'0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
>>> pybitcointools.privtopub ( 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee')
'04d3c3c891a4e05e520b01928b19cf7b56b7debc725dd915a42763a6c94bcdce54e171bf8daa5328e7ef955a8d60a9e72cc6fe5ac918eac04134d692a34654c6c4'
>>> pybitcointools.get_privkey_format ( 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee')
«Шестигранной»
deepceleron сейчас офлайн Пожаловаться на deepceleron   Ответить с цитированием Мультицитирование сообщения от deepceleron Быстрый ответ на сообщение deepceleron

29 октября 2013, 1:52:59 PM   # 19
 
 
Сообщения: 331
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

При подписании multisig сделок с pybitcointools.apply_multisignatures, я обнаружил, что вы должны подать подписи в правильном порядке.
...

Например. pubkeys PA, PB, PC. Применим подписи SA SB. Первый сиг SA соответствует первым Публичным PA, вторым соответствует второму, поэтому она возвращает 1. Но что, если мы применим SA SC? Кажется, из моих экспериментов, что это работает, но если применить SC SA, это не так. Это то, что должно произойти?

Да, как это должно работать. Это протокол, что Bitcoin; это сделано таким образом, по соображениям эффективности, как я понимаю, поэтому проверка подписи может быть линейной (попробуйте pubkeys в порядке), а не квадратично (попробуйте каждый сиговых с каждым Публичным, чтобы увидеть, если любая комбинация работает).
Виталик Батерин сейчас офлайн Пожаловаться на Виталик Бутерин   Ответить с цитированием Мультицитирование сообщения от Виталик Бутерин Быстрый ответ на сообщение Виталик Бутерин

29 октября 2013, 2:11:41 PM   # 20
 
 
Сообщения: 469
Цитировать по имени
цитировать ответ
по умолчанию Re: Python Bitcoin библиотеки ECC, поддерживает подписание, транзакции, determinstic бумажники

При подписании multisig сделок с pybitcointools.apply_multisignatures, я обнаружил, что вы должны подать подписи в правильном порядке.
...

Например. pubkeys PA, PB, PC. Применим подписи SA SB. Первый сиг SA соответствует первым Публичным PA, вторым соответствует второму, поэтому она возвращает 1. Но что, если мы применим SA SC? Кажется, из моих экспериментов, что это работает, но если применить SC SA, это не так. Это то, что должно произойти?

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

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



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW