<p>I don't know if this is a great solution to this, but what you could do, is make logins for your users based off of their Staking Address (stake address = username) and then to validate it you could have them send 1 ADA to you from that Address. Then on your website's backend, you will need to look for that new transaction to your wallet to finish the validation. Once validated, they can set their password, thus protecting others from using the same public stake address. Not a perfect solution but it should work for this.</p>

CC BY-SA 4.0
2021-10-23T23:13:53.063Z
Thanks for the input @Anton !
TheStophe
CC BY-SA 4.0
2021-10-21T03:09:27.537Z
2021-10-21T03:09:27.537Z
Jacob - SNOWY Pool
<p>This is not a complete solution but it may possibly work. But, before that some context on cardano addresses and the delegation process is required:</p>
<p>Cardano addresses are of different types as described on the <a href="https://hydra.iohk.io/build/7918420/download/1/ledger-spec.pdf" rel="nofollow noreferrer">Cardano Ledger Spec</a> :</p>
<blockquote>
<ul>
<li><p>Base addresses, Addr<code>base</code>, containing the hash of a payment credential and the hash of a staking credential. Note that the payment
credential hash is the hash of the key (or script)which has contol of
the funds at this address, i.e. is able to witness spending them. The
staking credential controls the delegation decision for the Ada at
this address (i.e. it is used for rewards, staking, etc.). The staking
credential must be a (registered) delegation credential.</p>
</li>
<li><p>Pointer addresses, Addr<code>ptr</code> , containing the hash of a payment credential and a pointer to a stake credential registration
certificate</p>
</li>
</ul>
</blockquote>
<p>When a user delegates to a stake pool, a delegation certificate is posted to the blockchain. It contains:</p>
<ul>
<li>The stake key registration certificate hash</li>
<li>The stake pool id (hash) the use has delegated to.</li>
</ul>
<p>Assuming a base address is used in the delegation transaction, this means that the address is linked to the stake key hash contained in the certificate.</p>
<p>So a potential login solution would be have the user generate a pointer address in his wallet and paste it in a field on you webapp login page.</p>
<p>On the back-end, you could fetch the original delegation address and the stake key linked to it.Then check if the pointer address submitted is linked to the same stake key as the original address.</p>
<p>If there is a match it can only mean that the private key used to derive the original address is the same private key used to derive the pointer address, therefore the user submitting the pointer address must be the same user who delegated to you pool.</p>
<p>Some useful references related to this:</p>
<ul>
<li><a href="https://cips.cardano.org/cips/cip19/#specification" rel="nofollow noreferrer">CIP-19</a></li>
<li><a href="https://hydra.iohk.io/build/7918420/download/1/ledger-spec.pdf" rel="nofollow noreferrer">Formal Spec Doc of the Cardano Ledger</a></li>
<li><a href="https://hydra.iohk.io/build/790053/download/1/delegation_design_spec.pdf" rel="nofollow noreferrer">Engineering Design Specification for Delegation and Incentives in Cardano–Shelley</a></li>
</ul>

CC BY-SA 4.0
2021-10-23T23:13:13.677Z
Thank you @Kelli this is awesome.
TheStophe
CC BY-SA 4.0
2021-10-23T15:47:05.710Z
2021-10-23T15:47:05.710Z
Skelli
<p>Say you had a &quot;stake pool paywall&quot; for your website, where you offer your content, but only to those who delegate to your stake pool.</p>
<p>What's the best way to validate someone has delegated to your stake pool, while preserving their privacy?</p>
<p>Ideally this would be some kind of login info they provide (public address paste in?), that automatically checks and unlocks website content access if True.</p>
<p>Ideally, this &quot;proof&quot; would unlock the website &quot;paywall&quot; so they can access your content, knowing they contribute to your pool.  You could potentially unlock &quot;levels&quot; of content for duration of staking.</p>

<wallet><stake-pool><decentralized-applications><privacy>
How to validate someone delegates to your stakepool, while preserving their privacy?
# How to validate someone delegates to your stakepool, while preserving their privacy?

(Asked by: username_0 on 2021-10-21)

Say you had a "stake pool paywall" for your website, where you offer your content, but only to those who delegate to your stake pool.

What's the best way to validate someone has delegated to your stake pool, while preserving their privacy?

Ideally this would be some kind of login info they provide (public address paste in?), that automatically checks and unlocks website content access if True.

Ideally, this "proof" would unlock the website "paywall" so they can access your content, knowing they contribute to your pool. You could potentially unlock "levels" of content for duration of staking.

**Tags:** wallet, stake-pool, decentralized-applications, privacy

---

## 2 answers

### Answer by username_2 on 2021-10-23. Score: 4

This is not a complete solution but it may possibly work. But, before that some context on cardano addresses and the delegation process is required:

Cardano addresses are of different types as described on the [Cardano Ledger Spec](https://hydra.iohk.io/build/7918420/download/1/ledger-spec.pdf) :

> * Base addresses, Addr`base`, containing the hash of a payment credential and the hash of a staking credential. Note that the payment
>   credential hash is the hash of the key (or script)which has contol of
>   the funds at this address, i.e. is able to witness spending them. The
>   staking credential controls the delegation decision for the Ada at
>   this address (i.e. it is used for rewards, staking, etc.). The staking
>   credential must be a (registered) delegation credential.
> * Pointer addresses, Addr`ptr` , containing the hash of a payment credential and a pointer to a stake credential registration
>   certificate

When a user delegates to a stake pool, a delegation certificate is posted to the blockchain. It contains:

* The stake key registration certificate hash
* The stake pool id (hash) the use has delegated to.

Assuming a base address is used in the delegation transaction, this means that the address is linked to the stake key hash contained in the certificate.

So a potential login solution would be have the user generate a pointer address in his wallet and paste it in a field on you webapp login page.

On the back-end, you could fetch the original delegation address and the stake key linked to it.Then check if the pointer address submitted is linked to the same stake key as the original address.

If there is a match it can only mean that the private key used to derive the original address is the same private key used to derive the pointer address, therefore the user submitting the pointer address must be the same user who delegated to you pool.

Some useful references related to this:

* [CIP-19](https://cips.cardano.org/cips/cip19/#specification)
* [Formal Spec Doc of the Cardano Ledger](https://hydra.iohk.io/build/7918420/download/1/ledger-spec.pdf)
* [Engineering Design Specification for Delegation and Incentives in Cardano–Shelley](https://hydra.iohk.io/build/790053/download/1/delegation_design_spec.pdf)

> **Comments:**
> **username_0**: Thank you @Kelli this is awesome.  

---

### Answer by username_1 on 2021-10-21. Score: 1

I don't know if this is a great solution to this, but what you could do, is make logins for your users based off of their Staking Address (stake address = username) and then to validate it you could have them send 1 ADA to you from that Address. Then on your website's backend, you will need to look for that new transaction to your wallet to finish the validation. Once validated, they can set their password, thus protecting others from using the same public stake address. Not a perfect solution but it should work for this.

> **Comments:**
> **username_0**: Thanks for the input @Anton !  

---

