@solana/addresses 2.0.0-experimental.e0b865d → 2.0.0-experimental.e1ca396
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/LICENSE +1 -1
- package/README.md +124 -17
- package/dist/index.browser.cjs +84 -50
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +77 -49
- package/dist/index.browser.js.map +1 -1
- package/dist/index.development.js +340 -265
- package/dist/index.development.js.map +1 -1
- package/dist/index.native.js +77 -47
- package/dist/index.native.js.map +1 -1
- package/dist/index.node.cjs +84 -50
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +77 -47
- package/dist/index.node.js.map +1 -1
- package/dist/index.production.min.js +13 -9
- package/dist/types/address.d.ts +12 -0
- package/dist/types/address.d.ts.map +1 -0
- package/dist/types/curve.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/program-derived-address.d.ts +38 -0
- package/dist/types/program-derived-address.d.ts.map +1 -0
- package/dist/types/public-key.d.ts +2 -2
- package/dist/types/public-key.d.ts.map +1 -0
- package/dist/types/vendor/noble/ed25519.d.ts.map +1 -0
- package/package.json +14 -13
- package/dist/types/base58.d.ts +0 -12
- package/dist/types/computed-address.d.ts +0 -18
|
@@ -2,24 +2,18 @@ this.globalThis = this.globalThis || {};
|
|
|
2
2
|
this.globalThis.solanaWeb3 = (function (exports) {
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
bytesArr.forEach((arr) => {
|
|
18
|
-
result.set(arr, offset);
|
|
19
|
-
offset += arr.length;
|
|
20
|
-
});
|
|
21
|
-
return result;
|
|
22
|
-
};
|
|
5
|
+
// ../codecs-core/dist/index.browser.js
|
|
6
|
+
function assertByteArrayIsNotEmptyForCodec(codecDescription, bytes, offset = 0) {
|
|
7
|
+
if (bytes.length - offset <= 0) {
|
|
8
|
+
throw new Error(`Codec [${codecDescription}] cannot decode empty byte arrays.`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function assertByteArrayHasEnoughBytesForCodec(codecDescription, expected, bytes, offset = 0) {
|
|
12
|
+
const bytesLength = bytes.length - offset;
|
|
13
|
+
if (bytesLength < expected) {
|
|
14
|
+
throw new Error(`Codec [${codecDescription}] expected ${expected} bytes, got ${bytesLength}.`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
23
17
|
var padBytes = (bytes, length) => {
|
|
24
18
|
if (bytes.length >= length)
|
|
25
19
|
return bytes;
|
|
@@ -27,293 +21,357 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
27
21
|
paddedBytes.set(bytes);
|
|
28
22
|
return paddedBytes;
|
|
29
23
|
};
|
|
30
|
-
var fixBytes = (bytes, length) => padBytes(bytes.slice(0, length), length);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
24
|
+
var fixBytes = (bytes, length) => padBytes(bytes.length <= length ? bytes : bytes.slice(0, length), length);
|
|
25
|
+
function getEncodedSize(value, encoder) {
|
|
26
|
+
return "fixedSize" in encoder ? encoder.fixedSize : encoder.getSizeFromValue(value);
|
|
27
|
+
}
|
|
28
|
+
function createEncoder(encoder) {
|
|
29
|
+
return Object.freeze({
|
|
30
|
+
...encoder,
|
|
31
|
+
encode: (value) => {
|
|
32
|
+
const bytes = new Uint8Array(getEncodedSize(value, encoder));
|
|
33
|
+
encoder.write(value, bytes, 0);
|
|
34
|
+
return bytes;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function createDecoder(decoder) {
|
|
39
|
+
return Object.freeze({
|
|
40
|
+
...decoder,
|
|
41
|
+
decode: (bytes, offset = 0) => decoder.read(bytes, offset)[0]
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function isFixedSize(codec) {
|
|
45
|
+
return "fixedSize" in codec && typeof codec.fixedSize === "number";
|
|
46
|
+
}
|
|
47
|
+
function isVariableSize(codec) {
|
|
48
|
+
return !isFixedSize(codec);
|
|
49
|
+
}
|
|
50
|
+
function combineCodec(encoder, decoder) {
|
|
51
|
+
if (isFixedSize(encoder) !== isFixedSize(decoder)) {
|
|
52
|
+
throw new Error(`Encoder and decoder must either both be fixed-size or variable-size.`);
|
|
37
53
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
54
|
+
if (isFixedSize(encoder) && isFixedSize(decoder) && encoder.fixedSize !== decoder.fixedSize) {
|
|
55
|
+
throw new Error(
|
|
56
|
+
`Encoder and decoder must have the same fixed size, got [${encoder.fixedSize}] and [${decoder.fixedSize}].`
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
if (!isFixedSize(encoder) && !isFixedSize(decoder) && encoder.maxSize !== decoder.maxSize) {
|
|
60
|
+
throw new Error(
|
|
61
|
+
`Encoder and decoder must have the same max size, got [${encoder.maxSize}] and [${decoder.maxSize}].`
|
|
62
|
+
);
|
|
43
63
|
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.9/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/fixSerializer.mjs
|
|
47
|
-
function fixSerializer(serializer, fixedBytes, description) {
|
|
48
64
|
return {
|
|
49
|
-
|
|
65
|
+
...decoder,
|
|
66
|
+
...encoder,
|
|
67
|
+
decode: decoder.decode,
|
|
68
|
+
encode: encoder.encode,
|
|
69
|
+
read: decoder.read,
|
|
70
|
+
write: encoder.write
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function fixEncoder(encoder, fixedBytes) {
|
|
74
|
+
return createEncoder({
|
|
75
|
+
fixedSize: fixedBytes,
|
|
76
|
+
write: (value, bytes, offset) => {
|
|
77
|
+
const variableByteArray = encoder.encode(value);
|
|
78
|
+
const fixedByteArray = variableByteArray.length > fixedBytes ? variableByteArray.slice(0, fixedBytes) : variableByteArray;
|
|
79
|
+
bytes.set(fixedByteArray, offset);
|
|
80
|
+
return offset + fixedBytes;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function fixDecoder(decoder, fixedBytes) {
|
|
85
|
+
return createDecoder({
|
|
50
86
|
fixedSize: fixedBytes,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (buffer.length < fixedBytes) {
|
|
56
|
-
throw new NotEnoughBytesError("fixSerializer", fixedBytes, buffer.length);
|
|
87
|
+
read: (bytes, offset) => {
|
|
88
|
+
assertByteArrayHasEnoughBytesForCodec("fixCodec", fixedBytes, bytes, offset);
|
|
89
|
+
if (offset > 0 || bytes.length > fixedBytes) {
|
|
90
|
+
bytes = bytes.slice(offset, offset + fixedBytes);
|
|
57
91
|
}
|
|
58
|
-
if (
|
|
59
|
-
|
|
92
|
+
if (isFixedSize(decoder)) {
|
|
93
|
+
bytes = fixBytes(bytes, decoder.fixedSize);
|
|
60
94
|
}
|
|
61
|
-
const [value] =
|
|
95
|
+
const [value] = decoder.read(bytes, 0);
|
|
62
96
|
return [value, offset + fixedBytes];
|
|
63
97
|
}
|
|
64
|
-
};
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function mapEncoder(encoder, unmap) {
|
|
101
|
+
return createEncoder({
|
|
102
|
+
...isVariableSize(encoder) ? { ...encoder, getSizeFromValue: (value) => encoder.getSizeFromValue(unmap(value)) } : encoder,
|
|
103
|
+
write: (value, bytes, offset) => encoder.write(unmap(value), bytes, offset)
|
|
104
|
+
});
|
|
65
105
|
}
|
|
66
106
|
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this.cause = cause;
|
|
107
|
+
// ../codecs-numbers/dist/index.browser.js
|
|
108
|
+
function assertNumberIsBetweenForCodec(codecDescription, min, max, value) {
|
|
109
|
+
if (value < min || value > max) {
|
|
110
|
+
throw new Error(
|
|
111
|
+
`Codec [${codecDescription}] expected number to be in the range [${min}, ${max}], got ${value}.`
|
|
112
|
+
);
|
|
74
113
|
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
serialize(value) {
|
|
86
|
-
if (!value.match(new RegExp(`^[${alphabet}]*$`))) {
|
|
87
|
-
throw new InvalidBaseStringError(value, base);
|
|
114
|
+
}
|
|
115
|
+
function isLittleEndian(config) {
|
|
116
|
+
return (config == null ? void 0 : config.endian) === 1 ? false : true;
|
|
117
|
+
}
|
|
118
|
+
function numberEncoderFactory(input) {
|
|
119
|
+
return createEncoder({
|
|
120
|
+
fixedSize: input.size,
|
|
121
|
+
write(value, bytes, offset) {
|
|
122
|
+
if (input.range) {
|
|
123
|
+
assertNumberIsBetweenForCodec(input.name, input.range[0], input.range[1], value);
|
|
88
124
|
}
|
|
125
|
+
const arrayBuffer = new ArrayBuffer(input.size);
|
|
126
|
+
input.set(new DataView(arrayBuffer), value, isLittleEndian(input.config));
|
|
127
|
+
bytes.set(new Uint8Array(arrayBuffer), offset);
|
|
128
|
+
return offset + input.size;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
function numberDecoderFactory(input) {
|
|
133
|
+
return createDecoder({
|
|
134
|
+
fixedSize: input.size,
|
|
135
|
+
read(bytes, offset = 0) {
|
|
136
|
+
assertByteArrayIsNotEmptyForCodec(input.name, bytes, offset);
|
|
137
|
+
assertByteArrayHasEnoughBytesForCodec(input.name, input.size, bytes, offset);
|
|
138
|
+
const view = new DataView(toArrayBuffer(bytes, offset, input.size));
|
|
139
|
+
return [input.get(view, isLittleEndian(input.config)), offset + input.size];
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
function toArrayBuffer(bytes, offset, length) {
|
|
144
|
+
const bytesOffset = bytes.byteOffset + (offset != null ? offset : 0);
|
|
145
|
+
const bytesLength = length != null ? length : bytes.byteLength;
|
|
146
|
+
return bytes.buffer.slice(bytesOffset, bytesOffset + bytesLength);
|
|
147
|
+
}
|
|
148
|
+
var getU32Encoder = (config = {}) => numberEncoderFactory({
|
|
149
|
+
config,
|
|
150
|
+
name: "u32",
|
|
151
|
+
range: [0, Number("0xffffffff")],
|
|
152
|
+
set: (view, value, le) => view.setUint32(0, value, le),
|
|
153
|
+
size: 4
|
|
154
|
+
});
|
|
155
|
+
var getU32Decoder = (config = {}) => numberDecoderFactory({
|
|
156
|
+
config,
|
|
157
|
+
get: (view, le) => view.getUint32(0, le),
|
|
158
|
+
name: "u32",
|
|
159
|
+
size: 4
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
// ../codecs-strings/dist/index.browser.js
|
|
163
|
+
function assertValidBaseString(alphabet4, testValue, givenValue = testValue) {
|
|
164
|
+
if (!testValue.match(new RegExp(`^[${alphabet4}]*$`))) {
|
|
165
|
+
throw new Error(`Expected a string of base ${alphabet4.length}, got [${givenValue}].`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
var getBaseXEncoder = (alphabet4) => {
|
|
169
|
+
return createEncoder({
|
|
170
|
+
getSizeFromValue: (value) => {
|
|
171
|
+
const [leadingZeroes, tailChars] = partitionLeadingZeroes(value, alphabet4[0]);
|
|
172
|
+
if (tailChars === "")
|
|
173
|
+
return value.length;
|
|
174
|
+
const base10Number = getBigIntFromBaseX(tailChars, alphabet4);
|
|
175
|
+
return leadingZeroes.length + Math.ceil(base10Number.toString(16).length / 2);
|
|
176
|
+
},
|
|
177
|
+
write(value, bytes, offset) {
|
|
178
|
+
assertValidBaseString(alphabet4, value);
|
|
89
179
|
if (value === "")
|
|
90
|
-
return
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (trailIndex === chars.length)
|
|
96
|
-
return Uint8Array.from(leadingZeroes);
|
|
97
|
-
const tailChars = chars.slice(trailIndex);
|
|
98
|
-
let base10Number = 0n;
|
|
99
|
-
let baseXPower = 1n;
|
|
100
|
-
for (let i = tailChars.length - 1; i >= 0; i -= 1) {
|
|
101
|
-
base10Number += baseXPower * BigInt(alphabet.indexOf(tailChars[i]));
|
|
102
|
-
baseXPower *= baseBigInt;
|
|
180
|
+
return offset;
|
|
181
|
+
const [leadingZeroes, tailChars] = partitionLeadingZeroes(value, alphabet4[0]);
|
|
182
|
+
if (tailChars === "") {
|
|
183
|
+
bytes.set(new Uint8Array(leadingZeroes.length).fill(0), offset);
|
|
184
|
+
return offset + leadingZeroes.length;
|
|
103
185
|
}
|
|
186
|
+
let base10Number = getBigIntFromBaseX(tailChars, alphabet4);
|
|
104
187
|
const tailBytes = [];
|
|
105
188
|
while (base10Number > 0n) {
|
|
106
189
|
tailBytes.unshift(Number(base10Number % 256n));
|
|
107
190
|
base10Number /= 256n;
|
|
108
191
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
192
|
+
const bytesToAdd = [...Array(leadingZeroes.length).fill(0), ...tailBytes];
|
|
193
|
+
bytes.set(bytesToAdd, offset);
|
|
194
|
+
return offset + bytesToAdd.length;
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
var getBaseXDecoder = (alphabet4) => {
|
|
199
|
+
return createDecoder({
|
|
200
|
+
read(rawBytes, offset) {
|
|
201
|
+
const bytes = offset === 0 ? rawBytes : rawBytes.slice(offset);
|
|
202
|
+
if (bytes.length === 0)
|
|
113
203
|
return ["", 0];
|
|
114
|
-
const bytes = buffer.slice(offset);
|
|
115
204
|
let trailIndex = bytes.findIndex((n) => n !== 0);
|
|
116
205
|
trailIndex = trailIndex === -1 ? bytes.length : trailIndex;
|
|
117
|
-
const leadingZeroes =
|
|
206
|
+
const leadingZeroes = alphabet4[0].repeat(trailIndex);
|
|
118
207
|
if (trailIndex === bytes.length)
|
|
119
|
-
return [leadingZeroes,
|
|
120
|
-
|
|
121
|
-
const tailChars =
|
|
122
|
-
|
|
123
|
-
tailChars.unshift(alphabet[Number(base10Number % baseBigInt)]);
|
|
124
|
-
base10Number /= baseBigInt;
|
|
125
|
-
}
|
|
126
|
-
return [leadingZeroes + tailChars.join(""), buffer.length];
|
|
208
|
+
return [leadingZeroes, rawBytes.length];
|
|
209
|
+
const base10Number = bytes.slice(trailIndex).reduce((sum, byte) => sum * 256n + BigInt(byte), 0n);
|
|
210
|
+
const tailChars = getBaseXFromBigInt(base10Number, alphabet4);
|
|
211
|
+
return [leadingZeroes + tailChars, rawBytes.length];
|
|
127
212
|
}
|
|
128
|
-
};
|
|
213
|
+
});
|
|
129
214
|
};
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
215
|
+
function partitionLeadingZeroes(value, zeroCharacter) {
|
|
216
|
+
const leadingZeroIndex = [...value].findIndex((c) => c !== zeroCharacter);
|
|
217
|
+
return leadingZeroIndex === -1 ? [value, ""] : [value.slice(0, leadingZeroIndex), value.slice(leadingZeroIndex)];
|
|
218
|
+
}
|
|
219
|
+
function getBigIntFromBaseX(value, alphabet4) {
|
|
220
|
+
const base = BigInt(alphabet4.length);
|
|
221
|
+
return [...value].reduce((sum, char) => sum * base + BigInt(alphabet4.indexOf(char)), 0n);
|
|
222
|
+
}
|
|
223
|
+
function getBaseXFromBigInt(value, alphabet4) {
|
|
224
|
+
const base = BigInt(alphabet4.length);
|
|
225
|
+
const tailChars = [];
|
|
226
|
+
while (value > 0n) {
|
|
227
|
+
tailChars.unshift(alphabet4[Number(value % base)]);
|
|
228
|
+
value /= base;
|
|
229
|
+
}
|
|
230
|
+
return tailChars.join("");
|
|
231
|
+
}
|
|
232
|
+
var alphabet2 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
233
|
+
var getBase58Encoder = () => getBaseXEncoder(alphabet2);
|
|
234
|
+
var getBase58Decoder = () => getBaseXDecoder(alphabet2);
|
|
135
235
|
var removeNullCharacters = (value) => (
|
|
136
236
|
// eslint-disable-next-line no-control-regex
|
|
137
237
|
value.replace(/\u0000/g, "")
|
|
138
238
|
);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
var
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/common.mjs
|
|
155
|
-
var Endian;
|
|
156
|
-
(function(Endian2) {
|
|
157
|
-
Endian2["Little"] = "le";
|
|
158
|
-
Endian2["Big"] = "be";
|
|
159
|
-
})(Endian || (Endian = {}));
|
|
160
|
-
|
|
161
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/errors.mjs
|
|
162
|
-
var NumberOutOfRangeError = class extends RangeError {
|
|
163
|
-
constructor(serializer, min, max, actual) {
|
|
164
|
-
super(`Serializer [${serializer}] expected number to be between ${min} and ${max}, got ${actual}.`);
|
|
165
|
-
__publicField(this, "name", "NumberOutOfRangeError");
|
|
166
|
-
}
|
|
239
|
+
var e = globalThis.TextDecoder;
|
|
240
|
+
var o = globalThis.TextEncoder;
|
|
241
|
+
var getUtf8Encoder = () => {
|
|
242
|
+
let textEncoder;
|
|
243
|
+
return createEncoder({
|
|
244
|
+
getSizeFromValue: (value) => (textEncoder || (textEncoder = new o())).encode(value).length,
|
|
245
|
+
write: (value, bytes, offset) => {
|
|
246
|
+
const bytesToAdd = (textEncoder || (textEncoder = new o())).encode(value);
|
|
247
|
+
bytes.set(bytesToAdd, offset);
|
|
248
|
+
return offset + bytesToAdd.length;
|
|
249
|
+
}
|
|
250
|
+
});
|
|
167
251
|
};
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
littleEndian = !("endian" in input.options) || input.options.endian === Endian.Little;
|
|
175
|
-
defaultDescription += littleEndian ? "(le)" : "(be)";
|
|
176
|
-
}
|
|
177
|
-
return {
|
|
178
|
-
description: input.options.description ?? defaultDescription,
|
|
179
|
-
fixedSize: input.size,
|
|
180
|
-
maxSize: input.size,
|
|
181
|
-
serialize(value) {
|
|
182
|
-
if (input.range) {
|
|
183
|
-
assertRange(input.name, input.range[0], input.range[1], value);
|
|
184
|
-
}
|
|
185
|
-
const buffer = new ArrayBuffer(input.size);
|
|
186
|
-
input.set(new DataView(buffer), value, littleEndian);
|
|
187
|
-
return new Uint8Array(buffer);
|
|
188
|
-
},
|
|
189
|
-
deserialize(bytes, offset = 0) {
|
|
190
|
-
const slice = bytes.slice(offset, offset + input.size);
|
|
191
|
-
assertEnoughBytes("i8", slice, input.size);
|
|
192
|
-
const view = toDataView(slice);
|
|
193
|
-
return [input.get(view, littleEndian), offset + input.size];
|
|
252
|
+
var getUtf8Decoder = () => {
|
|
253
|
+
let textDecoder;
|
|
254
|
+
return createDecoder({
|
|
255
|
+
read(bytes, offset) {
|
|
256
|
+
const value = (textDecoder || (textDecoder = new e())).decode(bytes.slice(offset));
|
|
257
|
+
return [removeNullCharacters(value), bytes.length];
|
|
194
258
|
}
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
var toArrayBuffer = (array) => array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset);
|
|
198
|
-
var toDataView = (array) => new DataView(toArrayBuffer(array));
|
|
199
|
-
var assertRange = (serializer, min, max, value) => {
|
|
200
|
-
if (value < min || value > max) {
|
|
201
|
-
throw new NumberOutOfRangeError(serializer, min, max, value);
|
|
202
|
-
}
|
|
259
|
+
});
|
|
203
260
|
};
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
261
|
+
function getStringEncoder(config = {}) {
|
|
262
|
+
var _a, _b;
|
|
263
|
+
const size = (_a = config.size) != null ? _a : getU32Encoder();
|
|
264
|
+
const encoding = (_b = config.encoding) != null ? _b : getUtf8Encoder();
|
|
265
|
+
if (size === "variable") {
|
|
266
|
+
return encoding;
|
|
207
267
|
}
|
|
208
|
-
if (
|
|
209
|
-
|
|
268
|
+
if (typeof size === "number") {
|
|
269
|
+
return fixEncoder(encoding, size);
|
|
210
270
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/utils.mjs
|
|
224
|
-
function getSizeDescription(size) {
|
|
225
|
-
return typeof size === "object" ? size.description : `${size}`;
|
|
271
|
+
return createEncoder({
|
|
272
|
+
getSizeFromValue: (value) => {
|
|
273
|
+
const contentSize = getEncodedSize(value, encoding);
|
|
274
|
+
return getEncodedSize(contentSize, size) + contentSize;
|
|
275
|
+
},
|
|
276
|
+
write: (value, bytes, offset) => {
|
|
277
|
+
const contentSize = getEncodedSize(value, encoding);
|
|
278
|
+
offset = size.write(contentSize, bytes, offset);
|
|
279
|
+
return encoding.write(value, bytes, offset);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
226
282
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
const
|
|
231
|
-
const encoding = options.encoding ?? utf8;
|
|
232
|
-
const description = options.description ?? `string(${encoding.description}; ${getSizeDescription(size)})`;
|
|
283
|
+
function getStringDecoder(config = {}) {
|
|
284
|
+
var _a, _b;
|
|
285
|
+
const size = (_a = config.size) != null ? _a : getU32Decoder();
|
|
286
|
+
const encoding = (_b = config.encoding) != null ? _b : getUtf8Decoder();
|
|
233
287
|
if (size === "variable") {
|
|
234
|
-
return
|
|
235
|
-
...encoding,
|
|
236
|
-
description
|
|
237
|
-
};
|
|
288
|
+
return encoding;
|
|
238
289
|
}
|
|
239
290
|
if (typeof size === "number") {
|
|
240
|
-
return
|
|
291
|
+
return fixDecoder(encoding, size);
|
|
241
292
|
}
|
|
242
|
-
return {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
serialize: (value) => {
|
|
247
|
-
const contentBytes = encoding.serialize(value);
|
|
248
|
-
const lengthBytes = size.serialize(contentBytes.length);
|
|
249
|
-
return mergeBytes([lengthBytes, contentBytes]);
|
|
250
|
-
},
|
|
251
|
-
deserialize: (buffer, offset = 0) => {
|
|
252
|
-
if (buffer.slice(offset).length === 0) {
|
|
253
|
-
throw new DeserializingEmptyBufferError("string");
|
|
254
|
-
}
|
|
255
|
-
const [lengthBigInt, lengthOffset] = size.deserialize(buffer, offset);
|
|
293
|
+
return createDecoder({
|
|
294
|
+
read: (bytes, offset = 0) => {
|
|
295
|
+
assertByteArrayIsNotEmptyForCodec("string", bytes, offset);
|
|
296
|
+
const [lengthBigInt, lengthOffset] = size.read(bytes, offset);
|
|
256
297
|
const length = Number(lengthBigInt);
|
|
257
298
|
offset = lengthOffset;
|
|
258
|
-
const
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
}
|
|
262
|
-
const [value, contentOffset] = encoding.deserialize(contentBuffer);
|
|
299
|
+
const contentBytes = bytes.slice(offset, offset + length);
|
|
300
|
+
assertByteArrayHasEnoughBytesForCodec("string", length, contentBytes);
|
|
301
|
+
const [value, contentOffset] = encoding.read(contentBytes, 0);
|
|
263
302
|
offset += contentOffset;
|
|
264
303
|
return [value, offset];
|
|
265
304
|
}
|
|
266
|
-
};
|
|
305
|
+
});
|
|
267
306
|
}
|
|
268
307
|
|
|
269
|
-
// src/
|
|
270
|
-
|
|
308
|
+
// src/address.ts
|
|
309
|
+
var memoizedBase58Encoder;
|
|
310
|
+
var memoizedBase58Decoder;
|
|
311
|
+
function getMemoizedBase58Encoder() {
|
|
312
|
+
if (!memoizedBase58Encoder)
|
|
313
|
+
memoizedBase58Encoder = getBase58Encoder();
|
|
314
|
+
return memoizedBase58Encoder;
|
|
315
|
+
}
|
|
316
|
+
function getMemoizedBase58Decoder() {
|
|
317
|
+
if (!memoizedBase58Decoder)
|
|
318
|
+
memoizedBase58Decoder = getBase58Decoder();
|
|
319
|
+
return memoizedBase58Decoder;
|
|
320
|
+
}
|
|
321
|
+
function isAddress(putativeAddress) {
|
|
271
322
|
if (
|
|
272
323
|
// Lowest address (32 bytes of zeroes)
|
|
273
|
-
|
|
274
|
-
|
|
324
|
+
putativeAddress.length < 32 || // Highest address (32 bytes of 255)
|
|
325
|
+
putativeAddress.length > 44
|
|
275
326
|
) {
|
|
276
327
|
return false;
|
|
277
328
|
}
|
|
278
|
-
const
|
|
329
|
+
const base58Encoder = getMemoizedBase58Encoder();
|
|
330
|
+
const bytes = base58Encoder.encode(putativeAddress);
|
|
279
331
|
const numBytes = bytes.byteLength;
|
|
280
332
|
if (numBytes !== 32) {
|
|
281
333
|
return false;
|
|
282
334
|
}
|
|
283
335
|
return true;
|
|
284
336
|
}
|
|
285
|
-
function
|
|
337
|
+
function assertIsAddress(putativeAddress) {
|
|
286
338
|
try {
|
|
287
339
|
if (
|
|
288
340
|
// Lowest address (32 bytes of zeroes)
|
|
289
|
-
|
|
290
|
-
|
|
341
|
+
putativeAddress.length < 32 || // Highest address (32 bytes of 255)
|
|
342
|
+
putativeAddress.length > 44
|
|
291
343
|
) {
|
|
292
344
|
throw new Error("Expected input string to decode to a byte array of length 32.");
|
|
293
345
|
}
|
|
294
|
-
const
|
|
346
|
+
const base58Encoder = getMemoizedBase58Encoder();
|
|
347
|
+
const bytes = base58Encoder.encode(putativeAddress);
|
|
295
348
|
const numBytes = bytes.byteLength;
|
|
296
349
|
if (numBytes !== 32) {
|
|
297
350
|
throw new Error(`Expected input string to decode to a byte array of length 32. Actual length: ${numBytes}`);
|
|
298
351
|
}
|
|
299
|
-
} catch (
|
|
300
|
-
throw new Error(`\`${
|
|
301
|
-
cause:
|
|
352
|
+
} catch (e2) {
|
|
353
|
+
throw new Error(`\`${putativeAddress}\` is not a base-58 encoded address`, {
|
|
354
|
+
cause: e2
|
|
302
355
|
});
|
|
303
356
|
}
|
|
304
357
|
}
|
|
305
|
-
function address(
|
|
306
|
-
|
|
307
|
-
return
|
|
358
|
+
function address(putativeAddress) {
|
|
359
|
+
assertIsAddress(putativeAddress);
|
|
360
|
+
return putativeAddress;
|
|
308
361
|
}
|
|
309
|
-
function
|
|
310
|
-
return
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
});
|
|
362
|
+
function getAddressEncoder() {
|
|
363
|
+
return mapEncoder(
|
|
364
|
+
getStringEncoder({ encoding: getMemoizedBase58Encoder(), size: 32 }),
|
|
365
|
+
(putativeAddress) => address(putativeAddress)
|
|
366
|
+
);
|
|
315
367
|
}
|
|
316
|
-
function
|
|
368
|
+
function getAddressDecoder() {
|
|
369
|
+
return getStringDecoder({ encoding: getMemoizedBase58Decoder(), size: 32 });
|
|
370
|
+
}
|
|
371
|
+
function getAddressCodec() {
|
|
372
|
+
return combineCodec(getAddressEncoder(), getAddressDecoder());
|
|
373
|
+
}
|
|
374
|
+
function getAddressComparator() {
|
|
317
375
|
return new Intl.Collator("en", {
|
|
318
376
|
caseFirst: "lower",
|
|
319
377
|
ignorePunctuation: false,
|
|
@@ -333,14 +391,16 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
333
391
|
}
|
|
334
392
|
}
|
|
335
393
|
async function assertDigestCapabilityIsAvailable() {
|
|
394
|
+
var _a;
|
|
336
395
|
assertIsSecureContext();
|
|
337
|
-
if (typeof globalThis.crypto === "undefined" || typeof globalThis.crypto.subtle
|
|
396
|
+
if (typeof globalThis.crypto === "undefined" || typeof ((_a = globalThis.crypto.subtle) == null ? void 0 : _a.digest) !== "function") {
|
|
338
397
|
throw new Error("No digest implementation could be found");
|
|
339
398
|
}
|
|
340
399
|
}
|
|
341
400
|
async function assertKeyExporterIsAvailable() {
|
|
401
|
+
var _a;
|
|
342
402
|
assertIsSecureContext();
|
|
343
|
-
if (typeof globalThis.crypto === "undefined" || typeof globalThis.crypto.subtle
|
|
403
|
+
if (typeof globalThis.crypto === "undefined" || typeof ((_a = globalThis.crypto.subtle) == null ? void 0 : _a.exportKey) !== "function") {
|
|
344
404
|
throw new Error("No key export implementation could be found");
|
|
345
405
|
}
|
|
346
406
|
}
|
|
@@ -435,7 +495,22 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
435
495
|
return pointIsOnCurve(y, bytes[31]);
|
|
436
496
|
}
|
|
437
497
|
|
|
438
|
-
// src/
|
|
498
|
+
// src/program-derived-address.ts
|
|
499
|
+
function isProgramDerivedAddress(value) {
|
|
500
|
+
return Array.isArray(value) && value.length === 2 && typeof value[0] === "string" && typeof value[1] === "number" && value[1] >= 0 && value[1] <= 255 && isAddress(value[0]);
|
|
501
|
+
}
|
|
502
|
+
function assertIsProgramDerivedAddress(value) {
|
|
503
|
+
const validFormat = Array.isArray(value) && value.length === 2 && typeof value[0] === "string" && typeof value[1] === "number";
|
|
504
|
+
if (!validFormat) {
|
|
505
|
+
throw new Error(
|
|
506
|
+
`Expected given program derived address to have the following format: [Address, ProgramDerivedAddressBump].`
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
if (value[1] < 0 || value[1] > 255) {
|
|
510
|
+
throw new Error(`Expected program derived address bump to be in the range [0, 255], got: ${value[1]}.`);
|
|
511
|
+
}
|
|
512
|
+
assertIsAddress(value[0]);
|
|
513
|
+
}
|
|
439
514
|
var MAX_SEED_LENGTH = 32;
|
|
440
515
|
var MAX_SEEDS = 16;
|
|
441
516
|
var PDA_MARKER_BYTES = [
|
|
@@ -478,8 +553,8 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
478
553
|
acc.push(...bytes);
|
|
479
554
|
return acc;
|
|
480
555
|
}, []);
|
|
481
|
-
const base58EncodedAddressCodec =
|
|
482
|
-
const programAddressBytes = base58EncodedAddressCodec.
|
|
556
|
+
const base58EncodedAddressCodec = getAddressCodec();
|
|
557
|
+
const programAddressBytes = base58EncodedAddressCodec.encode(programAddress);
|
|
483
558
|
const addressBytesBuffer = await crypto.subtle.digest(
|
|
484
559
|
"SHA-256",
|
|
485
560
|
new Uint8Array([...seedBytes, ...programAddressBytes, ...PDA_MARKER_BYTES])
|
|
@@ -488,49 +563,46 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
488
563
|
if (await compressedPointBytesAreOnCurve(addressBytes)) {
|
|
489
564
|
throw new PointOnCurveError("Invalid seeds; point must fall off the Ed25519 curve");
|
|
490
565
|
}
|
|
491
|
-
return base58EncodedAddressCodec.
|
|
566
|
+
return base58EncodedAddressCodec.decode(addressBytes);
|
|
492
567
|
}
|
|
493
|
-
async function getProgramDerivedAddress({
|
|
568
|
+
async function getProgramDerivedAddress({
|
|
569
|
+
programAddress,
|
|
570
|
+
seeds
|
|
571
|
+
}) {
|
|
494
572
|
let bumpSeed = 255;
|
|
495
573
|
while (bumpSeed > 0) {
|
|
496
574
|
try {
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
} catch (e) {
|
|
505
|
-
if (e instanceof PointOnCurveError) {
|
|
575
|
+
const address2 = await createProgramDerivedAddress({
|
|
576
|
+
programAddress,
|
|
577
|
+
seeds: [...seeds, new Uint8Array([bumpSeed])]
|
|
578
|
+
});
|
|
579
|
+
return [address2, bumpSeed];
|
|
580
|
+
} catch (e2) {
|
|
581
|
+
if (e2 instanceof PointOnCurveError) {
|
|
506
582
|
bumpSeed--;
|
|
507
583
|
} else {
|
|
508
|
-
throw
|
|
584
|
+
throw e2;
|
|
509
585
|
}
|
|
510
586
|
}
|
|
511
587
|
}
|
|
512
588
|
throw new Error("Unable to find a viable program address bump seed");
|
|
513
589
|
}
|
|
514
|
-
async function createAddressWithSeed({
|
|
515
|
-
|
|
516
|
-
programAddress,
|
|
517
|
-
seed
|
|
518
|
-
}) {
|
|
519
|
-
const { serialize, deserialize } = getBase58EncodedAddressCodec();
|
|
590
|
+
async function createAddressWithSeed({ baseAddress, programAddress, seed }) {
|
|
591
|
+
const { encode, decode } = getAddressCodec();
|
|
520
592
|
const seedBytes = typeof seed === "string" ? new TextEncoder().encode(seed) : seed;
|
|
521
593
|
if (seedBytes.byteLength > MAX_SEED_LENGTH) {
|
|
522
594
|
throw new Error(`The seed exceeds the maximum length of 32 bytes`);
|
|
523
595
|
}
|
|
524
|
-
const programAddressBytes =
|
|
596
|
+
const programAddressBytes = encode(programAddress);
|
|
525
597
|
if (programAddressBytes.length >= PDA_MARKER_BYTES.length && programAddressBytes.slice(-PDA_MARKER_BYTES.length).every((byte, index) => byte === PDA_MARKER_BYTES[index])) {
|
|
526
598
|
throw new Error(`programAddress cannot end with the PDA marker`);
|
|
527
599
|
}
|
|
528
600
|
const addressBytesBuffer = await crypto.subtle.digest(
|
|
529
601
|
"SHA-256",
|
|
530
|
-
new Uint8Array([...
|
|
602
|
+
new Uint8Array([...encode(baseAddress), ...seedBytes, ...programAddressBytes])
|
|
531
603
|
);
|
|
532
604
|
const addressBytes = new Uint8Array(addressBytesBuffer);
|
|
533
|
-
return
|
|
605
|
+
return decode(addressBytes);
|
|
534
606
|
}
|
|
535
607
|
|
|
536
608
|
// src/public-key.ts
|
|
@@ -540,18 +612,21 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
540
612
|
throw new Error("The `CryptoKey` must be an `Ed25519` public key");
|
|
541
613
|
}
|
|
542
614
|
const publicKeyBytes = await crypto.subtle.exportKey("raw", publicKey);
|
|
543
|
-
|
|
544
|
-
return base58EncodedAddress;
|
|
615
|
+
return getAddressDecoder().decode(new Uint8Array(publicKeyBytes));
|
|
545
616
|
}
|
|
546
617
|
|
|
547
618
|
exports.address = address;
|
|
548
|
-
exports.
|
|
619
|
+
exports.assertIsAddress = assertIsAddress;
|
|
620
|
+
exports.assertIsProgramDerivedAddress = assertIsProgramDerivedAddress;
|
|
549
621
|
exports.createAddressWithSeed = createAddressWithSeed;
|
|
622
|
+
exports.getAddressCodec = getAddressCodec;
|
|
623
|
+
exports.getAddressComparator = getAddressComparator;
|
|
624
|
+
exports.getAddressDecoder = getAddressDecoder;
|
|
625
|
+
exports.getAddressEncoder = getAddressEncoder;
|
|
550
626
|
exports.getAddressFromPublicKey = getAddressFromPublicKey;
|
|
551
|
-
exports.getBase58EncodedAddressCodec = getBase58EncodedAddressCodec;
|
|
552
|
-
exports.getBase58EncodedAddressComparator = getBase58EncodedAddressComparator;
|
|
553
627
|
exports.getProgramDerivedAddress = getProgramDerivedAddress;
|
|
554
|
-
exports.
|
|
628
|
+
exports.isAddress = isAddress;
|
|
629
|
+
exports.isProgramDerivedAddress = isProgramDerivedAddress;
|
|
555
630
|
|
|
556
631
|
return exports;
|
|
557
632
|
|