Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
a1aa81b
fix: incorrect documentation reference in ERC4626Fees._withdraw (#5955)
strmfos Sep 29, 2025
a6a8dfc
Merge branch 'master' into typo-fixes
Amxx Oct 6, 2025
0571375
Update CHANGELOG.md (#5969)
mdfaizanaquil Oct 6, 2025
27703a5
Merge branch 'master' into typo-fixes
Amxx Oct 10, 2025
835748a
Escape dots in regex for solidity pragma version matching (#5981)
sashaodessa Oct 10, 2025
7a4a7fe
fix ranges in isValidERC1271SignatureNow documentation
Amxx Oct 11, 2025
5004def
chore: fix misuses of 'a' vs 'an' (#5988)
dulanting Oct 16, 2025
7931f44
Merge branch 'master' into typo-fixes
ernestognw Oct 17, 2025
5e69660
Lint
ernestognw Oct 17, 2025
067f190
docs: fix minor grammar and phrasing issues in documentation (#5999)
prestoalvarez Oct 17, 2025
dc53fdf
docs: improvement of grammar (#6006)
CreeptoGengar Oct 21, 2025
785974f
docs: add comment explaining execution delay value in AccessManaged t…
forkfury Oct 21, 2025
ec0ec42
docs(ERC2771Forwarder): fix validate signer reference and clarify imp…
radik878 Oct 27, 2025
7293c72
docs: add security warnings for AccessManager migration (#6016)
Lil-Duckling-22 Oct 27, 2025
70493d3
Merge branch 'master' into typo-fixes
ernestognw Oct 29, 2025
83ead03
chore: fix 4626 error documentations (#6026)
kevzzsk Oct 29, 2025
95644ff
Merge branch 'master' into typo-fixes
ernestognw Oct 30, 2025
9cfcf43
docs: correct TimelockController role names in access control guide (…
DeVikingMark Oct 30, 2025
82e0a59
docs(erc721): fix _setTokenURI xref to ERC721URIStorage (#6028)
VolodymyrBg Oct 30, 2025
bf196f6
fix: ERC2771Forwarder _validate doc comment (#6029)
sashass1315 Oct 30, 2025
804307a
refactor(ERC20FlashMint): remove unused parameter suppression in _fla…
sashaodessa Oct 31, 2025
599e66b
docs: fix P256 example functions to be view instead of pure (#6031)
GarmashAlex Oct 31, 2025
f4685fc
Merge branch 'master' into typo-fixes
ernestognw Nov 3, 2025
9c0046f
fix: correct RoleGranted event documentation for existing members (#6…
phrwlk Nov 3, 2025
74703ae
docs(IAccessManager): document locked roles for label/admin/guardian/…
Forostovec Nov 3, 2025
47615e5
docs: use canonical PackedUserOperation field names (#6039)
GarmashAlex Nov 3, 2025
520ade0
docs: clarify 20-byte calldata minimum requirement in ERC2771Context …
avorylli Nov 3, 2025
074795a
docs: improvement of grammar (#6035)
CreeptoGengar Nov 3, 2025
7bdaf34
Drop unused IERC165 import from timelock controller (#6042)
Doryu001 Nov 3, 2025
e793343
Merge branch 'master' into typo-fixes
Amxx Nov 5, 2025
a4b70a8
Сhore: remove unused imports from Heap library (#6060)
Nixuewyreks Nov 5, 2025
9c103fc
chore: fix broken link (#6058)
Snezhkko Nov 5, 2025
d7181c3
docs(governance): fix GovernorCountingSimple import path to extension…
MozirDmitriy Nov 5, 2025
de87771
docs: add setup() to CircularBuffer example to show required initiali…
Galoretka Nov 5, 2025
2518fbd
Remove ERC7702 mentions in favor of EIP7702 (#6044)
ernestognw Nov 5, 2025
808a851
Merge branch 'master' into typo-fixes
ernestognw Nov 5, 2025
7b71c14
docs: fix incomplete sentence in EOA delegation guide (#6066)
DeVikingMark Nov 5, 2025
e1b7411
docs: fix WebAuthn cross-reference to verify in ERC7913WebAuthnVerifi…
VolodymyrBg Nov 5, 2025
668d3b5
Merge branch 'master' into typo-fixes
Amxx Nov 6, 2025
a60b367
fix: correct LowLevelCall overload reference (#6071)
reallesee Nov 6, 2025
2f1386c
docs(Heap): clarify priority via comparator and default min-heap beha…
Forostovec Nov 6, 2025
f48c229
Remove dead abstract contract Impl from DummyImplementation mock (#6073)
sashass1315 Nov 10, 2025
c906400
Drop redundant await in GovernorNoncesKeyed helper (#6064)
Doryu001 Nov 10, 2025
b3570cb
Use strict equality in Arrays test helpers (#6086)
prestoalvarez Nov 10, 2025
83fc81a
docs: improvement of grammar (#6085)
CreeptoGengar Nov 10, 2025
2449027
docs: fix misleading in ERC721Enumerable._increaseBalance (#6087)
aso20455 Nov 10, 2025
7686518
Merge branch 'master' into typo-fixes
Amxx Nov 10, 2025
9fe0e62
Fix incorrect reference in _withdraw documentation (#6090)
Fallengirl Nov 10, 2025
b2c5e02
fix: ClashingImplementation comment to reference upgradeToAndCall (#6…
radik878 Nov 10, 2025
a8de514
docs: fix function reference in LowLevelCall (#6089)
eeemmmmmm Nov 10, 2025
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
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@

### Pragma changes

- Reduced pragma requirement of interface files
- Reduced pragma requirement of interface files.

### Changes by category

Expand Down
12 changes: 11 additions & 1 deletion contracts/access/manager/IAccessManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ interface IAccessManager {
*
* NOTE: The meaning of the `since` argument depends on the `newMember` argument.
* If the role is granted to a new member, the `since` argument indicates when the account becomes a member of the role,
* otherwise it indicates the execution delay for this account and roleId is updated.
* otherwise it indicates the timestamp when the execution delay update takes effect for this account and roleId.
*/
event RoleGranted(uint64 indexed roleId, address indexed account, uint32 delay, uint48 since, bool newMember);

Expand Down Expand Up @@ -196,6 +196,7 @@ interface IAccessManager {
* Requirements:
*
* - the caller must be a global admin
* - `roleId` must not be the `ADMIN_ROLE` or `PUBLIC_ROLE`
*
* Emits a {RoleLabel} event.
*/
Expand Down Expand Up @@ -254,6 +255,10 @@ interface IAccessManager {
* Requirements:
*
* - the caller must be a global admin
* - `roleId` must not be the `ADMIN_ROLE` or `PUBLIC_ROLE`
*
* NOTE: Setting `admin` to the `PUBLIC_ROLE` is allowed, but the target `roleId` itself
* must not be a locked role (`ADMIN_ROLE` or `PUBLIC_ROLE`).
*
* Emits a {RoleAdminChanged} event
*/
Expand All @@ -265,6 +270,10 @@ interface IAccessManager {
* Requirements:
*
* - the caller must be a global admin
* - `roleId` must not be the `ADMIN_ROLE` or `PUBLIC_ROLE`
*
* NOTE: Setting `guardian` to the `PUBLIC_ROLE` is allowed, but the target `roleId` itself
* must not be a locked role (`ADMIN_ROLE` or `PUBLIC_ROLE`).
*
* Emits a {RoleGuardianChanged} event
*/
Expand All @@ -276,6 +285,7 @@ interface IAccessManager {
* Requirements:
*
* - the caller must be a global admin
* - `roleId` must not be the `PUBLIC_ROLE`
*
* Emits a {RoleGrantDelayChanged} event.
*/
Expand Down
2 changes: 1 addition & 1 deletion contracts/account/extensions/draft-AccountERC7579.sol
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ abstract contract AccountERC7579 is Account, IERC1271, IERC7579Execution, IERC75
* actual copy. However, this would require `_installModule` to get a calldata bytes object instead of a memory
* bytes object. This would prevent calling `_installModule` from a contract constructor and would force the use
* of external initializers. That may change in the future, as most accounts will probably be deployed as
* clones/proxy/ERC-7702 delegates and therefore rely on initializers anyway.
* clones/proxy/EIP-7702 delegates and therefore rely on initializers anyway.
*/
function _decodeFallbackData(
bytes memory data
Expand Down
2 changes: 1 addition & 1 deletion contracts/account/utils/EIP7702Utils.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ pragma solidity ^0.8.20;
/**
* @dev Library with common EIP-7702 utility functions.
*
* See https://eips.ethereum.org/EIPS/eip-7702[ERC-7702].
* See https://eips.ethereum.org/EIPS/eip-7702[EIP-7702].
*/
library EIP7702Utils {
bytes3 internal constant EIP7702_PREFIX = 0xef0100;
Expand Down
3 changes: 1 addition & 2 deletions contracts/governance/TimelockController.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import {AccessControl} from "../access/AccessControl.sol";
import {ERC721Holder} from "../token/ERC721/utils/ERC721Holder.sol";
import {ERC1155Holder} from "../token/ERC1155/utils/ERC1155Holder.sol";
import {Address} from "../utils/Address.sol";
import {IERC165} from "../utils/introspection/ERC165.sol";

/**
* @dev Contract module which acts as a timelocked controller. When set as the
Expand Down Expand Up @@ -155,7 +154,7 @@ contract TimelockController is AccessControl, ERC721Holder, ERC1155Holder {
*/
receive() external payable virtual {}

/// @inheritdoc IERC165
/// @inheritdoc AccessControl
function supportsInterface(
bytes4 interfaceId
) public view virtual override(AccessControl, ERC1155Holder) returns (bool) {
Expand Down
2 changes: 1 addition & 1 deletion contracts/metatx/ERC2771Context.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";

/**
* @dev Context variant with ERC-2771 support.
* @dev Context variant with ERC-2771 support. See {_msgSender} for the calldata format.
*
* WARNING: Avoid using this pattern in contracts that rely on a specific calldata length as they'll
* be affected by any forwarder whose `msg.data` is suffixed with the `from` address according to the ERC-2771
Expand Down
4 changes: 0 additions & 4 deletions contracts/mocks/DummyImplementation.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@ pragma solidity ^0.8.21;
import {ERC1967Utils} from "../proxy/ERC1967/ERC1967Utils.sol";
import {StorageSlot} from "../utils/StorageSlot.sol";

abstract contract Impl {
function version() public pure virtual returns (string memory);
}

contract DummyImplementation {
uint256 public value;
string public text;
Expand Down
6 changes: 3 additions & 3 deletions contracts/mocks/account/AccountMock.sol
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ abstract contract AccountWebAuthnMock is Account, SignerWebAuthn, ERC7739, ERC78
}
}

abstract contract AccountERC7702Mock is Account, SignerEIP7702, ERC7739, ERC7821, ERC721Holder, ERC1155Holder {
abstract contract AccountEIP7702Mock is Account, SignerEIP7702, ERC7739, ERC7821, ERC721Holder, ERC1155Holder {
/// @inheritdoc ERC7821
function _erc7821AuthorizedExecutor(
address caller,
Expand All @@ -92,7 +92,7 @@ abstract contract AccountERC7702Mock is Account, SignerEIP7702, ERC7739, ERC7821
}
}

abstract contract AccountERC7702WithModulesMock is
abstract contract AccountEIP7702WithModulesMock is
Account,
AccountERC7579,
SignerEIP7702,
Expand All @@ -119,7 +119,7 @@ abstract contract AccountERC7702WithModulesMock is
return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;
}

/// @dev Enable signature using the ERC-7702 signer.
/// @dev Enable signature using the EIP-7702 signer.
function _rawSignatureValidation(
bytes32 hash,
bytes calldata signature
Expand Down
2 changes: 1 addition & 1 deletion contracts/mocks/docs/ERC4626Fees.sol
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ abstract contract ERC4626Fees is ERC4626 {
}
}

/// @dev Send exit fee to {_exitFeeRecipient}. See {IERC4626-_deposit}.
/// @dev Send exit fee to {_exitFeeRecipient}. See {IERC4626-_withdraw}.
function _withdraw(
address caller,
address receiver,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// contracts/MyAccountERC7702.sol
// contracts/MyAccountEIP7702.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

Expand All @@ -8,7 +8,7 @@ import {ERC1155Holder} from "../../../token/ERC1155/utils/ERC1155Holder.sol";
import {ERC7821} from "../../../account/extensions/draft-ERC7821.sol";
import {SignerEIP7702} from "../../../utils/cryptography/signers/SignerEIP7702.sol";

contract MyAccountERC7702 is Account, SignerEIP7702, ERC7821, ERC721Holder, ERC1155Holder {
contract MyAccountEIP7702 is Account, SignerEIP7702, ERC7821, ERC721Holder, ERC1155Holder {
/// @dev Allows the entry point as an authorized executor.
function _erc7821AuthorizedExecutor(
address caller,
Expand Down
4 changes: 2 additions & 2 deletions contracts/mocks/proxy/ClashingImplementation.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
pragma solidity ^0.8.20;

/**
* @dev Implementation contract with a payable changeAdmin(address) function made to clash with
* TransparentUpgradeableProxy's to test correct functioning of the Transparent Proxy feature.
* @dev Implementation contract with a payable upgradeToAndCall(address,bytes) function made to clash with
* TransparentUpgradeableProxy's interface to test correct functioning of the Transparent Proxy pattern.
*/
contract ClashingImplementation {
event ClashingImplementationCall();
Expand Down
2 changes: 1 addition & 1 deletion contracts/proxy/ERC1967/ERC1967Utils.sol
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ library ERC1967Utils {
* @dev Returns the current admin.
*
* TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using
* the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
* the https://ethereum.org/developers/docs/apis/json-rpc/#eth_getstorageat[`eth_getStorageAt`] RPC call.
* `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
*/
function getAdmin() internal view returns (address) {
Expand Down
4 changes: 2 additions & 2 deletions contracts/proxy/README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ There are two alternative ways to add upgradeability to an ERC-1967 proxy. Their

CAUTION: Using upgradeable proxies correctly and securely is a difficult task that requires deep knowledge of the proxy pattern, Solidity, and the EVM. Unless you want a lot of low level control, we recommend using the xref:upgrades-plugins::index.adoc[OpenZeppelin Upgrades Plugins] for Hardhat and Foundry.

A different family of proxies are beacon proxies. This pattern, popularized by Dharma, allows multiple proxies to be upgraded to a different implementation in a single transaction.
A different family of proxies is beacon proxies. This pattern, popularized by Dharma, allows multiple proxies to be upgraded to a different implementation in a single transaction.

- {BeaconProxy}: A proxy that retrieves its implementation from a beacon contract.
- {UpgradeableBeacon}: A beacon contract with a built in admin that can upgrade the {BeaconProxy} pointing to it.
- {UpgradeableBeacon}: A beacon contract with a built-in admin that can upgrade the {BeaconProxy} pointing to it.

In this pattern, the proxy contract doesn't hold the implementation address in storage like an ERC-1967 proxy. Instead, the address is stored in a separate beacon contract. The `upgrade` operations are sent to the beacon instead of to the proxy contract, and all proxies that follow that beacon are automatically upgraded.

Expand Down
8 changes: 2 additions & 6 deletions contracts/token/ERC20/extensions/ERC20FlashMint.sol
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,10 @@ abstract contract ERC20FlashMint is ERC20, IERC3156FlashLender {
* @dev Returns the fee applied when doing flash loans. By default this
* implementation has 0 fees. This function can be overloaded to make
* the flash loan mechanism deflationary.
* @param token The token to be flash loaned.
* @param value The amount of tokens to be loaned.
*
* @return The fees applied to the corresponding flash loan.
*/
function _flashFee(address token, uint256 value) internal view virtual returns (uint256) {
// silence warning about unused variable without the addition of bytecode.
token;
value;
function _flashFee(address /*token*/, uint256 /*value*/) internal view virtual returns (uint256) {
return 0;
}

Expand Down
4 changes: 2 additions & 2 deletions contracts/token/ERC20/extensions/ERC4626.sol
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,12 @@ abstract contract ERC4626 is ERC20, IERC4626 {
error ERC4626ExceededMaxMint(address receiver, uint256 shares, uint256 max);

/**
* @dev Attempted to withdraw more assets than the max amount for `receiver`.
* @dev Attempted to withdraw more assets than the max amount for `owner`.
*/
error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max);

/**
* @dev Attempted to redeem more shares than the max amount for `receiver`.
* @dev Attempted to redeem more shares than the max amount for `owner`.
*/
error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max);

Expand Down
3 changes: 2 additions & 1 deletion contracts/token/ERC721/extensions/ERC721Enumerable.sol
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,8 @@ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
}

/**
* See {ERC721-_increaseBalance}. We need that to account tokens that were minted in batch
* See {ERC721-_increaseBalance}. We need to forbid batch minting because the enumeration
* extension does not support it.
*/
function _increaseBalance(address account, uint128 amount) internal virtual override {
if (amount > 0) {
Expand Down
4 changes: 2 additions & 2 deletions contracts/utils/LowLevelCall.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ library LowLevelCall {
return callNoReturn(target, 0, data);
}

/// @dev Same as {callNoReturn}, but allows to specify the value to be sent in the call.
/// @dev Same as {xref-LowLevelCall-callNoReturn-address-uint256-bytes-}[`callNoReturn`], but allows to specify the value to be sent in the call.
function callNoReturn(address target, uint256 value, bytes memory data) internal returns (bool success) {
assembly ("memory-safe") {
success := call(gas(), target, value, add(data, 0x20), mload(data), 0x00, 0x00)
Expand All @@ -34,7 +34,7 @@ library LowLevelCall {
return callReturn64Bytes(target, 0, data);
}

/// @dev Same as {callReturnBytes32Pair}, but allows to specify the value to be sent in the call.
/// @dev Same as {xref-LowLevelCall-callReturn64Bytes-address-uint256-bytes-}[`callReturn64Bytes`], but allows to specify the value to be sent in the call.
function callReturn64Bytes(
address target,
uint256 value,
Expand Down
4 changes: 2 additions & 2 deletions contracts/utils/cryptography/SignatureChecker.sol
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ library SignatureChecker {
// Encoded calldata is :
// [ 0x00 - 0x03 ] <selector>
// [ 0x04 - 0x23 ] <hash>
// [ 0x24 - 0x44 ] <signature offset> (0x40)
// [ 0x44 - 0x64 ] <signature length>
// [ 0x24 - 0x43 ] <signature offset> (0x40)
// [ 0x44 - 0x63 ] <signature length>
// [ 0x64 - ... ] <signature data>
let ptr := mload(0x40)
mstore(ptr, selector)
Expand Down
2 changes: 1 addition & 1 deletion contracts/utils/cryptography/signers/SignerEIP7702.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {AbstractSigner} from "./AbstractSigner.sol";
import {ECDSA} from "../ECDSA.sol";

/**
* @dev Implementation of {AbstractSigner} for implementation for an EOA. Useful for ERC-7702 accounts.
* @dev Implementation of {AbstractSigner} for implementation for an EOA. Useful for EIP-7702 accounts.
*
* @custom:stateless
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {IERC7913SignatureVerifier} from "../../../interfaces/IERC7913.sol";
* The key is expected to be a 64-byte concatenation of the P256 public key coordinates (qx || qy).
* The signature is expected to be an abi-encoded {WebAuthn-WebAuthnAuth} struct.
*
* Uses {WebAuthn-verifyMinimal} for signature verification, which performs the essential
* Uses {WebAuthn-verify} for signature verification, which performs the essential
* WebAuthn checks: type validation, challenge matching, and cryptographic signature verification.
*
* NOTE: Wallets that may require default P256 validation may install a P256 verifier separately.
Expand Down
6 changes: 3 additions & 3 deletions contracts/utils/math/SafeCast.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ pragma solidity ^0.8.20;
*/
library SafeCast {
/**
* @dev Value doesn't fit in an uint of `bits` size.
* @dev Value doesn't fit in a uint of `bits` size.
*/
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);

/**
* @dev An int value doesn't fit in an uint of `bits` size.
* @dev An int value doesn't fit in a uint of `bits` size.
*/
error SafeCastOverflowedIntToUint(int256 value);

Expand All @@ -33,7 +33,7 @@ library SafeCast {
error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);

/**
* @dev An uint value doesn't fit in an int of `bits` size.
* @dev A uint value doesn't fit in an int of `bits` size.
*/
error SafeCastOverflowedUintToInt(uint256 value);

Expand Down
10 changes: 10 additions & 0 deletions contracts/utils/structs/CircularBuffer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,19 @@ import {Panic} from "../Panic.sol";
*
* // Declare a buffer storage variable
* CircularBuffer.Bytes32CircularBuffer private myBuffer;
*
* constructor() {
* myBuffer.setup(16); // Initialize the buffer with a non-zero fixed size (e.g., 16)
* }
*
* function pushValue(bytes32 value) external {
* myBuffer.push(value); // Safe to push because the buffer was initialized in the constructor
* }
* }
* ```
*
* NOTE: Make sure to call {setup} on your buffer during construction/initialization
*
* _Available since v5.1._
*/
library CircularBuffer {
Expand Down
9 changes: 4 additions & 5 deletions contracts/utils/structs/Heap.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
pragma solidity ^0.8.24;

import {Math} from "../math/Math.sol";
import {SafeCast} from "../math/SafeCast.sol";
import {Comparators} from "../Comparators.sol";
import {Arrays} from "../Arrays.sol";
import {Panic} from "../Panic.sol";
Expand All @@ -18,9 +17,10 @@ import {StorageSlot} from "../StorageSlot.sol";
* index i is the child of the node at index (i-1)/2 and the parent of nodes at index 2*i+1 and 2*i+2. Each node
* stores an element of the heap.
*
* The structure is ordered so that each node is bigger than its parent. An immediate consequence is that the
* highest priority value is the one at the root. This value can be looked up in constant time (O(1)) at
* `heap.tree[0]`
* The structure is ordered so that, per the comparator, each node has lower priority than its parent; as a
* consequence, the highest-priority value is at the root. This value can be looked up in constant time (O(1)) at
* `heap.tree[0]`. By default, the comparator is `Comparators.lt`, which treats smaller values as higher priority
* (min-heap). Using `Comparators.gt` yields a max-heap.
*
* The structure is designed to perform the following operations with the corresponding complexities:
*
Expand All @@ -40,7 +40,6 @@ import {StorageSlot} from "../StorageSlot.sol";
library Heap {
using Arrays for *;
using Math for *;
using SafeCast for *;

/**
* @dev Binary heap that supports values of type uint256.
Expand Down
Loading