diff --git a/packages/wallet/src/cip30.ts b/packages/wallet/src/cip30.ts index 85716f888cb..ab1a4d59308 100644 --- a/packages/wallet/src/cip30.ts +++ b/packages/wallet/src/cip30.ts @@ -469,7 +469,10 @@ const baseCip30WalletApi = ( ); } - const cbor = Serialization.TransactionWitnessSet.fromCore({ signatures }).toCbor(); + const ownSignatures = new Map( + [...signatures.entries()].filter(([pubKey]) => !coreTx.witness.signatures.has(pubKey)) + ); + const cbor = Serialization.TransactionWitnessSet.fromCore({ signatures: ownSignatures }).toCbor(); return Promise.resolve(cbor); } catch (error) { if (error instanceof TxSignError) { diff --git a/packages/wallet/test/integration/cip30mapping.test.ts b/packages/wallet/test/integration/cip30mapping.test.ts index 82219fb62a5..4b5cac5f7a2 100644 --- a/packages/wallet/test/integration/cip30mapping.test.ts +++ b/packages/wallet/test/integration/cip30mapping.test.ts @@ -512,9 +512,19 @@ describe('cip30', () => { hexTx = Serialization.Transaction.fromCore(finalizedTx).toCbor(); }); - it('resolves with TransactionWitnessSet', async () => { - const cip30witnessSet = await api.signTx(context, hexTx); - expect(() => Serialization.TransactionWitnessSet.fromCbor(HexBlob(cip30witnessSet))).not.toThrow(); + it('resolves own signatures with TransactionWitnessSet', async () => { + const cip30witnessSetCbor = await api.signTx(context, hexTx); + const cip30witnessSet = Serialization.TransactionWitnessSet.fromCbor(HexBlob(cip30witnessSetCbor)); + const resolvedSignedByKeys = cip30witnessSet + .vkeys()! + .toCore() + .map(([pubKey]) => pubKey); + const preExistingSignatures = finalizedTx.witness.signatures.entries(); + + expect(resolvedSignedByKeys.length).toBeGreaterThan(0); + for (const [preExistingKey] of preExistingSignatures) { + expect(resolvedSignedByKeys).not.toContain(preExistingKey); + } }); it('passes through sender from dapp connector context', async () => {