@1sat/templates 0.0.4 → 0.0.6

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.
@@ -1,92 +1,70 @@
1
- import { type LockingScript, type PrivateKey, type PublicKey, Script, type ScriptTemplate, type Transaction, type UnlockingScript } from '@bsv/sdk';
1
+ import { type LockingScript, type PrivateKey, type PublicKey, Script, type ScriptTemplate, Transaction, type UnlockingScript } from '@bsv/sdk';
2
2
  import { type BitComDecoded } from './bitcom.js';
3
- /**
4
- * SIGMA protocol identifier
5
- */
6
3
  export declare const SIGMA_PREFIX = "SIGMA";
7
- /**
8
- * Signing algorithm for SIGMA signatures
9
- */
4
+ export declare const sigmaHex = "5349474d41";
10
5
  export declare enum SigmaAlgorithm {
11
6
  BSM = "BSM",
12
7
  BRC77 = "BRC77"
13
8
  }
14
- /**
15
- * SIGMA signature data structure
16
- */
17
9
  export interface SigmaData {
18
- /** BitCom protocol index */
19
10
  bitcomIndex?: number;
20
- /** Signing algorithm (BSM or BRC77) */
21
11
  algorithm: SigmaAlgorithm;
22
- /** Bitcoin address of signer */
23
12
  address: string;
24
- /** Cryptographic signature as number array */
25
13
  signature: number[];
26
- /** Input index (vin) that anchors the signature */
27
14
  vin: number;
28
- /** Whether signature verification passed */
15
+ targetVout?: number;
29
16
  valid?: boolean;
30
17
  }
31
- /**
32
- * Options for SIGMA signature creation
33
- */
18
+ export type Sig = {
19
+ address: string;
20
+ signature: string;
21
+ algorithm: SigmaAlgorithm;
22
+ vin: number;
23
+ targetVout: number;
24
+ };
25
+ export interface SignResponse extends Sig {
26
+ sigmaScript: Script;
27
+ signedTx: Transaction;
28
+ }
34
29
  export interface SigmaOptions {
35
- /** Signing algorithm (default: BSM) */
36
30
  algorithm?: SigmaAlgorithm;
37
- /** Input index to anchor signature (default: 0) */
38
31
  vin?: number;
39
- /** For BRC-77: specific verifier public key (private signature) */
40
32
  verifier?: PublicKey;
41
33
  }
42
34
  /**
43
- * SIGMA (Secure Identity for Global Message Authentication) implementation
35
+ * SIGMA (Secure Identity for Global Message Authentication)
44
36
  *
45
- * SIGMA enables cryptographic signing of blockchain content by combining:
46
- * - Input hash: SHA256 of the outpoint (txid + vout) from a specific input
47
- * - Data hash: SHA256 of the script data before the SIGMA protocol marker
37
+ * Combines an input hash (SHA256 of an outpoint) with a data hash (SHA256 of
38
+ * script data before the SIGMA marker) to produce a message signed with BSM
39
+ * or BRC-77. Supports multiple signatures per output and both algorithms.
48
40
  *
49
- * Supports both BSM (Bitcoin Signed Message) and BRC-77 signing algorithms.
41
+ * Follows the same pattern as AIP: one data shape, static factories for
42
+ * transaction operations, instance methods for ScriptTemplate integration.
50
43
  */
