{% hint style="danger" %} The zkBob Cloud was used for the EthIndia hackathon, it is not currently available for EthDenver or other hackathons. {% endhint %}
{% hint style="info" %}
- zkBob Intro
- zkBob API & Cloud Wallet
- Get Started
- References
- Payment Flow and Scenarios
- Prizes {% endhint %}
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 keyaccountId
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
- Click New Document ->Import/Export
- Click Import Data -> From url
- Enter url: https://tinyurl.com/zkBobIndia
- Click Insomnia to view Collections and select the zkBOB Cloud collection.
- Click New Document ->Import/Export
- Replace default
accountId
with your API keyaccountId
- View common scenarios below.
- Note that the current API does not include deposit and withdrawal functionality, only proving mechanisms related to transfers.
REST API url | https://cloud-mvp.zkbob.com |
Production Insomnia collection JSON | |
Staging Insomnia collection JSON | explore methods |
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 tohttps://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.
{% file src="../../.gitbook/assets/zkBobandAlice.pdf" %} Learn more about how zkBob works in this conversation about privacy between zkBob and Alice. {% endfile %}