mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-06-06 05:51:19 +08:00
chore(hyperliquid): refresh shared wallet-connect constants
The Hyperliquid wallet-connect flow signs configuration values that
must match what the server expects and what the order placement layer
sends on-chain. The same constants live in four call sites:
- trader/hyperliquid/trader.go (used at order placement)
- api/handler_hyperliquid_wallet.go (returned by the connect endpoint
and validated on submit)
- web/src/components/common/HyperliquidWalletConnect.tsx
(signed by the user during connect)
- trader/hyperliquid/builder_fee_test.go
(pins the trader-side value)
Refresh all four together so the surfaces stay in lockstep.
This commit is contained in:
@@ -15,9 +15,12 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
defaultHyperliquidBuilderAddress = "0x891dc6f05ad47a3c1a05da55e7a7517971faaf0d"
|
defaultHyperliquidBuilderAddress = "0x891dc6f05ad47a3c1a05da55e7a7517971faaf0d"
|
||||||
defaultHyperliquidBuilderMaxFee = "0.1%"
|
// 0.05% (万5) — matches BuilderInfo.Fee=50 charged at order placement.
|
||||||
hyperliquidExchangeURL = "https://api.hyperliquid.xyz/exchange"
|
// New wallet approvals sign this exact value; existing approvals at the
|
||||||
hyperliquidInfoURL = "https://api.hyperliquid.xyz/info"
|
// prior 0.1% cap remain valid because 0.05% is within their approved max.
|
||||||
|
defaultHyperliquidBuilderMaxFee = "0.05%"
|
||||||
|
hyperliquidExchangeURL = "https://api.hyperliquid.xyz/exchange"
|
||||||
|
hyperliquidInfoURL = "https://api.hyperliquid.xyz/info"
|
||||||
)
|
)
|
||||||
|
|
||||||
type hyperliquidSubmitRequest struct {
|
type hyperliquidSubmitRequest struct {
|
||||||
|
|||||||
@@ -9,7 +9,10 @@ func TestDefaultBuilderIsHardcodedToApprovedFeeTier(t *testing.T) {
|
|||||||
if got := defaultBuilder.Builder; got != "0x891dc6f05ad47a3c1a05da55e7a7517971faaf0d" {
|
if got := defaultBuilder.Builder; got != "0x891dc6f05ad47a3c1a05da55e7a7517971faaf0d" {
|
||||||
t.Fatalf("defaultBuilder.Builder = %s, want hardcoded NOFX builder", got)
|
t.Fatalf("defaultBuilder.Builder = %s, want hardcoded NOFX builder", got)
|
||||||
}
|
}
|
||||||
if got := defaultBuilder.Fee; got != 100 {
|
// Fee is in tenths of a basis point: 50 = 5 bps = 0.05% (万5).
|
||||||
t.Fatalf("defaultBuilder.Fee = %d, want hardcoded 100 for 0.1%%", got)
|
// Must match defaultHyperliquidBuilderMaxFee on the API side and the
|
||||||
|
// frontend HYPERLIQUID_BUILDER_MAX_FEE constant the user signs against.
|
||||||
|
if got := defaultBuilder.Fee; got != 50 {
|
||||||
|
t.Fatalf("defaultBuilder.Fee = %d, want hardcoded 50 for 0.05%%", got)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,9 +62,13 @@ var xyzDexAssets = map[string]bool{
|
|||||||
// defaultBuilder is the builder info for order routing.
|
// defaultBuilder is the builder info for order routing.
|
||||||
// Users approve this builder during the top-right Hyperliquid connect flow before
|
// Users approve this builder during the top-right Hyperliquid connect flow before
|
||||||
// their generated agent wallet is saved for live trading.
|
// their generated agent wallet is saved for live trading.
|
||||||
|
//
|
||||||
|
// Fee is in tenths of a basis point: 50 = 5 bps = 0.05% (万5). Existing
|
||||||
|
// approvals at the prior 0.1% cap remain valid on-chain because 0.05% is
|
||||||
|
// still within their approved max.
|
||||||
var defaultBuilder = &hyperliquid.BuilderInfo{
|
var defaultBuilder = &hyperliquid.BuilderInfo{
|
||||||
Builder: "0x891dc6f05ad47a3c1a05da55e7a7517971faaf0d",
|
Builder: "0x891dc6f05ad47a3c1a05da55e7a7517971faaf0d",
|
||||||
Fee: 100,
|
Fee: 50,
|
||||||
}
|
}
|
||||||
|
|
||||||
// isXyzDexAsset checks if a symbol is an xyz dex asset.
|
// isXyzDexAsset checks if a symbol is an xyz dex asset.
|
||||||
|
|||||||
@@ -48,7 +48,10 @@ interface FlowState {
|
|||||||
const STORAGE_KEY = 'nofx.hyperliquid.connection.v6'
|
const STORAGE_KEY = 'nofx.hyperliquid.connection.v6'
|
||||||
const AGENT_NAME = 'NOFX Agent'
|
const AGENT_NAME = 'NOFX Agent'
|
||||||
const HYPERLIQUID_BUILDER_ADDRESS = '0x891dc6f05ad47a3c1a05da55e7a7517971faaf0d'
|
const HYPERLIQUID_BUILDER_ADDRESS = '0x891dc6f05ad47a3c1a05da55e7a7517971faaf0d'
|
||||||
const HYPERLIQUID_BUILDER_MAX_FEE = '0.1%'
|
// 0.05% (万5). Must match the server's defaultHyperliquidBuilderMaxFee and
|
||||||
|
// the BuilderInfo.Fee=50 (= 5 bps) used at order placement. The user signs
|
||||||
|
// this exact string when approving the builder during wallet connect.
|
||||||
|
const HYPERLIQUID_BUILDER_MAX_FEE = '0.05%'
|
||||||
|
|
||||||
function shortAddress(address?: string) {
|
function shortAddress(address?: string) {
|
||||||
if (!address) return ''
|
if (!address) return ''
|
||||||
|
|||||||
Reference in New Issue
Block a user