Skip to content

TomAFrench/NoteStream

Repository files navigation

NoteStream is the protocol for private real-time finance on Ethereum using AZTEC Protocol.

CircleCI https://img.shields.io/badge/gitcoin%20grant-active-brightgreen Built with AZTEC Protocol License: LGPL v3


What is NoteStream? 🤷‍♂️

The simplest way to sum it up is "Sablier but with privacy (using AZTEC Protocol)".

For those of you not familiar with Sablier, this means that NoteStream is a private realtime finance platform which allows you to stream money over time using the Ethereum network.

This could be applied in many areas but one obvious usecase is that it allows a salary to be paid out every second, making payday a thing of the past. While this is possible using Sablier today, it has the unfortunate sideeffect of telling everyone exactly how much you earn as everything is public on the Ethereum blockchain. NoteStream solves this issue by making use of AZTEC Protocol to encrypt the value of your salary to keep it private while ensuring that you can always withdraw the money you have earned so far.

NoteStream was started at the 2020 ETHLondon Hackathon (under the name Quachtli) by Tom French, Moe Adham, Evgeni Shavkunov and György Tamás Klöczl. NoteStream was one of six finalists and was chosen as "Best use of AZTEC Protocol".

Notice: I learned a lot about how to build on top of Aztec Protocol while creating NoteStream. As AZTEC is still very new, there isn't a lot of documentation out there, to help with this I'm in the process of writing a blog post which explains NoteStream how operates. I'll post a link here when I'm done.

Packages 📦

NoteStream is maintained as a monorepo with multiple sub packages. Please find a comprehensive list below.

Javascript Packages

Package Version Description
@notestream/contract-artifacts npm Contract artifacts and addresses for NoteStream contracts

Solidity Packages

Package Version Description
@notestream/contracts npm AZTEC note streaming protocol contracts

Unpublished Packages

Package Description
@notestream/react-app Example dapp frontend
@notestream/subgraph Subgraph tracking NoteStream stream creations/withdrawals/cancellations
@notestream/dev-utils Dev utils to be shared across NoteStream projects and packages

Contracts 📝

Find the addresses for our smart contracts below. They have not been audited in any way so I don't recommend putting real money into them.

Ethereum Testnets

NoteStream is deployed on the Rinkeby testnet.

Name Description Address
AztecStreamer Money streaming engine 0x455cD682E2411C0cF9a8c91c4498732B8Dd5B751

Usage ⚒️

To check out and compile the smart contracts, install any dependencies and then head to each individual package as presented above. For example, these are the instructions for @notestream/contracts:

$ yarn install
$ cd packages/contracts
$ yarn compile
$ yarn deploy --network rinkeby

Contact us ✉️

I'd love to hear from anybody wanting to build on top of NoteStream or building something similar. If you have any questions or just want to show off what you've made, ping me on Twitter.

Contributing 🙋‍♀️

We use Yarn as a dependency manager and Buidler as a development environment for compiling, testing, and deploying our contracts. The contracts were written in Solidity.

Requirements

  • yarn >= 1.22.4
  • solidity 0.5.11

Pre Requisites

Make sure you are using Yarn >=1.22.4

To clone this repo and install dependencies run:

$ git clone https://github.com/TomAFrench/NoteStream.git && cd NoteStream
$ yarn install

Deploy contracts to Rinkeby

$ yarn contracts:deploy --network rinkeby

Start frontend

Start the frontend with the command

yarn react-app:start

The frontend will allow you to convert ERC20 tokens into zkTokens, send these zkTokens streamed around to other Ethereum addresses and withdraw from zkTokens back into ERC20 tokens.