Skip to content

Commit

Permalink
Fix linter errors
Browse files Browse the repository at this point in the history
  • Loading branch information
mmv08 committed Aug 30, 2023
1 parent cf843da commit c43b073
Show file tree
Hide file tree
Showing 34 changed files with 138 additions and 106 deletions.
3 changes: 2 additions & 1 deletion .solhint.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"not-rely-on-time": "off",
"reason-string": "off",
"no-empty-blocks": "off",
"avoid-low-level-calls": "off"
"avoid-low-level-calls": "off",
"custom-errors": "off"
}
}
32 changes: 18 additions & 14 deletions contracts/Safe.sol
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity >=0.7.0 <0.9.0;

import "./base/ModuleManager.sol";
import "./base/OwnerManager.sol";
import "./base/FallbackManager.sol";
import "./base/GuardManager.sol";
import "./common/NativeCurrencyPaymentFallback.sol";
import "./common/Singleton.sol";
import "./common/SignatureDecoder.sol";
import "./common/SecuredTokenTransfer.sol";
import "./common/StorageAccessible.sol";
import "./interfaces/ISignatureValidator.sol";
import "./external/SafeMath.sol";
import {Guard} from "./base/GuardManager.sol";
import {ModuleManager} from "./base/ModuleManager.sol";
import {OwnerManager} from "./base/OwnerManager.sol";
import {FallbackManager} from "./base/FallbackManager.sol";
import {NativeCurrencyPaymentFallback} from "./common/NativeCurrencyPaymentFallback.sol";
import {Singleton} from "./common/Singleton.sol";
import {SignatureDecoder} from "./common/SignatureDecoder.sol";
import {SecuredTokenTransfer} from "./common/SecuredTokenTransfer.sol";
import {StorageAccessible} from "./common/StorageAccessible.sol";
import {Enum} from "./common/Enum.sol";
import {ISignatureValidator, ISignatureValidatorConstants} from "./interfaces/ISignatureValidator.sol";
import {SafeMath} from "./external/SafeMath.sol";

/**
* @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.
Expand Down Expand Up @@ -307,21 +308,23 @@ contract Safe is

// Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length
uint256 contractSignatureLen;
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
contractSignatureLen := mload(add(add(signatures, s), 0x20))
}
/* solhint-enable no-inline-assembly */
require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, "GS023");

// Check signature
bytes memory contractSignature;
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
// The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s
contractSignature := add(add(signatures, s), 0x20)
}
/* solhint-enable no-inline-assembly */
require(ISignatureValidator(currentOwner).isValidSignature(dataHash, contractSignature) == EIP1271_MAGIC_VALUE, "GS024");
} else if (v == 1) {
// If v is 1 then it is an approved hash
Expand Down Expand Up @@ -361,11 +364,12 @@ contract Safe is
*/
function domainSeparator() public view returns (bytes32) {
uint256 chainId;
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
chainId := chainid()
}
/* solhint-enable no-inline-assembly */

return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, chainId, this));
}
Expand Down
2 changes: 1 addition & 1 deletion contracts/SafeL2.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity >=0.7.0 <0.9.0;

import "./Safe.sol";
import {Safe, Enum} from "./Safe.sol";

