Я просмотрел множество контрактов на etherscan и заметил, что во многих из них нет опубликованного кода Solidity. На мой взгляд, нет смысла использовать/публиковать контракт без кода Solidity, это ломает всю концепцию смарт-контрактов. Если кто-то не может проверить код смарт-контракта Solidity, он взаимодействует с ним, какой тогда вообще смысл использовать Ethereum? Считаете ли вы, что необходимо каким-то образом публиковать соответствующий код? Я знаю, что можно декомпилировать байт-код в ассемблерные команды, но он должен быть более прозрачным, верно? Я полагаю, что на etherscan.io опубликованный код солидности хранится не в блокчейне ethereum, а только в какой-то межлановой базе данных etherscan.io. Я знаю, что для хранения кода Solidity потребуется много места в блокчейне Эфириума....
Ну... концептуально, как и в реальной жизни, вы не должны принимать или взаимодействовать с контрактом, который вы не можете прочитать.
При этом существует множество контрактов, которые не предназначены для прочтения широкой публикой. Например, если бы я хотел написать контракт конкретно между вами и мной, не должно быть никаких обязательств по публикации соответствующего кода для широкой публики. Я бы отправил вам код непосредственно для проверки, и вы могли бы использовать какой-либо инструмент проверки для проверки кода.
Единственная цель смарт-контракта — убедиться, что каждое взаимодействие/транзакция с ним выполняется... а не проверять параметры, установленные в контракте.
Я согласен с @reyHaynes.
Кроме того, я бы возражал против идеи, что нет смысла, если нет исходного кода.
Суровая реальность такова, что EVM будет запускать байт-код в соответствии со своей машинной логикой, представляя, как выглядит «правильно». Сам компилятор может быть источником ошибок. Независимо от того, откуда он взялся, байт-код имеет значение. Не все контракты предназначены для всех наблюдателей.
Правда, если кто-то хочет заслужить доверие других, то один из способов сделать это — опубликовать исходный код, чтобы нам было легче его понять.
Если нам не предназначено видеть и понимать, сокрытие источника неэффективно. Это просто доставляет неудобства решительному противнику.
Надеюсь, поможет.
В то время как другие ответы верны в том смысле, что в целом не обязательно публиковать исходный код для контракта, не предназначенного для использования широкой публикой, более фундаментальная причина, по которой нет требования уровня протокола для публикации исходного кода что для этого потребуется спецификация уровня протокола для языка высокого уровня.
EVM — это машина, не зависящая от языка. Я могу писать код на Solidity, Serpent, LLL, чистом ассемблере и т.д. и все будет нормально работать. Требование исходного кода означает требование, чтобы все использовали не только один и тот же язык, но и одну и ту же версию компилятора, что очень затрудняет обновление языка высокого уровня.
По сути, Solidity как язык меняется очень часто, EVM меняется очень редко, поэтому гораздо разумнее просто публиковать машинный код и позволять разработчику публиковать исходный код вне очереди.
Существует множество приложений смарт-контрактов, код которых определенно НЕ должен быть доступен для общественности (т. е. для тех, кто не связан с контрактом). Например, представьте себе контракт, на который вы можете отправить свои токены ERC20, и единственный способ вывести эти токены — ввести пароль, но это можно сделать с любого адреса. Таким образом, вам не придется беспокоиться о потере вашего закрытого ключа или чего-то еще, потому что ваши токены заблокированы в контракте. Хотели бы вы, чтобы код был общедоступным, чтобы хакеры могли попытаться использовать потенциальные уязвимости в коде для кражи ваших токенов? Нет необходимости отвечать на этот вопрос, поскольку он риторический, и я уверен, что вы поняли смысл этого ответа на ваш вопрос.
Сказав это, я считаю важным, чтобы смарт-контракты, в которых участвуют сообщества людей, такие как ICO, токены ERC20, приложения для азартных игр и игры, были обнародованы.
блокстритбой89