My man! That is a tough question so I will try to throw you back something so we can both reach a reasonable conclusion.
1) First thing first, definition:
The absolutely best would be a combination of everything above, I think we are heading towards that point eventually. Something along the lines of
ETH Flash loans were you would brokerage not using your reserve. You would, theoretically, use your clients money to perform and keep the profit. I mean theorically because I haven't seen this done, but I know it will happen. Even BTC is now tokenized on ETH so it is absolutely doable. That is the unicorn answer.
For something closer to reality:
I would recommend to check a
cross exchange bot. Source liquidity from healthier exchanges. This would be point 1. Point 2 is an improved solution to step 1, modify the mentioned bot. Binance has an internal program that gives you 0% fee, get in contact with them. To avoid using your reserves I know some exchanges have pre-approval plans so you can avoid the exchange rate risk. They allow you to close prices even when money did not arrive yet to your account.
2) ETH fees are killing centralized exchanges. I am in doubt here. A clear winner on the outsourcing would be creating private addresses on
Infura for deposits and doing offline transactions for withdrawals. Moving those individual funds to cold storage is the problem on fees. But that is how most are doing it.
Bitgo
was chosen because of the insurance it had on funds, that provided the required extra security step big exchanges needed. For small brokerage it kills your business, takes a percentage of your withdrawals on the pay as you go plan. I have seen the automated contract solution on
Lykke but have not research on that enough, I think it might be the best solution but I lack the certainty now.
I would like to know someone else/yours opinion on both questions.
Well, I can't get into too many details about how we did it, however, we developed a combination of 2. and 3.
I will highlight the problems each method has:
1. Finding a reliable exchange partner that you source all liquidity from is the most cost-efficient solution for a startup since:
a) Your entire fiat reserve is in two places (the bank and the exchange) which means you can provide higher order limits to end-users.
b) It requires very little development since you simply transmit client orders via API.
This is the approach Coinbase used in its early days and even all the way until they bought Gdax.
This is also the most common approach that T2-T3 forex and stockbrokers use.
However, this approach has 2 main problems:
a) A huge counterparty risk, which means that if the exchange that you use stops operating for any reason whatsoever or your account gets blocked or compromised - you cease all operations as well.
b) Still a form of counterparty risk, but this one has to do with fees and liquidity. If the exchange you use experiences price spikes or rases their fees - you are forced to carry over that to your end-users.
2. Using multiple exchanges and a custom (or modified open-source) arbitrage algorithm is a very good way to reduce both the counterparty risk and provide extremely good rates to your clients, however, this approach has the following drawbacks:
a) Your reserve capital is divided between exchanges, which means that you need A LOT more capital to provide the same order limits to end-users than you would if you used just one exchange for liquidity.
b) It requires a lot more development than the first method and that can get expensive quickly since we all know what a good full stack developer costs per month.
c) It compromises security a bit, since securing multiple accounts simply is a bigger risk, than securing just one, however, this can also be a positive, since all of your eggs are never in one basket.
3. Straight up maintaining an own reserve means that you become a full-fledged market maker and provide the best price to end users, however since cryptocurrency is extremely volatile, this changes the entire business model, because now you have to worry about the actual underlying asset price. This can be an extremely effective method since you can also profit from the actual asset price itself and you massively save on development costs, however its:
a) by far riskier than both 1. and 2.
b) Is the most capital-intensive of all approaches since it requires you to have spare capital on demand in order to benefit from big price crashes.
c) requires you to employ market analysts or even traders
4. As I said, this is the approach we use and the reason is very simple: this approach takes all benefits of each method and reduces the risks, involved in each method, however, this approach has the following problems of its own:
a) It's BY FAR the most troublesome and expensive in terms of development since it has the most moving parts. You have to integrate multiple providers, develop an arbitrage algorithm, secure those accounts, secure your own reserves as well as develop a trading algorithm, or employ analysts for maintaining your own reserves.
b) While it mitigates the risks of all approaches individually, at the same time it exposes you to BOTH multiple counterparty risk as well as currency exchange risk.
c) It can be the most capital-intensive or the second most capital-intensive approach, depending on the size of your reserve.
5. I firmly believe this is the future of cryptocurrency exchanges and I'm spending a lot of time and money on developing a P2P liquidity pool myself, however, I DO NOT believe that the future is completely decentralized and non-custodial.
Uniswap proved that this approach provides multiple benefits since it eliminates both the above-mentioned risks and transfers them to end-users, who in turn, are happy to accept those risks because it opens up the opportunity to make a return on their otherwise idle crypto assets and it leads to more balanced prices.
Now, with that said, there are many big question marks still since the technology is evolving as we speak and we've seen that the results of development errors can lead to catastrophic consequences for end-users.
The main problems still present with this approach are:
a) The only way to make it completely decentralized and non-custodial is to run it on Ethereum, which means you can never really integrate FIAT into the equation (yet) and you have counterparty risk with the Ethereum project itself. If it goes under, all DEFI projects we currently know instantly die.
b) It's impossible to make it newbie-friendly since users will have to use their own Ethereum wallets and that's the reason that these DEFI projects we know today will never be mass-adopted.
c) It's extremely development-intensive since it requires very skilled blockchain developers, as well as traditional developers and code-integrity, becomes paramount.
Regarding the Ethereum wallets, I believe the best thing for everybody would be if the Ethereum foundation focuses on developing more spending-oriented features which would eliminate this problem altogether. I know that it originally wasn't the idea of Ethereum and still isn't, however people are using Ether as currency and not just for using Dapps and this isn't going to change. If Vitalik and the foundation want true mass adoption, Ethereum has to become as user-friendly if not more so than Bitcoin and that means having the ability to generate multiple deposit addresses from the same private key at the very least.
Now, unfortunately, we live in a reality where things aren't like how I and every other brokerage and exchange owner want them to be.
Outsourcing via Bitgo, Coinbase Custody, or another provider is, as you said, detrimental to such a business since 0.05-0.1% fees are absolutely insane IMO.
The best approaches which I see are either:
a) generating a separate private-public key for each user and (somehow) securing those or letting users secure their own keys, both of which have their obvious drawbacks.
b) deploying forwarder smart-contracts to cold storage and executing withdrawals manually. This is the approach we use and the problems here are the network fees, which we are forced to absorb, as well as employing human capital.
c) developing the entire functionality via smart-contracts which platforms such as Nexo employ. This approach is good as well since you can basically automate the entire process and provide a better experience to end-users, but it's extremely development-intensive and you still have the (albeit negated) problem of absorbing network fees which you can't control.
I'd love to know which exchange allows you to fix prices for OTC-type trades since that could be useful. That's a service that's very popular in the precious metals business since many dealers depend on securing prices while they ship the metals to either industrial clients or other dealers.