Closed StefanB90 closed 2 years ago
@jlkershner might have comments here
A couple of thoughts: (1) This ticket is actually a composite of two processes. First, how do users "cash out" Pylons points -- i.e. burn points and get paid. And second, how do we whitelist wallets that have gone through the KYC process. These are linked because we don't allow users to cash out unless their wallet is whitelisted. But, it's important to think of these as separate because users may go through the KYC/whitelist process for reasons other than cashing out Pylons points, and, users that are already whitelisted don't need to go through that process again.
(2) As for the Whitelisting process, I would like to see it work like this: (a) When a user encounters a situation where Whitelisting/KYC'ing is necessary, there will be a button in the relevant app that is cobranded Pylons and Fractal that starts the KYC process. The button either pops up an in-app web browser, or takes them to their phone's web browser. (b) The user then goes through the KYC process, and if successful, Pylons is notified in some manner. I don't yet know how the Fractal KYC systems will let Pylons know that this process is successful, but we need a way to link the user's wallet to the Fractal KYC process. We might need to set up a call between Fractal KYC tech people and tech people on our side to make that happen. (c) After the KYC process is complete and associated with a given user/wallet, a transaction is put on the chain that whitelist's the wallet. That transaction needs to contain the following meta data: (i) the date/time that the Fractal KYC process was completed; (ii) a unique ID (possibly generated by Fractal) that allows Pylons to lookup the KYC info/identity of the user associated with that wallet off-chain; (iii) what special services the whitelisted wallet is approved to perform. At mainnet, the special services include: (1) cashing out Pylons points; (2) holding security tokens; (3) receiving Bedrock; and (4) sending Bedrock. Holding security tokens and receiving bedrock are similar, but not exactly the same. If a wallet is entitled to hold security tokens, that means that the user associated with that wallet is an accredited investor, or otherwise qualified to hold a security token. Whereas receiving Bedrock is permission for the wallet to receive Bedrock tokens for any reason. As an example, all of our investors will get #2 and #3, but the internal company wallets, like the Engineering Hot Wallet, will only get #3.
(3) The cash out process looks like this: (a) Pylons points can only be cashed out after they have moved from their original point of purchase. You cannot buy Pylons points and then cash out your own points later. (This is not blocking. We can implement this down the road if it is hard right now.) (b) Pylons points can only be cashed out if the wallet has at least X points. (c) If and only if a user has X Pylons points eligible to be cashed out in their wallet, the UI will display a cash out button. (d) When the user clicks on the cash out button, the wallet will check to see if their wallet is whitelisted with permission to cash out Pylons points. (e) If the wallet is whitelisted, then the user will be prompted to enter how many Pylons points they want to cash out. The default is everything they have that is eligible to cashed out. The minimum is X from (b). (f) If the wallet is not whitelisted, a modal is displayed explaining that the user must go through a KYC process before being eligible to cash out. They user can then cancel or click to start the KYC process described earlier. (g) If the user was whitelisted and entered a valid amount of Pylons points to cash out and they have a mechanism to receive payment (possibly a Stripe merchant account, see note below for Michael), then a transaction is generated that burns that many Pylons points and pays the user. [One way this could work is that the Pylons points are burned and the user receives StripeUSD which is then in turn burned and USD is sent to the user over the Stripe network. An advantage of this two-stage process is that it is extensible into the future such that we can pay users by methods other than just Stripe. To pay on a different platform simply requires issuing XXX tokens in exchange for burning the Pylons Points instead of StripeUSD. But, if it is hard-coded to pay via StripeUSD, then it requires more work later to pay via anything else.]
I'll defer to Michael regarding how the mechanics of actually paying for the cashing out works. If we are paying on the Stripe platform, the user may also need to create a Stripe merchant account.
An important note about the fees: We want users to think of Pylons points as equal to 10 cents. But, we cash out Pylons points at a rate of 9 cents after deducting fees. We use 9 cents because we sell points with a small bonus for buying at higher quantities. The default fee for IAP from Apple and Google is either 15% or 30%. Right now, I think we are paying 15% on Google and 30% on Apple, and in the long run, it will be 30% everywhere once we get a lot of revenue moving over IAP. Let's presume 30% across the board for right now.
So, for now, we cash out at 9 cents less a 30% fee = 6.3 cents per point. But, it is very important that the UI explains to the user that we cash out at 9 cents per point less fees and displays it that way and makes it clear how much Apple/Google is taking so that Pylons doesn't get the blame for the fees.
Apple approved us for 15%
I think we can end the process at burn for now, because we know who the user is from KYC and can contact them to pay them.
circle back by EOD today regarding whether we will be able to deliver this by mainnet
users should be able to get a signed receipt from fractal and submit that signed receipt to the chain and we validate that with fractal... user is then flagged as KYC complete... essentially mirroring IAP... self-service attestation recognition system that doesn't require oracles
may need revocation and time-out refresh (30 day attestation period?)
done post-main net launch (won't allow cash out of pylon points for mainnet launch
Summary
What is the KYC process for fractal to allow users to burn pylon points for USD and cash-out? Determine what UX/UI is needed
Problem Definition
To allow artists to burn their pylons points and convert them to USD (1 point = $0.08) Note: we assess a $0.02 fee for every point burned/converted to USD
Proposal
TBC
For Admin Use