Problem: Origin of incoming payments
The main goal of the Cardano Deposit Wallet is to offer a solution for the following problem:
Problem statement
Some wallet users, typically businesses, would like to identify the origin of incoming payments, typically from their customers.
Status Quo
Solution: Assign one address to one customer
The most commonly used solution to tracking the origin of incoming payments is the following:
-
The customer creates an account with the business.
-
The business generates a unique address and associates it with this customer account.
-
Any incoming payment on that address is treated as originating from that customer.
The Cardano Deposit Wallet implements this solution.
The cardano-wallet software lacks explicit support for this solution, but it is still often used for this purpose. See below.
User: Centralized Cryptocurrency Exchanges (CEX)
Exchanges enable users to trade cryptocurrencies for both crypto and fiat currencies.
Typically, CEXes keep track of one account for each customer. A customer can deposit ADA in their account (“top up”) by sending it to a Cardano address that the Exchange has associated with and communicated to the customer.
CEXes use various wallet setups:
- Single wallet for both deposits and withdrawals.
- Two wallets: one for deposits, the other one for withdrawals.
In both cases, the wallet responsible for accepting deposits tracks the addresses at which the deposit was made.
User: Small merchants
Small online stores want to know when they receive ADA from a customer who placed an order, so that they can deliver the goods.
For example, here is a feature request for cardano-wallet:
Support in cardano-wallet
Cardano-wallet currently lacks explicit support for the type of usage described above. Specifically,
- The API documentation for Byron wallets and Shelley wallets implicitly allows funds to be moved between addresses — there is no guarantee that funds sent to a wallet address originate from outside the wallet, they could come from the wallet itself!
In practice, people use cardano-wallet to track funds incoming at particular addresses anyway, typically by inspecting the transaction history.
Besides the fundamental limitation above, using cardano-wallet in this way has additional drawbacks:
Byron-style wallets have the following drawbacks:
- Addresses that have been created and imported cannot be restored from a single seed phrase.
-
The Base58 encoding used for Byron addresses tolerates less errors than Bech32, making loss of funds more likely for customers.
-
Address generation relies on implementation details of Haskell’s
StdGen
pseudorandom number generator.
Shelley-style wallet has the following drawbacks:
-
Making a transaction to generate new addresses incurs a transaction fee.
-
Wallets with an address gap ≠ 20 do not comply with the BIP-44 standard for account discovery; they cannot be fully restored without knowledge of the address gap.
Alternative solutions
The problem statement could also be addressed by other means. For example:
-
Transaction metadata could be augmented with identifying information about the origin of incoming payments.
-
Identifying information could be added to the addresses.
Solution: Transaction metadata
In traditional banking, transaction metadata is typically used to identify the origin of an incoming payment.
Also, for some cryptocurrencies, Exchanges do a single address and distinguish users by transaction metadata. This is the case for Kraken and the Stellar Lumens blockchain.
However, the notion of “one address — one customer” appears to be established for ADA by now, probably also because current user interfaces (such as Daedalus) lack good ways to add transaction metadata.
Solution: Identity from sender addresses
One could require customers to send money from a specific address. However, that would require a feature where the user wallet is able to send from a specific address. To our knowledge, such a feature has not been implemented, and it seems to interfere with intentional anonymity of addresses.