TEXAN TOKEN security record

Ethereumtexan.cc

As of 3 Nov 2026, TEXAN TOKEN has 1 audit report on Trustblock, by CertiK, dated 21 Dec 2022. That report lists no open critical findings.

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 and findings, contracts and incidents up to Nov 2026. Trustblock does not review code.

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Texan Endowment TokenSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOpen · skynet.certik.com

Findings20

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

SeverityOpenAcknowledgedFixed
Critical000
High000
Medium102
Low2015
MediumIncorrect mathematical operationTexan Endowment Token · CertiK · 21 Dec 2022Fixed

In the function `startStake()`, it is checked if `_endowmentSupply > possibleStars`. However, only the possible interest is taken from the `_endowmentSupply`. In the function `endStake()`, if a user calls `endStake()` before the `startDay`, then they are refunded the principal. However, this principal is then counted twice in the total supply as the `_endowmentSupply` is increased by the `_possibleStars` which includes the principal and also the `_StakedPrinciple` is minted to the user.

Open the report
MediumPotential loss of rewardsTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The function `stakeScrape` allows an external address to update the stake status of another user. This behavior can lead to a denial of service attack for a given time period. For example suppose that user Bob wanted to call the function `stakeScrape`. However, Alice called this function before with Bob's address in the parameter `stakerAddr` then Bob would no longer be able to call `stakeScrape` on himself as Alice has updated his respective `scrapeDay`.

Open the report
Low`LAUNCH_TIME` should be in the futureTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The `LAUNCH_TIME` should be changed to a date in the future if the project has not already been deployed and launched.

Open the report
Low`scrapeStake()` should revert if called more thanTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The function `scrapeStake()` should only be called once per day and this is ensured by the if statement `if (curDay > calcDays[2])`. In this case it will not revert if a user calls the function multiple times in one day, which can cause confusion.

Open the report
Low`totalSupply()` value can be misleadingTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The `totalSupply` of a token is supposed to return the total amount of tokens in circulation, including those that are locked or in reserve. While the principle amount of tokens is burned from the user and the total possible interest is removed from the `endowmentSupply`, these can be considered as locked or reserved tokens as they are scheduled to be distributed. This can cause confusion if a user stakes or unstakes a large amount of tokens that can make a dramatic change in the `totalSupply`.

Open the report
LowDivide Before MultiplyTexan Endowment Token · CertiK · 21 Dec 2022Fixed

Performing integer division before multiplication truncates the low bits, losing the precision of calculation. ```solidity=726 tempInterestAmount = (((current * appliedInterestRate) / YEARPRECISION) * principle) / (PRECISION * PRECISION); //36 decimals ```

Open the report
LowFirst `newStakeId` will be 2Texan Endowment Token · CertiK · 21 Dec 2022Fixed

When starting a new stake the global stake id is incremented before the `newStakeId` is set equal to it. Since, `g_latestStakeId` is initialized to 1, it will cause the first `newStakeId` to be 2, which could cause confusion.

Open the report
LowFunction Should Be Declared ExternalTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The following public functions are never called internally. Public functions cost more gas to call then external functions. ```solidity function reportGlobals() ``` --- ```solidity function calculateStakeDays(uint256 tempStartDay, uint256 tempStakedDays, uint256 tempScrapeDay) ``` --- ```solidity function calculateInterest(uint256 stakedPrinciple, uint256 stakedDays) ```

Open the report
LowHardcoded VariablesTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The variable `YEARDIVIDER` is defined at Line 34. The value it refers to is the same value given to the variable `day_divisor`. However the variable `day_divisor` is hardcoded. A similar pattern is also done by the variable 'YEARPRECISION' and `workingDays`. ```solidity uint256 day_divisor = 36525; ``` --- ```solidity uint256 workingDays = servedDays * 100; ```

Open the report
LowInput Validation OrderTexan Endowment Token · CertiK · 21 Dec 2022Fixed

