TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.49K subscribers
Post #1118 1.13K
Solidity hints. Часть 1

Некоторое время думал, как назвать цикл постов с описанием пунктов по Solidity от Chinmaya, о котором писал в предыдущем посте. В общем теперь это будут посты в формате заметок с пояснениями: Solidity hints.

Я буду писать заголовок пункта из репо и давать к нему небольшое описание.

Как я понял, у Chinmaya нет градации по сложности, он писал обо всем, что изучал сам. Поэтому может быть и несколько простых пунктов, а может и пара сложных подряд. Будет смотреть по ходу. Итак, поехали:

1. Sending ether to a contract B from a contract(for eg. using .send or .transfer), executes the code of B’s fallback function if it exists (and receive doesn’t exist).

Когда мы отправляем Эфир (не токены) на другой контракт, где-то "под капотом" проверяется наличие дополнительных данных в транзакции (msg.data). Если они есть, то выполнение сразу падает в fallback функцию, если же данных нет - в receive(), параллельно проверяя существует ли receive вообще. Если ее такой функции нет, то снова вызывается fallback. Если же и его нет, то транзакция откатывается.

Есть два случая, когда Эфир все равно попадет на счет нового контракта, но, думаю, об этом будут еще пункты.

Можно эту схему разложить на:

send Ether
|
msg.data is empty?
|
no => fallback()
yes => is receive() exist?
|
yes => receive()
no => fallback()



1. Division result is auto rounded towards zero

При делении округление чисел идет в меньшую сторону. Это стоит учитывать при манипуляциях с балансами токенов. Например,

    function getMath() public pure returns(uint256) {
return uint256(19) / uint256(2);
}


Результатом будет 9. Вроде как потеря 0,5 не так страшна, пока не начнем думать, что это мог быть Эфир, стоимость под $ 2000.

Для решения таких проблем существуют специальные библиотеки, либо некоторые манипуляции с округлением вверх или вниз. но даже тут нужно быть очень аккуратным и проверять все в специальных программах, так как ошибки находят даже в профессиональном коде.

2. Division by zero causes panic error, escapes unchecked

Деление на 0 приводит к критической ошибке и реверту транзакции, т.е. просто не делите на ноль.

Не очень уверен в смысле "escapes unchecked". Тут либо "избегает проверок", либо "не работает в unchecked", либо "условия не проверяются". Там при каждом случе можно найти подходящее описание случая. Но будет лучше, если просто запомните, что на 0 не делится.

Это пока первые три пункта из его репо, на всякий буду оставлять на него ссылку, чтобы и вы могли изучать его по ходу нашего разбора.

#hints
  • 👍 17
  • ❤ 1
More from @solidityset
  1. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  2. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  3. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  4. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
  5. Sep 9, 2026Работа с чистой энергией Дисклеймер Сегодня ава и название канала, наконец, поменялись. Я…
  6. Sep 9, 2026Channel name was changed to «Из Solidity в AI и дальше»
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →