Вот и обещанное видео с решением одной из задач Ethernaut, для которой мы разбирали ранее вопросы с calldata.
Саму задачу можно найти по ссылке:
https://ethernaut.openzeppelin.com/level/29
А тест для нее вот:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../src/Switch.sol";
import {Test, console} from "forge-std/Test.sol";
contract SwitchTest is Test {
Switch switchContract;
function setUp() public {
switchContract = new Switch();
}
function test_Switch() external {
bytes memory callData = hex"30c13ade0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000020606e1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000476227e1200000000000000000000000000000000000000000000000000000000";
(bool success, ) = address(switchContract).call(callData);
require (success, "Call failed!");
assertTrue(switchContract.switchOn());
}
}
Если вы хотели поэкспериментировать с передачей данных в виде calldata между контрактами, то это отличная возможность.
P.S. Буду рад комментариям и отзывам по видео. Все еще экспериментирую со стилем и созданием формата.
#calldata