Skip to content

Commit

Permalink
fix(hardware-ledger): stake key hashes in the requiredSigners field a…
Browse files Browse the repository at this point in the history
…re now mapped correctly
  • Loading branch information
AngelCastilloB committed Jun 2, 2023
1 parent f88ca83 commit 8e857ec
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 23 deletions.
16 changes: 8 additions & 8 deletions packages/hardware-ledger/src/transformers/requiredSigners.ts
Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion packages/hardware-ledger/test/testData.ts
Expand Up @@ -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');
Expand Down
27 changes: 13 additions & 14 deletions 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';

Expand All @@ -11,29 +11,28 @@ 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', () => {
it('can map a known Ed25519KeyHashHex to a ledger required signer', async () => {
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
});
});
Expand Down

0 comments on commit 8e857ec

Please sign in to comment.