Hesap Açılışı
Bu sayfa zincir üstü Account yaşam döngüsünü, fonlamayı ve API cüzdanı yönetimini kapsar. Adresler Contracts sayfasında yer alır ve GET /exchange-info güncel Exchange, Factory ve para yatırma router adreslerini döndürür.
Genel Bakış
Hypercall, yönetici (manager) ve API cüzdanı modelini kullanır:
- Manager: Account'u oluşturan ve sahibi olan EOA (genellikle ana cüzdanınız).
- Account: HyperCore bakiyelerinizi ve pozisyonlarınızı tutan ve imzalı direktifleri yürüten bir BeaconProxy sözleşmesi.
- API cüzdanı: Manager'ın, emir ve iptalleri imzalaması için Account üzerinde yetkilendirdiği bir EOA.
Account'lar Factory tarafından oluşturulur. İmzalı direktifler, Hypercall'un sıralayıcısı (sequencer) tarafından Exchange'e gönderilir; siz imzalarsınız, Hypercall gönderir.
Account Yaşam Döngüsü
1. Mevcut Account'ları Kontrol Edin
// Exchange
function getAccounts(address manager) external view returns (ManagedAccount[] memory);
struct ManagedAccount {
address account;
address manager;
ApiWallet[] apiWallets; // { bytes32 name; address addr; }
}
2. Account Oluşturun
// Factory
function createAccount(uint96 salt) external payable returns (address account);
function getCreationDeposit() external view returns (uint256); // in HYPE wei
function predictAccount(address manager, uint96 salt) external view returns (address account, bool exists);
Gereksinimler:
msg.value >= getCreationDeposit(). Factory, oluşturma depozitosunu USD cinsinden belirler ve HyperCore spot fiyatı üzerinden yukarı yuvarlayarak HYPE'a çevirir. Ana ağda bu tutar şu anda 1,50 $'dır.- Bir oluşturma filtresi yapılandırılmışsa,
msg.senderadresine izin vermelidir.
Davranış:
- Account'u manager adresi ve
saltile CREATE2 kullanarak dağıtır; böylece adrespredictAccountaracılığıyla önceden bilinir. - Account'u Exchange'e kaydeder ve
msg.senderadresini manager olarak atar. - Gönderilen
msg.valuetutarını HYPE olarak HyperCore üzerindeki Account'a köprüler. En az 1 $ değerindeki bir yatırım, Account'u HyperCore üzerinde aktifleştirir.
const factory = new ethers.Contract(FACTORY_ADDRESS, FACTORY_ABI, signer);
const salt = 0n;
const [predicted] = await factory.predictAccount(managerAddress, salt);
const value = await factory.getCreationDeposit();
await (await factory.createAccount(salt, { value })).wait();
3. Manager Değişiklikleri
Manager devretme fonksiyonu yoktur. Manager yalnızca zincir üstü bir likidasyon açık artırması sonuçlandığında değişebilir ve ana ağda yapılandırılmış bir açık artırmacı (auctioneer) yoktur. Değişiklik olduğunda Exchange AccountTransferred(account, oldManager, newManager), Account ise ManagerSet(oldManager, newManager) olayını yayınlar.
API Cüzdanı Yönetimi
API cüzdanları Account üzerinde, bytes32 türünde bir ad ile anahtarlanarak saklanır. Direktifleri HypercallApiSign EIP-712 alanında imzalarlar. Bkz. EIP-712 İmzalama.
Ekleme, Değiştirme veya Kaldırma
Manager tarafından HypercallManagerSign alanında imzalanmış bir hc_update_api_wallet direktifi gönderin:
HCUpdateApiWallet(address account,uint64 nonce,UpdateApiWallet action)UpdateApiWallet(bytes32 name,address addr)
- Yeni bir
namebir cüzdan ekler. Mevcut birnameise o addaki cüzdanı değiştirir. addr = 0x0,namealtındaki cüzdanı kaldırır.- API cüzdanı manager olamaz ve Account üzerinde zaten aktif olamaz.
Bunu account, nonce, action ({ "name": "0x...", "addr": "0x..." }) ve signature alanlarıyla POST /v1/actions/hc_update_api_wallet adresine gönderin. POST /v1/actions/hc_update_api_wallet/typed-data, imzalanacak typed data'yı birebir döndürür. Zincir üstü sonuç için GET /v1/directives/{directive_id} adresini sorgulayın. Account, ApiWalletUpdated(name, addr) olayını yayınlar.
Sorgulama
// Account
function getApiWallets() external view returns (ApiWallet[] memory);
function getApiWallet(bytes32 name) external view returns (address);
function isApiWalletActive(address addr) external view returns (bool);
Fonlama ve Para Yatırma
Hypercall'a USDC Yatırma
// Exchange
function depositUsdcFor(address account, uint256 amount) external;
depositUsdcFor, Hypercall nakdi için doğrudan HyperEVM fonlama yoludur. Yerel HyperEVM USDC'sini msg.sender adresinden Exchange'e çeker, ardından Circle'ın CoreDepositWallet sözleşmesi aracılığıyla Exchange'in HyperCore bakiyesine yatırır.
Kimler çağırabilir:
- Herhangi bir cüzdan, router, solver veya zap sözleşmesi.
- USDC'yi
msg.senderöder. account, alacak kaydedilecek Hypercall hesabı veya cüzdanıdır. Alacak kaydedilen hesabımsg.senderadresinden çıkarmayın.
Gereksinimler:
account != address(0)veamount > 0msg.sender, Exchange'eamountkadar USDC için onay vermiş olmalıdır
event UsdcDeposit(
address indexed account,
address indexed from,
address indexed token,
uint256 amount,
uint32 dstDex
);
Hypercall, nakdi yalnızca bu olayı gözlemlenen HyperCore yatırımıyla eşleştirdikten sonra hesaba geçirir. Alacak kaydedilen hesap account alanıdır.
await usdc.approve(EXCHANGE_ADDRESS, amount);
await exchange.depositUsdcFor(accountAddress, amount);
Router'ın deposit(account, token, amount, isPerp) fonksiyonu, uygulamanın USDC, spot token'lar ve opsiyon token'ları için kullandığı genel yardımcı fonksiyondur.
Opsiyon Token'ı Yatırma
// Exchange
function depositOption(address account, address token, uint256 amount) external;
accountkayıtlı bir Hypercall Account'u olmalıdır.token, Option Registry'de desteklenen bir opsiyon olmalıdır.amounttutarınımsg.senderadresinden yakar (önce Exchange'e onay verin) ve motorun hesaba geçirdiğiDeposit(account, msg.sender, token, amount)olayını yayınlar.
Account'tan Transfer
// Account, manager only
function transferTo(address recipient, address token, uint256 amount) external;
Account'un HyperEVM üzerinde tuttuğu yerel HYPE'ı (token = 0x0) veya bir ERC20 token'ını recipient adresine aktarır. HyperCore'dan HyperEVM'e transferleri tamamlamak veya Account'u boşaltmak için kullanın. Account likidasyondayken kullanılamaz.
Perp'ler için Builder Onayı
// Account, manager only
function approveZeroFeeBuilder(address builder) external;
Account için bir Hyperliquid builder'ını %0 maksimum ücretle onaylar. Her Hypercall perp emri Hypercall builder kodunu taşır; bu nedenle ilk perp emrinden önce GET /exchange-info yanıtındaki hl_builder_address ile bunu bir kez çağırın. Uygulama bunu Enable trading adımında yapar.
Olaylar
// Exchange
event AccountTransferred(address indexed account, address indexed oldManager, address indexed newManager);
event Deposit(address indexed account, address indexed from, address indexed token, uint256 amount);
event Withdraw(address indexed account, address indexed to, address indexed token, uint256 amount);
// Factory
event AccountCreated(address indexed account, address indexed manager);
// Account
event ApiWalletUpdated(bytes32 indexed name, address indexed addr);
event ManagerSet(address indexed oldManager, address indexed newManager);
Hatalar
Factory__CreationDepositNotMet(uint256 expected):msg.valueoluşturma depozitosunun altındaFactory__CreationNotAllowed(): oluşturma filtresi tarafından engellendiExchange__AccountDoesNotExist(address account): kayıtlı bir Account değilExchange__TokenNotSupported(address token): desteklenen bir opsiyon token'ı değilAccount__NotManager(address addr): çağıran veya imzalayan manager değilAccount__ApiWalletNotActive(address addr): imzalayan aktif bir API cüzdanı değilAccount__ApiWalletAlreadyActive(address addr): API cüzdanı zaten Account üzerindeAccount__ApiWalletIsManager(): manager kendi API cüzdanı olamazAccount__NonceAlreadyUsed(address signer, uint256 nonce): nonce yeniden kullanıldıAccount__LiquidationInProgress(): işlem likidasyon sırasında engellendi
Güvenlik Hususları
- Manager anahtarı: API cüzdanlarını, dışarı transferleri ve builder onayını kontrol eder. Bir donanım cüzdanı kullanın.
- API cüzdanı anahtarları: yalnızca emir ve iptalleri imzalar. Her sistem için ayrı anahtarlar kullanın ve bunları düzenli olarak değiştirin.
- Nonce'lar: her imzalayanın kendi nonce alanı vardır. Milisaniye cinsinden zaman damgaları kullanın ve bunları zincir dışında takip edin.
- Aktivasyon: Account'un perp işlemi yapabilmesi için HyperCore üzerinde aktifleştirilmiş olması gerekir (en az 1 $ değerinde HYPE yatırılmış olmalıdır).