跳到正文

    按 / 搜索,按 [ 和 ] 前往上一页和下一页。

    深入原理

    充值:CREATE2 代理合约

    充值的方式是把 USDC 发送到你在 HyperCore 上的专属地址。到达该地址的资金都会计入你的账户;不需要调用充值函数,也不需要任何授权。请通过应用充值:发送到 HyperEVM 上同一地址的 USDC 不会入账。

    通过专属充值地址充值发送到你在 HyperCore 上专属充值地址的 USDC 会被归集到 Exchange,经过两项检查后计入你的余额。1你发送 USDC到你的充值地址2充值代理合约只有 Exchange 能转出资金的合约3归集请求在 HyperCore 上由代理转给 Exchange4两项检查代理余额减少且资金已到账5入账你的交易余额
    通过专属充值地址充值. 发送到你在 HyperCore 上专属充值地址的 USDC 会被归集到 Exchange,经过两项检查后计入你的余额。

    你的专属充值地址

    每个账户都有自己的充值地址,由 DepositProxyFactory 根据钱包地址用 CREATE2 计算得出:

    proxy    = last 20 bytes of keccak256(0xff ‖ factory ‖ keccak256(user) ‖ keccak256(initCode))
    initCode = DepositProxy creation code ‖ abi.encode(exchange, user)
    

    所有输入都是公开的,任何人都能重新算出这个地址;在它背后的合约部署之前,这个地址就可以接收资金。合约在第一笔充值被归集时部署,部署者要么是我们中继的部署密钥,要么是账户本人;其他人都无法部署。

    应用在发送任何资金之前,先向我们的归集服务登记这个地址,并把自己的计算结果与服务器的回答和链上数据比对;不一致就不发送任何资金。每条资金通道都到达该地址在 HyperCore 上的一侧:Hyperliquid 转账、Circle CCTP 铸造,以及经由 HyperEVM 上 Circle 的 HyperCore 充值合约到达的 Across 跨链兑付。在 HyperEVM 上直接向代理合约转账代币不会被监控,也不会入账。

    归集服务接手

    我们的归集服务会对资金到达的迹象作出反应:已索引的 CCTP 和 HyperEVM 充值、转入已登记地址的 HyperCore 转账,以及应用请求的检查。当某个充值地址持有至少 10 USDC 时,它会发起两个 Exchange 调用,两者都是公开的:

    1. 请求。Exchange 读取代理合约在 HyperCore 上的余额。如果 USDC 在合约账户的保证金中,它先请代理合约转到现货,然后停止;下一次请求再归集。否则,它记录一笔待处理归集(金额以及此刻代理合约的余额),并请代理合约通过 CoreWriter 把这笔金额转到 Exchange 的 HyperCore 账户。
    2. 确认。在之后的区块中(距请求至少 1 个区块),当且仅当两项检查都成立时,Exchange 才为你入账:代理合约的余额已低于记录值(只有 Exchange 能转出,说明转账已执行),并且 Exchange 自身的 HyperCore 余额超出其已有全部负债至少这笔金额(资金已到账,且尚未计入任何人名下)。

    只检查代理合约的余额,会在转账失败但已扣费时错误入账,或者在转账延迟、同一时间窗口内又有新充值到达时重复入账;要求资金确实到账就堵住了这两个漏洞。如果检查暂未通过,之后的区块会重试确认。在 5 个区块内仍未到账的归集会被标记为未确认,并记录其金额;核对人之后可以为它入账,但金额不超过记录值,只能来自可验证已到账且不属于任何人的资金,并且必须在 30 天 之内。每次核对都是一个链上事件。正因如此,应用每次只发送一笔充值,并等待它入账。

    资金到达你的地址后,通常在几个区块内计入你的余额;第一笔充值还要等代理合约部署,并支付 HyperCore 一次性的账户激活费 1 USDC。

    为什么用代理合约,而不是直接充值

    原因有两个。第一是方便:调用充值函数需要先授权再充值,每一步都要支付 gas。代理合约把充值变成向一个地址的普通转账,无论资金来自 Hyperliquid、Circle 跨链桥还是 Across,方式都一样。

    第二是隔离:每个账户的代理合约都是独立的地址,别人的资金不会与你的混在一起,归集服务也逐个账户分别处理。一个账户的充值出了问题,不会影响其他账户。

    你需要信任什么

    所有代理合约都由同一个工厂合约用 CREATE2 和固定代码部署。任何人都可以为任意钱包推导出预期地址,并核对该地址上的合约是否一致:工厂地址、盐值和代码哈希都是公开的。如果代码有任何改变,推导出的地址也会随之改变;你的旧地址上将没有合约,而不会悄悄指向另一份代码。工厂合约和代理合约都不可升级。

    只有 Exchange 能让代理合约转出 USDC,而且只能转给 Exchange。发错地方的资金只有你本人能取回:到达 HyperEVM 上代理合约的代币或 HYPE,用你的钱包在代理合约上调用 withdrawStuckToken 和 withdrawStuckNative 取回;到达其 HyperCore 账户的非 USDC 代币,用你的钱包在 Exchange 上调用 rescueProxyCoreToken 取回。

    最后更新: