Метка: деньги

Генерируем Bitcoin-адрес на Python

Тема криптовалют снова начинает будоражить интернет. Супер, что вам не надо идти в отделение банка с паспортом и выстаивать очередь, чтобы открыть счет. Сгенерировать кошелек Bitcoin — дело нескольких строк кода на Python.

Нам понадобятся библиотеки base58 и ecdsa. base58 – это кодирование бинарных данных 58-ю печатными символами (цифрами и латинскими буквами, кроме 0, O, I, l, которые похожи друг на друга). ecdsa – библиотека криптографии на эллиптических кривых.

pip install base58 ecdsa

Импортируем то, что нужно:

import hashlib
import ecdsa
from binascii import hexlify
from base58 import b58encode

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

private_key = ecdsa.SigningKey.generate(curve=ecdsa.SECP256k1)

Вычислим этой же библиотекой публичный ключ и добавим спереди байт 0x4 (это признак «несжатого» публичного ключа; есть и другие форматы).

public_key = b'\04' + private_key.get_verifying_key().to_string()

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

Схема генерации адреса BTC из публичного ключа.

Для получения адреса из публичного ключа вычисляем сначала RIPEMD160(SHA256(public-key)):

ripemd160 = hashlib.new('ripemd160')
ripemd160.update(hashlib.sha256(public_key).digest())

Дополняем его префиксом 0x0 (главная сеть Bitcoin):

r = b'\0' + ripemd160.digest()

Вычисляем контрольную сумму (нужна, чтобы наши денюжки не пропадали, если мы ошибемся в каком-то символе адреса). Контрольная сумма это первые 4 байта от SHA256(SHA256(r)):

checksum = hashlib.sha256(hashlib.sha256(r).digest()).digest()[0:4]

Получаем адрес кошелька, закодировав в base58 сложенные r и checksum:

address = b58encode(r + checksum)

Выведем результат:

print(f'private key: {hexlify(private_key.to_string())}')
print(f'public key uncompressed: {hexlify(public_key)}')
print(f'btc address: {address}')

Генерация приватного ключа из своего источника случайностей, например, os.urandom:

def random_secret_exponent(curve_order):
    while True:
        bytes = os.urandom(32)
        random_hex = hexlify(bytes)
        random_int = int(random_hex, 16)
        if random_int >= 1 and random_int < curve_order:
            return random_int


def generate_private_key():
    curve = ecdsa.curves.SECP256k1
    se = random_secret_exponent(curve.order)
    from_secret_exponent = ecdsa.keys.SigningKey.from_secret_exponent
    return from_secret_exponent(se, curve, hashlib.sha256).to_string()

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

Полный пример кода генерации кошельков.

Проверить ключи и адрес можно здесь. (Нажимаем Skip, дальше Enter my own…)

Подробнее по теме можно почитать здесь.

Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈 

Взлом игры «Потребительская корзина» от РокетБанка

РокетБанк устроил конкурс с розыгрышем iPhone, хамона и макарон. В одном из заданий нужно играть в игру типа «Ну, погоди!». Несколько раз пробовал, но она оказалась для меня слишком сложной, поэтому я взломал движок Construct 2 (на котором она сделана) и прошел ее на раз-два.

Итак, нам понадобится браузер Chrome.

Открываем игру.

Кликаем правой кнопкой около игровой приставки, выбираем Inspect. (Картинки можно открыть пошире)

screen-shot-2016-09-29-at-23-14-55

В появившемся окне кликаем на Sources (наверху).

screen-shot-2016-09-29-at-23-15-03

Кликаем на три точки, затем Go to file.

screen-shot-2016-09-29-at-23-15-21

Находим файл c2runtime.js, переходим к нему (это движок игры).

screen-shot-2016-09-29-at-23-15-33

Нажимаем (Ctrl+F или Cmd+F на маке), это поиск. Находим нужную ф-цию (AddVar).

screen-shot-2016-09-29-at-23-15-51Дописываем туда код, как показано на рисунке.

Код смотрит, если переменная – очки за игру, то добавляем сразу по 10:

