From 8e857ec022c03cd86e6c247d8333b68765fb0f2e Mon Sep 17 00:00:00 2001 From: Angel Castillo Date: Fri, 2 Jun 2023 12:33:03 +0800 Subject: [PATCH] fix(hardware-ledger): stake key hashes in the requiredSigners field are now mapped correctly --- .../src/transformers/requiredSigners.ts | 16 +++++------ packages/hardware-ledger/test/testData.ts | 2 +- .../test/transformers/requiredsigners.test.ts | 27 +++++++++---------- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/packages/hardware-ledger/src/transformers/requiredSigners.ts b/packages/hardware-ledger/src/transformers/requiredSigners.ts index 1df1491662d..649602a1107 100644 --- a/packages/hardware-ledger/src/transformers/requiredSigners.ts +++ b/packages/hardware-ledger/src/transformers/requiredSigners.ts @@ -10,18 +10,18 @@ export const toRequiredSigner: Transform< Ledger.RequiredSigner, LedgerTxTransformerContext > = (keyHash, context) => { - const knowAddress = context?.knownAddresses.find((address) => { + const paymentCredKnownAddress = context?.knownAddresses.find((address) => { const paymentCredential = Cardano.Address.fromBech32(address.address)?.asBase()?.getPaymentCredential().hash; - const stakingCredential = Cardano.RewardAccount.toHash(address.rewardAccount); + return paymentCredential && paymentCredential.toString() === keyHash; + }); - return ( - (paymentCredential && paymentCredential.toString() === keyHash) || - (stakingCredential && stakingCredential.toString() === keyHash) - ); + const stakeCredKnownAddress = context?.knownAddresses.find((address) => { + const stakingCredential = Cardano.RewardAccount.toHash(address.rewardAccount); + return stakingCredential && stakingCredential.toString() === keyHash; }); - const paymentPath = knowAddress ? paymentKeyPathFromGroupedAddress(knowAddress) : null; - const stakingPath = knowAddress ? stakeKeyPathFromGroupedAddress(knowAddress) : null; + const paymentPath = paymentCredKnownAddress ? paymentKeyPathFromGroupedAddress(paymentCredKnownAddress) : null; + const stakingPath = stakeCredKnownAddress ? stakeKeyPathFromGroupedAddress(stakeCredKnownAddress) : null; if (paymentPath) { return { diff --git a/packages/hardware-ledger/test/testData.ts b/packages/hardware-ledger/test/testData.ts index c3b3a33d730..505bd7c5661 100644 --- a/packages/hardware-ledger/test/testData.ts +++ b/packages/hardware-ledger/test/testData.ts @@ -7,7 +7,7 @@ export const stakeKeyHash = Cardano.RewardAccount.toHash(rewardAccount); export const paymentAddress = Cardano.PaymentAddress( 'addr1qxdtr6wjx3kr7jlrvrfzhrh8w44qx9krcxhvu3e79zr7497tpmpxjfyhk3vwg6qjezjmlg5nr5dzm9j6nxyns28vsy8stu5lh6' ); -export const paymentHash = Crypto.Hash28ByteBase16('9ab1e9d2346c3f4be360d22b8ee7756a0316c3c1aece473e2887ea97'); +export const paymentHash = Crypto.Ed25519KeyHashHex('9ab1e9d2346c3f4be360d22b8ee7756a0316c3c1aece473e2887ea97'); export const ownerRewardAccount = Cardano.RewardAccount('stake1u89sasnfyjtmgk8ydqfv3fdl52f36x3djedfnzfc9rkgzrcss5vgr'); export const poolId = Cardano.PoolId('pool1ev8vy6fyj7693ergzty2t0azjvw35tvkt2vcjwpgajqs7z6u2vn'); export const poolId2 = Cardano.PoolId('pool1z5uqdk7dzdxaae5633fqfcu2eqzy3a3rgtuvy087fdld7yws0xt'); diff --git a/packages/hardware-ledger/test/transformers/requiredsigners.test.ts b/packages/hardware-ledger/test/transformers/requiredsigners.test.ts index 4fce614fc47..ec652a519c3 100644 --- a/packages/hardware-ledger/test/transformers/requiredsigners.test.ts +++ b/packages/hardware-ledger/test/transformers/requiredsigners.test.ts @@ -1,5 +1,5 @@ import * as Ledger from '@cardano-foundation/ledgerjs-hw-app-cardano'; -import { CONTEXT_WITHOUT_KNOWN_ADDRESSES, CONTEXT_WITH_KNOWN_ADDRESSES, stakeKeyHash } from '../testData'; +import { CONTEXT_WITHOUT_KNOWN_ADDRESSES, CONTEXT_WITH_KNOWN_ADDRESSES, paymentHash, stakeKeyHash } from '../testData'; import { CardanoKeyConst, util } from '@cardano-sdk/key-management'; import { mapRequiredSigners, toRequiredSigner } from '../../src/transformers'; @@ -11,21 +11,20 @@ describe('requiredSigners', () => { }); it('can map a a set of required signers', async () => { - const signers = await mapRequiredSigners( - [stakeKeyHash, stakeKeyHash, stakeKeyHash], - CONTEXT_WITH_KNOWN_ADDRESSES - ); + const signers = await mapRequiredSigners([stakeKeyHash, paymentHash], CONTEXT_WITH_KNOWN_ADDRESSES); - expect(signers!.length).toEqual(3); + expect(signers).not.toBeNull(); + expect(signers!.length).toEqual(2); - for (const signer of signers!) { - expect(signer).toEqual({ - path: [util.harden(CardanoKeyConst.PURPOSE), util.harden(CardanoKeyConst.COIN_TYPE), util.harden(0), 1, 0], - type: Ledger.TxRequiredSignerType.PATH - }); - } + expect(signers![0]).toEqual({ + path: [util.harden(CardanoKeyConst.PURPOSE), util.harden(CardanoKeyConst.COIN_TYPE), util.harden(0), 2, 0], + type: Ledger.TxRequiredSignerType.PATH + }); - expect.assertions(4); + expect(signers![1]).toEqual({ + path: [util.harden(CardanoKeyConst.PURPOSE), util.harden(CardanoKeyConst.COIN_TYPE), util.harden(0), 1, 0], + type: Ledger.TxRequiredSignerType.PATH + }); }); }); describe('toRequiredSigner', () => { @@ -33,7 +32,7 @@ describe('requiredSigners', () => { const requiredSigner = toRequiredSigner(stakeKeyHash, CONTEXT_WITH_KNOWN_ADDRESSES); expect(requiredSigner).toEqual({ - path: [util.harden(CardanoKeyConst.PURPOSE), util.harden(CardanoKeyConst.COIN_TYPE), util.harden(0), 1, 0], + path: [util.harden(CardanoKeyConst.PURPOSE), util.harden(CardanoKeyConst.COIN_TYPE), util.harden(0), 2, 0], type: Ledger.TxRequiredSignerType.PATH }); });