@bitgo-beta/sdk-coin-sol 7.6.4-beta.702 → 7.6.4-beta.704

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 (35) hide show
  1. package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts +21 -0
  2. package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts.map +1 -0
  3. package/dist/cjs/src/lib/serialization/codecs/v1/config.js +34 -0
  4. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts +14 -0
  5. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
  6. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.js +32 -0
  7. package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts +17 -0
  8. package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts.map +1 -0
  9. package/dist/cjs/src/lib/serialization/codecs/v1/message.js +68 -0
  10. package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts +30 -0
  11. package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
  12. package/dist/cjs/src/lib/serialization/compileTransactionMessage.js +205 -0
  13. package/dist/cjs/src/lib/serialization/wire-transaction.d.ts +14 -0
  14. package/dist/cjs/src/lib/serialization/wire-transaction.d.ts.map +1 -0
  15. package/dist/cjs/src/lib/serialization/wire-transaction.js +51 -0
  16. package/dist/cjs/test/unit/serialization/transactionV1.d.ts +2 -0
  17. package/dist/cjs/test/unit/serialization/transactionV1.d.ts.map +1 -0
  18. package/dist/cjs/test/unit/serialization/transactionV1.js +136 -0
  19. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  20. package/dist/esm/lib/serialization/codecs/v1/config.d.ts +21 -0
  21. package/dist/esm/lib/serialization/codecs/v1/config.d.ts.map +1 -0
  22. package/dist/esm/lib/serialization/codecs/v1/config.js +30 -0
  23. package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts +14 -0
  24. package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
  25. package/dist/esm/lib/serialization/codecs/v1/instruction.js +29 -0
  26. package/dist/esm/lib/serialization/codecs/v1/message.d.ts +17 -0
  27. package/dist/esm/lib/serialization/codecs/v1/message.d.ts.map +1 -0
  28. package/dist/esm/lib/serialization/codecs/v1/message.js +61 -0
  29. package/dist/esm/lib/serialization/compileTransactionMessage.d.ts +30 -0
  30. package/dist/esm/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
  31. package/dist/esm/lib/serialization/compileTransactionMessage.js +202 -0
  32. package/dist/esm/lib/serialization/wire-transaction.d.ts +14 -0
  33. package/dist/esm/lib/serialization/wire-transaction.d.ts.map +1 -0
  34. package/dist/esm/lib/serialization/wire-transaction.js +48 -0
  35. package/package.json +7 -7