if(v.name == 'Score') x = 10;

screen-shot-2016-09-29-at-23-16-33

Нажимаем Ctrl+S (или Cmd+S на маке). Chrome может подвиснуть на пару секунд, не пугайтесь. Затем возвращаемся к игре, нажимаем «Заново» и «Играть». Теперь каждый собранный продукт дает нам по 10 очков вместо 1 очка. Нам остается набрать 100 и более очков, продуть, и все! Печать наша!

screen-shot-2016-09-29-at-23-19-31

Спасибо за внимание!

P. S. Оформляйте карты РокетБанка через мой реферал: https://rocketbank.ru/loves/maksim.koltsov

Безработный-беззаботный

 

Цитата из ВК:

Ну вот и все! Я покидаю работу мечты ради новых великих свершений. Это были прекрасные полтора года моей жизни. Спасибо всем, с кем я трудился бок о бок. Кто знает, может, когда-нибудь судьба снова сюда приведет… @ Mail.ru HQ Skylight

wYvWzDnGNqs

Обещал себе после увольнения почаще обновлять этот сайт. Уволился уже больше недели назад, а новость пишу только сейчас. Но все-таки пишу, заметьте! Будут и еще новости о моей новой жизни.

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

Работе я уделяю не очень много времени. Даже чуть меньше, чем последний месяц в Мэйл.Ру. Основное мое время тратится на прогулках. 12-15 км в день – это то, что нужно, часы не дадут соврать. Сегодня исходил город в поисках монитора. Да, купил, немного разочарован, но привыкаю. В конце концов, не последний монитор в моей жизни. Обустраиваю рабочее место.

Руки, наконец, дошли до серьезной уборки в квартире. И до кулинарии. Вчера баловал себя карри-рисом с овощами, сегодня вот филе курицы в сметане с яблоками и «большой овощной салат».

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

Живого общения не хватает. По интернету, конечно, постоянно переписываюсь, но это не то. Друзей здесь мало.

Склоняюсь к переезду обратно в Нижний. Москва – хороший город и обладает массой преимуществ. Но и недостатков хватает. Не буду углубляться в сравнения. Учитывая, что раньше я умудрялся без проблем сюда ездить, то и в будущем все будет просто. Тем более поезда уже идут 3:35. А через пару лет, вообще менее двух часов будут идти. Москва близко. Ближе, чем казалась раньше. Зато в Нижнем можно найти более хорошие жилищные условия за меньшую цену. Не надо тратиться на билеты. Не надо переживать за автопоездки родителей.

Посмотрим. Надо сходить в антикафе и коворкинги, возможно, там найдутся люди по интересам.

Буду откровенным, по офису почти не скучаю. Думал первоначально, что буду это тяжелее переживать. Заскучаю, попрошу Заура выписать пропуск, не беда. За деньги переживаю. Их стало меньше. Надеюсь, временно; точнее приложу усилия, чтобы выйти на тот же уровень и на еще более высокий. Пугает другое. Когда ты работаешь на работе, о твоих деньгах уже подумали другие люди. В большой компании деньги внезапно не кончатся. За них вовремя заплатят налоги и в срок перечислят тебе на карту. А когда путь твоих денег перед тобой во всех деталях, ты видишь, насколько он хрупок и сложен. Видишь, как легко его поломать в любом из множества мест. Как много человек держат эту стеклянную трубочку живительного потока. Их нужно переодически подпинывать, но нельзя портить с ними отношения.

Выводы такие: надо привыкать жить по-новому. Это должно быть лучше! Выбор, я считаю, сделан правильный.

NXT Coin

NXT server on my window
NXT server on my window

Решил поставить у себя сервер для новой криптовалюты. Ну не поставить, а повесить скорее 🙂 Небольшое описание:

