Bu sayfa otomatik olarak çevrilmiştir. İngilizce orijinal kanonik versiyondur. İngilizce oku →
Ana içeriğe geç

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.sender adresine izin vermelidir.

Davranış:

  • Account'u manager adresi ve salt ile CREATE2 kullanarak dağıtır; böylece adres predictAccount aracılığıyla önceden bilinir.
  • Account'u Exchange'e kaydeder ve msg.sender adresini manager olarak atar.
  • Gönderilen msg.value tutarı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 name bir cüzdan ekler. Mevcut bir name ise o addaki cüzdanı değiştirir.
  • addr = 0x0, name altı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.sender adresinden çıkarmayın.

Gereksinimler:

  • account != address(0) ve amount > 0
  • msg.sender, Exchange'e amount kadar 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;
  • account kayıtlı bir Hypercall Account'u olmalıdır.
  • token, Option Registry'de desteklenen bir opsiyon olmalıdır.
  • amount tutarını msg.sender adresinden yakar (önce Exchange'e onay verin) ve motorun hesaba geçirdiği Deposit(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.value oluşturma depozitosunun altında
  • Factory__CreationNotAllowed(): oluşturma filtresi tarafından engellendi
  • Exchange__AccountDoesNotExist(address account): kayıtlı bir Account değil
  • Exchange__TokenNotSupported(address token): desteklenen bir opsiyon token'ı değil
  • Account__NotManager(address addr): çağıran veya imzalayan manager değil
  • Account__ApiWalletNotActive(address addr): imzalayan aktif bir API cüzdanı değil
  • Account__ApiWalletAlreadyActive(address addr): API cüzdanı zaten Account üzerinde
  • Account__ApiWalletIsManager(): manager kendi API cüzdanı olamaz
  • Account__NonceAlreadyUsed(address signer, uint256 nonce): nonce yeniden kullanıldı
  • Account__LiquidationInProgress(): işlem likidasyon sırasında engellendi

Güvenlik Hususları​

  1. Manager anahtarı: API cüzdanlarını, dışarı transferleri ve builder onayını kontrol eder. Bir donanım cüzdanı kullanın.
  2. 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.
  3. Nonce'lar: her imzalayanın kendi nonce alanı vardır. Milisaniye cinsinden zaman damgaları kullanın ve bunları zincir dışında takip edin.
  4. 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).