Skip to content

Instantly share code, notes, and snippets.

@hrkrshnn
Created March 17, 2021 17:54
Show Gist options
  • Select an option

  • Save hrkrshnn/e6bf827d1ee136f03fd3de34f0ceaf93 to your computer and use it in GitHub Desktop.

Select an option

Save hrkrshnn/e6bf827d1ee136f03fd3de34f0ceaf93 to your computer and use it in GitHub Desktop.
diff -u /tmp/empty_bytesold.yul /tmp/empty_bytesnew.yul
--- /tmp/empty_bytesold.yul 2021-03-17 18:53:59.463802461 +0100
+++ /tmp/empty_bytesnew.yul 2021-03-17 18:53:23.319922761 +0100
@@ -87,20 +87,21 @@
{
let data := sload(array)
let oldLen := extract_byte_array_length(data)
- let _1 := add(oldLen, 1)
+ let _1 := 1
+ let _2 := add(oldLen, _1)
switch lt(oldLen, 32)
case 0 {
- sstore(array, add(mul(2, _1), 1))
+ sstore(array, add(shl(_1, _2), _1))
}
default {
- switch lt(_1, 32)
+ switch lt(_2, 32)
case 0 {
mstore(slot, array)
sstore(keccak256(slot, 32), and(not(255), data))
- sstore(array, add(mul(2, _1), 1))
+ sstore(array, add(shl(_1, _2), _1))
}
default {
- sstore(array, or(and(data, not(shr(mul(8, _1), not(0)))), mul(2, _1)))
+ sstore(array, or(and(data, not(shr(shl(3, _2), not(0)))), shl(_1, _2)))
}
}
let slot_1, offset_1 := storage_array_index_access_bytes(array, oldLen)
@@ -109,7 +110,7 @@
}
function extract_byte_array_length(data) -> length
{
- length := div(data, 2)
+ length := shr(1, data)
let outOfPlaceEncoding := and(data, 1)
if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }
if eq(outOfPlaceEncoding, lt(length, 32))
@@ -122,7 +123,7 @@
function fun_a(var_index) -> var
{
let _1, _2 := storage_array_index_access_bytes(var, var_index)
- var := shl(248, shr(mul(_2, 8), sload(_1)))
+ var := shl(248, shr(shl(3, _2), sload(_1)))
}
function fun_f()
{
@@ -147,7 +148,7 @@
let _1, _2 := array_push_zero_bytes_storage_ptr(var_i)
let _3 := 0xff
let _4 := sload(_1)
- let shiftBits := mul(_2, 8)
+ let shiftBits := shl(3, _2)
let mask := shl(shiftBits, _3)
sstore(_1, or(and(_4, not(mask)), and(shl(shiftBits, and(var_i_1, _3)), mask)))
}
@@ -166,7 +167,7 @@
case 0 {
mstore(slot, array)
let data := keccak256(slot, 0x20)
- slot := add(data, div(index, 0x20))
+ slot := add(data, shr(5, index))
}
default { slot := array }
}
Diff finished. Wed Mar 17 18:54:06 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment