Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save cameel/5a3d3c8c3c9692c34d2fe3f451c7845a to your computer and use it in GitHub Desktop.
Save cameel/5a3d3c8c3c9692c34d2fe3f451c7845a to your computer and use it in GitHub Desktop.
erc20.sol-ERC20.yul optimised with xiDslifaCrDLLujnxmIuVsetcuTjersOvjmn
Chromosome: xiDslifaCrDLLujnxmIuVsetcuTjersOvjmnu
Program: erc20.sol-ERC20.yul
{
mstore(64, 128)
if iszero(lt(calldatasize(), 4))
{
switch shr(224, calldataload(0))
case 0x095ea7b3 {
if callvalue() { revert(0, 0) }
let param_0, param_1 := abi_decode_tuple_t_addresst_uint256(4, calldatasize())
let ret_0 := fun_approve_113(param_0, param_1)
let memPos := allocateMemory(0)
return(memPos, sub(abi_encode_tuple_t_bool__to_t_bool__fromStack(memPos, ret_0), memPos))
}
case 0x18160ddd {
if callvalue() { revert(0, 0) }
abi_decode_tuple_(4, calldatasize())
let ret_0_1 := sload(0x02)
let memPos_2 := allocateMemory(0)
return(memPos_2, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos_2, ret_0_1), memPos_2))
}
case 0x23b872dd {
if callvalue() { revert(0, 0) }
let param_0_4, param_1_5, param_2 := abi_decode_tuple_t_addresst_addresst_uint256(4, calldatasize())
let ret_0_6 := fun_transferFrom_147(param_0_4, param_1_5, param_2)
let memPos_7 := allocateMemory(0)
return(memPos_7, sub(abi_encode_tuple_t_bool__to_t_bool__fromStack(memPos_7, ret_0_6), memPos_7))
}
case 0x39509351 {
if callvalue() { revert(0, 0) }
let param_0_9, param_1_10 := abi_decode_tuple_t_addresst_uint256(4, calldatasize())
let ret_0_11 := fun_increaseAllowance_173(param_0_9, param_1_10)
let memPos_12 := allocateMemory(0)
return(memPos_12, sub(abi_encode_tuple_t_bool__to_t_bool__fromStack(memPos_12, ret_0_11), memPos_12))
}
case 0x70a08231 {
if callvalue() { revert(0, 0) }
let ret_0_15 := fun_balanceOf_59(abi_decode_tuple_t_address(4, calldatasize()))
let memPos_16 := allocateMemory(0)
return(memPos_16, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos_16, ret_0_15), memPos_16))
}
case 0xa457c2d7 {
if callvalue() { revert(0, 0) }
let param_0_18, param_1_19 := abi_decode_tuple_t_addresst_uint256(4, calldatasize())
let ret_0_20 := fun_decreaseAllowance_199(param_0_18, param_1_19)
let memPos_21 := allocateMemory(0)
return(memPos_21, sub(abi_encode_tuple_t_bool__to_t_bool__fromStack(memPos_21, ret_0_20), memPos_21))
}
case 0xa9059cbb {
if callvalue() { revert(0, 0) }
let param_0_23, param_1_24 := abi_decode_tuple_t_addresst_uint256(4, calldatasize())
let ret_0_25 := fun_transfer_94(param_0_23, param_1_24)
let memPos_26 := allocateMemory(0)
return(memPos_26, sub(abi_encode_tuple_t_bool__to_t_bool__fromStack(memPos_26, ret_0_25), memPos_26))
}
case 0xdd62ed3e {
if callvalue() { revert(0, 0) }
let param_0_28, param_1_29 := abi_decode_tuple_t_addresst_address(4, calldatasize())
let ret_0_30 := sload(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(0x01, param_0_28), param_1_29))
let memPos_31 := allocateMemory(0)
return(memPos_31, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos_31, ret_0_30), memPos_31))
}
}
revert(0, 0)
function abi_decode_t_address(offset, end) -> value
{
value := calldataload(offset)
if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }
}
function abi_decode_tuple_(headStart, dataEnd)
{
if slt(sub(dataEnd, headStart), 0) { revert(0, 0) }
}
function abi_decode_tuple_t_address(headStart_36, dataEnd_37) -> value0
{
if slt(sub(dataEnd_37, headStart_36), 32) { revert(0, 0) }
value0 := abi_decode_t_address(headStart_36, dataEnd_37)
}
function abi_decode_tuple_t_addresst_address(headStart_39, dataEnd_40) -> value0_41, value1
{
if slt(sub(dataEnd_40, headStart_39), 64) { revert(0, 0) }
value0_41 := abi_decode_t_address(headStart_39, dataEnd_40)
value1 := abi_decode_t_address(add(headStart_39, 32), dataEnd_40)
}
function abi_decode_tuple_t_addresst_addresst_uint256(headStart_44, dataEnd_45) -> value0_46, value1_47, value2
{
if slt(sub(dataEnd_45, headStart_44), 96) { revert(0, 0) }
let value_432_1056 := calldataload(headStart_44)
validator_revert_t_address(value_432_1056)
value0_46 := value_432_1056
let value_435_1059 := calldataload(add(headStart_44, 32))
validator_revert_t_address(value_435_1059)
value1_47 := value_435_1059
value2 := calldataload(add(headStart_44, 64))
}
function abi_decode_tuple_t_addresst_uint256(headStart_51, dataEnd_52) -> value0_53, value1_54
{
if slt(sub(dataEnd_52, headStart_51), 64) { revert(0, 0) }
value0_53 := abi_decode_t_address(headStart_51, dataEnd_52)
value1_54 := calldataload(add(headStart_51, 32))
}
function abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack(pos_60) -> end_61
{
mstore(pos_60, 34)
mstore(add(pos_60, 0x20), "ERC20: approve to the zero addre")
mstore(add(pos_60, 64), "ss")
end_61 := add(pos_60, 96)
}
function abi_encode_t_uint256_to_t_uint256_fromStack(value_68, pos_69)
{ mstore(pos_69, value_68) }
function abi_encode_tuple_t_bool__to_t_bool__fromStack(headStart_70, value0_71) -> tail
{
tail := add(headStart_70, 32)
mstore(headStart_70, iszero(iszero(value0_71)))
}
function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack(headStart_72) -> tail_73
{
mstore(headStart_72, 32)
mstore(add(headStart_72, 32), 35)
mstore(add(headStart_72, 64), "ERC20: transfer to the zero addr")
mstore(add(headStart_72, 96), "ess")
tail_73 := add(headStart_72, 128)
}
function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack(headStart_78) -> tail_79
{
mstore(headStart_78, 32)
mstore(add(headStart_78, 32), 36)
mstore(add(headStart_78, 64), "ERC20: approve from the zero add")
mstore(add(headStart_78, 96), "ress")
tail_79 := add(headStart_78, 128)
}
function abi_encode_tuple_t_uint256__to_t_uint256__fromStack(headStart_82, value0_83) -> tail_84
{
tail_84 := add(headStart_82, 32)
mstore(headStart_82, value0_83)
}
function allocateMemory(size) -> memPtr
{
memPtr := mload(64)
let newFreePtr := add(memPtr, size)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { revert(0, 0) }
mstore(64, newFreePtr)
}
function checked_add_t_uint256(x, y) -> sum
{
if gt(x, not(y)) { revert(0, 0) }
sum := add(x, y)
}
function checked_sub_t_uint256(x_86, y_87) -> diff
{
if lt(x_86, y_87) { revert(0, 0) }
diff := sub(x_86, y_87)
}
function fun__approve_375(vloc_owner_333, vloc_spender_335, vloc_value_337)
{
if iszero(vloc_owner_333)
{
let fmp_131_828 := mload(64)
mstore(fmp_131_828, 0x08c379a000000000000000000000000000000000000000000000000000000000)
revert(fmp_131_828, sub(abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack(add(fmp_131_828, 4)), fmp_131_828))
}
if iszero(vloc_spender_335)
{
let fmp_125_845 := mload(64)
mstore(fmp_125_845, 0x08c379a000000000000000000000000000000000000000000000000000000000)
mstore(add(fmp_125_845, 4), 32)
revert(fmp_125_845, sub(abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack(add(fmp_125_845, 36)), fmp_125_845))
}
update_storage_value_offset_0t_uint256(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(0x01, vloc_owner_333), vloc_spender_335), vloc_value_337)
let _121 := mload(64)
log3(_121, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(_121, vloc_value_337), _121), 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925, vloc_owner_333, vloc_spender_335)
}
function fun__transfer_245(vloc_from_201, vloc_to_203, vloc_value_205)
{
if iszero(vloc_to_203)
{
let fmp_542 := mload(64)
mstore(fmp_542, 0x08c379a000000000000000000000000000000000000000000000000000000000)
revert(fmp_542, sub(abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack(add(fmp_542, 4)), fmp_542))
}
update_storage_value_offset_0t_uint256(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(0x00, vloc_from_201), checked_sub_t_uint256(sload(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(0x00, vloc_from_201)), vloc_value_205))
update_storage_value_offset_0t_uint256(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(0x00, vloc_to_203), checked_add_t_uint256(sload(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(0x00, vloc_to_203)), vloc_value_205))
let _72 := mload(64)
abi_encode_t_uint256_to_t_uint256_fromStack(vloc_value_205, _72)
log3(_72, 32, 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, vloc_from_201, vloc_to_203)
}
function fun_approve_113(vloc_spender_96, vloc_value_98) -> vloc__101
{
fun__approve_375(caller(), vloc_spender_96, vloc_value_98)
vloc__101 := 0x01
}
function fun_balanceOf_59(vloc_owner_49) -> vloc__52
{
vloc__52 := sload(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(0, vloc_owner_49))
}
function fun_decreaseAllowance_199(vloc_spender_175, vloc_subtractedValue_177) -> vloc__180
{
fun__approve_375(caller(), vloc_spender_175, checked_sub_t_uint256(sload(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(0x01, caller()), vloc_spender_175)), vloc_subtractedValue_177))
vloc__180 := 0x01
}
function fun_increaseAllowance_173(vloc_spender_149, vloc_addedValue_151) -> vloc__154
{
fun__approve_375(caller(), vloc_spender_149, checked_add_t_uint256(sload(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(0x01, caller()), vloc_spender_149)), vloc_addedValue_151))
vloc__154 := 0x01
}
function fun_transferFrom_147(vloc_from_115, vloc_to_117, vloc_value_119) -> vloc__122
{
fun__transfer_245(vloc_from_115, vloc_to_117, vloc_value_119)
let expr_136 := mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(0x01, vloc_from_115)
mstore(0, caller())
mstore(0x20, expr_136)
fun__approve_375(vloc_from_115, caller(), checked_sub_t_uint256(sload(keccak256(0, 0x40)), vloc_value_119))
vloc__122 := 0x01
}
function fun_transfer_94(vloc_to_77, vloc_value_79) -> vloc__82
{
fun__transfer_245(caller(), vloc_to_77, vloc_value_79)
vloc__82 := 0x01
}
function mapping_index_access_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_of_t_address(slot, key) -> dataSlot
{
mstore(0, and(key, 0xffffffffffffffffffffffffffffffffffffffff))
mstore(0x20, slot)
dataSlot := keccak256(0, 0x40)
}
function update_storage_value_offset_0t_uint256(slot_142, value_143)
{ sstore(slot_142, value_143) }
function validator_revert_t_address(value_144)
{
if iszero(eq(value_144, and(value_144, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment