This is the fatal flaw with smart contracts as a concept.
If they can be changed by the author then they don't provide the security guarantees that make the system worth using, but if they aren't changeable by the author then a huge fraction of smart contracts will ultimately end up doing something unintended because of any of the million reasons we don't normally expect first releases of alpha software to work perfectly in all circumstances.
In a perfect world Etherium would work great, but we don't live in a perfect world. People make mistakes. Any system which expects human input but isn't designed to gracefully handle human error (including the humans who programmed the system) is probably not going to end well.
This means this ultimately require some form of human arbiter to decide in cases like that, but this ultimately defeats the entire purpose of smart contracts.
https://medium.com/@jimmysong/the-truth-about-smart-contract...
when I had my own blockchain moment. I think that immutability and lack of human judgement limit the usefulness of these things. And of course, not everything needs decentralised.
You mean, except for the cases where we do exactly that? Like mars rovers, space shuttles, medical devices, IOT, etc...
Smart contracts have people actively snooping and trying to exploit bugs for gain. Oh, and they are publicly accessible.
Also, IOT...pwned many times over ;)
To assume smart contracts don't go through multiple revisions is equally naive. Now we're arguing about implementation, anyway, which is not the point. Implementation and best practices can be iterated on. The fact that the ecosystem isn't mature yet isn't an argument against getting it there.
Imagine surfing the web, but instead of showing a 500 error a broken page would withdraw a random sum from your checking account. It doesn't matter how good the best pages are, no one in their right mind would ever open a browser.
You're absolutely right. There's also nothing to prevent a motivated novice from writing software to control a mars rover. Just, nobody's going to send his rover to Mars. Nothing stops anyone from writing a smart contract, but common sense will (eventually, once the dust settles) stop people from throwing money at them.
You really mean that eventually smart contracts can be reliable, no bugs, etc? I've seen procurement sign contracts with various unclear wordings in them. I've seen vendors wrongly apply contracts in their rates. It's quite common to have errors in real world contracts. I fail to see how a smart contract would work especially as it's even more complicated.
Also of note, smart contract does not necessarily mean no human intervention. A smart contract can appeal to an external and possibly human judge/arbitrator.
1. Blockchain smart contracts are often unchangeable, so you can't fix bugs
2. The language is being built as people write code, with some bad design choices that encourage mistakes (slowly being fixed)
3. Libraries are still being developed
4. Tooling is still limited (even basic linting)
5. People are not taking the time to have a beta process.
6. People prematurely optimize gas, at the cost of readability
(For non-Ethereum devs, here's a short tutorial for how the language works: https://learnxinyminutes.com/docs/solidity/ )
My own view is that you have to code expecting that things go wrong, and ensure that your logic survives inevitable mistakes ('resiliency').
There's a lot of great resources on security, for people interested in this space:
Ethereum Safety: https://github.com/ethereum/wiki/wiki/Safety
Decentralized Application Security Project: https://dasp.co/
Consensys Smart Contract Best Practice Guide (I helped coauthor this back in 2016 after the DAO): https://consensys.github.io/smart-contract-best-practices/
Hacking Distributed is a great blog for blockchain security:
http://hackingdistributed.com/
Emin and Phil Daian are great to follow on Twitter:
https://twitter.com/phildaian
https://twitter.com/el33th4xor
Audit Checklist (written by my team): https://github.com/cryptofinlabs/audit-checklist
(Disclosure: Our team does audits for a few projects: http://audit.cryptofin.io/index.html )
Feel free to add other resources to this thread. Imagine it'll be useful for everyone.