<p>Multi address wallets are usually called Hierarchically Deterministic (HD) wallets and are defined by the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" rel="noreferrer">BIP44</a> standard.</p>
<p>In Cardano, we do extend BIP44 in <a href="https://github.com/cardano-foundation/CIPs/blob/master/CIP-1852/CIP-1852.md" rel="noreferrer">CIP1852</a> by adding staking key capabilities, but this is not your use case.</p>
<p>To derive wallet addresses for a single wallet, it is easiest to use an existing library that can do this for you, as for example the <a href="https://github.com/Emurgo/cardano-serialization-lib" rel="noreferrer">cardano-seralization-lib</a> by Emurgo.</p>
<p>Have a look at <a href="https://docs.cardano.org/projects/cardano-serialization-lib/en/latest/getting-started/generating-keys.html" rel="noreferrer">their documentation</a>, but this easy snippet you will show you how to derivate the 10th address of your wallet:</p>
<pre><code>function harden(num: number): number {
  return 0x80000000 + num;
}


const rootKey = CardanoWasm.BIP32PrivateKey.from_bech32(&quot;xprv17qx9vxm6060qjn5fgazfue9nwyf448w7upk60c3epln82vumg9r9kxzsud9uv5rfscxp382j2aku254zj3qfx9fx39t6hjwtmwq85uunsd8x0st3j66lzf5yn30hwq5n75zeuplepx8vxc502txx09ygjgx06n0p&quot;);
const accountKey = rootKey
  .derive(harden(1852)) // purpose
  .derive(harden(1815)) // coin type
  .derive(harden(0)); // account #0

const utxoPubKey = accountKey
  .derive(0) // external
  .derive(9) // &lt;- here is the index of your address, cycle thought this number to generate more of it
  .to_public();
</code></pre>

CC BY-SA 4.0
2021-04-27T19:11:31.390Z
2021-04-27T19:11:31.390Z
Marek Mahut - StakeNuts
<p>We wish to generate large numbers of receive addresses for a single wallet. These addresses will let us identify who is sending us Cardano, or other native assets. Can someone explain how one goes about generating such addresses?</p>

CC BY-SA 4.0
2021-04-27T19:06:55.733Z
Have a look at this : https://github.com/uniVocity/cardano-tutorials/blob/master/cardano-addresses.md
Ghost
<wallet>
How does one create receive addresses for a wallet programatically?
# How does one create receive addresses for a wallet programatically?

(Asked by: username_0 on 2021-04-27)

We wish to generate large numbers of receive addresses for a single wallet. These addresses will let us identify who is sending us Cardano, or other native assets. Can someone explain how one goes about generating such addresses?

**Tags:** wallet

> **Comments:**
> **username_1**: Have a look at this : https://github.com/uniVocity/cardano-tutorials/blob/master/cardano-addresses.md  

---

## 1 answers

### Answer by username_2 on 2021-04-27. Score: 10 | Accepted answer

Multi address wallets are usually called Hierarchically Deterministic (HD) wallets and are defined by the [BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) standard.

In Cardano, we do extend BIP44 in [CIP1852](https://github.com/cardano-foundation/CIPs/blob/master/CIP-1852/CIP-1852.md) by adding staking key capabilities, but this is not your use case.

To derive wallet addresses for a single wallet, it is easiest to use an existing library that can do this for you, as for example the [cardano-seralization-lib](https://github.com/Emurgo/cardano-serialization-lib) by Emurgo.

Have a look at [their documentation](https://docs.cardano.org/projects/cardano-serialization-lib/en/latest/getting-started/generating-keys.html), but this easy snippet you will show you how to derivate the 10th address of your wallet:

```
function harden(num: number): number {
  return 0x80000000 + num;
}

const rootKey = CardanoWasm.BIP32PrivateKey.from_bech32("xprv17qx9vxm6060qjn5fgazfue9nwyf448w7upk60c3epln82vumg9r9kxzsud9uv5rfscxp382j2aku254zj3qfx9fx39t6hjwtmwq85uunsd8x0st3j66lzf5yn30hwq5n75zeuplepx8vxc502txx09ygjgx06n0p");
const accountKey = rootKey
  .derive(harden(1852)) // purpose
  .derive(harden(1815)) // coin type
  .derive(harden(0)); // account #0

const utxoPubKey = accountKey
  .derive(0) // external
  .derive(9) // <- here is the index of your address, cycle thought this number to generate more of it
  .to_public();

```


---

