• 元宇宙:本站分享元宇宙相关资讯,资讯仅代表作者观点与平台立场无关,仅供参考.

Hyperliquid技术解读:桥合约、HyperEVM及其潜在问题

  • 2025年1月08日 23:53

作者:Shew,仙壤GodRealmX

近期广受市场关注的Hyperliquid是最有影响力的链上订单薄交易所之一,其TVL已超过20亿美元,在被Messari评价为“链上Binance”的同时,甚至还把本已淡出大众视角的Layer3、应用链叙事重新拉回聚光灯下。凭借着Token上线一个月内FDV拉至300亿美元的辉煌成绩,Hyperliquid获得了从普通用户到从业人员的广泛关注,与此同时市面上也涌现出了大量关于Hyperliquid的研报,但这些文章基本聚焦于其在订单簿产品功能和交易机制上的特点,没有深入探究其背后的技术构造以及安全隐患。

本文作者旨在补足这一空缺,单纯从技术构造与安全的角度来考察Hyperliquid,帮助更多人理解这一明星项目的结构与原理。我们将从Hyperliquid跨链桥合约的构造与隐患、HyperEVM与HyperL1双链构造两大角度展开阐述,帮助大家深入理解其背后的技术架构与实现方式。

finalizers其实也是一组特殊的验证者,主要用于确认跨链桥的状态变化,从合约层面来看主要确认的就是用户存款和提款。Hyperliquid的跨链桥使用“提交-确认”机制,比如用户发起提款后并不会被立即执行,需要等待一段时间(这段时间被称为争议期)。等待争议期结束后,finalizers内的成员执行提款交易,提款才可以被正常执行。

而一旦跨链桥出现问题,比如某笔提款声明要提走的资产大于该用户实际拥有的资产余额,Hyperliquid节点就可以在争议期内使用lockers投票暂停跨链桥合约运行,或者由coldValidatorSet直接将有问题的提款请求无效化。

目前Hyperliquid的只有4个验证者节点,所以hotValidatorSet和coldValidatorSet只对应4个链上地址。Hyperliquid在初始化时,自动将hotValidatorSet内的地址注册为lockers和finalizers的成员,而coldValidatorSet为Hyperliquid官方自己控制,使用冷钱包来存储密钥。

存款

Hyperliquid的桥合约基于EIP-2612的Permit方法来处理用户的存款操作,且桥合约内只允许用户存入USDC一种资产。Permit相比于传统的Approve—Transfer模式更为简洁,也便于支持批量操作。

Hyperliquid的桥合约使用了batchedDepositWithPermit函数来批量处理多笔存款,这里的存款动作较为简单,不存在资金安全风险,在处理流程上很简洁,只是使用了Permit方法来节优化UX。

假如有恶意攻击者想在Hyperliquid的提款流程中做手脚,就需要突破三道防线:

1.掌握hotValidatorSet内的2/3签名权重,换言之需要获取一定数量的私钥或是串谋;目前HyperLiquid只有4个验证者,被攻击者控制或串谋的可能性不低;

2.在争议期内,攻击者应避免自己的恶意交易被发现,一旦被发现很有可能使lockers出手锁住合约。我们会在下文专门讨论这部分。

3.获取至少一个finalizers成员的私钥,让自己的提款行为被最终确认。目前finalizers成员和hotValidatorSet成员基本一致,所以只要攻击者满足了上述条件1,就自动满足了条件3。

桥合约的锁定

前面我们多次提到了Hyperliquid设置了一个锁定跨链桥合约的功能。具体来说,锁定跨链桥需要lockers成员调用跨链桥合约中的voteEmergencyLock函数进行投票,目前当2名lockers调用该函数给出投票后,跨链桥合约就会被锁定并暂停运转。

但需要注意,HyperLiquid的跨链桥也提供了unvoteEmergencyLock函数,允许lockers成员撤回投票。而一旦跨链桥合约被成功锁定,就只能通过名为emergencyUnlock的函数来解除锁定,需要收集coldValidatorSet成员2/3以上的签名权重。

emergencyUnlock功能在解除锁定的同时,也会输入新的hotValidatorSet和coldValidatorSet验证者地址集合,并且会立即更新。

Precompiles

所谓的预编译(Precompiles),说白了就是将一些在智能合约中不易实现、复杂度较高的操作直接挪到底层中实现,把对Solidity不友好、较为麻烦的计算流程挪到常规的智能合约外部去处理,这类预编译代码可以用C、C++等比Solidity更贴近设备底层的语言来实现。

