Memeswap security record

Base, Blast, Ethereum, Scrollmemeswap.fiXGitHub

As of 3 Nov 2026, Memeswap has 2 audit reports by 1 security firm on Trustblock; the latest is by QuillAudits, dated 28 Nov 2024. Those reports list no open critical findings.

Critical findings
No open critical findings
Across 2 reports.
Open the latest report
Your label, live
Get the label for your site

Record last updated . It holds audits and findings, contracts and incidents up to Nov 2026. Trustblock does not review code.

Audits2

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Memeswap - Change ReviewSecurity firm: QuillAuditsDate: Scope: Files named in the reportNo open critical findingsOpen · quillaudits.com
Memeswap

Audit · firm’s term: audit report

Security firm: QuillAuditsDate: Scope: Files named in the reportNo open critical findingsOpen · quillaudits.com

Findings26

Statuses are the security firm’s own, from each report.

SeverityOpenAcknowledgedFixed
Critical000
High002
Medium102
Low3018
HighMalicious Contract Exploit Freezing MemeswapVault and Locking FundsMemeswap · QuillAudits · 25 Jun 2024Fixed

The MemeswapVault contract manages staking, enqueuing, renting, and claiming processes for the Memeswap protocol. Users can stake their Ether, join the queue, and claim rewards through various functions within the contract.A significant problem occurs with the trigger modifier, which attempts to dequeue items and send Ether to the queued user. If the recipient is a malicious contract that reverts the transaction through its receive or fallback function, the entire operation fails. This creates a Denial of Service (DoS) condition, halting the protocol and causing funds to be stuck.

Open the report
HighPotential Denial of Service in MemeswapVault: Enqueue and Dequeue Manipulation ExploitMemeswap · QuillAudits · 25 Jun 2024Fixed

A critical Denial of Service (DoS) vulnerability in the MemeswapVault contract. The vulnerability is related to the enqueue and dequeue logic, specifically how the dequeuePossible function interacts with the enqueue process, potentially leading to a state where the contract becomes unusable due to arithmetic underflow or overflow.The MemeswapVault contract allows users to enqueue ether and stake it. The staking process involves renting liquidity to newly deployed tokens. However, the logic in the dequeuePossible function can be manipulated to create a situation where the dequeue function can never be called successfully, leading to a critical DoS scenario.

Open the report
MediumIncorrect use of logical operator in createPair.Memeswap · QuillAudits · 25 Jun 2024Fixed

The createPair() function is using && instead of ||, this will allow an actor to create a pair with just one whitelisted token. Instead both the tokens should be checked for being whitelisted to make sure that pairs are only created with whitelisted tokens.

Open the report
MediumPotential Slippage Risk Due to Zero Minimum Amounts in liquidate Function.Memeswap · QuillAudits · 25 Jun 2024Fixed

In the ` MemeswapCollector::liquidate` function, the parameters amountAMin and amountBMin for removing liquidity are set to zero. This configuration allows for up to 100% slippage during liquidity removal, potentially resulting in significant losses or unexpected behavior.Impact Setting these parameters to zero means the contract does not enforce any minimum amount for the tokens received from liquidity removal. This could result in all of the liquidity being removed at unfavorable rates, potentially leading to a significant loss of funds or exploitation.

Open the report
LowFarm Deployment Allows Zero Reward Rate, Leading to Unrewarded Staking and Gas CostsMemeswap - Change Review · QuillAudits · 28 Nov 2024Fixed

The deployFarm function in the MemeswapFarmFactory contract does not enforce a minimum reward rate for farms during deployment. This allows deployers to create farms with a reward rate of zero. Users who stake in such farms will bear gas costs for staking and removing tokens without receiving any rewards, leading to a poor user experience.

Open the report
LowMissing Check-Effects-Interactions PatternMemeswap - Change Review · QuillAudits · 28 Nov 2024Fixed

The Check-Effects-Interactions (CFI) pattern ensures that internal state updates occur before any external calls. This minimizes the risk of reentrancy attacks and unintended side effects.In the MemeswapFarm contract, the stake and exit functions violate this pattern. External calls to untrusted contracts or tokens are made before updating internal state variables, creating potential risks. While the contract implements ReentrancyGuard, following the Check-Effects-Interactions pattern is still considered best practice to enhance security and robustness.

