@lunarbase-lab/pmm-math 0.1.0
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 +94 -0
- package/index.cjs +316 -0
- package/index.d.ts +33 -0
- package/package.json +70 -0
- package/wrapper.js +9 -0
package/README.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# @lunarbase-lab/pmm-math
|
|
2
|
+
|
|
3
|
+
N-API binding exposing [`lunarbase-pmm-math`](https://crates.io/crates/lunarbase-pmm-math)
|
|
4
|
+
to Node.js. Bit-exact mirror of the on-chain LunarBase Curve PMM quoting
|
|
5
|
+
math; every quote is verified against deterministic and fuzz vectors
|
|
6
|
+
generated from the on-chain Solidity contract.
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install @lunarbase-lab/pmm-math
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The native `.node` binary is shipped per-platform via npm's
|
|
15
|
+
`optionalDependencies` mechanism — only the binary matching your OS / arch
|
|
16
|
+
is downloaded.
|
|
17
|
+
|
|
18
|
+
### Supported platforms
|
|
19
|
+
|
|
20
|
+
| OS | Architecture | Sub-package |
|
|
21
|
+
| ----- | ------------ | ------------------------------------ |
|
|
22
|
+
| macOS | arm64 | `@lunarbase-lab/pmm-math-darwin-arm64` |
|
|
23
|
+
| Linux | x64 (glibc) | `@lunarbase-lab/pmm-math-linux-x64-gnu` |
|
|
24
|
+
|
|
25
|
+
Other targets (`linux-arm64-gnu`, `linux-x64-musl`, `darwin-x64`,
|
|
26
|
+
`win32-x64-msvc`) are not currently shipped — open an issue if you need
|
|
27
|
+
one.
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { quoteXToY, quoteYToX, type QuoteParams, type QuoteResult } from "@lunarbase-lab/pmm-math";
|
|
33
|
+
|
|
34
|
+
const params: QuoteParams = {
|
|
35
|
+
// Live sqrt-price (uint80, Q32.48). Optional — defaults to anchorSqrtPriceX48.
|
|
36
|
+
sqrtPriceX48: "281474976710656",
|
|
37
|
+
// Operator-published anchor sqrt-price (uint80, Q32.48). Required.
|
|
38
|
+
anchorSqrtPriceX48: "281474976710656",
|
|
39
|
+
// Directional fees (uint24, Q24, where 2^24 represents 100%).
|
|
40
|
+
feeAskX24: 0, // charged on yToX swaps
|
|
41
|
+
feeBidX24: 838860, // charged on xToY swaps (≈ 5%)
|
|
42
|
+
// Reserves (uint112).
|
|
43
|
+
reserveX: "1000000000000000000000",
|
|
44
|
+
reserveY: "1000000000000000000000",
|
|
45
|
+
// Concentration multiplier (uint32) stored in Q20.12.
|
|
46
|
+
// Effective K = concentrationK / 2^12. Legacy plain-int K=5000 maps to
|
|
47
|
+
// 5000 << 12 = 20_480_000 here.
|
|
48
|
+
concentrationK: 5000 << 12,
|
|
49
|
+
// Input amount in the source token (decimal or 0x-hex).
|
|
50
|
+
amountIn: "1000000000000000000",
|
|
51
|
+
// Optional. Defaults to "1" (whitelisted swapper). Pass the on-chain
|
|
52
|
+
// `blacklistFeeMultiplier` for the gated path.
|
|
53
|
+
feeMultiplier: "1",
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const result: QuoteResult = quoteXToY(params);
|
|
57
|
+
console.log(result.amountOut, result.sqrtPriceNext, result.fee);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
All numeric inputs are passed as **strings** — decimal or `0x`-prefixed hex —
|
|
61
|
+
to preserve full `U256` precision. Outputs are decimal strings.
|
|
62
|
+
|
|
63
|
+
### tsconfig
|
|
64
|
+
|
|
65
|
+
For the imports above to type-check you need `"moduleResolution": "node16"`
|
|
66
|
+
or `"bundler"`. A minimal setup:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"compilerOptions": {
|
|
71
|
+
"target": "ES2022",
|
|
72
|
+
"module": "ES2022",
|
|
73
|
+
"moduleResolution": "node16",
|
|
74
|
+
"esModuleInterop": true,
|
|
75
|
+
"strict": true
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Pure-Rust crate
|
|
81
|
+
|
|
82
|
+
The same math is also published on crates.io as
|
|
83
|
+
[`lunarbase-pmm-math`](https://crates.io/crates/lunarbase-pmm-math). Both
|
|
84
|
+
packages share the upstream test vectors and are guaranteed bit-identical.
|
|
85
|
+
|
|
86
|
+
## Building from source
|
|
87
|
+
|
|
88
|
+
See the [maintainer notes](https://github.com/Lunarbase-Lab/lunarbase-pmm-math/tree/main/math/rust-node/lunarbase-pmm-math-node)
|
|
89
|
+
in the source repository for cross-compilation, musl/Alpine notes, and
|
|
90
|
+
release process.
|
|
91
|
+
|
|
92
|
+
## License
|
|
93
|
+
|
|
94
|
+
Dual-licensed under MIT or Apache-2.0.
|
package/index.cjs
ADDED
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
/* prettier-ignore */
|
|
4
|
+
|
|
5
|
+
/* auto-generated by NAPI-RS */
|
|
6
|
+
|
|
7
|
+
const { existsSync, readFileSync } = require('fs')
|
|
8
|
+
const { join } = require('path')
|
|
9
|
+
|
|
10
|
+
const { platform, arch } = process
|
|
11
|
+
|
|
12
|
+
let nativeBinding = null
|
|
13
|
+
let localFileExisted = false
|
|
14
|
+
let loadError = null
|
|
15
|
+
|
|
16
|
+
function isMusl() {
|
|
17
|
+
// For Node 10
|
|
18
|
+
if (!process.report || typeof process.report.getReport !== 'function') {
|
|
19
|
+
try {
|
|
20
|
+
const lddPath = require('child_process').execSync('which ldd').toString().trim()
|
|
21
|
+
return readFileSync(lddPath, 'utf8').includes('musl')
|
|
22
|
+
} catch (e) {
|
|
23
|
+
return true
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
const { glibcVersionRuntime } = process.report.getReport().header
|
|
27
|
+
return !glibcVersionRuntime
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
switch (platform) {
|
|
32
|
+
case 'android':
|
|
33
|
+
switch (arch) {
|
|
34
|
+
case 'arm64':
|
|
35
|
+
localFileExisted = existsSync(join(__dirname, 'lunarbase-pmm-math.android-arm64.node'))
|
|
36
|
+
try {
|
|
37
|
+
if (localFileExisted) {
|
|
38
|
+
nativeBinding = require('./lunarbase-pmm-math.android-arm64.node')
|
|
39
|
+
} else {
|
|
40
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-android-arm64')
|
|
41
|
+
}
|
|
42
|
+
} catch (e) {
|
|
43
|
+
loadError = e
|
|
44
|
+
}
|
|
45
|
+
break
|
|
46
|
+
case 'arm':
|
|
47
|
+
localFileExisted = existsSync(join(__dirname, 'lunarbase-pmm-math.android-arm-eabi.node'))
|
|
48
|
+
try {
|
|
49
|
+
if (localFileExisted) {
|
|
50
|
+
nativeBinding = require('./lunarbase-pmm-math.android-arm-eabi.node')
|
|
51
|
+
} else {
|
|
52
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-android-arm-eabi')
|
|
53
|
+
}
|
|
54
|
+
} catch (e) {
|
|
55
|
+
loadError = e
|
|
56
|
+
}
|
|
57
|
+
break
|
|
58
|
+
default:
|
|
59
|
+
throw new Error(`Unsupported architecture on Android ${arch}`)
|
|
60
|
+
}
|
|
61
|
+
break
|
|
62
|
+
case 'win32':
|
|
63
|
+
switch (arch) {
|
|
64
|
+
case 'x64':
|
|
65
|
+
localFileExisted = existsSync(
|
|
66
|
+
join(__dirname, 'lunarbase-pmm-math.win32-x64-msvc.node')
|
|
67
|
+
)
|
|
68
|
+
try {
|
|
69
|
+
if (localFileExisted) {
|
|
70
|
+
nativeBinding = require('./lunarbase-pmm-math.win32-x64-msvc.node')
|
|
71
|
+
} else {
|
|
72
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-win32-x64-msvc')
|
|
73
|
+
}
|
|
74
|
+
} catch (e) {
|
|
75
|
+
loadError = e
|
|
76
|
+
}
|
|
77
|
+
break
|
|
78
|
+
case 'ia32':
|
|
79
|
+
localFileExisted = existsSync(
|
|
80
|
+
join(__dirname, 'lunarbase-pmm-math.win32-ia32-msvc.node')
|
|
81
|
+
)
|
|
82
|
+
try {
|
|
83
|
+
if (localFileExisted) {
|
|
84
|
+
nativeBinding = require('./lunarbase-pmm-math.win32-ia32-msvc.node')
|
|
85
|
+
} else {
|
|
86
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-win32-ia32-msvc')
|
|
87
|
+
}
|
|
88
|
+
} catch (e) {
|
|
89
|
+
loadError = e
|
|
90
|
+
}
|
|
91
|
+
break
|
|
92
|
+
case 'arm64':
|
|
93
|
+
localFileExisted = existsSync(
|
|
94
|
+
join(__dirname, 'lunarbase-pmm-math.win32-arm64-msvc.node')
|
|
95
|
+
)
|
|
96
|
+
try {
|
|
97
|
+
if (localFileExisted) {
|
|
98
|
+
nativeBinding = require('./lunarbase-pmm-math.win32-arm64-msvc.node')
|
|
99
|
+
} else {
|
|
100
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-win32-arm64-msvc')
|
|
101
|
+
}
|
|
102
|
+
} catch (e) {
|
|
103
|
+
loadError = e
|
|
104
|
+
}
|
|
105
|
+
break
|
|
106
|
+
default:
|
|
107
|
+
throw new Error(`Unsupported architecture on Windows: ${arch}`)
|
|
108
|
+
}
|
|
109
|
+
break
|
|
110
|
+
case 'darwin':
|
|
111
|
+
localFileExisted = existsSync(join(__dirname, 'lunarbase-pmm-math.darwin-universal.node'))
|
|
112
|
+
try {
|
|
113
|
+
if (localFileExisted) {
|
|
114
|
+
nativeBinding = require('./lunarbase-pmm-math.darwin-universal.node')
|
|
115
|
+
} else {
|
|
116
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-darwin-universal')
|
|
117
|
+
}
|
|
118
|
+
break
|
|
119
|
+
} catch {}
|
|
120
|
+
switch (arch) {
|
|
121
|
+
case 'x64':
|
|
122
|
+
localFileExisted = existsSync(join(__dirname, 'lunarbase-pmm-math.darwin-x64.node'))
|
|
123
|
+
try {
|
|
124
|
+
if (localFileExisted) {
|
|
125
|
+
nativeBinding = require('./lunarbase-pmm-math.darwin-x64.node')
|
|
126
|
+
} else {
|
|
127
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-darwin-x64')
|
|
128
|
+
}
|
|
129
|
+
} catch (e) {
|
|
130
|
+
loadError = e
|
|
131
|
+
}
|
|
132
|
+
break
|
|
133
|
+
case 'arm64':
|
|
134
|
+
localFileExisted = existsSync(
|
|
135
|
+
join(__dirname, 'lunarbase-pmm-math.darwin-arm64.node')
|
|
136
|
+
)
|
|
137
|
+
try {
|
|
138
|
+
if (localFileExisted) {
|
|
139
|
+
nativeBinding = require('./lunarbase-pmm-math.darwin-arm64.node')
|
|
140
|
+
} else {
|
|
141
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-darwin-arm64')
|
|
142
|
+
}
|
|
143
|
+
} catch (e) {
|
|
144
|
+
loadError = e
|
|
145
|
+
}
|
|
146
|
+
break
|
|
147
|
+
default:
|
|
148
|
+
throw new Error(`Unsupported architecture on macOS: ${arch}`)
|
|
149
|
+
}
|
|
150
|
+
break
|
|
151
|
+
case 'freebsd':
|
|
152
|
+
if (arch !== 'x64') {
|
|
153
|
+
throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
|
|
154
|
+
}
|
|
155
|
+
localFileExisted = existsSync(join(__dirname, 'lunarbase-pmm-math.freebsd-x64.node'))
|
|
156
|
+
try {
|
|
157
|
+
if (localFileExisted) {
|
|
158
|
+
nativeBinding = require('./lunarbase-pmm-math.freebsd-x64.node')
|
|
159
|
+
} else {
|
|
160
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-freebsd-x64')
|
|
161
|
+
}
|
|
162
|
+
} catch (e) {
|
|
163
|
+
loadError = e
|
|
164
|
+
}
|
|
165
|
+
break
|
|
166
|
+
case 'linux':
|
|
167
|
+
switch (arch) {
|
|
168
|
+
case 'x64':
|
|
169
|
+
if (isMusl()) {
|
|
170
|
+
localFileExisted = existsSync(
|
|
171
|
+
join(__dirname, 'lunarbase-pmm-math.linux-x64-musl.node')
|
|
172
|
+
)
|
|
173
|
+
try {
|
|
174
|
+
if (localFileExisted) {
|
|
175
|
+
nativeBinding = require('./lunarbase-pmm-math.linux-x64-musl.node')
|
|
176
|
+
} else {
|
|
177
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-linux-x64-musl')
|
|
178
|
+
}
|
|
179
|
+
} catch (e) {
|
|
180
|
+
loadError = e
|
|
181
|
+
}
|
|
182
|
+
} else {
|
|
183
|
+
localFileExisted = existsSync(
|
|
184
|
+
join(__dirname, 'lunarbase-pmm-math.linux-x64-gnu.node')
|
|
185
|
+
)
|
|
186
|
+
try {
|
|
187
|
+
if (localFileExisted) {
|
|
188
|
+
nativeBinding = require('./lunarbase-pmm-math.linux-x64-gnu.node')
|
|
189
|
+
} else {
|
|
190
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-linux-x64-gnu')
|
|
191
|
+
}
|
|
192
|
+
} catch (e) {
|
|
193
|
+
loadError = e
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
break
|
|
197
|
+
case 'arm64':
|
|
198
|
+
if (isMusl()) {
|
|
199
|
+
localFileExisted = existsSync(
|
|
200
|
+
join(__dirname, 'lunarbase-pmm-math.linux-arm64-musl.node')
|
|
201
|
+
)
|
|
202
|
+
try {
|
|
203
|
+
if (localFileExisted) {
|
|
204
|
+
nativeBinding = require('./lunarbase-pmm-math.linux-arm64-musl.node')
|
|
205
|
+
} else {
|
|
206
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-linux-arm64-musl')
|
|
207
|
+
}
|
|
208
|
+
} catch (e) {
|
|
209
|
+
loadError = e
|
|
210
|
+
}
|
|
211
|
+
} else {
|
|
212
|
+
localFileExisted = existsSync(
|
|
213
|
+
join(__dirname, 'lunarbase-pmm-math.linux-arm64-gnu.node')
|
|
214
|
+
)
|
|
215
|
+
try {
|
|
216
|
+
if (localFileExisted) {
|
|
217
|
+
nativeBinding = require('./lunarbase-pmm-math.linux-arm64-gnu.node')
|
|
218
|
+
} else {
|
|
219
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-linux-arm64-gnu')
|
|
220
|
+
}
|
|
221
|
+
} catch (e) {
|
|
222
|
+
loadError = e
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
break
|
|
226
|
+
case 'arm':
|
|
227
|
+
if (isMusl()) {
|
|
228
|
+
localFileExisted = existsSync(
|
|
229
|
+
join(__dirname, 'lunarbase-pmm-math.linux-arm-musleabihf.node')
|
|
230
|
+
)
|
|
231
|
+
try {
|
|
232
|
+
if (localFileExisted) {
|
|
233
|
+
nativeBinding = require('./lunarbase-pmm-math.linux-arm-musleabihf.node')
|
|
234
|
+
} else {
|
|
235
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-linux-arm-musleabihf')
|
|
236
|
+
}
|
|
237
|
+
} catch (e) {
|
|
238
|
+
loadError = e
|
|
239
|
+
}
|
|
240
|
+
} else {
|
|
241
|
+
localFileExisted = existsSync(
|
|
242
|
+
join(__dirname, 'lunarbase-pmm-math.linux-arm-gnueabihf.node')
|
|
243
|
+
)
|
|
244
|
+
try {
|
|
245
|
+
if (localFileExisted) {
|
|
246
|
+
nativeBinding = require('./lunarbase-pmm-math.linux-arm-gnueabihf.node')
|
|
247
|
+
} else {
|
|
248
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-linux-arm-gnueabihf')
|
|
249
|
+
}
|
|
250
|
+
} catch (e) {
|
|
251
|
+
loadError = e
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
break
|
|
255
|
+
case 'riscv64':
|
|
256
|
+
if (isMusl()) {
|
|
257
|
+
localFileExisted = existsSync(
|
|
258
|
+
join(__dirname, 'lunarbase-pmm-math.linux-riscv64-musl.node')
|
|
259
|
+
)
|
|
260
|
+
try {
|
|
261
|
+
if (localFileExisted) {
|
|
262
|
+
nativeBinding = require('./lunarbase-pmm-math.linux-riscv64-musl.node')
|
|
263
|
+
} else {
|
|
264
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-linux-riscv64-musl')
|
|
265
|
+
}
|
|
266
|
+
} catch (e) {
|
|
267
|
+
loadError = e
|
|
268
|
+
}
|
|
269
|
+
} else {
|
|
270
|
+
localFileExisted = existsSync(
|
|
271
|
+
join(__dirname, 'lunarbase-pmm-math.linux-riscv64-gnu.node')
|
|
272
|
+
)
|
|
273
|
+
try {
|
|
274
|
+
if (localFileExisted) {
|
|
275
|
+
nativeBinding = require('./lunarbase-pmm-math.linux-riscv64-gnu.node')
|
|
276
|
+
} else {
|
|
277
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-linux-riscv64-gnu')
|
|
278
|
+
}
|
|
279
|
+
} catch (e) {
|
|
280
|
+
loadError = e
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
break
|
|
284
|
+
case 's390x':
|
|
285
|
+
localFileExisted = existsSync(
|
|
286
|
+
join(__dirname, 'lunarbase-pmm-math.linux-s390x-gnu.node')
|
|
287
|
+
)
|
|
288
|
+
try {
|
|
289
|
+
if (localFileExisted) {
|
|
290
|
+
nativeBinding = require('./lunarbase-pmm-math.linux-s390x-gnu.node')
|
|
291
|
+
} else {
|
|
292
|
+
nativeBinding = require('@lunarbase-lab/pmm-math-linux-s390x-gnu')
|
|
293
|
+
}
|
|
294
|
+
} catch (e) {
|
|
295
|
+
loadError = e
|
|
296
|
+
}
|
|
297
|
+
break
|
|
298
|
+
default:
|
|
299
|
+
throw new Error(`Unsupported architecture on Linux: ${arch}`)
|
|
300
|
+
}
|
|
301
|
+
break
|
|
302
|
+
default:
|
|
303
|
+
throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (!nativeBinding) {
|
|
307
|
+
if (loadError) {
|
|
308
|
+
throw loadError
|
|
309
|
+
}
|
|
310
|
+
throw new Error(`Failed to load native binding`)
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
const { quoteXToY, quoteYToX } = nativeBinding
|
|
314
|
+
|
|
315
|
+
module.exports.quoteXToY = quoteXToY
|
|
316
|
+
module.exports.quoteYToX = quoteYToX
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
|
|
4
|
+
/* auto-generated by NAPI-RS */
|
|
5
|
+
|
|
6
|
+
export interface QuoteParams {
|
|
7
|
+
/** sqrtPriceX48 as decimal or hex string */
|
|
8
|
+
sqrtPriceX48: string
|
|
9
|
+
/** anchor sqrtPriceX48 as decimal or hex string. Defaults to sqrtPriceX48 when omitted. */
|
|
10
|
+
anchorSqrtPriceX48?: string
|
|
11
|
+
/** fee charged on Y → X swaps in Q24 (uint24). */
|
|
12
|
+
feeAskX24: number
|
|
13
|
+
/** fee charged on X → Y swaps in Q24 (uint24). */
|
|
14
|
+
feeBidX24: number
|
|
15
|
+
/** reserve X as decimal or hex string */
|
|
16
|
+
reserveX: string
|
|
17
|
+
/** reserve Y as decimal or hex string */
|
|
18
|
+
reserveY: string
|
|
19
|
+
/** concentration multiplier in Q20.12 (uint32). Effective K = concentration_k_q12 / 2^12. */
|
|
20
|
+
concentrationKQ12: number
|
|
21
|
+
/** input amount as decimal or hex string */
|
|
22
|
+
amountIn: string
|
|
23
|
+
}
|
|
24
|
+
export interface QuoteResult {
|
|
25
|
+
/** output amount as decimal string */
|
|
26
|
+
amountOut: string
|
|
27
|
+
/** new sqrt price as decimal string */
|
|
28
|
+
sqrtPriceNext: string
|
|
29
|
+
/** fee amount as decimal string */
|
|
30
|
+
fee: string
|
|
31
|
+
}
|
|
32
|
+
export declare function quoteXToY(params: QuoteParams): QuoteResult
|
|
33
|
+
export declare function quoteYToX(params: QuoteParams): QuoteResult
|
package/package.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lunarbase-lab/pmm-math",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "N-API binding exposing lunarbase-pmm-math to Node.js. Bit-exact mirror of the on-chain LunarBase Curve PMM quoting math.",
|
|
5
|
+
"license": "MIT OR Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "wrapper.js",
|
|
8
|
+
"types": "index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./wrapper.js",
|
|
12
|
+
"require": "./index.cjs",
|
|
13
|
+
"types": "./index.d.ts"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"wrapper.js",
|
|
18
|
+
"index.cjs",
|
|
19
|
+
"index.d.ts",
|
|
20
|
+
"README.md"
|
|
21
|
+
],
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/Lunarbase-Lab/lunarbase-pmm-math.git",
|
|
25
|
+
"directory": "math/rust-node/lunarbase-pmm-math-node"
|
|
26
|
+
},
|
|
27
|
+
"homepage": "https://github.com/Lunarbase-Lab/lunarbase-pmm-math#readme",
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/Lunarbase-Lab/lunarbase-pmm-math/issues"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"lunarbase",
|
|
33
|
+
"pmm",
|
|
34
|
+
"amm",
|
|
35
|
+
"defi",
|
|
36
|
+
"napi",
|
|
37
|
+
"rust"
|
|
38
|
+
],
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public",
|
|
41
|
+
"registry": "https://registry.npmjs.org/"
|
|
42
|
+
},
|
|
43
|
+
"napi": {
|
|
44
|
+
"name": "lunarbase-pmm-math",
|
|
45
|
+
"triples": {
|
|
46
|
+
"defaults": false,
|
|
47
|
+
"additional": [
|
|
48
|
+
"aarch64-apple-darwin",
|
|
49
|
+
"x86_64-unknown-linux-gnu"
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"optionalDependencies": {
|
|
54
|
+
"@lunarbase-lab/pmm-math-darwin-arm64": "0.1.0",
|
|
55
|
+
"@lunarbase-lab/pmm-math-linux-x64-gnu": "0.1.0"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"build": "CARGO_TARGET_DIR=target napi build --platform --release && mv -f index.js index.cjs",
|
|
59
|
+
"build:debug": "CARGO_TARGET_DIR=target napi build --platform && mv -f index.js index.cjs",
|
|
60
|
+
"artifacts": "napi artifacts",
|
|
61
|
+
"test": "node --test test/quote.test.mjs",
|
|
62
|
+
"prepublishOnly": "napi prepublish -t npm --skip-gh-release"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@napi-rs/cli": "^2.18.4"
|
|
66
|
+
},
|
|
67
|
+
"engines": {
|
|
68
|
+
"node": ">=18"
|
|
69
|
+
}
|
|
70
|
+
}
|
package/wrapper.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// ESM wrapper for the napi-rs native module.
|
|
2
|
+
// index.js is CJS (auto-generated by napi-rs), so we re-export via createRequire.
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
|
|
5
|
+
const require = createRequire(import.meta.url);
|
|
6
|
+
const binding = require("./index.cjs");
|
|
7
|
+
|
|
8
|
+
export const quoteXToY = binding.quoteXToY;
|
|
9
|
+
export const quoteYToX = binding.quoteYToX;
|