@interest-protocol/vortex-sdk 0.0.1-alpha.0 → 1.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.
Files changed (121) hide show
  1. package/.eslingignore +1 -0
  2. package/dist/__tests__/entities/keypair.spec.d.ts +2 -0
  3. package/dist/__tests__/entities/keypair.spec.d.ts.map +1 -0
  4. package/dist/__tests__/test-utils.d.ts +25 -0
  5. package/dist/__tests__/test-utils.d.ts.map +1 -0
  6. package/dist/__tests__/types.d.ts +3 -0
  7. package/dist/__tests__/types.d.ts.map +1 -0
  8. package/dist/__tests__/vortex.test.d.ts +2 -0
  9. package/dist/__tests__/vortex.test.d.ts.map +1 -0
  10. package/dist/constants.d.ts +44 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/crypto/ff/f1field.d.ts +76 -0
  13. package/dist/crypto/ff/f1field.d.ts.map +1 -0
  14. package/dist/crypto/ff/index.d.ts +6 -0
  15. package/dist/crypto/ff/index.d.ts.map +1 -0
  16. package/dist/crypto/ff/random.d.ts +2 -0
  17. package/dist/crypto/ff/random.d.ts.map +1 -0
  18. package/dist/crypto/ff/scalar.d.ts +45 -0
  19. package/dist/crypto/ff/scalar.d.ts.map +1 -0
  20. package/dist/crypto/ff/utils.d.ts +6 -0
  21. package/dist/crypto/ff/utils.d.ts.map +1 -0
  22. package/dist/crypto/index.d.ts +6 -0
  23. package/dist/crypto/index.d.ts.map +1 -0
  24. package/dist/crypto/poseidon/index.d.ts +2 -0
  25. package/dist/crypto/poseidon/index.d.ts.map +1 -0
  26. package/dist/crypto/poseidon/poseidon-constants-opt.d.ts +7 -0
  27. package/dist/crypto/poseidon/poseidon-constants-opt.d.ts.map +1 -0
  28. package/dist/crypto/poseidon/poseidon-opt.d.ts +16 -0
  29. package/dist/crypto/poseidon/poseidon-opt.d.ts.map +1 -0
  30. package/dist/deposit.d.ts +4 -0
  31. package/dist/deposit.d.ts.map +1 -0
  32. package/dist/entities/index.d.ts +4 -0
  33. package/dist/entities/index.d.ts.map +1 -0
  34. package/dist/entities/keypair.d.ts +29 -0
  35. package/dist/entities/keypair.d.ts.map +1 -0
  36. package/dist/entities/merkle-tree.d.ts +81 -0
  37. package/dist/entities/merkle-tree.d.ts.map +1 -0
  38. package/dist/entities/utxo.d.ts +24 -0
  39. package/dist/entities/utxo.d.ts.map +1 -0
  40. package/dist/index.d.ts +6 -2
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +38280 -4459
  43. package/dist/index.js.map +1 -1
  44. package/dist/index.mjs +38244 -4453
  45. package/dist/index.mjs.map +1 -1
  46. package/dist/jest-setup.d.ts +2 -0
  47. package/dist/jest-setup.d.ts.map +1 -0
  48. package/dist/keys/index.d.ts +3 -0
  49. package/dist/keys/index.d.ts.map +1 -0
  50. package/dist/pkg/nodejs/vortex.d.ts +11 -0
  51. package/dist/pkg/nodejs/vortex.d.ts.map +1 -0
  52. package/dist/pkg/web/vortex.d.ts +44 -0
  53. package/dist/pkg/web/vortex.d.ts.map +1 -0
  54. package/dist/utils/decrypt.d.ts +12 -0
  55. package/dist/utils/decrypt.d.ts.map +1 -0
  56. package/dist/utils/env.d.ts +2 -0
  57. package/dist/utils/env.d.ts.map +1 -0
  58. package/dist/utils/events.d.ts +7 -0
  59. package/dist/utils/events.d.ts.map +1 -0
  60. package/dist/utils/ext-data.d.ts +3 -0
  61. package/dist/utils/ext-data.d.ts.map +1 -0
  62. package/dist/utils/index.d.ts +50 -0
  63. package/dist/utils/index.d.ts.map +1 -0
  64. package/dist/utils/prove.d.ts +3 -0
  65. package/dist/utils/prove.d.ts.map +1 -0
  66. package/dist/vortex.d.ts +51 -21
  67. package/dist/vortex.d.ts.map +1 -1
  68. package/dist/vortex.types.d.ts +74 -50
  69. package/dist/vortex.types.d.ts.map +1 -1
  70. package/dist/vortex_bg.wasm +0 -0
  71. package/dist/withdraw.d.ts +4 -0
  72. package/dist/withdraw.d.ts.map +1 -0
  73. package/jest.config.js +31 -0
  74. package/package.json +22 -7
  75. package/src/__tests__/entities/keypair.spec.ts +191 -0
  76. package/src/__tests__/test-utils.ts +76 -0
  77. package/src/__tests__/types.ts +3 -0
  78. package/src/__tests__/vortex.test.ts +25 -0
  79. package/src/constants.ts +104 -0
  80. package/src/crypto/ff/f1field.ts +464 -0
  81. package/src/crypto/ff/index.ts +6 -0
  82. package/src/crypto/ff/random.ts +32 -0
  83. package/src/crypto/ff/readme.md +8 -0
  84. package/src/crypto/ff/scalar.ts +264 -0
  85. package/src/crypto/ff/utils.ts +121 -0
  86. package/src/crypto/index.ts +8 -0
  87. package/src/crypto/poseidon/index.ts +1 -0
  88. package/src/crypto/poseidon/poseidon-constants-opt.ts +24806 -0
  89. package/src/crypto/poseidon/poseidon-opt.ts +184 -0
  90. package/src/deposit.ts +168 -0
  91. package/src/entities/index.ts +3 -0
  92. package/src/entities/keypair.ts +262 -0
  93. package/src/entities/merkle-tree.ts +256 -0
  94. package/src/entities/utxo.ts +52 -0
  95. package/src/index.ts +6 -2
  96. package/src/jest-setup.ts +2 -0
  97. package/src/keys/index.ts +5 -0
  98. package/src/pkg/nodejs/vortex.d.ts +36 -0
  99. package/src/pkg/nodejs/vortex.js +332 -0
  100. package/src/pkg/nodejs/vortex_bg.wasm +0 -0
  101. package/src/pkg/nodejs/vortex_bg.wasm.d.ts +12 -0
  102. package/src/pkg/web/vortex.d.ts +72 -0
  103. package/src/pkg/web/vortex.js +442 -0
  104. package/src/pkg/web/vortex_bg.wasm +0 -0
  105. package/src/pkg/web/vortex_bg.wasm.d.ts +12 -0
  106. package/src/utils/decrypt.ts +46 -0
  107. package/src/utils/env.ts +18 -0
  108. package/src/utils/events.ts +16 -0
  109. package/src/utils/ext-data.ts +43 -0
  110. package/src/utils/index.ts +152 -0
  111. package/src/utils/prove.ts +18 -0
  112. package/src/vortex.ts +235 -111
  113. package/src/vortex.types.ts +74 -54
  114. package/src/withdraw.ts +159 -0
  115. package/tsconfig.json +4 -2
  116. package/dist/admin.d.ts +0 -17
  117. package/dist/admin.d.ts.map +0 -1
  118. package/dist/utils.d.ts +0 -11
  119. package/dist/utils.d.ts.map +0 -1
  120. package/src/admin.ts +0 -124
  121. package/src/utils.ts +0 -66
