SlideShare a Scribd company logo
Знакомство с Ethereum virtual machine
Знакомство с Ethereum Virtual
Machine
Сергей Лоншаков
Blockchain разработчик, Airalab
© 2016 Microsoft Corporation. All rights reserved.
Занимаюсь исследованиями/созданием:
- Bitcoin/Altcoin/криптовалютных проектов с 2011.
- Smart contract/Ethereum проектов с 2014.
- DAO (децентрализованных автономных организаций)
с 2015.
- Проектов в области децентрализованного интернета
вещей с использованием технологии Blockchain с осени
2015 года.
Цели
#msdevcon
Децентрализованный
компьютер Ethereum
Анатомия умного
контракта
Инструменты и
примеры DAO
Изучим внутреннее
содержание умного
контракта с точки зрения
EVM
Узнаем об основных
клиентах сети Ethereum и
примерах популярных
сценариев применения
умных контрактов
Разберемся в абстрактном
представлении Ethereum
Virtual Machine
#msdevcon
Децентрализованный
компьютер Ethereum
Определение Ethereum Virtual Machine
Абстрактно: часть протокола, которая фактически обрабатывает внутреннее состояние
хранилища и выполняет вычисления называется Ethereum Virtual Machine (сокр. EVM)
В СМИ: EVM можно рассматривать как децентрализованный компьютер, содержащий
миллионы объектов, называемые "аккаунты", которые имеют возможность поддерживать /
изменять внутреннюю базу данных, выполнять код и общаться друг с другом.
Среди разработчиков: Разработчики могут создавать особый вид приложений - DApp,
работающие на децентрализованном компьютере (EVM) с помощью дружественных языков
программирования смоделированных на основе существующих языков, таких как JavaScript
и Python ..
Знакомство с Ethereum virtual machine
Децентрализованный компьютер, О_о
• Код исполняется в 5 - 100 раз
медленнее, чем скомпилированный
для локального запуска.
• Стоимость использования
вычислений, памяти и хранилища
примерно на уровне 1950-х годов.
• Информация может быть изменена в
первые 60с после получения
информации от подключенных узлов.
EVM - это не очень хороший компьютер,
он медленный и очень очень дорогой.
Dr. Gavin Wood, devcon1, 2015 год
Децентрализованный компьютер, Yep
• Это действительно единый мировой
компьютер для всей планеты и
навсегда.
• Не может быть остановлен и не
зависит от государств и корпораций в
работе.
• EVM - вездесущий, доступный
повсюду, где есть интернет. Можно найти на Youtube по запросу:
DEVCON1: Ethereum for Dummies - Dr.
Gavin Wood
Знакомство с Ethereum virtual machine
Ethereum Virtual Machine и Тьюринг
полнота
• Формально EVM может выполнить любое вычисление,
которое возможно выполнить, включая бесконечные циклы.
• Поддержка Тьюринг полных языков программирования
Solidity (from Javascript), Serpent (from Python), LLL (from Lisp)
Есть два типа аккаунтов в Ethereum:
Аккаунт пользователя (Externally owned account сокр. EOAs): учетная запись
контролируемая закрытым ключом, и если у вас есть закрытый ключ,
связанный с EOA у вас есть возможность отправлять эфиры и сообщения от
EOA.
Контракт: учетная запись, которая имеет свой собственный код, и
управляемая с помощью кода.
Ethereum Virtual Machine и умные
контракты
Анатомия умного контракта: bytecode
• Контракты живут в Ethereum Blockchain в бинарном формате (EVM
bytecode).
• Контракты, как правило, создаются на языке высокого уровня (Solidity),
компилируются в машинно-независимый код низкого уровня
(bytecode) из исходного кода.
• Bytecode загружается в Ethereum Blockchain с помощью отправки
транзакции специального вида “Создание контракта” в сеть обычным
клиентом сети.
Анатомия умного контракта: abi
• Abi - Application Binary Interface – Бинарный интерфейс приложения.
• Abi контракта не хранится в Blockchain.
• Abi контракта генерируется при компиляции контракта и может быть
передано в готовой форме пользователю или “зашито” в коде DApp.
Анатомия умного контракта: gas
• Gas - это метрика для мирового компьютера Ethereum (EVM).
• Чем больше вычислений и использования хранилища, тем больше
требуется газа.
• Gas не равно Fee. Fee = Amount of gas * gasPrice
Анатомия умного контракта: gas
• Каждая операция в EVM требует определенное количество газа.
• В любой момент времени известен gasLimit в сети.
• Если транзакция не помещается в gasLimit (Out of Gas), она не будет
выполнена, но fee будет снято с отправителя.
• Майнер, нашедший блок может изменить gasLimit +/- 0.0976 % для
следующего блока.
contract = eth.compile.solidity(source).test
{ code: '605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063
c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056',
info: {
language: 'Solidity',
languageVersion: '0',
compilerVersion: '0.9.13',
abiDefinition: [{
constant: false,
inputs: [{
name: 'a',
type: 'uint256'
} ],
name: 'multiply',
outputs: [{
name: 'd',
type: 'uint256'
} ],
type: 'function' } ],
userDoc: {
methods: {
}
},
developerDoc: {
methods: {
}
},
source: 'contract test { function multiply(uint a) returns(uint d) { return a * 7; } }'
}
}
#msdevcon
Инструменты для работы с
Ethereum Blockchain
Geth
• Geth это интерфейс командной строки для
запуска полного узла Ethereum Blockchain.
• Реализован на языке Go.
• Является основным результатом работы
Frontier Release.
• Выпущено 106 релизов начиная с 8
февраля 2014 года.
/ethereum/go-ethereum
Geth: interfaces & API
• Javascript Console.
• web3 JavaScript Dapp API
• JSON RPC API
• JSON-RPC server.
• Command line options.
/ethereum/go-ethereum
contract = eth.compile.solidity(source).test
{ code: '605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063
c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056',
info: {
language: 'Solidity',
languageVersion: '0',
compilerVersion: '0.9.13',
abiDefinition: [{
constant: false,
inputs: [{
name: 'a',
type: 'uint256'
} ],
name: 'multiply',
outputs: [{
name: 'd',
type: 'uint256'
} ],
type: 'function' } ],
userDoc: {
methods: {
}
},
developerDoc: {
methods: {
}
},
source: 'contract test { function multiply(uint a) returns(uint d) { return a * 7; } }'
}
}
(1) primaryAddress = eth.accounts[0];
(2) MyContract = eth.contract(abi);
(3) contact = MyContract.new(arg1, arg2, ...,{from: primaryAddress, data: evmCode});
(4) MyContract.new([arg1, arg2, ...,]{from: primaryAccount, data: evmCode},
function(err, contract) { if (!err && contract.address) console.log(contract.address); });
Отправляем контракт в сеть
Parity
• Parity это интерфейс командной строки для
запуска полного узла Ethereum Blockchain.
• Реализован на языке Rust.
• Является разработкой команды Ethcore,
Гевина Вуда.
• Выпущено 35 релизов начиная с 8 февраля
2016 года.
/ethcore/parity
Parity: interfaces & API
• Parity имеет режим совместимости с geth.
Parity --geth
• JSON RPC API
• parity JavaScript Dapp API (+web3)
• web3 JavaScript Dapp API
/ethereum/go-ethereum
Ethereumj
• ethereumj - Java implementation of the
Ethereum protocol.
• The Java library that can be embedded in any
Java project
• Является разработкой команды
Hack.ether.camp.
• Выпущено 25 релизов начиная с 15
сентября 2014 года.
/ethereum/ethereumj
Ethereum Wallet & Mist
• Использует geth как протокол общения с
сетью Ethereum.
• The Mist - это браузер для запуска DApp,
работающих с web3 JavaScript Dapp API
• Ранние релизы.
• Платформа написания: Meteor + Electron.
/ethereum/mist
MetaMask
• Плагин для браузера Google Chrome,
позволяющий запускать DApp без полной
ноды на клиенте.
• Общается с полной нодой через JSON RPC
API.
• Ранние релизы.
• Написан на Javascript
/MetaMask/metamask-plugin
#msdevcon
Примеры DAO
Умный кошелёк, multisig
1. Полная свобода в
проектировании кошелька .
2. Автономность2 = автономная
ценность на счету автономного
кода.
3. Банк?
Токены
contract MyToken {
/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;
}
Описание стандарта ERC20:
https://github.com/ethereum/EIPs/issues/20
Управление взаимоотношениями
1. Конгресс / Совет директоров /Демократия
2. Escrow / Аккредитив
3. p2p + Страхование / Кредитование / Финансирование
Управление взаимоотношениями
Alice и Bob заключают пари
на 100 GavCoin с триггером
на основе данных о
температуре в Москве.
Если температура в Москве
не будет выше 35 градусов в
течении года, то Bob
получит 100 GavCoin, иначе
их получит Alice.
Первая среда для прямых экономических
взаимоотношений человек – робот, робот
- робот
Q&A
#msdevcon
Знакомство с Ethereum Virtual
Machine
Сергей Лоншаков, sergeylonshakov@gmail.com

