zkBob Cloud
Last updated
Last updated
The zkBob Cloud was used for the EthIndia hackathon, it is not currently available for EthDenver or other hackathons.
Privacy is normal. We are all entitled to privacy in many aspects of our lives, and this includes our finances. It is normal to keep details such as how much money you have, how much money you make, and how you choose to spend your money private. This can be difficult on-chain.
Enter zkBob. zkBob is a privacy application which anonymizes transfers between users. The BOB stablecoin lets users exchange value in a stable, predictable manner. zkSnarks prove certain actions have occurred without revealing details about who completed the action or the amount transferred. Compliance features deter bad actors and illicit usage. zkBob gives privacy back to the everyday user.
zkBob UI is developed as a client side application which generates zkproofs on a user's machine. This is ideal from a security and privacy standpoint, however it can introduce some obstacles for application developers. To simplify zkBob interactivity and reduce friction for users and application developers, we have released the zkBob API and cloud wallet into beta.
With the API, developers do not need to use a client SDK to manage crytpographic keys, client application state, and other complexities. Users do not need to secure keys entirely on their own or wait for cryptographic proof generation.
The hosted version of the zkBob REST API and cloud wallet greatly expands the possibilities for interaction. The cloud wallet is currently in an experimental and custodial state, this first iteration is developed specifically for hackathons to give devs an opportunity to experience and build zk-enhanced use cases. We welcome your feedback as you hack!
For the hackathon, we want you to explore new use cases for private transactions using the zkBob API and BOB stablecoin.
Donation platform where donors maintain anonymity
Fundraising platform with internal KYC while maintaining public privacy
DAO accounting application
Private payment-splitting application for friend groups
Wallet integration for private payments - integrate BOB payments into an open source wallet
Tip bot/extension (telegram bot, twitter bot, browser extension)
Food delivery service with private payments
BOB powered vending machine/POS
*Extra credit: Direct library integration, direct deposits
Your idea here!!!
In the ZkBob Cloud Wallet every developer has their own secret api key (accountId
) used to manage funds. The key is kept on the server and given individually to each team, either requested through discord or in-person at our booth. Each key will also contain a BOB balance. See below for more info on receiving an API key.
Since all payments are settled on a public blockchain privacy can be complicated. To avoid obvious correlations between txs we use special generated receiving addresses that can’t be linked in any way to the account. Using a new receiving address for every incoming transaction is recommended to eliminate any possibility of deanonymizing the recipient.
Balance management is not as complex as it seems. There are notes and accounts — the difference is similar to physical paper notes in your wallet and your accounts at the bank. Most of the time this doesn’t matter, but there is one edge case when it’s important. Due to technical restrictions the user cannot spend more than 3 notes in one operation. If the user needs to do this there will be one or more additional technical transactions to accumulate the balance to the account prior to the transfer itself.
Get an API Key & BOB: Request your API key (accountId
) either through the #sponsor-zkbob channel on EthGlobal discord https://discord.gg/ethglobal or come see us in person at the zkBob booth! Then join the telegram at https://t.me/+sMbZvmVzYmQ3ODlk to ask any questions. The API key accountId
is used to interact with the zkBob cloud wallet. You will receive 10 BOB into your account to use for testing, functionality and demonstration purposes. It can be transferred to other accounts you may create using the zkBob UI.
Explore API Methods: Use the Insomnia collection to explore zkBOB Cloud API methods.
Download Insomnia (https://insomnia.rest/download)
Import collection
Enter url: https://tinyurl.com/zkBobIndia
Replace default accountId
with your API keyaccountId
Note that the current API does not include deposit and withdrawal functionality, only proving mechanisms related to transfers.
REST API url | |
Production Insomnia collection JSON | |
Staging Insomnia collection JSON | explore methods
Note: This will not work with dummy |
This is a typical payment process flow. Here you see example relationships between Alice and Charlie, but any transactional relationship can be created here. Charlie can use a self-custodial ZkBob wallet (through the zkBob UI at https://app.zkbob.com/), or they both can share a single ZkBob cloud account.
Alice has not yet created a zkBob account through the UI.
Alice creates an account using the zkBob UI at https://app.zkbob.com/
Alice generates a new receiving address through the UI.
Charlie gets an API key accountId
for zkBob Cloud. He checks his account by sending a GET request to https://cloud-mvp.zkbob.com/account?id=accountId
.
Alice DMs her receiving address to Charlie. Charlie makes a transfer to Alice's shielded address by sending a POST request to https://cloud-mvp.zkbob.com/transfer
. It responds with the transfer id.
Charlie monitors the transaction status by sending a GET request to https://cloud-mvp.zkbob.com/transactionStatus?requestId=transferId
Charlie views the outgoing transfer details by sending a GET request to https://cloud-mvp.zkbob.com/history?id=accountId
Alice checks her account in the UI to see that her account balance has changed. She checks the history tab to see the incoming transfer.
Alice has already created an account through the UI and has some shielded BOB in her account. Charlie already has a zkBob Cloud api key (accountId
)
Charlie generates a shielded address by sending a GET request to https://cloud-mvp.zkbob.com/generateAddress?id=accountId
Charlie DMs the shielded address to Alice. Alice makes a transfer to Charlie's shielded address using the UI. Alice waits for transfer execution and checks the history tab to see the status of the transfer.
Charlie checks the incoming transfer details by sending a GET request to https://cloud-mvp.zkbob.com/history?id=accountId
. It may require some time before new details appear.
Charlie gets the new balance of her account by sending a GET request to https://cloud-mvp.zkbob.com/account?id=accountId
.
For the EthIndia hackathon, 5 prizes of $2000 BOB ($2000 USD equivalent) will be awarded to the top 5 projects utilizing the zkBob API. Creativity, innovation, and implementation will be considered during judging.
Click New Document ->Import/Export
Click Import Data -> From url
Click Insomnia to view Collections and select the zkBOB Cloud collection.
In the zkBOB Cloud Collection click on zkBOB Cloud -> Manage Environments.
Replace the default accountId
"cafecafe-cafe-cafe-cafe-cafecafecafe
" with the accountId
you receive from the zkBob team.
Click Done to save with your accountId
.