@silvana-one/coordination 1.0.15

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 (118) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -0
  3. package/dist/node/agent.d.ts +93 -0
  4. package/dist/node/agent.js +278 -0
  5. package/dist/node/agent.js.map +1 -0
  6. package/dist/node/base58/base58.d.ts +5 -0
  7. package/dist/node/base58/base58.js +108 -0
  8. package/dist/node/base58/base58.js.map +1 -0
  9. package/dist/node/base58/bigint-helpers.d.ts +24 -0
  10. package/dist/node/base58/bigint-helpers.js +214 -0
  11. package/dist/node/base58/bigint-helpers.js.map +1 -0
  12. package/dist/node/base58/index.d.ts +2 -0
  13. package/dist/node/base58/index.js +3 -0
  14. package/dist/node/base58/index.js.map +1 -0
  15. package/dist/node/base58/public-key.d.ts +4 -0
  16. package/dist/node/base58/public-key.js +7 -0
  17. package/dist/node/base58/public-key.js.map +1 -0
  18. package/dist/node/base58/signature.d.ts +3 -0
  19. package/dist/node/base58/signature.js +65 -0
  20. package/dist/node/base58/signature.js.map +1 -0
  21. package/dist/node/base58/versions.d.ts +11 -0
  22. package/dist/node/base58/versions.js +12 -0
  23. package/dist/node/base58/versions.js.map +1 -0
  24. package/dist/node/execute.d.ts +16 -0
  25. package/dist/node/execute.js +142 -0
  26. package/dist/node/execute.js.map +1 -0
  27. package/dist/node/fetch.d.ts +8 -0
  28. package/dist/node/fetch.js +41 -0
  29. package/dist/node/fetch.js.map +1 -0
  30. package/dist/node/index.cjs +878 -0
  31. package/dist/node/index.d.ts +9 -0
  32. package/dist/node/index.js +10 -0
  33. package/dist/node/index.js.map +1 -0
  34. package/dist/node/mvr.d.ts +14 -0
  35. package/dist/node/mvr.js +70 -0
  36. package/dist/node/mvr.js.map +1 -0
  37. package/dist/node/publish.d.ts +9 -0
  38. package/dist/node/publish.js +40 -0
  39. package/dist/node/publish.js.map +1 -0
  40. package/dist/node/sleep.d.ts +1 -0
  41. package/dist/node/sleep.js +4 -0
  42. package/dist/node/sleep.js.map +1 -0
  43. package/dist/node/sui-client.d.ts +4 -0
  44. package/dist/node/sui-client.js +39 -0
  45. package/dist/node/sui-client.js.map +1 -0
  46. package/dist/node/types.d.ts +4 -0
  47. package/dist/node/types.js +2 -0
  48. package/dist/node/types.js.map +1 -0
  49. package/dist/node/upgrade.d.ts +13 -0
  50. package/dist/node/upgrade.js +51 -0
  51. package/dist/node/upgrade.js.map +1 -0
  52. package/dist/tsconfig.tsbuildinfo +1 -0
  53. package/dist/tsconfig.web.tsbuildinfo +1 -0
  54. package/dist/web/agent.d.ts +93 -0
  55. package/dist/web/agent.js +278 -0
  56. package/dist/web/agent.js.map +1 -0
  57. package/dist/web/base58/base58.d.ts +5 -0
  58. package/dist/web/base58/base58.js +108 -0
  59. package/dist/web/base58/base58.js.map +1 -0
  60. package/dist/web/base58/bigint-helpers.d.ts +24 -0
  61. package/dist/web/base58/bigint-helpers.js +214 -0
  62. package/dist/web/base58/bigint-helpers.js.map +1 -0
  63. package/dist/web/base58/index.d.ts +2 -0
  64. package/dist/web/base58/index.js +3 -0
  65. package/dist/web/base58/index.js.map +1 -0
  66. package/dist/web/base58/public-key.d.ts +4 -0
  67. package/dist/web/base58/public-key.js +7 -0
  68. package/dist/web/base58/public-key.js.map +1 -0
  69. package/dist/web/base58/signature.d.ts +3 -0
  70. package/dist/web/base58/signature.js +65 -0
  71. package/dist/web/base58/signature.js.map +1 -0
  72. package/dist/web/base58/versions.d.ts +11 -0
  73. package/dist/web/base58/versions.js +12 -0
  74. package/dist/web/base58/versions.js.map +1 -0
  75. package/dist/web/execute.d.ts +16 -0
  76. package/dist/web/execute.js +142 -0
  77. package/dist/web/execute.js.map +1 -0
  78. package/dist/web/fetch.d.ts +8 -0
  79. package/dist/web/fetch.js +41 -0
  80. package/dist/web/fetch.js.map +1 -0
  81. package/dist/web/index.d.ts +9 -0
  82. package/dist/web/index.js +10 -0
  83. package/dist/web/index.js.map +1 -0
  84. package/dist/web/mvr.d.ts +14 -0
  85. package/dist/web/mvr.js +70 -0
  86. package/dist/web/mvr.js.map +1 -0
  87. package/dist/web/publish.d.ts +9 -0
  88. package/dist/web/publish.js +40 -0
  89. package/dist/web/publish.js.map +1 -0
  90. package/dist/web/sleep.d.ts +1 -0
  91. package/dist/web/sleep.js +4 -0
  92. package/dist/web/sleep.js.map +1 -0
  93. package/dist/web/sui-client.d.ts +4 -0
  94. package/dist/web/sui-client.js +39 -0
  95. package/dist/web/sui-client.js.map +1 -0
  96. package/dist/web/types.d.ts +4 -0
  97. package/dist/web/types.js +2 -0
  98. package/dist/web/types.js.map +1 -0
  99. package/dist/web/upgrade.d.ts +13 -0
  100. package/dist/web/upgrade.js +51 -0
  101. package/dist/web/upgrade.js.map +1 -0
  102. package/package.json +59 -0
  103. package/src/agent.ts +437 -0
  104. package/src/base58/base58.ts +121 -0
  105. package/src/base58/bigint-helpers.ts +236 -0
  106. package/src/base58/index.ts +2 -0
  107. package/src/base58/public-key.ts +13 -0
  108. package/src/base58/signature.ts +89 -0
  109. package/src/base58/versions.ts +12 -0
  110. package/src/execute.ts +176 -0
  111. package/src/fetch.ts +54 -0
  112. package/src/index.ts +9 -0
  113. package/src/mvr.ts +99 -0
  114. package/src/publish.ts +54 -0
  115. package/src/sleep.ts +3 -0
  116. package/src/sui-client.ts +42 -0
  117. package/src/types.ts +4 -0
  118. package/src/upgrade.ts +78 -0