More Related Content

PDF
Погружение в Ethereum
Sergey Lonshakov
 
PDF
Экскурс по блокчейн технологии, Сколково, Открытые инновации 2016
Sergey Lonshakov
 
PPTX
Cloud Computing
ketan shete
 
PPTX
Performance Demystified for SQL Server on Azure Virtual Machines
Amit Banerjee
 
PPT
Virtual Machine Performance
Qian Lin
 
POTX
Splunking the JVM (Java Virtual Machine)
Damien Dallimore
 
PDF
The Real Thing: Java Virtual Machine
Frontech
 
PPTX
Java virtual machine
Nikhil Sharma
 
Погружение в Ethereum
Sergey Lonshakov
 
Экскурс по блокчейн технологии, Сколково, Открытые инновации 2016
Sergey Lonshakov
 
Cloud Computing
ketan shete
 
Performance Demystified for SQL Server on Azure Virtual Machines
Amit Banerjee
 
Virtual Machine Performance
Qian Lin
 
Splunking the JVM (Java Virtual Machine)
Damien Dallimore
 
The Real Thing: Java Virtual Machine
Frontech
 
Java virtual machine
Nikhil Sharma
 

Viewers also liked (15)

PDF
Масштабируемость блокчейн-систем: проблемы и решения
Alex Chepurnoy
 
