This is such an amazing talk. Very much appreciate the amount of work that has gone into the slides and the content. I have a much deeper understanding of the EVM thanks to these 1.5 hours. Thank you Peter, David and team.
@leeren_2 жыл бұрын
Been trying to dig KZbin for ages for a more in-depth talk on the mechanics of the EVM. Just wow - this is incredible. Thank you so much. Hope to help on the education side soon :)
@fode-diop Жыл бұрын
This presentation is straight 🔥 Good stuff!
@ludwigthouvenin20122 жыл бұрын
This is a goldmine, thank you for this amazing presentation.
@frankzheng79254 жыл бұрын
An amazing talk about EVM!
@TheDFIPodcast Жыл бұрын
So much win! This is demystifying the deep CS underbelly of Ethereum. Thank you for creating this content!
@gaofan28562 жыл бұрын
this channel is a hidden gem
@MartinMarchev Жыл бұрын
Amazing talk! Congrats and the great content and its delivery. Thanks for sharing it with us. 🙏🏻
@0xRoman-c2r Жыл бұрын
Awesome video! Thanks for the lecture, very interesting to learn about it
@humzakhan2882 жыл бұрын
This is an amazing presentation. The level of detail is top notch. Keep up the good work!
@xmlyyuan3 жыл бұрын
Very detailed videdo. Also good for knowing how VM works inside in general.
@zes72153 жыл бұрын
no such thing as interestx or etc or not
@AnonymousSkimaHarvey2 жыл бұрын
This is pure gold. Thank you so much ! (all i need to move on level 18 on Ethernaut)
@0xTyfn Жыл бұрын
Huge thanks for your hard work sir. I really appreciate it 🎉
@EngenhariadeSoftwareLuciana2 жыл бұрын
Impressive talk!!! Thank you for sharing.
@wpmeng28592 жыл бұрын
Really solidity deep study. Thanks.
@ashh30512 жыл бұрын
Really solid deep dive. Thanks.
@nickeast48537 ай бұрын
thanks for the detailed explanation !! =] really want to learn more from you ! may I ask a question ? @42:48, why does it have to revert if "CALLDATASIZE - 4" is less than 32 bytes ?
@estela31852 жыл бұрын
Amazing video, thank you. Cordiale.
@crypto_peng2 жыл бұрын
Definetely would like to have the new version but more visualized explanation for OP_Code again!! Still can't understand very well. Thank you sir!
@qazawatzirak25962 жыл бұрын
Nice explanation. At 20:10 we have the byteCode of runtime. The deploy transaction stores only Init Code fragment (i.e. Contructor). At 27:53 we are doing a code copy (from where it is). My question is, where is the Code ? From where the code is fed to EVM since the transaction does not include the byteCode of runtime ? Meaning, do we send the actual byteCode separately alongside the deploy transaction to a Node ? Also at 30:49, the code (runtime) is copied into the blockchain. Is it copied into the Merkle Praticia tree storage of that deploying account address ? Increasing the deployers nonce
@EthereumEngineeringGroup2 жыл бұрын
The deployment transaction's data includes the byte code of the init code and the run time Solidity code. That is, have a look at the output of solc --bin SomeContract.sol . Those bytes of data for a deploy transaction are treated as code. The codecopy copies the code that is after the init code from where code is executing to memory. A reference to that location in memory is then returned, indicating the code that should be deployed.
@lorenzocanocesconetto2577 Жыл бұрын
Great talk! Let me point out a small correction though, at 30:53 the second argument of return, i.e., stack[1], is the length of the data and not the ending address
@EthereumEngineeringGroup Жыл бұрын
Correct. At some point, I should re-do the talk with many small / minor corrections.
@abstractumx2 жыл бұрын
thanks for sharing!
@0xatharva9522 жыл бұрын
I am 2 years late.. yet learning soo much!
@0xcoder5422 жыл бұрын
Hi Peter, Thank you for contributing such a valuable video about the Ethereum EVM. I'm interested in the State and the Patricia Trie I would appreciate it if you could share with me the video that you mentioned in this video. Many thanks
@EthereumEngineeringGroup2 жыл бұрын
I think that is going to be one of the videos on Stateless. Have a look at the channel, look at the Videos tab, and then go to the video that was just before this one.
@MrCoreyTexas2 жыл бұрын
The slide at 57:27 was confusing to me, because I was looking for 0x14, which is what gets assigned to valAddress in the code. Then I realized that 0x05 is 0x14 shifted right 2 bits. So the solidity compiler internally shifts 0x14 right 2 bits, putting 0x05 in the code, then outputs a shift left by 98 bits. Why does it do this? Well, I guess if it had to store 0x100, it could shift that to the right 8 bits, and put 0x01 in the code. So its output would be 1 byte less. Talk about microoptimization! So it doesn't really need to do it for 0x14 but it does anyways to simplify the code of the compiler.
@MrCoreyTexas2 жыл бұрын
Which brings to mind the next question, why does it PUSH5 0x13000000000? Why doesn't it PUSH1 0x13 and SHL by 32 bits? The mind boggles.
@leeren_2 жыл бұрын
42:36 Isn't the revert condition specified by assembly revert if (CALLDATASIZE - 4) = CALLDATASIZE - 4 The ISZERO returns 1 if 0x20 >= CALLDATASIZE - 4, 1 if 0x20 < CALLDATASIZE - 4 So it reverts if CALLDATASIZE - 4
@crypto_peng2 жыл бұрын
Where can I find the community? Nice sharing thanks.
@EthereumEngineeringGroup2 жыл бұрын
Join the meet-up group: www.meetup.com/ethereum-engineering/
@miketruk7639 Жыл бұрын
@27:09 Storage[1] = 3 Stack[0] is location to write to stack[1] is the value to write but in my mind its like PUSH1 0x03 -> stack[0] = 03 PUSH1 0x01 -> stack[0] = 03, stack[1] = 01 SSTORE -> stack[0] is location (3) and stack[1] is value (1) what am i missing?
@EthereumEngineeringGroup Жыл бұрын
stack[0] is the top of the stack. Hence, PUSH1 3: stack[0] = 3, PUSH1 5: stack[0] = 5, stack[1] = 3, and then PUSH1 7: stack[0] = 7, stack[1] = 5, and stack[2] = 3
@Elyx03 жыл бұрын
Wonder if they ever got to coding the array index underflow
@SaurabhBhai-t8k Жыл бұрын
At 1:04 my dog also bark who is there in laptop Screen 😄
@Naz-yi9bs3 жыл бұрын
@18:11 it's mentioned that, val2 = 3; will set "val2" as a state variable. Is that also not the case with val1, it's declared but assigned, however, doesn't that still make it a state variable? Thank you for this amazing video.
@EthereumEngineeringGroup2 жыл бұрын
@naz val1 is also a state variable. It will have its default value, which for uint256 is 0. However, what I was meaning was that in the constructor, all initial values of state variables are set-up.
@carsonhalter3134 Жыл бұрын
@ 13:00 does anyone have the link to the video on Merkle Patricia Trie's?
@EthereumEngineeringGroup Жыл бұрын
kzbin.info/www/bejne/o3LTnXeDo7qWqpo
@davidz81102 жыл бұрын
This is really great talk! it helps me to get clear of the evm. BTW. could you help update the slide link, it is unavailable now. Thanks!
@EthereumEngineeringGroup2 жыл бұрын
Link updated.
@jayjelaso53546 ай бұрын
what happens to storage data that is persistent and then a revert happens, does it stay there? what about subsequent runs of the contract, does storage stay there for every run of the contract and does it use up the storage.
@jayjelaso53546 ай бұрын
I have a million questions that are simple questions but are not addressed in the documentation and I am trying to piece together the functionality of progrmming in solidity. Sorry to be a downer thanks for all you help and comprising this too low drill down about stack storage and memory and call data
@EthereumEngineeringGroup6 ай бұрын
If there is a revert, storage is reverted to. It is as if the transaction didn't happen (except for the gas charges)
@EthereumEngineeringGroup6 ай бұрын
Storage is persistent across transaction executions
@jayjelaso53546 ай бұрын
@@EthereumEngineeringGroup So previous slots used up are going to stay there and new transactions require new slot storage? thank you for your replies
@crypto_peng2 жыл бұрын
13:50 - Why State Root is 160 bits, and Account Storage Root is 256 bits numbers?
@EthereumEngineeringGroup2 жыл бұрын
Storage slots are in a 256 bit range. Account addresses are 160 bits.
@crypto_peng2 жыл бұрын
@@EthereumEngineeringGroup got it!
@0xsabir4 ай бұрын
what's the init code fragment ? 18:45
@EthereumEngineeringGroup4 ай бұрын
Constructor, initialisation, plus copy the runtime code to the a return address position so it can be installed.
@lzy-v51362 жыл бұрын
53:57 - where is 0x37?
@EthereumEngineeringGroup2 жыл бұрын
0x36 is a PUSH1 instruction. It pushes the next byte from code onto the stack. As such, the 0x3d value is what is as location 0x37.
@grigrob92 жыл бұрын
18:19 solc compile command
@ViceCoin Жыл бұрын
Any tools for AndroidOS?
@EthereumEngineeringGroup Жыл бұрын
Web3J is a Java library for interacting with Ethereum nodes.
@ViceCoin Жыл бұрын
@@EthereumEngineeringGroup All the insalls are CLI prompts (Windows). Any solidity editors for Android? I have a wireless keyboard.