Skip to content

Commit 54c2440

Browse files
authored
Merge pull request #1632 from input-output-hk/fix/cip30-resolve-only-own-signatures
fix(wallet): resolve only the own signed portions of the witness set
2 parents 722ce7c + 8f7e2c7 commit 54c2440

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

packages/wallet/src/cip30.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,10 @@ const baseCip30WalletApi = (
469469
);
470470
}
471471

472-
const cbor = Serialization.TransactionWitnessSet.fromCore({ signatures }).toCbor();
472+
const ownSignatures = new Map(
473+
[...signatures.entries()].filter(([pubKey]) => !coreTx.witness.signatures.has(pubKey))
474+
);
475+
const cbor = Serialization.TransactionWitnessSet.fromCore({ signatures: ownSignatures }).toCbor();
473476
return Promise.resolve(cbor);
474477
} catch (error) {
475478
if (error instanceof TxSignError) {

packages/wallet/test/integration/cip30mapping.test.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -512,9 +512,19 @@ describe('cip30', () => {
512512
hexTx = Serialization.Transaction.fromCore(finalizedTx).toCbor();
513513
});
514514

515-
it('resolves with TransactionWitnessSet', async () => {
516-
const cip30witnessSet = await api.signTx(context, hexTx);
517-
expect(() => Serialization.TransactionWitnessSet.fromCbor(HexBlob(cip30witnessSet))).not.toThrow();
515+
it('resolves own signatures with TransactionWitnessSet', async () => {
516+
const cip30witnessSetCbor = await api.signTx(context, hexTx);
517+
const cip30witnessSet = Serialization.TransactionWitnessSet.fromCbor(HexBlob(cip30witnessSetCbor));
518+
const resolvedSignedByKeys = cip30witnessSet
519+
.vkeys()!
520+
.toCore()
521+
.map(([pubKey]) => pubKey);
522+
const preExistingSignatures = finalizedTx.witness.signatures.entries();
523+
524+
expect(resolvedSignedByKeys.length).toBeGreaterThan(0);
525+
for (const [preExistingKey] of preExistingSignatures) {
526+
expect(resolvedSignedByKeys).not.toContain(preExistingKey);
527+
}
518528
});
519529

520530
it('passes through sender from dapp connector context', async () => {

0 commit comments

Comments
 (0)