From f5f9923833301ddb1b470cc314e3f3e260fd80cd Mon Sep 17 00:00:00 2001 From: hueso Date: Wed, 24 May 2023 14:43:33 -0300 Subject: [PATCH] mark assembly blocks as memory-safe --- contracts/core/BaseUtils.sol | 22 +++++++++++----------- contracts/core/OwnerSettings.sol | 18 +++++++++--------- contracts/p2pix.sol | 12 ++++++------ 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/contracts/core/BaseUtils.sol b/contracts/core/BaseUtils.sol index 0b5fd68..4456607 100644 --- a/contracts/core/BaseUtils.sol +++ b/contracts/core/BaseUtils.sol @@ -20,7 +20,7 @@ abstract contract BaseUtils is /// ███ Helper FX ██████████████████████████████████████████████████████████ function _setUsedTransactions(bytes32 message) internal { - assembly { + assembly ("memory-safe") { sstore(message, true) } } @@ -28,7 +28,7 @@ abstract contract BaseUtils is function usedTransactions( bytes32 message ) public view returns (bool used) { - assembly { + assembly ("memory-safe") { used := sload(message) } } @@ -71,7 +71,7 @@ abstract contract BaseUtils is function _castBool( bool _valid ) internal pure returns (uint256 _validCasted) { - assembly { + assembly ("memory-safe") { _validCasted := _valid } } @@ -80,7 +80,7 @@ abstract contract BaseUtils is string memory str ) public pure returns (bytes32 strEnc) { bytes memory enc = bytes(abi.encodePacked(str)); - assembly { + assembly ("memory-safe") { if lt(0x20, mload(enc)) { invalid() } @@ -94,7 +94,7 @@ abstract contract BaseUtils is uint256 _packed, bytes32 _pixTarget ) internal { - assembly { + assembly ("memory-safe") { mstore(0x20, _erc20) mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) mstore(0x00, _sellerKey) @@ -109,7 +109,7 @@ abstract contract BaseUtils is ERC20 _erc20, uint256 _packed ) internal { - assembly { + assembly ("memory-safe") { mstore(0x20, _erc20) mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) mstore(0x00, _sellerKey) @@ -123,7 +123,7 @@ abstract contract BaseUtils is ERC20 _erc20, uint256 _amount ) internal { - assembly { + assembly ("memory-safe") { mstore(0x20, _erc20) mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) mstore(0x00, _sellerKey) @@ -137,7 +137,7 @@ abstract contract BaseUtils is ERC20 _erc20, uint256 _amount ) internal { - assembly { + assembly ("memory-safe") { mstore(0x20, _erc20) mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) mstore(0x00, _sellerKey) @@ -150,7 +150,7 @@ abstract contract BaseUtils is address _sellerKey, ERC20 _erc20 ) internal view returns (uint256 _packed) { - assembly { + assembly ("memory-safe") { mstore(0x20, _erc20) mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) mstore(0x00, _sellerKey) @@ -165,7 +165,7 @@ abstract contract BaseUtils is address _addr ) public pure returns (uint256 _key) { // _key = uint256(uint160(address(_addr))) << 12; - assembly { + assembly ("memory-safe") { _key := shl(0xc, _addr) } } @@ -174,7 +174,7 @@ abstract contract BaseUtils is uint256 _key ) public pure returns (address _addr) { // _addr = address(uint160(uint256(_key >> 12))); - assembly { + assembly ("memory-safe") { _addr := shr(0xc, _key) } } diff --git a/contracts/core/OwnerSettings.sol b/contracts/core/OwnerSettings.sol index 2e2879a..6bd9f82 100644 --- a/contracts/core/OwnerSettings.sol +++ b/contracts/core/OwnerSettings.sol @@ -46,7 +46,7 @@ abstract contract OwnerSettings is address[] memory forwarders, bool[] memory states ) external onlyOwner { - assembly { + assembly ("memory-safe") { // first 32 bytes eq to array's length let fLen := mload(forwarders) // halts execution if forwarders.length eq 0 @@ -95,7 +95,7 @@ abstract contract OwnerSettings is function setReputation( IReputation _reputation ) public onlyOwner { - assembly { + assembly ("memory-safe") { sstore(reputation.slot, _reputation) } emit ReputationUpdated(address(_reputation)); @@ -104,7 +104,7 @@ abstract contract OwnerSettings is function setDefaultLockBlocks( uint256 _blocks ) public onlyOwner { - assembly { + assembly ("memory-safe") { sstore(defaultLockBlocks.slot, _blocks) } emit LockBlocksUpdated(_blocks); @@ -113,7 +113,7 @@ abstract contract OwnerSettings is function setValidSigners( address[] memory _validSigners ) public onlyOwner { - assembly { + assembly ("memory-safe") { let i := add(_validSigners, 0x20) let end := add(i, shl(0x05, mload(_validSigners))) for { @@ -137,7 +137,7 @@ abstract contract OwnerSettings is bool[] memory _states ) public onlyOwner { /* Yul Impl */ - assembly { + assembly ("memory-safe") { // first 32 bytes eq to array's length let tLen := mload(_tokens) // NoTokens() @@ -181,7 +181,7 @@ abstract contract OwnerSettings is function validBacenSigners( uint256 signer ) public view returns (bool valid) { - assembly { + assembly ("memory-safe") { valid := sload(signer) } } @@ -189,7 +189,7 @@ abstract contract OwnerSettings is function sellerAllowList( address sellerKey ) public view returns (bytes32 root) { - assembly { + assembly ("memory-safe") { mstore(0x0c, _SELLER_ALLOWLIST_SLOT_SEED) mstore(0x00, sellerKey) root := sload(keccak256(0x00, 0x20)) @@ -199,7 +199,7 @@ abstract contract OwnerSettings is function allowedERC20s( ERC20 erc20 ) public view returns (bool state) { - assembly { + assembly ("memory-safe") { mstore(0x0c, _ALLOWED_ERC20_SLOT_SEED) mstore(0x00, erc20) state := sload(keccak256(0x0c, 0x20)) @@ -215,7 +215,7 @@ abstract contract OwnerSettings is _userCredit ); bool success; - assembly { + assembly ("memory-safe") { success := staticcall( // gas gas(), diff --git a/contracts/p2pix.sol b/contracts/p2pix.sol index bb47baf..28fe041 100644 --- a/contracts/p2pix.sol +++ b/contracts/p2pix.sol @@ -297,7 +297,7 @@ contract P2PIX is BaseUtils { } } - assembly { + assembly ("memory-safe") { if lt(i, locksSize) { // LoopOverflow() mstore(0x00, 0xdfb035c9) @@ -344,7 +344,7 @@ contract P2PIX is BaseUtils { function setRoot(address addr, bytes32 merkleroot) public { - assembly { + assembly ("memory-safe") { // if (addr != msg.sender) if iszero(eq(addr, caller())) { // revert OnlySeller() @@ -404,7 +404,7 @@ contract P2PIX is BaseUtils { ERC20 _t, address _k ) private { - assembly { + assembly ("memory-safe") { if iszero( iszero( or( @@ -428,7 +428,7 @@ contract P2PIX is BaseUtils { view returns (uint256 bal) { - assembly { + assembly ("memory-safe") { for { /* */ } iszero(returndatasize()) { @@ -451,7 +451,7 @@ contract P2PIX is BaseUtils { view returns (bool valid) { - assembly { + assembly ("memory-safe") { for { /* */ } iszero(returndatasize()) { @@ -477,7 +477,7 @@ contract P2PIX is BaseUtils { view returns (bytes32 pixTarget) { - assembly { + assembly ("memory-safe") { for { /* */ } iszero(returndatasize()) {