Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I'm new to Bitcoin development and cryptocurrencies in general. Can anyone give a quick intro to Ethereum's scripting system and why it's such a big deal?


I'm not an expert on Bitcoin's scripting language, but here's a few main takeaways

* Ethereum allows shared state between transactions, Bitcoin doesn't. That means one application can state "The price of Eth is $10USD" and a totally unrelated application can reference that value. The result is that each application provides an API that all other applications can call.

* Both Bitcoin and Ethereum have a stack based scripting language. However Ethereum also has a higher level language that compiles to the stack based language. That means you can right reasonably readable code without OP codes. Functional program is so much mentally easier than writing a stack

* Ethereum (unlike Bitcoin) is Turing complete. It can have code that loops and recurses based on the state of the chain


> Ethereum (unlike Bitcoin) is Turing complete. It can have code that loops and recurses based on the state of the chain

Yikes. Turing-completeness is the last thing I want in a contract language. These things should be _provable_ and _total_. Allowing arbitrary computation opens up a whole new can of worms.


This was my first reaction. Why does a contract language need to be Turing Complete? Trustless contracts + Turing tarpits seems like a big turn off to me.


People are working on formal verification of solidity code: https://forum.ethereum.org/discussion/3779/formal-verificati...


I'll give you this simplistic example.

Proof of Burn in the Bitcoin world means making up an address (such as "1CounterpartyXXXXXXXXXXXXXXX...") which is essentially impossible to ever be associated with an actual key so there's no chance of recovering the funds sent there.

Proof of Burn in the Ethereum world means writing a contract and publishing the source code such that it can be verified to match the contract address living on the chain. A minimal proof of burn would be this "contract Burn {}" an empty contract that does nothing but receive funds, can never be destroyed, is controlled by nobody and all of this can be verified publicly.

The difference is subtle but important.

edit- btw, yes you can also send funds to address 0x0 but this still leaves open the possibility of a hard fork giving new meaning to that address in the future. my example is meant to be a demo of the difference mostly.


See my two comments, and feel free to reach out if you want to learn more


Great overview, thanks. I'll have to do some more reading and perhaps try it out myself.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: