Laxce

QuillAuditsFiles named in the report

Audit · firm’s term: audit report

QuillAudits reviewed Laxce on 29 Oct 2024: 7 findings, 0 critical; 6 marked fixed, 1 open.

No open critical findings
Open the reportOpen Laxce’s security record

Report hosted on quillaudits.com.

Trustblock does not review code.

Findings7

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

SeverityOpenAcknowledgedFixed
Critical000
High000
Medium101
Low005
MediumUSDT stored can be inaccurateFixed

The current contract architecture allows for the USDT contract to be changed without the following variables, struct and mapping being correctly updated. If the contract owner updates the usdt contract by calling _changeUsdtToken() before the end of the token sale, the value of usdtRaised would become inaccurate because it now holds the value of the old tokens contributed as well as the new tokens. Similarly, the UserInfo struct and users mapping which keeps track of the user’s individual contributions would become inaccurate.

LowbuyTokens() reverts when buy limit is activeFixed

The contract implements a limit to the amount of USDT a user can use in a single purchase described in the initialize function:minimumBuyLimit = 5000; maximumBuyLimit = 500000; These values do not take into account the decimals of the USDT token (6 decimals on ETH) thereby making the equivalent amounts to be less than viable purchase amounts. minimumBuyLimit = 5000; // 0.005 USDT maximumBuyLimit = 500000; // 0.5 USDT

LowIncorrect initialization setupFixed

The contract does not call UUPSUpgradeable_init() in its initialize function.

LowNon-adherence to Solidity style guideFixed

The contract could follow the conventions of the Solidity style guide which provide that non-external (and public) functions should be prefixed by an underscore. This would improve contract readability. Reference.

LowRedundant codeFixed

There are a number of redundancies within the codebase described below:1. Unused struct: Currently there is no functionality to provide users with any benefits for contributing to the private sale. The usdtContributed and laxceReceived fields are unused after they are set in the buyTokens function call. user.usdtContributed += usdtAmount; // @audit-issue unused       user.laxceRecieved += tokens; // @audit-issue unused   1. Inaccurate userInfo details: When a user calls buyTokens , the _beneficiary address passed in is redundant. Payment is made from the msg.sender wallet and tokens are transferred to the msg.sender, not the beneficiary wallet. Within the UserInfo struct the user key is the _beneficiary and not the msg.sender who makes all transactions and should accrue all benefits.

LowUsing transfer instead of safeTransferFixed

The _deliverTokens function uses the vanilla erc20 transfer and doesn’t check the return values of the transfer function or perform any address checks which could potentially revert execution. To handle potential reverts or failures during token transfers, the SafeERC20 library is recommended to be used - in this case, the safeTransfer function within this library would be advised to implement to take care of any potential errors unhandled by the regular transfer function. This is implemented in some parts of the codebase but is missing on the line specified.

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Repository and files the report names (3)

  • contracts/Laxce.sol
  • contracts/LaxceCrowdSale.sol
  • contracts/USDT.sol

Part of Laxce’s security record

Laxce
Audits1 audit by 1 firmLast audit Oct 2024, by QuillAudits.
Critical findingsNo open critical findingsIn 1 report.
Open Laxce’s security record

Security firm

QuillAudits

350 projects reviewed · 459 reports · latest Apr 2025

See QuillAudits’s audits

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