@@ -0,0 +1,264 @@
1
+ const hexLen = [0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4];
2
+
3
+ export const fromString = (s: string, radix?: number): bigint => {
4
+ if (!radix || radix === 10) {
5
+ return BigInt(s);
6
+ } else if (radix === 16) {
7
+ if (s.slice(0, 2) == '0x') {
8
+ return BigInt(s);
9
+ } else {
10
+ return BigInt('0x' + s);
11
+ }
12
+ }
13
+
14
+ throw new Error('Unsupported radix');
15
+ };
16
+
17
+ export const e = fromString;
18
+
19
+ export const fromArray = (a: Uint8Array, r: number) => {
20
+ let acc = BigInt(0);
21
+ const radix = BigInt(r);
22
+ for (let i = 0; i < a.length; i++) {
23
+ acc = acc * radix + BigInt(a[i]!);
24
+ }
25
+ return acc;
26
+ };
27
+
28
+ export const bitLength = (a: bigint): number => {
29
+ const aS = a.toString(16);
30
+ return (aS.length - 1) * 4 + hexLen[parseInt(aS[0]!, 16)]!;
31
+ };
32
+
33
+ export const isNegative = (a: bigint): boolean => {
34
+ return BigInt(a) < BigInt(0);
35
+ };
36
+
37
+ export const isZero = (a: bigint) => {
38
+ return a === zero;
39
+ };
40
+
41
+ export const shiftLeft = (a: bigint, n: bigint): bigint => {
42
+ return a << n;
43
+ };
44
+
45
+ export const shiftRight = (a: bigint, n: bigint): bigint => {
46
+ return a >> n;
47
+ };
48
+
49
+ export const shl = shiftLeft;
50
+ export const shr = shiftRight;
51
+
52
+ export const isOdd = (a: bigint): boolean => {
53
+ return (a & one) == one;
54
+ };
55
+
56
+ export const naf = (n: bigint): number[] => {
57
+ let E = n;
58
+ const res = [];
59
+ while (E) {
60
+ if (E & one) {
61
+ const z = 2 - Number(E % BigInt(4));
62
+ res.push(z);
63
+ E = E - BigInt(z);
64
+ } else {
65
+ res.push(0);
66
+ }
67
+ E = E >> one;
68
+ }
69
+ return res;
70
+ };
71
+
72
+ export const bits = (n: bigint): number[] => {
73
+ let E = n;
74
+ const res = [];
75
+ while (E) {
76
+ if (E & one) {
77
+ res.push(1);
78
+ } else {
79
+ res.push(0);
80
+ }
81
+ E = E >> one;
82
+ }
83
+ return res;
84
+ };
85
+
86
+ export const toNumber = (s: bigint): number => {
87
+ if (s > BigInt(Number.MAX_SAFE_INTEGER)) {
88
+ throw new Error('Number too big');
89
+ }
90
+ return Number(s);
91
+ };
92
+
93
+ export const toArray = (s: bigint, r: bigint): number[] => {
94
+ const res = [];
95
+ let rem = s;
96
+ const radix = r;
97
+ while (rem) {
98
+ res.unshift(Number(rem % radix));
99
+ rem = rem / radix;
100
+ }
101
+ return res;
102
+ };
103
+
104
+ export const add = (a: bigint, b: bigint): bigint => {
105
+ return a + b;
106
+ };
107
+
108
+ export const sub = (a: bigint, b: bigint): bigint => {
109
+ return a - b;
110
+ };
111
+
112
+ export const neg = (a: bigint): bigint => {
113
+ return -a;
114
+ };
115
+
116
+ export const mul = (a: bigint, b: bigint): bigint => {
117
+ return a * b;
118
+ };
119
+
120
+ export const square = (a: bigint): bigint => {
121
+ return a * a;
122
+ };
123
+
124
+ export const pow = (a: bigint, b: bigint): bigint => {
125
+ return a ** b;
126
+ };
127
+
128
+ export const exp = (a: bigint, b: bigint): bigint => {
129
+ return a ** b;
130
+ };
131
+
132
+ export const abs = (a: bigint): bigint => {
133
+ return a >= 0 ? a : -a;
134
+ };
135
+
136
+ export const div = (a: bigint, b: bigint): bigint => {
137
+ return a / b;
138
+ };
139
+
140
+ export const mod = (a: bigint, b: bigint): bigint => {
141
+ return a % b;
142
+ };
143
+
144
+ export const eq = (a: bigint, b: bigint): boolean => {
145
+ return a === b;
146
+ };
147
+
148
+ export const neq = (a: bigint, b: bigint): boolean => {
149
+ return a !== b;
150
+ };
151
+
152
+ export const lt = (a: bigint, b: bigint): boolean => {
153
+ return a < b;
154
+ };
155
+
156
+ export const gt = (a: bigint, b: bigint): boolean => {
157
+ return a > b;
158
+ };
159
+
160
+ export const leq = (a: bigint, b: bigint): boolean => {
161
+ return a <= b;
162
+ };
163
+
164
+ export const geq = (a: bigint, b: bigint): boolean => {
165
+ return a >= b;
166
+ };
167
+
168
+ export const band = (a: bigint, b: bigint): bigint => {
169
+ return a & b;
170
+ };
171
+
172
+ export const bor = (a: bigint, b: bigint): bigint => {
173
+ return a | b;
174
+ };
175
+
176
+ export const bXor = (a: bigint, b: bigint): bigint => {
177
+ return a ^ b;
178
+ };
179
+
180
+ export const land = (a: bigint, b: bigint): bigint => {
181
+ return a && b;
182
+ };
183
+
184
+ export const lor = (a: bigint, b: bigint): bigint => {
185
+ return a || b;
186
+ };
187
+
188
+ // Returns a buffer with Little Endian Representation
189
+ export const toRprLE = (
190
+ buff: Uint8Array,
191
+ o: number,
192
+ e: bigint,
193
+ n8: number
194
+ ): void => {
195
+ const s = '0000000' + e.toString(16);
196
+ const v = new Uint32Array(buff.buffer, buff.byteOffset + o, n8 / 4);
197
+ const l = (((s.length - 7) * 4 - 1) >> 5) + 1; // Number of 32bit words;
198
+ for (let i = 0; i < l; i++)
199
+ v[i] = parseInt(s.substring(s.length - 8 * i - 8, s.length - 8 * i), 16);
200
+ for (let i = l; i < v.length; i++) v[i] = 0;
201
+ for (let i = v.length * 4; i < n8; i++)
202
+ buff[i] = toNumber(band(shiftRight(e, BigInt(i * 8)), BigInt(0xff)));
203
+ };
204
+
205
+ // Returns a buffer with Big Endian Representation
206
+ export const toRprBE = (
207
+ buff: Uint8Array,
208
+ o: number,
209
+ e: bigint,
210
+ n8: number
211
+ ): void => {
212
+ const s = '0000000' + e.toString(16);
213
+ const v = new DataView(buff.buffer, buff.byteOffset + o, n8);
214
+ const l = (((s.length - 7) * 4 - 1) >> 5) + 1; // Number of 32bit words;
215
+ for (let i = 0; i < l; i++)
216
+ v.setUint32(
217
+ n8 - i * 4 - 4,
218
+ parseInt(s.substring(s.length - 8 * i - 8, s.length - 8 * i), 16),
219
+ false
220
+ );
221
+
222
+ // todo: check this
223
+ for (let i = 0; i < n8 / 4 - l; i++) v.setInt32(0, 0, false);
224
+ };
225
+
226
+ // Passes a buffer with Little Endian Representation
227
+ export const fromRprLE = (buff: Uint8Array, o: number, n8?: number): bigint => {
228
+ n8 = n8 || buff.byteLength;
229
+ o = o || 0;
230
+ const v = new Uint32Array(buff.buffer, buff.byteOffset + o, n8 / 4);
231
+ const a = new Array(n8 / 4);
232
+ v.forEach(
233
+ (ch, i) => (a[a.length - i - 1] = ch.toString(16).padStart(8, '0'))
234
+ );
235
+ return fromString(a.join(''), 16);
236
+ };
237
+
238
+ // Passes a buffer with Big Endian Representation
239
+ export const fromRprBE = (buff: Uint8Array, o: number, n8: number): bigint => {
240
+ n8 = n8 || buff.byteLength;
241
+ o = o || 0;
242
+ const v = new DataView(buff.buffer, buff.byteOffset + o, n8);
243
+ const a = new Array(n8 / 4);
244
+ for (let i = 0; i < n8 / 4; i++) {
245
+ a[i] = v
246
+ .getUint32(i * 4, false)
247
+ .toString(16)
248
+ .padStart(8, '0');
249
+ }
250
+ return fromString(a.join(''), 16);
251
+ };
252
+
253
+ export const toString = (a: bigint, radix = 10): string => {
254
+ return a.toString(radix);
255
+ };
256
+
257
+ export const toLEBuff = (a: bigint): Uint8Array => {
258
+ const buff = new Uint8Array(Math.floor((bitLength(a) - 1) / 8) + 1);
259
+ toRprLE(buff, 0, a, buff.byteLength);
260
+ return buff;
261
+ };
262
+
263
+ export const zero = BigInt(0);
264
+ export const one = BigInt(1);
@@ -0,0 +1,121 @@
1
+ import * as Scalar from './scalar';
2
+ import { fromBase64 } from '@mysten/sui/utils';
3
+ export function unStringifyBigInts(o: unknown): unknown {
4
+ if (Array.isArray(o)) {
5
+ return o.map(unStringifyBigInts);
6
+ } else if (typeof o == 'object') {
7
+ const res: { [k: string]: unknown } = {};
8
+ for (const [key, val] of Object.entries(
9
+ o as unknown as { [k: string]: unknown }
10
+ )) {
11
+ res[key] = unStringifyBigInts(val);
12
+ }
13
+ return res;
14
+ }
15
+ // base64 decode
16
+ const byteArray = Uint8Array.from(atob(o as string), (c: any) =>
17
+ c.charCodeAt(0)
18
+ );
19
+ const hex = [...byteArray]
20
+ .map((x) => x.toString(16).padStart(2, '0'))
21
+ .join('');
22
+ return BigInt(`0x${hex}`);
23
+ }
24
+
25
+ export function beBuff2int(buff: Uint8Array) {
26
+ let res = BigInt(0);
27
+ let i = buff.length;
28
+ let offset = 0;
29
+ const buffV = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);
30
+ while (i > 0) {
31
+ if (i >= 4) {
32
+ i -= 4;
33
+ res += BigInt(buffV.getUint32(i)) << BigInt(offset * 8);
34
+ offset += 4;
35
+ } else if (i >= 2) {
36
+ i -= 2;
37
+ res += BigInt(buffV.getUint16(i)) << BigInt(offset * 8);
38
+ offset += 2;
39
+ } else {
40
+ i -= 1;
41
+ res += BigInt(buffV.getUint8(i)) << BigInt(offset * 8);
42
+ offset += 1;
43
+ }
44
+ }
45
+ return res;
46
+ }
47
+
48
+ export function beInt2Buff(n: bigint, len: number) {
49
+ let r = n;
50
+ const buff = new Uint8Array(len);
51
+ const buffV = new DataView(buff.buffer);
52
+ let o = len;
53
+ while (o > 0) {
54
+ if (o - 4 >= 0) {
55
+ o -= 4;
56
+ buffV.setUint32(o, Number(r & BigInt(0xffffffff)));
57
+ r = r >> BigInt(32);
58
+ } else if (o - 2 >= 0) {
59
+ o -= 2;
60
+ buffV.setUint16(o, Number(r & BigInt(0xffff)));
61
+ r = r >> BigInt(16);
62
+ } else {
63
+ o -= 1;
64
+ buffV.setUint8(o, Number(r & BigInt(0xff)));
65
+ r = r >> BigInt(8);
66
+ }
67
+ }
68
+ if (r) {
69
+ throw new Error('Number does not fit in this length');
70
+ }
71
+ return buff;
72
+ }
73
+
74
+ export function leBuff2int(buff: Uint8Array) {
75
+ let res = BigInt(0);
76
+ let i = 0;
77
+ const buffV = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);
78
+ while (i < buff.length) {
79
+ if (i + 4 <= buff.length) {
80
+ res += BigInt(buffV.getUint32(i, true)) << BigInt(i * 8);
81
+ i += 4;
82
+ } else if (i + 2 <= buff.length) {
83
+ res += BigInt(buffV.getUint16(i, true)) << BigInt(i * 8);
84
+ i += 2;
85
+ } else {
86
+ res += BigInt(buffV.getUint8(i)) << BigInt(i * 8);
87
+ i += 1;
88
+ }
89
+ }
90
+ return res;
91
+ }
92
+
93
+ export function leInt2Buff(n: bigint, len: number) {
94
+ let r = n;
95
+ if (typeof len === 'undefined') {
96
+ len = Math.floor((Scalar.bitLength(n) - 1) / 8) + 1;
97
+ if (len == 0) len = 1;
98
+ }
99
+ const buff = new Uint8Array(len);
100
+ const buffV = new DataView(buff.buffer);
101
+ let o = 0;
102
+ while (o < len) {
103
+ if (o + 4 <= len) {
104
+ buffV.setUint32(o, Number(r & BigInt(0xffffffff)), true);
105
+ o += 4;
106
+ r = r >> BigInt(32);
107
+ } else if (o + 2 <= len) {
108
+ buffV.setUint16(o, Number(r & BigInt(0xffff)), true);
109
+ o += 2;
110
+ r = r >> BigInt(16);
111
+ } else {
112
+ buffV.setUint8(o, Number(r & BigInt(0xff)));
113
+ o += 1;
114
+ r = r >> BigInt(8);
115
+ }
116
+ }
117
+ if (r) {
118
+ throw new Error('Number does not fit in this length');
119
+ }
120
+ return buff;
121
+ }
@@ -0,0 +1,8 @@
1
+ import { poseidon, OPT } from './poseidon';
2
+
3
+ export const poseidon1 = (x: bigint) => poseidon.hash([x]);
4
+ export const poseidon2 = (x: bigint, y: bigint) => poseidon.hash([x, y]);
5
+ export const poseidon3 = (x: bigint, y: bigint, z: bigint) =>
6
+ poseidon.hash([x, y, z]);
7
+
8
+ export { OPT };
@@ -0,0 +1 @@
1
+ export * from './poseidon-opt';