https://github.com/tomafrench/notestream
Private money streaming on Ethereum using AZTEC Protocol
https://github.com/tomafrench/notestream
aztec blockchain confidentiality ethereum money-streaming privacy solidity
Last synced: about 1 month ago
JSON representation
Private money streaming on Ethereum using AZTEC Protocol
- Host: GitHub
- URL: https://github.com/tomafrench/notestream
- Owner: TomAFrench
- License: lgpl-3.0
- Created: 2020-02-28T22:44:40.000Z (over 5 years ago)
- Default Branch: dev
- Last Pushed: 2023-01-24T01:30:41.000Z (over 2 years ago)
- Last Synced: 2025-03-30T08:25:31.244Z (2 months ago)
- Topics: aztec, blockchain, confidentiality, ethereum, money-streaming, privacy, solidity
- Language: TypeScript
- Homepage:
- Size: 13.9 MB
- Stars: 28
- Watchers: 3
- Forks: 4
- Open Issues: 26
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
NoteStream is the protocol for private real-time finance on Ethereum using AZTEC Protocol.
---
## What is NoteStream? :man_shrugging:
The simplest way to sum it up is "[Sablier](https://github.com/sablierhq/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](https://www.aztecprotocol.com) 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](https://ethlondon.com/) (under the name Quachtli) by [Tom French](https://github.com/TomAFrench), [Moe Adham](https://github.com/moeadham), [Evgeni Shavkunov](https://github.com/eshavkun) and [György Tamás Klöczl](https://github.com/glodzl). 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 :package:
NoteStream is maintained as a monorepo with multiple sub packages. Please find a comprehensive list below.
### Javascript Packages
| Package | Version | Description |
| ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| |
| [`@notestream/contract-artifacts`](/packages/react-app) | [](https://www.npmjs.com/package/@notestream/contract-artifacts) | Contract artifacts and addresses for NoteStream contracts |### Solidity Packages
| Package | Version | Description |
| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------- |
| [`@notestream/contracts`](/packages/contract) | [](https://www.npmjs.com/package/@notestream/contracts) | AZTEC note streaming protocol contracts |### Unpublished Packages
| Package | Description |
| ---------------------------------------------- | ----------------------------------------------------------------------- |
| [`@notestream/react-app`](/packages/react-app) | Example dapp frontend |
| [`@notestream/subgraph`](/packages/subgraph) | Subgraph tracking NoteStream stream creations/withdrawals/cancellations |
| [`@notestream/dev-utils`](/packages/dev-utils) | Dev utils to be shared across NoteStream projects and packages |## Contracts :memo:
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](https://rinkeby.etherscan.io/address/0x455cD682E2411C0cF9a8c91c4498732B8Dd5B751) |## Usage :hammer_and_pick:
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`:
```bash
$ yarn install
$ cd packages/contracts
$ yarn compile
$ yarn deploy --network rinkeby
```## Contact us :envelope:
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](https://twitter.com/tomfrench_eth).
## Contributing :raising_hand_woman:
We use [Yarn](https://yarnpkg.com/) as a dependency manager and [Buidler](https://buidler.dev/)
as a development environment for compiling, testing, and deploying our contracts. The contracts were written in [Solidity](https://github.com/ethereum/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:
```bash
$ git clone https://github.com/TomAFrench/NoteStream.git && cd NoteStream
$ yarn install
```
#### Deploy contracts to Rinkeby```bash
$ yarn contracts:deploy --network rinkeby
```#### Start frontend
Start the frontend with the command
```sh
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.