BMINAIEV_BLOG Telegram 21
Каждый раз, когда взаимодействую с миром блокчейна, меня поражает смелость людей, которые пишут для них смарт-контракты. Если в контракте есть хотя бы несколько сотен строк, то почти наверняка в нем будут баги. Скорее всего какие-то не очень важные, которые вряд ли приведут к потере всех денег. Но что если там тысяча строк? А если несколько тысяч? Чисто статистически там будут баги, сколько бы вы не написали тестов.

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

На выходных вот прошел контест от Telegram по поиску багов в их контракте для покупки красивых имен (я даже что-то выиграл). И несмотря на то, что разработчики Telegram явно имеют опыт написания надежного кода, какие-то баги в контракте все равно нашли.

А еще иногда кажется, что когда дизайнили TON, никто не пытался минимизировать шанс того, что в смарт-контрактах эти баги будут.

Например, в TON есть особые bounced сообщения, которые большинство контрактов хотят просто игнорировать. Но нужно сделать это в явном виде и легко забыть написать код, который будет это делать. Почему нельзя было сделать поведение по умолчанию другим? Или заставить разработчиков писать два обработчика сообщений?

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

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

Если вы дизайните какой-то API, и хотите сделать какое-то неочевидное/ломающее поведение по умолчанию, лучше вместо этого заставьте пользователя явно сделать выбор самому.
14👍2



tgoop.com/bminaiev_blog/21
Create:
Last Update:

Каждый раз, когда взаимодействую с миром блокчейна, меня поражает смелость людей, которые пишут для них смарт-контракты. Если в контракте есть хотя бы несколько сотен строк, то почти наверняка в нем будут баги. Скорее всего какие-то не очень важные, которые вряд ли приведут к потере всех денег. Но что если там тысяча строк? А если несколько тысяч? Чисто статистически там будут баги, сколько бы вы не написали тестов.

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

На выходных вот прошел контест от Telegram по поиску багов в их контракте для покупки красивых имен (я даже что-то выиграл). И несмотря на то, что разработчики Telegram явно имеют опыт написания надежного кода, какие-то баги в контракте все равно нашли.

А еще иногда кажется, что когда дизайнили TON, никто не пытался минимизировать шанс того, что в смарт-контрактах эти баги будут.

Например, в TON есть особые bounced сообщения, которые большинство контрактов хотят просто игнорировать. Но нужно сделать это в явном виде и легко забыть написать код, который будет это делать. Почему нельзя было сделать поведение по умолчанию другим? Или заставить разработчиков писать два обработчика сообщений?

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

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

Если вы дизайните какой-то API, и хотите сделать какое-то неочевидное/ломающее поведение по умолчанию, лучше вместо этого заставьте пользователя явно сделать выбор самому.

BY Боря программирует


Share with your friend now:
tgoop.com/bminaiev_blog/21

View MORE
Open in Telegram


Telegram News

Date: |

Ng Man-ho, a 27-year-old computer technician, was convicted last month of seven counts of incitement charges after he made use of the 100,000-member Chinese-language channel that he runs and manages to post "seditious messages," which had been shut down since August 2020. Informative It’s yet another bloodbath on Satoshi Street. As of press time, Bitcoin (BTC) and the broader cryptocurrency market have corrected another 10 percent amid a massive sell-off. Ethereum (EHT) is down a staggering 15 percent moving close to $1,000, down more than 42 percent on the weekly chart. The Channel name and bio must be no more than 255 characters long Your posting frequency depends on the topic of your channel. If you have a news channel, it’s OK to publish new content every day (or even every hour). For other industries, stick with 2-3 large posts a week.
from us


Telegram Боря программирует
FROM American