Skip to content

Commit 73fc9b8

Browse files
committed
include delegation hash in mnemonic address generation disassembler#8
1 parent 11ae6fa commit 73fc9b8

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/cardano.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,27 @@ pub fn derive_key_pair_from_mnemonic(mnemonic: &str, account: u32, index: u32) -
6363
.derive(ed25519_bip32::DerivationScheme::V2, 0)
6464
.derive(ed25519_bip32::DerivationScheme::V2, index)
6565
.extended_secret_key();
66+
// stake key 1852'/1815'/<account>'/2/<index>
67+
let stake_xprv = &xprv
68+
.derive(ed25519_bip32::DerivationScheme::V2, harden_index(1852))
69+
.derive(ed25519_bip32::DerivationScheme::V2, harden_index(1815))
70+
.derive(ed25519_bip32::DerivationScheme::V2, harden_index(account))
71+
.derive(ed25519_bip32::DerivationScheme::V2, 2)
72+
.derive(ed25519_bip32::DerivationScheme::V2, index)
73+
.extended_secret_key();
6674
unsafe {
67-
let sk = SecretKeyExtended::from_bytes_unchecked(*pay_xprv);
68-
let vk = sk.public_key();
75+
let pay_priv = SecretKeyExtended::from_bytes_unchecked(*pay_xprv);
76+
let pay_pub = pay_priv.public_key();
77+
let stake_pub = SecretKeyExtended::from_bytes_unchecked(*stake_xprv).public_key();
6978

70-
// Cardano (Shelley) address derivation
7179
let addr = ShelleyAddress::new(
72-
Network::Mainnet, // Assuming Mainnet environment
73-
ShelleyPaymentPart::key_hash(vk.compute_hash()),
74-
ShelleyDelegationPart::Null
80+
Network::Mainnet,
81+
ShelleyPaymentPart::key_hash(pay_pub.compute_hash()),
82+
ShelleyDelegationPart::key_hash(stake_pub.compute_hash())
7583
);
76-
let sk_flex: FlexibleSecretKey = FlexibleSecretKey::Extended(sk);
84+
let sk_flex: FlexibleSecretKey = FlexibleSecretKey::Extended(pay_priv);
7785

78-
(sk_flex, vk, addr)
86+
(sk_flex, pay_pub, addr)
7987
}
8088

8189
}
@@ -213,4 +221,4 @@ pub fn cip8_sign(kp: &KeyPairAndAddress, message: &str) -> (String, String) {
213221
let cose_sign1_cbor = pallas::codec::minicbor::to_vec(&cose_struct).unwrap();
214222

215223
(hex::encode(&cose_sign1_cbor).to_string(), hex::encode(pubkey).to_string())
216-
}
224+
}

0 commit comments

Comments
 (0)