/**
* @title SafeL2 - An implementation of the Safe contract that emits additional events on transaction executions.
Expand Down
11 changes: 6 additions & 5 deletions contracts/accessors/SimulateTxAccessor.sol
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity >=0.7.0 <0.9.0;

import "../base/Executor.sol";
import {Executor, Enum} from "../base/Executor.sol";

/**
* @title Simulate Transaction Accessor.
* @notice Can be used with StorageAccessible to simulate Safe transactions.
* @author Richard Meissner - @rmeissner
*/
contract SimulateTxAccessor is Executor {
address private immutable accessorSingleton;
address private immutable ACCESSOR_SINGLETON;

constructor() {
accessorSingleton = address(this);
ACCESSOR_SINGLETON = address(this);
}

/**
* @notice Modifier to make a function callable via delegatecall only.
* If the function is called via a regular call, it will revert.
*/
modifier onlyDelegateCall() {
require(address(this) != accessorSingleton, "SimulateTxAccessor should only be called via delegatecall");
require(address(this) != ACCESSOR_SINGLETON, "SimulateTxAccessor should only be called via delegatecall");
_;
}

Expand Down Expand Up @@ -48,7 +48,7 @@ contract SimulateTxAccessor is Executor {
uint256 startGas = gasleft();
success = execute(to, value, data, operation, gasleft());
estimate = startGas - gasleft();
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
// Load free memory location
Expand All @@ -63,5 +63,6 @@ contract SimulateTxAccessor is Executor {
// Point the return data to the correct memory location
returnData := ptr
}
/* solhint-enable no-inline-assembly */
}
}
8 changes: 5 additions & 3 deletions contracts/base/Executor.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity >=0.7.0 <0.9.0;
import "../common/Enum.sol";
import {Enum} from "../common/Enum.sol";

/**
* @title Executor - A contract that can execute transactions
Expand All @@ -26,17 +26,19 @@ abstract contract Executor {
uint256 txGas
) internal returns (bool success) {
if (operation == Enum.Operation.DelegateCall) {
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)
}
/* solhint-enable no-inline-assembly */
} else {
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)
}
/* solhint-enable no-inline-assembly */
}
}
}
8 changes: 5 additions & 3 deletions contracts/base/FallbackManager.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity >=0.7.0 <0.9.0;

import "../common/SelfAuthorized.sol";
import {SelfAuthorized} from "../common/SelfAuthorized.sol";

/**
* @title Fallback Manager - A contract managing fallback calls made to this contract
Expand Down Expand Up @@ -34,11 +34,12 @@ abstract contract FallbackManager is SelfAuthorized {
require(handler != address(this), "GS400");

bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
sstore(slot, handler)
}
/* solhint-enable no-inline-assembly */
}

/**
Expand All @@ -61,7 +62,7 @@ abstract contract FallbackManager is SelfAuthorized {
// solhint-disable-next-line payable-fallback,no-complex-fallback
fallback() external {
bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
// When compiled with the optimizer, the compiler relies on a certain assumptions on how the
Expand Down Expand Up @@ -96,5 +97,6 @@ abstract contract FallbackManager is SelfAuthorized {
}
return(returnDataPtr, returndatasize())
}
/* solhint-enable no-inline-assembly */
}
}
13 changes: 8 additions & 5 deletions contracts/base/GuardManager.sol
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
// SPDX-License-Identifier: LGPL-3.0-only
/* solhint-disable one-contract-per-file */
pragma solidity >=0.7.0 <0.9.0;

import "../common/Enum.sol";
import "../common/SelfAuthorized.sol";
import "../interfaces/IERC165.sol";
import {Enum} from "../common/Enum.sol";
import {SelfAuthorized} from "../common/SelfAuthorized.sol";
import {IERC165} from "../interfaces/IERC165.sol";

/// @title Guard Interface
interface Guard is IERC165 {
Expand Down Expand Up @@ -89,11 +90,12 @@ abstract contract GuardManager is SelfAuthorized {
require(Guard(guard).supportsInterface(type(Guard).interfaceId), "GS300");
}
bytes32 slot = GUARD_STORAGE_SLOT;
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
sstore(slot, guard)
}
/* solhint-enable no-inline-assembly */
emit ChangedGuard(guard);
}

Expand All @@ -106,10 +108,11 @@ abstract contract GuardManager is SelfAuthorized {
*/
function getGuard() internal view returns (address guard) {
bytes32 slot = GUARD_STORAGE_SLOT;
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
guard := sload(slot)
}
/* solhint-enable no-inline-assembly */
}
}
17 changes: 10 additions & 7 deletions contracts/base/ModuleManager.sol
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity >=0.7.0 <0.9.0;
import "../common/Enum.sol";
import "../common/SelfAuthorized.sol";
import "./Executor.sol";
import "./GuardManager.sol";
import {Enum} from "../common/Enum.sol";
import {SelfAuthorized} from "../common/SelfAuthorized.sol";
import {Executor} from "./Executor.sol";
import {GuardManager, Guard} from "./GuardManager.sol";

