@1sat/actions 0.0.39 → 0.0.41

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 +1 @@
1
- {"version":3,"file":"completeSignedAction.d.ts","sourceRoot":"","sources":["../../src/utils/completeSignedAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,WAAW,EAEX,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,0BAA0B;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAC7B,EAAE,EAAE,WAAW,KACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAA;AAEzD;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACzC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,kBAAkB,EAChC,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,EAAE,eAAe,EACrB,OAAO,CAAC,EAAE,iBAAiB,GACzB,OAAO,CAAC,0BAA0B,CAAC,CAmDrC"}
1
+ {"version":3,"file":"completeSignedAction.d.ts","sourceRoot":"","sources":["../../src/utils/completeSignedAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,WAAW,EAEX,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,0BAA0B;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAC7B,EAAE,EAAE,WAAW,KACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAA;AAEzD;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACzC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,kBAAkB,EAChC,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,EAAE,eAAe,EACrB,OAAO,CAAC,EAAE,iBAAiB,GACzB,OAAO,CAAC,0BAA0B,CAAC,CA2ErC"}
@@ -1,4 +1,4 @@
1
- import { Beef, Script, Transaction, Utils, } from '@bsv/sdk';
1
+ import { Beef, Script, Spend, Transaction, Utils, } from '@bsv/sdk';
2
2
  /**
3
3
  * Complete a two-phase action: build verified BEEF, sign inputs, verify
4
4
  * scripts, then call signAction. Aborts on any failure.
@@ -15,11 +15,12 @@ export async function completeSignedAction(wallet, createResult, inputBEEF, sign
15
15
  }
16
16
  const reference = createResult.signableTransaction.reference;
17
17
  try {
18
- // Build complete BEEF by merging the unsigned tx into inputBEEF (which has merkle proofs).
19
- // The signableTransaction BEEF only contains raw txs without proofs.
18
+ // Build complete BEEF by merging the signable transaction BEEF (which has funding
19
+ // input proof chains) into inputBEEF (which has ordinal/asset proof chains).
20
+ const signableBeef = Beef.fromBinary(createResult.signableTransaction.tx);
20
21
  const signingTx = Transaction.fromBEEF(createResult.signableTransaction.tx);
21
22
  const beef = Beef.fromBinary(inputBEEF);
22
- beef.mergeRawTx(signingTx.toBinary());
23
+ beef.mergeBeef(signableBeef);
23
24
  const tx = beef.findAtomicTransaction(signingTx.id('hex'));
24
25
  if (!tx) {
25
26
  await wallet.abortAction({ reference });
@@ -27,14 +28,35 @@ export async function completeSignedAction(wallet, createResult, inputBEEF, sign
27
28
  }
28
29
  // Let the caller build unlocking scripts using the fully-wired tx
29
30
  const spends = await sign(tx);
30
- // Apply unlocking scripts and verify
31
+ // Apply unlocking scripts and verify only the inputs we signed.
32
+ // Funding inputs are unsigned at this point — the wallet signs them during signAction.
31
33
  for (const [idx, spend] of Object.entries(spends)) {
32
- tx.inputs[Number(idx)].unlockingScript = Script.fromHex(spend.unlockingScript);
33
- }
34
- const valid = await tx.verify('scripts only');
35
- if (!valid) {
36
- await wallet.abortAction({ reference });
37
- return { error: 'transaction-verification-failed' };
34
+ const i = Number(idx);
35
+ tx.inputs[i].unlockingScript = Script.fromHex(spend.unlockingScript);
36
+ const input = tx.inputs[i];
37
+ const sourceOutput = input.sourceTransaction?.outputs[input.sourceOutputIndex];
38
+ if (!sourceOutput) {
39
+ await wallet.abortAction({ reference });
40
+ return { error: `missing-source-transaction-for-input-${i}` };
41
+ }
42
+ const unlockingScript = tx.inputs[i].unlockingScript;
43
+ const spendCheck = new Spend({
44
+ sourceTXID: input.sourceTXID ?? input.sourceTransaction?.id('hex') ?? '',
45
+ sourceOutputIndex: input.sourceOutputIndex,
46
+ lockingScript: sourceOutput.lockingScript,
47
+ sourceSatoshis: sourceOutput.satoshis ?? 0,
48
+ transactionVersion: tx.version,
49
+ otherInputs: tx.inputs.filter((_, j) => j !== i),
50
+ unlockingScript,
51
+ inputSequence: input.sequence ?? 0xffffffff,
52
+ inputIndex: i,
53
+ outputs: tx.outputs,
54
+ lockTime: tx.lockTime,
55
+ });
56
+ if (!spendCheck.validate()) {
57
+ await wallet.abortAction({ reference });
58
+ return { error: `script-verification-failed-for-input-${i}` };
59
+ }
38
60
  }
39
61
  const signResult = await wallet.signAction({
40
62
  reference,
@@ -1 +1 @@
1
- {"version":3,"file":"completeSignedAction.js","sourceRoot":"","sources":["../../src/utils/completeSignedAction.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,IAAI,EACJ,MAAM,EACN,WAAW,EACX,KAAK,GAIL,MAAM,UAAU,CAAA;AAgBjB;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,MAAuB,EACvB,YAAgC,EAChC,SAAmB,EACnB,IAAqB,EACrB,OAA2B;IAE3B,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;QACvC,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAA;IAC5C,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,mBAAmB,CAAC,SAAS,CAAA;IAE5D,IAAI,CAAC;QACJ,2FAA2F;QAC3F,qEAAqE;QACrE,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QAC1D,IAAI,CAAC,EAAE,EAAE,CAAC;YACT,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;YACvC,OAAO,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAA;QACtD,CAAC;QAED,kEAAkE;QAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAA;QAE7B,qCAAqC;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAC/E,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;YACvC,OAAO,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAA;QACpD,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;YAC1C,SAAS;YACT,MAAM;YACN,OAAO,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE;SACtD,CAAC,CAAA;QAEF,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAA;QAC3C,CAAC;QAED,OAAO;YACN,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SAC7D,CAAA;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACvD,MAAM,KAAK,CAAA;IACZ,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"completeSignedAction.js","sourceRoot":"","sources":["../../src/utils/completeSignedAction.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1sat/actions",
3
- "version": "0.0.39",
3
+ "version": "0.0.41",
4
4
  "description": "Action definitions for the 1Sat SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",