ХФ17 Как жахнуть разом своими ботами
Не успел выложить описание нового таллида, как юпит изменил алгоритм работы в том же направлении и в личку поступило дельное предложение от ботоводов. А чего б не использовать ботов единым фронтом? Да, у некоторых СГ не дотягивает до сотки, но в совокупности же сотня ботов по 5 СГ это уже что-то! Вот только осталось их запихать в одну транзакцию-то, а то если по одному - это не айс.
И действительно, а можно ли одновременно апнуть не только собой, но и всем личным паровозом? Разом! На самом деле всё можно. Мы же на блокчейне, а это же база данных и наши данные там где-то хранятся... вот например мои.
Обратите внимание, что для моего аккаунта существуют 4 публичных ключа. Именно по ним определяется, что то или иное действие принадлежит мне (пост, коммент, апвот и перевод токенов).
Аналогичная картина будет и у моих ботов, все ключи разные у всех разные пароли. Но, если я перезапишу у всех ботом ключ "posting" (это публичный постинг ключ), то я смогу запихать в одну транзакцию апвоты свои и ботнета и отправить всё это в блокчейн. Вот действия, которые требуют различных ключей нельзя отправить одновременно, а вот действия, которые подписываются одним ключом, даже если они совершаются разными аккаунтами - можно.
Осталось дело за малым, надо взять и переписать публичные ключи в нашей базе данных, чтобы все думали, что мы "близнецы". Исходный пароль поменять на единый ничего не даст, так как у нас SHA-256 шифрование и публичные ключи получаются преобразование следующей строки:
login + parole + posting => SHA-256 => GLS6RGi692mJSNkdcVRunY3tGieJdTsa7AZeBVjB6jjqYg98ov5NL
где login - это будет ksantoprotein, а пароль... в принципе любая строка (но многие знают ее с началом Р5...), а posting - это реально строчка такая, если ее поменять на active, то сгенерируется публичный активный ключ (по нему отслеживаются ваши манипуляции с токенами).
Однако мы спокойно можем вносить изменения в эти поля (мы же можем сменить пароль и соответственно приватные и публичные ключи). В свое время @vvk подкинул мне вот такую ссылку
https://github.com/bitfag/golos-scripts/blob/master/change_password.py
где описано как затереть (сменить публичные ключи). Пару месяцев назад я открыл и закрыл, а вот пару дней назад сам очень удивился, ведь там же всё просто на самом деле. Вот чем мне нравится голос... учишься постоянно и получаешь удовольствие от того, что с каждым днем разбираешься в том, что многим и неведомо. Главное приложить немного старания.
Вот самый главный кусочек кода. Нам нужно просто сгенерировать правильно словарь s и отправить запрос в блокчейн подписав транзакцию ключом owner. Обращаю внимание, это не активный и не постинг и даже не мемо ключ... это так называемый общий ключ, самый самый главный для вас. Зная который можно фактически просто увести ваш аккаунт. Даже на голос ио вы не сможете получить приватный общий ключ... не дает. А без него транзакцию не подписать.
Он же на картинке ключ владельца. Мы видим только публичный GLS... (все видят), а вот приватный (он как и все ключи начинается с 5...) мы не видим даже через точку доступа. Технически, когда мы вводим пароль, то код генерирует все 4 ключа самостоятельно и уже далее (без вашего) участия спокойно позволяет вам находиться на платформе (именно такой подход и привел недавно к фишингу некоторых аккаунтов и потерей средств с них). Но мы же хотим массово поменять GLS у сотни ботов, чтобы выставить на таллиде общий ордер.
Для этого нам потребуется немного покодить.
используя уже описанную функцию get_keys мы сможем спокойно сгенерировать все необходимые ключи по списку наших ботов и по их паролям
logins, keys = [перечисляем логины ботов], [перечисляем owner ключи ваших ботов]
golos = Steem(node = 'wss://ws17.golos.io', wif = keys)
parent = "ksantoprotein"
account = get_account(parent)
GLS = account["posting"]["key_auths"][0][0]
Чтобы не париться, заполучим мой GLS ключ напрямую из блокчейна. Описание функции get_accounts ЖМИ
Далее кодим как по ссылке
#prepare for json format
posting_key_authority = [[GLS, 1]]
posting_accounts_authority = []
for login in logins:
# Чтоб вернуть как было понадобиться эта строчка
#posting_key_authority = [[paroles[login]["keys"]["memo"]["public"], 1]]
new_record = {
"account": login,
"memo_key": paroles[login]["keys"]["memo"]["public"],
"posting": {"account_auths": posting_accounts_authority,
"key_auths": posting_key_authority,
"weight_threshold": 1},
"prefix": sw.golos.rpc.chain_params["prefix"]
}
op = operations.Account_update(**new_record)
tx = golos.finalizeOp(op, login, "owner")
Обращаю внимание, что изменять активный и общий ключ мы не собираемся, но чтобы транзакция прошла, нужно прописать аккаунт, мемо ключ (а его можно по новой скопировать из get_keys) и указать префикс GLS, моя обвязка до этого была такой
keys = get_keys(login, parole)
paroles[login] = {"parole": parole, "keys": keys}
print(login, keys["posting"]["public"])
Если вы разберетесь как в словаре распределены у меня сгенерированные ключи, то у вас всё получится. Так же, если захотите вернуть все как было, то вам нужно просто отменить ремарку в одной строчке и снова запустить код. И программа вернет ваших ботов с изначальными постинг ключами.
После такого действия, сменив у всех ботов публичный ключ, вы теперь сможете заходить к каждому из них используя ваш же постинг ключ от основного аккаунта. Наверно это будет удобно для некоторых.
Так как у моего студботнета не все студенты доверили пароли, то только половину я смог так настроить под себя. И теперь можно апвотить некоторые посты и комменты одним заходом одним ключом (это несомненно быстрее теперь происходит). А что уж говорить о генерации комментариев, теперь можно оставлять каждые 20 секунд (у нас ограничение такое) 40 пустых комментариев под избранным постом. Это 2 комментария в секунду в среднем, 120 комментариев в минуту, 1200 за 10 минут. Если кто помнит моего боевого бота Клеймо резонатора ЖМИ, то становится немного не по себе. Через 10 минут после публикации чего-то непристойного сгенерируются 1к комментов... и теперь вопрос, как долго это будет открываться. Фактически это равносильно тому, что юзеру завязывают кляп и не дают высказывать свои мысли.
Но вернемся к нашим баранчикам. Если ботовод сможет такое исполнить, и у него будет список ботов, которые имеют такой же постинг ключ, как и у него, то его можно будет спокойно выложить на таллиде, (чутка код подправлю, аж ручки чешутся) и это увеличит ценность вашего апвота на бирже.
Thallid - повелитель ботов
Возможно, в далеком будущем 2020 года, когда боты на голосе приобретут немного ИИ появятся посты с призывом голосовать за таллида как за делегата, ибо он поддерживает ботов в противостоянии с этими человеческими юзверями )))
Если интересно как на питоне запихнуть апвоты и трансферы в одну транзакцию, то отписывайтесь в комментариях - следующий пост тогда по тематике кодинга будет об этом.