-
Notifications
You must be signed in to change notification settings - Fork 16
Specification
Richard Ramos edited this page Jan 10, 2019
·
4 revisions
- Requires SNT to buy License for selling crypto to fiat
- License is bought via
approveAndCall
onSNT
contract to avoid having to create two transactions (one to approve SNT expense, one to buy license) - Buying a license allows sellers to set an area on the map to indicate where they're located.
- Licenses can be released after N days have passed. SNT used for license is refunded back to the seller
Questions / Consideration
- Where is the information of the seller stored?
- Indicate via FAQ (similar to voting dapp) how can a seller acquire SNT
- Once a license is bought, Sellers will appear permanently in the map. Possible solution:
- License is automatically released once a time has passed (similar to ENS?)
- Buying a license grants you access to sell crypto. But they need an additional stake that determines the max amount a seller can sell.
- Part of stake is used as bond when there's an arbitration case opened
- Harbinger tax. Acquiring a license incurs in a periodic tax depending on the amount of crypto the seller is willing to sell.
- Buyer browses the map or list of sellers, and picks one based in the location / token sold / exchange_rate / reputation.
- Buyer proceeds to communicate with seller to determine Terms and Conditions of sale 1.1. If seller wishes to meet the buyer in a location, no escrow is created, and once the buyer and seller meet, seller sends tokens and receives the FIAT in exchange (END OF USECASE)
- If the seller wants to use Status for selling crypto, they proceed to create an escrow for their tokens, and exchange_rate
- Buyer sends the FIAT to the seller (bank/wire transfer, deposit, etc.) and marks transaction as paid if he has ETH for paying the gas. 4.1 If buyer does not have ETH, there's a function that receives a signature and can be used by a relayer or any third party to mark the transaction as paid on behalf of the buyer. This can be the same seller, and the gas cost is deducted from the crypto the buyer would receive
- Seller is notified of the payment. Proceeds to release the funds from the escrow
- Buyer proceeds to rate the transaction
Questions / Considerations
- There's a high chance of buyers not having ETH to pay for transactions. Someone needs to act as a relayer for this operation, and receive a reward for this (Can gas relayer be used for this?)
- Transaction rating should go both ways. Both the buyer and the seller should be able to see each other rate
From step 3 3.1. Seller waits for expiration of the escrow, and cancels it. 3.2. Funds are returned to the seller, and escrow canceled.
Questions / Considerations
- Escrows can only be canceled after they expire. If buyer pays and does not have enough time to mark a transaction as paid, it will be expired.
- Cases can only be opened on Paid transactions.
- If a transaction is expired, should a buyer be able to open an arbitration case, and if it's determined that the buyer did pay, what will happen? Maybe for buyers the expiration period should appear on the UI as being less than the real expiration time, so the buyer is still able to open a case while the transaction is still open.
Step 5 is never completed 5.1. Buyer attempts to communicate with seller 5.2. Buyer opens a case for arbitration
Questions / Considerations
- Should the buyer be able to release a escrow if the transaction is marked as paid by the buyer and some time has passed after the agreed expiration time?
- Buyer might not have ether for processing the transaction. Function should be able to receive a signature and be relayed by anyone (Relayer should receive a reward for this)
Step 5 is never completed 5.1. Seller attempts to communicate with buyer 5.2. Seller opens a case for arbitration
Arbitration can be opened by the buyer or seller. Current implementation expects the escrow transaction to be marked as paid. End result of the transaction is the release of funds to the buyer or to the seller.
- Actor invokes
openCase
. If user does not have ETH for this operation, he can use a signed message and a relayer. Arbitrator(s) are notified. - Arbitrator(s) reviews documentation / transaction details and determine the result
- Arbitrator(s) invoke
setArbitrationResult
and funds are released to the buyer or to the seller.
Questions / Considerations
- Opening a case should require a bond. In the case of a seller it's easy because we can require an amount of SNT / ETH to open the case, or if using the stake in case we decide for that idea. For buyers, however, the situation is more complicated when they do not have ETH to pay gas and bond. How to solve this issue? possible solutions:
- Documentation that backs the payment done by the buyer is shown publicly so anyone can open the case on behalf of the buyer, and receive a reward if the case goes to the buyer, and if the case goes to the seller, they lose the bond. (The third party here would act as curator to determine which cases are opened or not)
- Other alternative is that buyers sign the message, the third party opens the case in behalf of the buyer and earn the reward which is deducted from the buyer's purchase, however losing the arbitration only incurs in gas cost.
- Idea for notification: create a private group automatically between the buyer, seller, and arbitrator. Arbitrator is admin of the group
- Arbitrators need a way to know their presence is required to solve a case. - Can Aragon Court be used for the arbitration process? Current implementation of the contract might be compatible if we set an Aragon DAO as arbitrators.