GAP600 is a service (that has processed $5 billion in cryptocurrency) which allows exchanges and payment service providers to process Bitcoin payments instantly (0 confirmation trx). It guarantees a transaction against double-spend, expiration or other fraud even before it is confirmed by the Bitcoin network:
GAP600 facilitates instant, risk-mitigated cryptocurrency commerce by enabling exchanges to recognize unconfirmed Bitcoin.. transactions as final using a proprietary risk engine, which analyzes and performs live risk scoring for each transaction as it reaches the mempool.
How is it possible to guarantee a transaction against double-spend, expiration or other fraud before it is confirmed by the Bitcoin network? What kind of "risk analysis" might be performed to achieve this result?
Note: My question is different from Looking for a tool that gives a score based on the likely hood of a 0-confirm deposit being douple spent because:
1) The question above explicitly asks for a open source tool to achieve the intended purpose. I am asking about what logical vectors might be used to achieve the stated goal (One example might be accepting transactions from addresses associated with well known exchanges such as Coinbase who are unlikely to perform a double spend)
2) The response in that question basically states that it is not possible to achieve this. It does not answer the question. As stated in the comments, it is demonstrably wrong as GAP600 is doing this along with several others.
3) To be clear, the possibility of accepting Bitcoin with 0 confirmations doesn't imply that every transaction will be accepted. If the risk is great enough the transaction will have to wait until 6 confirmations but it GAP600 is able to accept up to 85% of transaction with 0 confirmations
4) It is also possible that a transaction which is deemed un-risky will turn out to be a double spend however it is obvious that the likelihood of this happening is so minute that the value obtained from the other transaction will outweigh any loss from this error (this is my own assumption)