-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: assembly in
getBytecode
that resulted in extra data copied
* test: getBytecode * fix(generic-factory): bytecode array was 1 word too long * test: make sure that bytecode generated and create2 address is correct * lint: update .prettierignore to exclude broadcast * lint: forge fmt * chore: rm broadcast as those txs are no longer valid * ci: update hashes * test: update gas snapshot --------- Co-authored-by: OliverNChalk <11343499+OliverNChalk@users.noreply.github.com>
- Loading branch information
Showing
9 changed files
with
195 additions
and
356 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,7 @@ | ||
/broadcast | ||
/cache | ||
/out | ||
/node_modules | ||
/lib | ||
/reference | ||
|
This file was deleted.
Oops, something went wrong.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
{ | ||
"constant_product_hash": "0xde6d8452b97c785350ce9f82090dfb5962933aa5467827310798925c8725013b", | ||
"factory_hash": "0xda6f297f6ce8cf60c5dcf260b6c4178f82c853ae2f16446c064cf6f4e2e4b1ca", | ||
"factory_hash": "0xaafa0bd4694a22c24f8ef26cfd45864f11be2102e269ee6a831d2c659b30f08f", | ||
"oracle_caller_hash": "0x1dcb29ca6399be1a5f8a4b3f168a83ff20697718c3d5434ddeeb4a8050fdc615", | ||
"stable_hash": "0x1289a8879d4d1992d308d2a4d8457a5ca8d57e07effe092f2a1f21b0b9b10619" | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
{ | ||
"constant_product_hash": "0x71f0d385cb55f83e9dd571b118cb5ee391542d27ff471998ea316d3693b21308", | ||
"factory_hash": "0x055e072b9986c94cc4b0f84188217c205895b41faec500b7aed5300e20b29605", | ||
"factory_hash": "0xa61785bbfa1f668e1ad6e2aff9c6fc4ed961b95ae7cc54c6463d49b259b2e984", | ||
"oracle_caller_hash": "0x6e5b6d511ec5f70fdae7be4b74be5a313df4168f1b50dee9fc571e4414697354", | ||
"stable_hash": "0xa17d9c01054e0d89b5da9d84936c6960c6f82f7981951978cc2aff275d943f5a" | ||
} |
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
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
// SPDX-License-Identifier: UNLICENSED | ||
// taken from https://stackoverflow.com/questions/74443594/how-to-slice-bytes-memory-in-solidity | ||
pragma solidity >=0.8.0; | ||
|
||
library BytesLib { | ||
function slice(bytes memory _bytes, uint256 _start, uint256 _length) internal pure returns (bytes memory) { | ||
require(_length + 31 >= _length, "slice_overflow"); | ||
require(_bytes.length >= _start + _length, "slice_outOfBounds"); | ||
|
||
bytes memory tempBytes; | ||
|
||
// Check length is 0. `iszero` return 1 for `true` and 0 for `false`. | ||
assembly { | ||
switch iszero(_length) | ||
case 0 { | ||
// Get a location of some free memory and store it in tempBytes as | ||
// Solidity does for memory variables. | ||
tempBytes := mload(0x40) | ||
|
||
// Calculate length mod 32 to handle slices that are not a multiple of 32 in size. | ||
let lengthmod := and(_length, 31) | ||
|
||
// tempBytes will have the following format in memory: <length><data> | ||
// When copying data we will offset the start forward to avoid allocating additional memory | ||
// Therefore part of the length area will be written, but this will be overwritten later anyways. | ||
// In case no offset is require, the start is set to the data region (0x20 from the tempBytes) | ||
// mc will be used to keep track where to copy the data to. | ||
let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod))) | ||
let end := add(mc, _length) | ||
|
||
for { | ||
// Same logic as for mc is applied and additionally the start offset specified for the method is added | ||
let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start) | ||
} lt(mc, end) { | ||
// increase `mc` and `cc` to read the next word from memory | ||
mc := add(mc, 0x20) | ||
cc := add(cc, 0x20) | ||
} { | ||
// Copy the data from source (cc location) to the slice data (mc location) | ||
mstore(mc, mload(cc)) | ||
} | ||
|
||
// Store the length of the slice. This will overwrite any partial data that | ||
// was copied when having slices that are not a multiple of 32. | ||
mstore(tempBytes, _length) | ||
|
||
// update free-memory pointer | ||
// allocating the array padded to 32 bytes like the compiler does now | ||
// To set the used memory as a multiple of 32, add 31 to the actual memory usage (mc) | ||
// and remove the modulo 32 (the `and` with `not(31)`) | ||
mstore(0x40, and(add(mc, 31), not(31))) | ||
} | ||
// if we want a zero-length slice let's just return a zero-length array | ||
default { | ||
tempBytes := mload(0x40) | ||
// zero out the 32 bytes slice we are about to return | ||
// we need to do it because Solidity does not garbage collect | ||
mstore(tempBytes, 0) | ||
|
||
// update free-memory pointer | ||
// tempBytes uses 32 bytes in memory (even when empty) for the length. | ||
mstore(0x40, add(tempBytes, 0x20)) | ||
} | ||
} | ||
|
||
return tempBytes; | ||
} | ||
} |
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