PPTX
Virtual machines and their architecture
Mrinmoy Dalal
 
PDF
Ethereum @ descon 2016
Predrag Radović
 
PDF
Etherem ~ agvm
gha sshee
 
ODP
Dapps for Web Developers Aberdeen Techmeetup
James Littlejohn
 
PDF
日本のIT市場のトピックス
Hiroyasu NOHATA
 
ODP
Introduction to Idea
James Littlejohn
 
PPTX
Solidity intro
Angello Pozo
 
PPTX
Vision for a health blockchain
James Littlejohn
 
PDF
"Performance Analysis of In-Network Caching in Content-Centric Advanced Meter...
Khaled Ben Driss
 
PDF
Etherisc Versicherung neu erfinden
Stephan Karpischek
 
PPTX
The Ethereum ÐApp IDE: Mix
gavofyork
 
PPTX
Learning Solidity
Arnold Pham
 
PDF
Ingredients for creating dapps
Stefaan Ponnet
 
PPTX
Introduction to Ethereum
Arnold Pham
 
Масштабируемость блокчейн-систем: проблемы и решения
Alex Chepurnoy
 
Virtual machines and their architecture
Mrinmoy Dalal
 
Ethereum @ descon 2016
Predrag Radović
 
Etherem ~ agvm
gha sshee
 
Dapps for Web Developers Aberdeen Techmeetup
James Littlejohn
 
日本のIT市場のトピックス
Hiroyasu NOHATA
 
Introduction to Idea
James Littlejohn
 
Solidity intro
Angello Pozo
 
Vision for a health blockchain
James Littlejohn
 
"Performance Analysis of In-Network Caching in Content-Centric Advanced Meter...
Khaled Ben Driss
 
Etherisc Versicherung neu erfinden
Stephan Karpischek
 
The Ethereum ÐApp IDE: Mix
gavofyork
 
Learning Solidity
Arnold Pham
 
Ingredients for creating dapps
Stefaan Ponnet
 
Introduction to Ethereum
Arnold Pham
 
Ad

Similar to Знакомство с Ethereum virtual machine (7)

PDF
Введение в Bitcoin и Ethereum
Sergey Lonshakov
 
PPTX
04
malvvv
 
PDF
Пользователи Блокчейн. Спикер: Вадим Маковский
Cyber Fund
 
PPTX
Что нужно знать о JavaScript при разработке Smart Contracts
Andrew Mikhailov
 
PDF
Ликбез • Блокчейн (Level 1)
Blockchain School
 
PPTX
AERGO
NikaVasylieva
 
PPTX
My presentation AERGO
NataliiaSushenko
 
Введение в Bitcoin и Ethereum
Sergey Lonshakov
 
04
malvvv
 
Пользователи Блокчейн. Спикер: Вадим Маковский
Cyber Fund
 
Что нужно знать о JavaScript при разработке Smart Contracts
Andrew Mikhailov
 
Ликбез • Блокчейн (Level 1)
Blockchain School
 
My presentation AERGO
NataliiaSushenko
 
Ad

More from Sergey Lonshakov (16)

PDF
Публично доступные блокчейн сети для цифровых паспортов на основе IoTданных
Sergey Lonshakov
 
PDF
Devcon5 robotics under ethereum computer control
Sergey Lonshakov
 
PDF
Robotics in Polkadot, Sub0 Berlin
Sergey Lonshakov
 
PDF
ERF 2019 blockchain in robotic applications
Sergey Lonshakov
 
PDF
Economy of-robots-brussels-oct-18
Sergey Lonshakov
 
PDF
Ethereum Devcon 3
Sergey Lonshakov
 
PDF
Brussels: cryptocurrency, smart contracts and robotics
Sergey Lonshakov
 
PDF
Who will be gatekeeper from human economy to economy of robots?
Sergey Lonshakov
 
PDF
How works the global robot economics
Sergey Lonshakov
 
PDF
Robot economics protocol by Airalab short presentation
Sergey Lonshakov
 
PDF
Экономика роботов, расширенная презентация
Sergey Lonshakov
 
PDF
Экономика роботов, часть 1
Sergey Lonshakov
 
PDF
Экономика роботов и индустрия 4.0
Sergey Lonshakov
 
PDF
Взаимодействие человека и робота как двух автономных экономических агентов
Sergey Lonshakov
 
PDF
Введение в децентрализованный интернет вещей
Sergey Lonshakov
 
PPTX
Autonomous technologies for global commercial and civil uav vendors
Sergey Lonshakov
 
Публично доступные блокчейн сети для цифровых паспортов на основе IoTданных
Sergey Lonshakov
 
Devcon5 robotics under ethereum computer control
Sergey Lonshakov
 
Robotics in Polkadot, Sub0 Berlin
Sergey Lonshakov
 
ERF 2019 blockchain in robotic applications
Sergey Lonshakov
 
Economy of-robots-brussels-oct-18
Sergey Lonshakov
 
Ethereum Devcon 3
Sergey Lonshakov
 
Brussels: cryptocurrency, smart contracts and robotics
Sergey Lonshakov
 
Who will be gatekeeper from human economy to economy of robots?
Sergey Lonshakov
 
How works the global robot economics
Sergey Lonshakov
 
Robot economics protocol by Airalab short presentation
Sergey Lonshakov
 
Экономика роботов, расширенная презентация
Sergey Lonshakov
 
Экономика роботов, часть 1
Sergey Lonshakov
 
Экономика роботов и индустрия 4.0
Sergey Lonshakov
 
Взаимодействие человека и робота как двух автономных экономических агентов
Sergey Lonshakov
 
Введение в децентрализованный интернет вещей
Sergey Lonshakov
 
Autonomous technologies for global commercial and civil uav vendors
Sergey Lonshakov
 