Open the report
LowOptimizing Gas Usage with Prefix Incrementation in LoopsMemeswap - Change Review · QuillAudits · 28 Nov 2024Fixed

Within the smart contracts, the current use of postfix incrementation (i++) in loops is identified as a less gas-efficient practice. Switching to prefix incrementation (++i) to update uint variables inside loops can yield gas savings. This optimization opportunity applies to loop iterators and any increment operations within the loop's body. The efficiency gain stems from how Solidity handles these two operations at the bytecode level, with prefix incrementation slightly more gas-efficient due to its direct modification of the variable's state without storing an intermediate value.

Open the report
LowOptimizing Smart Contract Efficiency by Avoiding Redundant InitializationsMemeswap - Change Review · QuillAudits · 28 Nov 2024Fixed

In smart contracts, there is a recurring pattern of initializing loop variables and accu- mulators to their default values. While common and clear for understanding, this practice introduces unnecessary operations, as Solidity automatically initializes variables to their default values. Specifically, instances of loop counters being set to 0 (uint256 i = 0) and accumulators being initialized to 0 can be optimized by leveraging Solidity's default initialization to reduce bytecode size and potentially gas costs during contract deployment.

Open the report
LowRisk of Permanent Contract Lockout due to renounce OwnershipMemeswap - Change Review · QuillAudits · 28 Nov 2024Fixed

The Memeswap contracts import Ownable.sol from OpenZeppelin, which includes a renounceOwnership function. This function transfers ownership to the zero address (ad- dress(0)), effectively removing the contract owner. As a result, any functions restricted by the on- lyOwner modifier will become inaccessible if renounceOwnership is called, either intentionally, by mistake, or due to malicious activity. This can lead to a scenario where the contract is permanently locked, making it impossible to manage or upgrade the contract, or to access critical functionalities.

Open the report
LowContract can be initialized multiple times by the ownerMemeswap · QuillAudits · 25 Jun 2024Fixed

The initialize() function can be called multiple times by the owner and he can eventually change the vault once it is assigned. This possesses a centralization risk in the contract that could be abused by the owner. There is no condition in the initialize() function that would check if the contract has already been initialized.

Open the report
Show 10 more
LowDOMAIN_SEPARATOR should be declared as ImmutableMemeswap · QuillAudits · 25 Jun 2024Fixed

DOMAIN_SEPARATOR variable should be declared as immutable as it is not getting changed once getting initialized in the constructor.

Open the report
LowEvent Emission Missing for State ChangesMemeswap · QuillAudits · 25 Jun 2024Fixed

