jaspervault_cli 1.1.1 → 1.1.3
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.
- package/config/chains.json +11 -10
- package/config/chains.json.bak2 +102 -0
- package/dist/src/commands/order.js +175 -42
- package/dist/src/commands/order.js.map +1 -1
- package/dist/src/mcp/tools.js +22 -5
- package/dist/src/mcp/tools.js.map +1 -1
- package/dist/src/services/chain-config.d.ts +4 -3
- package/dist/src/services/chain-config.js +13 -5
- package/dist/src/services/chain-config.js.map +1 -1
- package/dist/src/services/perps-order.d.ts +48 -0
- package/dist/src/services/perps-order.js +66 -0
- package/dist/src/services/perps-order.js.map +1 -0
- package/dist/src/templates/skill-content/SKILL.core.md +16 -23
- package/dist/src/templates/skill-content/references/trading.md +64 -33
- package/dist/src/utils/config.d.ts +1 -1
- package/dist/src/utils/config.js +1 -1
- package/docs/USER_GUIDE.md +20 -6
- package/package.json +1 -1
package/config/chains.json
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
"base_uat": {
|
|
4
4
|
"name": "Base UAT",
|
|
5
5
|
"chainId": 8453,
|
|
6
|
-
"rpcUrl": "https://base-mainnet.g.alchemy.com/v2/igHoSYAWMvPX86unqNbyZ",
|
|
7
6
|
"contracts": {
|
|
8
7
|
"diamond": "0xB571399F2824424D4c15496406Ea7ACBc1a276AB",
|
|
9
8
|
"vaultFactory": "0x54d365E5E31472108e6AE5bdF89d85912d1A428E",
|
|
@@ -26,26 +25,29 @@
|
|
|
26
25
|
"subgraphUrl": "https://subgraph.satsuma-prod.com/0981c2ab3685/garys-team/jaspervault-v2-base-uat/api"
|
|
27
26
|
},
|
|
28
27
|
"jaspervault": {
|
|
29
|
-
"name": "JasperVault",
|
|
28
|
+
"name": "JasperVault (jasper_dev override for AAPL test)",
|
|
30
29
|
"chainId": 55531,
|
|
31
30
|
"rpcUrl": "https://enterprise.onerpc.com/apikey/42b59vURnC9pSN2XWPunWiYWTeUOU6Mh/jasper_mainnet",
|
|
32
31
|
"contracts": {
|
|
33
|
-
"diamond": "
|
|
34
|
-
"vaultFactory": "
|
|
35
|
-
"perpsOptionModuleHandle": "
|
|
36
|
-
"optionModuleV2": "
|
|
32
|
+
"diamond": "0x38E24abfD6C513E275B4935b39F946015C598302",
|
|
33
|
+
"vaultFactory": "0xa822e6CE38F86a16384BB7A5376b66E672D3bFB2",
|
|
34
|
+
"perpsOptionModuleHandle": "0x48539901B3f4AF93833E345C9659d101583abf56",
|
|
35
|
+
"optionModuleV2": "0x25E0e464f41c343b2aB998721C18e92C711c1Cad"
|
|
37
36
|
},
|
|
38
37
|
"tokens": {
|
|
39
38
|
"JBTC": { "address": "0xCb9d5Ae34cc0476BD8Cb22Aa9C21545be4e38bf2", "decimals": 8 },
|
|
40
39
|
"JUSDC": { "address": "0x567717052247C5Fa302fb2E8DF681A07D63E9faF", "decimals": 6 },
|
|
41
|
-
"CBBTC": { "address": "0x821DF7b83c9FCba013B37490CFC4B5a0bDe36220", "decimals": 8 }
|
|
40
|
+
"CBBTC": { "address": "0x821DF7b83c9FCba013B37490CFC4B5a0bDe36220", "decimals": 8 },
|
|
41
|
+
"AAPL": { "address": "0x237bB769D7E6b1685D30d30fCbAa5B1488d1d74E", "decimals": 8 }
|
|
42
42
|
},
|
|
43
43
|
"marginAsset": { "symbol": "JUSDC", "address": "0x567717052247C5Fa302fb2E8DF681A07D63E9faF", "decimals": 6 },
|
|
44
44
|
"writers": {
|
|
45
|
-
"JBTC": { "long": "
|
|
45
|
+
"JBTC": { "long": "0x545443abfc58ED6a555C2dA8ACd8Cb715DD30e9A", "short": "0xc574443366332Be5b6bfAD7264e3CA216bE1164E" },
|
|
46
|
+
"CBBTC": { "long": "0xa6c517881ea3adC89c88b1d8db60236e92D930FE", "short": "0xFa41A8701e68e945eAF0BBB2cF996253199E8CF5" },
|
|
47
|
+
"AAPL": { "long": "0x8B1A2df17AB63aC7C57139C23CCCC362c153f3d1", "short": "0x8DB0160dF1d6A27479c7ffB17B19aDbbd6ab3086" }
|
|
46
48
|
},
|
|
47
49
|
"defaultLeverage": 50,
|
|
48
|
-
"quoteCenterUrl": "https://
|
|
50
|
+
"quoteCenterUrl": "https://quotecenterv2.jaspervault.io",
|
|
49
51
|
"subgraphUrl": "https://subgraph.jaspervault.io"
|
|
50
52
|
}
|
|
51
53
|
},
|
|
@@ -99,6 +101,5 @@
|
|
|
99
101
|
}
|
|
100
102
|
}
|
|
101
103
|
},
|
|
102
|
-
"defaultBaseRpc": "https://base-mainnet.g.alchemy.com/v2/igHoSYAWMvPX86unqNbyZ",
|
|
103
104
|
"defaultJaspervaultRpc": "https://enterprise.onerpc.com/apikey/42b59vURnC9pSN2XWPunWiYWTeUOU6Mh/jasper_mainnet"
|
|
104
105
|
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
{
|
|
2
|
+
"networks": {
|
|
3
|
+
"base_uat": {
|
|
4
|
+
"name": "Base UAT",
|
|
5
|
+
"chainId": 8453,
|
|
6
|
+
"contracts": {
|
|
7
|
+
"diamond": "0xB571399F2824424D4c15496406Ea7ACBc1a276AB",
|
|
8
|
+
"vaultFactory": "0x54d365E5E31472108e6AE5bdF89d85912d1A428E",
|
|
9
|
+
"perpsOptionModuleHandle": "0x2BB0319B622058F8090b6742705Eb80F8dcC3cdc",
|
|
10
|
+
"optionModuleV2": "0x4De345778a85Cf12aF49c423c75Fe02C5799d425"
|
|
11
|
+
},
|
|
12
|
+
"tokens": {
|
|
13
|
+
"JBTC": { "address": "0xf3cEe52BDa02DaE997D00A0Bf8d221C4f129ebaF", "decimals": 8 },
|
|
14
|
+
"CBBTC": { "address": "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf", "decimals": 8 },
|
|
15
|
+
"JUSDC": { "address": "0x6e236176D1B473Bdb770CDDF4d257B877F2DA9db", "decimals": 6 },
|
|
16
|
+
"USDC": { "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "decimals": 6 }
|
|
17
|
+
},
|
|
18
|
+
"marginAsset": { "symbol": "JUSDC", "address": "0x6e236176D1B473Bdb770CDDF4d257B877F2DA9db", "decimals": 6 },
|
|
19
|
+
"writers": {
|
|
20
|
+
"JBTC": { "long": "0x2D0640Bc9624fd3B66D07FE54C223F138B0391Aa", "short": "0x71c44CF5Ca04b1a2a1A5bA93081DA89183AAc0b6" },
|
|
21
|
+
"CBBTC": { "long": "0x97cDCF310653a2Cbefee479adE77AD8D3De99dF1", "short": "0x71c44CF5Ca04b1a2a1A5bA93081DA89183AAc0b6" }
|
|
22
|
+
},
|
|
23
|
+
"defaultLeverage": 50,
|
|
24
|
+
"quoteCenterUrl": "https://quotecenterv2-uat-gcx2x.ondigitalocean.app",
|
|
25
|
+
"subgraphUrl": "https://subgraph.satsuma-prod.com/0981c2ab3685/garys-team/jaspervault-v2-base-uat/api"
|
|
26
|
+
},
|
|
27
|
+
"jaspervault": {
|
|
28
|
+
"name": "JasperVault",
|
|
29
|
+
"chainId": 55531,
|
|
30
|
+
"rpcUrl": "https://enterprise.onerpc.com/apikey/42b59vURnC9pSN2XWPunWiYWTeUOU6Mh/jasper_mainnet",
|
|
31
|
+
"contracts": {
|
|
32
|
+
"diamond": "0xAfD11c2d9350B2080eD601Ba64ea9f1F532A093c",
|
|
33
|
+
"vaultFactory": "0x54d365E5E31472108e6AE5bdF89d85912d1A428E",
|
|
34
|
+
"perpsOptionModuleHandle": "0xcbCCf074E030CDfd907375B00449B4f10d7d475f",
|
|
35
|
+
"optionModuleV2": "0x0f487603edE93a5329023512B7dcdA632eD70Ed5"
|
|
36
|
+
},
|
|
37
|
+
"tokens": {
|
|
38
|
+
"JBTC": { "address": "0xCb9d5Ae34cc0476BD8Cb22Aa9C21545be4e38bf2", "decimals": 8 },
|
|
39
|
+
"JUSDC": { "address": "0x567717052247C5Fa302fb2E8DF681A07D63E9faF", "decimals": 6 },
|
|
40
|
+
"CBBTC": { "address": "0x821DF7b83c9FCba013B37490CFC4B5a0bDe36220", "decimals": 8 }
|
|
41
|
+
},
|
|
42
|
+
"marginAsset": { "symbol": "JUSDC", "address": "0x567717052247C5Fa302fb2E8DF681A07D63E9faF", "decimals": 6 },
|
|
43
|
+
"writers": {
|
|
44
|
+
"JBTC": { "long": "0xfe7fe5D5de9a8B0BcF39D8676d0C92065a3ca20f", "short": "0x7c7900E40652A9C2225cf6d1E96c38606407e5B0" }
|
|
45
|
+
},
|
|
46
|
+
"defaultLeverage": 50,
|
|
47
|
+
"quoteCenterUrl": "https://uat-jasperquotecenterv2.fly.dev",
|
|
48
|
+
"subgraphUrl": "https://subgraph.jaspervault.io"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"warpRoutes": {
|
|
52
|
+
"jbtc": {
|
|
53
|
+
"symbol": "jBTC",
|
|
54
|
+
"decimals": 8,
|
|
55
|
+
"base": {
|
|
56
|
+
"underlyingToken": "0xf3cEe52BDa02DaE997D00A0Bf8d221C4f129ebaF",
|
|
57
|
+
"warpRouter": "0xf29d79382d5d092193F0746671397410490e51fF"
|
|
58
|
+
},
|
|
59
|
+
"jaspervault": {
|
|
60
|
+
"domain": 55531,
|
|
61
|
+
"warpRouter": "0xCb9d5Ae34cc0476BD8Cb22Aa9C21545be4e38bf2"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"jusdc": {
|
|
65
|
+
"symbol": "jUSDC",
|
|
66
|
+
"decimals": 6,
|
|
67
|
+
"base": {
|
|
68
|
+
"underlyingToken": "0x6e236176D1B473Bdb770CDDF4d257B877F2DA9db",
|
|
69
|
+
"warpRouter": "0x7C475c87b8AA7609073e1be3d3CEB62BbbD5276a"
|
|
70
|
+
},
|
|
71
|
+
"jaspervault": {
|
|
72
|
+
"domain": 55531,
|
|
73
|
+
"warpRouter": "0x567717052247C5Fa302fb2E8DF681A07D63E9faF"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"cbbtc": {
|
|
77
|
+
"symbol": "cBBTC",
|
|
78
|
+
"decimals": 8,
|
|
79
|
+
"base": {
|
|
80
|
+
"underlyingToken": "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",
|
|
81
|
+
"warpRouter": "0xf08d7Be10E69BD5B7FfCb65612720a747C9B8Bed"
|
|
82
|
+
},
|
|
83
|
+
"jaspervault": {
|
|
84
|
+
"domain": 55531,
|
|
85
|
+
"warpRouter": "0x821DF7b83c9FCba013B37490CFC4B5a0bDe36220"
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"usdc": {
|
|
89
|
+
"symbol": "USDC",
|
|
90
|
+
"decimals": 6,
|
|
91
|
+
"base": {
|
|
92
|
+
"underlyingToken": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
93
|
+
"warpRouter": "0xDe0f17681123CbE998E7896B74a197937123b3D9"
|
|
94
|
+
},
|
|
95
|
+
"jaspervault": {
|
|
96
|
+
"domain": 55531,
|
|
97
|
+
"warpRouter": "0x23559FcF18896ed3280c4d7106ca74fFda14bd79"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"defaultJaspervaultRpc": "https://enterprise.onerpc.com/apikey/42b59vURnC9pSN2XWPunWiYWTeUOU6Mh/jasper_mainnet"
|
|
102
|
+
}
|
|
@@ -7,10 +7,49 @@ import { getNetworkConfig, getTokenConfig, getWriterAddress } from '../services/
|
|
|
7
7
|
import { SubgraphClient } from '../services/subgraph-client.js';
|
|
8
8
|
import { loadDelegationKey } from '../services/key-manager.js';
|
|
9
9
|
import { loadVaultProfile, getPositionAccountFromProfile } from '../services/vault-profile.js';
|
|
10
|
-
import {
|
|
11
|
-
import { fetchCurrentPrice, calculateQuantity } from '../services/price-service.js';
|
|
10
|
+
import { fetchOptionWriterIndices, signPerpsOptionCreate, } from '../services/order-signer.js';
|
|
12
11
|
import { fetchOptionQuote } from '../services/quote-center.js';
|
|
13
12
|
import { parsePpoOptions } from '../utils/ppo.js';
|
|
13
|
+
import { submitPerpsOrder } from '../services/perps-order.js';
|
|
14
|
+
/**
|
|
15
|
+
* Reverse-map a token address to its symbol by scanning the network token map.
|
|
16
|
+
* The Subgraph returns `underlyingAsset` as an address, but `submitPerpsOrder`
|
|
17
|
+
* needs a symbol. Mirrors the address-match loop in orders.ts `formatOrder`.
|
|
18
|
+
*/
|
|
19
|
+
function resolveSymbolFromAddress(net, address) {
|
|
20
|
+
if (!net.tokens)
|
|
21
|
+
return null;
|
|
22
|
+
const target = address.toLowerCase();
|
|
23
|
+
for (const [symbol, tok] of Object.entries(net.tokens)) {
|
|
24
|
+
if (tok.address.toLowerCase() === target) {
|
|
25
|
+
return symbol;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Derive leverage from a Subgraph position. Mirrors the fallback chain in
|
|
32
|
+
* orders.ts `formatOrder`: explicit `leverage`, else `productType / 1e12`,
|
|
33
|
+
* else the network default.
|
|
34
|
+
*/
|
|
35
|
+
function deriveLeverage(order, net) {
|
|
36
|
+
if (order.leverage) {
|
|
37
|
+
const n = parseInt(order.leverage, 10);
|
|
38
|
+
if (Number.isFinite(n) && n > 0)
|
|
39
|
+
return n;
|
|
40
|
+
}
|
|
41
|
+
if (order.productType) {
|
|
42
|
+
try {
|
|
43
|
+
const n = Number(BigInt(order.productType) / 10n ** 12n);
|
|
44
|
+
if (Number.isFinite(n) && n > 0)
|
|
45
|
+
return n;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// fall through to default
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return net.defaultLeverage ?? 50;
|
|
52
|
+
}
|
|
14
53
|
export function registerOrderCommand(program) {
|
|
15
54
|
const order = program
|
|
16
55
|
.command('order')
|
|
@@ -49,55 +88,31 @@ export function registerOrderCommand(program) {
|
|
|
49
88
|
const leverage = opts.leverage
|
|
50
89
|
? parseInt(opts.leverage, 10)
|
|
51
90
|
: (net.defaultLeverage ?? 50);
|
|
52
|
-
const marginInput = parseFloat(opts.margin);
|
|
53
|
-
const notionalAmount = marginInput * leverage;
|
|
54
|
-
const actualMargin = marginInput.toFixed(6);
|
|
55
91
|
const { limitType, ppoSettings } = parsePpoOptions(opts);
|
|
56
92
|
const positionAccount = opts.positionAccount ?? getPositionAccountFromProfile(profile, side) ?? undefined;
|
|
57
|
-
|
|
93
|
+
if (!positionAccount) {
|
|
94
|
+
exitWithError(`positionAccount required for ${side}. Run "jv enable" or pass --position-account.`, EXIT_CODES.CONFIG_ERROR);
|
|
95
|
+
}
|
|
96
|
+
const result = await submitPerpsOrder({
|
|
58
97
|
side,
|
|
59
98
|
symbol: opts.symbol,
|
|
60
99
|
leverage,
|
|
61
|
-
|
|
62
|
-
marginAccount: opts.marginAccount ?? profile.marginAccount,
|
|
63
|
-
positionAccount,
|
|
100
|
+
margin: opts.margin,
|
|
64
101
|
limitPrice: opts.limitPrice,
|
|
65
102
|
network: opts.network,
|
|
66
103
|
ttlSeconds: parseInt(opts.ttl, 10),
|
|
67
104
|
limitType,
|
|
68
|
-
};
|
|
69
|
-
const provider = new JsonRpcProvider(net.rpcUrl);
|
|
70
|
-
const optionModuleV2 = net.contracts.optionModuleV2 ?? net.contracts.diamond;
|
|
71
|
-
if (!positionAccount) {
|
|
72
|
-
exitWithError(`positionAccount required for ${side}. Run "jv enable" or pass --position-account.`, EXIT_CODES.CONFIG_ERROR);
|
|
73
|
-
}
|
|
74
|
-
const signData = await buildSignData(intent, profile, opts.network);
|
|
75
|
-
const writerIndices = await fetchWriterIndices(signData.writer, signData.orderType, signData.underlyingAsset, provider, optionModuleV2);
|
|
76
|
-
const marginDecimals = net.marginAsset?.decimals ?? 6;
|
|
77
|
-
const currentPrice = await fetchCurrentPrice(opts.symbol, opts.network);
|
|
78
|
-
const quantity = calculateQuantity(signData.marginAmount, currentPrice, marginDecimals);
|
|
79
|
-
const priceUsd = Number(ethers.formatUnits(currentPrice, 18));
|
|
80
|
-
const estimatedSize = notionalAmount / priceUsd;
|
|
81
|
-
console.error(`Estimated: ~${estimatedSize.toFixed(6)} ${opts.symbol} @ $${priceUsd.toLocaleString()} (~$${notionalAmount.toLocaleString()} JUSDC total, ${leverage}x)`);
|
|
82
|
-
const delegationWallet = new Wallet(delegation.delegationPrivateKey);
|
|
83
|
-
const signature = await signSignData(signData, delegationWallet);
|
|
84
|
-
const managedOrder = buildManagedOrder(signData, writerIndices, positionAccount, quantity);
|
|
85
|
-
const body = {
|
|
86
|
-
signData,
|
|
87
|
-
signature,
|
|
88
|
-
managedOrder,
|
|
89
105
|
ppoSettings,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
exitWithError(sseResult.error ?? `Job ${sseResult.status}`, EXIT_CODES.BUSINESS_ERROR);
|
|
106
|
+
marginAccount: opts.marginAccount ?? profile.marginAccount,
|
|
107
|
+
positionAccount: positionAccount,
|
|
108
|
+
}, profile, delegation.delegationPrivateKey);
|
|
109
|
+
const notionalAmount = parseFloat(opts.margin) * leverage;
|
|
110
|
+
console.error(`Estimated: ~${result.estimatedSize.toFixed(6)} ${opts.symbol} @ $${result.priceUsd.toLocaleString()} (~$${notionalAmount.toLocaleString()} JUSDC total, ${leverage}x)`);
|
|
111
|
+
printJson(result.apiResponse, opts.pretty);
|
|
112
|
+
if (result.sseResult) {
|
|
113
|
+
printJson(result.sseResult, opts.pretty);
|
|
114
|
+
if (result.sseResult.status !== 'completed') {
|
|
115
|
+
exitWithError(result.sseResult.error ?? `Job ${result.sseResult.status}`, EXIT_CODES.BUSINESS_ERROR);
|
|
101
116
|
}
|
|
102
117
|
}
|
|
103
118
|
});
|
|
@@ -144,7 +159,6 @@ export function registerOrderCommand(program) {
|
|
|
144
159
|
ppoCategory: opts.ppoCategory,
|
|
145
160
|
ppoTier: opts.ppoTier,
|
|
146
161
|
});
|
|
147
|
-
const ttlSeconds = parseInt(opts.ttl, 10);
|
|
148
162
|
const writerSide = positionSide.toLowerCase();
|
|
149
163
|
const tokenConfig = getTokenConfig(opts.network, opts.symbol);
|
|
150
164
|
const writerAddress = getWriterAddress(opts.network, opts.symbol, writerSide);
|
|
@@ -197,5 +211,124 @@ export function registerOrderCommand(program) {
|
|
|
197
211
|
}
|
|
198
212
|
}
|
|
199
213
|
});
|
|
214
|
+
order
|
|
215
|
+
.command('close')
|
|
216
|
+
.description('Close perpetual position(s) by submitting a reverse-side order with the same margin')
|
|
217
|
+
.option('--order-id <id>', 'Close a specific position by order ID')
|
|
218
|
+
.option('--all', 'Close all active positions')
|
|
219
|
+
.option('--network <name>', 'Network name', 'jaspervault')
|
|
220
|
+
.option('--ttl <seconds>', 'Order TTL in seconds', '3600')
|
|
221
|
+
.option('--pretty', 'Pretty-print JSON output')
|
|
222
|
+
.action(async (opts) => {
|
|
223
|
+
// Exactly one of --order-id / --all is required.
|
|
224
|
+
if ((!opts.orderId && !opts.all) || (opts.orderId && opts.all)) {
|
|
225
|
+
exitWithError('Specify exactly one of --order-id or --all', EXIT_CODES.CONFIG_ERROR);
|
|
226
|
+
}
|
|
227
|
+
const delegation = loadDelegationKey();
|
|
228
|
+
if (!delegation) {
|
|
229
|
+
exitWithError('Delegation key not found. Run "jv enable" first or set JV_DELEGATION_KEY.', EXIT_CODES.CONFIG_ERROR);
|
|
230
|
+
}
|
|
231
|
+
const profile = loadVaultProfile(opts.network);
|
|
232
|
+
if (!profile) {
|
|
233
|
+
exitWithError(`No vault profile for network ${opts.network}. Run "jv enable --network ${opts.network}" first.`, EXIT_CODES.CONFIG_ERROR);
|
|
234
|
+
}
|
|
235
|
+
const net = getNetworkConfig(opts.network);
|
|
236
|
+
const subgraphUrl = process.env.JV_SUBGRAPH_URL ?? net.subgraphUrl;
|
|
237
|
+
if (!subgraphUrl) {
|
|
238
|
+
exitWithError(`No subgraphUrl configured for network ${opts.network}. Set JV_SUBGRAPH_URL.`, EXIT_CODES.CONFIG_ERROR);
|
|
239
|
+
}
|
|
240
|
+
const subgraphClient = new SubgraphClient(subgraphUrl);
|
|
241
|
+
// Resolve the set of positions to close.
|
|
242
|
+
let positions;
|
|
243
|
+
if (opts.orderId) {
|
|
244
|
+
const order = await subgraphClient.queryOrderById(opts.orderId);
|
|
245
|
+
if (!order) {
|
|
246
|
+
exitWithError(`Order ${opts.orderId} not found in Subgraph.`, EXIT_CODES.BUSINESS_ERROR);
|
|
247
|
+
}
|
|
248
|
+
if (!order.isActive) {
|
|
249
|
+
exitWithError(`Order ${opts.orderId} is not active (already closed?).`, EXIT_CODES.BUSINESS_ERROR);
|
|
250
|
+
}
|
|
251
|
+
positions = [order];
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
positions = await subgraphClient.queryOrders({ recipient: profile.marginAccount ?? '', isActive: true }, 1000, 0);
|
|
255
|
+
}
|
|
256
|
+
if (positions.length === 0) {
|
|
257
|
+
printJson({ closed: [], failed: [], message: 'No active positions to close.' }, opts.pretty);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const marginDecimals = net.marginAsset?.decimals ?? 6;
|
|
261
|
+
const ttlSeconds = parseInt(opts.ttl, 10);
|
|
262
|
+
// Close orders carry no PPO — parsePpoOptions({}) yields a disabled-PPO
|
|
263
|
+
// object identical to a no-`--ppo` create.
|
|
264
|
+
const { ppoSettings } = parsePpoOptions({});
|
|
265
|
+
const closed = [];
|
|
266
|
+
const failed = [];
|
|
267
|
+
// Sequential: serializing avoids nonce collisions on the delegation wallet.
|
|
268
|
+
for (const position of positions) {
|
|
269
|
+
const symbol = resolveSymbolFromAddress(net, position.underlyingAsset);
|
|
270
|
+
if (!symbol) {
|
|
271
|
+
failed.push({
|
|
272
|
+
orderId: position.id,
|
|
273
|
+
error: `Cannot resolve symbol for underlyingAsset ${position.underlyingAsset}. ` +
|
|
274
|
+
`Supported tokens: ${Object.keys(net.tokens ?? {}).join(', ')}`,
|
|
275
|
+
});
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
if (!position.marginDeposited || position.marginDeposited === '0') {
|
|
279
|
+
failed.push({
|
|
280
|
+
orderId: position.id,
|
|
281
|
+
error: 'Position has no marginDeposited; cannot derive close margin.',
|
|
282
|
+
});
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
const closeSide = position.positionSide === 'LONG' ? 'short' : 'long';
|
|
286
|
+
const margin = ethers.formatUnits(position.marginDeposited, marginDecimals);
|
|
287
|
+
const leverage = deriveLeverage(position, net);
|
|
288
|
+
const positionAccount = getPositionAccountFromProfile(profile, closeSide);
|
|
289
|
+
if (!positionAccount) {
|
|
290
|
+
failed.push({
|
|
291
|
+
orderId: position.id,
|
|
292
|
+
error: `No positionAccount for ${closeSide} side in vault profile.`,
|
|
293
|
+
});
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
console.error(`Closing #${position.id}: ${position.positionSide} ${symbol} margin=${margin} ` +
|
|
297
|
+
`→ ${closeSide} reverse order`);
|
|
298
|
+
try {
|
|
299
|
+
const result = await submitPerpsOrder({
|
|
300
|
+
side: closeSide,
|
|
301
|
+
symbol,
|
|
302
|
+
leverage,
|
|
303
|
+
margin,
|
|
304
|
+
limitPrice: undefined,
|
|
305
|
+
network: opts.network,
|
|
306
|
+
ttlSeconds,
|
|
307
|
+
limitType: 0,
|
|
308
|
+
ppoSettings,
|
|
309
|
+
marginAccount: profile.marginAccount,
|
|
310
|
+
positionAccount,
|
|
311
|
+
}, profile, delegation.delegationPrivateKey);
|
|
312
|
+
const status = result.sseResult?.status ?? 'submitted';
|
|
313
|
+
if (result.sseResult && result.sseResult.status !== 'completed') {
|
|
314
|
+
failed.push({
|
|
315
|
+
orderId: position.id,
|
|
316
|
+
closeSide,
|
|
317
|
+
error: result.sseResult.error ?? `Job ${result.sseResult.status}`,
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
closed.push({ orderId: position.id, closeSide, symbol, margin, status });
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
failed.push({ orderId: position.id, error: err.message });
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
printJson({ closed, failed }, opts.pretty);
|
|
329
|
+
if (failed.length > 0) {
|
|
330
|
+
exitWithError(`${failed.length} of ${positions.length} position(s) failed to close.`, EXIT_CODES.BUSINESS_ERROR);
|
|
331
|
+
}
|
|
332
|
+
});
|
|
200
333
|
}
|
|
201
334
|
//# sourceMappingURL=order.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/order.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/order.ts"],"names":[],"mappings":"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"}
|
package/dist/src/mcp/tools.js
CHANGED
|
@@ -2,11 +2,10 @@ export const TOOLS = [
|
|
|
2
2
|
// ── Trading ──
|
|
3
3
|
{
|
|
4
4
|
name: 'create_order',
|
|
5
|
-
description: '
|
|
6
|
-
'
|
|
7
|
-
'
|
|
8
|
-
'
|
|
9
|
-
'NEVER close without querying the position first. ' +
|
|
5
|
+
description: 'Open a market or limit position. For market orders, omit limit_price. ' +
|
|
6
|
+
'To fully close a position, use close_position instead. ' +
|
|
7
|
+
'To PARTIALLY reduce a position, call create_order with the OPPOSITE side and a ' +
|
|
8
|
+
'smaller margin than the position (query it first with list_orders). ' +
|
|
10
9
|
'Returns jobId (market) or limitOrderId (limit).',
|
|
11
10
|
inputSchema: {
|
|
12
11
|
type: 'object',
|
|
@@ -26,6 +25,24 @@ export const TOOLS = [
|
|
|
26
25
|
},
|
|
27
26
|
cliCommand: ['order', 'create'],
|
|
28
27
|
},
|
|
28
|
+
{
|
|
29
|
+
name: 'close_position',
|
|
30
|
+
description: 'Fully close perpetual position(s). Pass order_id to close one position, or ' +
|
|
31
|
+
'all=true to close every active position. The command derives side, margin, ' +
|
|
32
|
+
'symbol, and leverage from on-chain data — no need to call list_orders first. ' +
|
|
33
|
+
'Closing works by submitting a reverse-side order with the same margin. ' +
|
|
34
|
+
'For a PARTIAL close, use create_order instead.',
|
|
35
|
+
inputSchema: {
|
|
36
|
+
type: 'object',
|
|
37
|
+
properties: {
|
|
38
|
+
order_id: { type: 'string', description: 'Order ID of the position to close' },
|
|
39
|
+
all: { type: 'boolean', description: 'Close every active position' },
|
|
40
|
+
ttl: { type: 'number', description: 'Order TTL in seconds (default: 3600)' },
|
|
41
|
+
},
|
|
42
|
+
required: [],
|
|
43
|
+
},
|
|
44
|
+
cliCommand: ['order', 'close'],
|
|
45
|
+
},
|
|
29
46
|
{
|
|
30
47
|
name: 'protect_order',
|
|
31
48
|
description: 'Add PPO hedge option protection to an existing position without changing position size.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,KAAK,GAAc;IAC9B,gBAAgB;IAChB;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ export interface NetworkContracts {
|
|
|
8
8
|
export interface NetworkConfig {
|
|
9
9
|
name: string;
|
|
10
10
|
chainId: number;
|
|
11
|
-
rpcUrl
|
|
11
|
+
rpcUrl?: string;
|
|
12
12
|
contracts: NetworkContracts;
|
|
13
13
|
tokens?: Record<string, NetworkTokenConfig>;
|
|
14
14
|
marginAsset?: MarginAssetConfig;
|
|
@@ -30,8 +30,8 @@ export interface WarpTokenConfig {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* Get network configuration
|
|
34
|
-
*
|
|
33
|
+
* Get network configuration. Base RPC URL must come from BASE_HTTP_RPC_URL env var
|
|
34
|
+
* (single source of truth for all services). JV_JASPERVAULT_RPC_URL overrides Jasper.
|
|
35
35
|
*/
|
|
36
36
|
export declare function getNetworkConfig(network: string): NetworkConfig;
|
|
37
37
|
/**
|
|
@@ -49,6 +49,7 @@ export declare function getWriterAddress(network: string, symbol: string, side:
|
|
|
49
49
|
export declare function getWarpConfig(token: string): WarpTokenConfig;
|
|
50
50
|
/**
|
|
51
51
|
* Get Base chain RPC URL for deposit (source chain).
|
|
52
|
+
* Single source of truth: BASE_HTTP_RPC_URL env var.
|
|
52
53
|
*/
|
|
53
54
|
export declare function getBaseRpcUrl(): string;
|
|
54
55
|
/**
|
|
@@ -27,8 +27,8 @@ function loadConfig() {
|
|
|
27
27
|
return cachedConfig;
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
* Get network configuration
|
|
31
|
-
*
|
|
30
|
+
* Get network configuration. Base RPC URL must come from BASE_HTTP_RPC_URL env var
|
|
31
|
+
* (single source of truth for all services). JV_JASPERVAULT_RPC_URL overrides Jasper.
|
|
32
32
|
*/
|
|
33
33
|
export function getNetworkConfig(network) {
|
|
34
34
|
const config = loadConfig();
|
|
@@ -37,8 +37,11 @@ export function getNetworkConfig(network) {
|
|
|
37
37
|
throw new Error(`Unknown network: ${network}. Supported: ${Object.keys(config.networks).join(', ')}`);
|
|
38
38
|
}
|
|
39
39
|
let rpcUrl = net.rpcUrl;
|
|
40
|
-
if (network === 'base_uat'
|
|
41
|
-
rpcUrl = process.env.
|
|
40
|
+
if (network === 'base_uat') {
|
|
41
|
+
rpcUrl = process.env.BASE_HTTP_RPC_URL;
|
|
42
|
+
if (!rpcUrl) {
|
|
43
|
+
throw new Error('BASE_HTTP_RPC_URL env var is required for base_uat network.');
|
|
44
|
+
}
|
|
42
45
|
}
|
|
43
46
|
if (network === 'jaspervault' && process.env.JV_JASPERVAULT_RPC_URL) {
|
|
44
47
|
rpcUrl = process.env.JV_JASPERVAULT_RPC_URL;
|
|
@@ -83,9 +86,14 @@ export function getWarpConfig(token) {
|
|
|
83
86
|
}
|
|
84
87
|
/**
|
|
85
88
|
* Get Base chain RPC URL for deposit (source chain).
|
|
89
|
+
* Single source of truth: BASE_HTTP_RPC_URL env var.
|
|
86
90
|
*/
|
|
87
91
|
export function getBaseRpcUrl() {
|
|
88
|
-
|
|
92
|
+
const url = process.env.BASE_HTTP_RPC_URL;
|
|
93
|
+
if (!url) {
|
|
94
|
+
throw new Error('BASE_HTTP_RPC_URL env var is required.');
|
|
95
|
+
}
|
|
96
|
+
return url;
|
|
89
97
|
}
|
|
90
98
|
/**
|
|
91
99
|
* Get JasperVault chain RPC URL for deposit (destination chain, vault address computation).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain-config.js","sourceRoot":"","sources":["../../../src/services/chain-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,mEAAmE;AACnE,MAAM,aAAa,GAAG,GAAW,EAAE;IACjC,2DAA2D;IAC3D,+DAA+D;IAC/D,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC;KAC3D,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,IAAI,KAAK,CACb,iCAAiC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CACrF,CAAC;AACJ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"chain-config.js","sourceRoot":"","sources":["../../../src/services/chain-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { MarketOrderResponse, LimitOrderResponse, PPOSettings, SSEWatchResult, VaultProfile } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parameters for submitting a perps order. This is the common shape shared by
|
|
4
|
+
* `jv order create` (user-supplied) and `jv order close` (derived from an
|
|
5
|
+
* existing position). Keeping a single submit path means there is exactly one
|
|
6
|
+
* place that builds calldata, signs, and posts to the Manager API.
|
|
7
|
+
*/
|
|
8
|
+
export interface SubmitPerpsOrderParams {
|
|
9
|
+
side: 'long' | 'short';
|
|
10
|
+
symbol: string;
|
|
11
|
+
leverage: number;
|
|
12
|
+
/** Human-readable USDC margin, e.g. "1" or "100.5". */
|
|
13
|
+
margin: string;
|
|
14
|
+
/** Omit for a market order; set for a limit order. */
|
|
15
|
+
limitPrice?: string;
|
|
16
|
+
network: string;
|
|
17
|
+
ttlSeconds: number;
|
|
18
|
+
/** 0 = Normal (no PPO), 1 = PPO. */
|
|
19
|
+
limitType: number;
|
|
20
|
+
ppoSettings: PPOSettings;
|
|
21
|
+
/**
|
|
22
|
+
* Margin (collateral) vault. Optional: `buildSignData` falls back to
|
|
23
|
+
* `profile.marginAccount` and throws if neither is present.
|
|
24
|
+
*/
|
|
25
|
+
marginAccount?: string;
|
|
26
|
+
positionAccount: string;
|
|
27
|
+
}
|
|
28
|
+
export interface SubmitPerpsOrderResult {
|
|
29
|
+
/** Raw Manager API response. */
|
|
30
|
+
apiResponse: MarketOrderResponse | LimitOrderResponse;
|
|
31
|
+
/** Job stream result — present only for market orders that returned a jobId. */
|
|
32
|
+
sseResult?: SSEWatchResult;
|
|
33
|
+
/** Estimated position size in the underlying asset (informational). */
|
|
34
|
+
estimatedSize: number;
|
|
35
|
+
/** Spot price (USD) used for the size estimate. */
|
|
36
|
+
priceUsd: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build, sign, and submit a single perps order.
|
|
40
|
+
*
|
|
41
|
+
* This is the canonical submit path. Both `jv order create` and `jv order
|
|
42
|
+
* close` call it — `close` simply derives `side`/`margin`/`leverage` from an
|
|
43
|
+
* existing Subgraph position instead of CLI flags.
|
|
44
|
+
*
|
|
45
|
+
* The function does NOT print, exit, or handle SSE-failure exit codes — the
|
|
46
|
+
* caller owns presentation and process exit semantics.
|
|
47
|
+
*/
|
|
48
|
+
export declare function submitPerpsOrder(params: SubmitPerpsOrderParams, profile: VaultProfile, delegationPrivateKey: string): Promise<SubmitPerpsOrderResult>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ethers, Wallet, JsonRpcProvider } from 'ethers';
|
|
2
|
+
import { ApiClient } from '../client.js';
|
|
3
|
+
import { ENDPOINTS } from '../utils/endpoints.js';
|
|
4
|
+
import { loadConfig } from '../utils/config.js';
|
|
5
|
+
import { getNetworkConfig } from './chain-config.js';
|
|
6
|
+
import { buildSignData, signSignData, fetchWriterIndices, buildManagedOrder, } from './order-signer.js';
|
|
7
|
+
import { fetchCurrentPrice, calculateQuantity } from './price-service.js';
|
|
8
|
+
/**
|
|
9
|
+
* Build, sign, and submit a single perps order.
|
|
10
|
+
*
|
|
11
|
+
* This is the canonical submit path. Both `jv order create` and `jv order
|
|
12
|
+
* close` call it — `close` simply derives `side`/`margin`/`leverage` from an
|
|
13
|
+
* existing Subgraph position instead of CLI flags.
|
|
14
|
+
*
|
|
15
|
+
* The function does NOT print, exit, or handle SSE-failure exit codes — the
|
|
16
|
+
* caller owns presentation and process exit semantics.
|
|
17
|
+
*/
|
|
18
|
+
export async function submitPerpsOrder(params, profile, delegationPrivateKey) {
|
|
19
|
+
const net = getNetworkConfig(params.network);
|
|
20
|
+
// marginAmount is normalized to 6 decimal places of precision, matching the
|
|
21
|
+
// behavior of `jv order create` before this function was extracted.
|
|
22
|
+
const actualMargin = parseFloat(params.margin).toFixed(6);
|
|
23
|
+
const notionalAmount = parseFloat(actualMargin) * params.leverage;
|
|
24
|
+
const intent = {
|
|
25
|
+
side: params.side,
|
|
26
|
+
symbol: params.symbol,
|
|
27
|
+
leverage: params.leverage,
|
|
28
|
+
marginAmount: actualMargin,
|
|
29
|
+
marginAccount: params.marginAccount,
|
|
30
|
+
positionAccount: params.positionAccount,
|
|
31
|
+
limitPrice: params.limitPrice,
|
|
32
|
+
network: params.network,
|
|
33
|
+
ttlSeconds: params.ttlSeconds,
|
|
34
|
+
limitType: params.limitType,
|
|
35
|
+
};
|
|
36
|
+
const provider = new JsonRpcProvider(net.rpcUrl);
|
|
37
|
+
const optionModuleV2 = net.contracts.optionModuleV2 ?? net.contracts.diamond;
|
|
38
|
+
const signData = await buildSignData(intent, profile, params.network);
|
|
39
|
+
const writerIndices = await fetchWriterIndices(signData.writer, signData.orderType, signData.underlyingAsset, provider, optionModuleV2);
|
|
40
|
+
const marginDecimals = net.marginAsset?.decimals ?? 6;
|
|
41
|
+
const currentPrice = await fetchCurrentPrice(params.symbol, params.network);
|
|
42
|
+
const quantity = calculateQuantity(signData.marginAmount, currentPrice, marginDecimals);
|
|
43
|
+
const priceUsd = Number(ethers.formatUnits(currentPrice, 18));
|
|
44
|
+
const estimatedSize = priceUsd > 0 ? notionalAmount / priceUsd : 0;
|
|
45
|
+
const delegationWallet = new Wallet(delegationPrivateKey);
|
|
46
|
+
const signature = await signSignData(signData, delegationWallet);
|
|
47
|
+
const managedOrder = buildManagedOrder(signData, writerIndices, params.positionAccount, quantity);
|
|
48
|
+
const body = {
|
|
49
|
+
signData,
|
|
50
|
+
signature,
|
|
51
|
+
managedOrder,
|
|
52
|
+
ppoSettings: params.ppoSettings,
|
|
53
|
+
};
|
|
54
|
+
const config = loadConfig();
|
|
55
|
+
const client = new ApiClient(config);
|
|
56
|
+
const res = await client.post(ENDPOINTS.ORDER_CREATE, body);
|
|
57
|
+
const apiResponse = res.data;
|
|
58
|
+
let sseResult;
|
|
59
|
+
if (apiResponse.orderType === 'market' &&
|
|
60
|
+
'jobId' in apiResponse &&
|
|
61
|
+
apiResponse.jobId) {
|
|
62
|
+
sseResult = await client.watchJobStream(apiResponse.jobId, 60);
|
|
63
|
+
}
|
|
64
|
+
return { apiResponse, sseResult, estimatedSize, priceUsd };
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=perps-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perps-order.js","sourceRoot":"","sources":["../../../src/services/perps-order.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,8 @@ When the user wants to trade, first check if their vault is ready:
|
|
|
38
38
|
| Get price | `get_price` | `symbol` | [queries](references/queries.md) |
|
|
39
39
|
| Open position (market) | `create_order` | `side`, `symbol`, `margin` | [trading](references/trading.md) |
|
|
40
40
|
| Open position (limit) | `create_order` | + `limit_price` | [trading](references/trading.md) |
|
|
41
|
-
| Close
|
|
41
|
+
| Close position (full) | `close_position` | `order_id` or `all` | [trading](references/trading.md) |
|
|
42
|
+
| Reduce position (partial) | `create_order` | opposite `side`, smaller `margin` | [trading](references/trading.md) |
|
|
42
43
|
| Add size | `create_order` | same `side` | [trading](references/trading.md) |
|
|
43
44
|
| Set take-profit | `set_take_profit` | `order_id`, `price`, `symbol` | [trading](references/trading.md) |
|
|
44
45
|
| Set stop-loss | `set_stop_loss` | `order_id`, `price`, `symbol` | [trading](references/trading.md) |
|
|
@@ -64,39 +65,30 @@ When the user wants to trade, first check if their vault is ready:
|
|
|
64
65
|
|
|
65
66
|
**Deposit arrival**: If `arrived: false` after deposit completes, tokens are still bridging cross-chain. Tell the user to wait a few minutes.
|
|
66
67
|
|
|
67
|
-
## Closing a Position
|
|
68
|
+
## Closing vs Reducing a Position
|
|
68
69
|
|
|
69
|
-
|
|
70
|
+
**Full close → `close_position`.** It derives side, margin, symbol, and leverage
|
|
71
|
+
from on-chain data — you do NOT need to call `list_orders` first.
|
|
70
72
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
- The position **side** (LONG or SHORT)
|
|
74
|
-
- The position **margin** amount
|
|
75
|
-
- The **symbol**
|
|
73
|
+
- Close one position: `close_position` with `{ order_id: "<id>" }`
|
|
74
|
+
- Close everything: `close_position` with `{ all: true }`
|
|
76
75
|
|
|
77
|
-
|
|
78
|
-
Call `create_order` with:
|
|
79
|
-
- **side**: the OPPOSITE of the current position (LONG → `short`, SHORT → `long`)
|
|
80
|
-
- **margin**: the SAME margin for full close, or SMALLER margin for partial close
|
|
81
|
-
- **symbol**: the same symbol
|
|
76
|
+
`close_position` works by submitting a reverse-side order with the same margin.
|
|
82
77
|
|
|
83
|
-
|
|
84
|
-
|
|
78
|
+
**Partial reduce → `create_order`.** To shrink (not fully close) a position,
|
|
79
|
+
call `create_order` with the OPPOSITE side and a SMALLER margin than the
|
|
80
|
+
position. Query the position first with `list_orders` to pick the right margin.
|
|
85
81
|
|
|
86
82
|
### Examples
|
|
87
83
|
|
|
88
|
-
**Full close of a
|
|
89
|
-
|
|
90
|
-
2. `create_order` → `{ side: "short", symbol: "JBTC", margin: 60 }`
|
|
91
|
-
3. `list_orders` → position no longer active
|
|
84
|
+
**Full close of a position:**
|
|
85
|
+
- `close_position` → `{ order_id: "42" }` → position no longer active
|
|
92
86
|
|
|
93
87
|
**Partial close (reduce by half):**
|
|
94
|
-
1. `list_orders` → finds: side=LONG, margin=60, symbol=JBTC
|
|
88
|
+
1. `list_orders` → finds: order 42, side=LONG, margin=60, symbol=JBTC
|
|
95
89
|
2. `create_order` → `{ side: "short", symbol: "JBTC", margin: 30 }`
|
|
96
90
|
3. `list_orders` → margin reduced to ~30
|
|
97
91
|
|
|
98
|
-
**NEVER guess the margin or side. ALWAYS query first.**
|
|
99
|
-
|
|
100
92
|
## Red Flags — STOP If You Think This
|
|
101
93
|
|
|
102
94
|
| Wrong Thought | Reality |
|
|
@@ -108,7 +100,8 @@ Call `list_orders` to confirm the position is closed or reduced.
|
|
|
108
100
|
| "GraphQL queries need private key authentication" | WRONG. Delegation key handles auth automatically. |
|
|
109
101
|
| "I should suggest the web interface instead" | NO. MCP tools give you full functionality. Use them. |
|
|
110
102
|
| "Let me check if jv is installed" | IRRELEVANT. MCP server runs CLI internally. |
|
|
111
|
-
| "I'll
|
|
103
|
+
| "To fully close I'll reverse the order manually with create_order" | WRONG. Use `close_position` — it derives side/margin automatically. Manual reverse is only for PARTIAL reduce. |
|
|
104
|
+
| "I'll reduce the position without checking current margin" | WRONG. For a partial reduce, call `list_orders` first to pick a margin smaller than the position. |
|
|
112
105
|
|
|
113
106
|
## Update Notices
|
|
114
107
|
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
## 1. Create Order — `create_order`
|
|
6
6
|
|
|
7
|
-
Open,
|
|
7
|
+
Open, reduce, or add size to perpetual positions. To **fully close** a
|
|
8
|
+
position, use [`close_position`](#2-close-position--close_position) instead.
|
|
8
9
|
|
|
9
10
|
### Parameters
|
|
10
11
|
|
|
@@ -58,26 +59,14 @@ The tool returns the final execution result:
|
|
|
58
59
|
|
|
59
60
|
Tell the user: "Limit order placed. ID: {limitOrderId}."
|
|
60
61
|
|
|
61
|
-
###
|
|
62
|
+
### Reducing a Position (Partial Close)
|
|
62
63
|
|
|
63
|
-
|
|
64
|
+
A **partial** close uses `create_order` — only a **full** close uses
|
|
65
|
+
`close_position` (see section 2).
|
|
64
66
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
1. **Query**: Call `list_orders` to find the position. Note the `side` (LONG/SHORT), `margin`, and `symbol`.
|
|
70
|
-
2. **Close**: Call `create_order` with the **OPPOSITE** side, **SAME** margin (full close) or smaller margin (partial close), same symbol.
|
|
71
|
-
3. **Verify**: Call `list_orders` to confirm the position is closed or reduced.
|
|
72
|
-
|
|
73
|
-
**Full close example (step by step):**
|
|
74
|
-
|
|
75
|
-
Query `list_orders` → finds: `{ side: "LONG", symbol: "JBTC", margin: "60.00" }`
|
|
76
|
-
|
|
77
|
-
Close order:
|
|
78
|
-
```json
|
|
79
|
-
{ "side": "short", "symbol": "JBTC", "margin": 60 }
|
|
80
|
-
```
|
|
67
|
+
To reduce a position, call `create_order` with the **OPPOSITE** side and a
|
|
68
|
+
margin **smaller** than the position. Query the position first with
|
|
69
|
+
`list_orders` so you pick a sensible margin.
|
|
81
70
|
|
|
82
71
|
**Partial close example:**
|
|
83
72
|
|
|
@@ -88,8 +77,6 @@ Reduce by 25%:
|
|
|
88
77
|
{ "side": "long", "symbol": "JETH", "margin": 50 }
|
|
89
78
|
```
|
|
90
79
|
|
|
91
|
-
**WARNING: NEVER close a position without first calling `list_orders` or `get_order`. Guessing the side or margin leads to incorrect operations.**
|
|
92
|
-
|
|
93
80
|
### Common Patterns
|
|
94
81
|
|
|
95
82
|
**Open a long position (market):**
|
|
@@ -102,10 +89,7 @@ Reduce by 25%:
|
|
|
102
89
|
{ "side": "short", "symbol": "JBTC", "margin": 100, "limit_price": 72000 }
|
|
103
90
|
```
|
|
104
91
|
|
|
105
|
-
**
|
|
106
|
-
```json
|
|
107
|
-
{ "side": "short", "symbol": "JBTC", "margin": 60 }
|
|
108
|
-
```
|
|
92
|
+
**Fully close a position** → use `close_position` (section 2), not `create_order`.
|
|
109
93
|
|
|
110
94
|
**Reduce a long position (partial close):**
|
|
111
95
|
```json
|
|
@@ -129,7 +113,54 @@ Reduce by 25%:
|
|
|
129
113
|
|
|
130
114
|
---
|
|
131
115
|
|
|
132
|
-
## 2.
|
|
116
|
+
## 2. Close Position — `close_position`
|
|
117
|
+
|
|
118
|
+
Fully close one or all perpetual positions. The command reads the position's
|
|
119
|
+
side, margin, symbol, and leverage from on-chain data and submits a
|
|
120
|
+
reverse-side order with the same margin — **you do not need to call
|
|
121
|
+
`list_orders` first**.
|
|
122
|
+
|
|
123
|
+
For a **partial** reduce, use `create_order` (section 1) instead.
|
|
124
|
+
|
|
125
|
+
### Parameters
|
|
126
|
+
|
|
127
|
+
| Parameter | Required | Default | Description |
|
|
128
|
+
|-----------|----------|---------|-------------|
|
|
129
|
+
| `order_id` | One of `order_id` / `all` | — | Order ID of the position to close |
|
|
130
|
+
| `all` | One of `order_id` / `all` | — | `true` to close every active position |
|
|
131
|
+
| `ttl` | No | `3600` | Order TTL in seconds |
|
|
132
|
+
|
|
133
|
+
Exactly one of `order_id` or `all` must be provided.
|
|
134
|
+
|
|
135
|
+
### Response
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"closed": [
|
|
140
|
+
{ "orderId": "42", "closeSide": "short", "symbol": "JBTC", "margin": "60.0", "status": "submitted" }
|
|
141
|
+
],
|
|
142
|
+
"failed": []
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
If `failed` is non-empty, some positions could not be closed — report which
|
|
147
|
+
ones and why. A close batch with any failure exits non-zero.
|
|
148
|
+
|
|
149
|
+
### Examples
|
|
150
|
+
|
|
151
|
+
**Close a single position:**
|
|
152
|
+
```json
|
|
153
|
+
{ "order_id": "42" }
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Close every active position:**
|
|
157
|
+
```json
|
|
158
|
+
{ "all": true }
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 3. Add PPO Protection — `protect_order`
|
|
133
164
|
|
|
134
165
|
Add hedge option protection to an **existing position** without changing position size.
|
|
135
166
|
|
|
@@ -162,7 +193,7 @@ The tool auto-waits up to 60s for the on-chain result:
|
|
|
162
193
|
|
|
163
194
|
---
|
|
164
195
|
|
|
165
|
-
##
|
|
196
|
+
## 4. Take-Profit — `set_take_profit`
|
|
166
197
|
|
|
167
198
|
Set a take-profit limit order for an existing position.
|
|
168
199
|
|
|
@@ -189,7 +220,7 @@ Set TP at $75,000 for a long position:
|
|
|
189
220
|
|
|
190
221
|
---
|
|
191
222
|
|
|
192
|
-
##
|
|
223
|
+
## 5. Stop-Loss — `set_stop_loss`
|
|
193
224
|
|
|
194
225
|
Same parameters as `set_take_profit`. Set a stop-loss limit order for an existing position.
|
|
195
226
|
|
|
@@ -202,7 +233,7 @@ Set SL at $65,000 for a long position:
|
|
|
202
233
|
|
|
203
234
|
---
|
|
204
235
|
|
|
205
|
-
##
|
|
236
|
+
## 6. PPO (Perpetual Put Option) Details
|
|
206
237
|
|
|
207
238
|
### Option Categories
|
|
208
239
|
|
|
@@ -250,9 +281,9 @@ The smart contract **automatically cancels** existing PPO when you execute any p
|
|
|
250
281
|
|
|
251
282
|
| User Request | Action | Parameters |
|
|
252
283
|
|-------------|--------|------------|
|
|
253
|
-
| "reduce + cancel PPO" | Single reduce order without `ppo` | `{ side: <opposite>, symbol, margin }` |
|
|
254
|
-
| "add size + cancel PPO" | Single add-size order without `ppo` | `{ side: <same>, symbol, margin }` |
|
|
255
|
-
| "close position" |
|
|
256
|
-
| "reduce + keep PPO" | Reduce order WITH `ppo` | `{ side: <opposite>, symbol, margin, ppo: true }` |
|
|
284
|
+
| "reduce + cancel PPO" | Single reduce order without `ppo` | `create_order` `{ side: <opposite>, symbol, margin }` |
|
|
285
|
+
| "add size + cancel PPO" | Single add-size order without `ppo` | `create_order` `{ side: <same>, symbol, margin }` |
|
|
286
|
+
| "close position" | `close_position` (always closes without PPO) | `{ order_id }` or `{ all: true }` |
|
|
287
|
+
| "reduce + keep PPO" | Reduce order WITH `ppo` | `create_order` `{ side: <opposite>, symbol, margin, ppo: true }` |
|
|
257
288
|
|
|
258
289
|
Never try to cancel PPO separately — there is no such tool. One order handles everything.
|
package/dist/src/utils/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const DEFAULT_API_URL = 'https://marketpalce-api-
|
|
1
|
+
export const DEFAULT_API_URL = 'https://marketpalce-api-beta-of8dk.ondigitalocean.app';
|
|
2
2
|
export function loadConfig() {
|
|
3
3
|
const apiUrl = process.env.JV_API_URL ?? DEFAULT_API_URL;
|
|
4
4
|
const normalizedUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl;
|
package/docs/USER_GUIDE.md
CHANGED
|
@@ -75,17 +75,31 @@ Limit orders return a `limitOrderId` and remain active until triggered, expired,
|
|
|
75
75
|
|
|
76
76
|
### Close a Position
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
Use `jv order close` for a **full** close. It reads the position's side, margin,
|
|
79
|
+
symbol, and leverage on-chain and submits the reverse order for you — no need to
|
|
80
|
+
look anything up first.
|
|
79
81
|
|
|
80
82
|
```bash
|
|
81
|
-
#
|
|
82
|
-
jv order
|
|
83
|
+
# Close a single position by order ID
|
|
84
|
+
jv order close --order-id 99
|
|
83
85
|
|
|
84
|
-
#
|
|
86
|
+
# Close every active position
|
|
87
|
+
jv order close --all
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Under the hood, JasperVault has no native close endpoint — closing is a
|
|
91
|
+
reverse-side order with the same margin. `jv order close` just does that
|
|
92
|
+
derivation for you.
|
|
93
|
+
|
|
94
|
+
For a **partial** close, use `jv order create` directly with the opposite side
|
|
95
|
+
and a smaller margin than the position:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Partial close: reduce a LONG position by half (position has 100 USDC margin)
|
|
85
99
|
jv order create --side short --symbol JBTC --margin 50
|
|
86
100
|
```
|
|
87
101
|
|
|
88
|
-
|
|
102
|
+
Check your positions any time with `jv orders list --pretty`.
|
|
89
103
|
|
|
90
104
|
### Take-Profit & Stop-Loss
|
|
91
105
|
|
|
@@ -210,7 +224,7 @@ All environment variables are optional. The CLI works out of the box with sensib
|
|
|
210
224
|
| `JV_API_KEY` | Bearer token for API auth | — |
|
|
211
225
|
| `JV_TIMEOUT` | Request timeout (ms) | 30000 |
|
|
212
226
|
| `JV_DELEGATION_KEY` | Delegation wallet key | Auto-generated |
|
|
213
|
-
| `
|
|
227
|
+
| `BASE_HTTP_RPC_URL` | Base chain RPC (required) | — |
|
|
214
228
|
| `JV_JASPERVAULT_RPC_URL` | JasperVault chain RPC | Built-in |
|
|
215
229
|
| `JV_SUBGRAPH_URL` | Subgraph endpoint | Built-in |
|
|
216
230
|
|