{
"capability": "appchain",
"daLayer": [
"Hyperliquid DA"
],
"hostChain": {
"id": "arbitrum",
"slug": "arbitrum",
"name": "Arbitrum One"
},
"layer": "layer3",
"purposes": [
"Exchange"
],
"reasonsForBeingOther": [
{
"label": "No proofs",
"shortDescription": "The proof system isn't fully functional",
"description": "Projects without a proper proof system fully rely on single entities to safely update the state. A malicious proposer can finalize an invalid state, which can cause loss of funds."
},
{
"label": "No DA bridge",
"shortDescription": "There is no data availability bridge",
"description": "Projects without a data availability bridge fully rely on single entities (the sequencer) to honestly rely available data roots on Ethereum. A malicious sequencer can collude with the proposer to finalize an unavailable state, which can cause loss of funds."
}
],
"stage": "Not applicable",
"type": "Other",
"vm": [
"AppChain"
]
}
scalingStage+3-0
{
"stage": "NotApplicable"
}
scalingRisks+103-0
{
"host": {
"stateValidation": {
"value": "Fraud proofs (INT)",
"description": "Fraud proofs allow actors watching the chain to prove that the state is incorrect. Interactive proofs (INT) require multiple transactions over time to resolve.",
"executionDelay": 172800,
"challengeDelay": 549816,
"sentiment": "good",
"orderHint": null,
"initialBond": "3600.0",
"secondLine": "8d 8h challenge + execution delay"
},
"dataAvailability": {
"value": "Onchain",
"description": "All of the data needed for proof construction is published on Ethereum L1.",
"sentiment": "good",
"orderHint": null
},
"exitWindow": {
"value": "10d",
"description": "Non-emergency upgrades are initiated on L2 and go through a 8d delay on L2 and a 3d delay on L1. Since there is a 1d delay to force a tx (forcing the inclusion in the following state update), users have 10d to exit.",
"sentiment": "warning",
"orderHint": 864000,
"warning": {
"value": "The Security Council can upgrade with no delay.",
"sentiment": "bad"
}
},
"sequencerFailure": {
"value": "Self sequence",
"description": "In the event of a sequencer failure, users can force transactions to be included in the project's chain by sending them to L1. There can be up to a 1d delay on this operation.",
"sentiment": "good",
"orderHint": 86400,
"secondLine": "1d delay"
},
"proposerFailure": {
"value": "Self propose",
"description": "Anyone can be a Proposer and propose new roots to the L1 bridge.",
"sentiment": "good",
"orderHint": 0
}
},
"self": {
"stateValidation": {
"value": "None",
"description": "Currently the system permits invalid state roots. More details in project overview.",
"sentiment": "bad",
"orderHint": null
},
"dataAvailability": {
"value": "External",
"description": "Proof construction and state derivation rely fully on data that is NOT published onchain.",
"sentiment": "bad"
},
"exitWindow": {
"value": "None",
"description": "There is no window for users to exit in case of an unwanted regular upgrade since contracts are instantly upgradable.",
"sentiment": "bad",
"orderHint": -200
},
"sequencerFailure": {
"value": "No mechanism",
"description": "There is no mechanism to have transactions be included if the sequencer is down or censoring.",
"sentiment": "bad"
},
"proposerFailure": {
"value": "Cannot withdraw",
"description": "Only the whitelisted proposers can publish state roots on L1, so in the event of failure the withdrawals are frozen.",
"sentiment": "bad",
"orderHint": null
}
},
"stacked": {
"stateValidation": {
"value": "None",
"description": "Currently the system permits invalid state roots. More details in project overview.",
"sentiment": "bad",
"orderHint": null
},
"dataAvailability": {
"value": "External",
"description": "Proof construction and state derivation rely fully on data that is ultimately NOT published on Ethereum.",
"sentiment": "bad"
},
"exitWindow": {
"value": "None",
"description": "There is no window for users to exit in case of an unwanted regular upgrade since contracts are instantly upgradable.",
"sentiment": "bad",
"orderHint": -200
},
"sequencerFailure": {
"value": "No mechanism",
"description": "There is no mechanism to have transactions be included if the sequencer is down or censoring.",
"sentiment": "bad"
},
"proposerFailure": {
"value": "Cannot withdraw",
"description": "Only the whitelisted proposers can publish state roots on L1, so in the event of failure the withdrawals are frozen.",
"sentiment": "bad",
"orderHint": null
}
}
}
scalingDa+18-0
[
{
"layer": {
"value": "Hyperliquid DA",
"sentiment": "bad",
"description": "The data is custodied by Hyperliquid validators. On Arbitrum there is no direct reference of the data."
},
"bridge": {
"value": "None",
"sentiment": "bad",
"description": "There is no bridge that can attest if the data has been made available.",
"orderHint": -2
},
"mode": {
"value": "Transaction data"
}
}
]
scalingTechnology+60-0
{
"operator": {
"name": "The system has a centralized operator",
"description": "Hyperliquid is composed of two sets of permissioned validators: a \"hot\" validator set and a \"cold\" validator set. The hot validator set is responsible for initiating withdrawals upon user requests, while cold validators can invalidate them during the 200s challenge period and rotate validator sets after an emergency pause. Both sets are currently composed of 4 validators with equal power. The system accepts a request if signed by 2/3+1 of validator power.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
},
{
"category": "Funds can be stolen if",
"text": "the permissioned validator majority signs an invalid withdrawal request.",
"isCritical": true
},
{
"category": "Funds can be frozen if",
"text": "the permissioned validator set stops processing withdrawals.",
"isCritical": true
},
{
"category": "Funds can be frozen if",
"text": "the permissioned lockers maliciously pause the bridge."
},
{
"category": "Funds can be stolen if",
"text": "the permissioned finalizers don't finalize withdrawals."
}
],
"references": [
{
"title": "Bridge2 - Hyperliquid docs",
"url": "https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/bridge2"
},
{
"title": "Bridge2 contract: function checkValidatorSignatures()",
"url": "https://arbiscan.io/address/0x2Df1c51E09aECF9cacB7bc98cB1742757f163dF7#code#L2190"
}
]
},
"stateValidation": {
"categories": [
{
"title": "No state validation",
"description": "Hyperliquid does not use a proof system to validate state transitions on Arbitrum. Withdrawals are externally verified by the permissioned validator set.",
"risks": [
{
"category": "Funds can be stolen if",
"text": "the permissioned validator majority signs an invalid withdrawal request.",
"isCritical": true
},
{
"category": "Funds can be frozen if",
"text": "the permissioned validator set stops processing withdrawals.",
"isCritical": true
}
]
}
]
}
}