VM's

My apologies if these have been asked before. I find myself drowning in all the documentation and I really only need a couple of quick answers. Also kinda pressed for time.

If I understand this correctly then every node should have a copy of every contract in existence, right? From the looks of it, the data itself is also stored on each VM. Considering that a typical application may consist of several thousand functions and can process/store unlimited amounts of data, what do you expect the average size of a VM to be? My thinking is it will grow exponentially.

Something else that comes to mind is the problem of processing power. With cloud computing growing in popularity how does etheream scale vertically when and if I need to do so? In other words, say I have an app which need to scale up at a particular time of day how would I achieve this using this framework?

Lastly and hopefully my final thoughts before I can commit -- relates to privacy. In what form is data stored i.e. is it encrypted? Let's say I want to write a banking app then I need to prove that the information remains secure and private. Is this possible? I suppose the same would be true with a voting application where voting must remain anonymous by law.

Oh and I almost forgot. How would I obtain a copy of this VM and can I alter it to act as a dev environment suitable for testing?


Thanks!

Comments

  • JasperJasper Eindhoven, the NetherlandsMember Posts: 514 ✭✭✭
    Currently, yes, every full node runs&stores everything, the gas price will increase to keep the amount of activity in check. If there is a per-block gas limit, it can only grow linearly, by definition. Note that Ethereum is just intended for the portion that requires consensus. I think thousands of functions on the blockchain for a single Dapp is a very high estimate.

    Quite a lot can be used with tricks. For instance the hash of a file proves you have the file at that point, or you can not-calculate things, and claim the result, but have a challenge that calculates it anyway. Anyone can calculate what the result should be, so anyone could prove an incorrect result as incorrect.(punishment&reward can be build in) This (longish)blogpost contains more tricks.

    Ethereum the blockchain doesnt really compete with the 'cloud',(cloud=marketing term for 'old-fashioned' racks of servers) because the 'cloud' does not provide consensus at high security. The operators of the 'cloud' can easily change what your stuff does there. There is the idea of a bittorrent-like functionality, called swarm(at the moment), that more closely resembles the idea of swarm.

    It is currently at best pseudonomous, and everything is in view. In principle it is possible to implement ring signatures, and other anonymizing techniques. You can then see everything, but you dont know who owns it. Of course data in swarm can be encrypted all you want.

    The python implementation seems best for testing automatically. Had to look at blocks.py a bit sometimes.

    Code can be found here, but that is quite a lot, most of it orthogonal multiple implementations, languages for making bytecode. Not sure where to send you, other than for just testing contracts, pyethereum seems best at the moment. That said, in principle that might change in the future. For instance testing using the javascript as in the browser would make testing and html gui development overlap more.(i.e. a test mode where the javascript can fake-mine, etc.)
  • DewaldDewald South AfricaMember Posts: 8
    edited November 2014
    Hi Jasper,

    Thank you for your reply.

    Ok it seems like we have some very different views on what project requirements may be. So I'm going to put that aside for now and focus on other things. We'll cross that bridge when we get there.

    I agree Ethereum does not compete with cloud computing - but it shouldn't ignored it either. Many of our own clients require the elasticity provided by 'old fashioned rack servers'. Ethereum in my view should be an extension to current available infrastructure. One should use what is available to your advantage and not toss it out the window.

    That's just my opinion of course.

    I'm still investigating testing - thanks for your help.

    Any guesses on the privacy of data?

  • eaglgenes101eaglgenes101 Member Posts: 43
    You use the ethereum network for public calculations. For private computation, you use your own computer, or ask someone else you trust to do it.
  • JasperJasper Eindhoven, the NetherlandsMember Posts: 514 ✭✭✭
    I 'shameless plug' this a lot, you hanging blocks, but not publish the data. The data availability problem here could be solved if both parties have to agree to the merkle root of the 'hanging transaction'.

    Both sides can only abide by the rules of the hanging block because neither will agree to Merkle roots they do not have the data of, and given the data, invalid hanging blocks can be reported. No-one else needs to know about what goes on in the hanging block state excepting the things that you need to do on ethereum level.(then the Merkle mechanism is used to convince the Ethereum contract of stuff)

    Hadn't realized this before.. Possibly much more useful as relatively simple mechanism for privacy than i thought. For instance you could use it as a mixer, everyone puts coin in the contract, agree on a hanging block moving coin to different addresses. And then take them out, and only people in the group know the relation.
  • DewaldDewald South AfricaMember Posts: 8
Sign In or Register to comment.