Как узнать код солидности для контрактного адреса

Мне нужно узнать код публичного контракта, т.е. код солидности для контрактного адреса.

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

Мне нужно узнать сигнатуры методов, чтобы я мог создавать темы.

Ответы (1)

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

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

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

Для этого нет общего решения, потому что код солидности не публикуется в блокчейне. В блокчейне публикуется только полученный байт-код. Существуют различные обозреватели блоков, такие как ether.camp , которые предлагают возможность загрузки кода Solidity. Они могут использовать код надежности, чтобы убедиться, что он действительно совпадает с байтовым кодом адреса.

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

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

разве нет согласия опубликовать его на github для аудита?
Собственно, сейчас «контракт» — это просто какая-то закодированная логика. Я думаю, что вначале значение было более ограничено обычным значением «контракта» — т. е. соглашения между двумя сторонами, что подразумевает, что обе стороны видели, что такое соглашение, и подписали его. В текущем смысле закодированной логики «контракт» на самом деле не является контрактом, если разработчик не раскрыл исходный код. Если только одна сторона знает о содержании, это не договор в прямом смысле этого слова.