209 похожих чатов

Как на уровне байткода регулируются pub ext int модификаторы? Как

например не позволить выполнить int ф-ю

9 ответов

9 просмотров

все же просто довольно… представим, что каждой ext функции ставится в соответствие некий идентификатор. Например, a() - 0x01, b() — 0x02, c() - 0x03. Тогда в скомпилированном байткоде будет вот такая конструкция в самом начале: desc = tx.data[0:1] if desc == 0x01: a() elif desc == 0x02: b() elif desc == 0x03: c() else: fallback()

ilya- Автор вопроса
Alexander Kolotov
все же просто довольно… представим, что каждой ext...

Эмм, про 4 байта я в курсе. Не замечал я что в байткоде матчинг такой есть. Проверю ещё раз.

ilya- Автор вопроса
Alexander Kolotov
все же просто довольно… представим, что каждой ext...

А можешь ткнуть на любой контракт в etherscan, где этот матч в байткоде. Прям подчеркнуть. Буду благодарен.

ilya
А можешь ткнуть на любой контракт в etherscan, где...

Вот контракт: https://kovan.etherscan.io/address/0x381DD3387B2AAa0178d035dDB6D3840AFC5Dbdac#code Вот его runtime-байткод: 6080604052348015600f57600080fd5b506004361060325760003560e01c806308112fe314603757806356f835fd14603f575b600080fd5b603d6045565b005b603d6070565b6040517f440a57bf0cad4531f0d64cfe9a30829810bbcd2b992d0ef6c9a6bd73bb65c5e590600090a1565b6040517fd217144c730a1ad05c23bd421e694cff562f313468e7486c268e493019a7829b90600090a156fea264697066735822122044b6379f61c5eb4ef7f6e3f3f2d0fb85c0a34dcabbf08c5f836d942fa32e8f8964736f6c63430008040033

Alexander Kolotov
screenshot Вот декомпилированный байткод:

получить его можно вот здесь: https://ethervm.io/decompile

ilya- Автор вопроса
Alexander Kolotov
Вот контракт: https://kovan.etherscan.io/address/0...

Спасибо, щас позже найду нужные опкоды. В начале как помню выделяется память.

ilya- Автор вопроса
Alexander Kolotov
screenshot Вот декомпилированный байткод:

Кстати хорошо что ты ответил. Я как раз не мог понять как диспач раьотает в байткоде. Т е весь байткод контракта с самого начала прогоняется через evm при каждом вызове?

ilya
Кстати хорошо что ты ответил. Я как раз не мог пон...

именно так. Считывается байткод из сторейджа, PC выставляется на нулевой байт байткода и поехали. И так каждую транзакцию, где получатель - наш контракт или каждый call/delegatecall/staticcall для нашего контракта.

Похожие вопросы

Обсуждают сегодня

Карта сайта