@bsv/templates 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/cjs/mod.js +22 -7
  2. package/dist/cjs/mod.js.map +1 -1
  3. package/dist/cjs/package.json +2 -2
  4. package/dist/cjs/src/Metanet.js +14 -14
  5. package/dist/cjs/src/Metanet.js.map +1 -1
  6. package/dist/cjs/src/MultiPushDrop.js +278 -0
  7. package/dist/cjs/src/MultiPushDrop.js.map +1 -0
  8. package/dist/cjs/src/OpReturn.js +13 -13
  9. package/dist/cjs/src/OpReturn.js.map +1 -1
  10. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  11. package/dist/esm/mod.js +1 -0
  12. package/dist/esm/mod.js.map +1 -1
  13. package/dist/esm/src/Metanet.js +14 -14
  14. package/dist/esm/src/Metanet.js.map +1 -1
  15. package/dist/esm/src/MultiPushDrop.js +275 -0
  16. package/dist/esm/src/MultiPushDrop.js.map +1 -0
  17. package/dist/esm/src/OpReturn.js +13 -13
  18. package/dist/esm/src/OpReturn.js.map +1 -1
  19. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  20. package/dist/types/mod.d.ts +1 -0
  21. package/dist/types/mod.d.ts.map +1 -1
  22. package/dist/types/src/Metanet.d.ts +13 -13
  23. package/dist/types/src/Metanet.d.ts.map +1 -1
  24. package/dist/types/src/MultiPushDrop.d.ts +66 -0
  25. package/dist/types/src/MultiPushDrop.d.ts.map +1 -0
  26. package/dist/types/src/OpReturn.d.ts +12 -12
  27. package/dist/types/src/OpReturn.d.ts.map +1 -1
  28. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  29. package/mod.ts +1 -0
  30. package/package.json +4 -4
  31. package/src/Metanet.ts +37 -37
  32. package/src/MultiPushDrop.ts +317 -0
  33. package/src/OpReturn.ts +32 -32
  34. package/src/__tests/Metanet.test.ts +15 -15
  35. package/src/__tests/MultiPushDrop.test.ts +256 -0
  36. package/src/__tests/OpReturn.test.ts +7 -7
package/dist/cjs/mod.js CHANGED
@@ -15,16 +15,31 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
37
  };
25
38
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.Metanet = exports.OpReturn = void 0;
39
+ exports.MultiPushDrop = exports.Metanet = exports.OpReturn = void 0;
27
40
  // Script Templates
28
41
  exports.OpReturn = __importStar(require("./src/OpReturn.js"));
29
42
  exports.Metanet = __importStar(require("./src/Metanet.js"));
43
+ var MultiPushDrop_js_1 = require("./src/MultiPushDrop.js");
44
+ Object.defineProperty(exports, "MultiPushDrop", { enumerable: true, get: function () { return __importDefault(MultiPushDrop_js_1).default; } });
30
45
  //# sourceMappingURL=mod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../mod.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mBAAmB;AACnB,8DAA6C;AAC7C,4DAA2C"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../mod.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mBAAmB;AACnB,8DAA6C;AAC7C,4DAA2C;AAC3C,2DAAiE;AAAxD,kIAAA,OAAO,OAAiB"}
@@ -13,7 +13,7 @@
13
13
  "test": "npm run build && jest",
14
14
  "test:watch": "npm run build && jest --watch",
15
15
  "test:coverage": "npm run build && jest --coverage",
16
- "lint": "ts-standard --fix src/**/*.ts",
16
+ "lint": "ts-standard --fix 'src/**/*.ts'",
17
17
  "build": "tsc -b && tsconfig-to-dual-package tsconfig.cjs.json",
18
18
  "dev": "tsc -b -w",
19
19
  "prepublish": "npm run build"
@@ -45,6 +45,6 @@
45
45
  "typescript": "^5.2.2"
46
46
  },
47
47
  "dependencies": {
48
- "@bsv/sdk": "^1.0.20"
48
+ "@bsv/sdk": "^1.4.12"
49
49
  }
50
50
  }
@@ -8,17 +8,17 @@ const sdk_1 = require("@bsv/sdk");
8
8
  */
9
9
  class Metanet {
10
10
  /**
11
- * Creates a Metanet output script
12
- *
13
- * @param {PublicKey} pubkey the public key responsible for the metanet node
14
- * @param {string} parentTXID the TXID of the parent metanet transaction or null for root node
15
- * @param {string[]} data the output data, an array of metadata ending in data payload
16
- * @returns {LockingScript} - A Metanet locking script.
17
- *
18
- * @example
19
- * // creates a root metanet output with 'subprotocol' and 'filename' metadata followed by data
20
- * lock(pubkey, null, txid, ['subprotocol', 'filename', data ])
21
- */
11
+ * Creates a Metanet output script
12
+ *
13
+ * @param {PublicKey} pubkey the public key responsible for the metanet node
14
+ * @param {string} parentTXID the TXID of the parent metanet transaction or null for root node
15
+ * @param {string[]} data the output data, an array of metadata ending in data payload
16
+ * @returns {LockingScript} - A Metanet locking script.
17
+ *
18
+ * @example
19
+ * // creates a root metanet output with 'subprotocol' and 'filename' metadata followed by data
20
+ * lock(pubkey, null, txid, ['subprotocol', 'filename', data ])
21
+ */
22
22
  lock(pubkey, parentTXID, data = []) {
23
23
  const script = [
24
24
  { op: sdk_1.OP.OP_FALSE },
@@ -27,7 +27,7 @@ class Metanet {
27
27
  const fields = [
28
28
  'meta',
29
29
  pubkey.toString(),
30
- parentTXID || 'null'
30
+ parentTXID !== null && parentTXID !== void 0 ? parentTXID : 'null'
31
31
  ].concat(data);
32
32
  for (const field of fields.filter(Boolean)) {
33
33
  script.push({ op: field.length, data: sdk_1.Utils.toArray(field) });
@@ -35,8 +35,8 @@ class Metanet {
35
35
  return new sdk_1.LockingScript(script);
36
36
  }
37
37
  /**
38
- * Unlock method is not available for Metanet scripts, throws exception.
39
- */
38
+ * Unlock method is not available for Metanet scripts, throws exception.
39
+ */
40
40
  unlock() {
41
41
  throw new Error('Unlock is not supported for Metanet scripts');
42
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Metanet.js","sourceRoot":"","sources":["../../../src/Metanet.ts"],"names":[],"mappings":";;AAAA,kCAA4G;AAE5G;;;;GAIG;AACH,MAAqB,OAAO;IACxB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,MAAiB,EAAE,UAAyB,EAAE,OAA0B,EAAE;QAC3E,MAAM,MAAM,GAAsC;YAC9C,EAAE,EAAE,EAAE,QAAE,CAAC,QAAQ,EAAE;YACnB,EAAE,EAAE,EAAE,QAAE,CAAC,SAAS,EAAE;SACvB,CAAA;QAED,MAAM,MAAM,GAAG;YACX,MAAM;YACN,MAAM,CAAC,QAAQ,EAAE;YACjB,UAAU,IAAI,MAAM;SACvB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEd,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,WAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACjE,CAAC;QAED,OAAO,IAAI,mBAAa,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IAED;;OAEG;IACH,MAAM;QAIF,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAClE,CAAC;CACJ;AAzCD,0BAyCC"}
1
+ {"version":3,"file":"Metanet.js","sourceRoot":"","sources":["../../../src/Metanet.ts"],"names":[],"mappings":";;AAAA,kCAA4G;AAE5G;;;;GAIG;AACH,MAAqB,OAAO;IAC1B;;;;;;;;;;;KAWC;IACD,IAAI,CAAE,MAAiB,EAAE,UAAyB,EAAE,OAA0B,EAAE;QAC9E,MAAM,MAAM,GAA2C;YACrD,EAAE,EAAE,EAAE,QAAE,CAAC,QAAQ,EAAE;YACnB,EAAE,EAAE,EAAE,QAAE,CAAC,SAAS,EAAE;SACrB,CAAA;QAED,MAAM,MAAM,GAAG;YACb,MAAM;YACN,MAAM,CAAC,QAAQ,EAAE;YACjB,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,MAAM;SACrB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEd,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,WAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC/D,CAAC;QAED,OAAO,IAAI,mBAAa,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;IAED;;QAEI;IACJ,MAAM;QAIJ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAChE,CAAC;CACF;AAzCD,0BAyCC"}
@@ -0,0 +1,278 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sdk_1 = require("@bsv/sdk");
4
+ // Helper to ensure a value is not null or undefined
5
+ function verifyTruthy(v, err) {
6
+ if (v === null || v === undefined)
7
+ throw new Error(err || 'Value must not be null or undefined');
8
+ return v;
9
+ }
10
+ // Helper to create minimally encoded script chunks (same as in PushDrop)
11
+ const createMinimallyEncodedScriptChunk = (data) => {
12
+ if (data.length === 0)
13
+ return { op: 0 }; // OP_0
14
+ if (data.length === 1 && data[0] === 0)
15
+ return { op: 0 }; // OP_0
16
+ if (data.length === 1 && data[0] > 0 && data[0] <= 16)
17
+ return { op: 0x50 + data[0] }; // OP_1 to OP_16
18
+ if (data.length === 1 && data[0] === 0x81)
19
+ return { op: 0x4f }; // OP_1NEGATE
20
+ if (data.length <= 75)
21
+ return { op: data.length, data };
22
+ if (data.length <= 255)
23
+ return { op: 0x4c, data }; // OP_PUSHDATA1
24
+ if (data.length <= 65535)
25
+ return { op: 0x4d, data }; // OP_PUSHDATA2
26
+ return { op: 0x4e, data }; // OP_PUSHDATA4
27
+ };
28
+ /**
29
+ * MultiPushDrop Script Template
30
+ *
31
+ * This template creates locking scripts that allow spending by any one of multiple
32
+ * specified public keys (1-of-N). It also pushes arbitrary data fields onto the stack,
33
+ * which are dropped after the signature check.
34
+ *
35
+ * When using this among adversarial or non-trusted groups, the MASSIVE caveat is that
36
+ * there is no constraint enforcing that any group members are kept in the loop. Any group
37
+ * member can trivially destroy the token. For more practical non-trusted arrangements,
38
+ * techniques like OP_PUSH_TX should be used instead.
39
+ *
40
+ * There's also a known bug in this implementation where it won't work with over around 120
41
+ * keys but involving more than a few people than just a few into a FULLY TRUST BASED exchange
42
+ * is never a good idea. Use a more robust, application-specific mechanism.
43
+ */
44
+ class MultiPushDrop {
45
+ /**
46
+ * Decodes a MultiPushDrop locking script back into its data fields and the list of locking public keys.
47
+ * @param script The MultiPushDrop locking script to decode.
48
+ * @returns {MultiPushDropDecoded} An object containing the locking public keys and data fields.
49
+ * @throws {Error} If the script structure is not a valid MultiPushDrop script.
50
+ */
51
+ static decode(script) {
52
+ var _a, _b, _c;
53
+ const chunks = script.chunks;
54
+ let cursor = 0;
55
+ // Decode keys until they stop being 33 bytes long
56
+ const lockingPublicKeys = [];
57
+ while (((_a = chunks[cursor].data) === null || _a === void 0 ? void 0 : _a.length) === 33) {
58
+ const keyChunk = verifyTruthy(chunks[cursor], `Missing public key chunk ${cursor}`);
59
+ const keyData = verifyTruthy(keyChunk.data, `Public key chunk ${cursor} has no data`);
60
+ lockingPublicKeys.push(sdk_1.Utils.toHex(keyData));
61
+ cursor++;
62
+ }
63
+ // Skip the nPublicKeys chunk and opcodes.
64
+ // This amounts to 8 items to skip.
65
+ cursor += 8;
66
+ // Decode Data Fields
67
+ const fields = [];
68
+ for (let i = cursor; i < chunks.length; i++) {
69
+ const nextOpcode = (_b = chunks[i + 1]) === null || _b === void 0 ? void 0 : _b.op;
70
+ const chunkData = (_c = chunks[i].data) !== null && _c !== void 0 ? _c : []; // Use OP code for OP_0-OP_16 etc. if data is null
71
+ let currentField = [];
72
+ if (chunkData.length > 0) {
73
+ currentField = chunkData;
74
+ }
75
+ else if (chunks[i].op >= sdk_1.OP.OP_1 && chunks[i].op <= sdk_1.OP.OP_16) {
76
+ currentField = [chunks[i].op - sdk_1.OP.OP_1 + 1];
77
+ }
78
+ else if (chunks[i].op === sdk_1.OP.OP_0) {
79
+ currentField = []; // Represent OP_0 as empty array
80
+ }
81
+ else if (chunks[i].op === sdk_1.OP.OP_1NEGATE) {
82
+ currentField = [0x81];
83
+ }
84
+ else if (chunks[i].op === sdk_1.OP.OP_DROP || chunks[i].op === sdk_1.OP.OP_2DROP) {
85
+ // Stop before the drops
86
+ break;
87
+ }
88
+ else {
89
+ // Assume it's a data push even if data is empty for some reason
90
+ currentField = chunkData;
91
+ }
92
+ fields.push(currentField);
93
+ // If the next opcode is a DROP, we've found the last field
94
+ if (nextOpcode === sdk_1.OP.OP_DROP || nextOpcode === sdk_1.OP.OP_2DROP) {
95
+ break;
96
+ }
97
+ }
98
+ return {
99
+ lockingPublicKeys,
100
+ fields
101
+ };
102
+ }
103
+ /**
104
+ * Constructs a new instance of the MultiPushDrop class.
105
+ *
106
+ * @param {WalletInterface} wallet - The wallet interface used for deriving keys and signing.
107
+ * @param {string} [originator] - The originator domain for wallet requests.
108
+ */
109
+ constructor(wallet, originator) {
110
+ this.wallet = wallet;
111
+ this.originator = originator;
112
+ }
113
+ /**
114
+ * Creates a MultiPushDrop locking script.
115
+ *
116
+ * @param {number[][]} fields - The arbitrary data fields to include in the script.
117
+ * @param {[SecurityLevel, string]} protocolID - The protocol ID used for key derivation.
118
+ * @param {string} keyID - The key ID used for key derivation.
119
+ * @param {WalletCounterparty[]} counterparties - An array of counterparties ('self' or PubKeyHex) whose derived keys can unlock the script. Must contain at least one.
120
+ * @returns {Promise<LockingScript>} The generated MultiPushDrop locking script.
121
+ * @throws {Error} If counterparties array is empty.
122
+ */
123
+ async lock(fields, protocolID, keyID, counterparties) {
124
+ if (!Array.isArray(counterparties) || counterparties.length === 0) {
125
+ throw new Error('MultiPushDrop requires at least one counterparty.');
126
+ }
127
+ const publicKeys = [];
128
+ for (const counterparty of counterparties) {
129
+ const { publicKey } = await this.wallet.getPublicKey({
130
+ protocolID,
131
+ keyID,
132
+ counterparty
133
+ }, this.originator);
134
+ publicKeys.push(publicKey);
135
+ }
136
+ const nPublicKeys = publicKeys.length;
137
+ const lockPart = [];
138
+ // Push Public Keys
139
+ for (const publicKeyHex of publicKeys) {
140
+ lockPart.push({
141
+ op: publicKeyHex.length / 2, // Length of compressed pubkey is 33 bytes (66 hex)
142
+ data: sdk_1.Utils.toArray(publicKeyHex, 'hex')
143
+ });
144
+ }
145
+ // Pick the value on the stack that's right before the locking script.
146
+ // This should be the index of the key to use in the unlock.
147
+ lockPart.push(createMinimallyEncodedScriptChunk([nPublicKeys]));
148
+ lockPart.push({ op: sdk_1.OP.OP_PICK });
149
+ // Now we use the index to get the actual key.
150
+ lockPart.push({ op: sdk_1.OP.OP_PICK });
151
+ // We pull the signature from the bottom of the stack, no matter the number of keys.
152
+ lockPart.push({ op: sdk_1.OP.OP_DEPTH });
153
+ lockPart.push({ op: sdk_1.OP.OP_1SUB });
154
+ lockPart.push({ op: sdk_1.OP.OP_PICK });
155
+ // We swap the signature and public key so they're in the correct order, then CHECKSIGVERIFY
156
+ lockPart.push({ op: sdk_1.OP.OP_SWAP });
157
+ lockPart.push({ op: sdk_1.OP.OP_CHECKSIGVERIFY });
158
+ // Construct PushDrop Part for fields
159
+ const pushDropPart = [];
160
+ for (const field of fields) {
161
+ pushDropPart.push(createMinimallyEncodedScriptChunk(field));
162
+ }
163
+ // Add Drop Opcodes
164
+ // We need to drop N keys, the number N itself, and M fields after verification succeeds.
165
+ // We also copied the signature itself so we need to drop that.
166
+ // Then we push a single true.
167
+ let itemsToDrop = fields.length + nPublicKeys + 2;
168
+ while (itemsToDrop > 1) {
169
+ pushDropPart.push({ op: sdk_1.OP.OP_2DROP });
170
+ itemsToDrop -= 2;
171
+ }
172
+ if (itemsToDrop === 1) {
173
+ pushDropPart.push({ op: sdk_1.OP.OP_DROP });
174
+ }
175
+ // Combine parts and return
176
+ return new sdk_1.LockingScript([
177
+ ...lockPart,
178
+ ...pushDropPart,
179
+ { op: sdk_1.OP.OP_TRUE }
180
+ ]);
181
+ }
182
+ /**
183
+ * Creates an unlocking script template for spending a MultiPushDrop output.
184
+ *
185
+ * @param {[SecurityLevel, string]} protocolID - The protocol ID used for key derivation.
186
+ * @param {string} keyID - The key ID used for key derivation.
187
+ * @param {WalletCounterparty} creator - The identity key of the person who made the locking script. Could come from one of the fields or be passed off chain.
188
+ * @param {'all' | 'none' | 'single'} [signOutputs='all'] - Specifies which transaction outputs to sign.
189
+ * @param {boolean} [anyoneCanPay=false] - Specifies if the SIGHASH_ANYONECANPAY flag should be used.
190
+ * @returns {ScriptTemplateUnlock} An object containing `sign` and `estimateLength` functions.
191
+ * @throws {Error} If we are not found in the list of keys, or if required signing info (sourceTXID, satoshis, lockingScript) is missing.
192
+ */
193
+ unlock(protocolID, keyID, creator, signOutputs = 'all', anyoneCanPay = false) {
194
+ return {
195
+ sign: async (tx, inputIndex) => {
196
+ var _a, _b, _c, _d, _e, _f;
197
+ // Prepare for signing
198
+ let signatureScope = sdk_1.TransactionSignature.SIGHASH_FORKID;
199
+ if (signOutputs === 'all')
200
+ signatureScope |= sdk_1.TransactionSignature.SIGHASH_ALL;
201
+ else if (signOutputs === 'none')
202
+ signatureScope |= sdk_1.TransactionSignature.SIGHASH_NONE;
203
+ else if (signOutputs === 'single')
204
+ signatureScope |= sdk_1.TransactionSignature.SIGHASH_SINGLE;
205
+ if (anyoneCanPay)
206
+ signatureScope |= sdk_1.TransactionSignature.SIGHASH_ANYONECANPAY;
207
+ const input = tx.inputs[inputIndex];
208
+ const currentSourceTXID = (_a = input.sourceTXID) !== null && _a !== void 0 ? _a : (_b = input.sourceTransaction) === null || _b === void 0 ? void 0 : _b.id('hex');
209
+ const currentSourceSatoshis = (_c = input.sourceTransaction) === null || _c === void 0 ? void 0 : _c.outputs[input.sourceOutputIndex].satoshis;
210
+ const currentLockingScript = (_e = (_d = input.sourceTransaction) === null || _d === void 0 ? void 0 : _d.outputs[input.sourceOutputIndex]) === null || _e === void 0 ? void 0 : _e.lockingScript;
211
+ if (typeof currentSourceTXID !== 'string')
212
+ throw new Error('Input sourceTXID or sourceTransaction required for signing.');
213
+ if (currentSourceSatoshis === undefined)
214
+ throw new Error('Input sourceSatoshis or sourceTransaction required for signing.');
215
+ if (currentLockingScript == null)
216
+ throw new Error('Input lockingScript or sourceTransaction required for signing.');
217
+ const otherInputs = tx.inputs.filter((_, index) => index !== inputIndex);
218
+ const decoded = MultiPushDrop.decode(currentLockingScript);
219
+ // Find the index of the unlocker's public key
220
+ let unlockerIndex = -1;
221
+ const { publicKey: unlockerPubKeyHex } = await this.wallet.getPublicKey({
222
+ protocolID,
223
+ keyID,
224
+ counterparty: creator,
225
+ forSelf: true
226
+ }, this.originator);
227
+ for (let i = 0; i < decoded.lockingPublicKeys.length; i++) {
228
+ if (decoded.lockingPublicKeys[i] === unlockerPubKeyHex) {
229
+ unlockerIndex = i;
230
+ break;
231
+ }
232
+ }
233
+ if (unlockerIndex === -1) {
234
+ throw new Error(`Unlocker key derived for counterparty (creator) "${creator}" not found in the list of locking keys.`);
235
+ }
236
+ unlockerIndex = decoded.lockingPublicKeys.length - 1 - unlockerIndex;
237
+ // Calculate Preimage
238
+ const preimage = sdk_1.TransactionSignature.format({
239
+ sourceTXID: currentSourceTXID,
240
+ sourceOutputIndex: verifyTruthy(input.sourceOutputIndex),
241
+ sourceSatoshis: currentSourceSatoshis,
242
+ transactionVersion: tx.version,
243
+ otherInputs,
244
+ inputIndex,
245
+ outputs: tx.outputs,
246
+ inputSequence: (_f = input.sequence) !== null && _f !== void 0 ? _f : 0xffffffff,
247
+ subscript: currentLockingScript,
248
+ lockTime: tx.lockTime,
249
+ scope: signatureScope
250
+ });
251
+ // Create Signature
252
+ const preimageHash = sdk_1.Hash.hash256(preimage);
253
+ const { signature: bareSignature } = await this.wallet.createSignature({
254
+ hashToDirectlySign: preimageHash,
255
+ protocolID,
256
+ keyID,
257
+ counterparty: creator
258
+ }, this.originator);
259
+ const signature = sdk_1.Signature.fromDER([...bareSignature]);
260
+ const txSignature = new sdk_1.TransactionSignature(signature.r, signature.s, signatureScope);
261
+ const sigForScript = txSignature.toChecksigFormat();
262
+ // Create Unlocking Script Chunks: <Signature> <Index>
263
+ const unlockingChunks = [];
264
+ unlockingChunks.push({ op: sigForScript.length, data: sigForScript });
265
+ unlockingChunks.push(createMinimallyEncodedScriptChunk([unlockerIndex]));
266
+ return new sdk_1.UnlockingScript(unlockingChunks);
267
+ },
268
+ // Estimate length: Signature (~71-73 bytes) + Index push (1 byte for 0-15, potentially more)
269
+ estimateLength: async () => {
270
+ // A conservative estimate, usually 73 + 1 = 74
271
+ // Could potentially be larger if index > 15, but that's rare.
272
+ return 74;
273
+ }
274
+ };
275
+ }
276
+ }
277
+ exports.default = MultiPushDrop;
278
+ //# sourceMappingURL=MultiPushDrop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiPushDrop.js","sourceRoot":"","sources":["../../../src/MultiPushDrop.ts"],"names":[],"mappings":"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"}
@@ -8,12 +8,12 @@ const sdk_1 = require("@bsv/sdk");
8
8
  */
9
9
  class OpReturn {
10
10
  /**
11
- * Creates an OpReturn script
12
- *
13
- * @param {string | string[] | number[]} data The data or array of data to push after OP_RETURN.
14
- * @param {('hex' | 'utf8' | 'base64')} enc The data encoding type, defaults to utf8.
15
- * @returns {LockingScript} - An OpReturn locking script.
16
- */
11
+ * Creates an OpReturn script
12
+ *
13
+ * @param {string | string[] | number[]} data The data or array of data to push after OP_RETURN.
14
+ * @param {('hex' | 'utf8' | 'base64')} enc The data encoding type, defaults to utf8.
15
+ * @returns {LockingScript} - An OpReturn locking script.
16
+ */
17
17
  lock(data, enc) {
18
18
  const script = [
19
19
  { op: sdk_1.OP.OP_FALSE },
@@ -22,7 +22,7 @@ class OpReturn {
22
22
  if (typeof data === 'string') {
23
23
  data = [data];
24
24
  }
25
- if (data.length && typeof data[0] === 'number') {
25
+ if ((data.length > 0) && typeof data[0] === 'number') {
26
26
  script.push({ op: data.length, data: data });
27
27
  }
28
28
  else {
@@ -34,16 +34,16 @@ class OpReturn {
34
34
  return new sdk_1.LockingScript(script);
35
35
  }
36
36
  /**
37
- * Unlock method is not available for OpReturn scripts, throws exception.
38
- */
37
+ * Unlock method is not available for OpReturn scripts, throws exception.
38
+ */
39
39
  unlock() {
40
40
  throw new Error('Unlock is not supported for OpReturn scripts');
41
41
  }
42
42
  /**
43
- * Decodes an OpReturn script data to utf8
44
- * @param script The opreturn script
45
- * @returns An array of UTF8 encoded strings
46
- */
43
+ * Decodes an OpReturn script data to utf8
44
+ * @param script The opreturn script
45
+ * @returns An array of UTF8 encoded strings
46
+ */
47
47
  static decode(script) {
48
48
  const tokens = script.toASM().split(' ').slice(2);
49
49
  return tokens.map(token => sdk_1.Utils.toUTF8(sdk_1.Utils.toArray(token, 'hex')));
@@ -1 +1 @@
1
- {"version":3,"file":"OpReturn.js","sourceRoot":"","sources":["../../../src/OpReturn.ts"],"names":[],"mappings":";;AAAA,kCAAyG;AAEzG;;;;GAIG;AACH,MAAqB,QAAQ;IACzB;;;;;;OAMG;IACH,IAAI,CAAC,IAAkC,EAAE,GAA+B;QACpE,MAAM,MAAM,GAAsC;YAC9C,EAAE,EAAE,EAAE,QAAE,CAAC,QAAQ,EAAE;YACnB,EAAE,EAAE,EAAE,QAAE,CAAC,SAAS,EAAE;SACvB,CAAA;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAgB,EAAE,CAAC,CAAA;QAC5D,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,MAAM,GAAG,GAAG,WAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;gBACrC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YAC9C,CAAC;QACL,CAAC;QAED,OAAO,IAAI,mBAAa,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IAED;;OAEG;IACH,MAAM;QAIF,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACnE,CAAC;IAED;;;;GAID;IACC,MAAM,CAAC,MAAM,CAAC,MAAc;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACjD,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAK,CAAC,MAAM,CAAC,WAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IACzE,CAAC;CACJ;AAjDD,2BAiDC"}
1
+ {"version":3,"file":"OpReturn.js","sourceRoot":"","sources":["../../../src/OpReturn.ts"],"names":[],"mappings":";;AAAA,kCAAyG;AAEzG;;;;GAIG;AACH,MAAqB,QAAQ;IAC3B;;;;;;SAMK;IACL,IAAI,CAAE,IAAkC,EAAE,GAA+B;QACvE,MAAM,MAAM,GAA2C;YACrD,EAAE,EAAE,EAAE,QAAE,CAAC,QAAQ,EAAE;YACnB,EAAE,EAAE,EAAE,QAAE,CAAC,SAAS,EAAE;SACrB,CAAA;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;QACf,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAgB,EAAE,CAAC,CAAA;QAC1D,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,MAAM,GAAG,GAAG,WAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;gBACrC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,mBAAa,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;IAED;;SAEK;IACL,MAAM;QAIJ,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IAED;;;;KAIC;IACD,MAAM,CAAC,MAAM,CAAE,MAAc;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACjD,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAK,CAAC,MAAM,CAAC,WAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IACvE,CAAC;CACF;AAjDD,2BAiDC"}