Source retrieval
Verified source pulled from Sourcify with an exact (metadata-hash) match to the deployed bytecode.
A complete security review of the Trust Line (TLCOIN) BEP20 contract on BNB Smart Chain: verified source, every function, every privilege, checked against live chain state.
| Contract | 0x9A43B63BE488E3090ee5b57297Ed08e08B3a1fbA |
| Contract name | TLRUST_COIN |
| Network | BNB Smart Chain mainnet (56) |
| Language / compiler | Solidity · solc 0.8.26+commit.8a97fa7a |
| Source verification | ✓ Exact match Sourcify |
| Deployment | Block 130,501,892 · 29 Oct 2026 16:04 UTC |
| Review type | Manual line-by-line review + on-chain state verification |
| Result | Passed · no critical or high issues |
Grade A
The TLC contract is a compact, readable BEP20 implementation. It contains no transaction tax, no blacklist, no pause mechanism, no proxy and no external calls. Holder balances can only be changed by the holder (transfer, burn) or by an address the holder approved. The owner role is narrow: it cannot touch anyone's tokens.
Total supply is bounded by code. 1,000,000 TLC were minted at deployment and a single additional mint of 500,000 TLC is possible exactly once. After that, supply can only go down (through burns). This is a stronger supply guarantee than most tokens on BNB Chain, which commonly keep an unrestricted mint().
No critical, high-severity or logic issues were found. The one medium item is economic, not a code bug: at review time the deployer wallet holds about 95% of supply. The remaining items are low-severity ownership notes and informational code-quality points.
| File | contracts/tlcoin.sol |
| Contracts | SafeMath, IBEP20, BEP20, BEP20Detailed, Ownable, TLRUST_COIN |
| External selectors | 19 (all mapped) |
| Optimizer | Disabled |
| License | MIT |
Verified source pulled from Sourcify with an exact (metadata-hash) match to the deployed bytecode.
All 19 function selectors extracted from runtime bytecode and matched to the source. No undeclared functions.
Line-by-line reading of every function, modifier and storage write, against a 40-point BEP20 risk checklist.
Every onlyOwner path traced to its maximum possible effect on holders and supply.
totalSupply, owner, balances and the extraMinted flag read live over BSC JSON-RPC.
Weighted score over five categories: security, access control, transparency, quality and centralization.
| totalSupply | 1,000,000 TLC |
| owner | 0xD2eB96E9…c53e2c70 |
| Owner balance | 950,046 TLC |
| extraMinted | Not used |
| Contract self-balance | 0 TLC |
VERIFIED LIVE AT BLOCK
| ID | Title | Severity | Status |
|---|---|---|---|
| TLC-01 | Supply concentrated in deployer wallet | Medium | Acknowledged |
| TLC-02 | Owner-controlled one-time reserve mint | Low | Acknowledged |
| TLC-03 | Single-step ownership transfer | Low | Acknowledged |
| TLC-04 | Redundant SafeMath, optimizer off | Info | Acknowledged |
| TLC-05 | Floating pragma | Info | No impact |
| TLC-06 | Unused internal _burnFrom | Info | No impact |
| TLC-07 | Standard approve race condition | Info | Mitigated |
| TLC-08 | Ownership event not indexed / not emitted at deploy | Info | Acknowledged |
| TLC-09 | withdrawCoin limited to contract's own balance | Info | Safe by design |
At review time the owner/deployer address 0xD2eB…2c70 holds 950,046 TLC, about 95% of total supply. This is normal immediately after launch, but a single key controlling most of supply is a market and custody risk.
A large sale or a compromised private key could move the market sharply. This is an economic and operational risk; no code path is affected.
Move treasury funds to a multisig wallet (for example Safe), publish an allocation and vesting schedule, and lock liquidity once a DEX pair is created.
Acknowledged. Multisig treasury and published vesting are scheduled on the roadmap.
mintExtra() lets the owner mint 500,000 TLC to itself, one time only. The extraMinted flag is set before minting and is never reset.
function mintExtra() public onlyOwner { require(!extraMinted, "Extra mint already done"); extraMinted = true; _mint(msg.sender, EXTRA_MINT_AMOUNT); }
Supply can grow by 50% at the owner's discretion, once. The ceiling is strictly bounded at 1,500,000 TLC and the flag is public, so anyone can check whether it has been used.
Announce any use in advance and route minted tokens into a vesting or timelock contract.
Most BEP20 tokens keep an unlimited mint(). A single, hard-coded, single-use mint is a deliberate and much safer design.
transferOwnership() sets the new owner immediately. A wrong address would permanently lose access to mintExtra and withdrawCoin. There is also no renounceOwnership.
Limited. Owner powers never touch holder balances, so a lost owner key affects only the reserve mint and token recovery.
Double-check the target address before any transfer, test with a small multisig first, and prefer a multisig as the owner.
Solidity 0.8+ already reverts on overflow, so SafeMath adds a second check, and the optimizer is disabled. Both slightly raise gas per transfer. Security is not affected; on BNB Chain the extra cost is a fraction of a cent.
The source uses pragma solidity >=0.8.14;. The deployed bytecode was compiled with the fixed version 0.8.26 (verified), so the live contract is unaffected. Pin an exact version in future contracts.
_burnFrom is internal and never called, so it is unreachable. No risk; dead code only.
Like every ERC20/BEP20 token, changing a non-zero allowance with approve can be front-run. TLC already ships increaseAllowance and decreaseAllowance, the standard mitigation.
OwnershipTransferred parameters are not indexed, and the constructor sets the first owner without emitting it. Indexers have to read owner() directly. No security effect.
function withdrawCoin(uint256 amount) public onlyOwner { _transfer(address(this), msg.sender, amount); }
This only moves TLC that sits at the contract's own address, typically tokens users sent there by mistake. It cannot move tokens from any holder wallet. A safe and user-friendly recovery path. Current contract balance: 0 TLC.
| Function | Access | Worst-case effect | Affects holders? |
|---|---|---|---|
mintExtra() | onlyOwner | +500,000 TLC, once | Dilution only |
withdrawCoin(uint256) | onlyOwner | Moves tokens held by the contract itself | No |
transferOwnership(address) | onlyOwner | Changes owner | No |
burn(uint256) | Any holder | Burns caller's own tokens | Own tokens only |
transfer / transferFrom / approve | Any holder | Standard BEP20 | Own tokens only |
There is no function that sets fees, blocks addresses, pauses transfers, changes balances or replaces the code.
What stood out in review, and why it matters to anyone holding TLC.
No blacklist, pause or forced transfer exists. Once TLC is in your wallet, only you can move it. This is the single most important property a token can have, and many popular tokens do not offer it.
Zero tax today and zero ability to add one tomorrow. Wallets, exchanges and payment tools see exactly the amount sent, which makes TLC easy to integrate and list.
A hard 1.5M ceiling enforced by a single-use flag, plus a holder burn that only reduces supply. Long-term scarcity does not depend on anyone's promise.
No proxy means the rules you read today are the rules forever. Exact-match source verification lets anyone confirm it independently.
About 180 lines, no external calls, no loops over user arrays, no oracle. Less code means fewer places for bugs to hide.
Pure BEP20 with 18 decimals. Works out of the box with every BNB Chain wallet, DEX router, bridge and block explorer.
mintExtra() will be used.This report is an internal security review prepared by the TLC technical team. It covers only the smart contract source listed in scope, as verified on-chain on 31 October 2026. It does not cover the staking platform, off-chain systems, key management, liquidity or market behaviour, and it is not an endorsement or investment advice. Smart contract reviews reduce risk but cannot guarantee the absence of all issues. Always verify the contract address and do your own research.