<p>To make a long story short, in Cardano's environment, you will need 2 sets of keys. One set to control your funds (send and receive $ADA and tokens) and one other set to control your staking activities (to participate in the protocol delegating your ADA to a stake pool or to earn rewards by operating your own stake pool).</p>
<p>These 2 set of keys will allow you to generate a payment address or a stake address or both meaning a payment address with &quot;staking capacity&quot;.</p>
<p><strong>As long as you keep these 2 sets of keys (payment keys and stake keys) in a safe and secured place, it's OK you will be able to have access to your funds.</strong></p>
<p><strong>It is recommended to generate these 2 sets of keys on an offline machine to minimize the risk of hack.</strong></p>
<p>Generate your payment keys pair (<strong>payment.skey</strong> and <strong>payment.vkey</strong>):</p>
<pre><code>cardano-cli address key-gen \
--verification-key-file payment.vkey \
--signing-key-file payment.skey
</code></pre>
<p>Generate your stake keys pair (<strong>stake.skey</strong> and <strong>stake.vkey</strong>):</p>
<pre><code>cardano-cli stake-address key-gen \
--verification-key-file stake.vkey \
--signing-key-file stake.skey
</code></pre>
<p>Now for your stake pool, you will need a <em>&quot;payment address with stake capacity&quot;</em> so first we will generate a stake address and then a payment address that can delegate to the stake address.</p>
<p>Generate your stake address from the stake address verification key and store it in stake.addr</p>
<pre><code>cardano-cli stake-address build \
--stake-verification-key-file stake.vkey \
--out-file stake.addr \
--mainnet
</code></pre>
<p>Finally, create this &quot;payment address with stake capacity&quot;</p>
<pre><code>cardano-cli address build \
--payment-verification-key-file payment.vkey \
--stake-verification-key-file stake.vkey \
--out-file payment.addr \
--mainnet
</code></pre>
<p><strong>That's it, now you can do whatever you want with these addresses as long as you keep your 2 sets of keys safe just for you... (especially the payment keys)</strong></p>
<p>However, if you are too stressed, you can send 1 ADA to this address and then send it back with a simple transaction to make sure you have mastered the process.</p>
<p>You can follow this tutorial to understand how to forge and sign a simple transaction by following the instructions in <a href="https://cardano-foundation.gitbook.io/stake-pool-course/lessons/lesson-2/transaction" rel="nofollow noreferrer">this official video</a>.</p>
<p>Good luck.</p>

CC BY-SA 4.0
2021-09-18T13:40:02.797Z
I actually made a typo and worried that i overwrote a private key for the payment address, after I had already staked everything. Some times human error is all it takes, fortunately there are snapshots.
Louis Waweru
CC BY-SA 4.0
2021-09-18T13:53:46.210Z
This was a very good explanation, thank you!
Louis Waweru
CC BY-SA 4.0
2021-09-18T17:54:32.390Z
If you overwrote by mistake your private key, well... you shouldn't have done it. It is impossible for the signing key (payment.skey) to be deduced, extracted or reverse engineered from the payment.addr. it's a kind of mathematical function that only goes in a single direction.  Just make sure that pairing between the payment address and its corresponding payment key is strict.
baocontact
CC BY-SA 4.0
2021-09-18T09:51:37.810Z
2021-09-18T15:45:20.417Z
2021-09-18T15:45:20.417Z
baocontact
<p>Before funding the payment address on my staking pool, I would like to make sure that the funds can be retrieved by me, as the process of air gapping to create these series of keys and addresses introduces many opportunities for human error.</p>
<p>Would you please let me know if I can use <code>cardano-cli</code> or some other method to ensure the funds won't be lost once sending?</p>
<p>As a sanity-check, <strong>I sent a 1 ADA transaction back to my funding source to ensure things were okay</strong>. But I would still like a simpler way of checking that my keys are all in line.</p>

<stake-pool><cardano-cli><private-key>
Verifying Payment Address
# Verifying Payment Address

(Asked by: username_0 on 2021-09-17)

Before funding the payment address on my staking pool, I would like to make sure that the funds can be retrieved by me, as the process of air gapping to create these series of keys and addresses introduces many opportunities for human error.

Would you please let me know if I can use `cardano-cli` or some other method to ensure the funds won't be lost once sending?

As a sanity-check, **I sent a 1 ADA transaction back to my funding source to ensure things were okay**. But I would still like a simpler way of checking that my keys are all in line.

**Tags:** stake-pool, cardano-cli, private-key

---

## 1 answers

### Answer by username_1 on 2021-09-18. Score: 1 | Accepted answer

To make a long story short, in Cardano's environment, you will need 2 sets of keys. One set to control your funds (send and receive $ADA and tokens) and one other set to control your staking activities (to participate in the protocol delegating your ADA to a stake pool or to earn rewards by operating your own stake pool).
These 2 set of keys will allow you to generate a payment address or a stake address or both meaning a payment address with "staking capacity".
As long as you keep these 2 sets of keys (payment keys and stake keys) in a safe and secured place, it's OK you will be able to have access to your funds.
It is recommended to generate these 2 sets of keys on an offline machine to minimize the risk of hack.
Generate your payment keys pair (payment.skey and payment.vkey):
cardano-cli address key-gen \
--verification-key-file payment.vkey \
--signing-key-file payment.skey

Generate your stake keys pair (stake.skey and stake.vkey):
cardano-cli stake-address key-gen \
--verification-key-file stake.vkey \
--signing-key-file stake.skey

Now for your stake pool, you will need a "payment address with stake capacity" so first we will generate a stake address and then a payment address that can delegate to the stake address.
Generate your stake address from the stake address verification key and store it in stake.addr
cardano-cli stake-address build \
--stake-verification-key-file stake.vkey \
--out-file stake.addr \
--mainnet

Finally, create this "payment address with stake capacity"
cardano-cli address build \
--payment-verification-key-file payment.vkey \
--stake-verification-key-file stake.vkey \
--out-file payment.addr \
--mainnet

That's it, now you can do whatever you want with these addresses as long as you keep your 2 sets of keys safe just for you... (especially the payment keys)
However, if you are too stressed, you can send 1 ADA to this address and then send it back with a simple transaction to make sure you have mastered the process.
You can follow this tutorial to understand how to forge and sign a simple transaction by following the instructions in this official video.
Good luck.

> **Comments:**
> **username_0**: I actually made a typo and worried that i overwrote a private key for the payment address, after I had already staked everything. Some times human error is all it takes, fortunately there are snapshots.  
> **username_0**: This was a very good explanation, thank you!  
> **username_1**: If you overwrote by mistake your private key, well... you shouldn't have done it. It is impossible for the signing key (payment.skey) to be deduced, extracted or reverse engineered from the payment.addr. it's a kind of mathematical function that only goes in a single direction.  Just make sure that pairing between the payment address and its corresponding payment key is strict.  

---

