Web App Buyer Screen
Place a bid for a stock
Counterparty can enter into any of the agreements
For the first time in modern history, we have at our hands a technology that lets us take control of our own money. Money traditionally has been controlled by governments: a person outside the US cannot invest in the US stock market, a person in the US cannot invest in real estate in Moscow, a person in China cannot buy large quantities of US Dollar. We built Synful Futures to free the people and their money from the tyranny of the powerful. Synful futures lets
- people in any part of the world to invest in the capital markets of any region
- resourceful individuals/institutions to lend capital at competitive rates
- traders to buy and sell synthetic futures based on any kind of asset.
How it works
Li, a Chinese resident, wants to invest in the US stock market (say, the TSLA stock).
- He opens an offer using Synful Futures by funding a smart contract with ETH worth $1000—the amount he wants to invest in TSLA.
- Several US residents who have access to trade TSLA, make counteroffers to Li's saying that they can buy TSLA on Li's behalf and put a certain amount of ETH as collateral into the contract. They can additionally include a 'fee' amount for providing this service.
- Li decides between the various counteroffers by comparing the amount of collateral offered, the fee charged, and their ID/reputation (derived from Bloom IDs).
- Li finally decides to enter in an agreement with Jay, whose had offered a collateral of $2000 and a fee of $10. Li additionally declares an expiration date in the future on which he wants his position in TSLA to be liquidated.
- Upon entering into an agreement with Li, $1000 worth of ETH is disbursed to Jay that he can use to buy stocks of TSLA.
- On the expiration date, the smart contract fetches the price of TSLA using a Chainlink oracle (connected to a stock market price API). It computes the profit/loss made by Li, and pays Li the amount of ETH (minus a fee) that the stock is worth on that day. The rest of the amount held in the contract is returned to Jay.
Why this works
Such contracts typically fail to work due to counterparty risk: in the above case, Jay could decide to not buy TSLA stock. But this does not affect Li since, at the expiration date, the amount the TSLA stock would have been worth is disbursed to Li. Li gets to enjoy the profit/loss of investing in TSLA—it doesn't matter if Jay buys the actual stock or not. If Jay doesn't buy TSLA, and by the expiration date the TSLA stock increases 50% in value—Jay is forced to cover this amount using the collateral he placed when entering the agreement with Li. This collateral is the maximum value of TSLA stock holdings that Li is able to liquidate at the expiration date. If Jay doesn't buy TSLA, and the stock price declines—then Li gets an amount less than what he invested, while Jay taking the difference. In summary, it's Jay will be exposed to risk by not honoring the purchase agreement. Buying the stock upon entering the contract and selling it at expiration is the only risk-neutral strategy for Jay.
What if Li changes his mind after entering the contract with Jay, and decides he wants to cash out? The contract itself is an ERC721 that Li can sell to a third party in the open market (via 0x v2). The new owner of the contract now becomes entitled to the profits/gains at expiration. Thus, this is a way to create synthetic futures contracts on the blockchain.
What if Li wants to invest in both ETH and TSLA? The ETH sent to the smart contract are held by Li are held as collateral. If the price of TSLA stays stable, but the ETH/USD price increases, then Li gets to retain this upside since the same amount of ETH that he put in at first are returned back to him upon expiration.
Challenges we ran into
- Different protocols that we used for this app (Bloom, Chainlink, 0x) are live on different testnets: there is no single testnet on which all the three protocols are deployed. We faced challenges in trying to manually deploy these.
- Web3 integration became complex as the number of interactions in our dapp grew.
- For contract expiration date trigger, we used a block height condition instead of the actual date.
Accomplishments that we're proud of
- Getting Chainlink oracles to work. We needed oracles for ETH/USD, stock market prices.
What's next for Synful Futures
- Improved UI, fixes for corner cases/bugs.
- Integration with Bloom credit score API for investors to better compare between various counterparties (fulfillers).