/**
* @title Module Manager - A contract managing Safe modules
Expand Down Expand Up @@ -119,7 +119,7 @@ abstract contract ModuleManager is SelfAuthorized, Executor, GuardManager {
Enum.Operation operation
) public returns (bool success, bytes memory returnData) {
success = execTransactionFromModule(to, value, data, operation);
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
// Load free memory location
Expand All @@ -134,6 +134,7 @@ abstract contract ModuleManager is SelfAuthorized, Executor, GuardManager {
// Point the return data to the correct memory location
returnData := ptr
}
/* solhint-enable no-inline-assembly */
}

/**
Expand Down Expand Up @@ -180,11 +181,12 @@ abstract contract ModuleManager is SelfAuthorized, Executor, GuardManager {
next = array[moduleCount - 1];
}
// Set correct size of returned array
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
mstore(array, moduleCount)
}
/* solhint-enable no-inline-assembly */
}

/**
Expand All @@ -195,11 +197,12 @@ abstract contract ModuleManager is SelfAuthorized, Executor, GuardManager {
*/
function isContract(address account) internal view returns (bool) {
uint256 size;
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
size := extcodesize(account)
}
/* solhint-enable no-inline-assembly */
return size > 0;
}
}
2 changes: 1 addition & 1 deletion contracts/base/OwnerManager.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity >=0.7.0 <0.9.0;
import "../common/SelfAuthorized.sol";
import {SelfAuthorized} from "../common/SelfAuthorized.sol";

/**
* @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.
Expand Down
1 change: 0 additions & 1 deletion contracts/common/SecuredTokenTransfer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ abstract contract SecuredTokenTransfer {
// 0xa9059cbb - keccack("transfer(address,uint256)")
bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);
// solhint-disable-next-line no-inline-assembly
/// @solidity memory-safe-assembly
assembly {
// We write the return value to scratch space.
// See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory
Expand Down
3 changes: 2 additions & 1 deletion contracts/common/SignatureDecoder.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,14 @@ abstract contract SignatureDecoder {
* @return s Output value s of the signature.
*/
function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
let signaturePos := mul(0x41, pos)
r := mload(add(signatures, add(signaturePos, 0x20)))
s := mload(add(signatures, add(signaturePos, 0x40)))
v := byte(0, mload(add(signatures, add(signaturePos, 0x60))))
}
/* solhint-enable no-inline-assembly */
}
}
6 changes: 4 additions & 2 deletions contracts/common/StorageAccessible.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,13 @@ abstract contract StorageAccessible {
function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {
bytes memory result = new bytes(length * 32);
for (uint256 index = 0; index < length; index++) {
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
let word := sload(add(offset, index))
mstore(add(add(result, 0x20), mul(index, 0x20)), word)
}
/* solhint-enable no-inline-assembly */
}
return result;
}
Expand All @@ -39,7 +40,7 @@ abstract contract StorageAccessible {
* @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).
*/
function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {
// solhint-disable-next-line no-inline-assembly
/* solhint-disable no-inline-assembly */
/// @solidity memory-safe-assembly
assembly {
let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)
Expand All @@ -50,5 +51,6 @@ abstract contract StorageAccessible {
returndatacopy(add(ptr, 0x40), 0, returndatasize())
revert(ptr, add(returndatasize(), 0x40))
}
/* solhint-enable no-inline-assembly */
}
}
6 changes: 3 additions & 3 deletions contracts/examples/guards/DebugTransactionGuard.sol
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity >=0.7.0 <0.9.0;

import "../../common/Enum.sol";
import "../../base/GuardManager.sol";
import "../../Safe.sol";
import {Enum} from "../../common/Enum.sol";
import {BaseGuard} from "../../base/GuardManager.sol";
import {Safe} from "../../Safe.sol";

/**
* @title Debug Transaction Guard - Emits transaction events with extended information.
Expand Down

0 comments on commit c43b073

Please sign in to comment.