unshETH security record

As of 3 Nov 2026, unshETH has 3 audit reports by 2 security firms on Trustblock; the latest is by Paladin, dated 15 Jun 2023. Those reports list no open critical findings. It also holds 6 deployed contracts on 1 chain and 1 incident (latest 30 May 2023).

Critical findings
No open critical findings
Across 3 reports.
Incident
Incident 30 May 2023
Source: De.Fi incident database. 1 audit has been published since. See the incident
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.

Audits3

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Audit ReportSecurity firm: PaladinDate: Scope: 6 addresses on EthereumNo open critical findingsOpen · paladinsec.co
UnshETH #2Security firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOpen · skynet.certik.com
unshETH ProtocolSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOpen · skynet.certik.com

Findings44

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

SeverityOpenAcknowledgedFixed
Critical000
High001
Medium214
Low7236
HighLack Of `payable` KeywordUnshETH #2 · CertiK · 4 Apr 2023Fixed

The `payable` keyword is missing from the `sgReceive()` function, making it impossible to receive ETH and pay the gas fee to execute the function `IOFTCore(proxyUnshethAddress).sendFrom` to send the unshETH back to `_toAddr` on BSC. ```solidity IOFTCore(proxyUnshethAddress).sendFrom{value:unsheth_gas_cost}( //TODO really think about this address(this), //current owner of the unsheth _chainId, //chain Id where the proxy of the unsheth exists (we recieve this in sgRecieve) abi.encode(toAddr), //the address we want the unsheth to end up in unshethMinted, //the amount of unsheth to send payable(address(this)), //the refund address if something goes wrong or excess address(0x0), //the ZRO Payment Address abi.encode("") //Adapter Params //TODO check on this ); ```

Open the report
MediumGovernance risk: Any of the registered minters can freely mint tokensAudit Report · Paladin · 15 Jun 2023Fixed

The report gives no description here.

Open the report
MediumGovernance risk: Timelock functionality can be bypassed by the unshETH team to migrate and drain the vaultAudit Report · Paladin · 15 Jun 2023Fixed

The report gives no description here.

Open the report
MediumLack of cross-contract reentrancy checks can lead to serious side- effects due to the usage of multiple contractsAudit Report · Paladin · 15 Jun 2023Fixed

The report gives no description here.

Open the report
MediumPotential Overwrite `lsdIndex[_lsd]`UnshETH #2 · CertiK · 4 Apr 2023Fixed

After adding the first `_lsd`, the `lsdIndex[_lsd]` variable retains its initial value of 0 since the length of the `supportedLSDs` array is 1. Consequently, if the same `_lsd` is added again, the `require` statement in the `addLSD` function will evaluate to true, causing the `lsdIndex[_lsd]` variable can be overwritten. ```solidity=194 function addLSD(address _lsd) public onlyOwner onlyWhenPaused { require(lsdIndex[_lsd] == 0, "Lsd has already been added"); //fyi fails on the first lsd being duplicated since it has actual index 0 supportedLSDs.push(_lsd); lsdIndex[_lsd] = supportedLSDs.length-1; //reverse mapping of supportedLSDs indices isEnabled[_lsd] = false; lsdConfigs[_lsd] = LSDConfig(0, 0, 0); emit LSDAdded(_lsd); } ``` ```solidity=448 function exit(uint256 amount) external nonReentrant { require(migrated = false, "Already migrated, use v2 vault to exit"); require(block.timestamp > shanghaiTime, "Cannot exit until shanghaiTime"); require(!withdrawalsPaused || block.timestamp > withdrawalUnpauseTime, "Withdrawals are paused"); require(IERC20(unshETHAddress).balanceOf(msg.sender) >= amount, "Insufficient unshETH"); uint256 shareOfUnsheth = 1e18*amount/IERC20(unshETHAddress).totalSupply(); uint256 fee = shareOfUnsheth*redeemFee/10000; //redeem fees are 100% retained by remaining unshETH holders IunshETH(unshETHAddress).minter_burn_from(msg.sender, amount); for (uint256 i = 0; i < supportedLSDs.length; i = unchkIncr(i)) { uint256 lsdBalance = IERC20(supportedLSDs[i]).balanceOf(address(this)); uint256 amountPerLsd = (shareOfUnsheth-fee)*lsdBalance/1e18; IERC20(supportedLSDs[i]).safeTransfer(msg.sender, amountPerLsd); } } ```

Open the report
LowContract design is extremely limitedAudit Report · Paladin · 15 Jun 2023Fixed

The report gives no description here.

Open the report
LowLack of validationAudit Report · Paladin · 15 Jun 2023Fixed

The report gives no description here.

Open the report
LowTypographical issuesAudit Report · Paladin · 15 Jun 2023Fixed

The report gives no description here.

Open the report
Low`shanghaiTime` may not be modifiedUnshETH #2 · CertiK · 4 Apr 2023Fixed

As per the validation of `_newTime` below, the variable `shanghaiTime` can be updated when `block.timestamp` < `_newTime` < `shanghaiTime` + 4 weeks. ```solidity=530 function updateShanghaiTime(uint256 _newTime) external onlyOwnerOrAdmin { require(_newTime < shanghaiTime + 4 weeks, "Cannot extend more than 4 weeks" ); require(_newTime > block.timestamp, "Cannot set shanghaiTime in the past" ); shanghaiTime = _newTime; emit ShanghaiTimeUpdated(shanghaiTime); } ``` However, if the `block.timestamp` >= `shanghaiTime` + 4weeks, there is no way to set the `_newTime` as the `shanghaiTime` no matter what the `_newTime` is.

Open the report
LowThe Purpose Of the Function `setVdAmm`UnshETH #2 · CertiK · 4 Apr 2023Fixed

There is a function `setVdAmm` which only changes the `swapperAddress` and `ammEnabled`. However, we can not find any usage of the `swapperAddress` and `ammEnabled`. We would like the team to elaborate more about the usages of the `swapperAddress` and `ammEnabled`.

Open the report
Show 1 more
LowUsage of `transfer()`/`send()` for sending EtherUnshETH #2 · CertiK · 4 Apr 2023Fixed

Using Solidity's `transfer()` and `send()` functions for transferring Ether is not recommended, since some contracts may not be able to receive the funds. These functions forward only a fixed amount of gas (2300 specifically) and the receiving contracts may run out of gas before finishing the transfer. Additionally, gas costs may increase in the future. Thus, some contracts that can receive now may stop working in the future due to the gas limitation.

Open the report

Incidents1

Attached through a shared contract address. Our incident data ends in Oct 2026.

Incident

Incident,

Source: De.Fi incident database.

Audits before it
2.
Audits since
1, the latest dated 15 Jun 2023.

Contracts6

AddressChainSource code
0x0ae38f7e10a43b5b2fb064b42a2f4514cba909efChain: EthereumSource code: Verified source
0xc258ff338322b6852c281936d4edeff8adff23eeChain: EthereumSource code: Verified source
0xb250216b5bce306fa37f7de76a82409663ed52c3Chain: EthereumSource code: Verified source
0x1a890ebcd20a9fb551c0440428805bc24ef62641Chain: EthereumSource code: Verified source
0x35636b85b68c1b4a216110fb3a5fb447a99db14aChain: EthereumSource code: Verified source
0x51a80238b5738725128d3a3e06ab41c1d4c05c74Chain: EthereumSource code: Verified source

All 6 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="unsheth"
></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