DAOs and other crypto entities who have to efficiently utilize their treasury for ongoing expenses. Whether the treasury is concentrated with majority of governance tokens or well diversified, these DAOs need liquidity solutions that minimize tax events, support HR and the flow of capital within the DAO (guilds).
StreamRoll has several unique solutions to streamline the HR nightmare. We begin with creating a "safe" for each DAO that will allow them to borrow and lend their capital, pay payroll and automate HR as efficiently as possible.
StreamRoll Finance allows DAOs and crypto companies to utilize their treasury as collateral for payroll expenses. These payrolls will be streamed out via the Superfluid protocol to the employees who may do what they wish with their salaries. StreamRoll will enable DAOs to borrow against their governance and other tokens in real time to minimize interest expense and stream in real-time to their employees. The benefits to DAOs is to unlock their net worth to pay expenses without having to sell their tokens and also incur tax events.
Employees can receive their salaries each minute and can choose to invest in real-time (e.g. via Ricochet Exchange) or however they see t. These streaming smart contracts can also represent the employer/employee contract agreement written on-chain via calldata1.
- DAO's will be able to:
- Supply their governance token (or ETH, other types of collateral) and receive a DAI (or any other ERC-20 stable coin) in return.
- Setup salary streams to their employees via the Superfluid Protocol. *DAOs will be able to make their real-time payroll without the necessity of selling their treasury for fiat.
StreamRoll implements the Minimal Proxy Contract Standard or EIP-1167. There is one implementation contract (StreamRollV1
) where all the logic will be kept, and every time a user wants to interact with the protocol, it will call the _clone()
function in the CloneFactory.sol
contract.
StreamRollV1.sol
:
- This contract holds all the core logic and will be deployed only ONCE and act as the base "implementation" contract.
- In order for it to function as a base contract, we used a technique that makes it "unusable" (check the constructor).
- The copies will call the
initialize()
function acting as the constructor for the Proxy.
CloneFactory.sol
:
- This contract will make identical copies of
StreamRollV1.sol
. - The DAO and/or user will call the
_clone()
function to create a copy ofStreamRollV1.sol
via the Minial Proxy Contract Standard.
- Immediately after the
_clone()
function is triggered, theinitialize()
function is also triggered for theStreamRollV1.sol
copy asmsg.sender
for the argument. - This makes the contract temper-proof and the
msg.sender
as the owner. - All the functions that change the state have an
onlyOwner()
modifier, making it not possible for a bad actor to steal funds. - As another security check, every time the owner retrieves funds, the funds go straight to the
owner
, not to a providedaddress
. - Once the safe is created, you cannot change the
owner
and is a one-way function ➡️, funds can only be retrieved from theowner
to theowner
. - Sound familiar? We got inspired by a protocol that implemented a similar architecture → Gnosis Safe.
- We lost three front-end dev's during our process 😧, so it is what it is. We think it is unique with lots of character ✨
- When we went to upload the video, we noticed no sound 🚫🔉 was recorded and we can re-make it. We did upload it and plan to make one with sound, since we think people want to hear us, maybe?? Our team is global and we cannot re-do it at 8:00pm CST 12/10/21.
- We begin work on this project from an uncompleted idea for ETH Global. We knew we wanted to keep working on this and saw the DAO Global Hackathon a perfect fit in which we put a lot of effort (and still are....lol) into.
- Contact:
- Chris Adams → chrisadams@startmail.com
- This repo contains our Solidity contracts only:
npm i
npx hardhat compile
npx hardhat node
→ Spin up a local node OR:- make a copy of
.env.example
and name it.env
- Fill out credentials
npx hardhat run scripts/deploy.js --network <yourchoice>
Footnotes
-
Would be V2. 🏁 ↩