Tsunami

Tsunami

Tsunami is a protocol for PRIVATE token streaming at a per-second rate - without revealing information about the stream or its participants. Powered by zkSNARK tech.

The problem Tsunami solves

Token streaming on per-second basis as a payroll or grant has already been picking up and showing uses. That includes, for example let's say a DAO funding a project while having a hold of a part of promised granted amount over time as stream. As using a stream allows DAO to stop stream if funds are misused. However, with increasing concerns over privacy on public blockchain & not-so-friendly regulations not every DAO may want to stream funds to a project publicly. Some may have concerns about the funded-team even if team is building a public good! But that doesn't mean DAO or any other party doesn't want to fund it!

Tsunami allows DAOs or any entity to start a stream to some other party. Apart from duo-party (sender & receiver) being anonymized, stream parameters like - stream rate, start & stop time of stream remain private between sender & receiver. Preserving privacy of sender DAO & receiver team allows for innovations to thrive (esp. in other privacy tech) without constantly be concerned of annoying implications that stop it.

Challenges I ran into

Some major hurdles were:

  1. Coming up with a logic/design that preserves privacy with token streaming as there's nothing like it yet currently. We came up with a approach which we call - Stream as a UTXO - where each stream is a UTXO in a Merkle tree. Only two parties - sender or receiver - can spend this UTXO to create a new one. But each party is restricted to what they can change in newly created UTXO (e.g. receiver can change checkpoint time of last withdraw).
  2. zkSNARK tooling is not very mature yet - so debugging errors related to Circom circuits are hard. It required some manual debugging to dig into spot where errors originated in the circuit.
  3. Unlike other UTXO based apps - a stream UTXO should be able to spent by two parties - either Sender or Receiver. So to decrypt the encrypted notes (UTXOs) a shared secret key is calculated with one party's shielded private key & other's shielded address or public key. So that both parties can decrypt the encrypted note & use it to spend it conveniently.

Tracks Applied (3)

CoinDCX

CoinDCX

Gnosis Chain

Gnosis Chain

Shardeum

Shardeum

Discussion