 prediction market on Ethereum and I'm just gonna talk about a few kind of weird things that we do that's maybe different than other other contracts on Ethereum and kind of why we do them and I'll keep it keep it short so maybe we can get back on schedule so when you're updating contracts there's like there's a few things you have to decide one is like how do you decide whether to update a contract you know you can say you can have one private key which basically says this private key is going to be the one that updates the contract you have M of n so that's like multi-signature where you say you know three out of five of these keys have to agree and if so we'll update the contract you can do other things like an auger for instance the way we're going to decide updates is we'll have the reporters vote on it but I decided didn't make sense to talk about that too much because you know having something like reporters in your system may not be too relevant so the other problem you have to solve when updating a contract is basically how do you actually do it without like losing your data or paying a ton of money to transfer your data so the simplest way to do things is you basically just set up a contract it has basically your data in it has functions and all the functions do is basically forward the call to another contract which has your business logic which you know actually modifies your functions so an example would be like you have a contract that has like some money in it or something and you want to be able to update your send function and so what you do is you write another contract and the first contract always forwards the calls to the new one and your first contract keeps the second contract's address so if you want to update the contract all you do is change the address the problem with that is you basically cannot really change the parameters that send uses you cannot you know make an entirely different function so it's kind of limited in how you can upgrade things another thing you can do is there's this thing called call code which is an opcode which allows you to basically run other code from another contract as if it was in your contract it's similar to delegate call the only difference is call code you can't have state and second contract which isn't really super relevant to this talk the problem with doing that though is you can't really change that what's called the ABI in any easy way so every contract has this thing called the ABI and basically all it is is the data that tells you what functions your contract has what parameters your contract functions have in them and so if you want to be able to update your contracts and change the ABI using delegate calls not a super good way to do it there's one kind of hacky way you can do it where you say well if we pass the message dot data to the contract we're calling then we can basically set it up so that you can call any sort of generic function on any contract you want provided that the user you know inputs the proper data the problem with that is one it's very confusing for people trying to audit your code or read your code try to understand it it's very confusing from someone trying to interact with your code because it's just this generic function that's like pass the message data to to whatever contract we want so the way we actually do updates for contracts is we separate the data and we separate the business logic so all the data is stored in separate contracts with getters and setters and all the business logic so stuff that modifies it are all in separate contracts as well then what we do is we say okay in the data contracts we'll have a white white list which allows these business logic contracts to modify it and so what that allows you to do is it allows you to update your functions that are actually modifying state in a relatively easy way and it allows you to add new functions allows you to change the parameters allows you to do basically almost anything you'd want to do when you're updating something without many limitations and if you want to add new data you can basically just create another data contract so that's kind of the way we update things as opposed to using the you know the more traditional recommended way of delegate call another interesting thing is we use serpent as opposed to solidity the reason we use serpent is because it's stupidly simple if you look at solidity it has it has quite a few complicated features in it there's a lot you can do with it actually serpent is this really basic and so it makes it kind of easier to find flaws when you're looking to serpent code as opposed to solidity code the other reason is when we started so you didn't exist which is a good reason but one thing I'm really interested in is when you look at like like how we're trying to approach like formal verification and things like that for improving security of smart contracts we're really kind of almost starting from scratch we're building on top of solidity things like that yeah they're using using like Y3 which is good because it's you know building off of existing work but what I think would be really cool is if like you were able to like write smart contracts and in a data basically so I made a tweet about this kind of as a joke but I looked into it more and it actually seems very interesting it once the EVM supports WebAssembly you'll be able to take ADA code compile it to using the LLVM and then compile that's WebAssembly which means you can write smart contracts in ADA which is very interesting because that's the language that the DoD NASA all these super super mission critical systems use and interesting thing about it is they spent tens of hundreds of millions of dollars into writing suites of software that allow you to do formal verification in it very easily so if you write a program in ADA it allows you to do tons of formal verification stuff automatically for one without you even happen to do anything and then if you write like assertions and things it'll also automatically prove things for you very easily so what I think would be really cool is people started writing contracts in ADA so if you look at like the Ethereum WebAssembly GitHub page they have plans to make it so there's a library for C and a library for Rust instructions on how to kind of use Ethereum write write Ethereum programs in those languages and it'd be cool if they have one for ADA so what we'd like to do is basically like announce like basically $10,000 bounty where if someone does that for ADA you get 10k and Bitcoin or Ether or whatever you want and basically not super relevant right now because the WebAssembly stuff is not that far along but in a few months once they start doing it for C and Rust shouldn't be too hard to do you'd basically just look at what they're doing what things they're adding and write a library for ADA that allows you to write Ethereum contracts in ADA so that'd be very cool because you wouldn't actually prove quite a bit more about your contracts in ADA than you can in any other language the only other thing I have is where people ask me all the time about what we're doing with RAP when it's a RAP launch so basically a bunch of people messed up their Ethereum buy-in so we're gonna do another test run this week and then after that launch like in a week and that's that's the idea that's it