mirror of
https://github.com/autistic-symposium/web3-starter-sol.git
synced 2025-09-25 18:51:08 -04:00
58 lines
1.1 KiB
Solidity
58 lines
1.1 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.17;
|
|
|
|
// simple example of contract written in bytecode
|
|
|
|
contract Factory {
|
|
event Log(address addr);
|
|
|
|
// Deploys a contract that always returns 42
|
|
function deploy() external {
|
|
bytes memory bytecode = hex"69602a60005260206000f3600052600a6016f3";
|
|
address addr;
|
|
assembly {
|
|
// create(value, offset, size)
|
|
addr := create(0, add(bytecode, 0x20), 0x13)
|
|
}
|
|
require(addr != address(0));
|
|
|
|
emit Log(addr);
|
|
}
|
|
}
|
|
|
|
interface IContract {
|
|
function getMeaningOfLife() external view returns (uint);
|
|
}
|
|
|
|
// https://www.evm.codes/playground
|
|
/*
|
|
Run time code - return 42
|
|
602a60005260206000f3
|
|
|
|
// Store 42 to memory
|
|
mstore(p, v) - store v at memory p to p + 32
|
|
|
|
PUSH1 0x2a
|
|
PUSH1 0
|
|
MSTORE
|
|
|
|
// Return 32 bytes from memory
|
|
return(p, s) - end execution and return data from memory p to p + s
|
|
|
|
PUSH1 0x20
|
|
PUSH1 0
|
|
RETURN
|
|
|
|
Creation code - return runtime code
|
|
69602a60005260206000f3600052600a6016f3
|
|
|
|
// Store run time code to memory
|
|
PUSH10 0X602a60005260206000f3
|
|
PUSH1 0
|
|
MSTORE
|
|
|
|
// Return 10 bytes from memory starting at offset 22
|
|
PUSH1 0x0a
|
|
PUSH1 0x16
|
|
RETURN
|
|
*/
|