Знакомство с Ethereum virtual machine

  • 2. Знакомство с Ethereum Virtual Machine Сергей Лоншаков Blockchain разработчик, Airalab
  • 3. © 2016 Microsoft Corporation. All rights reserved. Занимаюсь исследованиями/созданием: - Bitcoin/Altcoin/криптовалютных проектов с 2011. - Smart contract/Ethereum проектов с 2014. - DAO (децентрализованных автономных организаций) с 2015. - Проектов в области децентрализованного интернета вещей с использованием технологии Blockchain с осени 2015 года.
  • 4. Цели #msdevcon Децентрализованный компьютер Ethereum Анатомия умного контракта Инструменты и примеры DAO Изучим внутреннее содержание умного контракта с точки зрения EVM Узнаем об основных клиентах сети Ethereum и примерах популярных сценариев применения умных контрактов Разберемся в абстрактном представлении Ethereum Virtual Machine
  • 6. Определение Ethereum Virtual Machine Абстрактно: часть протокола, которая фактически обрабатывает внутреннее состояние хранилища и выполняет вычисления называется Ethereum Virtual Machine (сокр. EVM) В СМИ: EVM можно рассматривать как децентрализованный компьютер, содержащий миллионы объектов, называемые "аккаунты", которые имеют возможность поддерживать / изменять внутреннюю базу данных, выполнять код и общаться друг с другом. Среди разработчиков: Разработчики могут создавать особый вид приложений - DApp, работающие на децентрализованном компьютере (EVM) с помощью дружественных языков программирования смоделированных на основе существующих языков, таких как JavaScript и Python ..
  • 8. Децентрализованный компьютер, О_о • Код исполняется в 5 - 100 раз медленнее, чем скомпилированный для локального запуска. • Стоимость использования вычислений, памяти и хранилища примерно на уровне 1950-х годов. • Информация может быть изменена в первые 60с после получения информации от подключенных узлов. EVM - это не очень хороший компьютер, он медленный и очень очень дорогой. Dr. Gavin Wood, devcon1, 2015 год
  • 9. Децентрализованный компьютер, Yep • Это действительно единый мировой компьютер для всей планеты и навсегда. • Не может быть остановлен и не зависит от государств и корпораций в работе. • EVM - вездесущий, доступный повсюду, где есть интернет. Можно найти на Youtube по запросу: DEVCON1: Ethereum for Dummies - Dr. Gavin Wood
  • 11. Ethereum Virtual Machine и Тьюринг полнота • Формально EVM может выполнить любое вычисление, которое возможно выполнить, включая бесконечные циклы. • Поддержка Тьюринг полных языков программирования Solidity (from Javascript), Serpent (from Python), LLL (from Lisp)
  • 12. Есть два типа аккаунтов в Ethereum: Аккаунт пользователя (Externally owned account сокр. EOAs): учетная запись контролируемая закрытым ключом, и если у вас есть закрытый ключ, связанный с EOA у вас есть возможность отправлять эфиры и сообщения от EOA. Контракт: учетная запись, которая имеет свой собственный код, и управляемая с помощью кода. Ethereum Virtual Machine и умные контракты
  • 13. Анатомия умного контракта: bytecode • Контракты живут в Ethereum Blockchain в бинарном формате (EVM bytecode). • Контракты, как правило, создаются на языке высокого уровня (Solidity), компилируются в машинно-независимый код низкого уровня (bytecode) из исходного кода. • Bytecode загружается в Ethereum Blockchain с помощью отправки транзакции специального вида “Создание контракта” в сеть обычным клиентом сети.
  • 14. Анатомия умного контракта: abi • Abi - Application Binary Interface – Бинарный интерфейс приложения. • Abi контракта не хранится в Blockchain. • Abi контракта генерируется при компиляции контракта и может быть передано в готовой форме пользователю или “зашито” в коде DApp.
  • 15. Анатомия умного контракта: gas • Gas - это метрика для мирового компьютера Ethereum (EVM). • Чем больше вычислений и использования хранилища, тем больше требуется газа. • Gas не равно Fee. Fee = Amount of gas * gasPrice
  • 16. Анатомия умного контракта: gas • Каждая операция в EVM требует определенное количество газа. • В любой момент времени известен gasLimit в сети. • Если транзакция не помещается в gasLimit (Out of Gas), она не будет выполнена, но fee будет снято с отправителя. • Майнер, нашедший блок может изменить gasLimit +/- 0.0976 % для следующего блока.
  • 17. contract = eth.compile.solidity(source).test { code: '605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063 c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056', info: { language: 'Solidity', languageVersion: '0', compilerVersion: '0.9.13', abiDefinition: [{ constant: false, inputs: [{ name: 'a', type: 'uint256' } ], name: 'multiply', outputs: [{ name: 'd', type: 'uint256' } ], type: 'function' } ], userDoc: { methods: { } }, developerDoc: { methods: { } }, source: 'contract test { function multiply(uint a) returns(uint d) { return a * 7; } }' } }
  • 19. Geth • Geth это интерфейс командной строки для запуска полного узла Ethereum Blockchain. • Реализован на языке Go. • Является основным результатом работы Frontier Release. • Выпущено 106 релизов начиная с 8 февраля 2014 года. /ethereum/go-ethereum
  • 20. Geth: interfaces & API • Javascript Console. • web3 JavaScript Dapp API • JSON RPC API • JSON-RPC server. • Command line options. /ethereum/go-ethereum
  • 21. contract = eth.compile.solidity(source).test { code: '605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063 c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056', info: { language: 'Solidity', languageVersion: '0', compilerVersion: '0.9.13', abiDefinition: [{ constant: false, inputs: [{ name: 'a', type: 'uint256' } ], name: 'multiply', outputs: [{ name: 'd', type: 'uint256' } ], type: 'function' } ], userDoc: { methods: { } }, developerDoc: { methods: { } }, source: 'contract test { function multiply(uint a) returns(uint d) { return a * 7; } }' } }
  • 22. (1) primaryAddress = eth.accounts[0]; (2) MyContract = eth.contract(abi); (3) contact = MyContract.new(arg1, arg2, ...,{from: primaryAddress, data: evmCode}); (4) MyContract.new([arg1, arg2, ...,]{from: primaryAccount, data: evmCode}, function(err, contract) { if (!err && contract.address) console.log(contract.address); }); Отправляем контракт в сеть
  • 23. Parity • Parity это интерфейс командной строки для запуска полного узла Ethereum Blockchain. • Реализован на языке Rust. • Является разработкой команды Ethcore, Гевина Вуда. • Выпущено 35 релизов начиная с 8 февраля 2016 года. /ethcore/parity
  • 24. Parity: interfaces & API • Parity имеет режим совместимости с geth. Parity --geth • JSON RPC API • parity JavaScript Dapp API (+web3) • web3 JavaScript Dapp API /ethereum/go-ethereum
  • 25. Ethereumj • ethereumj - Java implementation of the Ethereum protocol. • The Java library that can be embedded in any Java project • Является разработкой команды Hack.ether.camp. • Выпущено 25 релизов начиная с 15 сентября 2014 года. /ethereum/ethereumj
  • 26. Ethereum Wallet & Mist • Использует geth как протокол общения с сетью Ethereum. • The Mist - это браузер для запуска DApp, работающих с web3 JavaScript Dapp API • Ранние релизы. • Платформа написания: Meteor + Electron. /ethereum/mist
  • 27. MetaMask • Плагин для браузера Google Chrome, позволяющий запускать DApp без полной ноды на клиенте. • Общается с полной нодой через JSON RPC API. • Ранние релизы. • Написан на Javascript /MetaMask/metamask-plugin
  • 29. Умный кошелёк, multisig 1. Полная свобода в проектировании кошелька . 2. Автономность2 = автономная ценность на счету автономного кода. 3. Банк?
  • 30. Токены contract MyToken { /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; } Описание стандарта ERC20: https://github.com/ethereum/EIPs/issues/20
  • 31. Управление взаимоотношениями 1. Конгресс / Совет директоров /Демократия 2. Escrow / Аккредитив 3. p2p + Страхование / Кредитование / Финансирование
  • 32. Управление взаимоотношениями Alice и Bob заключают пари на 100 GavCoin с триггером на основе данных о температуре в Москве. Если температура в Москве не будет выше 35 градусов в течении года, то Bob получит 100 GavCoin, иначе их получит Alice.
  • 33. Первая среда для прямых экономических взаимоотношений человек – робот, робот - робот
  • 34. Q&A #msdevcon Знакомство с Ethereum Virtual Machine Сергей Лоншаков, [email protected]