In the function `_calculateStakeDays`, the function performs the following mathematical operations. ```solidity function _calculateStakeDays(uint256 startDay, uint256 stakedDays, uint256 scrapeDay) internal view returns (uint[6] memory) { uint256 curDay = _currentDay(); //ex. day 25 uint256 endOfStakeDay = startDay + stakedDays; //ex. Day 52 // find the higher of the two days ( startDay or a more recent scrapeDay ) uint256 targetStartDay = scrapeDay >= startDay ? scrapeDay : startDay; // the possible interest bearing days uint256 possibleDays = endOfStakeDay - targetStartDay; uint256 interestDays = 0; // if the stakedDays is less than the minimum, throw an error require(stakedDays >= MIN_STAKE_DAYS, "scrape days must be greater than 1"); ``` Then performs the following check. ```solidity require(stakedDays >= MIN_STAKE_DAYS, "scrape days must be greater than 1"); ``` If the function reverts then the operations are also reverted.

Open the report
Show 7 more
LowMisspelling in Error MessageTexan Endowment Token · CertiK · 21 Dec 2022Fixed

In the following code, the error statement declares that the `scrape days must be greater than 1`. However, the error message is with respect to stakeDays. ```solidity require(stakedDays >= MIN_STAKE_DAYS, "scrape days must be greater than 1"); ```

Open the report
LowRedundant ComparisonTexan Endowment Token · CertiK · 21 Dec 2022Fixed

In the function `calculateInterest`, the following check is potentially redundant. ```solidity if (stakedPrinciple <= 0 || stakedDays <= 0) { return (0); } ``` This occurs because the function "_assurePrincipleAndStakedDaysAreValid" checks the minimum amount of `stakedPrinciple` and `stakedDays` required which is larger then zero.

Open the report
LowToo Many DigitsTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The following literals contain a large amount of digits. This is difficult to read. ```solidity uint256 internal constant MAX_STAKE_AMOUNT = 100000000000000000000000000000; // 100B Stake is the max ``` --- ```solidity uint256 constant PRECISION = 1000000000000000000; // 18 decimals ``` --- ```solidity uint intitialTotalSupply = 100000000000000000000000000000000; //100 Trillion Tokens ```

Open the report
LowTyposTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The following typos where found: - In the comments of `_startStake`, "form" is used instead of "from". - In the comment when minting the `lostInterest`, "origin address" is used instead of "endowmentSupply".

Open the report
LowUninitialized Local VariableTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The local variable `stake` is not initialized in the functions `scrapeStake()` and `endStake()`. Explicitly initializing the variables to zero in this case results in a small amount of gas savings.

Open the report
LowUnrecoverable event dataTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The non-indexed parameters of the events `StakeStart`, `StakeScrape` and `StakeEnd` are encoded with a bitwise OR operation. This disallows the recovery of information since the bitwise OR operation is destructive. ```solidity emit StakeStart( // (auto-generated event) uint256(uint40(block.timestamp)) | stakedPrinciple | startDay | stakedDays, msg.sender, stakeId ); ``` ```solidity emit StakeScrape( // (auto-generated event) uint256(block.timestamp) | uint256(stakedPrinciple) | uint256(currentInterest), uint256(lostInterest) | uint256(servedDays), msg.sender, stakeId ); ``` ```solidity emit StakeEnd( // (auto-generated event) uint256(block.timestamp) | uint256(stakedPrinciple) | uint256(payout), uint256(penalty) | uint256(servedDays), msg.sender, stakeId ); ```

Open the report
LowUnused State VariableTexan Endowment Token · CertiK · 21 Dec 2022Fixed

The following state variables are never used in the codebase. ```solidity uint256 g_currentDay = 1; //default sets the inital current day to 1 ``` --- ```solidity uint256 g_currentEpoch = block.timestamp; //start off with this default value of now ```

Open the report

Contracts

No deployed address is recorded for these audits.

The reports name a repository or files. Open a report to see its scope.

The repositories and 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="texan-endowment-token"
></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