Basketh is an on-chain alternative to ETFs (exchange-traded funds). Much like a regular ETF, basketh allows you to diversify your crypto investment without having to go after a gazillion different tokens. 
 There are two ways to invest: you either choose one or more existing ETFs, or you create your own. Tier 1: Pick & pay
 Pick an existing basketh ETF to invest in, deposit your collateral + a % investor’s fee in ETH and you’re good to go.
 Tier 2: Do It Yourself Make a selection of tokens to include in your basket of assets, distribute the weight using the panel & create a name and symbol for your basketh ETF-token. Connect your wallet and deposit the value of your collateral plus a % creator’s fee in ETH. Then, our smart contract is deployed, following the ERC20 standard. This means your basketh ETF is now tokenized & minted. 
 You can track its performance on your personal dashboard. Trade, burn, earn: there are three ways to cash out from using basketh tokens. Both tier 1 & 2 users can trade or burn their basketh tokens to collect the underlying assets. 
 For tier 2 users, there is an additional way to earn: other users can invest in the ETF token you created, allowing you to collect an investment fee.

basketh showcase

How it's made

To create the smart contract we use hardhat to be able to fork the mainnet and test the smart contracts. There are two contracts: one of them is integrated into the front end, which has the functionality to create and invest and unwrap. The other contract was made to integrate the tracking of the assets into the front end, but could not be completed on time. For the creation of the ETFs we don't do anything with any third party, we just use Solidity to make all the necessary checks about the composition and percentages of the ETF. For the invest and unwrap features, we used Uniswap V3 router and V3 quoter contracts. That way, we can swap ETH for the underlying assets of the ETF. The ETF contract extends from an ERC20 OpenZeppelin contract (we also used other OpenZeppelin contracts to extend features). On the front end we use web3modal to integrate with the coinbase wallet and walletconnect (as explained in the coinbase workshop). In order to get data about the available pools that we will be using to swap ETH, we used the graph to query the uniswap V3 subgraph. We used nextjs and we deployed to vercel. FIGMA LINK We also built (but could not integrate) proving that a user is over 18 years old using zkApps powered by MinaProtocol (flowchart added as a screenshot) GITHUB LINK 2