It is our strong recommendation to implement a pooled wallet setup, sometimes referred to as an "omnibus wallet". While it is possible to create thousands of wallets, our platform is not optimized for the wallet-per-user use case and clients who have attempted it have run into multiple problems - many of which we cannot commit to supporting and/or fixing.
Here are some issues that our customers have encountered using the wallet-per-user setup:
- API GET Timeouts: Our API is not optimized for accounts with 500+ wallets for a coin. Many aggregate operations over wallets (for instance, total balance across all wallets for a coin) will simply not work. At these wallet counts, the UI will become virtually unusable.
- Unspent Management: A pooled wallet offers much more flexibility surrounding the use of unspents for all UTXO-based coins. In the per-user wallet model, it's quite common that end users receive UTXOs in their wallet that cannot pay their own fees (and thus become essentially unusable until market fee rates fall). In the per-user model, multiple withdrawals by the same end customer can become very slow, due to the need to wait for previous withdrawal confirmation. A pooled wallet allows you to optimize unspent selection for fees and perform cost-saving operations like unspent consolidation.
- Marginal Additional User Fees: It is about twice as costly to create a new ETH wallet per customer, as opposed to creating new addresses on an existing wallet. For XRP, the ratios are even worse (it costs 45 XRP to create each Ripple wallet). This is a cost you will need to pay, either directly or by passing it onto your customers.
- Rate Limits: Our API supports 600 requests/min coming from a client. Since our API is separated by wallets, it's likely you will run into this rate limit. If you run into the rate limit issue, the onus will be on you to adjust your system (and possibly be forced to give users 'stale' wallet information).
- Cold Wallet Interaction: If you plan on using a cold wallet, it will be extremely difficult to maintain a whitelist which contains all hot wallet addresses. With a pooled wallet, only one address needs to go on the cold wallet's spending whitelist - with the per-user wallet model, you would need to continually update this whitelist on every signup.
Given these caveats, we strongly encourage all of our customers towards using a pooled wallet setup. If you choose to go with the per-user model, please be aware that the factors listed above could have a significant negative impact on the usability, performance, and navigability of your BitGo solution.