Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move security directory contents to utils #4551

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/smooth-cougars-jump.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'openzeppelin-solidity': major
---

`ReentrancyGuard`, `Pausable`: Moved to `utils` directory.
2 changes: 1 addition & 1 deletion certora/harnesses/PausableHarness.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity ^0.8.20;

import "../patched/security/Pausable.sol";
import "../patched/utils/Pausable.sol";

contract PausableHarness is Pausable {
function pause() external {
Expand Down
2 changes: 1 addition & 1 deletion contracts/mocks/PausableMock.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity ^0.8.20;

import {Pausable} from "../security/Pausable.sol";
import {Pausable} from "../utils/Pausable.sol";

contract PausableMock is Pausable {
bool public drasticMeasureTaken;
Expand Down
2 changes: 1 addition & 1 deletion contracts/mocks/ReentrancyMock.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity ^0.8.20;

import {ReentrancyGuard} from "../security/ReentrancyGuard.sol";
import {ReentrancyGuard} from "../utils/ReentrancyGuard.sol";
import {ReentrancyAttack} from "./ReentrancyAttack.sol";

contract ReentrancyMock is ReentrancyGuard {
Expand Down
17 changes: 0 additions & 17 deletions contracts/security/README.adoc

This file was deleted.

2 changes: 1 addition & 1 deletion contracts/token/ERC1155/extensions/ERC1155Pausable.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
pragma solidity ^0.8.20;

import {ERC1155} from "../ERC1155.sol";
import {Pausable} from "../../../security/Pausable.sol";
import {Pausable} from "../../../utils/Pausable.sol";

/**
* @dev ERC1155 token with pausable token transfers, minting and burning.
Expand Down
2 changes: 1 addition & 1 deletion contracts/token/ERC20/extensions/ERC20Pausable.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
pragma solidity ^0.8.20;

import {ERC20} from "../ERC20.sol";
import {Pausable} from "../../../security/Pausable.sol";
import {Pausable} from "../../../utils/Pausable.sol";

/**
* @dev ERC20 token with pausable token transfers, minting and burning.
Expand Down
2 changes: 1 addition & 1 deletion contracts/token/ERC721/extensions/ERC721Pausable.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
pragma solidity ^0.8.20;

import {ERC721} from "../ERC721.sol";
import {Pausable} from "../../../security/Pausable.sol";
import {Pausable} from "../../../utils/Pausable.sol";

/**
* @dev ERC721 token with pausable token transfers, minting and burning.
Expand Down
File renamed without changes.
25 changes: 14 additions & 11 deletions contracts/utils/README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,20 @@ NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/

Miscellaneous contracts and libraries containing utility functions you can use to improve security, work with new data types, or safely use low-level primitives.

The {Address}, {Arrays}, {Base64} and {Strings} libraries provide more operations related to these native data types, while {SafeCast} adds ways to safely convert between the different signed and unsigned numeric types.
{Multicall} provides a function to batch together multiple calls in a single external call.

For new data types:

* {EnumerableMap}: like Solidity's https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`] type, but with key-value _enumeration_: this will let you know how many entries a mapping has, and iterate over them (which is not possible with `mapping`).
* {EnumerableSet}: like {EnumerableMap}, but for https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets]. Can be used to store privileged accounts, issued IDs, etc.
* {ReentrancyGuard}: A modifier that can prevent reentrancy during certain functions.
* {Pausable}: A common emergency response mechanism that can pause functionality while a remediation is pending.
* {SafeCast}: Checked downcasting functions to avoid silent truncation.
* {Math}, {SignedMath}: Implementation of various arithmetic functions.
* {Multicall}: Simple way to batch together multiple calls in a single external call.
* {Create2}: Wrapper around the https://blog.openzeppelin.com/getting-the-most-out-of-create2/[`CREATE2` EVM opcode] for safe use without having to deal with low-level assembly.
* {EnumerableMap}: A type like Solidity's https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`], but with key-value _enumeration_: this will let you know how many entries a mapping has, and iterate over them (which is not possible with `mapping`).
* {EnumerableSet}: Like {EnumerableMap}, but for https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets]. Can be used to store privileged accounts, issued IDs, etc.

[NOTE]
====
Because Solidity does not support generic types, {EnumerableMap} and {EnumerableSet} are specialized to a limited number of key-value types.

As of v3.0, {EnumerableMap} supports `uint256 -> address` (`UintToAddressMap`), and {EnumerableSet} supports `address` and `uint256` (`AddressSet` and `UintSet`).
====

Finally, {Create2} contains all necessary utilities to safely use the https://blog.openzeppelin.com/getting-the-most-out-of-create2/[`CREATE2` EVM opcode], without having to deal with low-level assembly.

== Math

{{Math}}
Expand All @@ -42,6 +39,12 @@ Finally, {Create2} contains all necessary utilities to safely use the https://bl

{{EIP712}}

== Security

{{ReentrancyGuard}}

{{Pausable}}

== Introspection

This set of interfaces and contracts deal with https://en.wikipedia.org/wiki/Type_introspection[type introspection] of contracts, that is, examining which functions can be called on them. This is usually referred to as a contract's _interface_.
Expand Down
File renamed without changes.