DIN security record

As of 3 Nov 2026, DIN has 1 audit report on Trustblock, by CertiK, dated 14 Jan 2025. That report lists no open critical findings. It also holds 1 deployed contract on 1 chain.

Critical findings
No open critical findings
In 1 report.
Open the latest report
Your label, live
Get the label for your site

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

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
DINSecurity firm: CertiKDate: Scope: 1 address on BNB ChainNo open critical findingsOpen · skynet.certik.com

Findings19

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

SeverityOpenAcknowledgedFixed
Critical000
High031
Medium011
Low1102
LowDesign Mechanism for the One-to-One Mapping BetweDIN · CertiK · 14 Jan 2025Open

When calculating rewards for a specific `tokenId` in the `NFTAirdrop` contract, its corresponding `powerLevel` is determined based on the `tokenId`. Each level has unique reward release methods. If multiple `tokenIds` share the same `powerLevel`, this could lead to rewards being incorrectly calculated, potentially causing claims to exceed the intended allocation for that `powerLevel`.

Open the report
LowImproper Initialization in OpenZeppelinDIN · CertiK · 14 Jan 2025Open

Initializer functions invoked separately from contract creation, such as in minimal proxies, may be reentered if they make an untrusted non-view external call. This reentrancy can lead to unexpected behaviors, breaking the expectation of a single execution.

Open the report
LowIncompatibility with non-standard ERC20 Tokens thDIN · CertiK · 14 Jan 2025Open

The `stake()` functions attempt to ensure the successful transfer of ERC20 tokens by checking the return value of the `transfer()`/`transferFrom()` function. It assumes that `transfer()`/`transferFrom()` returns a `bool` indicating success or failure. However, some non-standard ERC20 tokens, such as [OMG](https://etherscan.io/address/0xd26114cd6ee289accf82350c8d8487fedb8a0c07#code#L97) and [USDT](https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#code#L340), do not return a `bool` for the `transfer()`/`transferFrom()` function. This discrepancy can cause the function to fail, leading to tokens being locked within the contract.

Open the report
LowInconsistency Between Code and CommentDIN · CertiK · 14 Jan 2025Open

In contracts `NodeStakingConvertor` and `xDINConverting`, users can claim native tokens, however, the comments and related function names, such as in the following code, refer to `DIN` token. ```solidity // How much xDIN in exchange for // return how much DIN function depositXDIN(uint256 xDINAmount) public returns (uint256) { uint256 DINRewardAmount = estiamteExchangeDINAmount(xDINAmount); IERC20(xDINAddress).transferFrom(_msgSender(), address(this), xDINAmount); IERC20Authorized(xDINAddress).burn(xDINAmount); // mint DIN reward addClaim(_msgSender(), DINRewardAmount, nextClaimId); nextClaimId += 1; return DINRewardAmount; } ```

Open the report
LowLack of Amount Validation in `stake` FunctionDIN · CertiK · 14 Jan 2025Open

The `stake` function in the **CurveStaking** contract is responsible for allowing users to deposit a specific `amount` of tokens for staking. However, if the `amount` is not properly validated, it can lead to two potential issues: If a user stakes an extremely small `amount`, the resulting weight (`amount * time`) may become negligible due to the limitations of integer precision in Solidity (e.g., if the result rounds down to `0`).This can cause the user's shares of staking weight to be effectively `0`, making them ineligible to receive any rewards. Additionally, if a user stakes an extremely large `amount`, the calculation of `amount * time` (used to compute the user's staking weight) may exceed the maximum value that can be stored in a `uint256` variable, potentially causing an integer overflow or preventing more users to stake.

Open the report
LowMissing Emit EventsDIN · CertiK · 14 Jan 2025Open

There should always be events emitted in the sensitive functions that are controlled by centralization roles.

Open the report
LowMissing sanity check in function `requestClaim()`DIN · CertiK · 14 Jan 2025Open

The `requestClaim()` function in the `NodeStakingConvertor` contract does not validate the length of the provided `nftIds`. Even if the `nftIds` array is empty, the function will still create a `ClaimSchedule` for `msg.sender` and allocate the `nextClaimId`, leading to unnecessary gas consumption.

Open the report
LowMissing Verification of `DINRewardAmount` May LeaDIN · CertiK · 14 Jan 2025Open

In the `depositXDIN()` function of `xDINConverting` contract, user rewards are calculated based on the provided `xDIN` amount, followed by burning the transferred tokens. However, due to the absence of `DINRewardAmount` verification, the function burns the user's tokens even when the calculated `DINRewardAmount` is zero.

Open the report
LowMissing Zero Address ValidationDIN · CertiK · 14 Jan 2025Open

The cited address input is missing a check that it is not `address(0)`.

Open the report
LowPull-Over-Push PatternDIN · CertiK · 14 Jan 2025Open

The change of `owner` by function `transferOwnership()` overrides the previously set `owner` with the new one without guaranteeing the new `owner` has the ability to actuate transactions on-chain.

Open the report
Show 1 more
LowUnprotected Upgradeable ContractDIN · CertiK · 14 Jan 2025Open

The `CurveStaking` logic contract does not protect the initializer. An attacker can front-run the `initialize` call and assume ownership of the logic contract. Once in control, the attacker can perform privileged operations, misleading users into believing that they are interacting with the legitimate owner of the upgradeable contract.

Open the report

Contracts1

AddressChainSource code
0x3ab1a5f76e12202d1ad1548a08a799501581da4eChain: BNB ChainSource code: Verified source

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="din-previously-web3go"
></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