The idea of this project was to reward teams that manage portfolios for a fund manager with an NFT that reward streams of tokens via Superfluid. The data to measure the performances comes from Covalent.
DISCLAIMER: Unfortunetly, I could not inter-connect all pieces together in time, so only isolated pieces can work: It is possible to get the performance from the data from Covalent and you can also do proposal/queuing/voting but it is not yet connected to Superfluid. The idea The idea of this project is to reward teams that manage portfolios for a fund manager. For example, Team 1 is in charge of a partfolio of certains assets, Team 2 is in charge of a portfolio of other assets, etc.. At regular interval, the performance fo each team is measured by getting the overall performance of each portfolio via Covalent and calculating its growth rate. The best team gets rewarded an NFT with carries streams from Superfluid. Each team has a specific target growth to reach. For e.g. Team 1 is in charge of mature/well-established assets. The growth rate needed for Team 1 to get and the NFT is 5%. Once all calculation are done, we can imagine a certain duration in which those performances are review through reportings. Once reports have been read, a proposal is created to vote for the transfer of the NFT to another team. If the vote passes, then the Bonus NFT ownership changes to the best performing team which will from now on receive the flow from the NFT via Superluid.
How it's made
It used Hardhat, Open Zeppelin Governance contracts with Timelock, Covalence (and Superfluid if everythign was interconnected). Basicallly, regularly you call a script that get the portfolios data from Covalent and the performance is then calculated base of the last review. Then a proposal is made to transfer the NFT holding the bonus stream to a new team, the one that had the best performance. In a perfect world, if the votes passes, Timelock controller is allowed to TransferOwnership of the NFT, but right now it just stores the value (the winning address) in another contract. :/