
通关条件
部署一个只有 10 个 opcode 的合约,该合约在调用后返回 42
题目合约
pragma solidity ^0.5.0;
contract MagicNum {
address public solver;
constructor() public {}
function setSolver(address _solver) public {
solver = _solver;
}
/*
____________/\\\_______/\\\\\\\\\_____
__________/\\\\\_____/\\\///\\\___
________/\\\/\\\____\///______\//\\\__
______/\\\/\/\\\______________/\\\/___
____/\\\/__\/\\\___________/\\\//_____
__/\\\\\\\\\\\\\\\\_____/\\\//________
_\///\\\//____/\\\/___________
___________\/\\\_____/\\\\\\\\\\\\\\\_
___________\///_____\///__
*/
}
解题过程
创建合约的交易的 bytecode 主要由初始化代码和运行时代码两部分组成。初始化代码用于创建合约,并存储运行时代码;运行时代码则是合约的实际逻辑。
首先考虑运行时代码。我们需要将 42(0x2A)存放到内存中,再返回给调用者。第一个步骤需要使用 MSTORE(0x52,用于将一个 (u)int256 写入内存,0x52),第二个步骤需要使用

本文详细介绍了如何通过编写包含10个opcode的智能合约来完成一项挑战,该合约在执行后返回42。解题过程涉及MSTORE和RETURN指令的使用,以及合约部署时的CODECOPY和RETURN指令。最终,将初始化和运行时代码组合,形成满足条件的合约bytecode。
最低0.47元/天 解锁文章
1397

被折叠的 条评论
为什么被折叠?



