TAC2.0 security record

BNB Chainvercel.app

As of 3 Nov 2026, TAC2.0 has 4 audit reports by 2 security firms on Trustblock; the latest is by QuillAudits, dated 12 Nov 2024. Those reports list no open critical findings. It also holds 2 deployed contracts on 1 chain.

Critical findings
No open critical findings
Across 4 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.

Audits4

Newest first

AuditSecurity firmDateScopeCritical findingsReport
DayvidendeSecurity firm: QuillAuditsDate: Scope: Files named in the reportNo open critical findingsOpen · quillaudits.com
Skate InuSecurity firm: CyberscopeDate: Scope: 1 address on BNB ChainNo open critical findingsOpen · IPFS
TAC2.0Security firm: CyberscopeDate: Scope: 1 address on BNB ChainNo open critical findingsOpen · IPFS
TAC2.Security firm: CyberscopeDate: Scope: 1 address on BNB ChainNo open critical findingsOpen · cyberscope.io

Findings26

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

SeverityOpenAcknowledgedFixed
Critical000
High002
Medium003
Low1803
HighReferral DVE amount in buyTokens() became substantially high than the actual DVE buy amountDayvidende · QuillAudits · 12 Nov 2024Fixed

When a user buys DVE tokens then level one/two/three referral gets some percentage of DVE tokens. Now the problem is, when combining the level one/two/three referral DVE amount, it became substantially higher than the actual buy amount.Let's see this via example: 1. Suppose there are 100 DVE tokens are for sale and user1 bought all 100 tokens. 2. Level1 referral will get 10% of amount ie `10 DVE` tokens 3. Level1 referrer has 10 Level2 referrals & they get 5% of amount ie 5 \* 10 = `50 DVE` tokens 4. Now, each Level2 referrer has 10 referrals & they get 2.5% of amount ie 2.5 \* 10 \* 10 = `250 DVE` tokens 5. Total referral DVE tokens = 10(Level1) + 50(Level2) + 250(Level3) = 310 DVE tokens, whereas only 100 DVE tokens were sold Impact would be that referral amount will be substantially high than the actual amount ie a large amount of DVE tokens will be vested, which are not present in the contract

Open the report
HighVesting DVE tokens will also be sold in DVESale:buyTokens() due to use of DVE.balanceOf(address(this))Dayvidende · QuillAudits · 12 Nov 2024Fixed

