@kehtus/proportion-sdk 0.1.0 → 0.1.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/arch.md +15 -8
- package/dist/__tests__/reads.test.js +0 -1
- package/dist/abi/factory.d.ts +14 -0
- package/dist/abi/factory.js +18 -0
- package/dist/abi/forwarder.d.ts +287 -0
- package/dist/abi/forwarder.js +373 -0
- package/dist/abi/fundedAccount.d.ts +38 -99
- package/dist/abi/fundedAccount.js +47 -124
- package/dist/abi/mainVault.d.ts +0 -10
- package/dist/abi/mainVault.js +0 -13
- package/dist/account.d.ts +1 -3
- package/dist/account.js +23 -36
- package/dist/constants.d.ts +3 -3
- package/dist/constants.js +6 -5
- package/dist/indexer.js +1 -1
- package/dist/types.d.ts +1 -6
- package/dist/utils.js +1 -1
- package/package.json +1 -1
- package/src/__tests__/reads.test.ts +0 -1
- package/src/abi/factory.ts +18 -0
- package/src/abi/forwarder.ts +373 -0
- package/src/abi/fundedAccount.ts +47 -124
- package/src/abi/mainVault.ts +0 -13
- package/src/account.ts +26 -40
- package/src/constants.ts +6 -5
- package/src/indexer.ts +1 -1
- package/src/types.ts +1 -6
- package/src/utils.ts +1 -1
package/arch.md
CHANGED
|
@@ -11,6 +11,14 @@ This document is intentionally aligned to the code in:
|
|
|
11
11
|
|
|
12
12
|
If documentation and Solidity diverge, Solidity is the source of truth.
|
|
13
13
|
|
|
14
|
+
## Key Contract Integration Notes
|
|
15
|
+
|
|
16
|
+
- **Single Managed Signer:** Only `apiWallet` exists on FundedAccount. It is set by the relayer via `setApiWallet()`. No `riskEngineWallet` or `builderRiskEngineWallet`.
|
|
17
|
+
- **Unified Mode:** FundedAccount operates in Hyperliquid unified mode (shared spot + perp balance). Withdrawals use one-step `spotSend` instead of two-step `usdClassTransfer` + `spotSend`.
|
|
18
|
+
- **6dec Account Values:** `accountMarginSummary` returns 6dec. `highWaterMark`, `dayStartValue`, and drawdown floors are all 6dec. `spotBalance` and `spotSend` use 8dec.
|
|
19
|
+
- **Multi-DEX:** `PERP_DEX_COUNT = 2` replaces `PERP_DEX_INDEX = 0`. Account value is summed across all DEXes + spot.
|
|
20
|
+
- **`bridgeToEvm()`** is restricted to `Returning` state only (retry `spotSend` for stuck funds during close flow).
|
|
21
|
+
|
|
14
22
|
## Architecture
|
|
15
23
|
|
|
16
24
|
The SDK has four runtime modules:
|
|
@@ -203,25 +211,22 @@ const config = await prop.account.getAccountConfig("0xAccount");
|
|
|
203
211
|
Writes:
|
|
204
212
|
|
|
205
213
|
```ts
|
|
206
|
-
await prop.account.setApiWallet("0xAccount", "0xWallet");
|
|
207
|
-
await prop.account.setRiskEngineWallet("0xAccount", "0xWallet");
|
|
214
|
+
await prop.account.setApiWallet("0xAccount", "0xWallet"); // relayer-only
|
|
208
215
|
await prop.account.requestWithdrawProfit("0xAccount");
|
|
209
216
|
await prop.account.cancelSubscription("0xAccount");
|
|
210
|
-
await prop.account.cancelStuckWithdrawal("0xAccount");
|
|
211
217
|
|
|
212
218
|
await prop.account.checkpoint("0xAccount");
|
|
213
219
|
await prop.account.initiateClose("0xAccount");
|
|
214
220
|
await prop.account.initiateCloseForPerp("0xAccount", 0);
|
|
215
221
|
await prop.account.initiateCloseAdmin("0xAccount");
|
|
216
222
|
await prop.account.closeAndReturn("0xAccount");
|
|
223
|
+
await prop.account.bridgeToEvm("0xAccount"); // Returning state only — retry spotSend
|
|
217
224
|
await prop.account.finalizeReturn("0xAccount");
|
|
218
225
|
await prop.account.claimWithdrawal("0xAccount");
|
|
219
226
|
await prop.account.claimSubscriptionFee("0xAccount");
|
|
220
227
|
await prop.account.rescueStuckFunds("0xAccount");
|
|
221
228
|
```
|
|
222
229
|
|
|
223
|
-
`setRiskEngineWallet()` maps to the current contract behavior in which the same method is used by the protocol relayer and by the builder; on-chain access control decides which of `riskEngineWallet` or `builderRiskEngineWallet` is updated.
|
|
224
|
-
|
|
225
230
|
### `prop.factory`
|
|
226
231
|
|
|
227
232
|
Canonical on-chain surface of the current factory:
|
|
@@ -321,12 +326,14 @@ The utility layer mirrors the current contract formulas.
|
|
|
321
326
|
Decimals:
|
|
322
327
|
|
|
323
328
|
```ts
|
|
324
|
-
toUsdc(100); // 100_000_000n
|
|
329
|
+
toUsdc(100); // 100_000_000n (6dec)
|
|
325
330
|
fromUsdc(100_000_000n); // 100
|
|
326
|
-
to8Dec(100_000_000n); // 10_000_000_000n
|
|
327
|
-
toUsdc6(10_000_000_000n); // 100_000_000n
|
|
331
|
+
to8Dec(100_000_000n); // 10_000_000_000n (6dec→8dec, for spotSend)
|
|
332
|
+
toUsdc6(10_000_000_000n); // 100_000_000n (8dec→6dec)
|
|
328
333
|
```
|
|
329
334
|
|
|
335
|
+
Note: On-chain `highWaterMark`, `dayStartValue`, and drawdown floors are all 6dec (matching `accountMarginSummary` output). `spotBalance` and `spotSend` use 8dec.
|
|
336
|
+
|
|
330
337
|
Activation fee:
|
|
331
338
|
|
|
332
339
|
```ts
|
package/dist/abi/factory.d.ts
CHANGED
|
@@ -7,6 +7,10 @@ export declare const factoryAbi: readonly [{
|
|
|
7
7
|
readonly internalType: "address";
|
|
8
8
|
readonly name: "_implementation";
|
|
9
9
|
readonly type: "address";
|
|
10
|
+
}, {
|
|
11
|
+
readonly internalType: "address";
|
|
12
|
+
readonly name: "_forwarder";
|
|
13
|
+
readonly type: "address";
|
|
10
14
|
}];
|
|
11
15
|
readonly stateMutability: "nonpayable";
|
|
12
16
|
readonly type: "constructor";
|
|
@@ -189,6 +193,16 @@ export declare const factoryAbi: readonly [{
|
|
|
189
193
|
}];
|
|
190
194
|
readonly stateMutability: "nonpayable";
|
|
191
195
|
readonly type: "function";
|
|
196
|
+
}, {
|
|
197
|
+
readonly inputs: readonly [];
|
|
198
|
+
readonly name: "forwarder";
|
|
199
|
+
readonly outputs: readonly [{
|
|
200
|
+
readonly internalType: "address";
|
|
201
|
+
readonly name: "";
|
|
202
|
+
readonly type: "address";
|
|
203
|
+
}];
|
|
204
|
+
readonly stateMutability: "view";
|
|
205
|
+
readonly type: "function";
|
|
192
206
|
}, {
|
|
193
207
|
readonly inputs: readonly [];
|
|
194
208
|
readonly name: "implementation";
|
package/dist/abi/factory.js
CHANGED
|
@@ -10,6 +10,11 @@ export const factoryAbi = [
|
|
|
10
10
|
"internalType": "address",
|
|
11
11
|
"name": "_implementation",
|
|
12
12
|
"type": "address"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"internalType": "address",
|
|
16
|
+
"name": "_forwarder",
|
|
17
|
+
"type": "address"
|
|
13
18
|
}
|
|
14
19
|
],
|
|
15
20
|
"stateMutability": "nonpayable",
|
|
@@ -244,6 +249,19 @@ export const factoryAbi = [
|
|
|
244
249
|
"stateMutability": "nonpayable",
|
|
245
250
|
"type": "function"
|
|
246
251
|
},
|
|
252
|
+
{
|
|
253
|
+
"inputs": [],
|
|
254
|
+
"name": "forwarder",
|
|
255
|
+
"outputs": [
|
|
256
|
+
{
|
|
257
|
+
"internalType": "address",
|
|
258
|
+
"name": "",
|
|
259
|
+
"type": "address"
|
|
260
|
+
}
|
|
261
|
+
],
|
|
262
|
+
"stateMutability": "view",
|
|
263
|
+
"type": "function"
|
|
264
|
+
},
|
|
247
265
|
{
|
|
248
266
|
"inputs": [],
|
|
249
267
|
"name": "implementation",
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
export declare const forwarderAbi: readonly [{
|
|
2
|
+
readonly inputs: readonly [];
|
|
3
|
+
readonly stateMutability: "nonpayable";
|
|
4
|
+
readonly type: "constructor";
|
|
5
|
+
}, {
|
|
6
|
+
readonly inputs: readonly [{
|
|
7
|
+
readonly internalType: "uint48";
|
|
8
|
+
readonly name: "deadline";
|
|
9
|
+
readonly type: "uint48";
|
|
10
|
+
}];
|
|
11
|
+
readonly name: "ERC2771ForwarderExpiredRequest";
|
|
12
|
+
readonly type: "error";
|
|
13
|
+
}, {
|
|
14
|
+
readonly inputs: readonly [{
|
|
15
|
+
readonly internalType: "address";
|
|
16
|
+
readonly name: "signer";
|
|
17
|
+
readonly type: "address";
|
|
18
|
+
}, {
|
|
19
|
+
readonly internalType: "address";
|
|
20
|
+
readonly name: "from";
|
|
21
|
+
readonly type: "address";
|
|
22
|
+
}];
|
|
23
|
+
readonly name: "ERC2771ForwarderInvalidSigner";
|
|
24
|
+
readonly type: "error";
|
|
25
|
+
}, {
|
|
26
|
+
readonly inputs: readonly [{
|
|
27
|
+
readonly internalType: "uint256";
|
|
28
|
+
readonly name: "requestedValue";
|
|
29
|
+
readonly type: "uint256";
|
|
30
|
+
}, {
|
|
31
|
+
readonly internalType: "uint256";
|
|
32
|
+
readonly name: "msgValue";
|
|
33
|
+
readonly type: "uint256";
|
|
34
|
+
}];
|
|
35
|
+
readonly name: "ERC2771ForwarderMismatchedValue";
|
|
36
|
+
readonly type: "error";
|
|
37
|
+
}, {
|
|
38
|
+
readonly inputs: readonly [{
|
|
39
|
+
readonly internalType: "address";
|
|
40
|
+
readonly name: "target";
|
|
41
|
+
readonly type: "address";
|
|
42
|
+
}, {
|
|
43
|
+
readonly internalType: "address";
|
|
44
|
+
readonly name: "forwarder";
|
|
45
|
+
readonly type: "address";
|
|
46
|
+
}];
|
|
47
|
+
readonly name: "ERC2771UntrustfulTarget";
|
|
48
|
+
readonly type: "error";
|
|
49
|
+
}, {
|
|
50
|
+
readonly inputs: readonly [];
|
|
51
|
+
readonly name: "FailedCall";
|
|
52
|
+
readonly type: "error";
|
|
53
|
+
}, {
|
|
54
|
+
readonly inputs: readonly [{
|
|
55
|
+
readonly internalType: "uint256";
|
|
56
|
+
readonly name: "balance";
|
|
57
|
+
readonly type: "uint256";
|
|
58
|
+
}, {
|
|
59
|
+
readonly internalType: "uint256";
|
|
60
|
+
readonly name: "needed";
|
|
61
|
+
readonly type: "uint256";
|
|
62
|
+
}];
|
|
63
|
+
readonly name: "InsufficientBalance";
|
|
64
|
+
readonly type: "error";
|
|
65
|
+
}, {
|
|
66
|
+
readonly inputs: readonly [{
|
|
67
|
+
readonly internalType: "address";
|
|
68
|
+
readonly name: "account";
|
|
69
|
+
readonly type: "address";
|
|
70
|
+
}, {
|
|
71
|
+
readonly internalType: "uint256";
|
|
72
|
+
readonly name: "currentNonce";
|
|
73
|
+
readonly type: "uint256";
|
|
74
|
+
}];
|
|
75
|
+
readonly name: "InvalidAccountNonce";
|
|
76
|
+
readonly type: "error";
|
|
77
|
+
}, {
|
|
78
|
+
readonly inputs: readonly [];
|
|
79
|
+
readonly name: "InvalidShortString";
|
|
80
|
+
readonly type: "error";
|
|
81
|
+
}, {
|
|
82
|
+
readonly inputs: readonly [{
|
|
83
|
+
readonly internalType: "string";
|
|
84
|
+
readonly name: "str";
|
|
85
|
+
readonly type: "string";
|
|
86
|
+
}];
|
|
87
|
+
readonly name: "StringTooLong";
|
|
88
|
+
readonly type: "error";
|
|
89
|
+
}, {
|
|
90
|
+
readonly anonymous: false;
|
|
91
|
+
readonly inputs: readonly [];
|
|
92
|
+
readonly name: "EIP712DomainChanged";
|
|
93
|
+
readonly type: "event";
|
|
94
|
+
}, {
|
|
95
|
+
readonly anonymous: false;
|
|
96
|
+
readonly inputs: readonly [{
|
|
97
|
+
readonly indexed: true;
|
|
98
|
+
readonly internalType: "address";
|
|
99
|
+
readonly name: "signer";
|
|
100
|
+
readonly type: "address";
|
|
101
|
+
}, {
|
|
102
|
+
readonly indexed: false;
|
|
103
|
+
readonly internalType: "uint256";
|
|
104
|
+
readonly name: "nonce";
|
|
105
|
+
readonly type: "uint256";
|
|
106
|
+
}, {
|
|
107
|
+
readonly indexed: false;
|
|
108
|
+
readonly internalType: "bool";
|
|
109
|
+
readonly name: "success";
|
|
110
|
+
readonly type: "bool";
|
|
111
|
+
}];
|
|
112
|
+
readonly name: "ExecutedForwardRequest";
|
|
113
|
+
readonly type: "event";
|
|
114
|
+
}, {
|
|
115
|
+
readonly inputs: readonly [];
|
|
116
|
+
readonly name: "eip712Domain";
|
|
117
|
+
readonly outputs: readonly [{
|
|
118
|
+
readonly internalType: "bytes1";
|
|
119
|
+
readonly name: "fields";
|
|
120
|
+
readonly type: "bytes1";
|
|
121
|
+
}, {
|
|
122
|
+
readonly internalType: "string";
|
|
123
|
+
readonly name: "name";
|
|
124
|
+
readonly type: "string";
|
|
125
|
+
}, {
|
|
126
|
+
readonly internalType: "string";
|
|
127
|
+
readonly name: "version";
|
|
128
|
+
readonly type: "string";
|
|
129
|
+
}, {
|
|
130
|
+
readonly internalType: "uint256";
|
|
131
|
+
readonly name: "chainId";
|
|
132
|
+
readonly type: "uint256";
|
|
133
|
+
}, {
|
|
134
|
+
readonly internalType: "address";
|
|
135
|
+
readonly name: "verifyingContract";
|
|
136
|
+
readonly type: "address";
|
|
137
|
+
}, {
|
|
138
|
+
readonly internalType: "bytes32";
|
|
139
|
+
readonly name: "salt";
|
|
140
|
+
readonly type: "bytes32";
|
|
141
|
+
}, {
|
|
142
|
+
readonly internalType: "uint256[]";
|
|
143
|
+
readonly name: "extensions";
|
|
144
|
+
readonly type: "uint256[]";
|
|
145
|
+
}];
|
|
146
|
+
readonly stateMutability: "view";
|
|
147
|
+
readonly type: "function";
|
|
148
|
+
}, {
|
|
149
|
+
readonly inputs: readonly [{
|
|
150
|
+
readonly components: readonly [{
|
|
151
|
+
readonly internalType: "address";
|
|
152
|
+
readonly name: "from";
|
|
153
|
+
readonly type: "address";
|
|
154
|
+
}, {
|
|
155
|
+
readonly internalType: "address";
|
|
156
|
+
readonly name: "to";
|
|
157
|
+
readonly type: "address";
|
|
158
|
+
}, {
|
|
159
|
+
readonly internalType: "uint256";
|
|
160
|
+
readonly name: "value";
|
|
161
|
+
readonly type: "uint256";
|
|
162
|
+
}, {
|
|
163
|
+
readonly internalType: "uint256";
|
|
164
|
+
readonly name: "gas";
|
|
165
|
+
readonly type: "uint256";
|
|
166
|
+
}, {
|
|
167
|
+
readonly internalType: "uint48";
|
|
168
|
+
readonly name: "deadline";
|
|
169
|
+
readonly type: "uint48";
|
|
170
|
+
}, {
|
|
171
|
+
readonly internalType: "bytes";
|
|
172
|
+
readonly name: "data";
|
|
173
|
+
readonly type: "bytes";
|
|
174
|
+
}, {
|
|
175
|
+
readonly internalType: "bytes";
|
|
176
|
+
readonly name: "signature";
|
|
177
|
+
readonly type: "bytes";
|
|
178
|
+
}];
|
|
179
|
+
readonly internalType: "struct ERC2771Forwarder.ForwardRequestData";
|
|
180
|
+
readonly name: "request";
|
|
181
|
+
readonly type: "tuple";
|
|
182
|
+
}];
|
|
183
|
+
readonly name: "execute";
|
|
184
|
+
readonly outputs: readonly [];
|
|
185
|
+
readonly stateMutability: "payable";
|
|
186
|
+
readonly type: "function";
|
|
187
|
+
}, {
|
|
188
|
+
readonly inputs: readonly [{
|
|
189
|
+
readonly components: readonly [{
|
|
190
|
+
readonly internalType: "address";
|
|
191
|
+
readonly name: "from";
|
|
192
|
+
readonly type: "address";
|
|
193
|
+
}, {
|
|
194
|
+
readonly internalType: "address";
|
|
195
|
+
readonly name: "to";
|
|
196
|
+
readonly type: "address";
|
|
197
|
+
}, {
|
|
198
|
+
readonly internalType: "uint256";
|
|
199
|
+
readonly name: "value";
|
|
200
|
+
readonly type: "uint256";
|
|
201
|
+
}, {
|
|
202
|
+
readonly internalType: "uint256";
|
|
203
|
+
readonly name: "gas";
|
|
204
|
+
readonly type: "uint256";
|
|
205
|
+
}, {
|
|
206
|
+
readonly internalType: "uint48";
|
|
207
|
+
readonly name: "deadline";
|
|
208
|
+
readonly type: "uint48";
|
|
209
|
+
}, {
|
|
210
|
+
readonly internalType: "bytes";
|
|
211
|
+
readonly name: "data";
|
|
212
|
+
readonly type: "bytes";
|
|
213
|
+
}, {
|
|
214
|
+
readonly internalType: "bytes";
|
|
215
|
+
readonly name: "signature";
|
|
216
|
+
readonly type: "bytes";
|
|
217
|
+
}];
|
|
218
|
+
readonly internalType: "struct ERC2771Forwarder.ForwardRequestData[]";
|
|
219
|
+
readonly name: "requests";
|
|
220
|
+
readonly type: "tuple[]";
|
|
221
|
+
}, {
|
|
222
|
+
readonly internalType: "address payable";
|
|
223
|
+
readonly name: "refundReceiver";
|
|
224
|
+
readonly type: "address";
|
|
225
|
+
}];
|
|
226
|
+
readonly name: "executeBatch";
|
|
227
|
+
readonly outputs: readonly [];
|
|
228
|
+
readonly stateMutability: "payable";
|
|
229
|
+
readonly type: "function";
|
|
230
|
+
}, {
|
|
231
|
+
readonly inputs: readonly [{
|
|
232
|
+
readonly internalType: "address";
|
|
233
|
+
readonly name: "owner";
|
|
234
|
+
readonly type: "address";
|
|
235
|
+
}];
|
|
236
|
+
readonly name: "nonces";
|
|
237
|
+
readonly outputs: readonly [{
|
|
238
|
+
readonly internalType: "uint256";
|
|
239
|
+
readonly name: "";
|
|
240
|
+
readonly type: "uint256";
|
|
241
|
+
}];
|
|
242
|
+
readonly stateMutability: "view";
|
|
243
|
+
readonly type: "function";
|
|
244
|
+
}, {
|
|
245
|
+
readonly inputs: readonly [{
|
|
246
|
+
readonly components: readonly [{
|
|
247
|
+
readonly internalType: "address";
|
|
248
|
+
readonly name: "from";
|
|
249
|
+
readonly type: "address";
|
|
250
|
+
}, {
|
|
251
|
+
readonly internalType: "address";
|
|
252
|
+
readonly name: "to";
|
|
253
|
+
readonly type: "address";
|
|
254
|
+
}, {
|
|
255
|
+
readonly internalType: "uint256";
|
|
256
|
+
readonly name: "value";
|
|
257
|
+
readonly type: "uint256";
|
|
258
|
+
}, {
|
|
259
|
+
readonly internalType: "uint256";
|
|
260
|
+
readonly name: "gas";
|
|
261
|
+
readonly type: "uint256";
|
|
262
|
+
}, {
|
|
263
|
+
readonly internalType: "uint48";
|
|
264
|
+
readonly name: "deadline";
|
|
265
|
+
readonly type: "uint48";
|
|
266
|
+
}, {
|
|
267
|
+
readonly internalType: "bytes";
|
|
268
|
+
readonly name: "data";
|
|
269
|
+
readonly type: "bytes";
|
|
270
|
+
}, {
|
|
271
|
+
readonly internalType: "bytes";
|
|
272
|
+
readonly name: "signature";
|
|
273
|
+
readonly type: "bytes";
|
|
274
|
+
}];
|
|
275
|
+
readonly internalType: "struct ERC2771Forwarder.ForwardRequestData";
|
|
276
|
+
readonly name: "request";
|
|
277
|
+
readonly type: "tuple";
|
|
278
|
+
}];
|
|
279
|
+
readonly name: "verify";
|
|
280
|
+
readonly outputs: readonly [{
|
|
281
|
+
readonly internalType: "bool";
|
|
282
|
+
readonly name: "";
|
|
283
|
+
readonly type: "bool";
|
|
284
|
+
}];
|
|
285
|
+
readonly stateMutability: "view";
|
|
286
|
+
readonly type: "function";
|
|
287
|
+
}];
|