As of 30 Oct 2026, Nodle Network has 3 audit reports by 2 security firms on Trustblock; the latest is by Resonance Security, dated 11 Jul 2025. Those reports list no open critical findings.
Record last updated . It holds audits and findings, contracts and incidents up to Oct 2026. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| Nodle | Security firm: Resonance Security | Date: | Scope: 5 addresses on zkSync | No open critical findings | Open · IPFS |
| Nodle security review | Security firm: Nethermind Security | Date: | Scope: Not recorded (see the report) | No open critical findings | Open · GitHub |
| Nodle | Security firm: Resonance Security | Date: | Scope: 5 addresses on zkSync | No open critical findings | Open · IPFS |
Statuses are the security firm’s own, from each report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 0 | 1 |
| Medium | 0 | 0 | 4 |
| Low | 2 | 0 | 9 |
The report gives no description here.
Open the reportThe emergencyWithdraw() function forcefully withdraws all tokens from the contract and sets totalStakedInPool = 0. Users attempting to claim rewards or unstake after emergencyWithdraw() will encounter issues since totalStakedInPool is already 0 and reverts the transaction. In addition, if owner adds the funds again, the value will remain 0, blocking the smart contract of future transactions.
Open the reportThe InsufficientRewardBalance check only verifies if there are enough tokens at the moment the function is called. It does not account for the possibility that other users might claim rewards or unstake concurrently, depleting the balance before transactions are processed.this can be replicated in this scenario:user1 and user2 put 10 tokens each one.Rewards are 20%, so each one will receive 12 tokens.Staking contract has 1 reward token. Pool now contains a total of 21 tokens.user1 claims and obtain 12 tokens. Pool now contains a total of 9 tokens.user2 claims or unstakes but their transaction gets reverted because there is not enough tokens in the smart contract.
Open the reportDuring the security assessment of the oracle binary, it was observed that sensitive information, specifically private keys, are required to be passed as command-line arguments when executing the binary. This practice exposes private keys in the process's command line, which can be accessed by any user on the same system with permissions to view the process list, as well as potentially being exposed in logging or in other monitoring tools accessible on the Google Cloud platform. This represents a significant security risk as command-line arguments are not a secure medium for transmitting sensitive information due to their high visibility.
Open the reportThe off-chain component of the bridge runs periodically and processes some number of blocks. The off-chain components are sending transactions to the target network as they are processing the blocks. It was observed that there is no explicit check assuring that the block being processed is finalized. As a consequence, in a scenario when an unfinalized block is reverted, however it was already processed by the off-chain component, a double-spending opportunity arises. User whose interaction with the evm_bridge contract was reverted can do it again in new block which would result in a second valid bridging operation from the off-chain component's perspective.
Open the reportThe claim() and the unstake() functions take an index as input, but there's no check to ensure the index is within the bounds of the stakes[msg.sender] array before accessing the array.
Open the reportThe function unstake() allows users to desist from their stake, getting their funds back to their accounts. In technical terms, with this action, funds are never claimed but are instead unstaked. As such, the claimed variable of the user's stake should be left as false, to correctly show users of the platform of the action that was taken, e.g. when calling the function getStakeInfo() with the index of the specific stake.
Open the reportThe reward calculation suffers from potential precision loss due to integer division. Small stakes or low reward rates could result in users receiving less reward than expected.
Open the reportThe fundRewards() function is intended to be used only by REWARDS_MANAGER_ROLE but it is possible for any user to transfer NODL tokens to the contract and increase the rewards.
Open the reportThe getStakeInfo() function is declared as view, which means it should not modify the contract's state. Using a storage pointer would imply a potential modification of the state, which is not allowed in a view function. Storage variables also consume more gas.
Open the reportInitializing variables to their default values spends gas unnecessarily.
Open the reportThe report gives no description here.
Open the reportFloating pragmas is a feature of Solidity that allows developers to specify a range of compiler versions that can be used to compile the smart contract code. For security purposes specifically, the usage of floating pragmas is discouraged and not recommended. Contracts should be compiled and deployed with a strict pragma, the one which was thoroughly tested the most by developers. Locking the pragma helps ensure that contracts do not accidentally get deployed using too old or too recent compiler versions that might introduce security issues that impact the contract negatively.It should be noted however that, pragma statements can be allowed to float when a contract is intended for consumption by other developers, as in the case with contracts in a library or EthPM package.The smart contracts of Nodle protocol make use of floating pragmas. These are not intended for use as libraries for other developers and, as such, should be locked of their pragma.
Open the reportThe evm_bridge contract parses the Ethereum-compatible address to make sure that it is a legitimate one and bridging process can be performed successfully. However, it was observed that the check does not take into account the chainId values, i.e. it does not verify them in accordance with EIP1191 standard. It does not impact the security of the contract, however it is considered a best practice, because it will limit user error.
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="nodle-network"></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