Users can buy DVE tokens using buyTokens(), which give some percentage of DVE tokens to the referral. Tokens that referral gets are vested over a period of 1 year.```solidity function buyTokens(address ref, uint256 amount) external whenNotPaused {         require(ref != msg.sender, "Cannot refer yourself");         require(ref != address(0), "Referral have to be entered");         require(amount > 0, "Must purchase a positive number of tokens"); @>      require(amount < DVE.balanceOf(address(this)), "There are not enough tokens left to purchase");         bool paymentSuccessful = BUSD.transferFrom(msg.sender, address(this), amount);         require(paymentSuccessful, "Payment was not successful");         bool success = DVE.transfer(msg.sender, amount);         require(success, "Sending failed");         giveReferrals(ref, amount);         amountPurchsed = amountPurchsed + amount;         emit BuyTokens(msg.sender, amount);     } Now the problem is, tokens that are allocated to referrals will also be sold to new users because buyTokens() uses the `balanceOf(address(this))` while selling the DVE tokens. This doesn't separate/reserves the tokens that are already allocated/vested to the referrals. 1. Suppose there are 100 DVE tokens & user1 bought 50 DVE tokens. 2. His referrals get 5 DVE tokens, vested over 1 year period 3. Now, user2 should only be able to buy 45 DVE tokens but he can buy complete 50 DVE tokens ie including referral's 5 DVE tokens

Open the report
MediumNo withdraw function for withdrawing DVE tokens from DVESale.solDayvidende · QuillAudits · 12 Nov 2024Fixed

`DVESale` contract is used for selling DVE tokens using buyTokens(). However there can be situations when some DVE tokens are left `unsold` then there is no withdraw function for owner to withdraw those extra DVE tokens from the contract.Impact would be such that unsold DVE tokens will be `stuck` in the contract

Open the report
Mediumreferees will receive referral DVE amount instead of 10 in buyTokens()Dayvidende · QuillAudits · 12 Nov 2024Fixed

When a user buys DVE tokens then referrals receive some percentage of purchased DVE amount. Only first 10 level2 & level3 referrals should receive the referral DVE tokens. But due to wrong position of if-statement(which breaks the loop), 11 referrals recives the DVE token amount instead of 10.```solidity     function giveReferrals(address l1Ref, uint256 amount) internal { ...         address[] memory l2Refs = previousReferrals[l1Ref];         for (uint256 i = 0; i < l2Refs.length; i++) {             address l2Ref = l2Refs[i];             addClaim(l2Ref, l2Amount);             total += l2Amount;             address[] memory l3Refs = previousReferrals[l2Ref];             for (uint256 j = 0; j < l3Refs.length; j++) {                 address l3Ref = l3Refs[j];                 addClaim(l3Ref, l3Amount);                 total += l3Amount;                 // Safety check to prevent gas limit issues @>              if (j >= 10) {                     break;                 }             }             // Safety check to prevent gas limit issues @>          if (i >= 10) {                 break;             }         }     } ``` Due to the `=` sign & nature of array, loop will run form 0 to 11 ie [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Open the report
MediumStale price is not checked in DVE:getLatestBnbToUsd()Dayvidende · QuillAudits · 12 Nov 2024Fixed

AggregatorV3Interface(bnbUsdFeed).latestRoundData() returns a variable `updatedAt`, which is the last timestamp when price was updated. For bnb/usd price oracle, heartbeat is 27s ie after every 27s price of bnb is updated.```solidity   function getLatestBnbToUsd() public view returns (uint256) {         (, int256 price,,,) = AggregatorV3Interface(bnbUsdFeed).latestRoundData();         return uint256(price); // 8 decimals     } ``` If stale price is not checked, code will execute with prices that don’t reflect the current pricing.

Open the report
Lowdividend mapping is not used in DVESale.solDayvidende · QuillAudits · 12 Nov 2024Fixed

dividend mapping is not used in DVESale.sol```solidity     mapping(address => uint256) public dividend;

Open the report
LowDouble check for address(0) & sale in recalculateClaim()Dayvidende · QuillAudits · 12 Nov 2024Fixed

When recalculateClaim() is called, it checks for address(0) & sale address. But when it calls calculateDividend() internally, it also checks the for address(0) & sale address.```solidity  function recalculateClaim(address who) internal {         // null user doesn't get dividends @>      if (who == address(0) || who == sale) {             return;         } ...         uint256 oldDividend = claim.unclaimed; @>      uint256 newDividend = calculateDividend(who, claim); ...     } ``` ```solidity function calculateDividend(address who, Claim storage claim) internal view returns (uint256 dividend) {         // null and the sale contract don't get dividends @>      if (who == address(0) || who == sale) {             return 0;         } ...     } ```

Open the report
LowFull DVE tokens can't be sold in DVESale:buyTokens()Dayvidende · QuillAudits · 12 Nov 2024Fixed

Full DVE tokens can't be sold in DVESale:buyTokens() due to use of `<` instead of `<=````solidity  function buyTokens(address ref, uint256 amount) external whenNotPaused {         require(ref != msg.sender, "Cannot refer yourself");         require(ref != address(0), "Referral have to be entered");         require(amount > 0, "Must purchase a positive number of tokens"); @>      require(amount < DVE.balanceOf(address(this)), "There are not enough tokens left to purchase");         bool paymentSuccessful = BUSD.transferFrom(msg.sender, address(this), amount);         require(paymentSuccessful, "Payment was not successful"); ....     } ```

Open the report

Contracts2

AddressChainSource code
0x39c8105d043532a91f9a74e71bbd0aff30a1d560Chain: BNB ChainSource code: Verified source
0x8b5084f0c03e991d237b307467b7756fa7c93fccChain: BNB ChainSource code: Verified source

All 2 addresses and the 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="tac20"
></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