@bsv/templates 1.3.0 → 1.4.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.
package/dist/cjs/mod.js CHANGED
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MultiSigPubkeyHash = exports.MultiPushDrop = exports.OpReturn = void 0;
3
+ exports.P2MSKH = exports.MultiPushDrop = exports.OpReturn = void 0;
4
4
  // Script Templates
5
5
  var OpReturn_js_1 = require("./src/OpReturn.js");
6
6
  Object.defineProperty(exports, "OpReturn", { enumerable: true, get: function () { return OpReturn_js_1.OpReturn; } });
7
7
  var MultiPushDrop_js_1 = require("./src/MultiPushDrop.js");
8
8
  Object.defineProperty(exports, "MultiPushDrop", { enumerable: true, get: function () { return MultiPushDrop_js_1.MultiPushDrop; } });
9
- var MultiSigPubkeyHash_js_1 = require("./src/MultiSigPubkeyHash.js");
10
- Object.defineProperty(exports, "MultiSigPubkeyHash", { enumerable: true, get: function () { return MultiSigPubkeyHash_js_1.MultiSigPubkeyHash; } });
9
+ var P2MSKH_js_1 = require("./src/P2MSKH.js");
10
+ Object.defineProperty(exports, "P2MSKH", { enumerable: true, get: function () { return P2MSKH_js_1.P2MSKH; } });
11
11
  //# sourceMappingURL=mod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../mod.ts"],"names":[],"mappings":";;;AAAA,mBAAmB;AACnB,iDAA4C;AAAnC,uGAAA,QAAQ,OAAA;AACjB,2DAAsD;AAA7C,iHAAA,aAAa,OAAA;AACtB,qEAAgE;AAAvD,2HAAA,kBAAkB,OAAA"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../mod.ts"],"names":[],"mappings":";;;AAAA,mBAAmB;AACnB,iDAA4C;AAAnC,uGAAA,QAAQ,OAAA;AACjB,2DAAsD;AAA7C,iHAAA,aAAa,OAAA;AACtB,6CAAwC;AAA/B,mGAAA,MAAM,OAAA"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsv/templates",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "type": "commonjs",
5
5
  "description": "BSV Blockchain Script Templates",
