From 24fc709533faffffed9cf7a0ab89c3ddeb8aed3f Mon Sep 17 00:00:00 2001 From: Hadrien Croubois Date: Tue, 23 Aug 2022 17:43:03 +0200 Subject: [PATCH] Set up codespell (#3643) --- .github/workflows/checks.yml | 11 +++++++ CHANGELOG.md | 2 +- certora/specs/GovernorBase.spec | 31 +++++++++---------- .../GovernorVotesQuorumFraction.sol | 2 +- contracts/token/ERC20/extensions/ERC4626.sol | 6 ++-- contracts/token/ERC721/ERC721.sol | 4 +-- .../ERC20/extensions/ERC20FlashMint.test.js | 2 +- 7 files changed, 34 insertions(+), 24 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 2bb494c35..fd8d5e31b 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -76,3 +76,14 @@ jobs: - name: Set up environment uses: ./.github/actions/setup - uses: crytic/slither-action@v0.1.1 + + codespell: + if: github.repository != 'OpenZeppelin/openzeppelin-contracts-upgradeable' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Run CodeSpell + uses: codespell-project/actions-codespell@v1.0 + with: + check_filenames: true + skip: package-lock.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 24653c39d..e54573795 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -549,7 +549,7 @@ Refer to the table below to adjust your inheritance list. * Now conforming to a 4-space indentation code style. ([1508](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1508)) * `ERC20`: more gas efficient due to removed redundant `require`s. ([#1409](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1409)) * `ERC721`: fixed a bug that prevented internal data structures from being properly cleaned, missing potential gas refunds. ([#1539](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1539) and [#1549](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1549)) - * `ERC721`: general gas savings on `transferFrom`, `_mint` and `_burn`, due to redudant `require`s and `SSTORE`s. ([#1549](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1549)) + * `ERC721`: general gas savings on `transferFrom`, `_mint` and `_burn`, due to redundant `require`s and `SSTORE`s. ([#1549](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1549)) ### Bugfixes diff --git a/certora/specs/GovernorBase.spec b/certora/specs/GovernorBase.spec index 3dfc18037..de728ddac 100644 --- a/certora/specs/GovernorBase.spec +++ b/certora/specs/GovernorBase.spec @@ -98,26 +98,26 @@ function helperFunctionsWithRevert(uint256 proposalId, method f, env e) { // To use env with general preserved block disable type checking [--disableLocalTypeChecking] invariant startAndEndDatesNonZero(uint256 pId) proposalSnapshot(pId) != 0 <=> proposalDeadline(pId) != 0 - { preserved with (env e){ + { preserved with (env e){ require e.block.number > 0; }} - + /* - * If a proposal is canceled it must have a start and an end date + * If a proposal is canceled it must have a start and an end date */ // To use env with general preserved block disable type checking [--disableLocalTypeChecking] invariant canceledImplyStartAndEndDateNonZero(uint pId) isCanceled(pId) => proposalSnapshot(pId) != 0 - {preserved with (env e){ + {preserved with (env e){ require e.block.number > 0; }} /* - * If a proposal is executed it must have a start and an end date + * If a proposal is executed it must have a start and an end date */ - // To use env with general preserved block disable type checking [--disableLocalTypeChecking] + // To use env with general preserved block disable type checking [--disableLocalTypeChecking] invariant executedImplyStartAndEndDateNonZero(uint pId) isExecuted(pId) => proposalSnapshot(pId) != 0 { preserved with (env e){ @@ -143,7 +143,7 @@ invariant voteStartBeforeVoteEnd(uint256 pId) /* * A proposal cannot be both executed and canceled simultaneously. */ -invariant noBothExecutedAndCanceled(uint256 pId) +invariant noBothExecutedAndCanceled(uint256 pId) !isExecuted(pId) || !isCanceled(pId) @@ -154,10 +154,10 @@ rule executionOnlyIfQuoromReachedAndVoteSucceeded(uint256 pId, env e, method f){ bool isExecutedBefore = isExecuted(pId); bool quorumReachedBefore = _quorumReached(e, pId); bool voteSucceededBefore = _voteSucceeded(pId); - + calldataarg args; f(e, args); - + bool isExecutedAfter = isExecuted(pId); assert (!isExecutedBefore && isExecutedAfter) => (quorumReachedBefore && voteSucceededBefore), "quorum was changed"; } @@ -177,16 +177,16 @@ rule executionOnlyIfQuoromReachedAndVoteSucceeded(uint256 pId, env e, method f){ // the fact that the 3 functions themselves makes no changes, but rather call an internal function to execute. // That means that we do not check those 3 functions directly, however for castVote & castVoteWithReason it is quite trivial // to understand why this is ok. For castVoteBySig we basically assume that the signature referendum is correct without checking it. - // We could check each function separately and pass the rule, but that would have uglyfied the code with no concrete + // We could check each function separately and pass the rule, but that would have uglyfied the code with no concrete // benefit, as it is evident that nothing is happening in the first 2 functions (calling a view function), and we do not desire to check the signature verification. rule doubleVoting(uint256 pId, uint8 sup, method f) { env e; - address user = e.msg.sender; + address user = e.msg.sender; bool votedCheck = hasVoted(e, pId, user); castVote@withrevert(e, pId, sup); - assert votedCheck => lastReverted, "double voting accured"; + assert votedCheck => lastReverted, "double voting occurred"; } @@ -207,7 +207,7 @@ rule immutableFieldsAfterProposalCreation(uint256 pId, method f) { uint256 _voteEnd = proposalDeadline(pId); require proposalCreated(pId); // startDate > 0 - + env e; calldataarg arg; f(e, arg); @@ -226,7 +226,7 @@ rule noStartBeforeCreation(uint256 pId) { // This line makes sure that we see only cases where start date is changed from 0, i.e. creation of proposal // We proved in immutableFieldsAfterProposalCreation that once dates set for proposal, it cannot be changed require !proposalCreated(pId); // previousStart == 0; - + env e; calldataarg args; propose(e, args); @@ -273,7 +273,7 @@ rule noExecuteOrCancelBeforeDeadline(uint256 pId, method f){ * All proposal specific (non-view) functions should revert if proposal is executed */ // In this rule we show that if a function is executed, i.e. execute() was called on the proposal ID, - // non of the proposal specific functions can make changes again. In executedOnlyAfterExecuteFunc + // non of the proposal specific functions can make changes again. In executedOnlyAfterExecuteFunc // we connected the executed attribute to the execute() function, showing that only execute() can // change it, and that it will always change it. rule allFunctionsRevertIfExecuted(method f) filtered { f -> @@ -331,4 +331,3 @@ rule executedOnlyAfterExecuteFunc(address[] targets, uint256[] values, bytes[] c bool executedAfter = isExecuted(pId); assert(executedAfter != executedBefore => f.selector == execute(address[], uint256[], bytes[], bytes32).selector, "isExecuted only changes in the execute method"); } - diff --git a/contracts/governance/extensions/GovernorVotesQuorumFraction.sol b/contracts/governance/extensions/GovernorVotesQuorumFraction.sol index e5f0888c0..1f19fc33e 100644 --- a/contracts/governance/extensions/GovernorVotesQuorumFraction.sol +++ b/contracts/governance/extensions/GovernorVotesQuorumFraction.sol @@ -55,7 +55,7 @@ abstract contract GovernorVotesQuorumFraction is GovernorVotes { return latest._value; } - // Otherwize, do the binary search + // Otherwise, do the binary search return _quorumNumeratorHistory.getAtBlock(blockNumber); } diff --git a/contracts/token/ERC20/extensions/ERC4626.sol b/contracts/token/ERC20/extensions/ERC4626.sol index c77028564..fd6e1ab40 100644 --- a/contracts/token/ERC20/extensions/ERC4626.sol +++ b/contracts/token/ERC20/extensions/ERC4626.sol @@ -147,7 +147,7 @@ abstract contract ERC4626 is ERC20, IERC4626 { * @dev Internal conversion function (from assets to shares) with support for rounding direction. * * Will revert if assets > 0, totalSupply > 0 and totalAssets = 0. That corresponds to a case where any asset - * would represent an infinite amout of shares. + * would represent an infinite amount of shares. */ function _convertToShares(uint256 assets, Math.Rounding rounding) internal view virtual returns (uint256 shares) { uint256 supply = totalSupply(); @@ -182,7 +182,7 @@ abstract contract ERC4626 is ERC20, IERC4626 { // calls the vault, which is assumed not malicious. // // Conclusion: we need to do the transfer before we mint so that any reentrancy would happen before the - // assets are transfered and before the shares are minted, which is a valid state. + // assets are transferred and before the shares are minted, which is a valid state. // slither-disable-next-line reentrancy-no-eth SafeERC20.safeTransferFrom(_asset, caller, address(this), assets); _mint(receiver, shares); @@ -209,7 +209,7 @@ abstract contract ERC4626 is ERC20, IERC4626 { // calls the vault, which is assumed not malicious. // // Conclusion: we need to do the transfer after the burn so that any reentrancy would happen after the - // shares are burned and after the assets are transfered, which is a valid state. + // shares are burned and after the assets are transferred, which is a valid state. _burn(owner, shares); SafeERC20.safeTransfer(_asset, receiver, assets); diff --git a/contracts/token/ERC721/ERC721.sol b/contracts/token/ERC721/ERC721.sol index 2932ab4a9..ed4975ee4 100644 --- a/contracts/token/ERC721/ERC721.sol +++ b/contracts/token/ERC721/ERC721.sol @@ -324,7 +324,7 @@ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { unchecked { // Cannot overflow, as that would require more tokens to be burned/transferred - // out than the owner initialy received through minting and transferring in. + // out than the owner initially received through minting and transferring in. _balances[owner] -= 1; } delete _owners[tokenId]; @@ -355,7 +355,7 @@ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { _beforeTokenTransfer(from, to, tokenId); - // Check that tokenId was not transfered by `_beforeTokenTransfer` hook + // Check that tokenId was not transferred by `_beforeTokenTransfer` hook require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); // Clear approvals from the previous owner diff --git a/test/token/ERC20/extensions/ERC20FlashMint.test.js b/test/token/ERC20/extensions/ERC20FlashMint.test.js index ca3ea407f..d08464dec 100644 --- a/test/token/ERC20/extensions/ERC20FlashMint.test.js +++ b/test/token/ERC20/extensions/ERC20FlashMint.test.js @@ -97,7 +97,7 @@ contract('ERC20FlashMint', function (accounts) { const receiverInitialBalance = new BN(200000); const flashFee = new BN(5000); - beforeEach('init reciever balance & set flash fee', async function () { + beforeEach('init receiver balance & set flash fee', async function () { this.receiver = await ERC3156FlashBorrowerMock.new(true, true); const receipt = await this.token.mint(this.receiver.address, receiverInitialBalance); await expectEvent(receipt, 'Transfer', { from: ZERO_ADDRESS, to: this.receiver.address, value: receiverInitialBalance });