mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-15 16:56:56 +08:00
@@ -22,6 +22,7 @@ type TraderConfig struct {
|
|||||||
|
|
||||||
// Hyperliquid配置
|
// Hyperliquid配置
|
||||||
HyperliquidPrivateKey string `json:"hyperliquid_private_key,omitempty"`
|
HyperliquidPrivateKey string `json:"hyperliquid_private_key,omitempty"`
|
||||||
|
HyperliquidWalletAddr string `json:"hyperliquid_wallet_addr,omitempty"`
|
||||||
HyperliquidTestnet bool `json:"hyperliquid_testnet,omitempty"`
|
HyperliquidTestnet bool `json:"hyperliquid_testnet,omitempty"`
|
||||||
|
|
||||||
// Aster配置
|
// Aster配置
|
||||||
|
|||||||
2
go.sum
2
go.sum
@@ -74,6 +74,8 @@ github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
|
|||||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
|
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
|
||||||
|
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ func (tm *TraderManager) AddTrader(cfg config.TraderConfig, coinPoolURL string,
|
|||||||
BinanceAPIKey: cfg.BinanceAPIKey,
|
BinanceAPIKey: cfg.BinanceAPIKey,
|
||||||
BinanceSecretKey: cfg.BinanceSecretKey,
|
BinanceSecretKey: cfg.BinanceSecretKey,
|
||||||
HyperliquidPrivateKey: cfg.HyperliquidPrivateKey,
|
HyperliquidPrivateKey: cfg.HyperliquidPrivateKey,
|
||||||
|
HyperliquidWalletAddr: cfg.HyperliquidWalletAddr,
|
||||||
HyperliquidTestnet: cfg.HyperliquidTestnet,
|
HyperliquidTestnet: cfg.HyperliquidTestnet,
|
||||||
AsterUser: cfg.AsterUser,
|
AsterUser: cfg.AsterUser,
|
||||||
AsterSigner: cfg.AsterSigner,
|
AsterSigner: cfg.AsterSigner,
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ type AutoTraderConfig struct {
|
|||||||
|
|
||||||
// Hyperliquid配置
|
// Hyperliquid配置
|
||||||
HyperliquidPrivateKey string
|
HyperliquidPrivateKey string
|
||||||
|
HyperliquidWalletAddr string
|
||||||
HyperliquidTestnet bool
|
HyperliquidTestnet bool
|
||||||
|
|
||||||
// Aster配置
|
// Aster配置
|
||||||
@@ -138,7 +139,7 @@ func NewAutoTrader(config AutoTraderConfig) (*AutoTrader, error) {
|
|||||||
trader = NewFuturesTrader(config.BinanceAPIKey, config.BinanceSecretKey)
|
trader = NewFuturesTrader(config.BinanceAPIKey, config.BinanceSecretKey)
|
||||||
case "hyperliquid":
|
case "hyperliquid":
|
||||||
log.Printf("🏦 [%s] 使用Hyperliquid交易", config.Name)
|
log.Printf("🏦 [%s] 使用Hyperliquid交易", config.Name)
|
||||||
trader, err = NewHyperliquidTrader(config.HyperliquidPrivateKey, config.HyperliquidTestnet)
|
trader, err = NewHyperliquidTrader(config.HyperliquidPrivateKey, config.HyperliquidWalletAddr, config.HyperliquidTestnet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("初始化Hyperliquid交易器失败: %w", err)
|
return nil, fmt.Errorf("初始化Hyperliquid交易器失败: %w", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package trader
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/ecdsa"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -20,7 +19,7 @@ type HyperliquidTrader struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewHyperliquidTrader 创建Hyperliquid交易器
|
// NewHyperliquidTrader 创建Hyperliquid交易器
|
||||||
func NewHyperliquidTrader(privateKeyHex string, testnet bool) (*HyperliquidTrader, error) {
|
func NewHyperliquidTrader(privateKeyHex string, walletAddr string, testnet bool) (*HyperliquidTrader, error) {
|
||||||
// 解析私钥
|
// 解析私钥
|
||||||
privateKey, err := crypto.HexToECDSA(privateKeyHex)
|
privateKey, err := crypto.HexToECDSA(privateKeyHex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -33,13 +32,13 @@ func NewHyperliquidTrader(privateKeyHex string, testnet bool) (*HyperliquidTrade
|
|||||||
apiURL = hyperliquid.TestnetAPIURL
|
apiURL = hyperliquid.TestnetAPIURL
|
||||||
}
|
}
|
||||||
|
|
||||||
// 从私钥生成钱包地址
|
// // 从私钥生成钱包地址
|
||||||
pubKey := privateKey.Public()
|
// pubKey := privateKey.Public()
|
||||||
publicKeyECDSA, ok := pubKey.(*ecdsa.PublicKey)
|
// publicKeyECDSA, ok := pubKey.(*ecdsa.PublicKey)
|
||||||
if !ok {
|
// if !ok {
|
||||||
return nil, fmt.Errorf("无法转换公钥")
|
// return nil, fmt.Errorf("无法转换公钥")
|
||||||
}
|
// }
|
||||||
walletAddr := crypto.PubkeyToAddress(*publicKeyECDSA).Hex()
|
// walletAddr := crypto.PubkeyToAddress(*publicKeyECDSA).Hex()
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import react from '@vitejs/plugin-react'
|
|||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [react()],
|
plugins: [react()],
|
||||||
server: {
|
server: {
|
||||||
|
host: '0.0.0.0',
|
||||||
port: 3000,
|
port: 3000,
|
||||||
proxy: {
|
proxy: {
|
||||||
'/api': {
|
'/api': {
|
||||||
|
|||||||
Reference in New Issue
Block a user