@blackcube/xgate-sdk 0.21.0 → 0.21.1
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/README.md +23 -0
- package/dist/index.cjs +43 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +43 -2
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -70,6 +70,29 @@ position n'est jamais sans stop.
|
|
|
70
70
|
| fermer sans reliquat | `closePosition` | toutes celles qui tradent |
|
|
71
71
|
| relire le prix de sortie réel | `exitPrice` | toutes celles qui tradent |
|
|
72
72
|
|
|
73
|
+
## Le portefeuille
|
|
74
|
+
|
|
75
|
+
`balances()` rend **le comptant et le collatéral**, chaque ligne portant sa nature :
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
const soldes = await wallet.balances(access);
|
|
79
|
+
soldes.filter((solde) => solde.xtras?.scope === 'perp'); // la marge
|
|
80
|
+
soldes.filter((solde) => solde.xtras?.scope !== 'perp'); // le comptant
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Les SDK de venue, eux, ne rendent que le comptant — c'est leur convention, et la documentation de
|
|
84
|
+
chacune le confirme. **Sans le collatéral, un portefeuille peut paraître vide** : sur un compte
|
|
85
|
+
pacifica dont tout le solde est en marge, les soldes comptant valent `[]`, ce qui se lit « pas
|
|
86
|
+
d'argent » alors qu'il y a 499 USDC. XGate lit donc aussi la marge et l'ajoute, marquée.
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
pacifica USDC 499.204355 (perp)
|
|
90
|
+
hyperliquid USDC 1137.565924 (spot) + USDC 7.320954 (perp)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Les deux lignes s'additionnent sans se recouvrir : le collatéral est hors comptant chez les deux
|
|
94
|
+
venues.
|
|
95
|
+
|
|
73
96
|
## Le trading
|
|
74
97
|
|
|
75
98
|
**Jamais un ordre sans stop.** `openWithProtection` est la seule façon d'ouvrir une position, et
|
package/dist/index.cjs
CHANGED
|
@@ -1013,8 +1013,9 @@ exports.WalletService = class WalletService {
|
|
|
1013
1013
|
*/
|
|
1014
1014
|
async balances(...accesses) {
|
|
1015
1015
|
return this.collect(accesses, "balances", async (access) => {
|
|
1016
|
-
const
|
|
1017
|
-
|
|
1016
|
+
const source = createAccountXex(access.xex, access);
|
|
1017
|
+
const balances = await source.account().getBalances();
|
|
1018
|
+
const lignes = balances.map((balance) => ({
|
|
1018
1019
|
xex: access.xex,
|
|
1019
1020
|
asset: balance.asset,
|
|
1020
1021
|
total: balance.total,
|
|
@@ -1022,8 +1023,48 @@ exports.WalletService = class WalletService {
|
|
|
1022
1023
|
usdValue: balance.usdValue,
|
|
1023
1024
|
xtras: balance.xtras
|
|
1024
1025
|
}));
|
|
1026
|
+
const collateral = await this.perpCollateral(source, access.xex);
|
|
1027
|
+
return collateral === null ? lignes : [...lignes, collateral];
|
|
1025
1028
|
});
|
|
1026
1029
|
}
|
|
1030
|
+
/**
|
|
1031
|
+
* LE COLLATÉRAL PERPÉTUEL, ajouté aux soldes comptant — sans lui, un portefeuille peut paraître VIDE.
|
|
1032
|
+
*
|
|
1033
|
+
* `getBalances` ne rend que le **comptant**, chez les huit venues : c'est leur convention, et la
|
|
1034
|
+
* documentation de chacune le dit. Or l'argent qui sert à trader n'y est pas. Sur un compte
|
|
1035
|
+
* pacifica dont tout le solde est en marge, `getBalances` rend `[]` — ce qui se lit « pas
|
|
1036
|
+
* d'argent » alors qu'il y a 499 USDC. Sur hyperliquid, le comptant s'affiche mais la marge
|
|
1037
|
+
* manque.
|
|
1038
|
+
*
|
|
1039
|
+
* La ligne est **marquée `scope: 'perp'`** dans `xtras` : elle s'additionne au comptant sans le
|
|
1040
|
+
* doubler, et un appelant qui ne veut que l'un des deux peut trancher.
|
|
1041
|
+
*
|
|
1042
|
+
* Le champ diffère par venue et n'est pas devinable — d'où la lecture explicite, venue par venue,
|
|
1043
|
+
* plutôt qu'un parcours à l'aveugle d'un objet `unknown`.
|
|
1044
|
+
*/
|
|
1045
|
+
async perpCollateral(source, xex) {
|
|
1046
|
+
const facade = source;
|
|
1047
|
+
if (typeof facade.perp !== "function") {
|
|
1048
|
+
return null;
|
|
1049
|
+
}
|
|
1050
|
+
const scope = facade.perp();
|
|
1051
|
+
if (typeof scope.getAccountInfo !== "function") {
|
|
1052
|
+
return null;
|
|
1053
|
+
}
|
|
1054
|
+
const info = await scope.getAccountInfo();
|
|
1055
|
+
const total = info.balance ?? info.marginSummary?.accountValue;
|
|
1056
|
+
if (total === void 0 || Number(total) === 0) {
|
|
1057
|
+
return null;
|
|
1058
|
+
}
|
|
1059
|
+
return {
|
|
1060
|
+
xex,
|
|
1061
|
+
asset: "USDC",
|
|
1062
|
+
total,
|
|
1063
|
+
available: info.availableToSpend ?? info.withdrawable ?? null,
|
|
1064
|
+
usdValue: total,
|
|
1065
|
+
xtras: { scope: "perp" }
|
|
1066
|
+
};
|
|
1067
|
+
}
|
|
1027
1068
|
/**
|
|
1028
1069
|
* Les mouvements d'argent, triés du plus ancien au plus récent, montants **signés**.
|
|
1029
1070
|
*
|