Документация Solidity описывает расположение переменных состояния в хранилище.
• В чем разница между
string, bytes32, byte[], bytes? • Какой из них использовать и когда?
• Что происходит, когда приводим строку к байтам?
• Можно ли привести к
byte[]?• Сколько это стоит?
• Как
mappings хранится в EVM?• Как скомпилированный контракт выглядит для EVM?
EVM — это механизм базы данных. Чтобы понять, как работают смарт-контракты на любом языке EVM, необходимо понимать, как данные организуются, хранятся и ими манипулируют.
В серии статей разобраны простые контракты Solidity, чтобы понять, как они работают в качестве байткода EVM.
• Основы байткода EVM.
• Введение в ассемблерный код EVM.
• Как представлены различные типы (mapping, arrays).
• Что происходит при создании нового контракта.
• Что происходит при вызове метода.
• Как ABI объединяет разные языки EVM.
Таблица набора инструкций EVM будет полезным справочником.
Конечная цель — полностью понять скомпилированный контракт Solidity. Начнем с чтения базового байткода EVM.
Погружение в виртуальную машину Ethereum. Часть 1
https://blog.qtum.org/diving-into-the-ethereum-vm-6e8d5d2f3c30
Погружение в виртуальную машину Ethereum. Часть 2
Начнем изучать, как Solidity использует фрагменты по 32 байта для представления более сложных типов данных, таких как структуры и массивы. Мы также увидим, как можно оптимизировать хранилище и почему оптимизация может потерпеть неудачу.
https://medium.com/@hayeah/diving-into-the-ethereum-vm-part-2-storage-layout-bc5349cb11b7
Погружение в виртуальную машину Ethereum. Часть 3
Рассмотрим, как Solidity поддерживает более сложные структуры данных. Массивы и сопоставления (
mapping) на первый взгляд могут показаться знакомыми, но способ их реализации придает им радикально разные характеристики производительности.https://medium.com/@hayeah/diving-into-the-ethereum-vm-the-hidden-costs-of-arrays-28e119f04a9b
Погружение в виртуальную машину Ethereum. Часть 4
Как расшифровать метод
call смарт-контракта.В этой статье увидим, как Solidity и EVM позволяют «внешним программам» использовать метод
call контракта и вызывать изменение его состояния.https://medium.com/@hayeah/how-to-decipher-a-smart-contract-method-call-8ee980311603
Погружение в виртуальную машину Ethereum. Часть 5
Процесс создания смарт-контракта.
Байт-код EVM, который мы видели до сих пор, прост: это просто инструкции, которые EVM выполняет сверху вниз, никакой магии в рукаве. Процесс создания контракта более увлекателен, поскольку он стирает барьер между кодом и данными.
https://medium.com/@hayeah/diving-into-the-ethereum-vm-part-5-the-smart-contract-creation-process-cb7b6133b855
Погружение в виртуальную машину Ethereum. Часть 6
Как реализуются Solidity Events.
Понимая, как события реализуются с помощью инструкций EVM более низкого уровня и сколько они стоят, мы получим лучшее представление об эффективном использовании событий.
https://blog.qtum.org/how-solidity-events-are-implemented-diving-into-the-ethereum-vm-part-6-30e07b3037b9