Криптовалюта второго поколения Nxt (от «Next») запущена 24.11.2013 г.: основная веткапервоначальная ветка.
Это чисто PoS система, ~1 блок/минута, сложность пересчитывается каждый блок.
Всего эмитирован 1 млрд монет (пропорционально биткоинам, которые ранние адепты Nxt переводили автору), больше эмиссии не будет, майнинг происходит полностью за счёт транзакционных сборов (т.е. как это будет с Биткоином через 30 лет), минимальная комиссия — 1 Nxt.

Вообще-то это совсем не форк биткоина, т.к. софт (полностью на java) написан с нуля.
Чтобы Nxt не форкнули немедленно, автор намерен полностью опубликовать исходники не ранее 3-го января 2014 г., сейчас исходный код доступен частично.

Nxt — система по-настоящему децентрализованная, нет даже wallet.dat. Клиента как отдельного приложения тоже нет, весь функционал доступен через web-браузер. Счёт пользователи себе заводят через web-интерфейс(весёленький, нужно отменить) путём выбора длинной сложной фразы, примерно как в Brainwallet или Electrum. Войти в свой счёт можно с любого веб-браузера, лучше через IP адрес своего сервера, но можно и через любой другой сервер (если вы ему доверяете). В любом из этих случаев после открытия счёта монеты участвуют в PoS-майнинге, правда, свежекупленные монеты должны для этого вылежаться 1440 блоков, т.е. ~ 1 сутки.

(Источник: https://bitcointalk.org/index.php?topic=345882.0)

Небольшой FAQ (вопросы и ответы):

Вопрос. Зачем тебе это надо?

Ответ. Потому что могу. У меня оборудование, которое лежит без дела, и я хочу его пустить на благое дело – развитие новой финансовой системы. Bitcoin завоевал уже серьезную популярность и даже признание со стороны правительств. А NXT – только первая ласточка второго поколения криптовалюты. Хочу помочь проекту, тем более, что это мне ничего не стоит. Я потратил на это минимум денег и времени.

Вопрос. Тебя обманывают! (Это не вопрос). А вдруг оно взламывает пароли Пентагона?

Ответ. Я никому не плачу за это. Моя информация сохранна (так как все крутится на отдельной железке). Взламывает пароли? Вздор! Да, исходные коды еще полностью не открыты, но скоро будут открыты. Это обязательное условия признания валюты общественностью, мы будем наверняка знать, что делает эта программа. Даже если она взламывает чужие пароли, то мой девайс абсолютно в этом не эффективен. Это, наверное, самый медленный мой компьютер. Никому он вреда, кроме самого злоумышленника он не нанесет, а взломщику придется перекладывать задания с моего сервера на другой, так как мой с ним и не справится (грубо говоря). Обвинить меня в соучастии не получится, ведь я скачивал программу для совершенно других целей и только окажусь невинной жертвой мошенника. Также сложно вычислить отдельных людей, потому что в системе уже участвуют тысячи… В общем слишком много «но», чтобы эта бредовая идея была похожа на правду.

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

Ответ. Иди читай статью. В NXT не нужны вычислительные мощности. Это все в прошлом. Все работает по-другому. Майнинга нет. Сервера нужны, чтобы поддерживать и подтверждать транзакции. Поэтому оконного сервера мне хватает за глаза. Я не скоро обновлю эту железку. А она потребляет максимум 2.5 Ватта (от обычного USB). Это в 400 раз меньше, чем утюг или чайник или даже мой стационарный компьютер (там БП аж на 1100 Ватт).

Вопрос. А что за железяка-то?

Ответ. PCduino (ARM), 1 Ghz, 1 Gb RAM, 4 Gb ROM, HDMI, GPIO (Arduino-like), Ubuntu. NXT сам на JAVA. Штукенция обошлась мне в 60 баксов, которые я взял из рекламных денег моей игры. Настройка и чтение отняли около двух часов времени.

Вопрос. Где ты узнал про NXT?

Из поста Артема в ВК.

Не имей сто рублей

А имей олимпийские 100 рублей 🙂
Дизайн, конечно, ничего так, но вот сразу не поймешь, что это реальные деньги.
Что удивительно, на купюре везде написано 2014 год, хотя я держу ее в руках в 2013-м.
100 рублей Сочи 2014