Skip to content

Commit

Permalink
Fix stack too deep
Browse files Browse the repository at this point in the history
  • Loading branch information
Vectorized committed Jul 19, 2023
1 parent 66123c4 commit e1a3a6d
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 44 deletions.
86 changes: 43 additions & 43 deletions .gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -115,50 +115,50 @@ EIP712Test:testHashTypedDataOnClone() (gas: 40165)
EIP712Test:testHashTypedDataOnCloneWithChaindIdChange() (gas: 49524)
EIP712Test:testHashTypedDataWithChaindIdChange() (gas: 45785)
EIP712Test:test__codesize() (gas: 9193)
ERC1155HooksTest:testERC1155Hooks() (gas: 4412905)
ERC1155HooksTest:test__codesize() (gas: 12143)
ERC1155Test:testApproveAll(address,bool) (runs: 256, μ: 44353, ~: 38845)
ERC1155HooksTest:testERC1155Hooks() (gas: 4415113)
ERC1155HooksTest:test__codesize() (gas: 12151)
ERC1155Test:testApproveAll(address,bool) (runs: 256, μ: 44436, ~: 38849)
ERC1155Test:testAuthorizedEquivalence(address,address,bool) (runs: 256, μ: 715, ~: 715)
ERC1155Test:testBalanceOfBatchWithArrayMismatchReverts(uint256) (runs: 256, μ: 31379, ~: 33368)
ERC1155Test:testBatchBalanceOf(uint256) (runs: 256, μ: 107665, ~: 93576)
ERC1155Test:testBatchBurn(uint256) (runs: 256, μ: 181578, ~: 162446)
ERC1155Test:testBatchBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 168363, ~: 173601)
ERC1155Test:testBatchBurnWithArrayLengthMismatchReverts(uint256) (runs: 256, μ: 42955, ~: 42270)
ERC1155Test:testBatchMintToEOA(uint256) (runs: 256, μ: 123592, ~: 148367)
ERC1155Test:testBatchMintToERC1155Recipient(uint256) (runs: 256, μ: 778145, ~: 778213)
ERC1155Test:testBatchMintToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 172802, ~: 185933)
ERC1155Test:testBatchMintToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 322745, ~: 315670)
ERC1155Test:testBatchMintToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 298742, ~: 318728)
ERC1155Test:testBatchMintToZeroReverts(uint256) (runs: 256, μ: 75980, ~: 65221)
ERC1155Test:testBatchMintWithArrayMismatchReverts(uint256) (runs: 256, μ: 33299, ~: 35512)
ERC1155Test:testBurn(uint256) (runs: 256, μ: 91255, ~: 82410)
ERC1155Test:testBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 97079, ~: 97475)
ERC1155Test:testDirectSetApprovalForAll(address,address,bool) (runs: 256, μ: 21404, ~: 15497)
ERC1155Test:testMintToEOA(uint256) (runs: 256, μ: 72246, ~: 71726)
ERC1155Test:testMintToERC1155Recipient(uint256) (runs: 256, μ: 672621, ~: 653322)
ERC1155Test:testMintToNonERC155RecipientReverts(uint256) (runs: 256, μ: 103209, ~: 103253)
ERC1155Test:testMintToRevertingERC155RecipientReverts(uint256) (runs: 256, μ: 281325, ~: 281372)
ERC1155Test:testMintToWrongReturnDataERC155RecipientReverts(uint256) (runs: 256, μ: 235877, ~: 235943)
ERC1155Test:testMintToZeroReverts(uint256) (runs: 256, μ: 33087, ~: 33055)
ERC1155Test:testSafeBatchTransfer() (gas: 8345801)
ERC1155Test:testSafeBatchTransferFromToEOA(uint256) (runs: 256, μ: 205666, ~: 189049)
ERC1155Test:testSafeBatchTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 873871, ~: 888325)
ERC1155Test:testSafeBatchTransferFromToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 250751, ~: 268303)
ERC1155Test:testSafeBatchTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 435272, ~: 446913)
ERC1155Test:testSafeBatchTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 342008, ~: 330056)
ERC1155Test:testSafeBatchTransferFromToZeroReverts(uint256) (runs: 256, μ: 141570, ~: 124639)
ERC1155Test:testSafeBatchTransferFromWithArrayLengthMismatchReverts(uint256) (runs: 256, μ: 50543, ~: 66552)
ERC1155Test:testSafeBatchTransferInsufficientBalanceReverts(uint256) (runs: 256, μ: 171652, ~: 173708)
ERC1155Test:testSafeTransferFromInsufficientBalanceReverts(uint256) (runs: 256, μ: 99166, ~: 99834)
ERC1155Test:testSafeTransferFromSelf(uint256) (runs: 256, μ: 106139, ~: 105783)
ERC1155Test:testSafeTransferFromSelfInsufficientBalanceReverts(uint256) (runs: 256, μ: 71423, ~: 72152)
ERC1155Test:testSafeTransferFromToEOA(uint256) (runs: 256, μ: 118929, ~: 111938)
ERC1155Test:testSafeTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 760947, ~: 782211)
ERC1155Test:testSafeTransferFromToNonERC155RecipientReverts(uint256) (runs: 256, μ: 140160, ~: 139781)
ERC1155Test:testSafeTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 317173, ~: 318486)
ERC1155Test:testSafeTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 272758, ~: 272555)
ERC1155Test:testSafeTransferFromToZeroReverts(uint256) (runs: 256, μ: 71026, ~: 71524)
ERC1155Test:test__codesize() (gas: 43539)
ERC1155Test:testBalanceOfBatchWithArrayMismatchReverts(uint256) (runs: 256, μ: 31230, ~: 33355)
ERC1155Test:testBatchBalanceOf(uint256) (runs: 256, μ: 110062, ~: 93598)
ERC1155Test:testBatchBurn(uint256) (runs: 256, μ: 175206, ~: 161774)
ERC1155Test:testBatchBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 168400, ~: 173601)
ERC1155Test:testBatchBurnWithArrayLengthMismatchReverts(uint256) (runs: 256, μ: 43072, ~: 42605)
ERC1155Test:testBatchMintToEOA(uint256) (runs: 256, μ: 120375, ~: 100134)
ERC1155Test:testBatchMintToERC1155Recipient(uint256) (runs: 256, μ: 790641, ~: 782144)
ERC1155Test:testBatchMintToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 169367, ~: 185609)
ERC1155Test:testBatchMintToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 329794, ~: 316153)
ERC1155Test:testBatchMintToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 292237, ~: 318393)
ERC1155Test:testBatchMintToZeroReverts(uint256) (runs: 256, μ: 75439, ~: 65179)
ERC1155Test:testBatchMintWithArrayMismatchReverts(uint256) (runs: 256, μ: 33434, ~: 35513)
ERC1155Test:testBurn(uint256) (runs: 256, μ: 91067, ~: 82550)
ERC1155Test:testBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 97203, ~: 97741)
ERC1155Test:testDirectSetApprovalForAll(address,address,bool) (runs: 256, μ: 21249, ~: 15497)
ERC1155Test:testMintToEOA(uint256) (runs: 256, μ: 72197, ~: 71726)
ERC1155Test:testMintToERC1155Recipient(uint256) (runs: 256, μ: 671065, ~: 653345)
ERC1155Test:testMintToNonERC155RecipientReverts(uint256) (runs: 256, μ: 103274, ~: 103244)
ERC1155Test:testMintToRevertingERC155RecipientReverts(uint256) (runs: 256, μ: 281328, ~: 281372)
ERC1155Test:testMintToWrongReturnDataERC155RecipientReverts(uint256) (runs: 256, μ: 235962, ~: 235951)
ERC1155Test:testMintToZeroReverts(uint256) (runs: 256, μ: 33087, ~: 33058)
ERC1155Test:testSafeBatchTransfer() (gas: 8345896)
ERC1155Test:testSafeBatchTransferFromToEOA(uint256) (runs: 256, μ: 202195, ~: 189077)
ERC1155Test:testSafeBatchTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 876158, ~: 888344)
ERC1155Test:testSafeBatchTransferFromToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 255380, ~: 268350)
ERC1155Test:testSafeBatchTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 436486, ~: 446765)
ERC1155Test:testSafeBatchTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 337735, ~: 329892)
ERC1155Test:testSafeBatchTransferFromToZeroReverts(uint256) (runs: 256, μ: 137121, ~: 124639)
ERC1155Test:testSafeBatchTransferFromWithArrayLengthMismatchReverts(uint256) (runs: 256, μ: 51554, ~: 66637)
ERC1155Test:testSafeBatchTransferInsufficientBalanceReverts(uint256) (runs: 256, μ: 169221, ~: 173708)
ERC1155Test:testSafeTransferFromInsufficientBalanceReverts(uint256) (runs: 256, μ: 99092, ~: 99806)
ERC1155Test:testSafeTransferFromSelf(uint256) (runs: 256, μ: 106107, ~: 105783)
ERC1155Test:testSafeTransferFromSelfInsufficientBalanceReverts(uint256) (runs: 256, μ: 71237, ~: 72092)
ERC1155Test:testSafeTransferFromToEOA(uint256) (runs: 256, μ: 117646, ~: 111012)
ERC1155Test:testSafeTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 761748, ~: 782707)
ERC1155Test:testSafeTransferFromToNonERC155RecipientReverts(uint256) (runs: 256, μ: 140379, ~: 139781)
ERC1155Test:testSafeTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 316822, ~: 318183)
ERC1155Test:testSafeTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 273065, ~: 272604)
ERC1155Test:testSafeTransferFromToZeroReverts(uint256) (runs: 256, μ: 70822, ~: 70225)
ERC1155Test:test__codesize() (gas: 43547)
ERC1967FactoryTest:testChangeAdmin() (gas: 266757)
ERC1967FactoryTest:testChangeAdminUnauthorized() (gas: 257684)
ERC1967FactoryTest:testDeploy() (gas: 257661)
Expand Down
3 changes: 2 additions & 1 deletion src/tokens/ERC1155.sol
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,7 @@ abstract contract ERC1155 {
assembly {
// Do the {onERC1155BatchReceived} check if `to` is a smart contract.
if extcodesize(to) {
mstore(0x00, to) // Cache `to` to prevent stack too deep.
let m := mload(0x40)
// Prepare the calldata.
// `onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)`.
Expand All @@ -399,7 +400,7 @@ abstract contract ERC1155 {
calldatacopy(o, sub(data.offset, 0x20), n)
n := sub(add(o, n), add(m, 0x1c))
// Revert if the call reverts.
if iszero(call(gas(), to, 0, add(m, 0x1c), n, m, 0x20)) {
if iszero(call(gas(), mload(0x00), 0, add(m, 0x1c), n, m, 0x20)) {
if returndatasize() {
// Bubble up the revert if the call reverts.
returndatacopy(0x00, 0x00, returndatasize())
Expand Down

0 comments on commit e1a3a6d

Please sign in to comment.