1m-trade 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 1m_trade-0.3.0/LICENSE +22 -0
- 1m_trade-0.3.0/MANIFEST.in +11 -0
- 1m_trade-0.3.0/PKG-INFO +82 -0
- 1m_trade-0.3.0/README.md +57 -0
- 1m_trade-0.3.0/pyproject.toml +41 -0
- 1m_trade-0.3.0/setup.cfg +4 -0
- 1m_trade-0.3.0/src/1m_trade.egg-info/PKG-INFO +82 -0
- 1m_trade-0.3.0/src/1m_trade.egg-info/SOURCES.txt +18 -0
- 1m_trade-0.3.0/src/1m_trade.egg-info/dependency_links.txt +1 -0
- 1m_trade-0.3.0/src/1m_trade.egg-info/entry_points.txt +2 -0
- 1m_trade-0.3.0/src/1m_trade.egg-info/requires.txt +10 -0
- 1m_trade-0.3.0/src/1m_trade.egg-info/top_level.txt +1 -0
- 1m_trade-0.3.0/src/hl1m_cli/__init__.py +10 -0
- 1m_trade-0.3.0/src/hl1m_cli/__main__.py +6 -0
- 1m_trade-0.3.0/src/hl1m_cli/cli.py +210 -0
- 1m_trade-0.3.0/src/hl1m_cli/constants.py +50 -0
- 1m_trade-0.3.0/src/hl1m_cli/exchange.py +106 -0
- 1m_trade-0.3.0/src/hl1m_cli/info.py +74 -0
- 1m_trade-0.3.0/src/hl1m_cli/secrets.py +161 -0
- 1m_trade-0.3.0/src/hl1m_cli/wallet.py +472 -0
1m_trade-0.3.0/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
1m_trade-0.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: 1m-trade
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Hyperliquid trading and query CLI (HIP-3 supported)
|
|
5
|
+
License: MIT
|
|
6
|
+
Keywords: hyperliquid,trading,dex,cli
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Requires-Python: >=3.10
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Requires-Dist: hyperliquid-python-sdk
|
|
15
|
+
Requires-Dist: websockets<12.0,>=11.0
|
|
16
|
+
Requires-Dist: python-dotenv
|
|
17
|
+
Requires-Dist: cryptography>=42.0.0
|
|
18
|
+
Requires-Dist: eth-account
|
|
19
|
+
Requires-Dist: requests
|
|
20
|
+
Requires-Dist: msgpack
|
|
21
|
+
Requires-Dist: web3
|
|
22
|
+
Requires-Dist: eth-abi
|
|
23
|
+
Requires-Dist: eth-utils
|
|
24
|
+
Dynamic: license-file
|
|
25
|
+
|
|
26
|
+
# 1m-trade
|
|
27
|
+
|
|
28
|
+
Hyperliquid trading and query CLI (HIP-3 supported).
|
|
29
|
+
|
|
30
|
+
## Install
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pip install 1m-trade
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Usage
|
|
37
|
+
|
|
38
|
+
The CLI command is `hl1m`.
|
|
39
|
+
|
|
40
|
+
It loads environment variables from:
|
|
41
|
+
|
|
42
|
+
1. `OPENCLAW_STATE_DIR` (if set)
|
|
43
|
+
2. `OPENCLAW_HOME/.openclaw/.1m-trade/.env`
|
|
44
|
+
3. `~/.openclaw/.1m-trade/.env`
|
|
45
|
+
|
|
46
|
+
### Query examples
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
hl1m query-user-state
|
|
50
|
+
hl1m query-open-orders
|
|
51
|
+
hl1m query-meta
|
|
52
|
+
hl1m query-kline --coin BTC --period 1m --start 1700000000000 --end 1700003600000
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Trading examples
|
|
56
|
+
|
|
57
|
+
> 需要设置私钥环境变量(例如 `HYPERLIQUID_PRIVATE_KEY`,或 `HYPERLIQUID_PRIVATE_KEY_ENC` + `HYPERLIQUID_PK_ENC_PASSWORD`)。
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
hl1m place-order --coin BTC --is-buy true --qty 0.01 --limit-px 60000 --tif Gtc
|
|
61
|
+
hl1m market-order --coin BTC --is-buy true --qty 0.01 --slippage 0.02
|
|
62
|
+
hl1m cancel-order --coin BTC
|
|
63
|
+
hl1m update-leverage --coin BTC --leverage 5 --is-cross true
|
|
64
|
+
hl1m market-close --coin BTC --qty 0.01 --slippage 0.02
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Wallet examples
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
hl1m create-wallet
|
|
71
|
+
hl1m init-wallet --pri_key 0xYourPrivateKey
|
|
72
|
+
hl1m init-wallet --address 0xYourPublicAddress --pri_key 0xYourPrivateKey
|
|
73
|
+
hl1m init_wallet --address 0xYourPublicAddress --pri_key 0xYourPrivateKey
|
|
74
|
+
hl1m send-private-key --target openclaw_target
|
|
75
|
+
hl1m start-listener
|
|
76
|
+
hl1m register-wallet 0xYourDepositAddress
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## License
|
|
80
|
+
|
|
81
|
+
MIT
|
|
82
|
+
|
1m_trade-0.3.0/README.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# 1m-trade
|
|
2
|
+
|
|
3
|
+
Hyperliquid trading and query CLI (HIP-3 supported).
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install 1m-trade
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
The CLI command is `hl1m`.
|
|
14
|
+
|
|
15
|
+
It loads environment variables from:
|
|
16
|
+
|
|
17
|
+
1. `OPENCLAW_STATE_DIR` (if set)
|
|
18
|
+
2. `OPENCLAW_HOME/.openclaw/.1m-trade/.env`
|
|
19
|
+
3. `~/.openclaw/.1m-trade/.env`
|
|
20
|
+
|
|
21
|
+
### Query examples
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
hl1m query-user-state
|
|
25
|
+
hl1m query-open-orders
|
|
26
|
+
hl1m query-meta
|
|
27
|
+
hl1m query-kline --coin BTC --period 1m --start 1700000000000 --end 1700003600000
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Trading examples
|
|
31
|
+
|
|
32
|
+
> 需要设置私钥环境变量(例如 `HYPERLIQUID_PRIVATE_KEY`,或 `HYPERLIQUID_PRIVATE_KEY_ENC` + `HYPERLIQUID_PK_ENC_PASSWORD`)。
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
hl1m place-order --coin BTC --is-buy true --qty 0.01 --limit-px 60000 --tif Gtc
|
|
36
|
+
hl1m market-order --coin BTC --is-buy true --qty 0.01 --slippage 0.02
|
|
37
|
+
hl1m cancel-order --coin BTC
|
|
38
|
+
hl1m update-leverage --coin BTC --leverage 5 --is-cross true
|
|
39
|
+
hl1m market-close --coin BTC --qty 0.01 --slippage 0.02
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Wallet examples
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
hl1m create-wallet
|
|
46
|
+
hl1m init-wallet --pri_key 0xYourPrivateKey
|
|
47
|
+
hl1m init-wallet --address 0xYourPublicAddress --pri_key 0xYourPrivateKey
|
|
48
|
+
hl1m init_wallet --address 0xYourPublicAddress --pri_key 0xYourPrivateKey
|
|
49
|
+
hl1m send-private-key --target openclaw_target
|
|
50
|
+
hl1m start-listener
|
|
51
|
+
hl1m register-wallet 0xYourDepositAddress
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## License
|
|
55
|
+
|
|
56
|
+
MIT
|
|
57
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "1m-trade"
|
|
7
|
+
version = "0.3.0"
|
|
8
|
+
description = "Hyperliquid trading and query CLI (HIP-3 supported)"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
keywords = ["hyperliquid", "trading", "dex", "cli"]
|
|
13
|
+
classifiers = [
|
|
14
|
+
"Programming Language :: Python :: 3",
|
|
15
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
]
|
|
19
|
+
dependencies = [
|
|
20
|
+
"hyperliquid-python-sdk",
|
|
21
|
+
"websockets>=11.0,<12.0",
|
|
22
|
+
"python-dotenv",
|
|
23
|
+
"cryptography>=42.0.0",
|
|
24
|
+
"eth-account",
|
|
25
|
+
"requests",
|
|
26
|
+
"msgpack",
|
|
27
|
+
"web3",
|
|
28
|
+
"eth-abi",
|
|
29
|
+
"eth-utils",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[project.scripts]
|
|
33
|
+
"hl1m" = "hl1m_cli.cli:main"
|
|
34
|
+
|
|
35
|
+
[tool.setuptools]
|
|
36
|
+
package-dir = {"" = "src"}
|
|
37
|
+
|
|
38
|
+
[tool.setuptools.packages.find]
|
|
39
|
+
where = ["src"]
|
|
40
|
+
include = ["hl1m_cli*"]
|
|
41
|
+
|
1m_trade-0.3.0/setup.cfg
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: 1m-trade
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Hyperliquid trading and query CLI (HIP-3 supported)
|
|
5
|
+
License: MIT
|
|
6
|
+
Keywords: hyperliquid,trading,dex,cli
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Requires-Python: >=3.10
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Requires-Dist: hyperliquid-python-sdk
|
|
15
|
+
Requires-Dist: websockets<12.0,>=11.0
|
|
16
|
+
Requires-Dist: python-dotenv
|
|
17
|
+
Requires-Dist: cryptography>=42.0.0
|
|
18
|
+
Requires-Dist: eth-account
|
|
19
|
+
Requires-Dist: requests
|
|
20
|
+
Requires-Dist: msgpack
|
|
21
|
+
Requires-Dist: web3
|
|
22
|
+
Requires-Dist: eth-abi
|
|
23
|
+
Requires-Dist: eth-utils
|
|
24
|
+
Dynamic: license-file
|
|
25
|
+
|
|
26
|
+
# 1m-trade
|
|
27
|
+
|
|
28
|
+
Hyperliquid trading and query CLI (HIP-3 supported).
|
|
29
|
+
|
|
30
|
+
## Install
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pip install 1m-trade
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Usage
|
|
37
|
+
|
|
38
|
+
The CLI command is `hl1m`.
|
|
39
|
+
|
|
40
|
+
It loads environment variables from:
|
|
41
|
+
|
|
42
|
+
1. `OPENCLAW_STATE_DIR` (if set)
|
|
43
|
+
2. `OPENCLAW_HOME/.openclaw/.1m-trade/.env`
|
|
44
|
+
3. `~/.openclaw/.1m-trade/.env`
|
|
45
|
+
|
|
46
|
+
### Query examples
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
hl1m query-user-state
|
|
50
|
+
hl1m query-open-orders
|
|
51
|
+
hl1m query-meta
|
|
52
|
+
hl1m query-kline --coin BTC --period 1m --start 1700000000000 --end 1700003600000
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Trading examples
|
|
56
|
+
|
|
57
|
+
> 需要设置私钥环境变量(例如 `HYPERLIQUID_PRIVATE_KEY`,或 `HYPERLIQUID_PRIVATE_KEY_ENC` + `HYPERLIQUID_PK_ENC_PASSWORD`)。
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
hl1m place-order --coin BTC --is-buy true --qty 0.01 --limit-px 60000 --tif Gtc
|
|
61
|
+
hl1m market-order --coin BTC --is-buy true --qty 0.01 --slippage 0.02
|
|
62
|
+
hl1m cancel-order --coin BTC
|
|
63
|
+
hl1m update-leverage --coin BTC --leverage 5 --is-cross true
|
|
64
|
+
hl1m market-close --coin BTC --qty 0.01 --slippage 0.02
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Wallet examples
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
hl1m create-wallet
|
|
71
|
+
hl1m init-wallet --pri_key 0xYourPrivateKey
|
|
72
|
+
hl1m init-wallet --address 0xYourPublicAddress --pri_key 0xYourPrivateKey
|
|
73
|
+
hl1m init_wallet --address 0xYourPublicAddress --pri_key 0xYourPrivateKey
|
|
74
|
+
hl1m send-private-key --target openclaw_target
|
|
75
|
+
hl1m start-listener
|
|
76
|
+
hl1m register-wallet 0xYourDepositAddress
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## License
|
|
80
|
+
|
|
81
|
+
MIT
|
|
82
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
MANIFEST.in
|
|
3
|
+
README.md
|
|
4
|
+
pyproject.toml
|
|
5
|
+
src/1m_trade.egg-info/PKG-INFO
|
|
6
|
+
src/1m_trade.egg-info/SOURCES.txt
|
|
7
|
+
src/1m_trade.egg-info/dependency_links.txt
|
|
8
|
+
src/1m_trade.egg-info/entry_points.txt
|
|
9
|
+
src/1m_trade.egg-info/requires.txt
|
|
10
|
+
src/1m_trade.egg-info/top_level.txt
|
|
11
|
+
src/hl1m_cli/__init__.py
|
|
12
|
+
src/hl1m_cli/__main__.py
|
|
13
|
+
src/hl1m_cli/cli.py
|
|
14
|
+
src/hl1m_cli/constants.py
|
|
15
|
+
src/hl1m_cli/exchange.py
|
|
16
|
+
src/hl1m_cli/info.py
|
|
17
|
+
src/hl1m_cli/secrets.py
|
|
18
|
+
src/hl1m_cli/wallet.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
hl1m_cli
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import time
|
|
3
|
+
import json
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
import os
|
|
6
|
+
|
|
7
|
+
from dotenv import load_dotenv
|
|
8
|
+
|
|
9
|
+
from .info import query_info
|
|
10
|
+
from .exchange import exchange_order
|
|
11
|
+
from .wallet import create_wallet, init_wallet, register_wallet, send_private_key_to_target, start_listener
|
|
12
|
+
from .secrets import get_env_path, init_env_file
|
|
13
|
+
|
|
14
|
+
def load_env(override: bool = False) -> bool:
|
|
15
|
+
"""
|
|
16
|
+
Load the OpenClaw state `.env` file (path来自 `secrets.get_env_path()`).
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
# Ensure state directory + .env exists (create empty file if needed).
|
|
20
|
+
init_env_file()
|
|
21
|
+
env_path = get_env_path()
|
|
22
|
+
|
|
23
|
+
# Load via python-dotenv (supports override/interpolation)
|
|
24
|
+
success = load_dotenv(env_path, override=override)
|
|
25
|
+
|
|
26
|
+
if success:
|
|
27
|
+
print(f"Loaded OpenClaw env: {env_path}")
|
|
28
|
+
else:
|
|
29
|
+
print(f"Failed to load or empty: {env_path}")
|
|
30
|
+
|
|
31
|
+
return success
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def str2bool(v):
|
|
35
|
+
if isinstance(v, bool):
|
|
36
|
+
return v
|
|
37
|
+
if v.lower() in ("yes", "true", "t", "1"):
|
|
38
|
+
return True
|
|
39
|
+
elif v.lower() in ("no", "false", "f", "0"):
|
|
40
|
+
return False
|
|
41
|
+
else:
|
|
42
|
+
raise argparse.ArgumentTypeError("Boolean value expected.")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def main():
|
|
46
|
+
parser = argparse.ArgumentParser(description="Hyperliquid SDK full-feature CLI (HIP-3 supported)")
|
|
47
|
+
parser.add_argument("--testnet", action="store_true", help="Use testnet")
|
|
48
|
+
|
|
49
|
+
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
50
|
+
|
|
51
|
+
# ==================== query cli params====================
|
|
52
|
+
subparsers.add_parser("query-user-state", help="Query user state (positions + balances)").add_argument(
|
|
53
|
+
"--address", help="Optional address (derived from private key by default)"
|
|
54
|
+
)
|
|
55
|
+
subparsers.add_parser("query-open-orders", help="Query open orders")
|
|
56
|
+
subparsers.add_parser("query-fills", help="Query fills / trade history")
|
|
57
|
+
subparsers.add_parser("query-meta", help="Query asset metadata (all symbols)")
|
|
58
|
+
subparsers.add_parser("query-mids", help="Query mid prices (all symbols)")
|
|
59
|
+
|
|
60
|
+
# define K line params
|
|
61
|
+
query_kline = subparsers.add_parser("query-kline", help="Query kline/candles for a symbol")
|
|
62
|
+
query_kline.add_argument("--coin", required=True, help="Symbol, e.g. BTC or xyz:TSLA")
|
|
63
|
+
query_kline.add_argument(
|
|
64
|
+
"--period",
|
|
65
|
+
required=True,
|
|
66
|
+
help="Kline period: 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, 1d, 3d, 1w, 1M",
|
|
67
|
+
)
|
|
68
|
+
# default start and end
|
|
69
|
+
end = int(time.time() * 1000)
|
|
70
|
+
start = end - 86400000
|
|
71
|
+
query_kline.add_argument("--start", default=start, type=int, help="Start time (ms). Default: last 24 hours")
|
|
72
|
+
query_kline.add_argument("--end", type=int, default=end, help="End time (ms). Default: now")
|
|
73
|
+
|
|
74
|
+
# ==================== trade cli params ====================
|
|
75
|
+
order_parser = subparsers.add_parser("place-order", help="Place a limit order (HIP-3 supported)")
|
|
76
|
+
order_parser.add_argument("--coin", required=True, help="Symbol, e.g. BTC or xyz:TSLA")
|
|
77
|
+
order_parser.add_argument("--is-buy", type=str2bool, required=True, help="True=buy (long), False=sell (short)")
|
|
78
|
+
order_parser.add_argument("--qty", type=float, required=True, help="Size/quantity")
|
|
79
|
+
order_parser.add_argument("--limit-px", type=float, required=True, help="Limit price")
|
|
80
|
+
order_parser.add_argument("--tif", choices=["Gtc", "Ioc", "Alo"], default="Gtc", help="Time in force")
|
|
81
|
+
order_parser.add_argument("--reduce-only", action="store_true", help="Reduce-only")
|
|
82
|
+
|
|
83
|
+
market_parser = subparsers.add_parser("market-order", help="Place a market order (recommended for HIP-3)")
|
|
84
|
+
market_parser.add_argument("--coin", required=True, help="Symbol, e.g. BTC or xyz:TSLA")
|
|
85
|
+
market_parser.add_argument("--is-buy", type=str2bool, required=True, help="True=buy (long), False=sell (short)")
|
|
86
|
+
market_parser.add_argument("--qty", required=True, type=float, help="Size/quantity")
|
|
87
|
+
market_parser.add_argument("--slippage", type=float, default=0.02, help="Slippage tolerance (default: 2%)")
|
|
88
|
+
|
|
89
|
+
market_close_parser = subparsers.add_parser("market-close", help="Close a position with a market order (recommended for HIP-3)")
|
|
90
|
+
market_close_parser.add_argument("--coin", required=True, help="Symbol, e.g. BTC or xyz:TSLA")
|
|
91
|
+
market_close_parser.add_argument("--qty", required=True, type=float, help="Size/quantity")
|
|
92
|
+
market_close_parser.add_argument("--slippage", type=float, default=0.02, help="Slippage tolerance (default: 2%)")
|
|
93
|
+
|
|
94
|
+
cancel_parser = subparsers.add_parser("cancel-order", help="Cancel orders")
|
|
95
|
+
cancel_parser.add_argument("--oid", type=int, help="Order ID")
|
|
96
|
+
cancel_parser.add_argument("--coin", help="Symbol, e.g. BTC or xyz:TSLA")
|
|
97
|
+
|
|
98
|
+
lev_parser = subparsers.add_parser("update-leverage", help="Update leverage")
|
|
99
|
+
lev_parser.add_argument("--coin", required=True, help="Symbol")
|
|
100
|
+
lev_parser.add_argument("--leverage", type=int, required=True, help="Leverage (integer)")
|
|
101
|
+
lev_parser.add_argument("--is-cross", type=str2bool, default=True, help="True=cross margin")
|
|
102
|
+
|
|
103
|
+
iso_margin_parser = subparsers.add_parser("update-isolated-margin", help="Transfer isolated margin for HIP-3")
|
|
104
|
+
iso_margin_parser.add_argument("--amount", type=int, required=True, help="Transfer amount")
|
|
105
|
+
iso_margin_parser.add_argument("--coin", required=True, help="Symbol, e.g. BTC or xyz:TSLA")
|
|
106
|
+
|
|
107
|
+
# ==================== wallet cli params ====================
|
|
108
|
+
create_wallet_parser = subparsers.add_parser("create-wallet", help="Create funding wallet (encrypt + persist)")
|
|
109
|
+
create_wallet_parser.add_argument("openclaw_target", nargs="?", help="Optional OpenClaw user id (Stage 3: send private key)")
|
|
110
|
+
create_wallet_parser.add_argument(
|
|
111
|
+
"--lang",
|
|
112
|
+
choices=["zh", "en"],
|
|
113
|
+
default="en",
|
|
114
|
+
help="Language for Stage 3 private-key message (zh/en)",
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
init_wallet_parser = subparsers.add_parser("init-wallet", help="Init wallet with user-provided address + private key")
|
|
118
|
+
init_wallet_parser.add_argument("--address", required=False, help="Optional wallet public address (0x...). If omitted, derive from --pri_key")
|
|
119
|
+
init_wallet_parser.add_argument("--pri_key", required=True, help="Wallet private key (0x...)")
|
|
120
|
+
|
|
121
|
+
# Backward/compat alias (underscore version)
|
|
122
|
+
init_wallet_alias_parser = subparsers.add_parser("init_wallet", help="Alias of init-wallet")
|
|
123
|
+
init_wallet_alias_parser.add_argument("--address", required=False, help="Optional wallet public address (0x...). If omitted, derive from --pri_key")
|
|
124
|
+
init_wallet_alias_parser.add_argument("--pri_key", required=True, help="Wallet private key (0x...)")
|
|
125
|
+
|
|
126
|
+
send_pk_parser = subparsers.add_parser("send-private-key", help="Send private key via OpenClaw message (Stage 3)")
|
|
127
|
+
send_pk_parser.add_argument("--target", required=True, help="OpenClaw user id / target")
|
|
128
|
+
send_pk_parser.add_argument(
|
|
129
|
+
"--lang",
|
|
130
|
+
choices=["zh", "en"],
|
|
131
|
+
default="en",
|
|
132
|
+
help="Language for the private-key message (zh/en)",
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
subparsers.add_parser("start-listener", help="Bridge ALL USDC via Relay and activate Hyperliquid L1")
|
|
136
|
+
|
|
137
|
+
register_wallet_parser = subparsers.add_parser(
|
|
138
|
+
"register-wallet",
|
|
139
|
+
help="Register HYPERLIQUID_WALLET_ADDRESS from .env with api.1m-trade.com",
|
|
140
|
+
)
|
|
141
|
+
register_wallet_parser.add_argument("--quiet", action="store_true", help="Suppress success message")
|
|
142
|
+
|
|
143
|
+
args = parser.parse_args()
|
|
144
|
+
needs_env = args.command not in {"create-wallet", "register-wallet", "init-wallet", "init_wallet"}
|
|
145
|
+
env_loaded = True
|
|
146
|
+
if needs_env:
|
|
147
|
+
env_loaded = load_env()
|
|
148
|
+
|
|
149
|
+
# about query
|
|
150
|
+
if args.command.startswith("query-"):
|
|
151
|
+
if env_loaded is False:
|
|
152
|
+
print("Warning: env file not found (required for querying)")
|
|
153
|
+
return
|
|
154
|
+
result = query_info(parser=parser)
|
|
155
|
+
print(json.dumps(result, indent=2, default=str))
|
|
156
|
+
return
|
|
157
|
+
|
|
158
|
+
# about trade
|
|
159
|
+
if args.command in [
|
|
160
|
+
"place-order",
|
|
161
|
+
"market-order",
|
|
162
|
+
"cancel-order",
|
|
163
|
+
"update-leverage",
|
|
164
|
+
"market-close",
|
|
165
|
+
"update-isolated-margin",
|
|
166
|
+
]:
|
|
167
|
+
if env_loaded is False:
|
|
168
|
+
print("Warning: env file not found (required for trading)")
|
|
169
|
+
return
|
|
170
|
+
result = exchange_order(parser)
|
|
171
|
+
print(json.dumps(result, indent=2, default=str))
|
|
172
|
+
return
|
|
173
|
+
|
|
174
|
+
# about wallet
|
|
175
|
+
if args.command in {"init-wallet", "init_wallet"}:
|
|
176
|
+
ok_addr = init_wallet(args.address, args.pri_key)
|
|
177
|
+
if ok_addr is None:
|
|
178
|
+
raise SystemExit(1)
|
|
179
|
+
return
|
|
180
|
+
|
|
181
|
+
if args.command == "create-wallet":
|
|
182
|
+
create_wallet(
|
|
183
|
+
openclaw_target=getattr(args, "openclaw_target", None),
|
|
184
|
+
lang=args.lang,
|
|
185
|
+
)
|
|
186
|
+
return
|
|
187
|
+
|
|
188
|
+
if args.command == "send-private-key":
|
|
189
|
+
out = send_private_key_to_target(args.target, lang=args.lang)
|
|
190
|
+
print(json.dumps(out, indent=2, default=str))
|
|
191
|
+
return
|
|
192
|
+
|
|
193
|
+
if args.command == "start-listener":
|
|
194
|
+
if env_loaded is False:
|
|
195
|
+
print("Warning: env file not found (start-listener will likely fail to decrypt private key)")
|
|
196
|
+
ok = start_listener()
|
|
197
|
+
if not ok:
|
|
198
|
+
raise SystemExit(1)
|
|
199
|
+
return
|
|
200
|
+
|
|
201
|
+
if args.command == "register-wallet":
|
|
202
|
+
ok = register_wallet(notice=not bool(getattr(args, "quiet", False)))
|
|
203
|
+
if not ok:
|
|
204
|
+
raise SystemExit(1)
|
|
205
|
+
return
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
if __name__ == "__main__":
|
|
209
|
+
main()
|
|
210
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Package-wide static configuration.
|
|
3
|
+
|
|
4
|
+
Note: keep values inside this package (not inside .venv/.site-packages) so they
|
|
5
|
+
are versioned and included when publishing to PyPI.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
# Relay lightning funding + auto transfer to HL
|
|
9
|
+
RPC_URL = "https://arb1.arbitrum.io/rpc"
|
|
10
|
+
HL_API_URL = "https://api.hyperliquid.xyz/exchange"
|
|
11
|
+
RELAY_API_URL = "https://api.relay.link/quote/v2"
|
|
12
|
+
REGISTER_1M_TRADE_API = "https://api.1m-trade.com/api/register"
|
|
13
|
+
REGISTER_CONSENT_ENV = "ONE_M_TRADE_REGISTER_CONSENT"
|
|
14
|
+
|
|
15
|
+
# Chain IDs
|
|
16
|
+
ARB_CHAIN_ID = 42161
|
|
17
|
+
HL_CHAIN_ID = 1337
|
|
18
|
+
|
|
19
|
+
# Native token (Arbitrum ETH)
|
|
20
|
+
HL_USDC_ADDRESS = "0x00000000000000000000000000000000"
|
|
21
|
+
NATIVE_TOKEN = "0xaf88d065e77c8cc2239327c5edb3a432268e5831"
|
|
22
|
+
|
|
23
|
+
ERC20_ABI = [
|
|
24
|
+
{
|
|
25
|
+
"type": "function",
|
|
26
|
+
"name": "balanceOf",
|
|
27
|
+
"stateMutability": "view",
|
|
28
|
+
"inputs": [{"name": "account", "type": "address"}],
|
|
29
|
+
"outputs": [{"name": "", "type": "uint256"}],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "function",
|
|
33
|
+
"name": "decimals",
|
|
34
|
+
"stateMutability": "view",
|
|
35
|
+
"inputs": [],
|
|
36
|
+
"outputs": [{"name": "", "type": "uint8"}],
|
|
37
|
+
},
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
# Hyperliquid referrer code
|
|
41
|
+
REFERRER_CODE = "HYPERCLAW"
|
|
42
|
+
|
|
43
|
+
# OpenClaw state
|
|
44
|
+
OPENCLAW_STATE_SUBDIR = ".1m-trade"
|
|
45
|
+
OPENCLAW_ENV_FILENAME = ".env"
|
|
46
|
+
|
|
47
|
+
# Encrypted private key env var names (at-rest encryption)
|
|
48
|
+
PRIVATE_KEY_ENC_KEY = "HYPERLIQUID_PRIVATE_KEY_ENC"
|
|
49
|
+
PRIVATE_KEY_ENC_PASSWORD_KEY = "HYPERLIQUID_PK_ENC_PASSWORD"
|
|
50
|
+
|