@@ -0,0 +1,108 @@
1
+ import { sha256 } from "js-sha256";
2
+ import { changeBase } from "./bigint-helpers.js";
3
+ export { fromBase58Check, alphabet };
4
+ const alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".split("");
5
+ let inverseAlphabet = {};
6
+ alphabet.forEach((c, i) => {
7
+ inverseAlphabet[c] = i;
8
+ });
9
+ export function toBytesWithVersionNumber(t, versionNumber) {
10
+ let bytes = toBytes(t, versionNumber);
11
+ bytes.unshift(versionNumber);
12
+ return bytes;
13
+ }
14
+ function bigIntToBytes(x, length) {
15
+ if (x < 0n) {
16
+ throw Error(`bigIntToBytes: negative numbers are not supported, got ${x}`);
17
+ }
18
+ let bytes = Array(length);
19
+ for (let i = 0; i < length; i++, x >>= 8n) {
20
+ bytes[i] = Number(x & 0xffn);
21
+ }
22
+ if (x > 0n) {
23
+ throw Error(`bigIntToBytes: input does not fit in ${length} bytes`);
24
+ }
25
+ return bytes;
26
+ }
27
+ function toBytes(t, versionNumber) {
28
+ if (t.length !== 2)
29
+ throw new Error("Expected 2 elements in t");
30
+ let bytes = [];
31
+ /*
32
+ let n = 2;
33
+ for (let i = 0; i < 2; i++) {
34
+ let subBytes = bigIntToBytes(t[i], 32);
35
+ bytes.push(...subBytes);
36
+ }
37
+ */
38
+ let subBytes1 = bigIntToBytes(t[0], 32);
39
+ subBytes1.unshift(versionNumber);
40
+ bytes.push(...subBytes1);
41
+ bytes.push(Number(t[1]));
42
+ return bytes;
43
+ }
44
+ export function toBase58Check(input, versionByte) {
45
+ let withVersion = [versionByte, ...input];
46
+ let checksum = computeChecksum(withVersion);
47
+ let withChecksum = withVersion.concat(checksum);
48
+ return toBase58(withChecksum);
49
+ }
50
+ function toBase58(bytes) {
51
+ // count the leading zeroes. these get turned into leading zeroes in the output
52
+ let z = 0;
53
+ while (bytes[z] === 0)
54
+ z++;
55
+ // for some reason, this is big-endian, so we need to reverse
56
+ let digits = [...bytes].map(BigInt).reverse();
57
+ // change base and reverse
58
+ let base58Digits = changeBase(digits, 256n, 58n).reverse();
59
+ // add leading zeroes, map into alphabet
60
+ base58Digits = Array(z).fill(0n).concat(base58Digits);
61
+ return base58Digits.map((x) => alphabet[Number(x)]).join("");
62
+ }
63
+ function fromBase58Check(base58, versionByte) {
64
+ // throws on invalid character
65
+ let bytes = fromBase58(base58);
66
+ // check checksum
67
+ let checksum = bytes.slice(-4);
68
+ let originalBytes = bytes.slice(0, -4);
69
+ let actualChecksum = computeChecksum(originalBytes);
70
+ if (!arrayEqual(checksum, actualChecksum))
71
+ throw Error("fromBase58Check: invalid checksum");
72
+ // check version byte
73
+ if (originalBytes[0] !== versionByte)
74
+ throw Error(`fromBase58Check: input version byte ${versionByte} does not match encoded version byte ${originalBytes[0]}`);
75
+ // return result
76
+ return originalBytes.slice(1);
77
+ }
78
+ function fromBase58(base58) {
79
+ let base58Digits = [...base58].map((c) => {
80
+ let digit = inverseAlphabet[c];
81
+ if (digit === undefined)
82
+ throw Error("fromBase58: invalid character");
83
+ return BigInt(digit);
84
+ });
85
+ let z = 0;
86
+ while (base58Digits[z] === 0n)
87
+ z++;
88
+ let digits = changeBase(base58Digits.reverse(), 58n, 256n).reverse();
89
+ digits = Array(z).fill(0n).concat(digits);
90
+ return digits.map(Number);
91
+ }
92
+ function computeChecksum(input) {
93
+ let hash1 = sha256.create();
94
+ hash1.update(input);
95
+ let hash2 = sha256.create();
96
+ hash2.update(hash1.array());
97
+ return hash2.array().slice(0, 4);
98
+ }
99
+ function arrayEqual(a, b) {
100
+ if (a.length !== b.length)
101
+ return false;
102
+ for (let i = 0; i < a.length; i++) {
103
+ if (a[i] !== b[i])
104
+ return false;
105
+ }
106
+ return true;
107
+ }
108
+ //# sourceMappingURL=base58.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base58.js","sourceRoot":"","sources":["../../../src/base58/base58.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export { changeBase, bytesToBigInt, bigIntToBytes, bigIntToBits, parseHexString32, log2, max, abs, sign, bytesToBigint32, bigintToBytes32, };
2
+ declare function bytesToBigint32(bytes: Uint8Array): bigint;
3
+ declare function bigintToBytes32(x: bigint, bytes: Uint8Array): Uint8Array;
4
+ declare function bytesToBigInt(bytes: Uint8Array | number[]): bigint;
5
+ declare function parseHexString32(input: string): bigint;
6
+ /**
7
+ * Transforms bigint to little-endian array of bytes (numbers between 0 and 255) of a given length.
8
+ * Throws an error if the bigint doesn't fit in the given number of bytes.
9
+ */
10
+ declare function bigIntToBytes(x: bigint, length?: number): number[];
11
+ /**
12
+ * Transforms bigint to little-endian array of bits (booleans).
13
+ * The length of the bit array is determined as needed.
14
+ */
15
+ declare function bigIntToBits(x: bigint): boolean[];
16
+ declare function changeBase(digits: bigint[], base: bigint, newBase: bigint): bigint[];
17
+ /**
18
+ * ceil(log2(n))
19
+ * = smallest k such that n <= 2^k
20
+ */
21
+ declare function log2(n: number | bigint): number;
22
+ declare function max(a: bigint, b: bigint): bigint;
23
+ declare function abs(x: bigint): bigint;
24
+ declare function sign(x: bigint): 1n | -1n;
@@ -0,0 +1,214 @@
1
+ export { changeBase, bytesToBigInt, bigIntToBytes, bigIntToBits, parseHexString32, log2, max, abs, sign, bytesToBigint32, bigintToBytes32, };
2
+ function bytesToBigint32(bytes) {
3
+ let words = new BigUint64Array(bytes.buffer, bytes.byteOffset, 4);
4
+ return words[0] | (words[1] << 64n) | (words[2] << 128n) | (words[3] << 192n);
5
+ }
6
+ const mask64 = (1n << 64n) - 1n;
7
+ function bigintToBytes32(x, bytes) {
8
+ let words = new BigUint64Array(bytes.buffer, bytes.byteOffset, 4);
9
+ words[0] = x & mask64;
10
+ words[1] = (x >> 64n) & mask64;
11
+ words[2] = (x >> 128n) & mask64;
12
+ words[3] = x >> 192n;
13
+ return bytes;
14
+ }
15
+ function bytesToBigInt(bytes) {
16
+ let x = 0n;
17
+ let bitPosition = 0n;
18
+ for (let byte of bytes) {
19
+ x += BigInt(byte) << bitPosition;
20
+ bitPosition += 8n;
21
+ }
22
+ return x;
23
+ }
24
+ let hexToNum = {};
25
+ for (let i = 0; i < 16; i++)
26
+ hexToNum[i.toString(16).charCodeAt(0)] = i;
27
+ let encoder = new TextEncoder();
28
+ const tmpBytes = new Uint8Array(64);
29
+ function parseHexString32(input) {
30
+ // Parse the bytes explicitly, Bigint endianness is wrong
31
+ encoder.encodeInto(input, tmpBytes);
32
+ for (let j = 0; j < 32; j++) {
33
+ let n1 = hexToNum[tmpBytes[2 * j]];
34
+ let n0 = hexToNum[tmpBytes[2 * j + 1]];
35
+ tmpBytes[j] = (n1 << 4) | n0;
36
+ }
37
+ return bytesToBigint32(tmpBytes);
38
+ }
39
+ /**
40
+ * Transforms bigint to little-endian array of bytes (numbers between 0 and 255) of a given length.
41
+ * Throws an error if the bigint doesn't fit in the given number of bytes.
42
+ */
43
+ function bigIntToBytes(x, length) {
44
+ if (x < 0n) {
45
+ throw Error(`bigIntToBytes: negative numbers are not supported, got ${x}`);
46
+ }
47
+ if (length === undefined)
48
+ return bigintToBytesFlexible(x);
49
+ let bytes = Array(length);
50
+ for (let i = 0; i < length; i++, x >>= 8n) {
51
+ bytes[i] = Number(x & 0xffn);
52
+ }
53
+ if (x > 0n) {
54
+ throw Error(`bigIntToBytes: input does not fit in ${length} bytes`);
55
+ }
56
+ return bytes;
57
+ }
58
+ function bigintToBytesFlexible(x) {
59
+ let bytes = [];
60
+ for (; x > 0n; x >>= 8n) {
61
+ bytes.push(Number(x & 0xffn));
62
+ }
63
+ return bytes;
64
+ }
65
+ /**
66
+ * Transforms bigint to little-endian array of bits (booleans).
67
+ * The length of the bit array is determined as needed.
68
+ */
69
+ function bigIntToBits(x) {
70
+ if (x < 0n) {
71
+ throw Error(`bigIntToBits: negative numbers are not supported, got ${x}`);
72
+ }
73
+ let bits = [];
74
+ for (; x > 0n; x >>= 1n) {
75
+ let bit = !!(x & 1n);
76
+ bits.push(bit);
77
+ }
78
+ return bits;
79
+ }
80
+ function changeBase(digits, base, newBase) {
81
+ // 1. accumulate digits into one gigantic bigint `x`
82
+ let x = fromBase(digits, base);
83
+ // 2. compute new digits from `x`
84
+ let newDigits = toBase(x, newBase);
85
+ return newDigits;
86
+ }
87
+ /**
88
+ * the algorithm for toBase / fromBase is more complicated than it naively has to be,
89
+ * but that is for performance reasons.
90
+ *
91
+ * we'll explain it for `fromBase`. this function is about taking an array of digits
92
+ * `[x0, ..., xn]`
93
+ * and returning the integer (bigint) that has those digits in the given `base`:
94
+ * ```
95
+ * let x = x0 + x1*base + x2*base**2 + ... + xn*base**n
96
+ * ```
97
+ *
98
+ * naively, we could just accumulate digits from left to right:
99
+ * ```
100
+ * let x = 0n;
101
+ * let p = 1n;
102
+ * for (let i=0; i<n; i++) {
103
+ * x += X[i] * p;
104
+ * p *= base;
105
+ * }
106
+ * ```
107
+ *
108
+ * in the ith step, `p = base**i` which is multiplied with `xi` and added to the sum.
109
+ * however, note that this algorithm is `O(n^2)`: let `l = log2(base)`. the base power `p` is a bigint of bit length `i*l`,
110
+ * which is multiplied by a "small" number `xi` (length l), which takes `O(i)` time in every step.
111
+ * since this is done for `i = 0,...,n`, we end up with an `O(n^2)` algorithm.
112
+ *
113
+ * HOWEVER, it turns out that there are fast multiplication algorithms, and JS bigints have them built in!
114
+ * the Schönhage-Strassen algorithm (implemented in the V8 engine, see https://github.com/v8/v8/blob/main/src/bigint/mul-fft.cc)
115
+ * can multiply two n-bit numbers in time `O(n log(n) loglog(n))`, when n is large.
116
+ *
117
+ * to take advantage of asymptotically fast multiplication, we need to re-structure our algorithm such that it multiplies roughly equal-sized
118
+ * numbers with each other (there is no asymptotic boost for multiplying a small with a large number). so, what we do is to go from the
119
+ * original digit array to arrays of successively larger digits:
120
+ * ```
121
+ * step 0: step 1: step 2:
122
+ * [x0, x1, x2, x3, ...] -> [x0 + base*x1, x2 + base*x3, ...] -> [x0 + base*x1 + base^2*(x2 + base*x3), ...] -> ...
123
+ * ```
124
+ *
125
+ * ...until after a log(n) number of steps we end up with a single "digit" which is equal to the entire sum.
126
+ *
127
+ * in the ith step, we multiply `n/2^i` pairs of numbers of bit length `2^i*l`. each of these multiplications takes
128
+ * time `O(2^i log(2^i) loglog(2^i))`. if we bound that with `O(2^i log(n) loglog(n))`, we get a runtime bounded by
129
+ * ```
130
+ * O(n/2^i * 2^i log(n) loglog(n)) = O(n log(n) loglog(n))
131
+ * ```
132
+ * in each step. Since we have `log(n)` steps, the result is `O(n log(n)^2 loglog(n))`.
133
+ *
134
+ * empirically, this method is a huge improvement over the naive `O(n^2)` algorithm and scales much better with n (the number of digits).
135
+ *
136
+ * similar conclusions hold for `toBase`.
137
+ */
138
+ function fromBase(digits, base) {
139
+ if (base <= 0n)
140
+ throw Error("fromBase: base must be positive");
141
+ // compute powers base, base^2, base^4, ..., base^(2^k)
142
+ // with largest k s.t. n = 2^k < digits.length
143
+ let basePowers = [];
144
+ for (let power = base, n = 1; n < digits.length; power **= 2n, n *= 2) {
145
+ basePowers.push(power);
146
+ }
147
+ let k = basePowers.length;
148
+ // pad digits array with zeros s.t. digits.length === 2^k
149
+ digits = digits.concat(Array(2 ** k - digits.length).fill(0n));
150
+ // accumulate [x0, x1, x2, x3, ...] -> [x0 + base*x1, x2 + base*x3, ...] -> [x0 + base*x1 + base^2*(x2 + base*x3), ...] -> ...
151
+ // until we end up with a single element
152
+ for (let i = 0; i < k; i++) {
153
+ let newDigits = Array(digits.length >> 1);
154
+ let basePower = basePowers[i];
155
+ for (let j = 0; j < newDigits.length; j++) {
156
+ newDigits[j] = digits[2 * j] + basePower * digits[2 * j + 1];
157
+ }
158
+ digits = newDigits;
159
+ }
160
+ console.assert(digits.length === 1);
161
+ let [digit] = digits;
162
+ return digit;
163
+ }
164
+ function toBase(x, base) {
165
+ if (base <= 0n)
166
+ throw Error("toBase: base must be positive");
167
+ // compute powers base, base^2, base^4, ..., base^(2^k)
168
+ // with largest k s.t. base^(2^k) < x
169
+ let basePowers = [];
170
+ for (let power = base; power < x; power **= 2n) {
171
+ basePowers.push(power);
172
+ }
173
+ let digits = [x]; // single digit w.r.t base^(2^(k+1))
174
+ // successively split digits w.r.t. base^(2^j) into digits w.r.t. base^(2^(j-1))
175
+ // until we arrive at digits w.r.t. base
176
+ let k = basePowers.length;
177
+ for (let i = 0; i < k; i++) {
178
+ let newDigits = Array(2 * digits.length);
179
+ let basePower = basePowers[k - 1 - i];
180
+ for (let j = 0; j < digits.length; j++) {
181
+ let x = digits[j];
182
+ let high = x / basePower;
183
+ newDigits[2 * j + 1] = high;
184
+ newDigits[2 * j] = x - high * basePower;
185
+ }
186
+ digits = newDigits;
187
+ }
188
+ // pop "leading" zero digits
189
+ while (digits[digits.length - 1] === 0n) {
190
+ digits.pop();
191
+ }
192
+ return digits;
193
+ }
194
+ /**
195
+ * ceil(log2(n))
196
+ * = smallest k such that n <= 2^k
197
+ */
198
+ function log2(n) {
199
+ if (typeof n === "number")
200
+ n = BigInt(n);
201
+ if (n === 1n)
202
+ return 0;
203
+ return (n - 1n).toString(2).length;
204
+ }
205
+ function max(a, b) {
206
+ return a > b ? a : b;
207
+ }
208
+ function abs(x) {
209
+ return x < 0n ? -x : x;
210
+ }
211
+ function sign(x) {
212
+ return x >= 0 ? 1n : -1n;
213
+ }
214
+ //# sourceMappingURL=bigint-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint-helpers.js","sourceRoot":"","sources":["../../../src/base58/bigint-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./signature.js";
2
+ export * from "./public-key.js";
@@ -0,0 +1,3 @@
1
+ export * from "./signature.js";
2
+ export * from "./public-key.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base58/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function convertFieldsToPublicKey(fields: {
2
+ x: bigint;
3
+ isOdd: boolean;
4
+ }): string;
@@ -0,0 +1,7 @@
1
+ import { toBase58Check, toBytesWithVersionNumber } from "./base58.js";
2
+ import { versionNumbers, versionBytes } from "./versions.js";
3
+ export function convertFieldsToPublicKey(fields) {
4
+ let bytes = toBytesWithVersionNumber([fields.x, fields.isOdd ? 1n : 0n], versionNumbers.publicKey);
5
+ return toBase58Check(bytes, versionBytes.publicKey);
6
+ }
7
+ //# sourceMappingURL=public-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-key.js","sourceRoot":"","sources":["../../../src/base58/public-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,UAAU,wBAAwB,CAAC,MAGxC;IACC,IAAI,KAAK,GAAG,wBAAwB,CAClC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAClC,cAAc,CAAC,SAAS,CACzB,CAAC;IACF,OAAO,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { MinaSignature } from "../types.js";
2
+ export declare function convertMinaSignatureFromBase58(signature: string): MinaSignature;
3
+ export declare function convertMinaSignatureToBase58(signature: MinaSignature): string;
@@ -0,0 +1,65 @@
1
+ import { fromBase58Check, toBase58Check } from "./base58.js";
2
+ import { versionNumbers, versionBytes } from "./versions.js";
3
+ function assertNonNegativeInteger(n, message) {
4
+ if (!Number.isInteger(n) || n < 0)
5
+ throw Error(message);
6
+ }
7
+ function bytesToBigInt(bytes) {
8
+ let x = 0n;
9
+ let bitPosition = 0n;
10
+ for (let byte of bytes) {
11
+ x += BigInt(byte) << bitPosition;
12
+ bitPosition += 8n;
13
+ }
14
+ return x;
15
+ }
16
+ function readBytesInternal(bytes, start) {
17
+ const rBytes = bytes.slice(start, start + 32);
18
+ const sBytes = bytes.slice(start + 32, start + 64);
19
+ const r = bytesToBigInt(rBytes);
20
+ const s = bytesToBigInt(sBytes);
21
+ return { r, s };
22
+ }
23
+ function readBytes(bytes, offset, versionNumber) {
24
+ let version = bytes[offset++];
25
+ if (version !== versionNumber) {
26
+ throw Error(`fromBytes: Invalid version byte. Expected ${versionNumber}, got ${version}.`);
27
+ }
28
+ return readBytesInternal(bytes, offset);
29
+ }
30
+ let readBytes_ = (bytes, offset) => {
31
+ assertNonNegativeInteger(offset, "readBytes: offset must be integer >= 0");
32
+ if (offset >= bytes.length)
33
+ throw Error("readBytes: offset must be within bytes length");
34
+ return readBytes(bytes, offset, versionNumbers.signature);
35
+ };
36
+ function fromBytes(bytes) {
37
+ return readBytes_(bytes, 0);
38
+ }
39
+ function toBytes(signature) {
40
+ const result = new Array(65);
41
+ result[0] = versionNumbers.signature;
42
+ // Convert r to bytes
43
+ let r = signature.r;
44
+ for (let i = 0; i < 32; i++) {
45
+ result[i + 1] = Number(r & 0xffn);
46
+ r >>= 8n;
47
+ }
48
+ // Convert s to bytes
49
+ let s = signature.s;
50
+ for (let i = 0; i < 32; i++) {
51
+ result[i + 33] = Number(s & 0xffn);
52
+ s >>= 8n;
53
+ }
54
+ return result;
55
+ }
56
+ export function convertMinaSignatureFromBase58(signature) {
57
+ const bytes = fromBase58Check(signature, versionBytes.signature);
58
+ const minaSignature = fromBytes(bytes);
59
+ return minaSignature;
60
+ }
61
+ export function convertMinaSignatureToBase58(signature) {
62
+ const bytes = toBytes(signature);
63
+ return toBase58Check(bytes, versionBytes.signature);
64
+ }
65
+ //# sourceMappingURL=signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.js","sourceRoot":"","sources":["../../../src/base58/signature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const versionNumbers: {
2
+ field: number;
3
+ scalar: number;
4
+ publicKey: number;
5
+ signature: number;
6
+ };
7
+ export declare const versionBytes: {
8
+ publicKey: number;
9
+ privateKey: number;
10
+ signature: number;
11
+ };
@@ -0,0 +1,12 @@
1
+ export const versionNumbers = {
2
+ field: 1,
3
+ scalar: 1,
4
+ publicKey: 1,
5
+ signature: 1,
6
+ };
7
+ export const versionBytes = {
8
+ publicKey: 203,
9
+ privateKey: 90,
10
+ signature: 154,
11
+ };
12
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/base58/versions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,EAAE;IACd,SAAS,EAAE,GAAG;CACf,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { SuiTransactionBlockResponse } from "@mysten/sui/client";
2
+ import { Transaction } from "@mysten/sui/transactions";
3
+ import { Secp256k1Keypair } from "@mysten/sui/keypairs/secp256k1";
4
+ import { Ed25519Keypair } from "@mysten/sui/keypairs/ed25519";
5
+ export declare function executeTx(params: {
6
+ tx: Transaction;
7
+ keyPair: Secp256k1Keypair | Ed25519Keypair;
8
+ useParallelExecutor?: boolean;
9
+ showErrors?: boolean;
10
+ }): Promise<{
11
+ tx: SuiTransactionBlockResponse;
12
+ digest: string;
13
+ events: object;
14
+ executeTime: number;
15
+ } | undefined>;
16
+ export declare function waitTx(digest: string): Promise<SuiTransactionBlockResponse>;
@@ -0,0 +1,142 @@
1
+ import { ParallelTransactionExecutor, } from "@mysten/sui/transactions";
2
+ import { suiClient } from "./sui-client.js";
3
+ import { nanoid } from "nanoid";
4
+ import { sleep } from "./sleep.js";
5
+ const executors = {};
6
+ const locks = {};
7
+ const LOCK_TIMEOUT = 1000 * 60 * 2; // 5 minutes
8
+ async function getLock(address) {
9
+ const id = nanoid();
10
+ let locked = false;
11
+ const start = Date.now();
12
+ while (!locked && Date.now() - start < LOCK_TIMEOUT) {
13
+ if (locks[address]) {
14
+ await sleep(Math.floor(Math.random() * 10) + 10);
15
+ }
16
+ else {
17
+ locks[address] = id;
18
+ await sleep(10);
19
+ if (locks[address] === id) {
20
+ locked = true;
21
+ return id;
22
+ }
23
+ }
24
+ }
25
+ return undefined;
26
+ }
27
+ async function releaseLock(params) {
28
+ const { address, id } = params;
29
+ if (locks[address] === id) {
30
+ locks[address] = undefined;
31
+ }
32
+ }
33
+ function getExecutor(keyPair) {
34
+ const keyPairId = keyPair.toSuiAddress();
35
+ if (!executors[keyPairId]) {
36
+ executors[keyPairId] = new ParallelTransactionExecutor({
37
+ client: suiClient,
38
+ signer: keyPair,
39
+ initialCoinBalance: 500000000n,
40
+ minimumCoinBalance: 300000000n,
41
+ maxPoolSize: 5,
42
+ });
43
+ locks[keyPairId] = undefined;
44
+ }
45
+ return executors[keyPairId];
46
+ }
47
+ export async function executeTx(params) {
48
+ let lockId;
49
+ let address;
50
+ try {
51
+ const { tx, keyPair, useParallelExecutor = false, showErrors = true, } = params;
52
+ let executedTx;
53
+ let start = 0;
54
+ let end = 0;
55
+ if (useParallelExecutor) {
56
+ address = keyPair.toSuiAddress();
57
+ lockId = await getLock(address);
58
+ if (!lockId) {
59
+ throw new Error("Failed to get lock");
60
+ }
61
+ start = Date.now();
62
+ const executor = getExecutor(keyPair);
63
+ executedTx = (await executor.executeTransaction(tx, {
64
+ showEffects: true,
65
+ showObjectChanges: true,
66
+ showInput: true,
67
+ showEvents: true,
68
+ showBalanceChanges: true,
69
+ })).data;
70
+ end = Date.now();
71
+ await waitTx(executedTx.digest);
72
+ await sleep(1000);
73
+ await releaseLock({ address: address, id: lockId });
74
+ }
75
+ else {
76
+ address = keyPair.toSuiAddress();
77
+ lockId = await getLock(address);
78
+ if (!lockId) {
79
+ throw new Error("Failed to get lock");
80
+ }
81
+ const signedTx = await tx.sign({
82
+ signer: keyPair,
83
+ client: suiClient,
84
+ });
85
+ start = Date.now();
86
+ // const dryRun = await suiClient.devInspectTransactionBlock({
87
+ // sender: keypair.toSuiAddress(),
88
+ // transactionBlock: signedTx.bytes
89
+ // });
90
+ // dryRun.effects.gasUsed.computationCost
91
+ // const gasPrice = await suiClient.getReferenceGasPrice();
92
+ executedTx = await suiClient.executeTransactionBlock({
93
+ transactionBlock: signedTx.bytes,
94
+ signature: signedTx.signature,
95
+ options: {
96
+ showEffects: true,
97
+ showObjectChanges: true,
98
+ showInput: true,
99
+ showEvents: true,
100
+ showBalanceChanges: true,
101
+ },
102
+ });
103
+ end = Date.now();
104
+ await releaseLock({ address, id: lockId });
105
+ }
106
+ if (executedTx?.effects?.status?.status === "failure") {
107
+ if (showErrors) {
108
+ console.log(`Errors for tx ${executedTx.digest}:`, executedTx?.effects?.status?.error);
109
+ throw new Error(`tx execution failed: ${executedTx.digest}`);
110
+ }
111
+ }
112
+ return {
113
+ tx: executedTx,
114
+ digest: executedTx.digest,
115
+ events: executedTx?.events?.[0]?.parsedJson,
116
+ executeTime: end - start,
117
+ };
118
+ }
119
+ catch (error) {
120
+ if (lockId && address) {
121
+ await releaseLock({ address, id: lockId });
122
+ }
123
+ console.error("Error in executeTx", error.message);
124
+ return undefined;
125
+ }
126
+ }
127
+ export async function waitTx(digest) {
128
+ console.time(`wait sui tx`);
129
+ const txWaitResult = await suiClient.waitForTransaction({
130
+ digest,
131
+ options: {
132
+ showEffects: true,
133
+ showObjectChanges: true,
134
+ showInput: true,
135
+ showEvents: true,
136
+ showBalanceChanges: true,
137
+ },
138
+ });
139
+ console.timeEnd(`wait sui tx`);
140
+ return txWaitResult;
141
+ }
142
+ //# sourceMappingURL=execute.js.map