Certain functions in the Memeswap contracts perform state changes without emitting corresponding events. This reduces transparency and makes it harder to track these changes off-chain. The following functions should emit events:Functions to Update: • MemeswapTokenFactory.setMaxTax(uint256) (src/MemeswapTokenFactory.sol#100-102) • MemeswapVault.setParams(uint256,uint256,uint256,uint256) (src/MemeswapVault.sol#146-160) • MemeswapVault.setChadBar(uint256) (src/MemeswapVault.sol#332-336) • MemeswapVault.setValhallaFee(uint256) (src/MemeswapVault.sol#355-361)

Open the report
LowInconsistent naming conventions in the `lock()` functionMemeswap · QuillAudits · 25 Jun 2024Fixed

The variable naming conventions and conditions in the lock() function should be consistent with the function name. Instead of using `unlocked`, use `locked` as that would make more sense with the function name.

Open the report
LowLack of error handling in the _burn() function .Memeswap · QuillAudits · 25 Jun 2024Fixed

There is no error handling on the _burn() function for the scenario when the `from` address has less balance than the `value`. This would break the flow of the execution.

Open the report
LowLack of error handling in the transferFrom() functionMemeswap · QuillAudits · 25 Jun 2024Fixed

The error handling in transferFrom() function is not done properly, it should also verify that allowance in `allowance[from][msg.sender]` is greater than the `value` else it should throw an error.

Open the report
LowLack of NatSpec documentation in all the contractsMemeswap · QuillAudits · 25 Jun 2024Fixed

There is a lack of NatSpec documentations in all the contracts in the protocol which makes it less unreadable for the team as well as for future users of the protocol .

Open the report
LowLength of _params.taxes  should be verified before passing to deployMemeswap · QuillAudits · 25 Jun 2024Fixed

The array _params.taxes is passed to the `deploy()` function line 120, this `deploy()` expects this array to have at least 4 elements but the users can pass the array of any length. This length should be verified to prevent the execution state from breaking.

Open the report
LowMissing Caps and Checks Leading to Overflow and Fee RisksMemeswap · QuillAudits · 25 Jun 2024Fixed

There are vulnerabilities related to missing caps and checks in the contract system, which can lead to overflow issues and unregulated fee structures. Key variables such as chadBar and valhallaFee lack proper limits, increasing the risk of exploitative behavior and unintended consequences. 1.    Overflow Risk with Large chadBar Values: The  MemeSwapVault::chadBar value, if set to an excessively large number, can cause the chad function to always return false due to overflow in the condition reserve > amount * chadBar. 2.    Unintended Behavior with Zero chadBar: Setting MemeSwapVault::chadBar to zero causes the chad function to always return true, as reserve > amount * chadBar simplifies to reserve > 0. 3.    Uncapped valhallaFee: The MemeSwapVault::valhallaFee can be set to values as high as 99%, leading to a disproportionate amount of remaining LP tokens being sent to the fee collector. This is problematic as it can be exploited to direct excessive amounts to the fee collector. 4.    Max Tax Capping: The MemeswapTokenFactory::setMaxTax function sets the MemeswapTokenFactory::maxTax value without constraints, which could lead to excessively high tax rates being applied.

Open the report
LowOptimize Gas by Marking Variables as Immutable or ConstantMemeswap · QuillAudits · 25 Jun 2024Fixed

Certain variables in the Memeswap contracts should be marked as immutable or constant to improve gas efficiency and security. Immutable variables are set at deployment and cannot be changed, while constant variables are fixed and used directly in the contract's bytecode.

Open the report
LowRedundant check in launch() functionMemeswap · QuillAudits · 25 Jun 2024Fixed

The check `if (msg.value == 0)` on line 112 is redundant as there is already a check `if (msg.value < _params.buyAmount)` on the very next line. Therefore the check on line 112 is just a waste of gas.

Open the report
Show 2 more
LowUnoptimized conditional checksMemeswap · QuillAudits · 25 Jun 2024Fixed

The condition `if (!initialized)` in `setLiquidator()`, `setTreasury()` and `withdrawToken()` functions are unoptimized and a waste of gas. The reason is there is no need to verify the initialization everytime `liquidator` or `treasury` is changed or tokens are withdrawn as the `initialized` variable is checked whenever the `collect()` or `liquidate()` function is called. Therefore the collector cannot be used until it’s initialized.

Open the report
LowVerify the length of `urls` in the constructorMemeswap · QuillAudits · 25 Jun 2024Fixed

The length of the `urls` should be verified before they can be stored in the storage of the contract. Because according to the logic in the contract, the url array should have a maximum length of 10. This length is verified when updating the `urls` but it is not getting verified in the constructor.

Open the report

Contracts

No deployed address is recorded for these audits.

The reports name a repository or files. Open a report to see its scope.

The repositories and files the reports name

Show this on your site

Is this your project? Show this record on your own website. The label states what the record holds, links to this page and updates by itself. It is free and needs no sign-in.

Content

Facts

Automatic: the three strongest facts of this project’s own record (its last audit and two more), highlighted. They update with the record. Picking a fact turns Automatic off.

Fixed as
Language

Style

Layout
Theme
Accent
Corners

Format

Size
Date
Embed as
HTML
<head>
<script src="https://widget.trustblock.run/project-widget.min.js" defer></script>
</head>
<body>
<div
data-tb-project-widget
data-tb-project-slug="memeswap"
></div>
</body>

Paste the code where the label should appear. It uses no API credit and updates by itself.

Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.

Tell us