@@ -0,0 +1,21 @@
1
+ /**
2
+ * v1 (SIMD-0296/0385) transaction config codec: bit mask + value encoding.
3
+ */
4
+ export declare const PRIORITY_FEE_BITS = 3;
5
+ export declare const COMPUTE_UNIT_LIMIT_BIT = 4;
6
+ export declare const LOADED_ACCOUNTS_DATA_SIZE_LIMIT_BIT = 8;
7
+ export declare const HEAP_SIZE_BIT = 16;
8
+ export type ConfigValue = {
9
+ kind: 'u32' | 'u64';
10
+ value: number | bigint;
11
+ };
12
+ export declare function encodeConfigMaskAndValues(config: {
13
+ computeUnitLimit: number | null;
14
+ heapSize: number | null;
15
+ loadedAccountsDataSizeLimit: number | null;
16
+ priorityFee: number | null;
17
+ }): {
18
+ mask: number;
19
+ values: ConfigValue[];
20
+ };
21
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/serialization/codecs/v1/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,eAAO,MAAM,iBAAiB,IAAO,CAAC;AACtC,eAAO,MAAM,sBAAsB,IAAQ,CAAC;AAC5C,eAAO,MAAM,mCAAmC,IAAS,CAAC;AAC1D,eAAO,MAAM,aAAa,KAAU,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAE1E,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAoB1C"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * v1 (SIMD-0296/0385) transaction config codec: bit mask + value encoding.
3
+ */
4
+ // Transaction config mask bits (mirror @solana/transaction-messages).
5
+ export const PRIORITY_FEE_BITS = 0b11;
6
+ export const COMPUTE_UNIT_LIMIT_BIT = 0b100;
7
+ export const LOADED_ACCOUNTS_DATA_SIZE_LIMIT_BIT = 0b1000;
8
+ export const HEAP_SIZE_BIT = 0b10000;
9
+ export function encodeConfigMaskAndValues(config) {
10
+ let mask = 0;
11
+ const values = [];
12
+ if (config.priorityFee !== null) {
13
+ mask |= PRIORITY_FEE_BITS;
14
+ values.push({ kind: 'u64', value: BigInt(config.priorityFee) });
15
+ }
16
+ if (config.computeUnitLimit !== null) {
17
+ mask |= COMPUTE_UNIT_LIMIT_BIT;
18
+ values.push({ kind: 'u32', value: config.computeUnitLimit });
19
+ }
20
+ if (config.loadedAccountsDataSizeLimit !== null) {
21
+ mask |= LOADED_ACCOUNTS_DATA_SIZE_LIMIT_BIT;
22
+ values.push({ kind: 'u32', value: config.loadedAccountsDataSizeLimit });
23
+ }
24
+ if (config.heapSize !== null) {
25
+ mask |= HEAP_SIZE_BIT;
26
+ values.push({ kind: 'u32', value: config.heapSize });
27
+ }
28
+ return { mask, values };
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJpYWxpemF0aW9uL2NvZGVjcy92MS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQztBQUM1QyxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxNQUFNLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUlyQyxNQUFNLFVBQVUseUJBQXlCLENBQUMsTUFLekM7SUFDQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixNQUFNLE1BQU0sR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxJQUFJLElBQUksaUJBQWlCLENBQUM7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksc0JBQXNCLENBQUM7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLDJCQUEyQixLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hELElBQUksSUFBSSxtQ0FBbUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksSUFBSSxhQUFhLENBQUM7UUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHYxIChTSU1ELTAyOTYvMDM4NSkgdHJhbnNhY3Rpb24gY29uZmlnIGNvZGVjOiBiaXQgbWFzayArIHZhbHVlIGVuY29kaW5nLlxuICovXG5cbi8vIFRyYW5zYWN0aW9uIGNvbmZpZyBtYXNrIGJpdHMgKG1pcnJvciBAc29sYW5hL3RyYW5zYWN0aW9uLW1lc3NhZ2VzKS5cbmV4cG9ydCBjb25zdCBQUklPUklUWV9GRUVfQklUUyA9IDBiMTE7XG5leHBvcnQgY29uc3QgQ09NUFVURV9VTklUX0xJTUlUX0JJVCA9IDBiMTAwO1xuZXhwb3J0IGNvbnN0IExPQURFRF9BQ0NPVU5UU19EQVRBX1NJWkVfTElNSVRfQklUID0gMGIxMDAwO1xuZXhwb3J0IGNvbnN0IEhFQVBfU0laRV9CSVQgPSAwYjEwMDAwO1xuXG5leHBvcnQgdHlwZSBDb25maWdWYWx1ZSA9IHsga2luZDogJ3UzMicgfCAndTY0JzsgdmFsdWU6IG51bWJlciB8IGJpZ2ludCB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlQ29uZmlnTWFza0FuZFZhbHVlcyhjb25maWc6IHtcbiAgY29tcHV0ZVVuaXRMaW1pdDogbnVtYmVyIHwgbnVsbDtcbiAgaGVhcFNpemU6IG51bWJlciB8IG51bGw7XG4gIGxvYWRlZEFjY291bnRzRGF0YVNpemVMaW1pdDogbnVtYmVyIHwgbnVsbDtcbiAgcHJpb3JpdHlGZWU6IG51bWJlciB8IG51bGw7XG59KTogeyBtYXNrOiBudW1iZXI7IHZhbHVlczogQ29uZmlnVmFsdWVbXSB9IHtcbiAgbGV0IG1hc2sgPSAwO1xuICBjb25zdCB2YWx1ZXM6IENvbmZpZ1ZhbHVlW10gPSBbXTtcbiAgaWYgKGNvbmZpZy5wcmlvcml0eUZlZSAhPT0gbnVsbCkge1xuICAgIG1hc2sgfD0gUFJJT1JJVFlfRkVFX0JJVFM7XG4gICAgdmFsdWVzLnB1c2goeyBraW5kOiAndTY0JywgdmFsdWU6IEJpZ0ludChjb25maWcucHJpb3JpdHlGZWUpIH0pO1xuICB9XG4gIGlmIChjb25maWcuY29tcHV0ZVVuaXRMaW1pdCAhPT0gbnVsbCkge1xuICAgIG1hc2sgfD0gQ09NUFVURV9VTklUX0xJTUlUX0JJVDtcbiAgICB2YWx1ZXMucHVzaCh7IGtpbmQ6ICd1MzInLCB2YWx1ZTogY29uZmlnLmNvbXB1dGVVbml0TGltaXQgfSk7XG4gIH1cbiAgaWYgKGNvbmZpZy5sb2FkZWRBY2NvdW50c0RhdGFTaXplTGltaXQgIT09IG51bGwpIHtcbiAgICBtYXNrIHw9IExPQURFRF9BQ0NPVU5UU19EQVRBX1NJWkVfTElNSVRfQklUO1xuICAgIHZhbHVlcy5wdXNoKHsga2luZDogJ3UzMicsIHZhbHVlOiBjb25maWcubG9hZGVkQWNjb3VudHNEYXRhU2l6ZUxpbWl0IH0pO1xuICB9XG4gIGlmIChjb25maWcuaGVhcFNpemUgIT09IG51bGwpIHtcbiAgICBtYXNrIHw9IEhFQVBfU0laRV9CSVQ7XG4gICAgdmFsdWVzLnB1c2goeyBraW5kOiAndTMyJywgdmFsdWU6IGNvbmZpZy5oZWFwU2l6ZSB9KTtcbiAgfVxuICByZXR1cm4geyBtYXNrLCB2YWx1ZXMgfTtcbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ /**
2
+ * v1 (SIMD-0296/0385) transaction instruction codec: header + payload encoding.
3
+ */
4
+ export type CompiledInstruction = {
5
+ programAddressIndex: number;
6
+ accountIndices: number[];
7
+ data: Uint8Array;
8
+ };
9
+ /**
10
+ * Encode instruction headers (4 bytes each) then payloads for the given
11
+ * compiled instructions, appending to `buf`.
12
+ */
13
+ export declare function encodeInstructions(buf: number[], instructions: CompiledInstruction[]): void;
14
+ //# sourceMappingURL=instruction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/serialization/codecs/v1/instruction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,mBAAmB,GAAG;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AASF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAc3F"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * v1 (SIMD-0296/0385) transaction instruction codec: header + payload encoding.
3
+ */
4
+ function pushU8(buf, v) {
5
+ buf.push(v & 0xff);
6
+ }
7
+ function pushU16LE(buf, v) {
8
+ buf.push(v & 0xff, (v >>> 8) & 0xff);
9
+ }
10
+ /**
11
+ * Encode instruction headers (4 bytes each) then payloads for the given
12
+ * compiled instructions, appending to `buf`.
13
+ */
14
+ export function encodeInstructions(buf, instructions) {
15
+ for (const instruction of instructions) {
16
+ pushU8(buf, instruction.programAddressIndex);
17
+ pushU8(buf, instruction.accountIndices.length);
18
+ pushU16LE(buf, instruction.data.length);
19
+ }
20
+ for (const instruction of instructions) {
21
+ for (const idx of instruction.accountIndices) {
22
+ pushU8(buf, idx);
23
+ }
24
+ for (const b of instruction.data) {
25
+ pushU8(buf, b);
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcmlhbGl6YXRpb24vY29kZWNzL3YxL2luc3RydWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBUUgsU0FBUyxNQUFNLENBQUMsR0FBYSxFQUFFLENBQVM7SUFDdEMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUNELFNBQVMsU0FBUyxDQUFDLEdBQWEsRUFBRSxDQUFTO0lBQ3pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQWEsRUFBRSxZQUFtQztJQUNuRixLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxLQUFLLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM3QyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLENBQUM7UUFDRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdjEgKFNJTUQtMDI5Ni8wMzg1KSB0cmFuc2FjdGlvbiBpbnN0cnVjdGlvbiBjb2RlYzogaGVhZGVyICsgcGF5bG9hZCBlbmNvZGluZy5cbiAqL1xuXG5leHBvcnQgdHlwZSBDb21waWxlZEluc3RydWN0aW9uID0ge1xuICBwcm9ncmFtQWRkcmVzc0luZGV4OiBudW1iZXI7XG4gIGFjY291bnRJbmRpY2VzOiBudW1iZXJbXTtcbiAgZGF0YTogVWludDhBcnJheTtcbn07XG5cbmZ1bmN0aW9uIHB1c2hVOChidWY6IG51bWJlcltdLCB2OiBudW1iZXIpIHtcbiAgYnVmLnB1c2godiAmIDB4ZmYpO1xufVxuZnVuY3Rpb24gcHVzaFUxNkxFKGJ1ZjogbnVtYmVyW10sIHY6IG51bWJlcikge1xuICBidWYucHVzaCh2ICYgMHhmZiwgKHYgPj4+IDgpICYgMHhmZik7XG59XG5cbi8qKlxuICogRW5jb2RlIGluc3RydWN0aW9uIGhlYWRlcnMgKDQgYnl0ZXMgZWFjaCkgdGhlbiBwYXlsb2FkcyBmb3IgdGhlIGdpdmVuXG4gKiBjb21waWxlZCBpbnN0cnVjdGlvbnMsIGFwcGVuZGluZyB0byBgYnVmYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUluc3RydWN0aW9ucyhidWY6IG51bWJlcltdLCBpbnN0cnVjdGlvbnM6IENvbXBpbGVkSW5zdHJ1Y3Rpb25bXSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIGluc3RydWN0aW9ucykge1xuICAgIHB1c2hVOChidWYsIGluc3RydWN0aW9uLnByb2dyYW1BZGRyZXNzSW5kZXgpO1xuICAgIHB1c2hVOChidWYsIGluc3RydWN0aW9uLmFjY291bnRJbmRpY2VzLmxlbmd0aCk7XG4gICAgcHVzaFUxNkxFKGJ1ZiwgaW5zdHJ1Y3Rpb24uZGF0YS5sZW5ndGgpO1xuICB9XG4gIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgaW5zdHJ1Y3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBpZHggb2YgaW5zdHJ1Y3Rpb24uYWNjb3VudEluZGljZXMpIHtcbiAgICAgIHB1c2hVOChidWYsIGlkeCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYiBvZiBpbnN0cnVjdGlvbi5kYXRhKSB7XG4gICAgICBwdXNoVTgoYnVmLCBiKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { encodeConfigMaskAndValues, ConfigValue } from './config';
2
+ import { CompiledInstruction } from './instruction';
3
+ export type V1MessageHeader = {
4
+ numSignerAccounts: number;
5
+ numReadonlySignerAccounts: number;
6
+ numReadonlyNonSignerAccounts: number;
7
+ };
8
+ export declare function encodeV1Message(args: {
9
+ header: V1MessageHeader;
10
+ configMask: number;
11
+ configValues: ConfigValue[];
12
+ blockhash: string;
13
+ staticAccounts: string[];
14
+ compiledInstructions: CompiledInstruction[];
15
+ }): Uint8Array;
16
+ export { encodeConfigMaskAndValues };
17
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/serialization/codecs/v1/message.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAsB,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAuBxE,MAAM,MAAM,eAAe,GAAG;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yBAAyB,EAAE,MAAM,CAAC;IAClC,4BAA4B,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;CAC7C,GAAG,UAAU,CA+Bb;AAED,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,61 @@
1
+ import bs58 from 'bs58';
2
+ import { PublicKey } from '@solana/web3.js';
3
+ import { BuildTransactionError } from '@bitgo-beta/sdk-core';
4
+ import { encodeConfigMaskAndValues } from './config';
5
+ import { encodeInstructions } from './instruction';
6
+ /**
7
+ * v1 (SIMD-0296/0385) transaction message wire encoder.
8
+ *
9
+ * Layout: [version: 0x81][header: 3 x u8][configMask: u32 LE][blockhash: 32]
10
+ * [numInstructions: u8][numStaticAccounts: u8]
11
+ * [staticAccounts: 32 x n][configValues: per mask]
12
+ * [instructionHeaders: 4 x n][instructionPayloads: per instruction]
13
+ */
14
+ function pushU8(buf, v) {
15
+ buf.push(v & 0xff);
16
+ }
17
+ function pushU32LE(buf, v) {
18
+ buf.push(v & 0xff, (v >>> 8) & 0xff, (v >>> 16) & 0xff, (v >>> 24) & 0xff);
19
+ }
20
+ function pushU64LE(buf, v) {
21
+ for (let i = 0; i < 8; i++) {
22
+ buf.push(Number((v >> BigInt(8 * i)) & 0xffn));
23
+ }
24
+ }
25
+ export function encodeV1Message(args) {
26
+ const { header, configMask, configValues, blockhash, staticAccounts, compiledInstructions } = args;
27
+ let blockhashBytes;
28
+ try {
29
+ blockhashBytes = bs58.decode(blockhash);
30
+ }
31
+ catch {
32
+ throw new BuildTransactionError('Invalid recent blockhash');
33
+ }
34
+ if (blockhashBytes.length !== 32) {
35
+ throw new BuildTransactionError('Invalid recent blockhash');
36
+ }
37
+ const buf = [];
38
+ pushU8(buf, 0x81); // version
39
+ pushU8(buf, header.numSignerAccounts);
40
+ pushU8(buf, header.numReadonlySignerAccounts);
41
+ pushU8(buf, header.numReadonlyNonSignerAccounts);
42
+ pushU32LE(buf, configMask);
43
+ for (const b of blockhashBytes)
44
+ pushU8(buf, b);
45
+ pushU8(buf, compiledInstructions.length);
46
+ pushU8(buf, staticAccounts.length);
47
+ for (const account of staticAccounts) {
48
+ for (const b of new PublicKey(account).toBytes())
49
+ pushU8(buf, b);
50
+ }
51
+ for (const value of configValues) {
52
+ if (value.kind === 'u64')
53
+ pushU64LE(buf, value.value);
54
+ else
55
+ pushU32LE(buf, value.value);
56
+ }
57
+ encodeInstructions(buf, compiledInstructions);
58
+ return new Uint8Array(buf);
59
+ }
60
+ export { encodeConfigMaskAndValues };
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VyaWFsaXphdGlvbi9jb2RlY3MvdjEvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSx5QkFBeUIsRUFBZSxNQUFNLFVBQVUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBRXhFOzs7Ozs7O0dBT0c7QUFFSCxTQUFTLE1BQU0sQ0FBQyxHQUFhLEVBQUUsQ0FBUztJQUN0QyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBQ0QsU0FBUyxTQUFTLENBQUMsR0FBYSxFQUFFLENBQVM7SUFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUNELFNBQVMsU0FBUyxDQUFDLEdBQWEsRUFBRSxDQUFTO0lBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQztBQVFELE1BQU0sVUFBVSxlQUFlLENBQUMsSUFPL0I7SUFDQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLElBQUksQ0FBQztJQUVuRyxJQUFJLGNBQTBCLENBQUM7SUFDL0IsSUFBSSxDQUFDO1FBQ0gsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLHFCQUFxQixDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztJQUN6QixNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVTtJQUM3QixNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNqRCxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksY0FBYztRQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxNQUFNLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3JDLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSztZQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQWUsQ0FBQyxDQUFDOztZQUMzRCxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxLQUFlLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDOUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IFB1YmxpY0tleSB9IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBlbmNvZGVDb25maWdNYXNrQW5kVmFsdWVzLCBDb25maWdWYWx1ZSB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IGVuY29kZUluc3RydWN0aW9ucywgQ29tcGlsZWRJbnN0cnVjdGlvbiB9IGZyb20gJy4vaW5zdHJ1Y3Rpb24nO1xuXG4vKipcbiAqIHYxIChTSU1ELTAyOTYvMDM4NSkgdHJhbnNhY3Rpb24gbWVzc2FnZSB3aXJlIGVuY29kZXIuXG4gKlxuICogTGF5b3V0OiBbdmVyc2lvbjogMHg4MV1baGVhZGVyOiAzIHggdThdW2NvbmZpZ01hc2s6IHUzMiBMRV1bYmxvY2toYXNoOiAzMl1cbiAqICAgW251bUluc3RydWN0aW9uczogdThdW251bVN0YXRpY0FjY291bnRzOiB1OF1cbiAqICAgW3N0YXRpY0FjY291bnRzOiAzMiB4IG5dW2NvbmZpZ1ZhbHVlczogcGVyIG1hc2tdXG4gKiAgIFtpbnN0cnVjdGlvbkhlYWRlcnM6IDQgeCBuXVtpbnN0cnVjdGlvblBheWxvYWRzOiBwZXIgaW5zdHJ1Y3Rpb25dXG4gKi9cblxuZnVuY3Rpb24gcHVzaFU4KGJ1ZjogbnVtYmVyW10sIHY6IG51bWJlcikge1xuICBidWYucHVzaCh2ICYgMHhmZik7XG59XG5mdW5jdGlvbiBwdXNoVTMyTEUoYnVmOiBudW1iZXJbXSwgdjogbnVtYmVyKSB7XG4gIGJ1Zi5wdXNoKHYgJiAweGZmLCAodiA+Pj4gOCkgJiAweGZmLCAodiA+Pj4gMTYpICYgMHhmZiwgKHYgPj4+IDI0KSAmIDB4ZmYpO1xufVxuZnVuY3Rpb24gcHVzaFU2NExFKGJ1ZjogbnVtYmVyW10sIHY6IGJpZ2ludCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgIGJ1Zi5wdXNoKE51bWJlcigodiA+PiBCaWdJbnQoOCAqIGkpKSAmIDB4ZmZuKSk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVjFNZXNzYWdlSGVhZGVyID0ge1xuICBudW1TaWduZXJBY2NvdW50czogbnVtYmVyO1xuICBudW1SZWFkb25seVNpZ25lckFjY291bnRzOiBudW1iZXI7XG4gIG51bVJlYWRvbmx5Tm9uU2lnbmVyQWNjb3VudHM6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVWMU1lc3NhZ2UoYXJnczoge1xuICBoZWFkZXI6IFYxTWVzc2FnZUhlYWRlcjtcbiAgY29uZmlnTWFzazogbnVtYmVyO1xuICBjb25maWdWYWx1ZXM6IENvbmZpZ1ZhbHVlW107XG4gIGJsb2NraGFzaDogc3RyaW5nO1xuICBzdGF0aWNBY2NvdW50czogc3RyaW5nW107XG4gIGNvbXBpbGVkSW5zdHJ1Y3Rpb25zOiBDb21waWxlZEluc3RydWN0aW9uW107XG59KTogVWludDhBcnJheSB7XG4gIGNvbnN0IHsgaGVhZGVyLCBjb25maWdNYXNrLCBjb25maWdWYWx1ZXMsIGJsb2NraGFzaCwgc3RhdGljQWNjb3VudHMsIGNvbXBpbGVkSW5zdHJ1Y3Rpb25zIH0gPSBhcmdzO1xuXG4gIGxldCBibG9ja2hhc2hCeXRlczogVWludDhBcnJheTtcbiAgdHJ5IHtcbiAgICBibG9ja2hhc2hCeXRlcyA9IGJzNTguZGVjb2RlKGJsb2NraGFzaCk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmVjZW50IGJsb2NraGFzaCcpO1xuICB9XG4gIGlmIChibG9ja2hhc2hCeXRlcy5sZW5ndGggIT09IDMyKSB7XG4gICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCByZWNlbnQgYmxvY2toYXNoJyk7XG4gIH1cblxuICBjb25zdCBidWY6IG51bWJlcltdID0gW107XG4gIHB1c2hVOChidWYsIDB4ODEpOyAvLyB2ZXJzaW9uXG4gIHB1c2hVOChidWYsIGhlYWRlci5udW1TaWduZXJBY2NvdW50cyk7XG4gIHB1c2hVOChidWYsIGhlYWRlci5udW1SZWFkb25seVNpZ25lckFjY291bnRzKTtcbiAgcHVzaFU4KGJ1ZiwgaGVhZGVyLm51bVJlYWRvbmx5Tm9uU2lnbmVyQWNjb3VudHMpO1xuICBwdXNoVTMyTEUoYnVmLCBjb25maWdNYXNrKTtcbiAgZm9yIChjb25zdCBiIG9mIGJsb2NraGFzaEJ5dGVzKSBwdXNoVTgoYnVmLCBiKTtcbiAgcHVzaFU4KGJ1ZiwgY29tcGlsZWRJbnN0cnVjdGlvbnMubGVuZ3RoKTtcbiAgcHVzaFU4KGJ1Ziwgc3RhdGljQWNjb3VudHMubGVuZ3RoKTtcbiAgZm9yIChjb25zdCBhY2NvdW50IG9mIHN0YXRpY0FjY291bnRzKSB7XG4gICAgZm9yIChjb25zdCBiIG9mIG5ldyBQdWJsaWNLZXkoYWNjb3VudCkudG9CeXRlcygpKSBwdXNoVTgoYnVmLCBiKTtcbiAgfVxuICBmb3IgKGNvbnN0IHZhbHVlIG9mIGNvbmZpZ1ZhbHVlcykge1xuICAgIGlmICh2YWx1ZS5raW5kID09PSAndTY0JykgcHVzaFU2NExFKGJ1ZiwgdmFsdWUudmFsdWUgYXMgYmlnaW50KTtcbiAgICBlbHNlIHB1c2hVMzJMRShidWYsIHZhbHVlLnZhbHVlIGFzIG51bWJlcik7XG4gIH1cbiAgZW5jb2RlSW5zdHJ1Y3Rpb25zKGJ1ZiwgY29tcGlsZWRJbnN0cnVjdGlvbnMpO1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcbn1cblxuZXhwb3J0IHsgZW5jb2RlQ29uZmlnTWFza0FuZFZhbHVlcyB9O1xuIl19
@@ -0,0 +1,30 @@
1
+ import { PublicKey, TransactionInstruction } from '@solana/web3.js';
2
+ /** Supported Solana transaction versions. Only 1 (SIMD-0296/0385) is implemented. */
3
+ export type TransactionVersion = 0 | 1;
4
+ /**
5
+ * Configuration for a v1 transaction, mirroring the shared sdk-core type.
6
+ * All values are optional (null = unset); priorityFee is total lamports.
7
+ */
8
+ export interface TransactionConfig {
9
+ computeUnitLimit: number | null;
10
+ heapSize: number | null;
11
+ loadedAccountsDataSizeLimit: number | null;
12
+ priorityFee: number | null;
13
+ }
14
+ /**
15
+ * Compile a Solana transaction message and return its wire bytes.
16
+ *
17
+ * Version-aware: only `version: 1` (SIMD-0296/0385) is implemented; other
18
+ * versions throw a clear unsupported-version error until they are added.
19
+ *
20
+ * @param args - version, instructions, fee payer, recent blockhash, and config
21
+ * @returns the serialized message bytes (v1 starts with the 0x81 version prefix)
22
+ */
23
+ export declare function compileTransactionMessage(args: {
24
+ version: TransactionVersion;
25
+ instructions: TransactionInstruction[];
26
+ feePayer: PublicKey;
27
+ recentBlockhash: string;
28
+ transactionConfig: TransactionConfig;
29
+ }): Uint8Array;
30
+ //# sourceMappingURL=compileTransactionMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compileTransactionMessage.d.ts","sourceRoot":"","sources":["../../../../src/lib/serialization/compileTransactionMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAKpE,qFAAqF;AACrF,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC;AAEvC;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAoLD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,QAAQ,EAAE,SAAS,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,iBAAiB,CAAC;CACtC,GAAG,UAAU,CAqDb"}
@@ -0,0 +1,202 @@
1
+ import { BuildTransactionError } from '@bitgo-beta/sdk-core';
2
+ import { encodeV1Message } from './codecs/v1/message';
3
+ import { encodeConfigMaskAndValues } from './codecs/v1/config';
4
+ // AccountRole bit values (mirror @solana/instructions).
5
+ const READONLY = 0;
6
+ const WRITABLE = 1;
7
+ const READONLY_SIGNER = 2;
8
+ const WRITABLE_SIGNER = 3;
9
+ const COMPUTE_BUDGET_PROGRAM_ID = 'ComputeBudget111111111111111111111111111111';
10
+ const SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR = 2;
11
+ const SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR = 3;
12
+ const MICRO_LAMPORTS_PER_LAMPORT = 1000000;
13
+ const MAX_ACCOUNTS = 64;
14
+ const MAX_SIGNERS = 12;
15
+ const MAX_INSTRUCTIONS = 64;
16
+ const MAX_ACCOUNTS_PER_INSTRUCTION = 255;
17
+ const isSigner = (role) => (role & READONLY_SIGNER) !== 0;
18
+ const isWritable = (role) => (role & WRITABLE) !== 0;
19
+ // Address ordering comparator matches @solana/addresses getAddressComparator.
20
+ const addressComparator = new Intl.Collator('en', {
21
+ caseFirst: 'lower',
22
+ ignorePunctuation: false,
23
+ localeMatcher: 'best fit',
24
+ numeric: false,
25
+ sensitivity: 'variant',
26
+ usage: 'sort',
27
+ }).compare;
28
+ function readU32LE(data, offset) {
29
+ return data[offset] | (data[offset + 1] << 8) | (data[offset + 2] << 16) | (data[offset + 3] << 24);
30
+ }
31
+ function readU64LE(data, offset) {
32
+ let value = 0;
33
+ for (let i = 0; i < 8; i++) {
34
+ value += Number(data[offset + i]) * Math.pow(2, 8 * i);
35
+ }
36
+ return value;
37
+ }
38
+ /**
39
+ * Strip ComputeBudget instructions (SetComputeUnitLimit / SetComputeUnitPrice)
40
+ * and fold their values into the transaction config when still unset.
41
+ */
42
+ function stripComputeBudgetInstructions(instructions, transactionConfig) {
43
+ const filtered = [];
44
+ const config = { ...transactionConfig };
45
+ for (const instruction of instructions) {
46
+ const isComputeBudget = instruction.programId.toBase58() === COMPUTE_BUDGET_PROGRAM_ID;
47
+ const discriminator = instruction.data?.[0];
48
+ if (isComputeBudget && discriminator === SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR) {
49
+ if (config.computeUnitLimit === null) {
50
+ config.computeUnitLimit = readU32LE(instruction.data, 1);
51
+ }
52
+ continue;
53
+ }
54
+ if (isComputeBudget && discriminator === SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR) {
55
+ if (config.priorityFee === null && config.computeUnitLimit !== null) {
56
+ const microLamports = readU64LE(instruction.data, 1);
57
+ config.priorityFee = Math.ceil((microLamports * config.computeUnitLimit) / MICRO_LAMPORTS_PER_LAMPORT);
58
+ }
59
+ continue;
60
+ }
61
+ filtered.push(instruction);
62
+ }
63
+ return { instructions: filtered, config };
64
+ }
65
+ /**
66
+ * Collect + order accounts exactly as @solana/transaction-messages does:
67
+ * fee payer first (WRITABLE_SIGNER), then static accounts sorted by
68
+ * (isSigner, isWritable, base58 collator). Duplicate addresses merge roles.
69
+ * Enforces the kit's invoked-program rules.
70
+ */
71
+ function collectOrderedAccounts(feePayer, instructions) {
72
+ const feePayerAddress = feePayer.toBase58();
73
+ const map = new Map();
74
+ const metaByAddress = new Map();
75
+ const invokedPrograms = new Set();
76
+ map.set(feePayerAddress, WRITABLE_SIGNER);
77
+ metaByAddress.set(feePayerAddress, { address: feePayerAddress, role: WRITABLE_SIGNER });
78
+ const upsert = (address, role, isInvokedProgram) => {
79
+ if (address === feePayerAddress) {
80
+ if (isInvokedProgram) {
81
+ throw new BuildTransactionError(`Invoked program ${address} cannot pay fees`);
82
+ }
83
+ }
84
+ if (isInvokedProgram && isWritable(role)) {
85
+ throw new BuildTransactionError(`Invoked program ${address} must not be writable`);
86
+ }
87
+ const current = map.get(address);
88
+ if (current !== undefined) {
89
+ const merged = (current | role);
90
+ if (isInvokedProgram && isWritable(merged)) {
91
+ throw new BuildTransactionError(`Invoked program ${address} must not be writable`);
92
+ }
93
+ map.set(address, merged);
94
+ metaByAddress.set(address, { address, role: merged });
95
+ }
96
+ else {
97
+ map.set(address, role);
98
+ metaByAddress.set(address, { address, role });
99
+ }
100
+ };
101
+ for (const instruction of instructions) {
102
+ const programAddress = instruction.programId.toBase58();
103
+ invokedPrograms.add(programAddress);
104
+ upsert(programAddress, READONLY, true);
105
+ for (const key of instruction.keys) {
106
+ upsert(key.pubkey.toBase58(), key.isSigner ? (key.isWritable ? WRITABLE_SIGNER : READONLY_SIGNER) : key.isWritable ? WRITABLE : READONLY, invokedPrograms.has(key.pubkey.toBase58()));
107
+ }
108
+ }
109
+ const ordered = [...metaByAddress.values()];
110
+ ordered.sort((a, b) => {
111
+ const aFee = a.address === feePayerAddress ? -1 : 0;
112
+ const bFee = b.address === feePayerAddress ? -1 : 0;
113
+ if (aFee !== bFee)
114
+ return aFee - bFee;
115
+ const aSigner = isSigner(a.role) ? -1 : 0;
116
+ const bSigner = isSigner(b.role) ? -1 : 0;
117
+ if (aSigner !== bSigner)
118
+ return aSigner - bSigner;
119
+ const aWritable = isWritable(a.role) ? -1 : 0;
120
+ const bWritable = isWritable(b.role) ? -1 : 0;
121
+ if (aWritable !== bWritable)
122
+ return aWritable - bWritable;
123
+ return addressComparator(a.address, b.address);
124
+ });
125
+ return ordered;
126
+ }
127
+ function computeHeader(orderedAccounts) {
128
+ let numSignerAccounts = 0;
129
+ let numReadonlySignerAccounts = 0;
130
+ let numReadonlyNonSignerAccounts = 0;
131
+ for (const account of orderedAccounts) {
132
+ if (isSigner(account.role)) {
133
+ numSignerAccounts++;
134
+ if (!isWritable(account.role)) {
135
+ numReadonlySignerAccounts++;
136
+ }
137
+ }
138
+ else if (!isWritable(account.role)) {
139
+ numReadonlyNonSignerAccounts++;
140
+ }
141
+ }
142
+ return { numSignerAccounts, numReadonlySignerAccounts, numReadonlyNonSignerAccounts };
143
+ }
144
+ function compileInstructions(instructions, orderedAccounts) {
145
+ const accountIndex = new Map();
146
+ orderedAccounts.forEach((account, index) => accountIndex.set(account.address, index));
147
+ return instructions.map((instruction) => ({
148
+ programAddressIndex: accountIndex.get(instruction.programId.toBase58()),
149
+ accountIndices: instruction.keys.map((k) => accountIndex.get(k.pubkey.toBase58())),
150
+ data: instruction.data ?? new Uint8Array(),
151
+ }));
152
+ }
153
+ /**
154
+ * Compile a Solana transaction message and return its wire bytes.
155
+ *
156
+ * Version-aware: only `version: 1` (SIMD-0296/0385) is implemented; other
157
+ * versions throw a clear unsupported-version error until they are added.
158
+ *
159
+ * @param args - version, instructions, fee payer, recent blockhash, and config
160
+ * @returns the serialized message bytes (v1 starts with the 0x81 version prefix)
161
+ */
162
+ export function compileTransactionMessage(args) {
163
+ const { version, instructions, feePayer, recentBlockhash, transactionConfig } = args;
164
+ if (version !== 1) {
165
+ throw new BuildTransactionError(`Unsupported transaction version: ${version}. Only version 1 is implemented.`);
166
+ }
167
+ if (!instructions || instructions.length === 0) {
168
+ throw new BuildTransactionError('At least one instruction is required to compile a v1 transaction');
169
+ }
170
+ if (!transactionConfig) {
171
+ throw new BuildTransactionError('transactionConfig is required to compile a v1 transaction');
172
+ }
173
+ const { instructions: filteredInstructions, config } = stripComputeBudgetInstructions(instructions, transactionConfig);
174
+ const orderedAccounts = collectOrderedAccounts(feePayer, filteredInstructions);
175
+ if (orderedAccounts.length > MAX_ACCOUNTS) {
176
+ throw new BuildTransactionError(`Too many accounts in v1 transaction: ${orderedAccounts.length} (max ${MAX_ACCOUNTS})`);
177
+ }
178
+ const numSigners = orderedAccounts.filter((a) => isSigner(a.role)).length;
179
+ if (numSigners > MAX_SIGNERS) {
180
+ throw new BuildTransactionError(`Too many signers in v1 transaction: ${numSigners} (max ${MAX_SIGNERS})`);
181
+ }
182
+ if (filteredInstructions.length > MAX_INSTRUCTIONS) {
183
+ throw new BuildTransactionError(`Too many instructions in v1 transaction: ${filteredInstructions.length} (max ${MAX_INSTRUCTIONS})`);
184
+ }
185
+ for (let i = 0; i < filteredInstructions.length; i++) {
186
+ if (filteredInstructions[i].keys.length > MAX_ACCOUNTS_PER_INSTRUCTION) {
187
+ throw new BuildTransactionError(`Too many accounts in instruction ${i}: ${filteredInstructions[i].keys.length} (max ${MAX_ACCOUNTS_PER_INSTRUCTION})`);
188
+ }
189
+ }
190
+ const header = computeHeader(orderedAccounts);
191
+ const { mask, values } = encodeConfigMaskAndValues(config);
192
+ const compiledInstructions = compileInstructions(filteredInstructions, orderedAccounts);
193
+ return encodeV1Message({
194
+ header,
195
+ configMask: mask,
196
+ configValues: values,
197
+ blockhash: recentBlockhash,
198
+ staticAccounts: orderedAccounts.map((account) => account.address),
199
+ compiledInstructions,
200
+ });
201
+ }
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZVRyYW5zYWN0aW9uTWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VyaWFsaXphdGlvbi9jb21waWxlVHJhbnNhY3Rpb25NZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFpQi9ELHdEQUF3RDtBQUN4RCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFFMUIsTUFBTSx5QkFBeUIsR0FBRyw2Q0FBNkMsQ0FBQztBQUNoRixNQUFNLG9DQUFvQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxNQUFNLG9DQUFvQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxNQUFNLDBCQUEwQixHQUFHLE9BQVMsQ0FBQztBQUU3QyxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE1BQU0sNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBRXpDLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBWSxFQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0UsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV0RSw4RUFBOEU7QUFDOUUsTUFBTSxpQkFB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QUFTLEVBQUUsZUFBZTtRQUMxQixjQUFjLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNqRSxvQkFBb0I7S0FDckIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFB1YmxpY0tleSwgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbiB9IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgeyBlbmNvZGVWMU1lc3NhZ2UsIFYxTWVzc2FnZUhlYWRlciB9IGZyb20gJy4vY29kZWNzL3YxL21lc3NhZ2UnO1xuaW1wb3J0IHsgZW5jb2RlQ29uZmlnTWFza0FuZFZhbHVlcyB9IGZyb20gJy4vY29kZWNzL3YxL2NvbmZpZyc7XG5pbXBvcnQgeyBDb21waWxlZEluc3RydWN0aW9uIH0gZnJvbSAnLi9jb2RlY3MvdjEvaW5zdHJ1Y3Rpb24nO1xuXG4vKiogU3VwcG9ydGVkIFNvbGFuYSB0cmFuc2FjdGlvbiB2ZXJzaW9ucy4gT25seSAxIChTSU1ELTAyOTYvMDM4NSkgaXMgaW1wbGVtZW50ZWQuICovXG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvblZlcnNpb24gPSAwIHwgMTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIHYxIHRyYW5zYWN0aW9uLCBtaXJyb3JpbmcgdGhlIHNoYXJlZCBzZGstY29yZSB0eXBlLlxuICogQWxsIHZhbHVlcyBhcmUgb3B0aW9uYWwgKG51bGwgPSB1bnNldCk7IHByaW9yaXR5RmVlIGlzIHRvdGFsIGxhbXBvcnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uQ29uZmlnIHtcbiAgY29tcHV0ZVVuaXRMaW1pdDogbnVtYmVyIHwgbnVsbDtcbiAgaGVhcFNpemU6IG51bWJlciB8IG51bGw7XG4gIGxvYWRlZEFjY291bnRzRGF0YVNpemVMaW1pdDogbnVtYmVyIHwgbnVsbDtcbiAgcHJpb3JpdHlGZWU6IG51bWJlciB8IG51bGw7IC8vIGxhbXBvcnRzICh0b3RhbClcbn1cblxuLy8gQWNjb3VudFJvbGUgYml0IHZhbHVlcyAobWlycm9yIEBzb2xhbmEvaW5zdHJ1Y3Rpb25zKS5cbmNvbnN0IFJFQURPTkxZID0gMDtcbmNvbnN0IFdSSVRBQkxFID0gMTtcbmNvbnN0IFJFQURPTkxZX1NJR05FUiA9IDI7XG5jb25zdCBXUklUQUJMRV9TSUdORVIgPSAzO1xuXG5jb25zdCBDT01QVVRFX0JVREdFVF9QUk9HUkFNX0lEID0gJ0NvbXB1dGVCdWRnZXQxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnO1xuY29uc3QgU0VUX0NPTVBVVEVfVU5JVF9MSU1JVF9ESVNDUklNSU5BVE9SID0gMjtcbmNvbnN0IFNFVF9DT01QVVRFX1VOSVRfUFJJQ0VfRElTQ1JJTUlOQVRPUiA9IDM7XG5jb25zdCBNSUNST19MQU1QT1JUU19QRVJfTEFNUE9SVCA9IDFfMDAwXzAwMDtcblxuY29uc3QgTUFYX0FDQ09VTlRTID0gNjQ7XG5jb25zdCBNQVhfU0lHTkVSUyA9IDEyO1xuY29uc3QgTUFYX0lOU1RSVUNUSU9OUyA9IDY0O1xuY29uc3QgTUFYX0FDQ09VTlRTX1BFUl9JTlNUUlVDVElPTiA9IDI1NTtcblxuY29uc3QgaXNTaWduZXIgPSAocm9sZTogbnVtYmVyKTogYm9vbGVhbiA9PiAocm9sZSAmIFJFQURPTkxZX1NJR05FUikgIT09IDA7XG5jb25zdCBpc1dyaXRhYmxlID0gKHJvbGU6IG51bWJlcik6IGJvb2xlYW4gPT4gKHJvbGUgJiBXUklUQUJMRSkgIT09IDA7XG5cbi8vIEFkZHJlc3Mgb3JkZXJpbmcgY29tcGFyYXRvciBtYXRjaGVzIEBzb2xhbmEvYWRkcmVzc2VzIGdldEFkZHJlc3NDb21wYXJhdG9yLlxuY29uc3QgYWRkcmVzc0NvbXBhcmF0b3IgPSBuZXcgSW50bC5Db2xsYXRvcignZW4nLCB7XG4gIGNhc2VGaXJzdDogJ2xvd2VyJyxcbiAgaWdub3JlUHVuY3R1YXRpb246IGZhbHNlLFxuICBsb2NhbGVNYXRjaGVyOiAnYmVzdCBmaXQnLFxuICBudW1lcmljOiBmYWxzZSxcbiAgc2Vuc2l0aXZpdHk6ICd2YXJpYW50JyxcbiAgdXNhZ2U6ICdzb3J0Jyxcbn0pLmNvbXBhcmU7XG5cbnR5cGUgQWNjb3VudE1ldGEgPSB7IGFkZHJlc3M6IHN0cmluZzsgcm9sZTogbnVtYmVyIH07XG5cbmZ1bmN0aW9uIHJlYWRVMzJMRShkYXRhOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBkYXRhW29mZnNldF0gfCAoZGF0YVtvZmZzZXQgKyAxXSA8PCA4KSB8IChkYXRhW29mZnNldCArIDJdIDw8IDE2KSB8IChkYXRhW29mZnNldCArIDNdIDw8IDI0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFU2NExFKGRhdGE6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHZhbHVlID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICB2YWx1ZSArPSBOdW1iZXIoZGF0YVtvZmZzZXQgKyBpXSkgKiBNYXRoLnBvdygyLCA4ICogaSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFN0cmlwIENvbXB1dGVCdWRnZXQgaW5zdHJ1Y3Rpb25zIChTZXRDb21wdXRlVW5pdExpbWl0IC8gU2V0Q29tcHV0ZVVuaXRQcmljZSlcbiAqIGFuZCBmb2xkIHRoZWlyIHZhbHVlcyBpbnRvIHRoZSB0cmFuc2FjdGlvbiBjb25maWcgd2hlbiBzdGlsbCB1bnNldC5cbiAqL1xuZnVuY3Rpb24gc3RyaXBDb21wdXRlQnVkZ2V0SW5zdHJ1Y3Rpb25zKFxuICBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSxcbiAgdHJhbnNhY3Rpb25Db25maWc6IFRyYW5zYWN0aW9uQ29uZmlnXG4pOiB7IGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdOyBjb25maWc6IFRyYW5zYWN0aW9uQ29uZmlnIH0ge1xuICBjb25zdCBmaWx0ZXJlZDogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdID0gW107XG4gIGNvbnN0IGNvbmZpZzogVHJhbnNhY3Rpb25Db25maWcgPSB7IC4uLnRyYW5zYWN0aW9uQ29uZmlnIH07XG5cbiAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICBjb25zdCBpc0NvbXB1dGVCdWRnZXQgPSBpbnN0cnVjdGlvbi5wcm9ncmFtSWQudG9CYXNlNTgoKSA9PT0gQ09NUFVURV9CVURHRVRfUFJPR1JBTV9JRDtcbiAgICBjb25zdCBkaXNjcmltaW5hdG9yID0gaW5zdHJ1Y3Rpb24uZGF0YT8uWzBdO1xuXG4gICAgaWYgKGlzQ29tcHV0ZUJ1ZGdldCAmJiBkaXNjcmltaW5hdG9yID09PSBTRVRfQ09NUFVURV9VTklUX0xJTUlUX0RJU0NSSU1JTkFUT1IpIHtcbiAgICAgIGlmIChjb25maWcuY29tcHV0ZVVuaXRMaW1pdCA9PT0gbnVsbCkge1xuICAgICAgICBjb25maWcuY29tcHV0ZVVuaXRMaW1pdCA9IHJlYWRVMzJMRShpbnN0cnVjdGlvbi5kYXRhLCAxKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpc0NvbXB1dGVCdWRnZXQgJiYgZGlzY3JpbWluYXRvciA9PT0gU0VUX0NPTVBVVEVfVU5JVF9QUklDRV9ESVNDUklNSU5BVE9SKSB7XG4gICAgICBpZiAoY29uZmlnLnByaW9yaXR5RmVlID09PSBudWxsICYmIGNvbmZpZy5jb21wdXRlVW5pdExpbWl0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1pY3JvTGFtcG9ydHMgPSByZWFkVTY0TEUoaW5zdHJ1Y3Rpb24uZGF0YSwgMSk7XG4gICAgICAgIGNvbmZpZy5wcmlvcml0eUZlZSA9IE1hdGguY2VpbCgobWljcm9MYW1wb3J0cyAqIGNvbmZpZy5jb21wdXRlVW5pdExpbWl0KSAvIE1JQ1JPX0xBTVBPUlRTX1BFUl9MQU1QT1JUKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZpbHRlcmVkLnB1c2goaW5zdHJ1Y3Rpb24pO1xuICB9XG5cbiAgcmV0dXJuIHsgaW5zdHJ1Y3Rpb25zOiBmaWx0ZXJlZCwgY29uZmlnIH07XG59XG5cbi8qKlxuICogQ29sbGVjdCArIG9yZGVyIGFjY291bnRzIGV4YWN0bHkgYXMgQHNvbGFuYS90cmFuc2FjdGlvbi1tZXNzYWdlcyBkb2VzOlxuICogZmVlIHBheWVyIGZpcnN0IChXUklUQUJMRV9TSUdORVIpLCB0aGVuIHN0YXRpYyBhY2NvdW50cyBzb3J0ZWQgYnlcbiAqIChpc1NpZ25lciwgaXNXcml0YWJsZSwgYmFzZTU4IGNvbGxhdG9yKS4gRHVwbGljYXRlIGFkZHJlc3NlcyBtZXJnZSByb2xlcy5cbiAqIEVuZm9yY2VzIHRoZSBraXQncyBpbnZva2VkLXByb2dyYW0gcnVsZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RPcmRlcmVkQWNjb3VudHMoZmVlUGF5ZXI6IFB1YmxpY0tleSwgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10pOiBBY2NvdW50TWV0YVtdIHtcbiAgY29uc3QgZmVlUGF5ZXJBZGRyZXNzID0gZmVlUGF5ZXIudG9CYXNlNTgoKTtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY29uc3QgbWV0YUJ5QWRkcmVzcyA9IG5ldyBNYXA8c3RyaW5nLCBBY2NvdW50TWV0YT4oKTtcbiAgY29uc3QgaW52b2tlZFByb2dyYW1zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgbWFwLnNldChmZWVQYXllckFkZHJlc3MsIFdSSVRBQkxFX1NJR05FUik7XG4gIG1ldGFCeUFkZHJlc3Muc2V0KGZlZVBheWVyQWRkcmVzcywgeyBhZGRyZXNzOiBmZWVQYXllckFkZHJlc3MsIHJvbGU6IFdSSVRBQkxFX1NJR05FUiB9KTtcblxuICBjb25zdCB1cHNlcnQgPSAoYWRkcmVzczogc3RyaW5nLCByb2xlOiBudW1iZXIsIGlzSW52b2tlZFByb2dyYW06IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoYWRkcmVzcyA9PT0gZmVlUGF5ZXJBZGRyZXNzKSB7XG4gICAgICBpZiAoaXNJbnZva2VkUHJvZ3JhbSkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZva2VkIHByb2dyYW0gJHthZGRyZXNzfSBjYW5ub3QgcGF5IGZlZXNgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzSW52b2tlZFByb2dyYW0gJiYgaXNXcml0YWJsZShyb2xlKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52b2tlZCBwcm9ncmFtICR7YWRkcmVzc30gbXVzdCBub3QgYmUgd3JpdGFibGVgKTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudCA9IG1hcC5nZXQoYWRkcmVzcyk7XG4gICAgaWYgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbWVyZ2VkID0gKGN1cnJlbnQgfCByb2xlKSBhcyBudW1iZXI7XG4gICAgICBpZiAoaXNJbnZva2VkUHJvZ3JhbSAmJiBpc1dyaXRhYmxlKG1lcmdlZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52b2tlZCBwcm9ncmFtICR7YWRkcmVzc30gbXVzdCBub3QgYmUgd3JpdGFibGVgKTtcbiAgICAgIH1cbiAgICAgIG1hcC5zZXQoYWRkcmVzcywgbWVyZ2VkKTtcbiAgICAgIG1ldGFCeUFkZHJlc3Muc2V0KGFkZHJlc3MsIHsgYWRkcmVzcywgcm9sZTogbWVyZ2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuc2V0KGFkZHJlc3MsIHJvbGUpO1xuICAgICAgbWV0YUJ5QWRkcmVzcy5zZXQoYWRkcmVzcywgeyBhZGRyZXNzLCByb2xlIH0pO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIGluc3RydWN0aW9ucykge1xuICAgIGNvbnN0IHByb2dyYW1BZGRyZXNzID0gaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkLnRvQmFzZTU4KCk7XG4gICAgaW52b2tlZFByb2dyYW1zLmFkZChwcm9ncmFtQWRkcmVzcyk7XG4gICAgdXBzZXJ0KHByb2dyYW1BZGRyZXNzLCBSRUFET05MWSwgdHJ1ZSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgaW5zdHJ1Y3Rpb24ua2V5cykge1xuICAgICAgdXBzZXJ0KFxuICAgICAgICBrZXkucHVia2V5LnRvQmFzZTU4KCksXG4gICAgICAgIGtleS5pc1NpZ25lciA/IChrZXkuaXNXcml0YWJsZSA/IFdSSVRBQkxFX1NJR05FUiA6IFJFQURPTkxZX1NJR05FUikgOiBrZXkuaXNXcml0YWJsZSA/IFdSSVRBQkxFIDogUkVBRE9OTFksXG4gICAgICAgIGludm9rZWRQcm9ncmFtcy5oYXMoa2V5LnB1YmtleS50b0Jhc2U1OCgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcmRlcmVkID0gWy4uLm1ldGFCeUFkZHJlc3MudmFsdWVzKCldO1xuICBvcmRlcmVkLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBhRmVlID0gYS5hZGRyZXNzID09PSBmZWVQYXllckFkZHJlc3MgPyAtMSA6IDA7XG4gICAgY29uc3QgYkZlZSA9IGIuYWRkcmVzcyA9PT0gZmVlUGF5ZXJBZGRyZXNzID8gLTEgOiAwO1xuICAgIGlmIChhRmVlICE9PSBiRmVlKSByZXR1cm4gYUZlZSAtIGJGZWU7XG4gICAgY29uc3QgYVNpZ25lciA9IGlzU2lnbmVyKGEucm9sZSkgPyAtMSA6IDA7XG4gICAgY29uc3QgYlNpZ25lciA9IGlzU2lnbmVyKGIucm9sZSkgPyAtMSA6IDA7XG4gICAgaWYgKGFTaWduZXIgIT09IGJTaWduZXIpIHJldHVybiBhU2lnbmVyIC0gYlNpZ25lcjtcbiAgICBjb25zdCBhV3JpdGFibGUgPSBpc1dyaXRhYmxlKGEucm9sZSkgPyAtMSA6IDA7XG4gICAgY29uc3QgYldyaXRhYmxlID0gaXNXcml0YWJsZShiLnJvbGUpID8gLTEgOiAwO1xuICAgIGlmIChhV3JpdGFibGUgIT09IGJXcml0YWJsZSkgcmV0dXJuIGFXcml0YWJsZSAtIGJXcml0YWJsZTtcbiAgICByZXR1cm4gYWRkcmVzc0NvbXBhcmF0b3IoYS5hZGRyZXNzLCBiLmFkZHJlc3MpO1xuICB9KTtcblxuICByZXR1cm4gb3JkZXJlZDtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUhlYWRlcihvcmRlcmVkQWNjb3VudHM6IEFjY291bnRNZXRhW10pOiBWMU1lc3NhZ2VIZWFkZXIge1xuICBsZXQgbnVtU2lnbmVyQWNjb3VudHMgPSAwO1xuICBsZXQgbnVtUmVhZG9ubHlTaWduZXJBY2NvdW50cyA9IDA7XG4gIGxldCBudW1SZWFkb25seU5vblNpZ25lckFjY291bnRzID0gMDtcbiAgZm9yIChjb25zdCBhY2NvdW50IG9mIG9yZGVyZWRBY2NvdW50cykge1xuICAgIGlmIChpc1NpZ25lcihhY2NvdW50LnJvbGUpKSB7XG4gICAgICBudW1TaWduZXJBY2NvdW50cysrO1xuICAgICAgaWYgKCFpc1dyaXRhYmxlKGFjY291bnQucm9sZSkpIHtcbiAgICAgICAgbnVtUmVhZG9ubHlTaWduZXJBY2NvdW50cysrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzV3JpdGFibGUoYWNjb3VudC5yb2xlKSkge1xuICAgICAgbnVtUmVhZG9ubHlOb25TaWduZXJBY2NvdW50cysrO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBudW1TaWduZXJBY2NvdW50cywgbnVtUmVhZG9ubHlTaWduZXJBY2NvdW50cywgbnVtUmVhZG9ubHlOb25TaWduZXJBY2NvdW50cyB9O1xufVxuXG5mdW5jdGlvbiBjb21waWxlSW5zdHJ1Y3Rpb25zKFxuICBpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSxcbiAgb3JkZXJlZEFjY291bnRzOiBBY2NvdW50TWV0YVtdXG4pOiBDb21waWxlZEluc3RydWN0aW9uW10ge1xuICBjb25zdCBhY2NvdW50SW5kZXggPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBvcmRlcmVkQWNjb3VudHMuZm9yRWFjaCgoYWNjb3VudCwgaW5kZXgpID0+IGFjY291bnRJbmRleC5zZXQoYWNjb3VudC5hZGRyZXNzLCBpbmRleCkpO1xuXG4gIHJldHVybiBpbnN0cnVjdGlvbnMubWFwKChpbnN0cnVjdGlvbikgPT4gKHtcbiAgICBwcm9ncmFtQWRkcmVzc0luZGV4OiBhY2NvdW50SW5kZXguZ2V0KGluc3RydWN0aW9uLnByb2dyYW1JZC50b0Jhc2U1OCgpKSEsXG4gICAgYWNjb3VudEluZGljZXM6IGluc3RydWN0aW9uLmtleXMubWFwKChrKSA9PiBhY2NvdW50SW5kZXguZ2V0KGsucHVia2V5LnRvQmFzZTU4KCkpISksXG4gICAgZGF0YTogaW5zdHJ1Y3Rpb24uZGF0YSA/PyBuZXcgVWludDhBcnJheSgpLFxuICB9KSk7XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIFNvbGFuYSB0cmFuc2FjdGlvbiBtZXNzYWdlIGFuZCByZXR1cm4gaXRzIHdpcmUgYnl0ZXMuXG4gKlxuICogVmVyc2lvbi1hd2FyZTogb25seSBgdmVyc2lvbjogMWAgKFNJTUQtMDI5Ni8wMzg1KSBpcyBpbXBsZW1lbnRlZDsgb3RoZXJcbiAqIHZlcnNpb25zIHRocm93IGEgY2xlYXIgdW5zdXBwb3J0ZWQtdmVyc2lvbiBlcnJvciB1bnRpbCB0aGV5IGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gYXJncyAtIHZlcnNpb24sIGluc3RydWN0aW9ucywgZmVlIHBheWVyLCByZWNlbnQgYmxvY2toYXNoLCBhbmQgY29uZmlnXG4gKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBtZXNzYWdlIGJ5dGVzICh2MSBzdGFydHMgd2l0aCB0aGUgMHg4MSB2ZXJzaW9uIHByZWZpeClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVUcmFuc2FjdGlvbk1lc3NhZ2UoYXJnczoge1xuICB2ZXJzaW9uOiBUcmFuc2FjdGlvblZlcnNpb247XG4gIGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdO1xuICBmZWVQYXllcjogUHVibGljS2V5O1xuICByZWNlbnRCbG9ja2hhc2g6IHN0cmluZztcbiAgdHJhbnNhY3Rpb25Db25maWc6IFRyYW5zYWN0aW9uQ29uZmlnO1xufSk6IFVpbnQ4QXJyYXkge1xuICBjb25zdCB7IHZlcnNpb24sIGluc3RydWN0aW9ucywgZmVlUGF5ZXIsIHJlY2VudEJsb2NraGFzaCwgdHJhbnNhY3Rpb25Db25maWcgfSA9IGFyZ3M7XG5cbiAgaWYgKHZlcnNpb24gIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVbnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB2ZXJzaW9uOiAke3ZlcnNpb259LiBPbmx5IHZlcnNpb24gMSBpcyBpbXBsZW1lbnRlZC5gKTtcbiAgfVxuICBpZiAoIWluc3RydWN0aW9ucyB8fCBpbnN0cnVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQXQgbGVhc3Qgb25lIGluc3RydWN0aW9uIGlzIHJlcXVpcmVkIHRvIGNvbXBpbGUgYSB2MSB0cmFuc2FjdGlvbicpO1xuICB9XG4gIGlmICghdHJhbnNhY3Rpb25Db25maWcpIHtcbiAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0cmFuc2FjdGlvbkNvbmZpZyBpcyByZXF1aXJlZCB0byBjb21waWxlIGEgdjEgdHJhbnNhY3Rpb24nKTtcbiAgfVxuXG4gIGNvbnN0IHsgaW5zdHJ1Y3Rpb25zOiBmaWx0ZXJlZEluc3RydWN0aW9ucywgY29uZmlnIH0gPSBzdHJpcENvbXB1dGVCdWRnZXRJbnN0cnVjdGlvbnMoXG4gICAgaW5zdHJ1Y3Rpb25zLFxuICAgIHRyYW5zYWN0aW9uQ29uZmlnXG4gICk7XG5cbiAgY29uc3Qgb3JkZXJlZEFjY291bnRzID0gY29sbGVjdE9yZGVyZWRBY2NvdW50cyhmZWVQYXllciwgZmlsdGVyZWRJbnN0cnVjdGlvbnMpO1xuICBpZiAob3JkZXJlZEFjY291bnRzLmxlbmd0aCA+IE1BWF9BQ0NPVU5UUykge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICBgVG9vIG1hbnkgYWNjb3VudHMgaW4gdjEgdHJhbnNhY3Rpb246ICR7b3JkZXJlZEFjY291bnRzLmxlbmd0aH0gKG1heCAke01BWF9BQ0NPVU5UU30pYFxuICAgICk7XG4gIH1cbiAgY29uc3QgbnVtU2lnbmVycyA9IG9yZGVyZWRBY2NvdW50cy5maWx0ZXIoKGEpID0+IGlzU2lnbmVyKGEucm9sZSkpLmxlbmd0aDtcbiAgaWYgKG51bVNpZ25lcnMgPiBNQVhfU0lHTkVSUykge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFRvbyBtYW55IHNpZ25lcnMgaW4gdjEgdHJhbnNhY3Rpb246ICR7bnVtU2lnbmVyc30gKG1heCAke01BWF9TSUdORVJTfSlgKTtcbiAgfVxuICBpZiAoZmlsdGVyZWRJbnN0cnVjdGlvbnMubGVuZ3RoID4gTUFYX0lOU1RSVUNUSU9OUykge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICBgVG9vIG1hbnkgaW5zdHJ1Y3Rpb25zIGluIHYxIHRyYW5zYWN0aW9uOiAke2ZpbHRlcmVkSW5zdHJ1Y3Rpb25zLmxlbmd0aH0gKG1heCAke01BWF9JTlNUUlVDVElPTlN9KWBcbiAgICApO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVyZWRJbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZmlsdGVyZWRJbnN0cnVjdGlvbnNbaV0ua2V5cy5sZW5ndGggPiBNQVhfQUNDT1VOVFNfUEVSX0lOU1RSVUNUSU9OKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgVG9vIG1hbnkgYWNjb3VudHMgaW4gaW5zdHJ1Y3Rpb24gJHtpfTogJHtmaWx0ZXJlZEluc3RydWN0aW9uc1tpXS5rZXlzLmxlbmd0aH0gKG1heCAke01BWF9BQ0NPVU5UU19QRVJfSU5TVFJVQ1RJT059KWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGVhZGVyID0gY29tcHV0ZUhlYWRlcihvcmRlcmVkQWNjb3VudHMpO1xuICBjb25zdCB7IG1hc2ssIHZhbHVlcyB9ID0gZW5jb2RlQ29uZmlnTWFza0FuZFZhbHVlcyhjb25maWcpO1xuICBjb25zdCBjb21waWxlZEluc3RydWN0aW9ucyA9IGNvbXBpbGVJbnN0cnVjdGlvbnMoZmlsdGVyZWRJbnN0cnVjdGlvbnMsIG9yZGVyZWRBY2NvdW50cyk7XG5cbiAgcmV0dXJuIGVuY29kZVYxTWVzc2FnZSh7XG4gICAgaGVhZGVyLFxuICAgIGNvbmZpZ01hc2s6IG1hc2ssXG4gICAgY29uZmlnVmFsdWVzOiB2YWx1ZXMsXG4gICAgYmxvY2toYXNoOiByZWNlbnRCbG9ja2hhc2gsXG4gICAgc3RhdGljQWNjb3VudHM6IG9yZGVyZWRBY2NvdW50cy5tYXAoKGFjY291bnQpID0+IGFjY291bnQuYWRkcmVzcyksXG4gICAgY29tcGlsZWRJbnN0cnVjdGlvbnMsXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Assemble the v1 wire format of a signed transaction.
3
+ *
4
+ * Unlike legacy and v0 transactions, where signatures are prefixed before the
5
+ * message, a v1 transaction places the message first and appends the signatures
6
+ * at the tail with no length prefix; the signature count is derived from the
7
+ * message header's numRequiredSignatures.
8
+ *
9
+ * @param messageBytes - The serialized v1 message bytes (starting with the 0x81 version prefix)
10
+ * @param signatures - The ed25519 signatures over the message bytes, one per required signer
11
+ * @returns The full v1 wire transaction bytes
12
+ */
13
+ export declare function serializeWireTransaction(messageBytes: Uint8Array, signatures: Uint8Array[]): Uint8Array;
14
+ //# sourceMappingURL=wire-transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-transaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/serialization/wire-transaction.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,UAAU,CA+CvG"}
@@ -0,0 +1,48 @@
1
+ import { BuildTransactionError } from '@bitgo-beta/sdk-core';
2
+ const SIGNATURE_BYTE_LENGTH = 64;
3
+ const V1_VERSION_PREFIX = 0x81;
4
+ const V1_TRANSACTION_SIZE_LIMIT = 4096;
5
+ /**
6
+ * Assemble the v1 wire format of a signed transaction.
7
+ *
8
+ * Unlike legacy and v0 transactions, where signatures are prefixed before the
9
+ * message, a v1 transaction places the message first and appends the signatures
10
+ * at the tail with no length prefix; the signature count is derived from the
11
+ * message header's numRequiredSignatures.
12
+ *
13
+ * @param messageBytes - The serialized v1 message bytes (starting with the 0x81 version prefix)
14
+ * @param signatures - The ed25519 signatures over the message bytes, one per required signer
15
+ * @returns The full v1 wire transaction bytes
16
+ */
17
+ export function serializeWireTransaction(messageBytes, signatures) {
18
+ if (!messageBytes || messageBytes.length === 0) {
19
+ throw new BuildTransactionError('messageBytes is required to serialize a v1 transaction');
20
+ }
21
+ if (!signatures || signatures.length === 0) {
22
+ throw new BuildTransactionError('At least one signature is required to serialize a v1 transaction');
23
+ }
24
+ for (const signature of signatures) {
25
+ if (signature.length !== SIGNATURE_BYTE_LENGTH) {
26
+ throw new BuildTransactionError(`Invalid signature length: expected ${SIGNATURE_BYTE_LENGTH} bytes, got ${signature.length}`);
27
+ }
28
+ }
29
+ if (messageBytes[0] !== V1_VERSION_PREFIX) {
30
+ throw new BuildTransactionError(`Invalid v1 message: expected version prefix 0x${V1_VERSION_PREFIX.toString(16)}, got 0x${messageBytes[0].toString(16)}`);
31
+ }
32
+ if (messageBytes[1] !== signatures.length) {
33
+ throw new BuildTransactionError(`Signature count mismatch: message declares ${messageBytes[1]} required signers but ${signatures.length} were provided`);
34
+ }
35
+ const totalLength = messageBytes.length + signatures.length * SIGNATURE_BYTE_LENGTH;
36
+ if (totalLength > V1_TRANSACTION_SIZE_LIMIT) {
37
+ throw new BuildTransactionError(`v1 transaction exceeds the ${V1_TRANSACTION_SIZE_LIMIT}-byte size limit: ${totalLength} bytes`);
38
+ }
39
+ const buffer = new Uint8Array(totalLength);
40
+ buffer.set(messageBytes, 0);
41
+ let offset = messageBytes.length;
42
+ for (const signature of signatures) {
43
+ buffer.set(signature, offset);
44
+ offset += SIGNATURE_BYTE_LENGTH;
45
+ }
46
+ return buffer;
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS10cmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VyaWFsaXphdGlvbi93aXJlLXRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQy9CLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDO0FBRXZDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLFlBQXdCLEVBQUUsVUFBd0I7SUFDekYsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFDRCxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLHFCQUFxQixDQUFDLGtFQUFrRSxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7UUFDbkMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLHFCQUFxQixFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLHFCQUFxQixDQUM3QixzQ0FBc0MscUJBQXFCLGVBQWUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUM3RixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxxQkFBcUIsQ0FDN0IsaURBQWlELGlCQUFpQixDQUFDLFFBQVEsQ0FDekUsRUFBRSxDQUNILFdBQVcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUkscUJBQXFCLENBQzdCLDhDQUE4QyxZQUFZLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixVQUFVLENBQUMsTUFBTSxnQkFBZ0IsQ0FDeEgsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcscUJBQXFCLENBQUM7SUFDcEYsSUFBSSxXQUFXLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztRQUM1QyxNQUFNLElBQUkscUJBQXFCLENBQzdCLDhCQUE4Qix5QkFBeUIscUJBQXFCLFdBQVcsUUFBUSxDQUNoRyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTVCLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDakMsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUkscUJBQXFCLENBQUM7SUFDbEMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmNvbnN0IFNJR05BVFVSRV9CWVRFX0xFTkdUSCA9IDY0O1xuY29uc3QgVjFfVkVSU0lPTl9QUkVGSVggPSAweDgxO1xuY29uc3QgVjFfVFJBTlNBQ1RJT05fU0laRV9MSU1JVCA9IDQwOTY7XG5cbi8qKlxuICogQXNzZW1ibGUgdGhlIHYxIHdpcmUgZm9ybWF0IG9mIGEgc2lnbmVkIHRyYW5zYWN0aW9uLlxuICpcbiAqIFVubGlrZSBsZWdhY3kgYW5kIHYwIHRyYW5zYWN0aW9ucywgd2hlcmUgc2lnbmF0dXJlcyBhcmUgcHJlZml4ZWQgYmVmb3JlIHRoZVxuICogbWVzc2FnZSwgYSB2MSB0cmFuc2FjdGlvbiBwbGFjZXMgdGhlIG1lc3NhZ2UgZmlyc3QgYW5kIGFwcGVuZHMgdGhlIHNpZ25hdHVyZXNcbiAqIGF0IHRoZSB0YWlsIHdpdGggbm8gbGVuZ3RoIHByZWZpeDsgdGhlIHNpZ25hdHVyZSBjb3VudCBpcyBkZXJpdmVkIGZyb20gdGhlXG4gKiBtZXNzYWdlIGhlYWRlcidzIG51bVJlcXVpcmVkU2lnbmF0dXJlcy5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZUJ5dGVzIC0gVGhlIHNlcmlhbGl6ZWQgdjEgbWVzc2FnZSBieXRlcyAoc3RhcnRpbmcgd2l0aCB0aGUgMHg4MSB2ZXJzaW9uIHByZWZpeClcbiAqIEBwYXJhbSBzaWduYXR1cmVzIC0gVGhlIGVkMjU1MTkgc2lnbmF0dXJlcyBvdmVyIHRoZSBtZXNzYWdlIGJ5dGVzLCBvbmUgcGVyIHJlcXVpcmVkIHNpZ25lclxuICogQHJldHVybnMgVGhlIGZ1bGwgdjEgd2lyZSB0cmFuc2FjdGlvbiBieXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplV2lyZVRyYW5zYWN0aW9uKG1lc3NhZ2VCeXRlczogVWludDhBcnJheSwgc2lnbmF0dXJlczogVWludDhBcnJheVtdKTogVWludDhBcnJheSB7XG4gIGlmICghbWVzc2FnZUJ5dGVzIHx8IG1lc3NhZ2VCeXRlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdtZXNzYWdlQnl0ZXMgaXMgcmVxdWlyZWQgdG8gc2VyaWFsaXplIGEgdjEgdHJhbnNhY3Rpb24nKTtcbiAgfVxuICBpZiAoIXNpZ25hdHVyZXMgfHwgc2lnbmF0dXJlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBdCBsZWFzdCBvbmUgc2lnbmF0dXJlIGlzIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBhIHYxIHRyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSB7XG4gICAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IFNJR05BVFVSRV9CWVRFX0xFTkdUSCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEludmFsaWQgc2lnbmF0dXJlIGxlbmd0aDogZXhwZWN0ZWQgJHtTSUdOQVRVUkVfQllURV9MRU5HVEh9IGJ5dGVzLCBnb3QgJHtzaWduYXR1cmUubGVuZ3RofWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1lc3NhZ2VCeXRlc1swXSAhPT0gVjFfVkVSU0lPTl9QUkVGSVgpIHtcbiAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgYEludmFsaWQgdjEgbWVzc2FnZTogZXhwZWN0ZWQgdmVyc2lvbiBwcmVmaXggMHgke1YxX1ZFUlNJT05fUFJFRklYLnRvU3RyaW5nKFxuICAgICAgICAxNlxuICAgICAgKX0sIGdvdCAweCR7bWVzc2FnZUJ5dGVzWzBdLnRvU3RyaW5nKDE2KX1gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChtZXNzYWdlQnl0ZXNbMV0gIT09IHNpZ25hdHVyZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgIGBTaWduYXR1cmUgY291bnQgbWlzbWF0Y2g6IG1lc3NhZ2UgZGVjbGFyZXMgJHttZXNzYWdlQnl0ZXNbMV19IHJlcXVpcmVkIHNpZ25lcnMgYnV0ICR7c2lnbmF0dXJlcy5sZW5ndGh9IHdlcmUgcHJvdmlkZWRgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRvdGFsTGVuZ3RoID0gbWVzc2FnZUJ5dGVzLmxlbmd0aCArIHNpZ25hdHVyZXMubGVuZ3RoICogU0lHTkFUVVJFX0JZVEVfTEVOR1RIO1xuICBpZiAodG90YWxMZW5ndGggPiBWMV9UUkFOU0FDVElPTl9TSVpFX0xJTUlUKSB7XG4gICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgIGB2MSB0cmFuc2FjdGlvbiBleGNlZWRzIHRoZSAke1YxX1RSQU5TQUNUSU9OX1NJWkVfTElNSVR9LWJ5dGUgc2l6ZSBsaW1pdDogJHt0b3RhbExlbmd0aH0gYnl0ZXNgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgYnVmZmVyLnNldChtZXNzYWdlQnl0ZXMsIDApO1xuXG4gIGxldCBvZmZzZXQgPSBtZXNzYWdlQnl0ZXMubGVuZ3RoO1xuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSB7XG4gICAgYnVmZmVyLnNldChzaWduYXR1cmUsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IFNJR05BVFVSRV9CWVRFX0xFTkdUSDtcbiAgfVxuXG4gIHJldHVybiBidWZmZXI7XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/sdk-coin-sol",
3
- "version": "7.6.4-beta.702",
3
+ "version": "7.6.4-beta.704",
4
4
  "description": "BitGo SDK coin library for Sol",
5
5
  "main": "./dist/cjs/src/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -56,10 +56,10 @@
56
56
  ]
57
57
  },
58
58
  "dependencies": {
59
- "@bitgo-beta/logger": "1.0.1-beta.494",
60
- "@bitgo-beta/sdk-core": "8.2.1-beta.2067",
61
- "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.2076",
62
- "@bitgo-beta/statics": "15.1.1-beta.2095",
59
+ "@bitgo-beta/logger": "1.0.1-beta.496",
60
+ "@bitgo-beta/sdk-core": "8.2.1-beta.2069",
61
+ "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.2078",
62
+ "@bitgo-beta/statics": "15.1.1-beta.2097",
63
63
  "@bitgo/public-types": "6.75.0",
64
64
  "@bitgo/wasm-solana": "^2.6.0",
65
65
  "@solana/buffer-layout": "^4.0.1",
@@ -73,11 +73,11 @@
73
73
  "tweetnacl": "^1.0.3"
74
74
  },
75
75
  "devDependencies": {
76
- "@bitgo-beta/sdk-api": "1.10.1-beta.2059",
76
+ "@bitgo-beta/sdk-api": "1.10.1-beta.2061",
77
77
  "@bitgo-beta/sdk-test": "^9.1.80",
78
78
  "@types/lodash": "^4.14.121"
79
79
  },
80
- "gitHead": "75a1e9f973ce987e33ca2aaf5e5124e03739d035",
80
+ "gitHead": "17464c2623c873c1cb37dde34a7323876b49c76b",
81
81
  "files": [
82
82
  "dist/cjs",
83
83
  "dist/esm"