@solana/transactions 2.0.0-experimental.320ccbb → 2.0.0-experimental.32b59a5
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/dist/index.browser.cjs +102 -47
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +99 -49
- package/dist/index.browser.js.map +1 -1
- package/dist/index.development.js +136 -79
- package/dist/index.development.js.map +1 -1
- package/dist/index.native.js +99 -49
- package/dist/index.native.js.map +1 -1
- package/dist/index.node.cjs +102 -47
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +99 -49
- package/dist/index.node.js.map +1 -1
- package/dist/index.production.min.js +16 -11
- package/dist/types/accounts.d.ts.map +1 -0
- package/dist/types/blockhash.d.ts.map +1 -0
- package/dist/types/compile-address-table-lookups.d.ts.map +1 -0
- package/dist/types/compile-header.d.ts.map +1 -0
- package/dist/types/compile-instructions.d.ts.map +1 -0
- package/dist/types/compile-lifetime-token.d.ts.map +1 -0
- package/dist/types/compile-static-accounts.d.ts.map +1 -0
- package/dist/types/compile-transaction.d.ts.map +1 -0
- package/dist/types/create-transaction.d.ts.map +1 -0
- package/dist/types/durable-nonce.d.ts +2 -1
- package/dist/types/durable-nonce.d.ts.map +1 -0
- package/dist/types/fee-payer.d.ts +2 -1
- package/dist/types/fee-payer.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/instructions.d.ts.map +1 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/serializers/address-table-lookup.d.ts.map +1 -0
- package/dist/types/serializers/header.d.ts.map +1 -0
- package/dist/types/serializers/index.d.ts +2 -0
- package/dist/types/serializers/index.d.ts.map +1 -0
- package/dist/types/serializers/instruction.d.ts.map +1 -0
- package/dist/types/serializers/message.d.ts.map +1 -0
- package/dist/types/serializers/transaction-version.d.ts.map +1 -0
- package/dist/types/serializers/transaction.d.ts.map +1 -0
- package/dist/types/serializers/unimplemented.d.ts.map +1 -0
- package/dist/types/signatures.d.ts +9 -1
- package/dist/types/signatures.d.ts.map +1 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/unsigned-transaction.d.ts.map +1 -0
- package/dist/types/wire-transaction.d.ts.map +1 -0
- package/package.json +13 -11
|
@@ -9,7 +9,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
9
9
|
return value;
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.
|
|
12
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.9/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/bytes.mjs
|
|
13
13
|
var mergeBytes = (bytesArr) => {
|
|
14
14
|
const totalLength = bytesArr.reduce((total, arr) => total + arr.length, 0);
|
|
15
15
|
const result = new Uint8Array(totalLength);
|
|
@@ -29,7 +29,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
29
29
|
};
|
|
30
30
|
var fixBytes = (bytes2, length) => padBytes(bytes2.slice(0, length), length);
|
|
31
31
|
|
|
32
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.
|
|
32
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.9/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/errors.mjs
|
|
33
33
|
var DeserializingEmptyBufferError = class extends Error {
|
|
34
34
|
constructor(serializer) {
|
|
35
35
|
super(`Serializer [${serializer}] cannot deserialize empty buffers.`);
|
|
@@ -50,7 +50,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.
|
|
53
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.9/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/fixSerializer.mjs
|
|
54
54
|
function fixSerializer(serializer, fixedBytes, description) {
|
|
55
55
|
return {
|
|
56
56
|
description: description ?? `fixed(${fixedBytes}, ${serializer.description})`,
|
|
@@ -71,7 +71,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.
|
|
74
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.9/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/mapSerializer.mjs
|
|
75
75
|
function mapSerializer(serializer, unmap, map) {
|
|
76
76
|
return {
|
|
77
77
|
description: serializer.description,
|
|
@@ -85,7 +85,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.
|
|
88
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.9/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/errors.mjs
|
|
89
89
|
var InvalidBaseStringError = class extends Error {
|
|
90
90
|
constructor(value, base, cause) {
|
|
91
91
|
const message = `Expected a string of base ${base}, got [${value}].`;
|
|
@@ -95,7 +95,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
95
95
|
}
|
|
96
96
|
};
|
|
97
97
|
|
|
98
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.
|
|
98
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.9/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/baseX.mjs
|
|
99
99
|
var baseX = (alphabet) => {
|
|
100
100
|
const base = alphabet.length;
|
|
101
101
|
const baseBigInt = BigInt(base);
|
|
@@ -149,16 +149,16 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
149
149
|
};
|
|
150
150
|
};
|
|
151
151
|
|
|
152
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.
|
|
152
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.9/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/base58.mjs
|
|
153
153
|
var base58 = baseX("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz");
|
|
154
154
|
|
|
155
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.
|
|
155
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.9/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/nullCharacters.mjs
|
|
156
156
|
var removeNullCharacters = (value) => (
|
|
157
157
|
// eslint-disable-next-line no-control-regex
|
|
158
158
|
value.replace(/\u0000/g, "")
|
|
159
159
|
);
|
|
160
160
|
|
|
161
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.
|
|
161
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.9/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/utf8.mjs
|
|
162
162
|
var utf8 = {
|
|
163
163
|
description: "utf8",
|
|
164
164
|
fixedSize: null,
|
|
@@ -172,14 +172,14 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
172
172
|
}
|
|
173
173
|
};
|
|
174
174
|
|
|
175
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.
|
|
175
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/common.mjs
|
|
176
176
|
var Endian;
|
|
177
177
|
(function(Endian2) {
|
|
178
178
|
Endian2["Little"] = "le";
|
|
179
179
|
Endian2["Big"] = "be";
|
|
180
180
|
})(Endian || (Endian = {}));
|
|
181
181
|
|
|
182
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.
|
|
182
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/errors.mjs
|
|
183
183
|
var NumberOutOfRangeError = class extends RangeError {
|
|
184
184
|
constructor(serializer, min, max, actual) {
|
|
185
185
|
super(`Serializer [${serializer}] expected number to be between ${min} and ${max}, got ${actual}.`);
|
|
@@ -187,7 +187,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
187
187
|
}
|
|
188
188
|
};
|
|
189
189
|
|
|
190
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.
|
|
190
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/utils.mjs
|
|
191
191
|
function numberFactory(input) {
|
|
192
192
|
let littleEndian;
|
|
193
193
|
let defaultDescription = input.name;
|
|
@@ -231,7 +231,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
231
231
|
}
|
|
232
232
|
};
|
|
233
233
|
|
|
234
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.
|
|
234
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/u8.mjs
|
|
235
235
|
var u8 = (options = {}) => numberFactory({
|
|
236
236
|
name: "u8",
|
|
237
237
|
size: 1,
|
|
@@ -241,7 +241,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
241
241
|
options
|
|
242
242
|
});
|
|
243
243
|
|
|
244
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.
|
|
244
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/u32.mjs
|
|
245
245
|
var u32 = (options = {}) => numberFactory({
|
|
246
246
|
name: "u32",
|
|
247
247
|
size: 4,
|
|
@@ -251,7 +251,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
251
251
|
options
|
|
252
252
|
});
|
|
253
253
|
|
|
254
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.
|
|
254
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/shortU16.mjs
|
|
255
255
|
var shortU16 = (options = {}) => ({
|
|
256
256
|
description: options.description ?? "shortU16",
|
|
257
257
|
fixedSize: null,
|
|
@@ -288,7 +288,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
288
288
|
}
|
|
289
289
|
});
|
|
290
290
|
|
|
291
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.
|
|
291
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/errors.mjs
|
|
292
292
|
var InvalidNumberOfItemsError = class extends Error {
|
|
293
293
|
constructor(serializer, expected, actual) {
|
|
294
294
|
super(`Expected [${serializer}] to have ${expected} items, got ${actual}.`);
|
|
@@ -308,12 +308,12 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
308
308
|
}
|
|
309
309
|
};
|
|
310
310
|
|
|
311
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.
|
|
311
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/sumSerializerSizes.mjs
|
|
312
312
|
function sumSerializerSizes(sizes) {
|
|
313
313
|
return sizes.reduce((all, size) => all === null || size === null ? null : all + size, 0);
|
|
314
314
|
}
|
|
315
315
|
|
|
316
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.
|
|
316
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/utils.mjs
|
|
317
317
|
function getResolvedSize(size, childrenSizes, bytes2, offset) {
|
|
318
318
|
if (typeof size === "number") {
|
|
319
319
|
return [size, offset];
|
|
@@ -349,7 +349,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
349
349
|
return typeof size === "object" ? size.serialize(realSize) : new Uint8Array();
|
|
350
350
|
}
|
|
351
351
|
|
|
352
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.
|
|
352
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/array.mjs
|
|
353
353
|
function array(item, options = {}) {
|
|
354
354
|
const size = options.size ?? u32();
|
|
355
355
|
if (size === "remainder" && item.fixedSize === null) {
|
|
@@ -382,7 +382,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
382
382
|
};
|
|
383
383
|
}
|
|
384
384
|
|
|
385
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.
|
|
385
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/bytes.mjs
|
|
386
386
|
function bytes(options = {}) {
|
|
387
387
|
const size = options.size ?? "variable";
|
|
388
388
|
const description = options.description ?? `bytes(${getSizeDescription(size)})`;
|
|
@@ -429,7 +429,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
429
429
|
};
|
|
430
430
|
}
|
|
431
431
|
|
|
432
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.
|
|
432
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/string.mjs
|
|
433
433
|
function string(options = {}) {
|
|
434
434
|
const size = options.size ?? u32();
|
|
435
435
|
const encoding = options.encoding ?? utf8;
|
|
@@ -470,7 +470,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
470
470
|
};
|
|
471
471
|
}
|
|
472
472
|
|
|
473
|
-
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.
|
|
473
|
+
// ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/struct.mjs
|
|
474
474
|
function struct(fields, options = {}) {
|
|
475
475
|
const fieldDescriptions = fields.map(([name, serializer]) => `${String(name)}: ${serializer.description}`).join(", ");
|
|
476
476
|
return {
|
|
@@ -685,14 +685,14 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
685
685
|
throw new Error("No signing implementation could be found");
|
|
686
686
|
}
|
|
687
687
|
}
|
|
688
|
-
function
|
|
688
|
+
function getAddressCodec(config) {
|
|
689
689
|
return string({
|
|
690
690
|
description: config?.description ?? ("A 32-byte account address" ),
|
|
691
691
|
encoding: base58,
|
|
692
692
|
size: 32
|
|
693
693
|
});
|
|
694
694
|
}
|
|
695
|
-
function
|
|
695
|
+
function getAddressComparator() {
|
|
696
696
|
return new Intl.Collator("en", {
|
|
697
697
|
caseFirst: "lower",
|
|
698
698
|
ignorePunctuation: false,
|
|
@@ -708,17 +708,10 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
708
708
|
throw new Error("The `CryptoKey` must be an `Ed25519` public key");
|
|
709
709
|
}
|
|
710
710
|
const publicKeyBytes = await crypto.subtle.exportKey("raw", publicKey);
|
|
711
|
-
const [base58EncodedAddress] =
|
|
711
|
+
const [base58EncodedAddress] = getAddressCodec().deserialize(new Uint8Array(publicKeyBytes));
|
|
712
712
|
return base58EncodedAddress;
|
|
713
713
|
}
|
|
714
714
|
|
|
715
|
-
// ../keys/dist/index.browser.js
|
|
716
|
-
async function signBytes(key, data) {
|
|
717
|
-
await assertSigningCapabilityIsAvailable();
|
|
718
|
-
const signedData = await crypto.subtle.sign("Ed25519", key, data);
|
|
719
|
-
return new Uint8Array(signedData);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
715
|
// src/accounts.ts
|
|
723
716
|
function upsert(addressMap, address, update) {
|
|
724
717
|
addressMap[address] = update(addressMap[address] ?? { role: AccountRole.READONLY });
|
|
@@ -772,7 +765,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
772
765
|
const shouldReplaceEntry = (
|
|
773
766
|
// Consider using the new LOOKUP_TABLE if its address is different...
|
|
774
767
|
entry.lookupTableAddress !== accountMeta.lookupTableAddress && // ...and sorts before the existing one.
|
|
775
|
-
(addressComparator || (addressComparator =
|
|
768
|
+
(addressComparator || (addressComparator = getAddressComparator()))(
|
|
776
769
|
accountMeta.lookupTableAddress,
|
|
777
770
|
entry.lookupTableAddress
|
|
778
771
|
) < 0
|
|
@@ -878,7 +871,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
878
871
|
if (leftIsWritable !== isWritableRole(rightEntry.role)) {
|
|
879
872
|
return leftIsWritable ? -1 : 1;
|
|
880
873
|
}
|
|
881
|
-
addressComparator || (addressComparator =
|
|
874
|
+
addressComparator || (addressComparator = getAddressComparator());
|
|
882
875
|
if (leftEntry[TYPE] === 1 /* LOOKUP_TABLE */ && rightEntry[TYPE] === 1 /* LOOKUP_TABLE */ && leftEntry.lookupTableAddress !== rightEntry.lookupTableAddress) {
|
|
883
876
|
return addressComparator(leftEntry.lookupTableAddress, rightEntry.lookupTableAddress);
|
|
884
877
|
} else {
|
|
@@ -909,7 +902,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
909
902
|
entry.readableIndices.push(account.addressIndex);
|
|
910
903
|
}
|
|
911
904
|
}
|
|
912
|
-
return Object.keys(index).sort(
|
|
905
|
+
return Object.keys(index).sort(getAddressComparator()).map((lookupTableAddress) => ({
|
|
913
906
|
lookupTableAddress,
|
|
914
907
|
...index[lookupTableAddress]
|
|
915
908
|
}));
|
|
@@ -989,13 +982,31 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
989
982
|
};
|
|
990
983
|
}
|
|
991
984
|
|
|
985
|
+
// src/compile-transaction.ts
|
|
986
|
+
function getCompiledTransaction(transaction) {
|
|
987
|
+
const compiledMessage = compileMessage(transaction);
|
|
988
|
+
let signatures;
|
|
989
|
+
if ("signatures" in transaction) {
|
|
990
|
+
signatures = [];
|
|
991
|
+
for (let ii = 0; ii < compiledMessage.header.numSignerAccounts; ii++) {
|
|
992
|
+
signatures[ii] = transaction.signatures[compiledMessage.staticAccounts[ii]] ?? new Uint8Array(Array(64).fill(0));
|
|
993
|
+
}
|
|
994
|
+
} else {
|
|
995
|
+
signatures = Array(compiledMessage.header.numSignerAccounts).fill(new Uint8Array(Array(64).fill(0)));
|
|
996
|
+
}
|
|
997
|
+
return {
|
|
998
|
+
compiledMessage,
|
|
999
|
+
signatures
|
|
1000
|
+
};
|
|
1001
|
+
}
|
|
1002
|
+
|
|
992
1003
|
// src/serializers/address-table-lookup.ts
|
|
993
1004
|
function getAddressTableLookupCodec() {
|
|
994
1005
|
return struct(
|
|
995
1006
|
[
|
|
996
1007
|
[
|
|
997
1008
|
"lookupTableAddress",
|
|
998
|
-
|
|
1009
|
+
getAddressCodec(
|
|
999
1010
|
{
|
|
1000
1011
|
description: "The address of the address lookup table account from which instruction addresses should be looked up"
|
|
1001
1012
|
}
|
|
@@ -1196,7 +1207,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
1196
1207
|
["header", getMessageHeaderCodec()],
|
|
1197
1208
|
[
|
|
1198
1209
|
"staticAccounts",
|
|
1199
|
-
array(
|
|
1210
|
+
array(getAddressCodec(), {
|
|
1200
1211
|
description: "A compact-array of static account addresses belonging to this transaction" ,
|
|
1201
1212
|
size: shortU16()
|
|
1202
1213
|
})
|
|
@@ -1232,48 +1243,6 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
1232
1243
|
};
|
|
1233
1244
|
}
|
|
1234
1245
|
|
|
1235
|
-
// src/signatures.ts
|
|
1236
|
-
async function getCompiledMessageSignature(message, secretKey) {
|
|
1237
|
-
const wireMessageBytes = getCompiledMessageEncoder().serialize(message);
|
|
1238
|
-
const signature = await signBytes(secretKey, wireMessageBytes);
|
|
1239
|
-
return signature;
|
|
1240
|
-
}
|
|
1241
|
-
async function signTransaction(keyPair, transaction) {
|
|
1242
|
-
const compiledMessage = compileMessage(transaction);
|
|
1243
|
-
const [signerPublicKey, signature] = await Promise.all([
|
|
1244
|
-
getAddressFromPublicKey(keyPair.publicKey),
|
|
1245
|
-
getCompiledMessageSignature(compiledMessage, keyPair.privateKey)
|
|
1246
|
-
]);
|
|
1247
|
-
const nextSignatures = {
|
|
1248
|
-
..."signatures" in transaction ? transaction.signatures : null,
|
|
1249
|
-
...{ [signerPublicKey]: signature }
|
|
1250
|
-
};
|
|
1251
|
-
const out = {
|
|
1252
|
-
...transaction,
|
|
1253
|
-
signatures: nextSignatures
|
|
1254
|
-
};
|
|
1255
|
-
Object.freeze(out);
|
|
1256
|
-
return out;
|
|
1257
|
-
}
|
|
1258
|
-
|
|
1259
|
-
// src/compile-transaction.ts
|
|
1260
|
-
function getCompiledTransaction(transaction) {
|
|
1261
|
-
const compiledMessage = compileMessage(transaction);
|
|
1262
|
-
let signatures;
|
|
1263
|
-
if ("signatures" in transaction) {
|
|
1264
|
-
signatures = [];
|
|
1265
|
-
for (let ii = 0; ii < compiledMessage.header.numSignerAccounts; ii++) {
|
|
1266
|
-
signatures[ii] = transaction.signatures[compiledMessage.staticAccounts[ii]] ?? new Uint8Array(Array(64).fill(0));
|
|
1267
|
-
}
|
|
1268
|
-
} else {
|
|
1269
|
-
signatures = Array(compiledMessage.header.numSignerAccounts).fill(new Uint8Array(Array(64).fill(0)));
|
|
1270
|
-
}
|
|
1271
|
-
return {
|
|
1272
|
-
compiledMessage,
|
|
1273
|
-
signatures
|
|
1274
|
-
};
|
|
1275
|
-
}
|
|
1276
|
-
|
|
1277
1246
|
// src/serializers/transaction.ts
|
|
1278
1247
|
var BASE_CONFIG3 = {
|
|
1279
1248
|
description: "The wire format of a Solana transaction" ,
|
|
@@ -1301,6 +1270,89 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
1301
1270
|
};
|
|
1302
1271
|
}
|
|
1303
1272
|
|
|
1273
|
+
// ../keys/dist/index.browser.js
|
|
1274
|
+
async function signBytes(key, data) {
|
|
1275
|
+
await assertSigningCapabilityIsAvailable();
|
|
1276
|
+
const signedData = await crypto.subtle.sign("Ed25519", key, data);
|
|
1277
|
+
return new Uint8Array(signedData);
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
// src/signatures.ts
|
|
1281
|
+
function assertIsTransactionSignature(putativeTransactionSignature) {
|
|
1282
|
+
try {
|
|
1283
|
+
if (
|
|
1284
|
+
// Lowest value (64 bytes of zeroes)
|
|
1285
|
+
putativeTransactionSignature.length < 64 || // Highest value (64 bytes of 255)
|
|
1286
|
+
putativeTransactionSignature.length > 88
|
|
1287
|
+
) {
|
|
1288
|
+
throw new Error("Expected input string to decode to a byte array of length 64.");
|
|
1289
|
+
}
|
|
1290
|
+
const bytes2 = base58.serialize(putativeTransactionSignature);
|
|
1291
|
+
const numBytes = bytes2.byteLength;
|
|
1292
|
+
if (numBytes !== 64) {
|
|
1293
|
+
throw new Error(`Expected input string to decode to a byte array of length 64. Actual length: ${numBytes}`);
|
|
1294
|
+
}
|
|
1295
|
+
} catch (e) {
|
|
1296
|
+
throw new Error(`\`${putativeTransactionSignature}\` is not a transaction signature`, {
|
|
1297
|
+
cause: e
|
|
1298
|
+
});
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
function isTransactionSignature(putativeTransactionSignature) {
|
|
1302
|
+
if (
|
|
1303
|
+
// Lowest value (64 bytes of zeroes)
|
|
1304
|
+
putativeTransactionSignature.length < 64 || // Highest value (64 bytes of 255)
|
|
1305
|
+
putativeTransactionSignature.length > 88
|
|
1306
|
+
) {
|
|
1307
|
+
return false;
|
|
1308
|
+
}
|
|
1309
|
+
const bytes2 = base58.serialize(putativeTransactionSignature);
|
|
1310
|
+
const numBytes = bytes2.byteLength;
|
|
1311
|
+
if (numBytes !== 64) {
|
|
1312
|
+
return false;
|
|
1313
|
+
}
|
|
1314
|
+
return true;
|
|
1315
|
+
}
|
|
1316
|
+
async function getCompiledMessageSignature(message, secretKey) {
|
|
1317
|
+
const wireMessageBytes = getCompiledMessageEncoder().serialize(message);
|
|
1318
|
+
const signature = await signBytes(secretKey, wireMessageBytes);
|
|
1319
|
+
return signature;
|
|
1320
|
+
}
|
|
1321
|
+
function getSignatureFromTransaction(transaction) {
|
|
1322
|
+
const signature = transaction.signatures[transaction.feePayer];
|
|
1323
|
+
if (!signature) {
|
|
1324
|
+
throw new Error(
|
|
1325
|
+
"Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer."
|
|
1326
|
+
);
|
|
1327
|
+
}
|
|
1328
|
+
return signature;
|
|
1329
|
+
}
|
|
1330
|
+
async function signTransaction(keyPairs, transaction) {
|
|
1331
|
+
const compiledMessage = compileMessage(transaction);
|
|
1332
|
+
const nextSignatures = "signatures" in transaction ? { ...transaction.signatures } : {};
|
|
1333
|
+
const publicKeySignaturePairs = await Promise.all(
|
|
1334
|
+
keyPairs.map(
|
|
1335
|
+
(keyPair) => Promise.all([
|
|
1336
|
+
getAddressFromPublicKey(keyPair.publicKey),
|
|
1337
|
+
getCompiledMessageSignature(compiledMessage, keyPair.privateKey)
|
|
1338
|
+
])
|
|
1339
|
+
)
|
|
1340
|
+
);
|
|
1341
|
+
for (const [signerPublicKey, signature] of publicKeySignaturePairs) {
|
|
1342
|
+
nextSignatures[signerPublicKey] = signature;
|
|
1343
|
+
}
|
|
1344
|
+
const out = {
|
|
1345
|
+
...transaction,
|
|
1346
|
+
signatures: nextSignatures
|
|
1347
|
+
};
|
|
1348
|
+
Object.freeze(out);
|
|
1349
|
+
return out;
|
|
1350
|
+
}
|
|
1351
|
+
function transactionSignature(putativeTransactionSignature) {
|
|
1352
|
+
assertIsTransactionSignature(putativeTransactionSignature);
|
|
1353
|
+
return putativeTransactionSignature;
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1304
1356
|
// src/wire-transaction.ts
|
|
1305
1357
|
function getBase64EncodedWireTransaction(transaction) {
|
|
1306
1358
|
const wireTransactionBytes = getTransactionEncoder().serialize(transaction);
|
|
@@ -1312,13 +1364,18 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
1312
1364
|
exports.appendTransactionInstruction = appendTransactionInstruction;
|
|
1313
1365
|
exports.assertIsBlockhash = assertIsBlockhash;
|
|
1314
1366
|
exports.assertIsDurableNonceTransaction = assertIsDurableNonceTransaction;
|
|
1367
|
+
exports.assertIsTransactionSignature = assertIsTransactionSignature;
|
|
1315
1368
|
exports.createTransaction = createTransaction;
|
|
1316
1369
|
exports.getBase64EncodedWireTransaction = getBase64EncodedWireTransaction;
|
|
1370
|
+
exports.getSignatureFromTransaction = getSignatureFromTransaction;
|
|
1371
|
+
exports.getTransactionEncoder = getTransactionEncoder;
|
|
1372
|
+
exports.isTransactionSignature = isTransactionSignature;
|
|
1317
1373
|
exports.prependTransactionInstruction = prependTransactionInstruction;
|
|
1318
1374
|
exports.setTransactionFeePayer = setTransactionFeePayer;
|
|
1319
1375
|
exports.setTransactionLifetimeUsingBlockhash = setTransactionLifetimeUsingBlockhash;
|
|
1320
1376
|
exports.setTransactionLifetimeUsingDurableNonce = setTransactionLifetimeUsingDurableNonce;
|
|
1321
1377
|
exports.signTransaction = signTransaction;
|
|
1378
|
+
exports.transactionSignature = transactionSignature;
|
|
1322
1379
|
|
|
1323
1380
|
return exports;
|
|
1324
1381
|
|