Last active
March 13, 2020 11:41
-
-
Save cameel/5a3d3c8c3c9692c34d2fe3f451c7845a to your computer and use it in GitHub Desktop.
erc20.sol-ERC20.yul optimised with xiDslifaCrDLLujnxmIuVsetcuTjersOvjmn
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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