6
6
  "files": [
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MultiSigPubkeyHash = void 0;
3
+ exports.P2MSKH = void 0;
4
4
  const sdk_1 = require("@bsv/sdk");
5
5
  function concatPubkeys(pubkeys) {
6
6
  return pubkeys.map((p) => p.toDER()).reduce((a, b) => a.concat(b), []);
7
7
  }
8
8
  function numberFromScriptChunk(chunk) {
9
9
  let returnNum;
10
- if (!chunk.data) {
11
- returnNum = 1 + chunk.op - sdk_1.OP.OP_1;
10
+ if (chunk.data == null) {
11
+ returnNum = 1 + (chunk.op) - sdk_1.OP.OP_1;
12
12
  }
13
13
  else {
14
14
  const reader = new sdk_1.Utils.Reader(chunk.data);
@@ -17,7 +17,7 @@ function numberFromScriptChunk(chunk) {
17
17
  }
18
18
  return returnNum;
19
19
  }
20
- class MultiSigPubkeyHash {
20
+ class P2MSKH {
21
21
  static address(pubkeys, threshold) {
22
22
  if (threshold < 1 || threshold > pubkeys.length)
23
23
  throw new Error('threshold must be between 1 and the number of pubkeys');
@@ -35,7 +35,7 @@ class MultiSigPubkeyHash {
35
35
  static async addressBRC29(wallet, counterparties, keyID, threshold) {
36
36
  const pubkeys = await Promise.all(counterparties.map(async (counterparty) => {
37
37
  const { publicKey } = await wallet.getPublicKey({
38
- protocolID: [1, "multi sig brc29"],
38
+ protocolID: [1, 'multi sig brc29'],
39
39
  keyID,
40
40
  counterparty
41
41
  });
@@ -60,14 +60,14 @@ class MultiSigPubkeyHash {
60
60
  if (address) {
61
61
  if (typeof address !== 'string')
62
62
  throw new Error('address must be a string');
63
- const result = MultiSigPubkeyHash.thresholdAndTotalFromAddress(address);
63
+ const result = P2MSKH.thresholdAndTotalFromAddress(address);
64
64
  hash = result.hash;
65
65
  total = result.total;
66
66
  threshold = result.threshold;
67
67
  }
68
68
  else {
69
- if (!pubkeys || total < 2)
70
- throw new Error(`at least 2 pubkeys are required`);
69
+ if ((pubkeys == null) || total < 2)
70
+ throw new Error('at least 2 pubkeys are required');
71
71
  const concat = concatPubkeys(pubkeys);
72
72
  hash = sdk_1.Hash.hash160(concat);
73
73
  }
@@ -76,9 +76,6 @@ class MultiSigPubkeyHash {
76
76
  if (total > 10)
77
77
  throw new Error('total must be less than or equal to 10');
78
78
  const script = new sdk_1.LockingScript();
79
- for (let i = 0; i < total - 1; i++) {
80
- script.writeOpCode(sdk_1.OP.OP_CAT);
81
- }
82
79
  script
83
80
  .writeOpCode(sdk_1.OP.OP_DUP)
84
81
  .writeOpCode(sdk_1.OP.OP_HASH160)
@@ -95,25 +92,24 @@ class MultiSigPubkeyHash {
95
92
  script.writeOpCode(sdk_1.OP.OP_CHECKMULTISIG);
96
93
  return script;
97
94
  }
98
- unlock(wallet, customInstructions, workingUnlockingScript, signOutputs = "all", anyoneCanPay = false, sourceSatoshis, lockingScript) {
95
+ unlock(wallet, customInstructions, workingUnlockingScript, signOutputs = 'all', anyoneCanPay = false, sourceSatoshis, lockingScript) {
99
96
  return {
100
97
  sign: async (tx, inputIndex) => {
101
98
  var _a, _b, _c;
102
- if (!workingUnlockingScript) {
99
+ if (workingUnlockingScript == null) {
103
100
  workingUnlockingScript = new sdk_1.UnlockingScript();
104
101
  workingUnlockingScript.writeOpCode(sdk_1.OP.OP_0);
105
- customInstructions.pubkeys.forEach((pubkey) => {
106
- workingUnlockingScript.writeBin(sdk_1.PublicKey.fromString(pubkey).toDER());
107
- });
102
+ const pubkeys = concatPubkeys(customInstructions.pubkeys.map(p => sdk_1.PublicKey.fromString(p)));
103
+ workingUnlockingScript.writeBin(pubkeys);
108
104
  }
109
105
  let signatureScope = sdk_1.TransactionSignature.SIGHASH_FORKID;
110
- if (signOutputs === "all") {
106
+ if (signOutputs === 'all') {
111
107
  signatureScope |= sdk_1.TransactionSignature.SIGHASH_ALL;
112
108
  }
113
- if (signOutputs === "none") {
109
+ if (signOutputs === 'none') {
114
110
  signatureScope |= sdk_1.TransactionSignature.SIGHASH_NONE;
115
111
  }
116
- if (signOutputs === "single") {
112
+ if (signOutputs === 'single') {
117
113
  signatureScope |= sdk_1.TransactionSignature.SIGHASH_SINGLE;
118
114
  }
119
115
  if (anyoneCanPay) {
@@ -123,17 +119,17 @@ class MultiSigPubkeyHash {
123
119
  const otherInputs = tx.inputs.filter((_, index) => index !== inputIndex);
124
120
  const sourceTXID = input.sourceTXID
125
121
  ? input.sourceTXID
126
- : (_a = input.sourceTransaction) === null || _a === void 0 ? void 0 : _a.id("hex");
122
+ : (_a = input.sourceTransaction) === null || _a === void 0 ? void 0 : _a.id('hex');
127
123
  if (!sourceTXID) {
128
- throw new Error("The input sourceTXID or sourceTransaction is required for transaction signing.");
124
+ throw new Error('The input sourceTXID or sourceTransaction is required for transaction signing.');
129
125
  }
130
126
  sourceSatoshis || (sourceSatoshis = (_b = input.sourceTransaction) === null || _b === void 0 ? void 0 : _b.outputs[input.sourceOutputIndex].satoshis);
131
127
  if (!sourceSatoshis) {
132
- throw new Error("The sourceSatoshis or input sourceTransaction is required for transaction signing.");
128
+ throw new Error('The sourceSatoshis or input sourceTransaction is required for transaction signing.');
133
129
  }
134
130
  lockingScript || (lockingScript = (_c = input.sourceTransaction) === null || _c === void 0 ? void 0 : _c.outputs[input.sourceOutputIndex].lockingScript);
135
- if (!lockingScript) {
136
- throw new Error("The lockingScript or input sourceTransaction is required for transaction signing.");
131
+ if (lockingScript == null) {
132
+ throw new Error('The lockingScript or input sourceTransaction is required for transaction signing.');
137
133
  }
138
134
  const preimage = sdk_1.TransactionSignature.format({
139
135
  sourceTXID,
@@ -146,14 +142,14 @@ class MultiSigPubkeyHash {
146
142
  inputSequence: input.sequence || 0xffffffff,
147
143
  subscript: lockingScript,
148
144
  lockTime: tx.lockTime,
149
- scope: signatureScope,
145
+ scope: signatureScope
150
146
  });
151
147
  const hashToDirectlySign = sdk_1.Hash.hash256(preimage);
152
148
  const { signature } = await wallet.createSignature({
153
149
  hashToDirectlySign,
154
- protocolID: [1, "multi sig brc29"],
150
+ protocolID: [1, 'multi sig brc29'],
155
151
  counterparty: customInstructions.counterparty,
156
- keyID: customInstructions.keyID,
152
+ keyID: customInstructions.keyID
157
153
  });
158
154
  const s = sdk_1.Signature.fromDER(signature);
159
155
  const sig = new sdk_1.TransactionSignature(s.r, s.s, signatureScope);
@@ -161,28 +157,27 @@ class MultiSigPubkeyHash {
161
157
  workingUnlockingScript.writeBin(sigForScript);
162
158
  const chunkforSig = workingUnlockingScript.chunks.pop();
163
159
  // add it to the array before the pubkeys, pushing the other content to the right
164
- workingUnlockingScript.chunks.splice(workingUnlockingScript.chunks.length - customInstructions.pubkeys.length, 0, chunkforSig);
160
+ workingUnlockingScript.chunks.splice(workingUnlockingScript.chunks.length - 1, 0, chunkforSig);
165
161
  return workingUnlockingScript;
166
162
  },
167
- estimateLength: (tx, inputIndex) => {
163
+ estimateLength: async (tx, inputIndex) => {
168
164
  var _a;
169
- let numberOfPubkeys = 2;
170
- let numberOfSignatures = 1;
171
- const staticLength = 1;
165
+ let numberOfPubkeys;
166
+ let numberOfSignatures;
167
+ const staticLength = 8;
172
168
  const input = tx.inputs[inputIndex];
173
169
  const lockingScript = (_a = input.sourceTransaction) === null || _a === void 0 ? void 0 : _a.outputs[input.sourceOutputIndex].lockingScript;
174
- if (!lockingScript) {
175
- return Promise.resolve(1000); // guess
170
+ if (lockingScript == null) {
171
+ return await Promise.resolve(1000); // guess
176
172
  }
177
- const totalChunk = lockingScript === null || lockingScript === void 0 ? void 0 : lockingScript.chunks[lockingScript.chunks.length - 2];
173
+ const totalChunk = lockingScript.chunks.at(-2);
178
174
  numberOfPubkeys = numberFromScriptChunk(totalChunk);
179
- const thresholdPos = lockingScript.chunks.map(chunk => chunk.op === sdk_1.OP.OP_EQUALVERIFY).indexOf(true) + 1;
180
- const thresholdChunk = lockingScript === null || lockingScript === void 0 ? void 0 : lockingScript.chunks[thresholdPos];
175
+ const thresholdChunk = lockingScript.chunks[4];
181
176
  numberOfSignatures = numberFromScriptChunk(thresholdChunk);
182
- return Promise.resolve(staticLength + (numberOfSignatures * 74) + (numberOfPubkeys * 34));
177
+ return await Promise.resolve(staticLength + (numberOfSignatures * 74) + (numberOfPubkeys * 34));
183
178
  }
184
179
  };
185
180
  }
186
181
  }
187
- exports.MultiSigPubkeyHash = MultiSigPubkeyHash;
188
- //# sourceMappingURL=MultiSigPubkeyHash.js.map
182
+ exports.P2MSKH = P2MSKH;
183
+ //# sourceMappingURL=P2MSKH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"P2MSKH.js","sourceRoot":"","sources":["../../../src/P2MSKH.ts"],"names":[],"mappings":"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"}