Unchaining DeFi With ERC-4626: The Tokenized Vault Standard | Vikram Arun - Superform
Ethereum Denver·Wed, Oct 9, 2024, 12:00 AM
Learn from leading DeFi teams about the tokenized vault standard, ERC-4626. Why ERC-4626? How do I deploy my own vault strategy? What can I do with an ERC-4626? Discover best practices for building these vaults and integrating in your application! APPLICATIONS FOR ETHDenver 2024: #YearOfTheSpork ARE OPEN APPLY NOW https://ethdenver.com/apply
Transcript
[Music] hey everybody uh my name is vickram and uh I'm one of the co-founders at Super form and a contributor at the uh 4626 lines and today we'll be talking to uh to you guys about uh the new token standard uh ERC 4626 and uh potential use cases and and some of the other stuff that we've been doing around it uh so as far as what we're going to be covering in this Workshop um we're going to talk about why ERC 4626 came up and and what it's uh its role is in defi uh we'll go into a technical Deep dive into the standard covering the different functions um and specifications behind it and then we'll move into development tips and considerations uh followed by some Q&A and then there's actually we can uh show you you guys a end to end deployment example of uh actually deploying uh a vaults and and doing things with it on chain um and if there are any questions through this it's meant to be a workshop so feel free to jump in if you have questions um the Q&A there is just uh you know to have a designated time for it but anytime you guys want to jump in cool uh so if we think about what defi was trying to do what defi is trying to do uh it's turning capital on chain into something more uh through smart contracts and the idea that Capital can be made efficient by anybody anywhere is a really powerful statement and uh previously you know blockchains could only be used for storing money um we've standardized things like erc20 token transfers um and you know using blockchains to store and move value uh but the actual process of making money um has not been something that's been standardized and that's really what ERC 4626 attempts to do um is standardize that arbitrary money-making logic that makes those Legos work um to turn money into more money so a little bit of history with uh why URC 4626 came up and in the context of defi uh if we think back uh defi summer days you know dii tvl sitting you know just under you know a couple couple billion dollars uh had this massive Spike over the next year and a half and in the beginning of 2022 we were sitting in a time where there were different yield implementations on 20 different chains liquidity was extremely fragmented and there wasn't really any way that people saw forward for kind of tying all this stuff together um so together uh some of the uh founders of of UR and and Fay and some of the other leading def protocols at the time um proposed EIP 4626 and in uh May sorry in March of 2022 uh ERC 4626 was finalized and caused that massive dump in uh d tvl uh and over the next uh two years we've been building 4626 vaults uh there have been over 2,000 plus vaults deployed and uh over two2 and A5 billion dollars in uh in Native tvl in uh in those vaults with much more addressable through uh through rapper contracts and firmly believe that uh what we're seeing now is really the uh the advance of a standardized Defi and that'll take um applications to to much fire uh higher Heights than they did uh last cycle that's really exciting so going back to what I said earlier on 4626 standardizing def core Behavior this is really the power of what the standard provides and it's that it turns this arbitrary money-making logic which could be anything it could be a yield aggregator A lender a lending strategy any automated LP strategy liquid staking turns that into a vault contract that standardizes how money goes into the Vault and how money leaves the Vault um so the process of money in uh is something that URC 4626 standardizes in deposit and mint and to get money out out of the Vault that's standardized through redeem and withdraw and those four functions uh really make up the core of how we can think of any Capital moving into these strategies on on chain um and you know that itself can be anything but generally deposit assets to get shares redeem shares get assets that's applicable toward any yield strategy that we see that we see in defi now uh yeah so just going going back again to like why that standardization is important uh if we look at what the biggest issues right now in D I think that if we were to pull you guys you'd probably say something very similar to it's that D is pretty insecure for for how much tvl it has um there's a lot of hacks it's very hard to tell is something secure or not even after it has you know multiple audits uh all kinds of testing it's it's just uh the ability for us to judge and create tooling around custom yield products is not scalable um and you know we want to make it easier for for new protocols to launch securely and uh that's that's really where 4626 comes in is it provides a base layer for those protocols to adapt to to build from um so they can build more secure more composable and and just better applications um on the composability side you guys you guys have all uh seen this it's um where custom adapters are being built everywhere in Defi and that becomes kind of a close Source uh close Source thing but 4626 allows all that work to be done to to be done in the open and and that's uh really powerful um and then on on the speed side applications have gotten so complicated that uh the ability for uh for applications to be built on top and like manually integrate each one of these protocols also gets really tough and that's also lengthen development times for um for you know these new applications so 4626 is really that building block uh so that so that that developers can focus on what makes defi Defi and that's making money and if your strategy can make money that's fantastic and it'll be more secure on top of on top of a standard like ERC 4626 and hopefully that Focus can you know give more time toward actually building what matters and uh the last thing there is um standards have historically in crypto always been how we really get to the next level of of mass adoption uh whether it's ERC 20s or ERC 721 um that's how each of those kind of caught wind in its own right and uh I think that 4626 can can enable safer and and more permissionless applications um to be to be built on top so again it's just about building building on top and Building forward rather than sideways and that's uh why standardization here is is is a big deal cool uh so just jumping in into uh a little bit more about how 4626 Works uh had mentioned this this diagram here of you know money goes in through deposit and mint then money comes out through redeem and withdraw um we'll be breaking this up into three sections uh getting money in getting money out and then other important functions that uh uh that are useful for for other Vault functions so getting money into vaults uh this is a process essentially of exchanging underlying assets for the vaults for Vault shares um so you can you can kind of think of uh this asset you to get money into vaults you start with assets and each individual Vault will have one particular asset so a vault could have for example usdc as the underlying um a vault when it implements deposit would be we call that it's more of like a market order so so a user will deposit those usdc assets to get shares and on the other side you have I'm not sure if you guys can see my cursor if I move it around can you okay cool I'll start using this um and then on the other side you have limit orders which is which is like mint and uh that is effectively saying that hey I have these assets and I'm looking to get a a determined amount of shares um so that's why you know this can be thought of as a market order because it's just get me whoever many shares versus mint is I only want 100 shares I I'm willing to pay whatever assets it is to get that um so the condition here for a deposit to be successful would be two things one is that the assets being deposited is less than what the Vault defines as the max deposit uh so the max deposit can be set on a per user level and that could increment differently depending on on who's depositing but the assets being deposited always have to be less than that Max deposit number or the deposit would revert um similarly uh the preview functions uh so preview deposit for example is uh use as the lower Bound for what can be accepted out of a vault um so the amount of shares out of a vault must always be greater than what was determined through preview deposit so you can kind of think of these two as uh as gating functions uh the deposit would not go through if it was uh if it was greater than Max deposit and it would revert if not enough shares were given back and once that's successful we emit a deposit so uh we successfully received shares for four assets um and that's the end of the of the of the deposit flow um on the mint side again mint is a limit order so it's saying uh I want 100 shares of the Vault token uh I'm willing to pay whatever whatever usdc whatever the asset is for it so the two conditions here that would apply would be making sure that the amount of shares that I'm requesting is not greater than the amount that I'm allowed to be minted if it was that would revert and the second thing would be um that the number of assets that will be taken from the user whoever is depositing into that Vault um should not be greater than what the preview mint number was uh and the reason why that's needed is because it'd be weird if let's say I requested uh 100 shares and preview mint told me oh you're I'm only going to take 50 usdc from your wallet but then I actually put it on chain and took 55 that's an issue so that always has to stay true is that the number of assets taken from the user has to be less than than preview mint um the function signatures are here pretty much the high level of it is that deposit and mint deposit assets redeem uh and get shares and uh but the difference is is that deposit will take in assets as a parameter versus mint that takes in shares as a parameter um and uh one is a is a set defined amount of uh of shares that you're receiving some Advanced some just some notes Here uh which we'll come back to in uh wrapping up the technical flow is the asset must be one predefined erc20 token so this can't this can't change or anything it can't be multiple assets um and if a vault is capped or paused if there's anything that would cause uh a deposit um or mint to to revert that should be reflected in these two conditions here it shouldn't be like a silent uh a silent kind kind of revert it's either reflected in Max deposit or or the preview functions um could be reflected in either though and the last thing is deposit should return uh exactly shares back to the receiver uh so that applies to both deposit and mint actually but um just making sure that return types are are the exact same um and uh using using those using those appropriately and not rounding down or anything rounding up uh and yeah that's pretty much it for getting money into vaults on the uh flip side of this getting money out of vaults this is the redeem and withdraw flow so similar to how deposit was a market order to get assets uh into shares redeem is the market order to get shares into assets um and uh withdraw is the limit order to receive a a defined amount of assets from um from shares so both of these uh both of these functions serve to uh get rid of a user shares and and get assets uh and the the conditions are are very similar here um the max the max functions uh serve as a gating function to uh not allow the user to to burn more than what he's allowed to and then the preview functions uh will indicate on chain that uh the the user cannot have more than a certain amount um uh taken out of his out of his wallet um before returning him the uh shares before returning him the the shares that he wanted uh oop o just uh a couple notes Here is that it can only return the erc20 asset why does it keep going uh2 asset back uh so similar to how the deposit flow can only accept one years20 asset is uh redeeming from a vault should also return just uh just one asset and then uh there have also been some interesting vaults that people have been deploying where there's time locked behavior on uh on getting money out of out of vaults and if if a user is going to be time locked just remember to like reflect that in how the max functions are working uh because otherwise it's kind of hard to tell offchain uh other than you know just by simulating and seeing that it reverts and those are really helpful functions to be able to tell uh if those withdrawals will uh will work or not um cool uh just curious anybody have any questions on like the overall 4626 flow so far yeah go for it yeah just on the withdrawal side uh so nowadays more and more transactions are non atomics so you know if you want to sell an asset on a DEX maybe there's some delay and this is to prevent from me value extraction so does how does 4626 it obviously handles Atomic withdrawals but let's say you need to do some swaps and this it doesn't settle immediately um how do people kind of handle that with 4626 yeah that's a great question um so there are no execution guarantees it directly built into 4626 and that's been something of uh of contention you'll actually notice that in the spec there's no like slippage parameters right um so some people have built their own like custom implementations on top of 4626 that'll include that that slippage price um but our recommendation actually is to only interact with 4626 vaults through a router contract which would actually Implement that execution Logic for you where you know you could actually say hey don't withdraw from this Vault if it's going to result me in you know like two usdc when I should have gotten 10 um and that's uh it's not it's not being solved uniformly on a vault level which is why I think there's like a security abstraction level on on top of that um but yeah that's uh a great question and there have there has been some good work by the urine team for example in like actually protecting those swaps uh that can be made on a vault level um but generally like the idea of slippage should be solved uh through another another contract so cool um so moving on to some of the other useful functions in 4626 uh mostly these were built for General Vault statistics and uh typical uh sort of information that you'd be seeing on a vault through a normal front end uh these can be split up into things that uh ERC 4626 inherited from erc20 and new new methods that 4626 actually implemented uh so from rc20 it inherited total Supply and balance of and uh it incor and it introduces uh total assets convert to shares and convert to assets um high level there are if you're just thinking about a vault there are two metrics that you're always going to want to calculate and that's tvl and apy 4626 makes it very easy to calculate those things but notice how they don't actually Define something in the standard about how you should calculate it because it could be dependent on the Vault um but there are there are some recommendations here for how people can calculate tvl and apy on top of it uh tvl can be calculated through total assets um which is a 4626 method which will get the total amount of assets managed by The Vault times the asset price U we've also noticed that some vaults will uh uh represent total assets differently and in some cases it would actually be better to use the total assets number as the asset balance of the Vault so like looking at the actual erc20 token contract and then seeing how much was actually in the vault and then using that as a as a basis uh multiply by aset price and then uh apy uh lots of ways you can do this the two most popular that we've seen and uh are just looking at the change in total assets divided by total Supply so you can kind of think of this as uh total assets is just the amount of stuff that's in the vault and then total Supply is the erc20 inherited method uh for the amount of Vault shares and the difference in that is the difference in the price per share pretty much uh and there are some instances where that won't be totally accurate there could be it could be fees there could be um some other things which is why we would recommend like calculating apy in a couple different ways and and maybe just comparing and and seeing how those might differ but another way to calculate apy would be looking at the change in convert to assets uh which is explicitly meant to be a pricing function uh uh and you know can be used as an oracle price and U and everything else um so yeah um that's pretty much it for for that recap of the URC 4626 flow uh so 4626 has uh outside of deposit mint redeem and withdraw has uh has three main classes of functions uh one is the preview functions which are realtime simulations of what an action would do and that is used as a you know as a lower Bound for um what the actual deposit mint withdraw redeem would do uh the max functions are constraints on individual user actions uh you'll note that uh preview functions must be Global um so uh if I wanted to preview you know like what depositing 100 of this token would be that deposit of 100 must apply to all users that would be depositing 100 but the max deposit function would be potentially uh different by user depending on you know if they had recently deposited if they were KY seed or whatever else and that Max deposit could be used differently and then the convert functions um in contrast to the preview functions can be used externally for uh for average pricing so stuff like oracles front ends uh whatever whatever you you see fit the preview functions are very risk to use S uh s oracles because they will change a lot and they could be changing block by block and there actually a couple exploits that have happened um already by uh by protocols implementing the convert to assets function the same way they would preview and that's pretty dangerous um something to something to keep in mind and we had the question earlier on uh on how to hand on a vault level how to handle um execution guarantee and you'll note that there's no slippage parameters in the core functions um and that's something that uh there have been implementations that will add that but we recommend keeping the 4626 spec uh as clean and and and conformant as possible and letting that that uh that fall on the integrator to actually Implement um and then we've also noticed uh some protocols uh will obviously favor to use deposit and redeem it's just more conceptual uh uh just makes more sense to think about it in terms of Market orders and mint and withdraw was something that even in writing the spec I uh to my understanding was something that um was a little bit under under contention um but just remember to implement them you never know who's going to find use for it down the road and uh yeah this the spec has it in there so um never hurts to to to follow it yep just a bit more on the security practices uh already mentioned the stuff about the convert functions um but if you guys are curious to to look at it there's uh was an interesting exploit on cream I think it was maybe uh end of like 2022 um where yeah one of their eth markets was was exploited uh due to something very similar to this um some one of the other common attacks that we've that we've seen um and has been talked about is the URC 4626 inflation attack uh so this pretty much happens because uh the first depositor into a vault um has massive imbalance in the actual amount of shares so that person can be sandwiched and effectively lose his deposit uh to combat this um there have been multiple solutions that have been prop proposed uh but the one that we recommend is simply for from a vault Creator side just initial initialize the Vault with uh with dead shares and that's the easiest like it it just guarantees that even if integrators don't don't check that for you that uh somebody depositing straight straight into your Vault would still be totally fine and then the last Point here is uh with no execution guarantees in 4626 it is risky to deposit and redeemed directly from those contracts you just never know how that logic will be handled within it and there's no guaranteed revert cases for it um if you're not going to receive the amount of assets or shares that you wanted back so would recommend that you interact with these things through routers um that do that uh rather than you know just calling deposit on the 4626 directly uh that would that would help co uh just some some some tips in developing vaults uh the old oldfashioned ways uh can write your own from scratch give it a shot or there are a bunch of new ways to permissionless deploy uh 4626 strategies and there are a lot of tokenized strategy Bros out there that are more than willing to provide tooling and uh resources to make your uh to make your Vault and strategy um uh totally conformant and uh and safe uh some of the ones up here that have uh have listed are uran V3 Moro blue um vulcraft and Oiler VC actually I heard that Oiler was uh just here and and and uh leaked a bit of alpha on EVC so we'll have to go back and and and see what they talked about there but uh pretty much these these four things are uh ways that you can permissionless deploy new Vault strategies right now and toolkits make it pretty simple uh for anyone to to launch their own strategy and uh and get it to Market if if You' if you'd So like um & V3 is you know just focused on on the actual uh the strategies themselves morha blue on on uh new lending markets uh vulcraft can be used with u uh with any 4626 on on a bunch of different Chains would would definitely check them out and uh been building building lots of cool stuff across the board so if you decide to do it though uh there are some tools to help you develop vaults safely from scratch uh linked a couple resources um open Zeppelins 4626 uh implementation is probably the most up toate it covers a bunch of stuff on the inflation attack uh just generally like you you know new new commentary around how to handle um some of the edge cases around uh you know things that we've been seeing in vaults and they've been been uh doing a great job keeping that up to date um and then some other tools that we found super helpful are ERC X's online tester um so that's made by the guys over at runtime verification and you can run any uh any deployed Vault through it and also run your smart contract code just by copy pasting it in uh to their IDE and uh and just run uh run conformance checks against it and uh trailer bits and a16z also have also have great fuzzing tools available uh for people and and uh we check that out and there also resources to help you guys do this um and we just reach out to the 4626 Alliance and there's a a group of of people um who love to answer your questions and and get you going all right um so one of the things that we've uh we've been hearing lots and lots of feedback of on uh on 4626 over the past two years and uh wanted to cover some of the limitations of the standard and where we think these yield standards are going and and and why it's and why it's really important um so first off 4626 assumes that there are synchronous deposit and withdrawal methods and that's totally fine works great for for 99% of defi uh but for any case uh and including some dii cases uh we cannot actually process uh those synchronously uh and this is particularly an issue for most real world assets uh but just imagine you know you're trying to get into like a trunch prod uh product from Black Rock and it's like their cap is totally full we need that deposit to be capped um and there needs to be like some step in between me allocating assets then get that getting fulfilled um and similarly for withdrawals you know sometimes these are locked up in you know three-year Investments and these things aren't immediately redeemable uh how do we actually properly create this structure um to fulfill all of these asynchronous requests and that's why uh We've uh wrote uh EIP 7540 which is an extension for 4626 which supports exactly that uh pretty much tldr of it is that it introduces a request to both the deposit and the withdrawal step and that can then be fulfilled by The Vault operator and uh hopefully you know that kind of stuff will help bring more yield on chain that historically has never really been able to be defi because defi is just way way too open and composable for them uh and then the other thing is on uh on what asset is so asset is obviously the the underlying token that the Vault accepts and that's what it deals in um lots of interesting things around uh how to support multi token pools um you know double-sided LP for example and generally got a lot of feedback that ERC 4626 uh strictly enforcing only a singular asset has led to um some some weird funky implementations that we didn't really that we don't want happening um so there's this EIP out there uh 7575 which extends um this for multiple Assets in the meantime though if you are until these are finalized uh if you have multiple underlyings it is totally reasonable for you to still create a 4626 for token a and token B separately and then just have that be managed like through a swap and then you know get the lp token for example and then and then deposit um and then last one is uh the asset must also be an erc20 token um there obviously we have we bunch of different Stak eth vaults some of them are native asset native eth Vault some of them are Stak eth vaults whatever it might be um but definitely want to provide Vault support for Native eth and other other uh evm assets um so 7535 extends that for uh for Native eth uh by the way all of these are still in review and we'd love to hear if you guys have been building vaults that uh you know encountered issues doing directly on 4626 you're just curious about how one of these Works um forums there here to answer answer any questions and uh yeah um goal is just make those as comprehensive for those new use cases as possible so uh feedback feedback is always great when when it's in the review stage uh and then the actually the last thing here which I just kind of included um last minute was uh a lot of protocols will want to offer their own protocol token rewards and and uh just tokens that aren't necessarily the underlying asset which is great that's you know that's that's uh that's defi uh but the way that 4626 works right now is that those to return those non-asset tokens back to the user it would either have to be compounded into the asset so you'd have to sell your protocols tokens into the asset not good or you could distribute and airdrop it separately to users which is mostly what protocols have been doing um and that's that's that's great uh but when it happens you know uh unstandardized obviously there's there's uh room for improvement and that'd be another cool uh cool area to standardize and if anyone's interested or has been dealing with reward tokens like that would uh love to hear it cool uh so we talked about how to build a 4626 uh whether from scratch or through one of the token factories um we uh talked about uh on on this last slide if 4626 doesn't work for you what you could explore but let's say that you already have a 4626 uh what can you do with it and besides this being generally more composable than your own siloed implementation of your Vault um there are already you know a handful of use cases that you can uh that you can use right now so one of them is is you can go on super form Shameless plug uh so super form is a permissionless front end for 4626 volts and once it's on super form uh anybody can deposit any asset from any chain into that Vault so you can kind of think of it as a uh distribution platform for uh for your vaults and once you have a smart contract address all you need to do is put it on there and don't have to build a front end or or anything else for it people can find and deposit and do everything with your Vault uh just from that um and yeah if you really don't want to build any sort of front end you can also create a protocol page and manage your Vault directly from there um as well uh other cool things this is not comprehensive by the way but just uh to to keep it more uh more brief is uh you can create a prize pool on pool together so pool together is just really cool platform that uh allows anybody to uh deposit 462 sixs and and that they split the principal um and the actual yield reward and uh they'll return all of the yield accred um to to a handful of people that won the prize uh and so you have a potential to win really big without without losing any of your any of your principle and we'll also note that these prize pools are also 4626 so if you uh had your 4626 Vault made a uh prize pool on on pool together and then you could put that price pool on super form and then everybody could could access it from uh from any chain and that's how some of those vaults have been created right now cool um yeah that's pretty much it I had before the actual Workshop demo stuff but wanted to open it up for any Q&A before we got to that and see if uh there are any any things on what I I just said that could use any clarifications cool I guess we'll just jump straight to the to the workshop the actual deploying testing using a vault um you guys are welcome to follow along I'll just kind of be up here doing stuff on my computer and you guys can can watch um but we're just going to be deploying a 4626 through a vault Factory and then we're going to load it up in one of those tools to test and see if it worked and then we'll we'll try listing it on on super form to get cross chain distribution um okay let see it's kind of all right all right so we're going to be following a guide from Ur on uh deploying and managing one of their V3 three vaults um huh okay all right so the the beauty of uh how a lot of these D5 Protocols are set up their their 4626 factories is that they've deployed these on on chains that they're on and you guys can you can simply go to their Factory and uh assuming you're not going to be adding any you know additional strategy logic or anything on top of it um you could go directly to their Factory and just create a vault yourself um so it'll just be for the for the sake of this demo just going directly to to uh to ur's Vault Factory um so this is ur's Vault Factory on polygon um see they've they've created a a couple through this already um go to right we will uh make this a usdc actually let's make it a let's make it a d Vault Dall uh let's go so these are arbitrary parameters that that urine set up in their in their vault Factory but uh um can just look at their docs for for more on this but pretty much if you want to add stuff to these uh to these vaults over time you're going to have to do them through some of these addresses that you set up here uh they manage the strategy so I'll go ahead and and make Vault and whatever this index for there we go and we got our vault uh so you can see these are just some logs uh new Vault was created with the underlying asset of die and this is our vault address right here and you can see this was just created you can look at the contract should be Auto verified yep it is nice um and yeah so we could now uh take this contract so this is a functioning 4626 uh actually well okay we're going to find out if uh if this actually works as expected um I think because it's a it's a Viper Vault it might take a little time for this to run but let's see um where is so wait did they uh there we go okay so you can run uh USC 4626 contracts through this tool and it'll tell you uh just generally uh if it's if it's conformant or not anything you should be aware of when interacting with it you can also use this tool for uh ERC 20s oops um for ERC 20s and uh 721s too could be helpful if you guys are swapping on un to swap or something else you just want to see something safe or not um wait for that while we're while we're waiting for that we might as well uh can go to the next step assuming that that vault is safe which it is because it was it was created through the through the factory contract um what you could also do with your 4626 is go over to Super form um and these are all 4626 vaults that have been added um and users can deposit from any asset and any chain into those vaults anybody can also permissionless add vaults to Super form allowing for for that instant cross chain distribution and here's an example so you just go here um it's a Viper Vault so we actually wouldn't be able to run Vault checks but um can just go ahead and and add it like you would any other here and then once it's there um shows up with uh you know that was a urine Vault so we actually need urine to to approve uh and and have that show up in their protocol page but if they were to and if anyone from Ur is here and wanted to do that they can right now but I assume assume they're not um so you can just see these vaults that are that the the protocol is already verified and um you just give you guys an example like this is a conformant 4626 uh and you can just dep it from uh from any asset into this and uh you know do the bridging and and everything uh everything for you um so yeah that's pretty much it when I actually do that uh see if this 466 Checker is done yeah okay oh wait I ran the erc20 test damn h well you can't run them for everything I guess but uh if you guys try it out for more vaults it uh should give you useful results I'll give you an example of uh a token that that did work so this is a um exactly one of exactly's uh new new vaults uh and you can and you can see uh where is this what's going on this an example of another 4626 um this is actually the puff the puff eth Vault to stake eth vault and Tool will tell you uh you know ABI specifications anything else you should be aware of in in integrating it but especially from a developer standpoint before you actually would deploy the contract it'll tell you if there's anything that you're missing run fuss tests through a kid in a Foundry all that all that good stuff um and yeah just generally very helpful tool um and that's pretty much it there are a lot of different ways for you guys to to deploy 4626 vaults uh just some of them are Moro Ur in Vault Craft um and yeah if uh for for the brave-hearted could build yours from scratch but would definitely say that uh if you want to spend time actually building strategies don't do it from scratch just use one of the out of the box uh Solutions out there right now and uh you'll be good to go cool that's it thanks for thanks for listening guys and uh any questions happy to answer them and I'll be around after too if I want to thanks
Automatic transcript — names and jargon may be misspelled.