As of 3 Nov 2026, Versus-X has 1 audit report on Trustblock, by CertiK, dated 29 Mar 2024. That report lists no open critical findings.
Record last updated . It holds audits, findings and contracts up to Nov 2026, and incidents up to Oct 2026. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| Versus-X audit | Security firm: CertiK | Date: | Scope: Repository at commit f5045b9 | 4 critical findings, fixed | Open · skynet.certik.com |
Statuses are the security firm’s own, from each report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 4 |
| High | 0 | 1 | 2 |
| Medium | 0 | 0 | 0 |
| Low | 0 | 0 | 4 |
The function `approveFrom()` is a public function without any access control. It can be called by anyone to manipulate allowance information between arbitrary token owners and spenders such that hackers can easily steal tokens from any token owner.
Open the reportThe public function `mintVersusxToUser()` does not have any access control such that anyone can call it to mint arbitrary amount of tokens to any address. And it does not update total supply after minting, which may cause other critical bugs.
Open the reportIn the contract **VERSUSX**, the role **MetaKeepLambdaOwner** has authority over the following functions: - setEskillzBet() In the contract **VERSUSX**, the role **Owner** has authority over the following functions: - mintMore() In the contract **VERSUSX**, the address **ESkillzBet** has authority over the following functions: - mintMore() Any compromise to the **MetaKeepLambdaOwner/Owner/ESkillzBet** account may allow a hacker to take advantage of this authority and mint an arbitrary amount of tokens to any address.
Open the reportThe payload of low level call should be constructed using one of `abi.encodeWithSelector()`, `abi.encodeWithSignature()`, `abi.encodeCall()`. If the first parameter is function signature string, then `abi.encodeWithSignature()` must be used. `abi.encodePacked()` only concatenates parameters tightly; it does not translate function signature to function selector and does not have proper padding for `userAddress` which is required for low level call payload. Even if an user provides correct function signature and user address, the identified low level call will always fail. And even worse, the function signature is not restricted and can point to any function, a hacker can construct a malicious function signature which points to functions like `approveMax()` to possibly steal tokens from the contract.
Open the reportWhen tokens are minted, `_totalSupply` must be updated to reflect the total amount of existing tokens. Otherwise there will be inconsistency between the sum of token balances from all owners and `_totalSupply`, which may cause critical bugs.
Open the reportThe following three functions can be invoked to call the "CreateSPGame/CreateMP/JoinMPGame" function in the "ESkillzBet" contract. The implementation of these functions is unknown; however, based on the function names, they might not be functions that should be accessible to everyone: * approveAndCreateSPGame * approveAndCreateMPGame * approveAndJoinMPGame
Open the reportIn the contract `VERSUSX`, there are payable `receive()` and `executeMetaKeepLambdaTransaction()` functions which can receive native tokens; but there is no way to transfer native tokens out of the contract. Thus all the received native tokens will be locked and lost in the contract.
Open the reportThe identified EIP712 implementation in the code is not standard compliant: it is clearly different from OpenZeppelin EIP712 implementation. It may lead to major compatibility issue.
Open the reportThe contract declares and interacts with the out-of-scope contract `ESkillzBet`. The scope of the audit treats out-of-scope contracts as black boxes and assumes their functional correctness. However, in the real world, out-of-scope contracts can be compromised and this may lead to lost or stolen assets.
Open the reportWhy does the VERSUSX contract need to inherit the "MetaKeepLambda" contract? It appears that the only feature utilized is the access control (e.g., onlyMetaKeepLambdaOwner), which could be achieved with the `Ownable` or `AccessControl` modules from the OpenZeppelin library. The auditor would like to know why the inheritance of "MetaKeepLambda" is deemed necessary.
Open the reportThe reports name a repository or files. Open a report to see its scope.
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.
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.
<head><script src="https://widget.trustblock.run/project-widget.min.js" defer></script></head><body><divdata-tb-project-widgetdata-tb-project-slug="versus-x"></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