预编译的方式可以让EVM支持更高级更复杂的功能,便于支持智能合约开发者的需求。在表现形式上,预编译实质就是一组特殊的智能合约,其他智能合约可以直接调用这些特殊合约,传入参数并获得预编译执行的返回结果。目前原生EVM内就通过预编译的方式实现了ecRecover指令,可以在EVM内部检查secp256k1签名是否正确,而该指令就位于0x01地址内。

使用预编译增加一些特殊功能是目前的主流做法,比如Base就增加了P256预编译代码来方便用户进行WebAuth身份鉴权操作。

Events我们在上文提到HyperEVM可以向HyperL1区块内写入数据,写入行为就是依赖于Events实现的。Events是EVM内的原生概念,它允许智能合约在执行过程中向外部(如前端应用或监听器)发送日志信息,便于外界监听智能合约的运行情况。比如在用户使用ERC-20合约的Tokens转账功能时,合约会抛出Transfer相对应的Event,以便于区块浏览器等前端应用获知Tokens转账情况。这些Events信息会被包含在区块内,而监听和检索Events日志都存在大量的成熟方案。

现在很多和跨链相关的场景都会使用Events来传递跨链参数,比如Arbitrum部署在Ethereum主网上的桥合约内,用户就可以调用相关函数抛出事件在Arbitrum上触发交易。

下图展示了在非并行情况下的HyperBFT共识的消息传递方式,可以看到,所有的消息被Leader汇总并统一广播,免去了节点之间自行交换消息的步骤,大幅降低了复杂度。

简单来说,HyperBFT就是当前的leader出块,全体节点参与投票并将投票结果统一发送给Leader,再让下一个leader轮换的共识协议。实际上Hotstuff和Tendermint涉及的具体细节要复杂的多,本文受限于篇幅和侧重点不在此赘述。

对开发者而言需要注意的要点

上述基于Precompiles的数据读取机制是比较完美的,Solidity开发者读取HyperL1状态时不需要专门编写相应的代码,但是需要注意msg.sender的问题。与大部分Ethereum二层类似,HyperLiquid也允许用户直接与HyperL1内的系统合约交互,间接触发在HyperEVM链上的交易动作,此时如果智能合约在该交易内读取msg.sender字段,会发现msg.sender对应的是HyperL1系统合约的地址,而不是最开始在HyperL1上发起交易的用户地址。

而对于EVM与L1的交互,开发者需要注意一系列问题。第一个问题是交互的非原子性问题,假如用户在HyperEVM上通过前述事件地址,间接在L1内挂单,但L1内并没有充分的资产,那么该交易肯定会失败,但用户调用事件地址的函数时不会有错误返回提示。交互的非原子性问题可能导致用户的资产受损。此时对于开发者而言,需要在EVM智能合约端手动处理挂单失败的情况。而且EVM内的智能合约应该有用于最终资金收回的函数,避免用户资产在L1内永远无法提取出来。

其次,EVM对应的合约地址在L1内必须存在映射账户,当用户在EVM内部署完成智能合约后,需要在L1内向映射地址转入少量USDC,迫使L1为合约地址创建账户。该部分操作可能与HyperLiquid的底层共识相关,在Hyperliquid的文档中有明确要求。

最后,开发者需要注意一些特殊情况,特别是Tokens的余额情况。HyperL1存在一个特殊地址用于资产转移,但用户将资产发送到该特殊地址时,资产就会从L1跨到HyperEVM链内。由于HyperLiquid节点实际上同时执行EVM链和L1链,可能在用户转移资产后HyperEVM仍许久未出块,此时用户在EVM链上无法读到自己的余额。

简单来说,此时的用户资产卡在的跨链桥内,无论是在L1还是EVM链内都无法查询,开发者构建的协议应当处理上述特殊情况,避免用户产生恐慌情绪。

总结来看,HyperEVM类似于基于HyperliquidL1的二层,HyperEVM依赖于预编译代码读取L1状态,也依赖于Events来与HyperL1产生交互。L1也存在一些系统合约帮助用户在HyperEVM内触发交易,或是进行资产跨链。但与一般的Layer1——Layer2架构不同,Hyperliquid为HyperEVM提供了更高的互操作性。

参考资料

Hyperliquid:TheHyperoptimizedOrderBookL1

hyperliquid-dex/contracts

TheNot-So-DefinitiveguidetoHyperliquidPrecompiles.

WhatisthedifferencebetweenPBFT,Tendermint,HotStuff,andHotStuff-2?

Copyright © 2021.Company 元宇宙YITB.COM All rights reserved.元宇宙YITB.COM