-
Notifications
You must be signed in to change notification settings - Fork 164
Description
Summary
CoreDepositWallet.depositFor() on HyperEVM testnet (chain 998) succeeds on the EVM side (transaction status=1, events emitted, USDC burned) but never creates the corresponding HyperCore account. The coreUserExists precompile (0x0000000000000000000000000000000000000810) returns False indefinitely, and no spot balances or EVM escrow entries appear on HyperCore. The deposited USDC is effectively lost.
The same code works correctly on mainnet (chain 999) — coreUserExists returns True within 2-4 seconds after depositFor.
Environment
- Network: HyperEVM testnet (chain ID 998)
- RPC:
https://rpc.hyperliquid-testnet.xyz/evm - API:
https://api.hyperliquid-testnet.xyz - CoreDepositWallet:
0x0B80659a4076E9E93C7DbE0f10675A16a3e5C206 - Deployer EOA:
0x4E6B7f7aFB2E23Bf9355c10e4454f73E6E6F3D9c(has active HyperCore account with 159 USDC in spot)
Reproduction
We deploy a Safe multisig on HyperEVM testnet, then call CoreDepositWallet.depositFor(safeAddress, amount, 0xFFFFFFFF) to activate the Safe's HyperCore account. The EVM transaction succeeds but the account is never created.
Test 1: 2 USDC, 60s timeout
- Safe:
0xe0983b68A7a8EFfbC5935f492D443DB54FC8D79D - depositFor tx:
0x21c3487a6c84ef34f0e74276cf8ae00b656f534db8aa87aa2d1fd8fe81e3846f - Result:
coreUserExistsreturnsFalsefor 60 seconds, then timeout
2026-03-09 19:13:29 Account 0xe0983b68A7a8EFfbC5935f492D443DB54FC8D79D coreUserExists on HyperCore: False
2026-03-09 19:13:31 Account 0xe0983b68A7a8EFfbC5935f492D443DB54FC8D79D coreUserExists on HyperCore: False
...repeated every 2s for 60 seconds...
TimeoutError: Account 0xe0983b68A7a8EFfbC5935f492D443DB54FC8D79D was not activated within 60.0s after depositFor transaction 21c3487a6c84ef34f0e74276cf8ae00b656f534db8aa87aa2d1fd8fe81e3846f
Test 2: 5 USDC, 180s timeout
- Safe:
0xb4282406b0B6EE9AA8EB34D2a86136C98344c23c - depositFor tx:
0xe9b22a1e82b25f49599125b3bc71b801a351045b5be57f273b1a346dc672776a - Result:
coreUserExistsreturnsFalsefor 180 seconds, then timeout
Post-mortem check (via Hyperliquid info API)
After both tests, querying the Safe's HyperCore state shows:
- Spot balances: 0
- EVM escrows: 0
- Perp account value: 0
- Vault positions: 0
The USDC was burned on HyperEVM but never appeared anywhere on HyperCore.
What we investigated
- Increased deposit amount from 2 USDC to 5 USDC (well above the 1 USDC account creation fee) — same result
- Increased timeout from 60s to 180s —
coreUserExistsnever flips toTrue - Verified deployer account is active on HyperCore testnet (159 USDC in spot, 14 token balances)
- Verified EVM transactions succeeded with status=1 and emitted expected events (4 logs including USDC burn)
- Checked EVM escrow — no entries, meaning the bridge either processed silently or never queued
- Reviewed interaction timing docs — understood that EVM→Core transfers are processed after EVM block construction, but 180s is far beyond any documented latency
Suspected cause
The testnet faucet docs state:
Your master account must be activated on mainnet by sending at least $5 USDC on Arbitrum to the bridge address
This appears to apply to all accounts, not just EOAs. A freshly deployed Safe contract address has no mainnet presence, so the testnet HyperCore L1 may be rejecting the account creation silently.
If this is the case, it means depositFor to any new contract address on testnet will always fail, making testnet unusable for testing Safe/multisig activation flows.
Expected behaviour
CoreDepositWallet.depositFor(contractAddress, amount, SPOT_DEX) should create a HyperCore account for the target address on testnet, the same way it does on mainnet. Or, if there is a prerequisite (like mainnet activation), the EVM transaction should revert rather than silently burning the USDC.
Source code
Our activation code: https://github.com/tradingstrategy-ai/web3-ethereum-defi/blob/master/eth_defi/hyperliquid/evm_escrow.py
Related to #9 (must deposit before performing actions).