Skip to content

Instantly share code, notes, and snippets.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
/*
Pasting this code into evm.codes playground and stepping through will show that starting on instruction 1d, the
JUMPDEST of the target function (which is 36) is pushed onto the stack. Then there is a SHL(20) performed on it.
Then it's ORed with 00b4 so 36 becomes 36000000b4.
Then later in step 47, when myFunc() calls targetFunc(), it does a SHR(20) to convert 36000000b4 back to 36 which
it then uses for the JUMPDEST to targetFunc(). Nothing is ever done with the 000000b4 part. A copy of the full
@devtooligan
devtooligan / 0ERC20Main.huff
Created July 24, 2022 00:45
Huff -- Inheritance pattern for CONSTRUCTOR() / MAIN()
// This is the main file that will be compiled
/* Imports */
#include "./ERC20.huff"
#include "./utils/Ownable.huff"
#define macro CONSTRUCTOR() = takes (0) returns (0) {
OWNABLE_CONSTRUCTOR()
ERC20_CONSTRUCTOR()
}
@devtooligan
devtooligan / test.t.sol
Created August 23, 2022 02:08
Foundry Invariant test setup with inherited contracts
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
import "forge-std/Test.sol";
contract Pool {
uint256 public immutable var1;
uint256 public var2;
constructor(uint256 var1_) {
var1 = var1_;
@devtooligan
devtooligan / TestDeleteStructWDynamicArray.sol
Created October 11, 2022 17:44
Test if Solidity properly handles `delete` with a dynamic array inside a struct (inside a mapping)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "forge-std/Test.sol";
contract Test67 is Test {
struct S2 {
uint256 a2;
uint256 b2;
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "forge-std/Test.sol";
contract TestDeleteMappingInStruct is Test {
/// @param enabled Whether the token is enabled or not
/// @param balances Mapping of user address to balance
struct Token {
bool enabled;
@devtooligan
devtooligan / importVSCodeSettings.sh
Last active October 20, 2022 11:15
importVSCodeSettings
# This is a bash function that will copy a vscode settings.json file into the current directory and randomly select a color scheme.
# Step 1: Create a settting.json file somewhere which at least contains this section. Feel free to add your favorite settings to this.
{
"workbench.colorCustomizations": {
"titleBar.activeForeground": "FOREGROUND",
"titleBar.inactiveForeground": "FOREGROUND",
"titleBar.activeBackground": "BACKGROUND",
"titleBar.inactiveBackground": "BACKGROUND"
@devtooligan
devtooligan / OptimizedMint150.sol
Created November 2, 2022 19:36
RareSkills challenge
//SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.15;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "hardhat/console.sol";
// You may not modify this contract
contract NotRareToken is ERC721 {
mapping(address => bool) private alreadyMinted;
#!/bin/bash
alias c='code .'
alias cdh='cd $HOME'
alias ls='ls -la'
alias sl="ls"
alias cls='clear'
alias g='git status'
alias gap='git add -p'
alias gl='git log'
@devtooligan
devtooligan / return a string the Seaport way
Last active June 10, 2023 17:01
Returning a string in Huff, the "Seaport" way
Goal:
0x00: 0000000000000000000000000000000000000000000000000000000000000020 (offset)
0x20: 0000000000000000000000000000000000000000000000000000000000000003 (length)
0x40: 544b4e0000000000000000000000000000000000000000000000000000000000 (“TKN”)
Normal way:
Step 1)
0x20 0x00 MSTORE
Memory layout:
@devtooligan
devtooligan / emitRevertTest.sol
Last active June 15, 2023 22:36
Foundry test - Emit event and revert
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
import "forge-std/Test.sol";
contract Reverter {
event Test();
function emitAndRevert() external {
emit Test();