Развернутые контракты без кода Solidity [закрыто]

Я просмотрел множество контрактов на etherscan и заметил, что во многих из них нет опубликованного кода Solidity. На мой взгляд, нет смысла использовать/публиковать контракт без кода Solidity, это ломает всю концепцию смарт-контрактов. Если кто-то не может проверить код смарт-контракта Solidity, он взаимодействует с ним, какой тогда вообще смысл использовать Ethereum? Считаете ли вы, что необходимо каким-то образом публиковать соответствующий код? Я знаю, что можно декомпилировать байт-код в ассемблерные команды, но он должен быть более прозрачным, верно? Я полагаю, что на etherscan.io опубликованный код солидности хранится не в блокчейне ethereum, а только в какой-то межлановой базе данных etherscan.io. Я знаю, что для хранения кода Solidity потребуется много места в блокчейне Эфириума....

Стандарты очень важны по этой причине, но также и по той причине, по которой многие люди испытывают отвращение к смарт-контрактам; они могут запутаться. Теоретически программист может пойти и изменить часть кода контракта, а пользователь об этом не узнает (при условии, что контракт можно изменить). Пользователям в первую очередь нужен стимул для взаимодействия с контрактом, а также установленное и надежное партнерство. Я надеюсь, что взаимодействующая сторона, по крайней мере, имеет доступ к аби. Затем эта сторона должна, как минимум, понимать каждое взаимодействие. Контрактный блокчейн звучит тяжело.

Ответы (4)

Ну... концептуально, как и в реальной жизни, вы не должны принимать или взаимодействовать с контрактом, который вы не можете прочитать.

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

Единственная цель смарт-контракта — убедиться, что каждое взаимодействие/транзакция с ним выполняется... а не проверять параметры, установленные в контракте.

Я согласен с @reyHaynes.

Кроме того, я бы возражал против идеи, что нет смысла, если нет исходного кода.

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

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

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

Надеюсь, поможет.

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

EVM — это машина, не зависящая от языка. Я могу писать код на Solidity, Serpent, LLL, чистом ассемблере и т.д. и все будет нормально работать. Требование исходного кода означает требование, чтобы все использовали не только один и тот же язык, но и одну и ту же версию компилятора, что очень затрудняет обновление языка высокого уровня.

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

Существует множество приложений смарт-контрактов, код которых определенно НЕ должен быть доступен для общественности (т. е. для тех, кто не связан с контрактом). Например, представьте себе контракт, на который вы можете отправить свои токены ERC20, и единственный способ вывести эти токены — ввести пароль, но это можно сделать с любого адреса. Таким образом, вам не придется беспокоиться о потере вашего закрытого ключа или чего-то еще, потому что ваши токены заблокированы в контракте. Хотели бы вы, чтобы код был общедоступным, чтобы хакеры могли попытаться использовать потенциальные уязвимости в коде для кражи ваших токенов? Нет необходимости отвечать на этот вопрос, поскольку он риторический, и я уверен, что вы поняли смысл этого ответа на ваш вопрос.

Сказав это, я считаю важным, чтобы смарт-контракты, в которых участвуют сообщества людей, такие как ICO, токены ERC20, приложения для азартных игр и игры, были обнародованы.

Если хакер действительно хочет украсть немного эфира из контракта, он может декомпилировать контракт, проанализировать его и все равно украсть ваши средства. Без кода Solidity это заняло бы больше времени, но все же это выполнимо. Нападение на него было бы лишь вопросом времени, это не какой-то защитный щит. Это похоже на использование http вместо https, но можно было бы зашифровать трафик, например, с помощью base64... Отсутствие публикации какого-либо кода Solidity с данным развернутым контрактом НЕ является каким-либо дополнительным защитным экраном, это просто делает этот контракт более длительным для нарушения...