Hey world, this is documentation in detail of the current functionality provided by my product (a.k.a pStore.app or pStore for short). Basically, there are 4 main features so far:
- Accounts management.
- Transfer coins privately.
- Shield: turn public coins (ETH/ERC20) into private coins (pETH/pERC20).
- Unshield: turn private coins (pETH/pERC20) back into public coins.
The pStore manages 2 main accounts: one for Incognito and one for Ethereum. Unlike what Incognito app is doing, pStore requires have Ethereum account in order for a user to interact directly with Incognito smart contract. In other words, the user can create and sign a transaction right at client-side (or browser particularly) which will call functions provided by Incognito contract (eg., shield ETH/ERC20 to turn coins into private coins, or unshield pETH/pERC20 to turn private coins into normal coins that can be used on Ethereum network).
The approach might be different a bit from what Incognito wallet app is doing but it would guarantee that the processes would be operated completely in a decentralized fashion. It means user’s money would flow back and forth directly between pStore and Incognito contract and no need to transfer the money to any temporary/middle Ethereum account controlling by a centralized party.
And all transactions of both Incognito and Ethereum would be signed at client-side (a.k.a user’s browser) and sent to the respective networks without enclosing user’s private keys and pStore has also never sent these private keys out of the browser (to anywhere/servers), you can catch/inspect all requests out of the browser for double-checking.
Note: pStore is pointing to Incognito testnet and Ethereum Kovan testnet so you can give it a try with coins you have on these networks. I don’t want to point pStore to mainnet at this point when it would be very risky for user’s money since it’s still under active development.
And now that’s time to start our journey with pStore…
Navigate to pStore’s home page, if this is the first time you visit pStore or Incognito and Ethereum accounts have not existed on your browser yet then you would need to create or import them first.
Create or import Ethereum account
Create or import Incognito account
Once you have accounts set, your addresses and token balances have also loaded. These balances are real numbers that would be loaded from the networks of the respective accounts (a.k.a Ethereum and Incognito networks)
Address along with public token balances from Ethereum
Address along with private token balances from Incognito
From now on, there would be three more tabs displaying on App bar: SHIELD, UNSHIELD, and PAPPS
After accounts created/imported, you can transfer PRV (Incognito’s native coin) or pCoin (pETH/pERC20) privately.
Click on pCoin you want to send, a popup would be shown up in which you can fill recipient’s Incognito address as well as sending amount. And then press Send button to transfer.
Click on pCoin item to select token for transfer
Transfer pCoin privately
Click on Shield tab item, now you’re ready to turn your public coins to private coins. There are two steps for the process: Deposit ETH/ERC20 to Incognito contract and Get & Submit proof to Incognito chain.
At step 1, you just need to select a token you want to shield along with its amount and then press Deposit button, pStore would create a transaction that is signed by the created/imported Ethereum private key in the previous section. The responsibility of the transaction is for sending the selected coin to Incognito contract (0x31F7293dEebCEd75d035De0843498D87B90a3eee - the Incognito contract address on Kovan testnet)
Deposit coins to Incognito contract
After deposit, you would be navigating to step 2, and then deposit transaction detail is displayed. If you see the status is Succeeded then the deposit seems to be perfect.
Get & Submit deposit proof to Incognito chain
The left thing is waiting for pStore’s workers to help you get and submit deposit proof to Incognito chain for pCoin request. The process’s statuses would be updated continually and you can press the Refresh button to see what’s going on with your request. The process would take some time to finish and once it’s done, the Check Balances would be shown up. You can press this button to check your pCoin balances.
Check pCoin balances after shielding
Similar to Shield, there would be two steps for Unshield process: Burn pCoin to Unshield and Get & Submit proof.
At step 1, fill out the form for Ethereum address you want to receive your coin, pCoin you want to unshield along with its amount then press Burn To Unshield button, pStore would create a transaction that is signed by the created/imported Incognito private key in the previous section. The responsibility of the transaction is for sending pCoin to Incognito chain’s burning address.
Burn pCoin to unshield
After burn, you would be navigating to step 2, and then burn transaction detail is displayed. If you see the status is Submitted then the burn seems to be okay.
Press Get Proof button to get the burn-proof, it’s a preparation step for signing and sending a transaction to Incognito contract that requests unlock public coin to the pre-selected Ethereum address in the previous step (0x3ea83820b473368df77ae02e65a8607b901e96cd).
Once all actions get completed, a similar success screen with a Check Balance button would be displayed, press this button to check public coin balance.
Check public coin balances after unshielding
I’m building a platform where any developer can utilize the foundation (base components and APIs) to build their own pApps upon it and list or host these pApps on our platform. I personally think that this would be the right way to be able to make Incognito stronger and run faster instead of counting only on the core team. That being said the more developers build privacy applications, the more robust Incognito would be but they would need an easy and convenient tool to do it.
The first pApp ever hosting on pStore will be pMultisig that I’ll be building next month. Stay tuned!