51
44
  export default class Sigma implements ScriptTemplate {
52
- readonly data: SigmaData;
45
+ data: SigmaData;
53
46
  constructor(data: SigmaData);
54
- /**
55
- * Extract SIGMA signatures from BitCom transaction
56
- */
47
+ static computeInputHash(txidOrTx: string | Transaction, voutOrVin: number, sourceOutputIndex?: number): number[];
48
+ static computeDataHash(script: Script, sigmaInstance?: number): number[];
49
+ static computeMessageHash(inputHash: number[], dataHash: number[]): number[];
50
+ static parseFromScript(script: Script, targetVout?: number): Sig[];
51
+ static countInstances(script: Script): number;
52
+ static findPosition(script: Script, instanceIndex: number): number;
53
+ static signTransaction(tx: Transaction, privateKey: PrivateKey, options?: {
54
+ targetVout?: number;
55
+ sigmaInstance?: number;
56
+ refVin?: number;
57
+ algorithm?: SigmaAlgorithm;
58
+ verifier?: PublicKey;
59
+ }): SignResponse;
60
+ static verifyTransaction(tx: Transaction, targetVout?: number, sigmaInstance?: number, recipientPrivateKey?: PrivateKey): boolean;
61
+ private static applyToTransaction;
57
62
  static decode(bitcom: BitComDecoded): Sigma[];
58
- /**
59
- * Decode SIGMA signatures directly from a Script
60
- */
61
63
  static decodeFromScript(script: Script | LockingScript): Sigma[];
62
- /**
63
- * Create SIGMA signature for data
64
- *
65
- * @param inputHash - SHA256 hash of the input outpoint
66
- * @param dataHash - SHA256 hash of the script data
67
- * @param privateKey - Private key for signing
68
- * @param options - Additional signing options
69
- */
70
- static sign(inputHash: number[], dataHash: number[], privateKey: PrivateKey, options?: SigmaOptions): Sigma;
71
- /**
72
- * Verify SIGMA signature against provided hashes
73
- *
74
- * @param inputHash - SHA256 hash of the input outpoint
75
- * @param dataHash - SHA256 hash of the script data
76
- * @param recipientPrivateKey - For BRC-77 private signatures, the recipient's key
77
- */
78
- verifyWithHashes(inputHash: number[], dataHash: number[], recipientPrivateKey?: PrivateKey): boolean;
79
- /**
80
- * Check if signature was previously verified
81
- */
64
+ static createSignature(inputHash: number[], dataHash: number[], privateKey: PrivateKey, options?: SigmaOptions): Sigma;
82
65
  verify(): boolean;
83
- /**
84
- * Generate locking script for SIGMA within BitCom
85
- */
66
+ verifyWithHashes(inputHash: number[], dataHash: number[], recipientPrivateKey?: PrivateKey): boolean;
86
67
  lock(): LockingScript;
87
- /**
88
- * Unlock method is not available for SIGMA scripts
89
- */
90
68
  unlock(): {
91
69
  sign: (tx: Transaction, inputIndex: number) => Promise<UnlockingScript>;
92
70
  estimateLength: () => Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"sigma.d.ts","sourceRoot":"","sources":["../../src/bitcom/sigma.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,MAAM,EACN,KAAK,cAAc,EAGnB,KAAK,WAAW,EAChB,KAAK,eAAe,EAEpB,MAAM,UAAU,CAAA;AACjB,OAAe,EAAiB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAEvE;;GAEG;AACH,eAAO,MAAM,YAAY,UAAU,CAAA;AAEnC;;GAEG;AACH,oBAAY,cAAc;IACzB,GAAG,QAAQ;IACX,KAAK,UAAU;CACf;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uCAAuC;IACvC,SAAS,EAAE,cAAc,CAAA;IACzB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,uCAAuC;IACvC,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,QAAQ,CAAC,EAAE,SAAS,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,YAAW,cAAc;IACnD,SAAgB,IAAI,EAAE,SAAS,CAAA;gBAEnB,IAAI,EAAE,SAAS;IAI3B;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,EAAE;IAmC7C;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,EAAE;IAQhE;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CACV,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,YAAiB,GACxB,KAAK;IAuCR;;;;;;OAMG;IACH,gBAAgB,CACf,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,mBAAmB,CAAC,EAAE,UAAU,GAC9B,OAAO;IA4CV;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,IAAI,IAAI,aAAa;IAoBrB;;OAEG;IACH,MAAM,IAAI;QACT,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;QACvE,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;KACrC;CAGD"}
1
+ {"version":3,"file":"sigma.d.ts","sourceRoot":"","sources":["../../src/bitcom/sigma.ts"],"names":[],"mappings":"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"}
@@ -1,100 +1,307 @@
1
- import { BSM, BigNumber, Script, Signature, SignedMessage, Utils, } from '@bsv/sdk';
1
+ import { BSM, BigNumber, Hash, OP, Script, Signature, SignedMessage, Transaction, Utils, } from '@bsv/sdk';
2
2
  import BitCom from './bitcom.js';
3
- /**
4
- * SIGMA protocol identifier
5
- */
3
+ const { magicHash } = BSM;
4
+ const { toHex, toArray, toUTF8, toBase64 } = Utils;
6
5
  export const SIGMA_PREFIX = 'SIGMA';
7
- /**
8
- * Signing algorithm for SIGMA signatures
9
- */
6
+ export const sigmaHex = '5349474d41';
10
7
  export var SigmaAlgorithm;
11
8
  (function (SigmaAlgorithm) {
12
9
  SigmaAlgorithm["BSM"] = "BSM";
13
10
  SigmaAlgorithm["BRC77"] = "BRC77";
14
11
  })(SigmaAlgorithm || (SigmaAlgorithm = {}));
12
+ const EMPTY_OUTPOINT = new Array(32).fill(0);
13
+ const hexToBytes = (hex) => {
14
+ const bytes = [];
15
+ for (let i = 0; i < hex.length; i += 2) {
16
+ bytes.push(Number.parseInt(hex.substring(i, i + 2), 16));
17
+ }
18
+ return bytes;
19
+ };
20
+ const writeUint32LE = (value) => [
21
+ value & 0xff,
22
+ (value >> 8) & 0xff,
23
+ (value >> 16) & 0xff,
24
+ (value >> 24) & 0xff,
25
+ ];
26
+ function deduceRecovery(signature, message, address) {
27
+ for (let recovery = 0; recovery < 4; recovery++) {
28
+ try {
29
+ const pubKey = signature.RecoverPublicKey(recovery, new BigNumber(magicHash(message)));
30
+ if (BSM.verify(message, signature, pubKey) &&
31
+ pubKey.toAddress() === address) {
32
+ return recovery;
33
+ }
34
+ }
35
+ catch { }
36
+ }
37
+ return -1;
38
+ }
39
+ function isSigmaChunk(chunk) {
40
+ return !!chunk.data && toUTF8(chunk.data) === SIGMA_PREFIX;
41
+ }
42
+ function isEmbeddedOpReturn(chunk) {
43
+ return chunk.op === OP.OP_RETURN && !!chunk.data && chunk.data.length > 0;
44
+ }
45
+ function tryParseSigAt(chunks, i, targetVout) {
46
+ if (i + 4 >= chunks.length)
47
+ return null;
48
+ const algo = chunks[i + 1];
49
+ const addr = chunks[i + 2];
50
+ const sig = chunks[i + 3];
51
+ const vin = chunks[i + 4];
52
+ if (!algo?.data || !addr?.data || !sig?.data || !vin?.data)
53
+ return null;
54
+ return {
55
+ algorithm: toUTF8(algo.data),
56
+ address: toUTF8(addr.data),
57
+ signature: toBase64(sig.data),
58
+ vin: Number.parseInt(toUTF8(vin.data), 10),
59
+ targetVout,
60
+ };
61
+ }
15
62
  /**
16
- * SIGMA (Secure Identity for Global Message Authentication) implementation
63
+ * SIGMA (Secure Identity for Global Message Authentication)
17
64
  *
18
- * SIGMA enables cryptographic signing of blockchain content by combining:
19
- * - Input hash: SHA256 of the outpoint (txid + vout) from a specific input
20
- * - Data hash: SHA256 of the script data before the SIGMA protocol marker
65
+ * Combines an input hash (SHA256 of an outpoint) with a data hash (SHA256 of
66
+ * script data before the SIGMA marker) to produce a message signed with BSM
67
+ * or BRC-77. Supports multiple signatures per output and both algorithms.
21
68
  *
22
- * Supports both BSM (Bitcoin Signed Message) and BRC-77 signing algorithms.
69
+ * Follows the same pattern as AIP: one data shape, static factories for
70
+ * transaction operations, instance methods for ScriptTemplate integration.
23
71
  */
24
72
  export default class Sigma {
25
73
  data;
26
74
  constructor(data) {
27
75
  this.data = data;
28
76
  }
29
- /**
30
- * Extract SIGMA signatures from BitCom transaction
31
- */
77
+ static computeInputHash(txidOrTx, voutOrVin, sourceOutputIndex) {
78
+ if (typeof txidOrTx === 'string') {
79
+ return Hash.sha256([
80
+ ...hexToBytes(txidOrTx),
81
+ ...writeUint32LE(sourceOutputIndex ?? 0),
82
+ ]);
83
+ }
84
+ const txIn = txidOrTx.inputs[voutOrVin];
85
+ if (txIn?.sourceTXID) {
86
+ return Hash.sha256([
87
+ ...hexToBytes(txIn.sourceTXID),
88
+ ...writeUint32LE(txIn.sourceOutputIndex),
89
+ ]);
90
+ }
91
+ return Hash.sha256(EMPTY_OUTPOINT);
92
+ }
93
+ static computeDataHash(script, sigmaInstance = 0) {
94
+ const chunks = script.chunks;
95
+ let n = 0;
96
+ for (let i = 0; i < chunks.length; i++) {
97
+ const chunk = chunks[i];
98
+ if (isSigmaChunk(chunk)) {
99
+ if (n === sigmaInstance) {
100
+ return Hash.sha256(new Script(chunks.slice(0, i - 1)).toBinary());
101
+ }
102
+ n++;
103
+ }
104
+ else if (isEmbeddedOpReturn(chunk)) {
105
+ try {
106
+ for (const ic of Script.fromBinary(chunk.data).chunks) {
107
+ if (isSigmaChunk(ic)) {
108
+ if (n === sigmaInstance) {
109
+ return Hash.sha256(new Script(chunks.slice(0, i)).toBinary());
110
+ }
111
+ n++;
112
+ }
113
+ }
114
+ }
115
+ catch { }
116
+ }
117
+ }
118
+ return Hash.sha256(script.toBinary());
119
+ }
120
+ static computeMessageHash(inputHash, dataHash) {
121
+ const combined = new Uint8Array(inputHash.length + dataHash.length);
122
+ combined.set(inputHash, 0);
123
+ combined.set(dataHash, inputHash.length);
124
+ return Hash.sha256(Array.from(combined));
125
+ }
126
+ static parseFromScript(script, targetVout = 0) {
127
+ const instances = [];
128
+ const chunks = script.chunks;
129
+ for (let i = 0; i < chunks.length; i++) {
130
+ const chunk = chunks[i];
131
+ if (isSigmaChunk(chunk)) {
132
+ const parsed = tryParseSigAt(chunks, i, targetVout);
133
+ if (parsed) {
134
+ instances.push(parsed);
135
+ i += 4;
136
+ }
137
+ }
138
+ else if (isEmbeddedOpReturn(chunk)) {
139
+ try {
140
+ const inner = Script.fromBinary(chunk.data).chunks;
141
+ for (let j = 0; j < inner.length; j++) {
142
+ if (isSigmaChunk(inner[j])) {
143
+ const parsed = tryParseSigAt(inner, j, targetVout);
144
+ if (parsed) {
145
+ instances.push(parsed);
146
+ j += 4;
147
+ }
148
+ }
149
+ }
150
+ }
151
+ catch { }
152
+ }
153
+ }
154
+ return instances;
155
+ }
156
+ static countInstances(script) {
157
+ return Sigma.parseFromScript(script).length;
158
+ }
159
+ static findPosition(script, instanceIndex) {
160
+ const chunks = script.chunks;
161
+ let n = 0;
162
+ for (let i = 0; i < chunks.length; i++) {
163
+ const chunk = chunks[i];
164
+ if (isSigmaChunk(chunk)) {
165
+ if (n === instanceIndex)
166
+ return i;
167
+ n++;
168
+ }
169
+ else if (isEmbeddedOpReturn(chunk)) {
170
+ try {
171
+ for (const ic of Script.fromBinary(chunk.data).chunks) {
172
+ if (isSigmaChunk(ic)) {
173
+ if (n === instanceIndex)
174
+ return i;
175
+ n++;
176
+ }
177
+ }
178
+ }
179
+ catch { }
180
+ }
181
+ }
182
+ return -1;
183
+ }
184
+ static signTransaction(tx, privateKey, options = {}) {
185
+ const targetVout = options.targetVout ?? 0;
186
+ const sigmaInstance = options.sigmaInstance ?? 0;
187
+ const refVin = options.refVin ?? 0;
188
+ const algorithm = options.algorithm ?? SigmaAlgorithm.BSM;
189
+ const vin = refVin === -1 ? targetVout : refVin;
190
+ const inputHash = Sigma.computeInputHash(tx, vin);
191
+ const dataHash = Sigma.computeDataHash(tx.outputs[targetVout].lockingScript, sigmaInstance);
192
+ const messageHash = Sigma.computeMessageHash(inputHash, dataHash);
193
+ let signedAsm;
194
+ let sig;
195
+ if (algorithm === SigmaAlgorithm.BRC77) {
196
+ const address = privateKey.toAddress();
197
+ const brc77Sig = SignedMessage.sign(messageHash, privateKey, options.verifier);
198
+ signedAsm = `${sigmaHex} ${toHex(toArray(SigmaAlgorithm.BRC77))} ${toHex(toArray(address))} ${toHex(brc77Sig)} ${toHex(toArray(vin.toString()))}`;
199
+ sig = {
200
+ algorithm: SigmaAlgorithm.BRC77,
201
+ address,
202
+ signature: toBase64(brc77Sig),
203
+ vin,
204
+ targetVout,
205
+ };
206
+ }
207
+ else {
208
+ const signature = BSM.sign(messageHash, privateKey, 'raw');
209
+ const address = privateKey.toAddress();
210
+ const recovery = signature.CalculateRecoveryFactor(privateKey.toPublicKey(), new BigNumber(magicHash(messageHash)));
211
+ signedAsm = `${sigmaHex} ${toHex(toArray(SigmaAlgorithm.BSM))} ${toHex(toArray(address))} ${signature.toCompact(recovery, true, 'hex')} ${toHex(toArray(vin.toString()))}`;
212
+ sig = {
213
+ algorithm: SigmaAlgorithm.BSM,
214
+ address,
215
+ signature: signature.toCompact(recovery, true, 'base64'),
216
+ vin,
217
+ targetVout,
218
+ };
219
+ }
220
+ return Sigma.applyToTransaction(tx, targetVout, sigmaInstance, signedAsm, sig);
221
+ }
222
+ static verifyTransaction(tx, targetVout = 0, sigmaInstance = 0, recipientPrivateKey) {
223
+ const output = tx.outputs[targetVout];
224
+ if (!output?.lockingScript)
225
+ return false;
226
+ const instances = Sigma.parseFromScript(output.lockingScript, targetVout);
227
+ const sig = instances[sigmaInstance];
228
+ if (!sig)
229
+ return false;
230
+ const inputHash = Sigma.computeInputHash(tx, sig.vin);
231
+ const dataHash = Sigma.computeDataHash(output.lockingScript, sigmaInstance);
232
+ const messageHash = Sigma.computeMessageHash(inputHash, dataHash);
233
+ if (sig.algorithm === SigmaAlgorithm.BRC77) {
234
+ return SignedMessage.verify(messageHash, toArray(sig.signature, 'base64'), recipientPrivateKey);
235
+ }
236
+ return (deduceRecovery(Signature.fromCompact(sig.signature, 'base64'), messageHash, sig.address) !== -1);
237
+ }
238
+ static applyToTransaction(tx, targetVout, sigmaInstance, signedAsm, sig) {
239
+ const sigmaScript = Script.fromASM(signedAsm);
240
+ const output = tx.outputs[targetVout];
241
+ let existingAsm = output.lockingScript.toASM();
242
+ const separator = existingAsm.split(' ').includes('OP_RETURN')
243
+ ? '7c'
244
+ : 'OP_RETURN';
245
+ const existingCount = Sigma.countInstances(output.lockingScript);
246
+ if (existingCount > 0 && sigmaInstance === existingCount) {
247
+ const asmTokens = existingAsm.split(' ');
248
+ const pos = Sigma.findPosition(output.lockingScript, sigmaInstance);
249
+ if (pos !== -1) {
250
+ asmTokens.splice(pos, 5, ...signedAsm.split(' '));
251
+ existingAsm = asmTokens.join(' ');
252
+ }
253
+ }
254
+ const signedTx = new Transaction(tx.version, tx.inputs.map((i) => ({ ...i })), tx.outputs.map((o) => ({ ...o })));
255
+ signedTx.outputs[targetVout] = {
256
+ satoshis: output.satoshis,
257
+ lockingScript: Script.fromASM(`${existingAsm} ${separator} ${signedAsm}`),
258
+ };
259
+ return { sigmaScript, signedTx, ...sig };
260
+ }
32
261
  static decode(bitcom) {
33
262
  const sigmas = [];
34
- if (bitcom?.protocols?.length === 0) {
263
+ if (!bitcom?.protocols?.length)
35
264
  return sigmas;
36
- }
37
265
  for (let protoIdx = 0; protoIdx < bitcom.protocols.length; protoIdx++) {
38
266
  const protocol = bitcom.protocols[protoIdx];
39
267
  if (protocol.protocol === SIGMA_PREFIX) {
40
268
  try {
41
- const script = Script.fromBinary(protocol.script);
42
- const chunks = script.chunks;
43
- if (chunks?.length < 4) {
269
+ const chunks = Script.fromBinary(protocol.script).chunks;
270
+ if (chunks?.length < 4)
44
271
  continue;
45
- }
46
- const sigma = new Sigma({
272
+ sigmas.push(new Sigma({
47
273
  bitcomIndex: protoIdx,
48
- algorithm: Utils.toUTF8(chunks[0].data ?? []),
49
- address: Utils.toUTF8(chunks[1].data ?? []),
274
+ algorithm: toUTF8(chunks[0].data ?? []),
275
+ address: toUTF8(chunks[1].data ?? []),
50
276
  signature: Array.from(chunks[2].data ?? []),
51
- vin: Number.parseInt(Utils.toUTF8(chunks[3].data ?? []), 10),
277
+ vin: Number.parseInt(toUTF8(chunks[3].data ?? []), 10),
52
278
  valid: undefined,
53
- });
54
- sigmas.push(sigma);
279
+ }));
55
280
  }
56
281
  catch { }
57
282
  }
58
283
  }
59
284
  return sigmas;
60
285
  }
61
- /**
62
- * Decode SIGMA signatures directly from a Script
63
- */
64
286
  static decodeFromScript(script) {
65
287
  const bitcom = BitCom.decode(script);
66
- if (bitcom == null) {
288
+ if (bitcom == null)
67
289
  return [];
68
- }
69
290
  return Sigma.decode(bitcom);
70
291
  }
71
- /**
72
- * Create SIGMA signature for data
73
- *
74
- * @param inputHash - SHA256 hash of the input outpoint
75
- * @param dataHash - SHA256 hash of the script data
76
- * @param privateKey - Private key for signing
77
- * @param options - Additional signing options
78
- */
79
- static sign(inputHash, dataHash, privateKey, options = {}) {
292
+ static createSignature(inputHash, dataHash, privateKey, options = {}) {
80
293
  const algorithm = options.algorithm ?? SigmaAlgorithm.BSM;
81
294
  const vin = options.vin ?? 0;
82
295
  const address = privateKey.toAddress().toString();
83
- // Combine hashes to create the message
84
296
  const messageHash = [...inputHash, ...dataHash];
85
297
  let signatureArray;
86
298
  if (algorithm === SigmaAlgorithm.BRC77) {
87
- // BRC-77 signing using SignedMessage
88
- const brc77Sig = SignedMessage.sign(messageHash, privateKey, options.verifier);
89
- signatureArray = brc77Sig;
299
+ signatureArray = SignedMessage.sign(messageHash, privateKey, options.verifier);
90
300
  }
91
301
  else {
92
- // BSM signing
93
302
  const sig = BSM.sign(messageHash, privateKey, 'raw');
94
- const magicHashValue = BSM.magicHash(messageHash);
95
- const recoveryFactor = sig.CalculateRecoveryFactor(privateKey.toPublicKey(), new BigNumber(magicHashValue));
96
- const compactSig = sig.toCompact(recoveryFactor, true, 'base64');
97
- signatureArray = Array.from(Utils.toArray(compactSig, 'base64'));
303
+ const recovery = sig.CalculateRecoveryFactor(privateKey.toPublicKey(), new BigNumber(BSM.magicHash(messageHash)));
304
+ signatureArray = Array.from(toArray(sig.toCompact(recovery, true, 'base64'), 'base64'));
98
305
  }
99
306
  return new Sigma({
100
307
  algorithm,
@@ -104,73 +311,36 @@ export default class Sigma {
104
311
  valid: true,
105
312
  });
106
313
  }
107
- /**
108
- * Verify SIGMA signature against provided hashes
109
- *
110
- * @param inputHash - SHA256 hash of the input outpoint
111
- * @param dataHash - SHA256 hash of the script data
112
- * @param recipientPrivateKey - For BRC-77 private signatures, the recipient's key
113
- */
314
+ verify() {
315
+ return this.data.valid === true;
316
+ }
114
317
  verifyWithHashes(inputHash, dataHash, recipientPrivateKey) {
115
318
  try {
116
319
  const messageHash = [...inputHash, ...dataHash];
117
320
  if (this.data.algorithm === SigmaAlgorithm.BRC77) {
118
- // BRC-77 verification using SignedMessage
119
321
  this.data.valid = SignedMessage.verify(messageHash, this.data.signature, recipientPrivateKey);
120
322
  return this.data.valid;
121
323
  }
122
- // BSM verification
123
- const signatureBase64 = Utils.toBase64(this.data.signature);
124
- const sig = Signature.fromCompact(signatureBase64, 'base64');
125
- for (let recovery = 0; recovery < 4; recovery++) {
126
- try {
127
- const publicKey = sig.RecoverPublicKey(recovery, new BigNumber(BSM.magicHash(messageHash)));
128
- if (BSM.verify(messageHash, sig, publicKey) &&
129
- publicKey.toAddress().toString() === this.data.address) {
130
- this.data.valid = true;
131
- return true;
132
- }
133
- }
134
- catch {
135
- // Try next recovery factor
136
- }
137
- }
138
- this.data.valid = false;
139
- return false;
324
+ const sig = Signature.fromCompact(toBase64(this.data.signature), 'base64');
325
+ this.data.valid =
326
+ deduceRecovery(sig, messageHash, this.data.address) !== -1;
327
+ return this.data.valid;
140
328
  }
141
329
  catch {
142
330
  this.data.valid = false;
143
331
  return false;
144
332
  }
145
333
  }
146
- /**
147
- * Check if signature was previously verified
148
- */
149
- verify() {
150
- return this.data.valid === true;
151
- }
152
- /**
153
- * Generate locking script for SIGMA within BitCom
154
- */
155
334
  lock() {
156
335
  const script = new Script();
157
- script.writeBin(Utils.toArray(this.data.algorithm, 'utf8'));
158
- script.writeBin(Utils.toArray(this.data.address, 'utf8'));
336
+ script.writeBin(toArray(this.data.algorithm, 'utf8'));
337
+ script.writeBin(toArray(this.data.address, 'utf8'));
159
338
  script.writeBin(this.data.signature);
160
- script.writeBin(Utils.toArray(this.data.vin.toString(), 'utf8'));
161
- const protocols = [
162
- {
163
- protocol: SIGMA_PREFIX,
164
- script: script.toBinary(),
165
- pos: 0,
166
- },
167
- ];
168
- const bitcom = new BitCom(protocols);
169
- return bitcom.lock();
170
- }
171
- /**
172
- * Unlock method is not available for SIGMA scripts
173
- */
339
+ script.writeBin(toArray(this.data.vin.toString(), 'utf8'));
340
+ return new BitCom([
341
+ { protocol: SIGMA_PREFIX, script: script.toBinary(), pos: 0 },
342
+ ]).lock();
343
+ }
174
344
  unlock() {
175
345
  throw new Error('SIGMA signatures cannot be unlocked');
176
346
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sigma.js","sourceRoot":"","sources":["../../src/bitcom/sigma.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sigma.js","sourceRoot":"","sources":["../../src/bitcom/sigma.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { type Script } from '@bsv/sdk';
2
+ /**
3
+ * Cosign decoded data structure
4
+ */
5
+ export interface CosignData {
6
+ /** Owner's address (base58check encoded) */
7
+ address: string;
8
+ /** Cosigner's compressed public key (hex encoded) */
9
+ cosigner: string;
10
+ }
11
+ /**
12
+ * Cosign - Multi-signature template requiring owner + cosigner authorization
13
+ *
14
+ * The Cosign template creates outputs that require both the owner's signature
15
+ * and a cosigner's signature to spend. The owner is identified by their public
16
+ * key hash (address), while the cosigner is identified by their full public key.
17
+ *
18
+ * Script pattern:
19
+ * OP_DUP OP_HASH160 <20-byte PKHash> OP_EQUALVERIFY OP_CHECKSIGVERIFY <33-byte pubkey> OP_CHECKSIG
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const cosign = Cosign.decode(script)
24
+ * if (cosign) {
25
+ * console.log(`Owner address: ${cosign.address}`)
26
+ * console.log(`Cosigner pubkey: ${cosign.cosigner}`)
27
+ * }
28
+ * ```
29
+ */
30
+ export default class Cosign {
31
+ /**
32
+ * Decodes a Cosign from a script
33
+ *
34
+ * @param script - The script to decode
35
+ * @param mainnet - Whether to use mainnet address prefix (default: true)
36
+ * @returns Decoded Cosign data or null if not found/invalid
37
+ */
38
+ static decode(script: Script, mainnet?: boolean): CosignData | null;
39
+ /**
40
+ * Checks if a script contains a Cosign pattern
41
+ *
42
+ * @param script - The script to check
43
+ * @returns true if the script contains Cosign pattern
44
+ */
45
+ static isCosign(script: Script): boolean;
46
+ }
47
+ //# sourceMappingURL=cosign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosign.d.ts","sourceRoot":"","sources":["../../src/cosign/cosign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,MAAM,EAAS,MAAM,UAAU,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IAC1B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,UAAU,GAAG,IAAI;IA4BhE;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;CAGxC"}
@@ -0,0 +1,62 @@
1
+ import { OP, Utils } from '@bsv/sdk';
2
+ /**
3
+ * Cosign - Multi-signature template requiring owner + cosigner authorization
4
+ *
5
+ * The Cosign template creates outputs that require both the owner's signature
6
+ * and a cosigner's signature to spend. The owner is identified by their public
7
+ * key hash (address), while the cosigner is identified by their full public key.
8
+ *
9
+ * Script pattern:
10
+ * OP_DUP OP_HASH160 <20-byte PKHash> OP_EQUALVERIFY OP_CHECKSIGVERIFY <33-byte pubkey> OP_CHECKSIG
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const cosign = Cosign.decode(script)
15
+ * if (cosign) {
16
+ * console.log(`Owner address: ${cosign.address}`)
17
+ * console.log(`Cosigner pubkey: ${cosign.cosigner}`)
18
+ * }
19
+ * ```
20
+ */
21
+ export default class Cosign {
22
+ /**
23
+ * Decodes a Cosign from a script
24
+ *
25
+ * @param script - The script to decode
26
+ * @param mainnet - Whether to use mainnet address prefix (default: true)
27
+ * @returns Decoded Cosign data or null if not found/invalid
28
+ */
29
+ static decode(script, mainnet = true) {
30
+ try {
31
+ const chunks = script.chunks;
32
+ for (let i = 0; i <= chunks.length - 7; i++) {
33
+ if (chunks[i].op === OP.OP_DUP &&
34
+ chunks[i + 1].op === OP.OP_HASH160 &&
35
+ chunks[i + 2].data?.length === 20 &&
36
+ chunks[i + 3].op === OP.OP_EQUALVERIFY &&
37
+ chunks[i + 4].op === OP.OP_CHECKSIGVERIFY &&
38
+ chunks[i + 5].data?.length === 33 &&
39
+ chunks[i + 6].op === OP.OP_CHECKSIG) {
40
+ const addressPrefix = mainnet ? [0x00] : [0x6f];
41
+ const address = Utils.toBase58Check(chunks[i + 2].data, addressPrefix);
42
+ const cosigner = Utils.toHex(chunks[i + 5].data);
43
+ return { address, cosigner };
44
+ }
45
+ }
46
+ return null;
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ }
52
+ /**
53
+ * Checks if a script contains a Cosign pattern
54
+ *
55
+ * @param script - The script to check
56
+ * @returns true if the script contains Cosign pattern
57
+ */
58
+ static isCosign(script) {
59
+ return Cosign.decode(script) !== null;
60
+ }
61
+ }
62
+ //# sourceMappingURL=cosign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosign.js","sourceRoot":"","sources":["../../src/cosign/cosign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAe,KAAK,EAAE,MAAM,UAAU,CAAA;AAYjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IAC1B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAc,EAAE,OAAO,GAAG,IAAI;QAC3C,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,IACC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM;oBAC1B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU;oBAClC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE;oBACjC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,cAAc;oBACtC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,iBAAiB;oBACzC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE;oBACjC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,EAClC,CAAC;oBACF,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;oBAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAClC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAgB,EAC9B,aAAa,CACb,CAAA;oBACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAgB,CAAC,CAAA;oBAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;gBAC7B,CAAC;YACF,CAAC;YACD,OAAO,IAAI,CAAA;QACZ,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,CAAA;QACZ,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAc;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IACtC,CAAC;CACD"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,8 @@ export { default as BSV20 } from './bsv20/bsv20.js';
5
5
  export { default as BSV21 } from './bsv21/bsv21.js';
6
6
  export { default as OrdLock } from './ordlock/ordlock.js';
7
7
  export { default as Lock } from './lock/lock.js';
8
+ export { default as Cosign } from './cosign/cosign.js';
9
+ export type { CosignData } from './cosign/cosign.js';
8
10
  export { default as BitCom } from './bitcom/bitcom.js';
9
11
  export { default as AIP } from './bitcom/aip.js';
10
12
  export { default as B } from './bitcom/b.js';
@@ -28,8 +30,8 @@ export type { BAPData } from './bitcom/bap.js';
28
30
  export { BAPAttestationType, BAP_PROTOCOL_PREFIX, } from './bitcom/bap.js';
29
31
  export type { MAPData } from './bitcom/map.js';
30
32
  export { MAP_PREFIX, MAPCommand } from './bitcom/map.js';
31
- export type { SigmaData, SigmaOptions, } from './bitcom/sigma.js';
32
- export { SIGMA_PREFIX, SigmaAlgorithm } from './bitcom/sigma.js';
33
+ export type { Sig, SigmaData, SigmaOptions, SignResponse, } from './bitcom/sigma.js';
34
+ export { SIGMA_PREFIX, SigmaAlgorithm, sigmaHex } from './bitcom/sigma.js';
33
35
  export { BSocialActionType, BSocialContext, } from './bsocial/bsocial.js';
34
36
  export type { BSocialAction, BSocialPost, BSocialLike, BSocialFollow, BSocialMessage, BSocialVideo, BSocialDecoded, } from './bsocial/bsocial.js';
35
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC5D,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAGhD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAIzD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAKpD,YAAY,EACX,eAAe,EACf,kBAAkB,GAClB,MAAM,8BAA8B,CAAA;AAKrC,YAAY,EACX,cAAc,EACd,SAAS,EACT,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACZ,MAAM,kBAAkB,CAAA;AAKzB,YAAY,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,YAAY,GACZ,MAAM,kBAAkB,CAAA;AAKzB,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAKrE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAKzD,YAAY,EACX,QAAQ,EACR,cAAc,EACd,aAAa,GACb,MAAM,oBAAoB,CAAA;AAK3B,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAK5C,YAAY,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAK7D,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EACN,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,iBAAiB,CAAA;AAKxB,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAKxD,YAAY,EACX,SAAS,EACT,YAAY,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKhE,OAAO,EACN,iBAAiB,EACjB,cAAc,GACd,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,cAAc,GACd,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC5D,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAGpD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAIzD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAKpD,YAAY,EACX,eAAe,EACf,kBAAkB,GAClB,MAAM,8BAA8B,CAAA;AAKrC,YAAY,EACX,cAAc,EACd,SAAS,EACT,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACZ,MAAM,kBAAkB,CAAA;AAKzB,YAAY,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,YAAY,GACZ,MAAM,kBAAkB,CAAA;AAKzB,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAKrE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAKzD,YAAY,EACX,QAAQ,EACR,cAAc,EACd,aAAa,GACb,MAAM,oBAAoB,CAAA;AAK3B,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAK5C,YAAY,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAK7D,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EACN,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,iBAAiB,CAAA;AAKxB,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAKxD,YAAY,EACX,GAAG,EACH,SAAS,EACT,YAAY,EACZ,YAAY,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAK1E,OAAO,EACN,iBAAiB,EACjB,cAAc,GACd,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,cAAc,GACd,MAAM,sBAAsB,CAAA"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export { default as BSV20 } from './bsv20/bsv20.js';
6
6
  export { default as BSV21 } from './bsv21/bsv21.js';
7
7
  export { default as OrdLock } from './ordlock/ordlock.js';
8
8
  export { default as Lock } from './lock/lock.js';
9
+ export { default as Cosign } from './cosign/cosign.js';
9
10
  // BitCom Protocols
10
11
  export { default as BitCom } from './bitcom/bitcom.js';
11
12
  export { default as AIP } from './bitcom/aip.js';
@@ -23,7 +24,7 @@ export { AIP_PREFIX } from './bitcom/aip.js';
23
24
  export { B_PREFIX, MediaType, Encoding } from './bitcom/b.js';
24
25
  export { BAPAttestationType, BAP_PROTOCOL_PREFIX, } from './bitcom/bap.js';
25
26
  export { MAP_PREFIX, MAPCommand } from './bitcom/map.js';
26
- export { SIGMA_PREFIX, SigmaAlgorithm } from './bitcom/sigma.js';
27
+ export { SIGMA_PREFIX, SigmaAlgorithm, sigmaHex } from './bitcom/sigma.js';
27
28
  // ============================================================================
28
29
  // BSocial Types
29
30
  // ============================================================================
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG5D,mBAAmB;AACnB,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAEhD,mBAAmB;AACnB,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAEhD,UAAU;AACV,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEzD,qEAAqE;AACrE,kCAAkC;AAClC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAqCpD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAMrE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAezD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAM7D,OAAO,EACN,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,iBAAiB,CAAA;AAMxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AASxD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEhE,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAC/E,OAAO,EACN,iBAAiB,EACjB,cAAc,GACd,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG5D,mBAAmB;AACnB,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGtD,mBAAmB;AACnB,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAEhD,UAAU;AACV,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEzD,qEAAqE;AACrE,kCAAkC;AAClC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAqCpD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAMrE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAezD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAM7D,OAAO,EACN,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,iBAAiB,CAAA;AAMxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAWxD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE1E,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAC/E,OAAO,EACN,iBAAiB,EACjB,cAAc,GACd,MAAM,sBAAsB,CAAA"}
package/package.json CHANGED
@@ -1,36 +1,44 @@
1
1
  {
2
- "name": "@1sat/templates",
3
- "version": "0.0.4",
4
- "description": "Bitcoin script templates for 1Sat Ordinals SDK",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
12
- },
13
- "./sigma": {
14
- "types": "./dist/bitcom/sigma.d.ts",
15
- "import": "./dist/bitcom/sigma.js"
16
- }
17
- },
18
- "files": ["dist"],
19
- "scripts": {
20
- "build": "tsc",
21
- "dev": "tsc --watch",
22
- "clean": "rm -rf dist"
23
- },
24
- "keywords": ["1sat", "bsv", "ordinals", "templates", "typescript"],
25
- "license": "MIT",
26
- "dependencies": {
27
- "@1sat/types": "0.0.14"
28
- },
29
- "peerDependencies": {
30
- "@bsv/sdk": "^2.0.6"
31
- },
32
- "devDependencies": {
33
- "@bsv/sdk": "^2.0.6",
34
- "typescript": "^5.9.3"
35
- }
36
- }
2
+ "name": "@1sat/templates",
3
+ "version": "0.0.6",
4
+ "description": "Bitcoin script templates for 1Sat Ordinals SDK",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./sigma": {
14
+ "types": "./dist/bitcom/sigma.d.ts",
15
+ "import": "./dist/bitcom/sigma.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "dev": "tsc --watch",
24
+ "clean": "rm -rf dist"
25
+ },
26
+ "keywords": [
27
+ "1sat",
28
+ "bsv",
29
+ "ordinals",
30
+ "templates",
31
+ "typescript"
32
+ ],
33
+ "license": "MIT",
34
+ "dependencies": {
35
+ "@1sat/types": "0.0.15"
36
+ },
37
+ "peerDependencies": {
38
+ "@bsv/sdk": "^2.0.6"
39
+ },
40
+ "devDependencies": {
41
+ "@bsv/sdk": "^2.0.6",
42
+ "typescript": "^5.9.3"
43
+ }
44
+ }