Я встречал на многих курсах и обучениях, что эти темы дают чуть ли не в начале всего. Типа: "Посмотрите, как работает EVM, что использует и это все может быть в контракте". Я был слегка не согласен с этим и на своем курсе решил подождать до 4 модуля с этими темами, когда ученики уже освоят обычный Solidity, получат навыки написания контрактов и будут готовы воспринимать более сложную информацию.
Признаться честно, мне и сейчас порой сложно работать с низкоуровневым языком, а аудировать его сложнее. Для меня эти операции все еще вызывают желание закрыть окно редактора кода и уйти из web3...
Именно по этой причине на 4 модуле будет второй преподаватель @elawbek, который прекрасно понимает все детали работы storage, memory, calldata, opcodes и может с нуля писать сложные функции.
Например, в одной из библиотек, что он лично писал, есть такая функция:
function pow(uint256 a, uint256 b) pure returns (uint256 result) {
/// @solidity memory-safe-assembly
assembly {
switch b
case 0x00 {
result := 0x01
}
case 0x01 {
result := a
}
default {
switch a
case 0x00 {
// do nothing, result already zero
}
case 0x01 {
result := 0x01
}
case 0x02 {
if gt(b, 0xff) {
mstore(0x00, 0x35278d12)
revert(0x1c, 0x04)
}
result := shl(b, 0x01)
}
default {
switch or(
and(lt(a, 0x0b), lt(b, 0x4e)),
and(lt(a, 0x133), lt(b, 0x20))
)
case 0x01 {
result := exp(a, b)
}
default {
let maxUint256 := not(0x00)
let helper := 0x01
for {
let one := helper
} one {
} {
if gt(a, div(maxUint256, a)) {
mstore(0x00, 0x35278d12)
revert(0x1c, 0x04)
}
switch and(b, one)
case 0x00 {
b := shr(one, b)
}
case 0x01 {
helper := mul(a, helper)
b := shr(one, b)
}
a := mul(a, a)
if gt(b, one) {
continue
}
break
}
if gt(helper, div(maxUint256, a)) {
mstore(0x00, 0x35278d12)
revert(0x1c, 0x04)
}
result := mul(helper, a)
}
}
}
}
}
Она вызовет "взрыв мозга" даже у бывалого разработчика.
Да, для такого уровня придется потратить немалое количество часов практики с assembly, а на курсе мы научим вас основам и вы сможете сами начать разбираться в этих самых опкодах и читать более простые функции.
Это будет еще один крутой месяц обучения!
До старта продаж уже совсем немного времени!
#курс