Hacker News new | past | comments | ask | show | jobs | submit login
A hacker stole $31M of Ether – how it happened, and what it means for Ethereum (freecodecamp.org)
520 points by HaseebQ on July 21, 2017 | hide | past | favorite | 414 comments




> Having sounded the alarm bells, a group of benevolent white-hat hackers from the Ethereum community rapidly organized. They analyzed the attack and realized that there was no way to reverse the thefts, yet many more wallets were vulnerable. Time was of the essence, so they saw only one available option: hack the remaining wallets before the attacker did.

> By exploiting the same vulnerability, the white-hats hacked all of the remaining at-risk wallets and drained their accounts, effectively preventing the attacker from reaching any of the remaining $77,000,000.

> To prevent the hacker from robbing any more banks, the white-hats wrote software to rob all of the remaining banks in the world. [...]

One argument I keep hearing in favor of cryptocurrencies is that they are beyond the control of individual governments and their regulation through legislation and law enforcement.

Next time, I'm going to use this case as a counterexample, because when the solution to the problem of "hackers robbing banks" is "vigilantes robbing the remaining banks", something is very wrong with your system, and it is certainly not something for the general public.


> something is very wrong with your system

To be clear, neither of the two situations is "more moral" than the other. In the end however, the question remains: who you trust. Governments have resolved the question long ago (by enforcing trust), cryptocurrencies are just now starting to face the same question. You are correct however that who you Trust remains the greatest issue behind creating a currency.


Look, no. One hundred times, no.

Governments in the west are quite accountable, voted for and with a system of checks and balances that has evolved over time, through wars and revolutions.

Some random benevolents overlords (white-hat hackers) that save you just because they are magnanimous was the only option only in the most primive societies.

Thankfully we moved on from those times, don't you agree?


Your Whig history of an ever progressing political system is not accurate in my opinion.

I've written this comment before, and I'll repeat it as it's relevant to your comment:

Societies have gradually grown more unfair as the political system has strained under their growing complexity. According to political scientists, the average voter has an extremely limited understanding of what their government is doing. The typical person's understanding of economics is similarly extremely limited.

This opens the door to manipulation by demagogues and special interests. The growing control that government exerts over society, seen in everything from the emergence of a mass-surveillance system of unprecedented scope, to the number of regulations on the books, to the percentage of GDP made up of government spending, is not healthy, and needs a counter balance in privacy technology that empowers the individual and limits the Kafkaesque tendencies of collective society.


>Societies have gradually grown more unfair as the political system has strained under their growing complexity.

Since when? Since the 60's? Perhaps. Since the rest of history? No. Every argument you make in the rest of your comment other than pure scope of surveillance doesn't apply if you aren't comparing in the short term, i.e. 1-2 generations.

In 1903, the average voter didn't know what the government was doing. Their understanding of economics was extremely limited, as well. I wouldn't argue that US society is much more unfair than it was in 1903 - would you?


> In 1903, the average voter didn't know what the government was doing.

In "Amusing Ourselves to Death," Neil Postman argued the opposite: In the 1800s, people would watch hours-long political debates for amusement and were much more politically literate (the book is more about the negative effects of telecommunication - most people know it as the inspiration for the famous Orwell vs. Huxley infographic).


As I recall, he was actually talking about the 1700's, not the 1800's, and said that by the mid 1800's, that had already changed, if in fact it was ever as rosy as he painted it to be (I doubt that, as I studied political discourse during the period of 1779-1860 fairly extensively).

In that same book, he also argued that the telegraph enabled news without context. That hit most of the US market by the 1850's. Yellow journalism and the general sensationalist nature of news writing in the late 19th and early 20th century also don't support his argument about the written word's innate superiority to oral argument and television.


You may be right in this instance but there are plenty salient examples to illustrate his point. Current governments are much better than the mixed bag of monarchic/feudal societies that were in place for much longer than current systems.


> In the 1800s, people would watch hours-long political debates for amusement and were much more politically literate

Isn't that what YouTube is?


Plus, back then, people weren't shy about tar and feathering ingrate politicians.


> Since the 60's? Perhaps. Since the rest of history? No.

The thing he's experiencing which makes him say that we are growing more and more unfair, that's exactly what you're experiencing when you say that we've grown more unfair than 60's.

But let's really see how things are today, in the 60s, there was no Internet, so majority of the opinions were dominated by what was in the mass media, so that served as a Schelling point of opinions. Today because of free exchange of ideas on the Internet, people are just holding more precise and wider set of opinions.

Back in the day for a conservative to say that we should shut down the Dept of Education, would have met by resistance by most people around them and this opinion would be shut down. But now, you can just find people who believe exactly like you on the Internet. You can find a blogger who would talk about how eliminating DoE would work, and nurture this idea in your head, and once you have enough people, you can get politicians (who are playing a game of prisoner's dilemma) who are willing to represent your opinion in order to get an edge on their opponent.

Similarly, it would and should be unimaginable and unfeasible for someone in the 60s to hold an opinion like an average Tumblr SJW holds, but today it's perfectly feasible. But is society really more unfair than 1960s? What about 1980s? What about 1990s? When you look from the perspective of minorities, it clearly isn't.

However, a lot of young people have economic conditions in mind (which people on the left describe as 'rising economic inequality' and people on the right describe as "America losing it's place in the world"), but both these things are essentially the effect of increased globalization, observed differently, which has resulted in immense amount of prosperity for the poor people in the rest of the world. Now since the gates are open, an average American has to compete with a Chinese worker or an Indian software engineer, the true place of an American is being realized. Being the largest business in America is definitely worse than being the largest business in the world. If Facebook wasn't able to operate all over the world, then clearly Zuckerberg would be less richer than now.

But at the end of the day, the world is moving towards a more fair place. Is China more fair now? Yes, but if you believe that the role of Chinese party is to facilitate the arrival of Communism via maintenance of Socialism then you would obviously think that China is growing more unfair.


>Back in the day for a conservative to say that we should shut down the Dept of Education, would have met by resistance by most people around them and this opinion would be shut down. But now, you can just find people who believe exactly like you on the Internet.

The federal Department of Education was created in 1980, so there was no DoE to eliminate in 1960. The growing centralization of education policy in the hands of ever-higher levels of government and ever more monopolistic public sectors has not worked.

[1] http://www.huffingtonpost.com/bill-gates/bill-gates-school-p...

[2] https://academic.oup.com/qje/article-abstract/111/3/671/1839...


Aside from in the rest of the developed world, where it has...?


I've seen no evidence of that. Pretty much the entire advanced world has seen its rate of progress slow since the late 1960s, in concurrence with growing public sectors.


I'd argue that you'd have to come up with a VERY suspect definition of "progress" to make that stick. Especially as almost all the major innovation in that time started with tech developed from public funding.

NASA, DARPA, and CERN would like a word with you.

Also most of the private sector innovation was due to public funding and tax code incentives (Bell Labs, Xerox PARC, etc).

So basically technology, science, medicine, and social programs must either not count as progress for your hypothesis to hold... or it's bunk.


Progress as defined by gains in per capita GDP, median wages, and life expectancy.

And the public sector growth that I view as harmful is growth in social welfare programs and regulations restricting business activity.

>Especially as almost all the major innovation in that time started with tech developed from public funding.

Quite a bold statement..


Bold? Not really.

Basically your idea of progress is “pure unrestrained corporatism” which is pretty horrific.

Thank god your reality doesn’t exist - we’ve seen what happens when it gets closer to that and the human cost is disgustingly high.

Progress my ass.


Pretty much the entire advanced world has seen its rate of progress slow since the late 1960s, in concurrence with growing public sectors

How are you measuring progress there? If you mean economic growth then now might be a good time to point out that correlation does now imply causation. Otherwise perhaps increasing life expectancy also causes a larger public sector? ;)


Correlation can be an indication of a causative association. I believe in that case of the growth in the public sector and the slowdown in GDP growth, it is.


I believe in that case of the growth in the public sector and the slowdown in GDP growth, it is.

Do you have any evidence of that at all? Because I have evidence showing the opposite: eg China has an estimated public sector value of between 29% and 50%[1] and it is generally regarded as a high-growth economy (6.5%+ growth(, while somewhere like Greece (22% public sector, 0% growth) isn't.

In-fact, eyeballing that table doesn't show much apparent correlation at all. There are high-growth, high-public sector countries, high-growth, low public sector countries, low public sector, low growth AND low public sector high growth countries.

[1] https://en.wikipedia.org/wiki/List_of_countries_by_public_se...


Share of employees working in the public sector is a more narrow statistic than the total role of government in the economy. The share of GDP consisting of government spending is a better measure of that. The correlation between the size of government, as percentage of GDP, and GDP growth, is strong. [1]

China has substantially lower levels of social welfare spending. Its healthcare spending as a percentage of GDP is 5.5% for example [2].

Labour regulations are also much less onerous. You can use IQ tests to filter candidates for example, which would be extremely illegal in the West.

[1] http://ime.bg/uploads/335309_OptimalSizeOfGovernment.pdf

[2] http://data.worldbank.org/indicator/SH.XPD.TOTL.ZS?locations...


I'm curious, how do you know what the average voter knew about the government in 1903?


Societies have gradually grown more unfair as the political system has strained under their growing complexity.

Is this not a revisionist view of history? Modern republics are pretty new things. There were serfs (and absolute autocracy) in Russia as of 1860, slaves in the US until the 1860s, voting tied to gender until the 1920s, colonial empires without fair representation until 1950, laws against interracial and homosexual marriage until the 1980s and 2014 respectively, state-sponsored inquisitions and pogroms until recently, etc.

People have so much more power than they had as little as decades ago in almost every single society and that seems to me hard to argue. Try being a Spartan helot (you can't because slavery is the exception rather than the rule) and tell me your life is better than any US citizen today. The issues you state - ignorant citizens and special interests have always existed, at least today even the worst governments try and educate their people.

Things can and should get better but to deny progress doesn't seem fair to history. Or is there something else you are seeing?


You're absolutely right. I should clarify that I mean that the societies in the advanced world have grown more unfair over the last 120 years.

>laws against interracial and homosexual marriage until the 1980s and 2014 respectively, state-sponsored inquisitions and pogroms until recently, etc.

Laws against interracial marriage in the US were struck down by the Supreme Court in 1967. There are no laws against homosexual marriage. Such marriages are simply not legally recognized in some jurisdictions. With anti-miscegenation laws, entering into such marriages was actually a felony. But to your point, there were laws against homosexual activity up until the 1960s, which have been repealed.

On the other hand, new laws have been created that force individuals to pay for the costs of other people's personal choices. If a person engages in rampant promiscuity for instance, and contracts a sexually transmitted disease, others are forced, at pain of imprisonment, to pay the costs of their medical care.

Just as laws prohibiting homosexuality were once popular, laws mandating that individuals pay the costs of others' medical care are very popular today. Popularity is not a measure of justice.

Occupational licensing is another area that has grown increasingly unjust. In 1950, only 5 percent of occupations required a license. Today it's over 25 percent. The growing restrictions on economic participation have harmed millions of people and exacerbated income inequality. [1]

Government spending meanwhile is increasingly creating a set of haves and have-nots. The majority of the wealthiest counties in the US are now suburbs of Washington DC. [2] The average Congressperson in the US makes well over ten times more once they become a lobbyist than they did while they were in office. [3] The pay gap between federal employees and workers in general continues to increase. [4]

The power of public servants continues to increase thanks to unionization and collective bargaining, resulting in this class of workers extracting more economic rent, while the quality of the public services suffers. [5]

And then we have privacy rights. The Snowden revelations showed us that society has never before been subject to such extensive surveillance of its private activities and interactions. This is an extreme systemic danger, and very likely has numerous malignant effects that are unknown, e.g. contributes to the centralisation of economic power, as a result of the information asymmetry it creates.

[1] https://www.brookings.edu/research/make-elites-compete-why-t...

[2] https://en.wikipedia.org/wiki/List_of_highest-income_countie...

[3] https://www.thenation.com/article/when-congressman-becomes-l...

[4] https://object.cato.org/sites/cato.org/files/pubs/pdf/tbb-06...

[5] https://academic.oup.com/qje/article-abstract/111/3/671/1839...


> There are no laws against homosexual marriage. Such marriages are simply not legally recognized in some jurisdictions. With anti-miscegenation laws, entering into such marriages was actually a felony.

Come on, that's just blatantly false.

https://en.wikipedia.org/wiki/List_of_U.S._state_constitutio...

> But to your point, there were laws against homosexual activity up until the 1960s, which have been repealed.

No, they were struck down by the Supreme Court, and only in 2003! https://en.wikipedia.org/wiki/Lawrence_v._Texas


The bans in question are on the state itself, recognizing such marriages. Unlike anti-miscegenation laws, there is no criminal sanction for those who enter a relationship that they consider marriage.

>No, they were struck down by the Supreme Court, and only in 2003!

Strictly speaking, that's a law against sodomy, not homosexuality. But I can agree that such laws can be construed as anti-homosexual, given that any sex practice between individuals of the same sex could fall under the sodomy category.


You're attempting some pretty fine hair splitting here.

Some, but not all anti-miscegenation laws banned interracial cohabitation and sex. In some states only attempting to get married was punishable. The same was true for same-sex marriage, which would've required lying on a form and thus perjury (which some states specifically made a felony: https://www.usatoday.com/story/news/nation/2013/07/10/indian...).

As for sodomy laws, https://en.wikipedia.org/wiki/Sodomy_laws_in_the_United_Stat... states "Three states specifically target their statutes at same-sex relations only: Kansas, Kentucky, and Texas" - and the ones that didn't certainly saw selective application preferentially targeting same-sex acts.


>Some, but not all anti-miscegenation laws banned interracial cohabitation and sex. In some states only attempting to get married was punishable. The same was true for same-sex marriage, which would've required lying on a form and thus perjury

There are no state laws that say 'homosexual marriage is a felony', while there were laws that said so with respect to interracial marriage. The criminalisation that you allege is happening, on the basis that there are laws against perjury combined with non-recognition of same-sex marriage, is not the same as the direct criminalisation of interracial marriage.


I fully agree with your analysis. But cryptocurrencies are just the latest tool that will serve well the interests of the demagogues. Technocracy will not improve affairs that we don't resolve as a society in the first place. More powerful tools means just more power to those who can afford the longest lever. Any other interpretation is just a blatant neglect on the history of technology.


Cryptocurrencies, growing pains aside, will arrest the trend toward economic centralization. They are not just more powerful tools. They are tools that shift the control over money from large trusted third parties to individuals. They literally allow an individual to be their own bank.

They are a counter-force against the trend toward eliminating cash, and with it, financial privacy [1]:

>Any future cashless bank-payments society will be the outcome of a deliberate war on cash waged by an alliance of three elite groups with deep interests in seeing it emerge.

These statements from an executive at MasterCard are a great window into the company's designs on cash and its electronic corollaries:

>There's huge interest in cryptocurrencies and what perhaps they can create in the market place. Now we at MasterCard are not completely comfortable with the idea of cryptocurrencies largely because they go against the whole principle that we've established our business on which is really moving to a world beyond cash and ensuring greater transparency.. If you think about it, cash is a problem for a number of countries. Cash really facilitates anonymity, it facilitates illegal activity, it facilitates tax avoidance and a range of other things that aren't going to drive efficiency in an economy

-https://youtu.be/bO4jHXjCXw8?t=2m57s

>If it's an anonymous transaction, that sounds like a suspicious transaction. Why does somebody need to be anonymous?

-http://youtu.be/bO4jHXjCXw8#t=4m12s

[1] https://aeon.co/essays/if-plastic-replaces-cash-much-that-is...


> They are tools that shift the control over money from large trusted third parties to individuals. They literally allow an individual to be their own bank.

You're not thinking big enough. All I need to be a bank is some money to lend, or safe to put deposits in.

Cryptocurrencies let people be their own nation state.


You're right. You can live in Cuba, and yet virtually live in a cyber nation using nothing other than an internet connection.


> They literally allow an individual to be their own bank.

The main function of banks is issuing debt, not holding cash.


Both are central functions of banks, debt is not the main one.


Saying that bitcoin allows users to act as their own banks is like saying a mattress with your cash under it is your own bank. It's not meaningful in anyway. Debt is the meaningful differentiator.


No, ability to issue a controlled lot of physical currency is the meaningful differentiator, which is why the relation to banks is irrelevant.

I can buy $1 worth of Bitcoin, declare it ErikCoin, acceptable only in my stores at a 1/1,000,000 denomination, and I instantly "minted" $1,000,000 in cryptocurrency, using only the Bitcoin blockchain.

Bitcoin doesn't let people be banks, it let's people be the mint.


How is that different from virtual currency in video games?


- Blizzard can't wipe your balance

- You can't destroy anyone's balance after you've issued them currency

- Balances are publicly verifiable

- Balances can be stored in one's mind

... lots of things. Tons of affordances differ from a game currency.


But you can just choose to stop accepting ErikCoin at any time right?


If we create a UBI then people will have the time to be better educated, to be healthier, to raise healthier, happier, and more productive families. We're almost there, automation will strongly facilitate this.

Because a new technology seems exciting - and gains adoption because early adoption means potential for an individual to turn $1000s of into $1,000,000s with very little individual effort of working towards mass adoption; along with the ecosystem of VCs pumping $100s of millions into creating platforms to support this speculation - doesn't mean we give up on the existing system.

If you don't think the same demagogues, special interest groups, or simply evil/bad actors won't attempt to takeover - then you're already proven wrong by this blackhat 'abuse' of sending themselves money. And it can get much worse than that.

The value of the blockchain is the public ledger IMHO, and the way $100 can because $70 million just because demand is higher, that has too strongly incentivized it and has and will attract very bad people - even if there are good people involved in the ecosystem.


If we get a UBI, I'm quitting my developer job and just going to coast the rest of my life. I don't care how many corners I have to cut, lol. Gonna milk that cow as hard as I can.

My dad used to ask to be laid off jobs (blue collar) so he could collect unemployment for a few months. He did that off and on for years.


When there's too many cooks in the kitchen, we all benefit when there is less people trying to cook.


We will not benefit from fewer people working..


Well you won't have any coworkers who are just there for the paycheck and actually have zero interest in solving the company's problem.


People don't need to be motivated by high-minded ideals to make useful contributions.


Of course they don't - and that's fine. All throughout our evolution we would of had children and elders who would have had limited productivity. Now with automation, how many less people do we actually require to work? It will be very few - it will definitely be more people than the minimum required.


The upcoming AI/robot automation apocalypse means that we are going to have fewer people working. The question is how we're going to deal with that.



That article covers what happens before the apocalypse. What happens after it, i.e. after the point where AI and robots can not only do our current jobs better than we can, but also all of the ones we could possibly retrain to?


Unless AI and robots become effectively humans, they will not be able to do our jobs better than we can. And they do become effectively humans, we will have much bigger things to worry about than unemployment.


Elon realizes this, hence his warnings about AI - how we deal with it is build a better bot that counteracts EvilBot 1.0.


How do you know?


You might. I wouldn't. I'd be willing to wager that most people here wouldn't. They might take more vacations, but they'd probably also be starting more companies.


Hopefully you're a good person or the environment around you will help you grow in positive ways. Would you have a family? And why are you unhappy at your developer job? Is it more stress than you'd like? It seems like your dad had a strong influence on you.


>If we create a UBI then people will have the time to be better educated, to be healthier, to raise healthier, happier, and more productive families. We're almost there, automation will strongly facilitate this.

Compulsory redistribution programs like UBI pervert incentives, leading to less individual responsibility over time. They're clumsy cookie cutter solutions, which with a stroke a pen, impose the same formula to tens/hundreds of millions of people. On one end, the people lose out, and on the other, they win out in the short term. The only determinant of which side a person is on is the amount of currency that they report to the government that they received for that year.

This is an overly simplistic formula that not only adversely affects incentives, but also becomes increasingly better gamed over time, leading to competitive energies being diverted to economically wasteful activities like tax avoidance (which is an industry worth hundreds of billions of dollars per year now).

These kinds of programs do not take into account the unique circumstances found in the vast population they affect. In other words, they ignore the vast majority of the knowledge of society, which is in the form of localized knowledge diffused across millions of people. So in place of spontaneously formed economic relationships based on the rich localized knowledge of millions of individuals, they create simplistic economic relationships based on categories created by legislators.

They are pure economic destruction. And we have evidence of this from the last 40 years. UBI is just the doubling down of an economic model that has been failing for over 40 years.

Social welfare increased 4.8 percent per year on average, between 1972 and 2011 [1]. This represents a massive shift to the social democratic economic model.

And it's not just the US. Almost all advanced economies underwent this transition over the last 40 years, and it has been associated with stagnating wage growth and less economic dynamism.

The key to accelerating gains in quality of life is not more centralization and dependence on government. It is to remove all artificial barriers to access to capital. As it is, only large financial institutions can access global capital markets directly. Regulatory agencies have created very onerous compliance requirements that one has to meet to engage in a wide array of financial transactions. This in turn means that in practice, the majority of the population must pay economic rent to very rich and powerful groups to participate in all aspects of the economy.

Distributed blockchain technology promises to democratize access to global capital markets, so that small businesses and ordinary individuals can trade equity for capital directly with each other, with no 'tax' being paid to rent-seeking institutions and professionals, playing the role of middle-man thanks to special government-granted privileges.

To further elaborate:

I believe everyone should be part of the ownership class. The average person should own microshares in thousands of companies big and small, and be assessing enterprises everyday to determine which ones to purchase a tiny amount of shares in, with zero friction and next-to-zero fixed costs that would otherwise make small purchases uneconomical (if each trade has a $10 trading fee like it does now, you can't economically buy $1 worth of shares, so that's why trading fees have to approach zero to make this kind of dynamic economy possible). These shares in turn would earn people passive income, so that they don't have to work all the time.

If distributed blockchains and cryptocurrency become the main economic institutions in the world, I believe this vision will become possible, and we will experience a renaissance in economic and technological progress like never before seen.

[1] https://fivethirtyeight.com/features/what-is-driving-growth-...


> Compulsory redistribution programs like UBI pervert incentives, leading to less individual responsibility over time.

OK yes, but you can't think about incentives like that.

It's not just a matter of GOOD INCENTIVE/BAD INCENTIVE, because the incentives all influence each other. You can't just make a giant list of GOOD INCENTIVEs and then do them all.

In fact, you really can't play very many incentives all at once together, because the more incentive schemes you have the more likely you are to create strange situations that exploit unanticipated interactions between what really are GOOD INCENTIVEs when considered independently.

So, your lionizing of THE SPECTRE OF UTTER POVERTY as an incentive for people taking responsibility for something in their life... I agree with you. That spectre does in fact incent quite a lot of people to take responsibility.

But the problem is, if you accept THE SPECTRE OF UTTER POVERTY into your incentive package, then you also incent INTERGENERATIONAL POVERTY, where children are born into homes of people who, despite all those helpful incentives, just sucked at not being poor.

And the problem is INTERGENERATIONAL POVERTY is actually a horrible, horrible incentive when it comes to taking responsibility. Because those kids have very little resources and crime, even though it really pays off like a piddly little amount of money compared to a good job, if kids have like no resources even crime starts to make financial sense.

So you created this world where you have this super strong YOU ARE RESPONSIBLE, THERE IS NO NANNY STATE culture, then what really makes sense for that kid to do is say you know what, I am going to take matters into my own hands. I am responsible for my destiny. I am going to drive these kids over to this house and get a lot of money.

And that's what you incented. You incented people taking responsibility for taking care of their own.

Personally, I'd rather incent that kid to sit in an apartment and play Xbox after school until he's 18. And incent his mom to hang out and smoke as much weed as she wants and use food stamps to buy Frosted Flakes and stay the fuck out of trouble until he does turn 18.

As far as I know that kid could be fucking Elon Musk. For what? 12k218 = $432,000 of tax revenue?

You're saying his moral compass will be so eroded by the presence of his free apartment and lack of consequences for his slacker-ass mom that he will be unable to take responsibility for himself? I doubt it. He'll have plenty of other role models in his life besides his mom. Like Elon Musk and Prince or whoever.


>But the problem is, if you accept THE SPECTRE OF UTTER POVERTY into your incentive package, then you also incent INTERGENERATIONAL POVERTY, where children are born into homes of people who, despite all those helpful incentives, just sucked at not being poor.

This idea that the free market doesn't address intergenerational poverty is unfounded in my opinion. Poverty declines precipitously anywhere in the world that adopts a market economy [1].

In the US, poverty was declining decade over decade, until the War on Poverty began, at which point it remained steady, despite spending on subsidies for the poor increasing decade after decade. While UBI doesn't have incentives that are as harmful as those of traditional welfare, it still reduces the need to be self-sufficient, and thus teaches the wrong behaviours.

>So you created this world where you have this super strong YOU ARE RESPONSIBLE, THERE IS NO NANNY STATE culture, then what really makes sense for that kid to do is say you know what, I am going to take matters into my own hands. I am responsible for my destiny. I am going to drive these kids over to this house and get a lot of money.

It's important to remember that the role of a financial market is to provide capital to individuals and enterprises that can make good use of it. If this kid is the next Elon Musk, as you suggest he could be, then it's in the interest of profit-motivated investors to identify him, and provide him with a substantial student loan, in exchange for the future interest payments he will easily be able to pay off once he's finished school and started his Tesla.

[1] https://www.theatlantic.com/magazine/archive/2010/07/the-pol...


> I believe everyone should be part of the ownership class.

No classes for me no thank you. But hey, maybe different personality types need to have different ways of life. Perhaps you would thrive in a class based society, where as others would thrive in something else.


Strongly disagree. This feels like the academic style analysis that assumes computing costs are free. $10 trading costs suck. But so does the time energy and effort spent on researching stocks. Owning tiny micro shares isn’t worth the research costs.


Individuals have private knowledge about their local environment that can inform purchases of these micro shares. Combined with automated analysis tools, it can allow quick effective decision-making on small purchases to build one's personal portfolio.


> Your Whig history

As this point you've already lost everyone who doesn't already ready the same pamphlets you read and agree. Either because they have read those pamphlets and eye-roll, or because they haven't and figure you're a rambling extremist. It's literally equivalent to communists beginning propaganda pieces with "Attention all Comrades!"

That said, I disagree with you, so feel free to keep talking this way.

> ever progressing political system

Literally no one claims politics is monotonically improving. Unless Clinton has been singing Trump's praises recently, you're attacking a straw-man.

> the average voter has an extremely limited understanding of what their government is doing

Appealing to this fact in a thread about cryptocurrency is beyond ironic.

Seriously, even most early adopters don't understand what their crypto currency is doing. And certainly don't have any hope of understanding even a mildly complex contract. Code comprehension is difficult for trained software engineers!.

All of the serious proposals in this thread call for some sort of formal verification, which even most trained software engineers aren't currently capable of using.

And hell, if we learned anything form this, it's that even the ostensible experts don't have an air-tight understanding!

So, what? Instead of teaching every citizen how to read and interpret legislation and regulation, we'll just train them all as professional software engineers with formal methods expertise?!?! And even that's no silver bullet. Contracts can and will grow just as complex as e.g., current tax law. Because the underlying humans won't have changed!

In the long run, you're merely adding complexity. Now I have to understand software and also tax policy. Things get strictly worse.

> This opens the door to manipulation by demagogues and special interests

As opposed to manipulation by "whichever guy finds a bug in the cryptocurrency". You can argue that these are equivalently bad things (I'd disagree), but you'll be hard-pressed to convince most rational folks that "rando dude" is better. Stick to the devils you know and all that.

> limits the Kafkaesque tendencies of collective society.

I'll end my comment in the same way I started it: you're preaching to the choir.

Besides which, what're you going to do when it turns out the majority of people still don't agree with you about how society should be, and still control all the guns and natural resources? Because that's what will happen.

Political power will flow from the arrangement of bits only when the arrangement of bits determines who controls overwhelming military force. And not a moment before.


>As this point you've already lost everyone who doesn't already ready the same pamphlets you read and agree.

Usage of the term "Whig history" is not confined adherents of a particular ideology, and does not require one to have/not-have any particular set of beliefs to use it (other than believing that the history of some institution is not a story of progress)..

In other words, it's not comparable to "comrade".

>Appealing to this fact in a thread about cryptocurrency is beyond ironic.

There's a subtext that you're missing here, which is that the political system doesn't work when voters don't understand the system, which is unlike most domains, which manage complexity effectively.

For example, most people don't understand how microprocessors work. But this is addressed through an effective and spontaneous process of delegating responsibility.

The political process differs in this respect. The delegation process is baked in, as a result of built-in mechanisms that actively resist change. This prevents the kind of readjustment that occurs in other institutions. Meanwhile, those affected by policy are a captive audience, which eliminates a major feedback mechanism that exists in market-based systems.

These two factors result in the system as a whole not evolving toward greater efficacy. On the contrary, it has the potential to evolve toward greater exploitation.

>Political power will flow from the arrangement of bits only when the arrangement of bits determines who controls overwhelming military force. And not a moment before.

We'll see.


> Usage of the term "Whig history" is not confined adherents of a particular ideology, and does not require one to have/not-have any particular set of beliefs to use it

While this is true, outside of some specialized historical critique fields the most common usages of this term are in forums/literature of the libertarian and free market anarchist bent.

In those places its a short hand for the idea that government as currently practiced in the west is clearly bloated and corrupt beyond repair, and the only reason every doesn't agree is that they are bamboozled by some Polly-Anna version of history.

That statement is not clear and needs further backing up to many of us, who do not subscribe to the "Whig History" model but also don't think governments are objectively bad in all instances.

Whether you knew that subtext or not, you used the term in the same way, to argue a similar philosophy, so it's not at all surprising that someone called you on it.


>While this is true, outside of some specialized historical critique fields the most common usages of this term are in forums/literature of the libertarian and free market anarchist bent.

I didn't know that. I haven't seen this term associated with libertarian thought.


Like I said, feel free to keep talking like this. In fact, I encourage you to do so.

> The political process differs in this respect.

On this we agree. I don't see how layering software engineering on top of politics will ever simplify politics.


I am referring to the state-backed political process, not the general variety of politics one sees in private institutions. The former is qualitatively different from other institutions in our society.


> political process

If you cannot implement people's political preferences in your contract language, then your contract language will not be used for anything of substantive governmental or political importance unless you have the guns needed to impose your crypto-dictatorship.

If you can implement people's political preferences in your contract language, and your contract language is used for political or governmental purposes, then people's political preferences will be codified -- as far as possible -- in your contract language.

Which means that in order to participate in governance, people will have to understand both their preferences and also the contract programming language and its underlying runtime. Being an active citizen becomes strictly more difficult. To be very clear about it, people's preferences will not have changed. Consensus will remain a messy, complicated web of compromises that are difficult to reason about and implement via judge, let along codify for a computer.

And all of this won't even achieve your political motives, unless you're planning on building some sort of anti-Whig-ideology static analysis into your contract language, I guess.

(Which, frankly, I hope you do, because that would be kind of funny and cool.)


>If you cannot implement people's political preferences in your contract language, then your contract language will not be used for anything of substantive governmental or political importance unless you have the guns needed to impose your crypto-dictatorship.

Can you elaborate on this? I don't understand the reasoning behind this. Why do smart contracts have to implement political ideologies in order to have a substantive impact on the world? Why can't they have an impact by raising the cost of legal enforcement of over-reaching tax mandates and regulatory restrictions, and of mass-surveillance, and thus shifting the balance of power between the individual and the state, toward the individual?


> I don't understand the reasoning behind this.

> Why do smart contracts have to implement political ideologies in order to have a substantive impact on the world?

They don't. The can -- and almost certainly will -- remain primarily a speculative investment vehicle for technophile speculators and occasional currency for black markets. Maybe, even probably, crypto-currencies will turn out to be useful technological tool for some non-speculative businesses as well.

However, you claimed:

>>> Societies have gradually grown more unfair as the political system has strained under their growing complexity... This opens the door to manipulation by demagogues and special interests

I'm simply responding to that claim.

> Why can't they have an impact by raising the cost of legal enforcement of over-reaching tax mandates and regulatory restrictions

Because -- believe it or not -- some people actually approve of some or all of those mandates and regulations.

This idea that regulation and taxation is an objective negative result of a broken process is impressive self-delusion.

Not everyone shares you political preferences or beliefs. Your political beliefs are not objective moral truth.

So. Why in god's name would people who disagree with you agree to use a system that actively undermines their genuine political preferences?


>Because -- believe it or not -- some people actually approve of some or all of those mandates and regulations.

How does people approving of these mandates/regulations (which I dispute, but let's go with it) invalidate my claim?

If the cost of enforcement increases, regardless of the popularity of the law in question, it stands to reason such laws would become less common and/or less effective.

>So. Why in god's name would people who disagree with you agree to use a system that actively undermines their genuine political preferences?

Just to clarify: you're suggesting people will actively avoid adopting cryptocurrency in order to ensure the laws and taxes they support remain effective? If that's your opinion, we should agree to disagree. Time will tell who is right.


> which I dispute

Seriously? You realize that's delusional, right? Most people -- even most right wing folks! -- aren't libertarians.

The set of people who think that blockchain is the right way to organize society is astonishingly small, and they're basically all speculators.

People may not agree on which regulations they want (environmental regulations? drug regulations?)

Or what taxes should be spend on (education? infrastructure? protectionist tariffs? military?)

Or how taxes should be leveraged (regressive? progressive? on capital or income earners?).

But for each regulation, each tax, and each thing taxes are spent on, you can find many people -- in many cases, even a majority of people -- who support that regulation or tax.

People like to talk about how they don't like regulation or taxation. And maybe their empty rhetoric has you confused. But in fact, people are self-interested. They will crucify you for doing what they say they want if you stop paying their teachers, or let their roads erode, or take away their social security, or close the military base their best friend's local economy revolves around, or build a sewage treatment plant in their backyard.

Once you get past empty rhetoric and into specific contracts, building consensus is enormously difficult. Much of the complexity in modern laws and taxation policy is essential, not accidental, and arises from millions of varying opinions and priorities and emotional investments.

My neighbor was a hard core anarcho-libertarian. Hated the police state and thought all taxation was theft. But he also called the police to have them write tickets every time we parked in the street even a minute past the time when street cleaning started. People aren't rational; they're self-interested. Everyday comforts always dominate broad ideological "beliefs". "The state is evil, but I hate dirty streets".

If you want to use computer-implemented contracts for law, you'll need to be able to describe this essential complexity. IMO that's going to be difficult or impossible, and laws will change often enough that the overhead will become enormously expensive. Orders of magnitude more expensive.

> Just to clarify: you're suggesting people will actively avoid adopting cryptocurrency in order to ensure the laws and taxes they support remain effective?

Well, vacuously.

I don't think that we'll ever have occasion to even test this claim, because no sovereign state in its right mind would ever adopt a legal or financial system in which a computer bug or Chinese supercomputer could result in constitutional crisis.

You really think the average American would be OK with throwing out the constitution for some computer program they don't understand? Or ditto for any other country? To be blunt, you're completely out of touch.

What I'm actually claiming is that your claim -- that piling complex (and apparently buggy!) software on top of contractual law somehow reduces the complexity of the legal system -- is terribly ignorant of the essential complexity that laws codify. Sorry to blunt. 99.9999% of people really don't give a fuck about what your gpu says.

(The fact that contract languages can't even come close to expressing many of the common private sector agreements and financial transactions that aren't so addled with political concerns should be more than enough evidence that this approach won't skill to the level of nation-states.)

> Time will tell who is right.

Several millennia of time already has.

We've had contracts and ledgers for ages. When a majority of people find themselves in a situation they don't like, they rarely shrug it off and say "oh well, that's the contract". They go to ballot boxes or, more commonly in the arc of history, start shooting people.

What makes you think people would resign themselves to subjugation to objectionable instructions from your GPUs when they're clearly unwilling to subjugate themselves to objectionable instructions from other people's graphite and pulp?

If anything, crpytocurrencies have negative rhetorical appeal for the vast majority of the population. And when the largest examples are hacky javascript interfaces to speculators' bank accounts, I can't really blame them.


>Seriously? You realize that's delusional, right?

Comments of this nature aren't constructive. It's better to restrain the urge to tell your correspondent that their belief is delusional, and simply explain why you disagree with it.

>Most people -- even most right wing folks! -- aren't libertarians.

I think most people don't think deeply about the policies they support, and the implications of those policies. Most people don't think much about the nature of the law, for example. [1]

The complexity of the political system results in people supporting policies that if they had the time to closely examine, they would not. Our political system is geared toward decision making based on shallow assessments and emotional gut-reactions, because it does not give the average person the ability to meaningful analyze the issues that they base their vote on.

But in any case, I already said that for the sake our debate, let's accept your claim as correct. There's no need to try to expand this debate more than is necessary.

>I don't think that we'll ever have occasion to even test this claim, because no sovereign state in its right mind would ever adopt a legal or financial system in which a computer bug or Chinese supercomputer could result in constitutional crisis.

I have no idea where this suggestion that a sovereign state would replace its Constitution with a smart contract came from. Can you please go back to my comment and re-read what I suggested would happen?

[1] https://www.theatlantic.com/politics/archive/2016/06/enforci...


How are bitcoin or ethereum not highly resistant to change.

Explain to me how you would go about changing either of those protocols?

And yes there are lots of altcoins but ethereum very quickly is going to replace a good chunk of how things are transacted. And a non-profit without some kind of policy for baked in leadership change sounds a lot like a dictatorship to me.


By design, they enshrine the rights of the individual participant to freely interact in a free market, by preventing the majority from creating any rules to limit access to the platform. So they don't have the same need to adapt as an interventionist government, that imposes itself on the economy through majority dictate, does.

In the case of Ethereum, the Turing Completeness also makes it so that each contract is like a government in and of itself, which any party is free to design to meet their own preferences.


Do you remember when the majority hard-forked, changed history, and restored millions of ether to DAO?

Is that not blatantly a majority imposing themselves on the economy through majority dictate?


I don't believe such hard forks will be practical when the ecosystem is larger and more diverse. The DAO happened in a unique point in Ethereum's history, when the community was very small (and thus cohesive) and activity on the network was very little.


In block chain, 51% of the network can decide to modify the ledger to do things that aren't true. That's all it takes to completely change how much money is in my account in a "distributed" bank. I don't own it, and it's certainly not robust against demagogues.

Demagogues are by definition political opportunists who play on populism to advance their politics. If democratic elections have a vulnerability to them, so certainly do "distributed systems" where a simple majority has enough power to control "history"


>In block chain, 51% of the network can decide to modify the ledger to do things that aren't true.

51% is not enough to modify the ledger. A hard fork requires an overwhelming majority to support it. Otherwise, the cost of fragmentation would be immense, and outweigh any benefit those effecting the hard fork could hope to gain from the hard fork.


So if a majority of participants (50% + 1 of the network) wanted to say, "rob" the wealthy top 1% of wallets and redistribute wealth by rewriting the history of the blockchain, nothing could stop them?


Technically the unit of measurement is hashing power, rather than % of nodes or participants, but there is an underlying 51% problem with blockchain.

The attack surface is similarly limited; they couldn't really "rob" the wealthiest wallets, but they could prevent their transactions from ever happening. They could also spend cryptocurrency they don't really have. Here's an intro:

https://en.bitcoin.it/wiki/Weaknesses#Attacker_has_a_lot_of_...


You can't just transfer money however you like, even if you had complete control of the blockchain. Transactions still need to be signed by the private key of the wallet involved. You could put a transaction with an invalid signature into the blockchain, but then the chain would be rejected by clients because of the invalid transaction.


The clients could be rewritten to accept the "invalid" block. That would cause a fork between the modified and unmodified clients. Like fiat currency, the only thing maintaining the definition of a legal block is the software the majority of the network choose to run.


They could indeed, but which users and companies would switch to that forked chain knowing that it's worthless? Having a lot of hashing power doesn't let you control the software that other people are running.


I know it's popular in America to be cynical about politics, but maybe it is worth realizing other countries have their shit together and maybe just maybe it is the American cynicism that is a self-fulfilling prophecy.


No, I'm cynical about all developed countries. Almost none of them have shit together. The cost disease affects the entire developed world, and I suggest it's due to the government playing an increasingly dysfunctional role in society.

Do you think mass-surveillance is a uniquely American phenomenon?


In the OECD? Yes.


You're wrong..


Under growing complexity, average understanding will decrease and tend to become centralized. How many people really understand the dynamics of Bitcoin's current scaling debate? In that scenario, you have a return to manipulation by special interests (in this case, "important" nodes like miners, exchanges, and wallets).


Remember the trillions that went missing due to fraud and sly bookkeeping in 2008, and how no one was held accountable?


> Governments in the west are quite accountable, voted for and with a system of checks and balances

Hahahahahahahaahahahahahahaahahahahahahaahahahahahahaahahahahah


> Governments in the west are quite accountable, voted for and with a system of checks and balances that has evolved over time, through wars and revolutions.

I think this is where you're losing people. For the most part, it isn't true, and the trend seems to be shaped as a downward slope.

The "government" of the US still imprisons 2 million people, mostly because it has a list of plants and chemicals it doesn't like and won't negotiate on. That's just one example of its ongoing dysfunction.

It's completely reasonable, in a mature and thoughtful society, to try doing things in a completely different way. I'm not sure that cryptocurrencies are a good answer, but they're at least a good question.


No, no, one thousand times no.

History is not a linear progression, as far as societal and political developments are concerned. Our current government system is not the pinnacle of development so far, let alone the ultimate, final system.

And even by that view, as you say yourself the current system, if satisfactory, took hundreds of years to develop. Crypto currencies were invented 7 years ago.


Again, the question is who you trust, and that remains a moral choice, not an objective, empirical choice. Some people don't trust a government elected by only half the population, for example. Some others may prefer to trust an elite of "enlightened hackers" than hordes of plebs.

You might be right that governments are more evolved and have more history but that doesn't make them universally better.


Again, the question is who you trust, and that remains a moral choice, not an objective, empirical choice.

Oh come on. It absolutely is an empirical choice. Crypto-currencies have a very short history and that history is CHOCK FULL of people losing their money due to various forms of incompetence and graft.

Storing your money in a bank in a western democracy has centuries of history with extremely rare losses.

Please.


>Storing your money in a bank in a western democracy has centuries of history with extremely rare losses.

While I agree with your overall point, I think you're glossing over the historical instabilities in the banking system. Bank runs, failures, and physical robberies were pretty common until comparatively recently (in the US, at least - the 19th century was chock full of them).


Even in the dark days before the FDIC losses in US banks were rarer than what we see in cryptocurrencies today.


Cryptocurrencies offer the opportinity to test the waters with new models. If we go by the thinking "keep what works", society would have never changed. I agree that they have big failures to show, but i think it's still early to tell.


The hope for cryptocurrencies was that they removed the need for centralized trust entirely. As long as no entity can perform a 51% attack on the block chain, you don't need to trust anyone. This is why the successful 51% attack on the Ethereum block chain which was performed by the DAO should be viewed as a fundamental failure.

The underlying cause is a generally shoddy design of the contract language: when you're writing code where it's imperative that it have no security flaws, writing it in a JavaScript-like language which provides so few protections is absurd.

The Ethereum community is run by profiteering speculators rather than revolutionaries, however, so to them, performing a 51% attack on their own blockchain whenever they don't like how a contract turns out is an okay solution.


I think that is a bit too simplistic a view, and the better question is: when things go wrong, what is your fallback?

Modern governments provide an elaborate system of fallbacks: checks and balances, a justice system with multiple levels of appeals. Those may be complex and fallible, but they are at least reasonably good at dealing with unexpected problems.

When a smart contract goes wrong, there are no fallbacks.


> When a smart contract goes wrong, there are no fallbacks.

Like others have suggested, there is a fallback just like in other systems, it's just not formalized - yet. The difference is that in government there must always be a fallback , while smart contracts leave open a possibility that in the future, with an ideally unhackable contract, the fallback can potentially be removed.


> When a smart contract goes wrong, there are no fallbacks.

Sure there is. As the DAO hack showed us, if you can get enough of the network to agree to it, you can literally rewrite history and create an alternate universe where the contract never went wrong.


I've heard this argument before and was wondering how it can be considered ok:

1) hacker steals massive amount of money from a crypto wallet

2) hacker cashes out and gets real money

3) network realizes the hack and "rewrites history" as if "the contract never went wrong"

How is this a valid outcome? Somebody in here is out a large amount of real money.


The whole reason the DAO hard fork worked was because the funds were locked until a certain date. The hackers couldn't access them until after that date, so the hard fork before that date resulted in no hacked ETH being traded for USD (or anything else).


Actually, if I understand correctly, the hard fork could still have been done even if the funds weren't locked up. It's just that then it might not have been the hacker getting the short end of the stick, but rather whoever was unlucky enough to take their ETH in exchange for some other currency.

The hard fork may have been considered unfair by more people if the funds had not been locked, but the point still stands that if you could get enough of the network to agree with you, you can fork and start over at any block in the past you want.


so, essentially there are no fallbacks. Unless you want to break one of the core founding values of cryptocurrency.


So why and how do we trust those who have the power to reverse these thefts? Ethereum already did it once, why not again, and again, and again? Are we going to end up with 50 forks, and then how does that even work - do then people accepting these crypto-currencies need to decide which forks they're going to accept from? I may be using the wrong language here, however I hope my point is getting across.

What happens if a crypto-asset becomes a legitimate currency and then an bad actor wants control and takes it using military-level force - or manipulation like blackmail, death threats of you or family members, etc?

The Russian government being strongly against anti-crypto-currencies and then recently Ethereum being endorsed by Putin himself by a physical visit with Vitalik. Does that not ring warning bells to others?

If someone evil - for a lack of better word - pumps $1 billion into the ecosystem early on, how much could they turn that into? What if then they use other $1 billion to lobby and pay off politicians, or get people into power who are "strong believers" in the crypto-assets, to then intertwine societies currencies with crypto-currencies. There is a lot of incentives for them to do this, and I'm not the only one aware of this issue. Even just pumping more $ billions into the ecosystem will create stronger believers - because their "$100 is now worth $70 million."

This current investment-like incentive for creating a new currency is bad for society, the wealth transfer as it currently would happen needs to be worked out of a crypto-asset based currency.


> So why and how do we trust those who have the power to reverse these thefts? Ethereum already did it once, why not again, and again, and again?

The argument for reverting the DAO was that 1) Ethereum was very new and there was still a lot of confusion about good community practice, 2) It would still serve as a cautionary tale even with the reversal, since it was the first big mistake, 3) A large percentage of all Ethereum early adopters were invested in it, so letting the money go would have a bad effect on adoption, 4) Because Ethereum was so new at the time, the DAO represented a large percentage of all outstanding Ethers.

We just won't see another theft with all of those attributes in place. The community is diversified and better educated.

> Are we going to end up with 50 forks

Yes and no.

Yes, in the sense of yes, there will literally be 50 forks. But that's the point of cryptocurrencies... anyone can fork them and run things their own way.

No in the sense that No, we won't have Ethereum, Ethereum Classic, and 48 other equally valid forks.

Forks have to be based on ideas if they are to last. Ethereum is based on the idea that it's a startup platform and there's going to be a little jostling around as it gets going, but that in the long term interventions will only be made when there are clear existential threats to the network.

Ethereum Classic is based on the idea that you never fudge the blockchain ever. What's written is written and what's done is done.

For there to be a third big chain, there needs to be a third big idea. What's that idea? Reverse all clear instances of fraud or theft?

OK, cool. That's a third chain. They'll fork off ETH and reverse this transaction. Maybe ETH keeps it, because it falls under "buyer beware" for them.

Now we've got three forks. One currency where nothing ever changes, one where only existential threats are dealt with, and one where theft and fraud is actively policed with a big beurocrasy.

Again: This is the point of cryptocurrency! You can set up different regimes with different ideas, and they will work differently.

> and then how does that even work - do then people accepting these crypto-currencies need to decide which forks they're going to accept from?

Yep. Just like how you can accept Dollars, Euros, Bitcoin, and Ethereum, you can also accept Ethereum Classic, and any other fork you like. It's all just currencies. They'll all be tracked on the exchanges and talked about endlessly on online forums.

The difference is, instead of being tied to the political system within a geographic area, they're tied to an idea.


> Next time, I'm going to use this case as a counterexample, because when the solution to the problem of "hackers robbing banks" is "vigilantes robbing the remaining banks", something is very wrong with your system

I can see what you're saying, but I don't think that this is a problem with cryptocurrencies specifically, it's a problem with buggy software, yes, but it's something that is the case with every dangerous exploit being actively taken advantage of in the wild, Heartbleed would be an example that doesn't involve cryptocurrencies, but I give you that the Ether-based ecosystem seems to be a particularly buggy collection of software, probably because of too much ambition, (a Turing-complete VM), being written by people with too little experience and applied for very sensitive (monetary) transactions, which seems like a recipe for disaster.


This is a problem that everybody seems to skip over with cryptocurrencies.

Cryptocurrencies are being sold as eliminating trust and allow us to rely on the cold certainty of mathematics. Only trust hasn't been eliminated from the system, it's just been shifted from a central bank to the authors of the software client you're using. To the majority of the miners in the network.

The awful politics, lies, greed, corruption, are still here in all their glory.


Much worse in fact, since the entities in power have no oversight, were not elected, and have no obligation to anything but increasing their own personal wealth.


Not quite true. You elect with your money. Immediate. Instantly. And you withdraw your support with the one thing that hurts most: your money and move to a competing system. That's extremely liberating and powerful. Also: anybody can fork and create an alternative model whenever they prefer to do so.


Only in this particular case you do not have any money left because you made (probably unknowingly) a contract to give it away. (Or it was stolen, depending on your point of view, but anyway, there is no money left to vote with)


>It’s important to understand that this exploit was not a vulnerability in Ethereum or in Parity itself. Rather, it was a vulnerability in the default smart contract code that the Parity client gives the user for deploying multi-signature wallets.

Yeah, I don't see the difference here. So it was an aspect of Ethereum that had the vulnerability, how many more millions have to be stolen before the system is successfully QA'd?

I'd never heard of Ethereum before, so now this is the only thing I've heard about it.


I read that and said to myself "So....it WAS a vulnerability in Parity"

The article stating that it wasn't a vulnerability with Parity AND THEN IMMEDIATELY AFTER stating it was a vulnerability with code distributed BY PARITY is throwing up all sorts of red flags with me.

Like the Wizard of OZ with "There is nothing behind the curtain"


Cash is not for the general public. Someone can mug you and take your banknotes, and the solution to that problem is an authority mugging those people and taking the money and giving it back.

Not a sound argument.


There is a key difference here in that as you say the authorities are doing something. If we had random vigilantes going around mugging muggers that would indeed be a sign that we had a problem.


Not quite that, but rather vigilantes mugging you when you're most vulnerable, and then returning the money later when they're confident you can safely hold onto it.

I wonder if the vigilantes will return the money with interest...


"With interest" at least to me is a very greedy proposition. Those people just kept you from having zero ethereum. If anything, I'd personally give them reward money.


> the solution to that problem is an authority mugging those people

The authority and the process by which they do this is agreed upon, or at least known, ex ante. That was not the case here. Trust isn't fungible.


Mugging scales poorly.


That is so accurate


I haven't had much time to follow the story or look into ether so sorry if this is a naive question but I keep seeing this "white hat hacker robbing the remaining wallets" and haven't see yet anyone mentioning what are they going to do with what they stole?


This article says they are in the process of returning the funds to the original owners.


You could say the same thing about home routers with that argument then, which are often under patched, and apparently require grey hats to act. http://www.computerworld.com/article/2988656/network-securit...


You could but if my home router gets hacked it doesn't directly give the attacker access to all of my money.


Right, people seemed a little too relieved that that happened. Sure it's better than "bad guys" getting the money, but will the white hats swoop in next time?


Keep in mind that the biggest supporters of crypto-currencies tend to have a libertarian or anarchist bent. To them this is a feature.


I think the fundamental problem here is an economic one. Make three assumptions:

1) most contracts worth implementing in Ethereum are fairly complex

2) even given great developers, bugs are inevitable in complex code

3) the budget of the contract-makers' security team MUST be smaller than that of the hackers

You quickly see that if the chance of a bug is nonzero, "smart contracts" don't make economic sense. If you have a $100k contract, and you spend $5k on security (which would absolutely destroy most companies' margins by the way) you'll be facing hackers that are EACH willing to spend up to $90k or so. Let's say all the experts in this example world are $200/hr. You spent 25 expert-hours on security. But you're being hacked by people who spent 450 expert-hours on hacking you.

With that in mind, would YOU want to use a smart contract? Spend 5% of the contract value instantly on security, and risk losing 105%? This isn't a normal loss by the way, where you can prosecute someone or sue somebody. No, this is the instant, digital theft of the entire value of the contract, to an anonymous digital address where it will be quickly blended in with hundreds of millions of dollars of similar thefts a month.


> This isn't a normal loss by the way, where you can prosecute someone or sue somebody. No, this is the instant, digital theft of the entire value of the contract, to an anonymous digital address where it will be quickly blended in with hundreds of millions of dollars of similar thefts a month.

Also worth pointing out that a non-trivial number of people would say that no theft at all has occurred, as the smart contracts are supposed to be the final authority, and if you can convince a smart contract to give up its value to an attacker then that's perfectly fine as that's how the contract was written. Ethereum Classic is a good example of this.


Well, what's the point of having a smart contract if it's not the final authority? We already have contracts that require highly paid humans to judge whether they've been broken or not. To me at least Etherium was dead the moment they chose to fork because they felt a contract was "hacked".


Because "code as law" also requires you to accept "bug as law" or even worse "exploit as law".

That's OK for now as the _real_ money being put into crypto-currency is understood to be a speculative thrill-ride. People who put actual _real_ money into this stuff know it could vaporize at any time for completely insane reasons. Its basically a bunch of people playing with funny money and having loud arguments about absurdly complex rules.

If, somehow, this stuff is to make it into the real world and start interacting with money, institutions, courts and the livelihoods of regular people, it will have to be VERY different from what it is now. That means you can't have smug, over-confident programmers writing clever shit-code and proclaiming it to be "law" and the "final authority".


> If, somehow, this stuff is to make it into the real world [...] it will have to be VERY different from what it is now.

Either that, or the nature of expectations in the real world will have to change, kind of like they did in the 90s when, after a few technological iterations, real people decided that shopping online was not so batshit crazy after all; or like people did in the late aughts when they decided that sharing every damn thing they were doing, and taking pictures of their tacos, was how one conducted oneself socially.


A lot of people are talking like the hacking risk applies equally to all forms of cryptocurrency, but I really don't think that's the case. Smart contracts in Ethereum have a much larger attack surface than, say, a simple Bitcoin purchase to cold storage.


> Because "code as law" also requires you to accept "bug as law" or even worse "exploit as law".

You're not answering adrianN's question. You're saying why one wouldn't want the contract to be the final authority. But adrianN pointed out that we already have contracts which aren't the final authority. They're asking why the code-based ones are better, given that you still don't want them to be the final authority. (I'm with adrianN; I don't see the point.)


> Well, what's the point of having a smart contract if it's not the final authority?

I think this is a common misunderstanding of Ethereum and blockchains in general. The current Ethereum blockchain is authoritative only as long as a majority of it users consider it to be authoritative. The same applies to Bitcoin. No single person decided to fork Ethereum after the DAO was hacked, it was decided by a quorum of Ethereum users. The original fork still exists as Ethereum Classic and if you believe that the "contract is king" then you are still free to continue using that fork along with everyone else who shares that view.

You say "To me at least Ethereum was dead the moment they chose to fork" and that is probably the view of many Ethereum users. I'm certain many Ethereum holders chose to divest their positions and move their assets elsewhere. That is a big loss for the currency but obviously enough people still believe it to be worth something and so it survives.

Because of their distributed nature, cryptocurrencies can be thought of more as living organisms fed by the collective computing power of their users. They don't need to be perfect to survive, only to be slightly fitter than their competitors.


You are making the argument that if, say, you've made a bunch of ethereum through means that the majority of miners don't like, they can just fork the currency and take your coins from you, and that's totally fine.


I don't know enough about Ethereum to know whether or not that is technically possible, but I believe it's technically possible with Bitcoin. I think the common misconception of these technologies is that trust is eliminated. It's not, it's simply distributed - you have to trust that the majority miners will find it in their own interests not to steal money from your wallet. I am not saying one way or another whether this state of affairs is 'fine', just pointing out the reality.


What do you mean? It's exactly what happened in the DAO hack/fork:

https://www.reddit.com/r/ethereumfraud/comments/6bgvqv/faq_w...

The code had implications that the writers didn't intend. Those implications involved attackers being able to take/steal a large amount of ETH under its terms. But those writers got the entire network to fork and give them back their money in direct contravention of the terms of the code/contract.


Other than the 'totally fine' part that accurately describes the situation with basically all cryptocurrentcies. How many coins you have is stored in a distributed ledger which can be arbitrarily modified with a majority of computing power.


You forgot when the people that run ethereum made the default vote choice as the hard fork. This is important.


I guess to be fair they should've had those clients go 50/50?


Yes. People who don't explicitly vote should either be zero or add 1 to each side


I'm not sure it was a "common understanding" that the network would make special exceptions for "the code is the contract, and nothing else" only when the most influential people wrote bad code.


> cryptocurrencies can be thought of more as living organisms fed by the collective computing power of their users

Mm, I like this image. It completes something for me...

The world is filling up with these autonomous information organisms, who eat computing power. They also need other care, to go for walks, etc. If we humans want to survive in the information age, we will need to take shelter in one, draw a salary from the care of it.


That's a fascinating point. Can any lawyers comment on how the law might see this?


The whole point of smart contracts is that lawyers' (and judges) opinions are not relevant. As soon as you need them and they have some power to make the thing go one way or the other the whole smart contract concept has failed.


As long as real people can be hauled before a real court, judges and lawyers--but more importantly, the law--will be highly relevant.


You really just simply do not get it. Just like the law can not define Pi to be 3 the law should not be able to influence the outcome of a smart contract if smart contracts work at all because that is how it is intended to work, smart contracts are supposed to be the entirety of the agreement, no outside interpretation should make a difference nor could it make a difference.

This is where the Ethereum crowd has - in my eyes at least - already failed with how the handled the previous hack, the concept is as currently implemented fundamentally flawed.

https://www.cryptocompare.com/coins/guides/the-dao-the-hack-...

I can see the dilemma (get the money back or kill Ethereum) must have been a tough one but if they really wanted Ethereum to be taken serious they should have chalked that up to their education fund and call it a day.


> the law should not be able to influence the outcome of a smart contract

You don't seem to understand how the law works. The problem isn't a judge trying to interfere with any of the technical features of the contract. A judge would rule on the legality of the contract as the law sees it[1]. You will be able to argue that the code is the final authority. You will probably also have to show why the other party knew and understood that risk. Depending on the situation, the judge, how each side argues their case, etc, the judge might even agree and dismiss the case.

However, a judge could, for example, rule that an important part of the contract is unconscionable, illegal, etc, and order YOU - not the contract, not the blockchain, not the software - to return the other party's money, or release the other party from their contractual obligations, or to change any particular detail of the contract's terms. The judge won't rule against the contract, they will rule against you, and it's up to you to figure out how to follow the judges order=. If the judge decides to throw the book at you for some reason, the judge isn't going to be interested in why you think about immutable contracts, or what you think the contract means. They could simply throw you in jail (or fine you $1000/day) for contempt until you follow the judge's orders.

It's generally a very bad idea to ignore a judge's orders. IN some situations, this can make immutability a serious liability.

[1] What was the offer? Was there a deliberately misleading or unconscionable clause in the contract? Were the terms understood and accepted? Did each party uphold their obligations under the contract? etc (this type of question will be asked regardless of how the contract is implemented)


This all assumes that you know your counterparty, which isn't necessarily the case.

You could simply reduce your argument to 'in situations where you use a smart contract where a normal contract would suffice a judge has their usual powers'.

But that wasn't the point I was making. Smart contracts will most likely be used in all kinds of situations where a judge does not have their normal powers, hence the reliance on a smart contract to begin with.

If you can rely on the courts you don't need a smart contract.


Even if you can rely on the courts, smart contracts could still make themselves useful, since the costs for enforcement are lower. Until your interpretation of the contract and its implementation disagree, which is when you start your costly litigation spree, assuming you have an idea of who to sue.


Whether or not you (or anyone else) think the law should influence the outcome of smart contracts...it certainly does.

So far a few states (US) have passed laws regarding "blockchains", "smart contracts" and the like. For example, seeking to avoid any legal uncertainty surrounding blockchain transactions and smart contracts relating to certain digital assets, Arizona passed HB 2417, the following on point:

- A very specific definition of “blockchain technology” as a “distributed, decentralized, shared and replicated ledger, which may be public or private, permissioned or permissionless, or driven by tokenized crypto economics or tokenless” and provides that the “data on the ledger is protected with cryptography, is immutable and auditable and provides an uncensored truth.”

-A definition of “smart contracts” as an “event driven program, with state, that runs on a distributed, decentralized, shared and replicated ledger that can take custody over and instruct transfer of assets on that ledger.”

Other states in various stages of legislation on point include: Maine, Illinois, Nevada, Delaware and Vermont. interesting notes: Arizona also passed a seperate law restricting the use of blockchain as "fire arm tracking technology", likely a pro gun rights lobbying effort. Delaware will likely be codifying by statute the right to issue stock on blockchains. Courts have begun accepting blockchain entries as business records under the rules of evidence.

This whole notion of smart contracts being exempt from judicial review is crazy. I mean if I sign a regular contract to go sky diving and "waive all rights to sue in the instance of negligence" and they forget to pack my shute and die, the contract is express and speaks for itself but guess what, it's unenforceable, no one can contracts away negligence (no matter what the contract/smart contract says). Murder for hire; no competes in California, these things do not go from illegal/unenforceable contractually to legal because they are outside the jurisdiction of the courts.


Wow, that's the best definition I have heard for Smart Contract (and maybe for Block Chain).

I never thought a legal definition would be clearer than every "common" definition I have read. It's like the author of every blog post I've seen titled "What is Ethereum?" has no idea what title they used.

I guess that just shows how hype makes it hard to get to the truth.


Agreed.

For all the hate that lawyers and judges receive, they are as good as mathematicians at coming up with (or at least recognizing and choosing) concise and simple definitions.


But it is only a local definition. Some other legislative body might make a different one.


It's not about whether or not it should, I'd be happier living in a world where they can be, but since the whole goal is that it can't and there are people working really hard on trying to achieve that goal it would be more realistic to adjust to the eventuality that it will at some point be done.

The biggest stick that governments have is that they could make it illegal for their constituents to engage in smart contracts with some kind of very large penalty.

But other than that I don't really see what could be done about it once they are a fact.

Just like laws of nature do not care about what a judge thinks math does not either. Trying to overrule smart contracts from the bench is if they actually work roughly akin to outlawing math.

And yes, murder for hire is a serious potential problem, but murders for hire already happen in the world as we have it today so the existence of smart contracts is not going to be an enabler in this respect, hiring someone to kill for you is illegal, whether you use a smart contract or a verbal agreement is not really relevant to that, it's the act that is illegal, not the means of codifying the arrangement.


Smart contracts are not laws of nature, they are contracts. I totally agree you could come up with a few examples where enforceability would be a practical impossibility, but that's also the case with standard contracts.

Just like the Arizona law I cited restricting use of smart contracts for "fire arm tracking", the law could restrict smart contracts in all sorts of ways to protect the public. Examples:

-drafters of smart contracts must be licensed and bonded/insured

-parties to smart contracts must purchase insurance to coverage sufficient to cover losses in full

-criminal liability when marketing materials are inconsistent with the smart contract itself (see: DAO)

-just like many contracts, deeds, trusts must/can be filed with the state...the states could require the same of smart contracts

Now I understand such laws undermine the purpose/intent of many smart contract opponents, but my point is judges/legislature are not powerless insofar as the laws of nature.


> Smart contracts are not laws of nature, they are contracts.

No, they are software. And the participants to such a contract have agreed that the execution of that software is the entirety of their transaction. If one of the parties changes their mind after the fact they will have to convince a judge first that even though they initially agreed that the execution of the contract was the entirety of the agreement that now this is no longer the case and that what they said was un-ambiguous before is now ambiguous and needs overriding.

So now you have a fairly complex situation:

- you will have to convince the judge that you entered into that contract and now wish to back out of the defining clause on something that is not classed as 'regret' (which is never a reason to annul a contract)

- you will have to find a way to communicate the judge what relief you feel will compensate you at a level that the judge will be able to enforce (this could be very difficult)

- and on top of that you will have all the usual issues you have to deal with in a lawsuit possibly complicated by your counterparty being anonymous and/or in an entirely different jurisdiction

States don't really matter here, smart contracts are software and are global, that changes their nature in a material way which will make it hard (possibly impossible) for a judge to enforce them one way or the other.


You just described how the adjudication of all contracts works. Smart contracts are no more above the law than paper contracts are.

> And the participants to such a contract have agreed that the execution of that software is the entirety of their transaction.

How would such an agreement be communicated or enforced? The same thing happens with paper contracts: when you sign on the dotted line, it's understood that the contract encompasses the entirety of your transaction. However, there always remains the possibility of appealing to the judicial system later to argue that the contract is void/unenforceable.


You two are speaking across each other.

You're saying no amount of evidence could show someone intended to abide in a way other than how the smart contract says they must abide, because their intention is part and parcel of what the smart contract says. True.

Your partner in this conversation is saying: You might have agreed to something illegal. It's not that the smart contract drifted from the contract's intention, it's that you weren't allowed to agree to that contract in the first place. And they're right: in such a case, the courts won't give an F what conclusions the smart contract comes to. Also true.


> the participants to such a contract have agreed that the execution of that software is the entirety of their transaction

This is where the law could disagree with you. If you and I agree that you are my slave, that agreement is null and void. Similarly, the law does not automatically recognise the supremacy of smart contracts just because the parties thereto said so. If a dispute arose, damages could certainly be ordered by a court of law.


I do get it. I just don't think that's realistic. What smart contracts should be according to you is mostly irrelevant to how the law will treat them.


It sounds like you're both in agreement that it doesn't seem realistic. What jacquesm is explaining is that the intention of "smart contracts" is to work entirely outside the existing legal system. There is no need for adjudication of any contract by a court because the contract is the law and the court.

Put in X out comes Y,every time. No room for interpretation, just pure beautiful math. That was the idea anyway, for some reason it seems they decided to implement some of these contracts in a not particularly rigorous way.

Jacques is talking about the theory and premise behind the smart contracts, and you Marco are talking about the people interacting with the smart contracts. People who of course are existing under the scope of our present legal systems.

As long as real people can be hauled before a real court

I think this is the crux of the misunderstanding. Because actions can be taken in these crypto-systems more or less anonymously, it is not obvious that you can "haul some one before a real court" should they wrong you in some way, and in those cases when you have parties interacting in these systems anonymously, the laws of the crypto-systems are the extent of the laws they are operating under. Provided extensive investigative effort isn't undertaken to unmask anyone operating anonymously.


> it is not obvious that you can "haul some one before a real court" should they wrong you in some way... the laws of the crypto-systems are the extent of the laws they are operating under

Tell that to Ross Ulbricht. Anonymity is not a guarantee of immunity from the long arm and unforgiving memory of the law. Especially in the United States.


You still don't get it. The law will not have anything to say about smart contracts because the law will not be able to enforce a contract one way or another depending on some judge but it will simply execute and that's the end of that.

This so that some guy in China or India and some guy in the United States can agree on terms without having to haggle over whose legal jurisdiction will kick in if and when there is a dispute about the contract.

Until we get a world government and until judges are able to order millions of nodes all over the world to do a hard fork there is no way around a smart contract environment that actually works. But we don't have that at the present, Ethereum as far as I'm concerned was DOA because of DAO.


However a smart contract between you and me may execute, a court can still order me to give you money, or order me to enter into a different smart contract. And if I don't comply, they will eventually hold me in contempt and at some point seize my property by force and throw me in jail if I resist.

The authority of the state ultimately rests on its ability to resort to violence to enforce its will. No smart contract can change that.


Assuming you live in a certain subset of countries, sure that could happen (take a look at what happens when an American sues a Chinese citizen). But it defeats the purpose of a smart contract.

If everyone agrees that smart contracts will pay out when they are fufilled. But only if they are fufilled in the specific way each party believes they should be (as opposed to what the code actually says)--then there is no point in smart contracts.

A potential solution is some form of very explicit disclaimer that states you are agreeing X should be paid when the code in contract Y executes, not when the condition you believe the code in contract Y tests for is met.

Of course a court could still ignore the disclaimer.


The problem is that, for better or for worse, people do not have full freedom of contract by law. There are volumes upon volumes of laws and regulations limiting the kind of financial contracts, for example, that you are allowed to enter into. Every bank has a massive compliance department dedicated to making sure that they abide by those rules.

You can't just ignore these rules by making a system that executes contracts automatically. The judge will simply order you to make the other party whole. Then, if the law allows it, he might hit you with a massive fine for breaking the rules.


That's what I meant when I said courts might chose to ignore the disclaimer.

It is possible you could eventually be able to sign something making the smart contract a form of binding arbitration.

But you're correct, courts law enforcement isn't going to let you enter into illegal contracts just because it's a smart contract.


> However a smart contract between you or me may execute, a court can still order me to give you money,

Just like that judge that ordered the DAO hack to be reversed?

> or order me to enter into a different smart contract.

No, a judge will never order anybody to enter into a different smart contract just like they don't order people into regular contracts today.

> And if I don't comply, they will eventually hold me in contempt and at some point seize my property by force and throw me in jail if I resist.

Judges have a lot of power, but they can't enforce their views on people not in their jurisdiction without the cooperation of judges and governments in other countries. This is one of the major drivers behind the development of smart contracts. I think that for those situations where 'dumb' contracts suffice they will continue to be used and the courts will continue to have their power. But precisely for those situations where the courts do not have such power smart contracts are a potential solution.

> The authority of the state ultimately rests on its exclusive right to resort to violence to enforce its will. No smart contract can change that.

The world is larger than just your own country.


>The world is larger than just your own country.

Not too much larger, considering that every major company and country has large amounts of assets and other financial interests that are subject to US jurisdiction. The government of Argentina recently learned that the hard way when American courts forced them to honor their sovereign debt, or have their US-based assets seized to pay them. The same applies if you want to do business in India, China, or Europe. Submit to their judgments or see your assets and interests in their jurisdiction confiscated or destroyed. Another recent example of this is French courts applying the "right to be forgotten" extraterritorially.

>No, a judge will never order anybody to enter into a different smart contract just like they don't order people into regular contracts today.

They certainly do, in effect. A court judgment very often creates new obligations between the parties. And if entering a new smart contract is the only way to right some legal wrong, then they can order that too. An American court, at least, can order just about anything it needs to in order to enforce its judgments.


Look, once more: I'm not saying smart contracts work at present. But if they work then judges would be without tools to do anything about it, that's a matter of definition, if you choose to define a smart contract in a way that does not agree with how the rest of the world views them then that's fine with me but it voids the discussion. Any contract that has all the outward aspects of being a smart contract but that allows a judge (or anybody else for that matter) to influence the outcome once it is activated is by definition a failed smart contract.


so the scope of smart contract in your definition can only cover areas not already governed by traditional regulatory system / laws. Imho that doesn't cover a lot.

or laws will have to be adapted to grant values to them. But then it isn't much different from today's contracts.


> so the scope of smart contract in your definition can only cover areas not already governed by traditional regulatory system / laws.

Correct, if you don't need a smart contract using one won't give you any advantages.

> Imho that doesn't cover a lot.

We're going to have to disagree on that.

> or laws will have to be adapted to grant values to them.

Absent a global government I don't see how that could be done.

> But then it isn't much different from today's contracts.

Well, it is, but not for most normal transactions.

if smart contracts can really be made to work they will be an enabler much like the laser, we didn't really have an application for those either when they were first invented.

But people are already getting creative with them and the DAO is a nice example of what could be done if smart contracts can be reliably built and executed.

I don't think this will happen in the near future because writing a regular contract is hard enough, a smart contract has to be perfect for it to be of value because any bugs will be beyond the regular safe-guards ability to be fixed, you will most likely simply lose your money or your goods without recourse.


> > or laws will have to be adapted to grant values to them.

> Absent a global government I don't see how that could be done.

What's so hard about the judge forcing you to form a new smart contract?

I have zero difficulty imagining a situation where a judge brings me in and says "Now unlock your laptop and sign this Ethereum contract that undoes the previous one".


not a lawyer, but i don't think you need a global government to have legislation covering contracts between two companies from different countries. I suppose the contract decides which juridiction will apply in case of trouble.

But if i understand your point, you see smart contracts just as some kind of tool that could be used in place of regular ones, whenever all the corner cases can be determined in advance and coded against, right ?

In which case we could have state decide which type of smart contract are legal under their juridiction and which aren't. If that's what you mean, that could be interesting indeed. I don't see how that would be applicable in practice : everything can be hacked or tricked, or fall apart, and human always are needed at some point in any autonomous system i know of.


> Any contract that has all the outward aspects of being a smart contract but that allows a judge (or anybody else for that matter) to influence the outcome once it is activated is by definition a failed smart contract.

I think the crux of your argument with Marco is that he is viewing the "outcome" in a larger scope than you are. You seem to be focusing on the "outcome" as only the output of the smart contract, while the is viewing the "outcome" as the real-world consequences of the entire situation, as embedded in our political and legal systems.


Correct me if I'm wrong, but I think it's also worth pointing out that from the point of view of judges, people losing money on ETH are really losing abstract Internet points. Even if it all happened in the same jurisdiction, would a judge be willing to consider that a theft has happened?


I don't think that's the material issue, but it is definitely possible that a judge would consider the matter too abstract to make a ruling over. But as a plaintiff or a defendant in such a case I really would not want to base my case on that.


Considering that the US government has decreed that Bitcoin is an asset and capital gains taxes are due when they are sold/spent, I'm inclined to answer yes.


>This so that some guy in China or India and some guy in the United States can agree on terms without having to haggle over whose legal jurisdiction will kick in

>there is no way around a smart contract environment that actually works.

What about the present system where people develop trusting relationships in business and elsewhere and deal with the occasional anomalies and breaches of trust as they arise, but in the big picture they're not really a deal breaker because they are relatively rare and we humans are wired for socially harmonious behaviour and mutually beneficial actions. Is that a way around it? It seems to have been working decently well thus far in terms of facilitating extensive commercial networks around the world.


> Is that a way around it?

No, that's an alternative, and smart contracts are attempting to become a way around that.


Well it's not really an alternative, it's just reality at the moment, so long as smart contracts are more theory than practical.

What if trust is a feature not a bug? Why is it something we need to engineer around?


> What if trust is a feature not a bug?

But not everybody can be trusted.

> Why is it something we need to engineer around?

We don't, but that won't stop it from happening and it is usually better to enter those situations informed rather than arguing from what world it would be nicer to live in.

When the automobile entered mass production the world changed. You could have of course argued that this made the world a worse place to live in (which it did in many respects) but the reality was that once invented people apparently wanted automobiles and that demand ended up being satisfied. If enough people want smart contracts they will be a fact of life, knowing their limitations, how to deal with them and whether or not you should enter into one is important knowledge. No amount of sticking your head in the sand will reverse the course of history, smart contracts will happen, or they won't and if they do it will pay off to know about them. Right now they're on the edge of being useful, in a few more years we will know for sure whether or not they were a fad or a harbinger of a novelty whose impact will be hard to predict.

I don't like them but I do believe they will happen and I also believe that they will alter our societies in material ways.


The "contract execution" can't touch anything in the real world. People do that. Maybe a "smart contract" says Joe Hacker is entitled to reside in 168 Park Avenue. Maybe everyone on the Ethereum blockchain agrees that Joe is entitled to reside in 168 Park Avenue. If a judge rules that it's Bob's house and Joe has no right to be there, that's gonna trump all of that, if only because the judge has more people with guns to call on.


The contract execution is only going to work if all parties bound by it agree that the execution is the full extent of their agreement.

For instance, if two people who have no business to reside in 168 Park Avenue make up a contract in 'the real world' that the other can go and occupy 168 Park Avenue then they will find - probably not to their surprise - that their agreement will not work, regardless of which medium it is conveyed on.

Smart contracts are a tool for those situations where you believe present day law is going to leave you stranded or in a situation that is legally ambiguous. I do not believe their strength lies in areas that are already properly governed by existing law.

Now you could argue that that is all of society as we know it right now, but in international commerce there are quite a few legally gray areas that are now patched over with mechanisms such as escrow and various other instruments. But those are only 'worth it' when the transaction amounts are larger than a certain minimum.

So, in short, you are absolutely right, if you use a smart contract in a situation where a regular contract would suffice it will not change anything. All the parties to the contract are known, the whole thing has immediately verifiable effects in the real world and 'might makes right'.

But in situations where the participants would like to remain anonymous, in situations where both parties would for reasons known to them rather avoid dealing with lawyers, the law and associated mechanisms smart contracts could become an enabling device.


If you try to argue this to a judge you will most likely end up doing some time for contempt of court.

I am not a lawyer and not your lawyer.


Keep in mind that the parties entering into a smart contract may not even be known, so who will do the arguing?


That's not entirely true. The law can make crypto currencies illegal and put them outside the banking system. The US government did this with online gambling payment systems like NetellerC which severely crippled that industry. They also could potentially charge the founding developers and ICOs. Basically if the law makes it too difficult and non-convertible to real currencies and mainstream goods and services then they can exert the necessary influence that will either kill it or force change via the major actors.


Yes, and the more such laws a country makes the less relevant that country will be in international commerce.

It's very hard to outlaw progress, it will simply route around you, there are many historical examples of this.


Under the current situation, it's more like the more countries make such laws, the less relevant the respective cryptocurrency will be in international commerce. Last I checked, state-backed fiat currencies were still more important than anything crypto.

And while it's hard to outlaw progress, it's also very hard to identify progress before it happens, and even then you can never be sure whether people won't go back to the previous system.


A judge's opinion is always relevant. You cannot escape the real world just because a smart contract says so.

No one has bothered to sue over a smart contract yet. I concur with pkilgore in "I frankly can't wait until this shit gets litigated."


This is adorably naive hacker thinking.


I agree with you. If the point of a smart contract is that "code is law" and "judges doesn't make decision, the protocol does", that surely sounds like naive hacker thinking.

If that's not the point of smart contracts then what is a smart contract? How is it different from that thing which we call just "contract"?

So either the smart contracts are just contracts, or they are product of naive hacker thinking.


I think the point is that they bundle together the agreement with the actual execution of the agreement. The execution is performed by public code that everyone can audit and verify for themselves.


No, the adorable naive hacker thinking is that one could actually write a contract that has no room for interpretation (see DAO). There is a very good reason we have judges and lawyers, which is that being 100% un-ambiguous is impossible, and smart contracts are no exception to this rule, only there every ambiguity will allow either one of the contracting parties or an outsider to make off with the loot.

So for now nobody appears to be willing to stand by 'the code is the law'.


> The whole point of smart contracts is that lawyers' (and judges) opinions are not relevant.

To the extent that that's true, the idea is simply wrong.

I would argue that it is quite possible to see smart contracts as having potential practical value without taking that ideological position on their role, however.


Lawyer/programmer here (US law). It's an interesting problem.

Let's assume offer, acceptance, capacity, legality for a transaction.

So question to me is, when do we have a contract (do we have a contract?) and what IS the contract. For this usually (not always) look to the so called "meeting of the minds."

If we define the meeting of the minds as the EXACT actual code, it's hard to argue that using a bug in the code is a breach. Simplistic example: I write a lease that says if I sell the house me or the buyer can terminate the lease on 30 days notice. You do not do any diligence on that lease. When I sell the house and the buyer terminates, you're out of luck.

If we define the meeting of minds as "you are promising to do thing X for me, and you propose to do it with a smart contract", then if there is a bug in the contract, that might be a breach on behalf of the person offering to do thing X. Simplistic example: Your website says if I send ETH to address "0xExample" you offer a service that will send it back in 6 months. If 0xExample is hacked and money wasn't returned, well, you could argue that there was a breach of a contract to return your money.

No idea how a Court might come out, and being the law, it depends on shades of grey, other factors, skill of lawyers, etc.

I frankly can't wait until this shit gets litigated.


Regarding smart contracts and other inventions of cryptocurrency: I think, most of all, the crypto market is absolutely vicious, in a way that both capital markets and technology companies haven't seen(in the public eye) for many, many years. As of right now there's still some faith left that Ethereum is going to go places because firms keep trying to use the technology on the basis of hype. Unlike with most overhyped and half-baked tech, though, the failures do not get shoved in the back room for some hapless dev or ops team to deal with. This is like if Apple and Google had daily columns on the front page showing every bug or support issue that they experienced in the past 24 hours.

And that's been true right from the beginning with Bitcoin: scams, schemes, heists, data loss - the headlines scream blood all the time. We've never had that kind of "mean time to disaster" in technology before. The status quo was that something would fail, but the failure would never quite get back to the individual or company that produced it. They would spin it away, and no careers would be harmed. But the likes of Solidity produces a meat-grinder, a blind destroyer of any who dare enter calling themselves rockstar.

I think it's kind of awesome and beautiful, in that sense. It will induce a maturation throughout the economy to adapt to this new pressure. But like adolescence, it can be an ugly work in progress, and I don't expect Ethereum itself to be a survivor at this rate.


This is like if Apple and Google had daily columns on the front page showing every bug or support issue that they experienced in the past 24 hours.

Things is, with Apple and Google there is a rather low ratio of spectacular failures to output of products that are in many cases, rather effing amazing. Whereas with the cryptocurrencies unfortunately, the spectacular failures be they in the form of scams, schemes, or heists, more or less are the story.

It's not like these recurrent tales of avarice, greed, or just plain seediness are crowding out the print space for the tales of all the amazing things cryptocurrencies are bringing about, there's room to tell that story to, but where is it.

At this point it's getting harder and harder to locate where there is that glint of hidden potential in cryptos in the face of all the malice and fuckups.


> This is like if Apple and Google had daily columns on the front page showing every bug or support issue that they experienced in the past 24 hours.

It will never happen, but that's actually a great idea.


It's like EVE Online but for real.


Because it is unfettered completely innovative ruthlessly competitive free market. Boom and bust cycles from the era of industrial revolution tied to a capped deflationary currency (gold) that saw some of the fastest and most astounding speed of technological advancement in recorded human history. It's creative chaos is, personally, liberating.


Which also resulted in that jolly good time called "The Great Depression".


Your logic doesn't add up. Attackers are only willing spend $90k if there's a 90 percent chance they can exploit a bug in the contract to extract the entire $100k value.

Clearly if TWO hackers both spend $90k and only one extracts the value, the other one has lost their entire $90k - unless there's a way to be sure you are the one who will win that, your expected return on the $90k is only $50k if there are two parties trying to hack the contract.

The interesting bit is yes - the immediate loss. But a loss of unmarked cash is similarly instant.


People here love to extol the virtues of cash, but most decent law-abiding folk prefer to keep their assets in safer forms for precisely that reason.


Assuming by "safer form" you mean a bank account (since that's what "most folk" use instead of physical cash), it's hard to know how safer it is. In the early 90s, my country's government froze almost all the money on everybody's bank accounts with no warning; obviously, whatever physical cash you had in hand wasn't affected by the freeze (though it lost its value fast, due to the inflation).

On the other hand, recently another country changed its note design, and made the older design no longer valid. Whatever physical cash you had in hand instantly lost its value, while whatever value you had in bank accounts was automatically converted.

As you can see, sometimes cash is safer, sometimes bank accounts are safer.


> But a loss of unmarked cash is similarly instant.

True, there isn't a global list of where every bank note is.

I've already lost a tiny amount of BTC just by testing a bit with short keys. Can you imagine what the world would be like if every time you left your wallet for 10 seconds, it vanished?


Just in case lordnacho's meaning here isn't clear to anyone.

testing a bit with short keys.

He's put some bitcoin into wallets with keys/passwords that don't meet very high security standards.

I've already lost a tiny amount of BTC

He's then lost that bitcoin because there are programs running running around the clock to programatically empty any wallets with passwords that don't meet very high standards of security.

Thus,

Can you imagine what the world would be like if every time you left your wallet for 10 seconds, it vanished?

But this is the "trustless" world you signed up for right?


A more accurate analogy would be that your money vanished from a public locker with combination 0-0-0.

Nobody complains about the shortage of address space provided by 256 bits. This guy was experimenting, and being lazy during his experiments, so at the very least he should have known what to expect after the first loss.


It still violates the optimistic premise of blockchain advocates that it helps us move to a world where trust is baked into the systems.

If you live under the assumption that you're perpetually under attack unless you rigorously protect yourself, it's not really the example of trust we're promising to non-technically adept folks.


> A more accurate analogy would be that your money vanished from a public locker with combination 0-0-0.

And it's a pleasant world where every time you do that, you get robbed.

> Nobody complains about the shortage of address space provided by 256 bits. This guy was experimenting, and being lazy during his experiments, so at the very least he should have known what to expect after the first loss.

This is totally beside the point.

There's a social cost to constantly having to watch what you do. If you're robbed any time you're on the street, you'll have to spend time learning self defence and you'll have to buy appropriate tools such as locks. You'll also have to teach your friends about this, and you'll need friends. And your attitude to strangers will change.


I mostly see your point, except your argument seems to be missing the important fact that the payoff for the hackers is not guaranteed. To say someone is willing to spend up to 90% of the potential payoff without a guarantee that they will be paid out is missing a fundamental aspect of the economic equation here.

The scenario you gave should be fairly similar to any application outside of Ethereum that deals with money ie. a banking app, except for the fact that, like you mentioned, you can't prosecute someone.


Except it's made up numbers, and the the valuation's are actually much lower - the cost to find an exploit is not a linear investment of time and money, but a parallel one. Thousands of potential hackers are targeting you, and only have to succeed once to bankrupt you (the payoff is also non-linear - any given exploit probably works more then once).


Is formal verification of contracts feasible? Is anyone working on it?

Also, here's a possibly crazy idea: could one create bug bounties for algorithms (or even arbitrary software) on the Ethereum blockchain by writing the algorithm into a contract such that if you somehow break it you receive the bounty?

An example of this would be the massive implicit bounty currently placed on the crypto algorithms (SHA256, ECDSA/Secp256k1, etc) underpinning cryptocurrencies (of course, if those were broken the value of the cryptocurrency would plummet instantly)


Yoichi Hirai and others are working on completing proof assistant support for EVM, meaning you will be able to prove program properties using logical pre/post-conditions with machine checked proofs.

There are already useful tools for symbolic execution, and I have a hunch that this kind of verification will be important along with model checking.


The specification of EVM in HOL exists already [1] and can be used to prove correctness of EVM code already. EVM is pretty low-level, though; the same can't be done for Solidity code. Yoichi has a page that outlines his thinking about what Ethereum's formal verification needs are [2].

What I would like to see is a verified high-level smart contract language layered on top of the Ethereum stack, allowing non-logicians to put together contracts that mean what they think they mean. See [3].

[1]: https://github.com/pirapira/eth-isabelle

[2]: https://github.com/pirapira/ethereum-formal-verification-ove...

[3]: http://lambda-the-ultimate.org/node/5003#comment-94645


There's already an implicit bug bounty. Whoever found this bug got a bounty of millions. Much better than the presence that tech companies pay.


Yes, but I'm suggesting designing explicit bug bounties. The point of a bug bounty is to offer a smaller sum of money than would be lost if the vulnerability were exploited maliciously.

Cryptocurrencies are serving as bug bounties for their crypto primitives, but that only benefits other users of those primitives.


See: https://www.youtube.com/watch?v=voyespPGQZI (Directions in Smart Contract Research A Selection - Philip Daian)


Also start with the platform - is it easier or harder to hack? C++ code has caused millions and millions of unintentional bugs. If Solidity was built more like C++ and unlike something like Rust, then it should have a large part of the blame.

The Ethereum developers create Solidity with the goal to make it "super easy" for developers to create dapps. Security wasn't the #1 priority. And now the ecosystem will pay for that design decision. Whether the decision still ends up being a net positive in the long term, it remains to be seen.

However, keep in mind that Ethereum as a platform is still in its very early days, with not even 0.01% of the population using it. If $30 million can be stolen just like that, what happens when 10% of the population uses it and there are trillions of dollars invested in it? (assuming it will be the "next internet" or whatever)


Your reasoning is flawed. Once a contract is developed that proves to be secure, it can be used over and over at no additional cost.


Once code is developed that proves to be bug free, it can be used over and over with no bugs!

Doesn't seem to quite work like that in real life.


quicksort? cat? ls?

I mean some of these things have bugs still, but generally when you have something of fixed scope then there are less bugs over time. Especially if you're restricting your scope to something simple


Those 3 examples that are both relatively simple and more than 40 years old are unlikely to convince people that something new and complex is worth the risk.


Unix is anything but simple.

And 40 years ago they were actually able to convince people that this new thing was worth the risk and that's why we're having this conversation today.

Early adopters are simply early, they will most likely lose their shirt but some of them will end up making you wish that you too were an early adopter.

It's a bit like angel investing.


Very many implementations of quicksort are vulnerable to inputs that trigger quadratic runtime because of improper selection of the pivot element.


Less well-known, not only is the selection of the pivot element important, but also the selection of which side you use recursion:

"[...] it always recurses on the first sub-partition, and iterates on the second sub-partition; but instead, it should always recurse on the smaller sub-partition, and iterate on the larger sub-partition [...] our attack constructs an input array of N elements that causes qsort() to recurse N/4 times." https://www.qualys.com/2017/06/19/stack-clash/stack-clash.tx...

That's from last month.


> I mean some of these things have bugs still, but generally when you have something of fixed scope then there are less bugs over time. Especially if you're restricting your scope to something simple

I'm guessing that smart contracts tend to be relatively short and simple? I mean I would never bet on an entire web/mobile app being bug free because the surface to attack is enormous but e.g. a sorting algorithm or something small in scope can be formally verified to be bug free as long as your specification is accurate.


Are you saying there is no bug free code?


As long as you want the exact same contract.


I grant your point, but disagree with your framing of the problem.

I think a good analogy here is to compare to American settlers. You're going to have a few waves: the explorers who move into totally uncharted territory and take on significant risk by using smart contracts. These are kinda crazy people who love the innovation, and I'd argue this is the majority of people in the space right now.

Eventually there will be the settlers, who start finding early uses for this technology that can significantly lower costs. Basically collecting on low-hanging fruit. J.P. Morgan, many finance companies, some savvy governments will step in to capitalize on easy wins.

Then there will be the long tail of normal uses. By the time the average company invests in smart contracts, there will be very well-understood battle-tested templates and toolchains for creating smart contracts, as well as consulting firms that are specialized in writing them for you with provable security guarantees.

Right now it's early. Your average company should not use smart contracts, that's a no-brainer. But someday the economics are going to make it a no-brainer for certain things, like incorporation, or issuing shares, or doing payroll, or complying with import/export regulations, or doing corporate taxes, or whatever it is that ends up more efficient through blockchains.


> Basically collecting on low-hanging fruit. J.P. Morgan, many finance companies, some savvy governments will step in to capitalize on easy wins.

You think a lack of technology is what's keeping these giants back from innovating? There's a reason many banks still have mainframes powering large portions of their internals. Lack of new tech is not holding them back.


> There's a reason many banks still have mainframes powering large portions of their internals.

There are many reasons. Institutional inertia for one, a lack of sufficiently knowledgeable people another. Banks are not innovating because you can't get around them anyway. And personally I don't mind, I'd much rather have my $ parked with an entity that moves slowly and predictably than with some 'move fast and break stuff' outfit that gives me a heartattack 3 times per year by showing me a $0 balance and no support department to call.


Serious question: How can smart contracts create the "proper" trustless environment for most workplace contracts?

For example, stock option agreements are usually pretty straightforward... until a termination date has to be decided on. How does the termination get put into the contract?

Though I suppose smart contracts could exist as an automation mechansim , but there's a "wrapper contract" that provides "real deal" legal protection against abuse?


Bringing trustworthy real-world data into a blockchain in a decentralized manner is a known and important challenge that is being worked on by several projects like Augur. The prevailing answer is to incentivise humans to insert it correctly by appropriately aligning rewards for doing so, and making it difficult not to do so (schelling points). That's what the Augur project is really about, the prediction market they are building is just the first application of that system.


They can't do that on their own - interaction with the physical world requires a trusted party to decide/verify if a particular real world condition has been met or not.

Coincidentally, that's (part of) the role our court system plays in contract disputes; but there are other existing systems e.g. arbitration.


When you sign a legal contract, you are also likely to spend a non-negligible fraction of the contract to lawyers so that they review it thoroughly. Think of the legal costs of fund raising or the time spent negotiating and reviewing a contract for a large deal.

Some things that are at stake on the lawyers side are their competence (can they actually make sure the contract is "secure" ?), their reputation (track record of competence established over time) and some insurance mechanism (if things go wrong can you get something back from their insurance).

All of the above seem to be missing in the case of "smart-contracts".


I'm not sure premise 1 is true. The most useful smart contracts so far are tokens and multisigs, and those are definitely simple enough to do right (if you don't make a major blunder like the Parity team did).


> if you don't make a major blunder like the Parity team

...Which was founded by the very person who developed the smart contract language Solidity. Which goes to show how difficult it is to write 100% bug-free smart contracts.


One way to help mitigate that is by tiering releases. Rather than deploying an app that can potentially accept millions of dollars on day 1, it can be purposely limited to lower amounts and slowly increased over time as the codebase is iterated and time-tested. Apps that have been around for decades with few changes are significantly safer than new apps. Of course this is not perfect (ie heartbleed) but I think this methodology will become standard in ethereum.


You might expect the risk to go down over time, as people develop standard contracts with proven reliability.


If you link it to real world, any legal contract may have flaws. It all depends who got a better lawyer. Same analogy goes here.


In the real world, contract law is written to not just take contracts at face value, but to also let judges take external factors into account. This includes customs, the parties intentions, whether they are acting in good faith, etc.

This is precisely because it was deemed impractical to write contracts that could be 'computationally' interpreted line by line. Seems like the etherium is slowly rediscovering this fact the hard way.


This is a very pro-Ether take on what happened, but ultimately it comes to the right conclusion:

> The problem is that his programming toolchain allowed him to make these mistakes.

Damn straight. The problem is that the model of 'public by default, opt in for security' is fundamentally daft in this context. There's quite a good read on that particular topic here too http://hackingdistributed.com/2017/07/20/parity-wallet-not-a....

...but hey, if this ends up making Ethereum better, more secure and more robust as a result, then that's a good thing; it probably does need a different better language to express code in.

Just remember...

> certainly you should not store any money in a hot wallet that you’re not comfortable losing.


>This is a very pro-Ether take on what happened, but ultimately it comes to the right conclusion:

>> The problem is that his programming toolchain allowed him to make these mistakes.

This is not the right conclusion; it is too shallow. It suggests that the risks of smart contracts can be fixed with some changes to the programming toolchain, but no-one has ever made one that only produces secure code, and I think I can safely call that notion a pipe-dream. How, then, do we write code with the level of security needed by smart contracts, and in the volume needed for smart contracts to be useful, if they are to be publicly accessible like Ethereum? The fact is, this has never been done before at that volume, and we do not know how to do it.

> Just remember...

>> certainly you should not store any money in a hot wallet that you’re not comfortable losing.

But what does it take to be comfortable? Unless you are just going to take someone else's word for it, you would have to examine all the code, including the libraries and the EVM itself, and be competent enough in security to be comfortable that you had not overlooked ay risks. But the real problem is that this does not just apply to hot wallets, it applies to anything that puts your Ethereum at risk. So, in practice, 'being comfortable' means trusting a bunch of people you probably do not know well, and with no recourse if that trust turned out to be overly optimistic.


I would argue that it is not a pipe dream, but does require a paradigm shift in how the world views software.

For whatever historical reasons, software has almost always been engineered shoddily as compared to other money-critical or life-critical forms of engineering.

Companies (and governments) aren't willing to make the investments of time, personnel, expertise, and money that are required to create secure, safe code. Insecurity and vulnerability is the norm even among supposedly security-conscious organizations.

We could discuss the root causes all day (companies rarely face full consequences of poor security, etc), but part of the problem is denial. Few are willing to acknowledge how much work it would be to create truly secure code. Instead they settle for being better than most competitors.

However, this does not mean that really, actually secure code is impossible, just that we should (a) admit the scope of the challenge, (b) start taking steps toward that goal (like investing more in research).


Yes, but this reductive view isn't useful. It's happening, whether we know how to do it or not. The important question is how to proceed.


Proceeding by ignoring the inherent difficulties is certainly an option... In fact, that is how we got to the current situation.


The thing is, everyone knows it's difficult. It's not new information.

The people who proceed anyway stand to benefit handsomely if they don't screw it up. So the game is simply: don't screw up.

It's hard, to be sure. But to say it's impossible is to overstate the issue. And even if it is impossible, it doesn't mean it will end in disaster 100% of the time.


> The thing is, everyone knows it's difficult. It's not new information.

Actually, a lot of people seem to be in denial over just how difficult it is, and what those difficulties are.

> So the game is simply: don't screw up.

If only the people who lost a combined $31M had followed this simple advice! Then everything would have been fine.

> And even if it is impossible, it doesn't mean it will end in disaster 100% of the time.

It does not have to end in disaster 100% of the time for people to lose faith. Losing < $1M would do it for me.

This is just talking around the issue. There is a currently-unsolved problem here, and if you have a solution, it would be helpful if you were to share it.


> the model of 'public by default, opt in for security' is fundamentally daft in this context.

It's daft in most contexts, and is one of the largest sources of security problems. If your design requires enumerating badness[1], you're doing it wrong.

> from: http://hackingdistributed.com/2017/07/20/parity-wallet-not-a...

>> Just about every ICO, trust and company used the Parity multisig wallet, and that code was considered well-tested.

-sigh- This is, unfortunately, a common problem. "It worked ok the last N times" and "It passed a lot of tests" do not mean it's bug-free and safe to use. Richard Feynman was right during the Challenger investigation when he called this a childish attitude. (He was also right in not wanting to assign blame, instead asking "How do we educate the child?"[2])

[1] http://www.ranum.com/security/computer_security/editorials/d...

[2] https://www.youtube.com/watch?v=4kpDg7MjHps#t=150


The page you linked mentioned "SafeMath". Is this that?

https://github.com/nemequ/portable-snippets/blob/master/safe...


But the function people were exploiting needed to be public, I don't see how internal by default would have made any difference.

The real issue here is that the class constructor called a function instead of containing all code within itself. It's a fundamental misunderstanding of how the EVM works and how Solidity compiles to it.

I've read the code and it's hard to convey the level of incompetence that went into having a dynamic call from the Wallet constructor to the initWallet function; but it's very, very high.


It's below the level of incompetence required to design and deploy a language for this specific purpose that makes such misuse so simple, and apparently also below the level of incompetence of the Ethereum community who allowed $100M to be protected by it.


will Tezos help with Ocaml to make better contracts? I think that is the whole point of Tezos!


As long as Ethereum apps are powered by a deeply-flawed programming language (Solidity) and VM (EVM), this will happen over and over again.

Writing provable, secure software is difficult, and highly unlikely if your environment doesn't force the correct mindset. Solidity (poorly named) was made with the primary goal of being easy for JavaScript / Node hackers to use.

The cost of this is now illustrated through the repeat 'hacks' of bad 'smart contracts'.


Exactly. I'm amazed that so much of the web today is still based on "easy" scripting languages like JS or Python, which are fragile and error prone.

Once I transitioned to Elm and Haskell, I saw bugs almost disappear. I didn't improve as a dev, I just used a safer language.

Especially when money is involved, correctness and safety should be the number 1 priority.


> Exactly. I'm amazed that so much of the web today is still based on "easy" scripting languages like JS or Python

You can put any script kiddy in front of them and get a "working" program.

> Once I transitioned to Elm and Haskell,

My first question when I heard of Haskells main features: "What does a planet from Star Wars have to do with programming?". Haskell is not a source of cheap programmers.

> Especially when money is involved, correctness and safety should be the number 1 priority.

When money is involved the first priority is a cost/risk evaluation. Generally the people involved in that evaluation don't have much of a personal risk so the number 1 priority is to reduce the cost.


>"It’s important to understand that this exploit was not a vulnerability in Ethereum or in Parity itself."

I mean.... I guess. It's a feature of Ethereum, if we're going to weasel around.


I know I'm this situation the dev made a simple mistake, but I wonder if Ethereum is safe as a system assuming developers will make many mistakes, and those mistakes will happen more often as more complicated contracts are written.

At some point I wonder if the idea of smart contracts is better than a traditional system, since they seem prone to developer error due to complexity.


> I know I'm this situation the dev made a simple mistake, but I wonder if Ethereum is safe as a system assuming developers will make many mistakes, and those mistakes will happen more often as more complicated contracts are written.

This will probably come off as being assholish, but I honestly don't mean it to be: you should read the rest of the article. It actually covers this topic in depth and has good thoughts on this fundamental issue with smart contracts.


The rest of the article amounts to a few points:

- Humans make mistakes, the tools should have been better

- The technology to make Ethereum safe doesn't really exist

- We should work to make that technology exist

- We should be happy this happened since it raises awareness about the problem

> In the end, attacks like this are good for the community. They call you to your senses and force you to keep your eyes open.

What?!

Listen, just because Valgrind exists doesn't mean you can't accidentally write a C program with memory errors. Just because Rust protects against race conditions doesn't mean you can't have bugs in your threading code. We're not even close to a world where tools can offer amazing protection.

> The developer here was Gavin Wood, one of the co-creators of Ethereum, and the inventor of Solidity, the smart contract programming language. The code was also reviewed by other Parity contributors. This is basically the highest standard of programming that exists in the Ethereum ecosystem.

This was an error made by the best of the best, reviewed by the best of the best. The tools that will save us from this madness don't exist. What does this mean for Joe Developer? It means he's not going to build something that he keeps anything of value on. The author's cheery "we'll be stronger for this!" attitude completely neglects the obvious chilling effect that this is having. If the guy that invented the damn thing can't protect his $31 million dollars, why would I even try to build something that could manage even hundreds of dollars?

And to that end, is it really better than a traditional system?


> We're not even close to a world where tools can offer amazing protection.

I wonder how do you ride your plane then?

> The tools that will save us from this madness don't exist.

These tools do exist(not with ethereum ofc). They are harder to work with, which should be a non-issue for writing contracts.


>I wonder how do you ride your plane then?

When I was in physics undergrad, I remember talking to engineering students taking statics. In general physics, we were allowed to make simple numerical errors, the emphasis then was on figuring out the solution and understanding the physics. My friends on the other hand complained how they, after acing gen. physics, would get mercilessly docked off points for minor arithmetic errors and calculation errors in statics.

They'd complain to the professor and he'd reply, "that mistake you made means your bridge will collapse! It doesn't matter if it's minor!" The point is to become an certified engineer, there is a certain level of rigor you need to have because of the gravity of what you deal with, and if that fails, engineers have been held legally liable.

The article said it itself, and I really couldn't believe how blantant it was:

>Most of the programmers who are getting into this space, myself included, come from a web development background, and the blockchain toolchain is designed to be familiar for web developers.[...]The problem is, blockchain programming is fundamentally different from web development.

My mouth was wide open reading this here, people who have the discipline of web developers are the ones developing Ethereum? And this is the promised land that one day will be the future and I'm supposed to believe it?

Sorry, for some aspects of life, brightness and having a great community are not enough, especially when you want to do something that you could lead to risk of loss of life or limb.


That means there is an entrepreneurial prospect for you to enter the space with a team that has a more serious background, right? Eventually people will generally understand that contracts require serious correct engineering, and you'll be able to capitalize on expertise.

Smart contracts have only been generally available for like a couple of years. Most people are clueless about how to do them properly. That means it's an interesting thing to work on! And hopefully we'll steer the ship towards safety, correctness, and simplicity.


>Eventually people will generally understand that contracts require serious correct engineering, and you'll be able to capitalize on expertise.

No one gets paid for exploiting a minor hole in a bridge, causing it to collapse. They will by finding holes in smart contracts, as evidenced.

Bug bounty programs do not exist to provide alternative means of financial remuneration for black hat hackers. They exist to provide white/grey hat hackers an opportunity to get paid for doing the right thing. And yet black hat hackers still sell zero-days to rogue governments and operatives.

Why do you think this bug bounty model of securing smart contracts will be any different? Capitalizing on expertise against smart contracts has its own reward with a shorter feedback cycle than selling zero-days: You directly profit from finding security breaches and stealing money.


I think we'll be able to just prove the correctness of our contracts and then use them safely. Of course you can't do that with Microsoft Windows because it's too complicated, but you can do it with small contract bytecodes.


The kind of person who's risk-averse enough that they'd pay extra for a better contract engineer is probably not the kind of person who's using smart contracts at all. And buying contracts is lemon market, which is only really solvable via regulation - but its biggest fans are regulation-averse people.


The planes I ride in are not designed to survive most forms of adversarial engagement...


>I wonder how do you ride your plane then?

I don't understand this comparison. The underlying concepts involved in flying a plane is way more understood, tested, and regulated than writing software is. If the choice was between dying in a plane crash, and dying due to a software bug/exploit, I'd choose the plane every time.


>I wonder how do you ride your plane then?

I don't fly air superiority missions, so I don't generally consider it. Your point is probably valid for Air Force and Navy pilots, I guess.


Traditional financial systems have established administrative body and practices, risk monitoring systems, fraud insurance and "slowness" that actually helps in cases as these (eg. You very often can undo transactions, by freezing funds somewhere across the world and then resolve those issues later on).

Imo cases like these will be crucial in adoption of crypto currencies and smart contracts. And if there will be no (administrative) safe guards against cases like these, it might as well be the end for crypto currencies, simply because of lack of general trust in them.


Hmm; my concern is that it results in a polarisation of the skill levels of the developers writing smart contracts.

There seems to be a lot of hype and demand around blockchain tech at the moment, and hence a lot of demand for developers to pick up the tech. For the skilled and experienced developers who work with blockchain tech these kinds of events will make them think more about what they're doing and probably take more care. For those of us with lots of programming experience but no knowledge of blockchain tech, they serve as a warning that there are serious issues with the platform that need deep experience (and hence time investment) to address properly.

That leaves a tranche of less experienced developers who maybe don't realise that these issues mean they should take more care (or use better tooling, or whatever other panacea is called for to make development 'safe'). The platform may finish up with a small number of experienced developers writing 'safe' code and a larger number of inexperienced developers writing 'unsafe' code, with the result that the platform as a whole finishes up being unsafe. As the article says:

> Most of the programmers who are getting into this space, myself included, come from a web development background, and the blockchain toolchain is designed to be familiar for web developers. [...] In a way, this may end up being its downfall.

> The problem is, blockchain programming is fundamentally different from web development.


> We're not even close to a world where tools can offer amazing protection.

Actually, we're reasonably close--the tools aren't quite there yet for mass consumption (many are still feel quite researchy), but given that the trend of (research -> industry) usually takes 10-25 years, I'd expect that more and more critical systems will be formally verified in 10 years. Even now, companies like Amazon are using some formal methods (modelling with TLA+) to validate that specifications will behave as expected. (https://cacm.acm.org/magazines/2015/4/184701-how-amazon-web-...)

Formal methods & dependent types allow for some very cool tricks on top of that--basically, you can encode in the type system a proof that the program implementation matches a specification. CompCert is a mostly-formally verified C compiler--since it was released, iirc, no bugs have been found in the verified portion of the compiler. (CompCert page: http://compcert.inria.fr/man/manual001.html)

You can also prove that the specification has particular properties (in a distributed system, things like liveness and partition tolerance). Consider the Verdi framework (allows formal verification of distributed protocols) and their formal verification of RAFT. (Code here: https://github.com/uwplse/verdi-raft)

However--it's just that it currently takes a lot more work in terms of person-hours to do the development. But formal methods are getting used in more and more places, and they do make a difference in practice. (Wired has a not particularly deep, but straightforward article that shows another use: https://www.wired.com/2016/09/computer-scientists-close-perf... )

Anecdotally, as far as effort--I'm an industry programmer who writes mostly C#. I had to learn Coq (a formally verified language) for a class--it took me a couple of simple assignments to get the idea of how it worked. Even after a few months, hacking together a formally verified interpreter for a very simple language (functions, while loops, etc.--simple, but not trivial) took about 3-4 times longer than it would have taken me to do normally.


I think the problem is that the language for smart contracts that backs Ether hasn't been written with formal verification in mind. You could apply formal methods to anything after the fact but it doesn't look like they've made this easy here. You could claim that a C program could be made bug free eventually by applying formal methods for example but it would require a huge amount of work.

Is there a good reason they didn't use a battle tested pure functional language with a strong and expressive type system?


I'd agree, and the article basically says the same thing--the language is too expressive, and therefore hard to analyze. I don't know that much about the Ether devs, but I'd expect it just didn't occur to them--even among PL folks, knowledge & experience with something like coq is somewhat rare unless you went to the right undergrad or grad school. Especially if you weren't keeping up with the latest research in the last ~5-10 years or so.

Something like Coq with a few primitives to represent interacting with the Ether network, and an optimizing, verified cross compiler would have been a perfect fit for this sort of thing, in my opinion. It's a shame that they didn't go that route, the extra dev time to get it right probably wouldn't have been equivalent to 200+ dev-years of cost (~31 million).


> I don't know that much about the Ether devs, but I'd expect it just didn't occur to them--even among PL folks, knowledge & experience with something like coq is somewhat rare unless you went to the right undergrad or grad school. Especially if you weren't keeping up with the latest research in the last ~5-10 years or so.

Hmm, you'd think they'd know about languages like Haskell though.

I don't think it would be practical to expect developers to write verified code anyway; it's still far too challenging in general. Having a language where you could optionally formally verify the code would have been useful though.

> Something like Coq with a few primitives to represent interacting with the Ether network, and an optimizing, verified cross compiler would have been a perfect fit for this sort of thing, in my opinion

You wouldn't think something like Coq with a few primitives would make some contracts difficult to write?


Late response, but: coq has the optional verification that you're proposing. :)

In my experience, Coq is not significantly harder than OCaml to write unverified code in. It's missing some nice shorthand syntax, but other than that it feels pretty similar.

With coq, the main challenge is expressing things that are meant to "run forever" (any truly unbounded recursion)--but my understanding is that would be forced to halt when it ran out of ether (so it's bounded anyways, and if you needed to you could probably explicitly hand that fact to the compiler)--and I think you probably don't want something to loop indefinitely if each iteration costs ether.

The main issues with coq that I think you'd crop up against are things that a good optimizer/compiler could probably help with (e.x. things like the fact that integers are naively represented as cons cells, so addition is O(n) and multiplication is worse). However, I haven't written any smart contracts, so it's definitely possible I'm missing something obvious.


Gavin wood did not write that change nor review it. https://github.com/paritytech/parity/pull/3773/


Honestly I read the comments first, I enjoy and learn from HN comments often more than the original article. Thanks for pointing out I was missing context.


>At some point I wonder if the idea of smart contracts is better than a traditional system, since they seem prone to developer error due to complexity.

The idea is incredible. Groundbreaking. Honestly super interesting to me.

The execution of them as law is... well, going about as expected. This is why the law doesn't actually work this way.


I think Solidity, and hence Ethereum as a smart contracts platform, really took off because Solidity is easy to get started with. More formal languages make it harder to shoot yourself in the foot, but ... devs don't use them.

The trouble with appealing to the middling devs, of course, is that you end up with middling code, and middling smart contract code is how to shoot yourself in the foot.

https://davidgerard.co.uk/blockchain/ethereum-smart-contract...


I think most developers know not to eval()

Why would you execute arbitrary text in any other languages?


Your parallel is not an accurate one.

One of the key and powerful features of the Ethereum Virtual Machine or, EVM, is the ability to delegate execution to external libraries. You can think of this much the same way you think of installing 3rd party libraries in your favorite programming language of choice.

In the EVM you can write a "library" which performs some common functionality such as manipulation of date-time objects much like the `datetime` library in Python. Any other contract may then make use of this code simply by delegating execution to the deployed library address. This has inherent risks that every Ethereum developer should understand fully, but with that risk comes some incredible power and potential.

There currently is no "Standard Library" for the EVM but it is looking very likely that it will be comprised of this type of contract. Slowly, overtime, these library contracts will be written and deployed to the network. There is work being done on using theorem solvers to mathematically prove that a contract satisfies certain properties which opens the door to a "provably correct" standard library.

I know of no other computing environment or packaging system that has these properties. For me, it has been an enlightening subject and I feel like we've only just scratched the surface.


The parallel is totally damn right. eval with an unverified user input.

> _walletLibrary.delegatecall(msg.data)

Dunno how much contracts in the wild have such brilliant feature.


A serious question: are the benefits really worth it? How much overhead would it be to just include the library code directly into the contracts instead (so that the whole thing can be verified as a single black box)?


I think the answer to that question is extremely contextual and going to be very different for different applications. I also think that

I'd like to point out that the idea of including the library code within the contract is untennable at a certain level as contracts currently have an upper limit on size which is determined by the block gas limit. It also doesn't make it any safer because it's still functionally the same as executing external code because it's the same code being executed.


Its not really worth it. Very over complicated. Really they just need to do code/data deduplication on chain somehow and forget about using contracts as libraries in this way.


"It’s going to take a lot of work to develop the training and discipline to treat smart contracts the way that banks treat their ATM software."

https://web.archive.org/web/20160406115607/https://www.bloom...

ATMs are not secure because of their software. They are secure despite their software.

Maybe eth will reach the point where the police will come after people who try heists like this. That seems much harder than coming after someone who stole $30m from a series of ATMs, though.


Nothing was stolen. All I see is a programmer abiding by the contracts.


If a smart contract is also a binding, legal contract, then normal contract law applies - and intent matters here in the real world. Therefore, it's theft.

I am most certainly not a lawyer.


Most likely true. But if intent matters and the smart contract isn't actually the final arbitar, then smart contracts are fatally flawed.

Unless courts recognize the ability to sign away your rights through some kind of disclaimer that makes the smart contract the equivalent of binding arbitration.


In legal terms you'd need to make the argument that the programmer abided by the letter of the contract rather than the spirit of the contract. That might well be a reasonable defence in the case of smart contracts, but it'd need to be tested in a court.


Has a contract been signed in any legal sense?


.. and this wasn't even the first time. And this is all by design.


From Intel's perspective, everything went perfectly.


But now, how can the hacker spend it or transoform to USD? To spend them if on online stuff is rather ok, execpt the fact that the items (if are a phisical objects) needs to be sent to an address. If he's going to transoform them to USD or BTC or whatever they need to use a platform, which asks for ids and co.

so, how can he get rich without getting caught?


Nice try thief! Hey guys I found him!


They already have converted some of the ETH to other coins. There are services out there that are completely anonymous that you can use Tor to access and exchange coins.

The problem that this hacker has is that they need to convert a lot of coins.


As an Ethereum investor, this hack has shaken my belief in Ethereum ever making sense as an ecosystem. Smart contracts which will always be fallible plus irreversible blockchain transactions seems like a peanut butter and tuna fish sandwich.

I moved my money out of Ethereum for now.


Makes note that it takes two occurrences to achieve this result.


Thanks. Just sold 100k.


I'm sort of confused[1] that formal proofs are not mandatory tools in this space. There's some Herculean effort underway[2] to create verified HTTPS stack. The failure mode in that case is maybe, sort of data leakage or server control that might be worth something to someone. In the Etherium case, they just walk away with cash. It takes a sort of hubris (or is it foolishness?) to think you can just be very very careful and it will all work out okay.

[1] Actually, its more schadenfreude, partly with the audacity of the speculator and system market makers, and partly at the mindless waste these proof of work/stake systems require.

[2] https://project-everest.github.io/


> that formal proofs are not mandatory tools in this space

The stakes are extraordinarily low relative to situations where formal proofs are mandatory. For references, the list price of a single new 737 runs in the 50 million range, and the cost of the software for the 737 is amortized across many thousands of planes.

1. That's actual hard money. Real US dollars you can use to buy yachts and houses and avocado toast. Given the level of hype and amount of speculation, the true value of all the ether in the world is obviously considerably less than Ethereum's market cap. The hacker stole $30M 'worth' of ether, not 30M actual dollars

2. The cost of a plane crash is easily 10x the price of the plane, and of course you can't put a price on the lost souls.


> In the end, attacks like this are good for the community.

I'm sorry, but what a bunch of baloney.


I have to expect that some bug like this has surely happened with a traditional bank too, causing them to lose a bunch of money. Humans inevitably write buggy software regardless of the platform. The difference with blockchain-based currencies is that their failures are forced to happen in public. I'd be interested to know what banks do when they discover that something doesn't add up in their ledger. I can't believe that it has never happened and never will.


I'm sure it has happened but at least with banks they have the option of following the chain of the money to wherever/whomever it ends. And with ever more stringent ID requirements to open an account that person should be identifiable. Generally banks will freeze funds if there's a claim of fraud from another bank.

Far from perfect (fake ID, assumes the issue is spotted promptly, etc.) but better in this case.


It happens all the time but banks just call up the counterparty and ask for their money back.


Hmm, so don't most courts consider the spirit of a law/contract as opposed to the exact wording to get around people finding obscure loopholes in the phrasing? That's one area a computer is not going to be forgiving about.

Obviously in this case, reassigning the wallet owner is completely against the spirit of the smart contract. What solutions are there to this? All I can think of is for contract coders to use a language that allows contract constraints to be specified more easily (e.g. "owners cannot be reassigned") and have it verified by the language. Maybe this is a good application of formally verified code but the language being used doesn't seem built with that in mind.


The keep telling me Crypto's are safe.Everybody controls them. I haven't heard of any banks that have been robbed several times this year from these amounts of money. Sounds like me that crypto coins are the easiest hackable sources right now.


> a hacker pulled off the second biggest heist in the history of digital currencies.

This is not accurate... the MtGox hack was ~$100M, Bitfinex ~$60M, the DAO $50M, so this would be the 4th, not 2nd.


"Ethereum is a descendant of the Bitcoin protocol, and improves on Bitcoin’s design"

Misleading statement


Is it possible to track where the money goes from the hackers account onwards? Or is then opaque? How easy will it be for the hacker to move the funds around so it cannot be traced back to the theft?


A transaction can have multiple inputs and multiple outputs. And there are contracts that do the mixing up of transactions to provide privacy to users. So, like counterfeit notes, these funds will eventually be untraceable.


It is, but it turns out exchanges don't actually care. Bitcoins from the Bitfinex hack are slowly being dumped on exchanges, for example. It's like someone rocked up to a bank with a big duffelbag full of dye-stained notes known to have been stolen from another bank, and went "no worries lol".


Well, it's unlikely the coins when straight from the hack accounts to the exchange accounts (they might have, i'm not sure in this case)

The coins just have to go through a single intermediate account for there to be doubt that the hacker still owns them


yeah. Cryptocurrencies are prosecution futures, but only if law enforcement actually cares to do the considerable tedious legwork.


"smart contracts can also do things that normal contracts can’t, such as enforce a set of rules entirely through unbreakable cryptography."

Isn't "unbreakable" a bit of a dirty word in the security community? Is there really such a thing as "unbreakable cryptography"?


"Is there really such a thing as "unbreakable cryptography"?"

Yes. One time pads are unbreakable.

"Even after the aliens from Andromeda land with their massive spaceships and undreamed-of computing power, they will not be able to read the Soviet spy messages encrypted with one-time pads (unless they can also go back in time and get the one-time pads)." (Bruce Schneier, Applied Cryptography)


One could envision that the transportation of one-time pads as the only objects worth shipping between inhabited solar systems. Value per gram could be enormous.


"Our main cargo is a one-time cryptographic pad. The source is Commercial Security at Sjandra Kei; the destination is the certificants' High colony. It was the usual arrangement: We're carrying a one-third xor of the pad. Independent shippers are carrying the others. At the destination, the three parts would be xor'd together. The result could supply a dozen worlds' crypto needs on the Net ..."

- Vernor Vinge, "A Fire upon the Deep"


Thanks for the ref. That's where I got it from. Couldn't remember if it was from "A Fire upon the Deep" or from an Ian Banks Culture series book.


Only if they're really random. See Venona.


Are these the same one time pads that have already been cracked by the NSA after the Soviets reused them?


If you reuse them, then it's not a one time pad any more, is it?

Yes, it's well known that two-time pads are very vulnerable in ways that one time pads are not.


They are still one time pads, just incorrectly used.

Even if the cryptography is sound, you also need to ensure that no user error can happen.


> Isn't "unbreakable" a bit of a dirty word in the security community

"Dirty" is one way to put it, yes. I'd personally use something like "false god" or "blasphemy" :). "Unbreakable" is a naive way of describing cryptographic algorithms, because it preempts conversations about intractability assertions or complexity analysis...modern cryptography accepts as a premise that "unbreakable" is not a reasonable goal, which is why we work by quantifying computational cost.

When I see someone use the phrase, "unbreakable cryptography", I mentally discount their authority to speak about cryptography and become more skeptical (this also applies to people who write things like "bank-grade security" or who tell me "AES-256" when I ask them how they're encrypting data, as if the key size is more important than the block cipher mode or confidentiality/authentication construction).

> Is there really such a thing as "unbreakable cryptography"?

A one-time pad, with the following provisos:

1. It has a truly random seed, not a pseudorandom one;

2. It is at least as long as the plaintext;

3. It is never reused (for the same plaintext, in whole or part).

It's straightforward to see why this guarantees information-theoretic security - you have no way of knowing when you've recovered the correct plaintext. There's nothing to brute-force.

In the security community we don't use one-time pads because we dare not touch the sun: they are extremely difficult to implement correctly, and even if you do implement them correctly you have traded off an inordinate amount of practical usability for a relatively small improvement in information theoretic security.

Asking people to 1) use true randomness to seed keys, 2) generate a new secret key for every message, 3) never reuse the same secret key and 4) keep each secret key securely confidential is extremely prone to error. It's often a fetishized ideal among people who first read about it, but in practice it's just not worth it.


Those are not sufficient conditions for a one-time pad. The entire pad, not just some "seed" has to be random. The pad cannot ever be reused even with a different plaintext. Breaking a one-time pad that's been used twice is not very hard. It's equivalent to recovering two texts which have been XORed together, which is not hard for English.

One time pad systems are used regularly for high-security embassy-to-State Department communications. Since there are also secure couriers between those locations, there's a way to distribute key material. With today's storage densities, carrying key material around is easy.


> Those are not sufficient conditions for a one-time pad. The entire pad, not just some "seed" has to be random.

Well that seems a bit pedantic, but yes, you're right. The difficulty I was focusing on however is the randomness itself, not how far it has to be extended. Ostensibly once you've incorporated a non-deterministic seed (which is necessarily external) into your process, you can extend it to the pad itself. The pad itself will just be a stream of that data, like a non-deterministic stream cipher. I get the impression you're aware of this already though, so I won't belabor it.

> One time pad systems are used regularly for high-security embassy-to-State Department communications. Since there are also secure couriers between those locations, there's a way to distribute key material. With today's storage densities, carrying key material around is easy.

Fair enough, I'll concede they have practical uses in situations where there are couriers and extremely high security requirements. That's about all they're practical for, though :)


I'm not sure I follow this, but if you're "extending" randomness from an externally-provided "seed" of random data, what you're doing is encrypting with a stream cipher, not a one-time pad.

I might be just misunderstanding you though.


Yeah that's a comparison I drew down-thread as well (w/r/t a stream cipher). "Seed" was a poor choice of terminology on my part there - the point I was trying to convey is that you'll need a non-deterministic source, which is necessarily outside of software. I used the term "seed" as a shorthand for that (as if it were a stream cipher), but strictly speaking as you say that's not correct, as you'll be taking the random data directly as a key.

So no, you're not misunderstanding - I just communicated poorly!


I don't understand how this is practical. If you have a highly secure mechanism for distributing the ultimate secret - one-time-pads - why not just distribute the messages in this way?

Is it just the fact that it would take two trips for the courier? Or that someone would need to intercept both communications (pad, ciphertext)?


A big benefit is that you can time-shift the distribution of the secret - you can distribute the one-time pad when it's convenient (e.g. when your submarine is at a home port) and be able to send secure messages over insecure channels at any future time.


Yes, this is essentially half the basis for cryptography, of which the one-time pad is one particularly rigid form. If Alice and Bob wish to communicate, they can do so by first verifying each other in person, or with a trusted courier, and from then on can communicate remotely. Alternatively, they can use public-key cryptography to communicate remotely and securely over an insecure channel without requiring face to face contact or a trusted courier.


An important note: public key cryptography allows secure communication over insecure channels, where an adversary only has the ability to listen in, but not over untrusted channels, where an adversary can actively intercept messages and edit them.

The internet is an untrusted medium, since packet switching requires packets to travel through routers that can edit them at will. (The fabled man in the middle attack) This is the whole point of the certificate issuer public-key infrastructure, where issuer public keys are included in your OS's installation files, a secure communication channel. (If you can't trust your OS, you of course can't trust any communication made with it to be secure anyway)


That's a good note - more succinctly, the key exchange can provide confidentiality, but not authentication.


It's not practical for most cases, but the few very very high-security ones. The pads are distributed beforehand, stored securely and used when a message encrypted to them comes in. So it's just that the message can have OTP security while not taking the time of a courier trip and can be just sent on other somewhat insecure channel.


One thing I've never understood about the one-time pad:

How do you guarantee the third condition? Wouldn't you eventually run into the birthday problem if you sent enough messages?


Yes, so the rule is slightly misstated. Assuming that your messages are all under n bits and you always use an n-length pad, you will reuse the same pad approximately once every 2^n messages. Not coincidentally, 2^n is also the number of possible one-time pads there are, so your adversary gains no information from this fact.


> Not coincidentally, 2^n is also the number of possible one-time pads there are, so your adversary gains no information from this fact.

Yes! And this is what's critical to the success of the one-time pad: you've not just encrypted data, you've encrypted data in such a fashion that (from the attacker's perspective), all plaintexts they recover are equally likely. Cryptanalysis is fundamentally impossible.

The information theory is absolutely groovy, but the application of it is unfortunately impractical.


Formally, the condition isn't "never use a one-time pad with the same key numbers" it's "make sure the key numbers of each pad are statistically independent of each other".

Not that it matters. The sqrt(n) birthday effect isn't sufficient to overcome the exponentially low chance of a one-time pad collision for pads of any substantial size.


> Formally, the condition isn't "never use a one-time pad with the same key numbers" it's "make sure the key numbers of each pad are statistically independent of each other".

And to expand on this - this is why it is imperative that a source of true randomness is used as a seed. Pseudorandomness cannot (by definition) satisfy statistical independence.

If you don't have a source of true randomness, you've just implemented a stream cipher, not a one-time pad.


One-time pad means that you have a limit to how much data you can exchange before the pad is spent - if you send enough messages, then you can't send any more securely until you exchange another one-time pad.

You're not likely to get a collision ever because of the typical sizes of one-time pads - birthday paradox matters if the key length is measured in bytes, but not if it's measured in gigabytes, there isn't enough space/time in our universe to expect a collision.


Use a new one time pad for every message.


Are you suggesting we use the one time pad only one time?

Well if it's that important maybe they should put that right in the name...


Hey, author here. I tried to write this article to be accessible to people with little background in security and cryptography (hence its publication on FreeCodeCamp), and to be friendly to non-developers. I took a few liberties with the crypto explanations (like calling a private key to a "secret password") in the hopes of making things more understandable for a general audience. Definitely didn't use rigorous language in just about anything here. :)


the algorithm may be nigh-on unbreakable, but the implementation can always have flaws. Getting crypto right is hard.


One time pad encryption is unbreakable given integrity of the pad material itself.


And, how do you build one time pad encryption into ethereum?


You can't. Or, well, you can, but it's redundant. One-time pads make sense in the Cold War, Vernam Square era of cryptography. But now that we have the internet and public key cryptography, a one-time pad implemented in Ethereum would be inane and frivolous.

Take Alice and Bob, who want to communicate confidentially. Alice doesn't know Bob personally, so she can't securely communicate the one-time pad to Bob in person. Ethereum implements public-key cryptography, so she uses Bob's public key to send him the one-time pad's key. But now we're at the chicken and egg problem: we've just witnessed secure communication, so why do we want to use a one-time pad in the first place?

Alice and Bob might respond, "so we can have perfect secrecy at some point in the future!" Which...alright, sure, let's go with it. So now to implement the one-time pad in Ethereum, Alice needs to feed a source of true randomness as a seed for a secret key which is as long as the plaintext. This is not only a genuinely hard problem, but it's grossly inefficient to encrypt something using a secret key as long as the plaintext itself. But wait - for every new plaintext, Alice has to do this true random seed song and dance each time to generate a new secret key. And every secret key ever used needs to be kept perfectly secret as well.

You really just don't want to do this. One-time pads barely made sense in pre-modern cryptography; they don't solve any practical problems in modern cryptography, and their demands require steep usability sacrifices that are quite easy to screw up.


My question was more: how do you ensure a system that has true secrecy for its one time pad data when all the source is open?


The code will inevitably need to use a source of true randomness, which will be external to your source code, by definition it can't be a deterministic formula, it needs to use external input from physical devices.


And? You've just moved the problem, you haven't solved it. How do you guarantee that your source is what you think it is? If you can't trust anything outside your source code, then you can't trust anything outside your source code.

If you can't trust, say, a url or an IP address. Then you can't trust those things to host a source of randomness either. Security is only as strong as the weakest link, if you try to obfuscate a weak-link by surrounding it with impressive looking junk, that doesn't make it stronger.


I'm not moving the problem, I'm stating that the problem (as it seems you're stating it) is unsolvable, you simply cannot have a closed crypto system where looking at the source is sufficient to ensure that it's secure.

You need an external source of entropy to generate the key material required for any cryptography. It can't be in your code because any code is fundamentally incapable of doing that. If your source of entropy is compromised, then none of cryptographic systems are safe, not symmetric, not asymmetric, not one-time pads, not anything else.

Yes, you can't trust an url or an IP address - but you should be able to trust your hardware, and that commonly offers some decent sources of entropy. You can also trust yourself - e.g. user-action derived entropy. If you don't trust your hardware, tough luck, get trusted hardware. If your key material isn't generated properly, then your crypto will not be secure.

It doesn't mean that the method is flawed or insecure. All methods are the same in this regard, it simply means that security requires not only secure code, but also other precautions - e.g. secure generation of keys, secure management/storage of keys, secure platform on which to run your code, etc, etc. If you have a secure algorithm, proper implementation, best practices everywhere else, then your system will still be insecure if you fail e.g. to store your keys securely and someone gets them.


Lol. The author really knows how to make click-bait articles. Same guy here: https://www.highstakesdb.com/2375-haseeb-qureshi-admits-to-c...


There's a quote from John Carmack that heavily influences my take on OOP and DRY programming in general.

"A large fraction of the flaws in software development are due to programmers not fully understanding all the possible states their code may execute in." http://www.gamasutra.com/view/news/169296/Indepth_Functional...

As long as ethereum contracts support stateful OO contracts, they are bound to run into these kinds of bugs.


Just like the Hans Christian Andersen story:"The emporer has no clothes"


"There is no avoiding war; it can only be postponed to the advantage of others." -- Niccolo Machiavelli

If he was alive today, perhaps he would have said:

"There is no avoiding professional security audit; it can only be postponed to the advantage of cybercriminals."

Their statement is the biggest joke[0]:

"This body of code continues to have no known security issues."

This reminds me of:

"Beware of bugs in the above code; I have only proved it correct, not tried it." - Donald Knuth

[0] https://blog.ethcore.io/the-multi-sig-hack-a-postmortem/


I know very little of Ethereum aside from the articles that pop up here, but I'm trying to compare this event to my existing currency. I have cash under my bed, i have it in 10+ accounts in financial institutions, and most of it is insured by the FDIC... so I've reduced my risk profile greatly.

Does ethereum/ether allow me offline wallets? Can i have multiple accounts/wallets and easily administrate them? Is any agency insuring this yet? If so, then isn't this also user-error here? Don't allow a wallet of $X size that you can't afford to have disappear?


You can use a securely hidden private key mnemonic (12-word, high entropy phrase) on a piece of paper, along with an offline "airgapped" computer, to sign transactions, then transfer the signed transactions to a device with internet access to publish it to the network.

That's probably the most secure method of managing keys yourself, assuming access to physical security. A good approximation of this solution is the use of a hardware wallet, which keeps the private key behind a secure enclave (USB interface, transaction signing occurs within the enclave)

There's no insurance or anything like that, either privately offered or via government regulation. The crypto market is still immature, so I wouldn't be surprised to see protections emerge in the coming decade. In the meantime, there is no equivalent to a bank for crypto assets—the best practice is currently to manage offline wallets oneself. Certainly be careful, though, user error is a big risk!


What's the fairest distribution of the recovered white-hat funds:

- return them exactly as they were, with the unlucky people completely losing funds

- distribute them back among everyone based on the % of total funds that were in their wallets


Do we have any idea if the wallets that were stolen from were individuals, companies? How angry would you be if you lost millions and there was nothing you can do.


It was three ICOs. They've all issued public statements saying they have enough funds in alternate storage to stay in business.


Maybe I'm wrong, but people seem to view smart contracts as theoretically infallible replacement for normal contracts. They to me are nothing of the sort, just some code that makes certain money transfers and disbursements more efficient than if implemented differently. So, of course there will be technical problems and hacks, just like when regular corporations get hacked in the non crypto world


Criminals stole $40m USD

http://www.telegraph.co.uk/news/2017/04/25/brazilian-bandits...

What does it mean for the dollar?

Answer: Nothing, but people improved their security so it doesn't happen again.


Definitely it seems defensive measures should be built into the programming toolchain of Ethereum. Like it probably shouldn't allow eval at all.

That said, any form of eval should also be a red flag for security. It seems like in this case cost won over security. And that is fundamentally the biggest threat to security.


How did the white hats understood the vulnerability? I don't know anything about ethereum so i'm honestly asking. Is there a public log of the method invocations so they could see the hacker was exploiting that exact vulnerability and decided to replicate it?


Yep, if you saw the attack done it was really easy to replicate it as all transactions are public.

In fact, it's a testament to the poor technical capability of most people involved in Ethereum that the whitehat was even able to do this, in any other environment you'd have had other blackhats clean out the remaining $90m within minutes, all it took was to fire up a web3 console (ethereum's javascript interface) and call the initWallet method with your own address on it.

Then you could drain the contract at will.


The article links to the initWallet() call on etherscan.io


and if there is a group of white-hat hackers supporting and monitoring, how come they didn't find that before and fixed it?


You gotta love the hooded figure with overlay of CSS + HTML snippets. Hackers give me the chills!


I am a programmer and I don't understand Ethereum. Sure I haven't really read up on it but if I don't understand it, how will the common man?

I have little faith in this kind of system. Could anyone here explain to a noob how Eth would be any better than Bitcoin?


Manual code review would have likely helped. A tool like this maybe?

https://ericrafaloff.com/introducing-the-solidity-function-p...


As an aside, every time I see a headline with "Hacker" and an image of a hoodie with binary and mostly dark colour tones, my expectation of the quality of content to follow drops significantly.

Having said that, the actual article is pretty good...


I don't get why the author keeps referring to the stolen ether as "counterfeit". It's not counterfeit, it's just stolen ether that will be reintroduced into the economy just as stolen bills are.


What I'd like to know as a developer- what was the "great" idea with the "call forwarding" in specific contract function?!

What would be the valid use case, why author decided he should put it there beforehand?


When you deploy a contract you pay for every byte of code storage. So they decided to save people a little money by putting some of that code in a library contract that all the wallets would share.


So many Ethereum related posts on front page every day lately. Is this some sort of marketing campaign or the sudden increase is just because of the hack?


It's a hot topic right now just like when Bitcoin was first booming. Although today and yesterday especially so because of this hack.


But Ethereum is not booming. Isn't it a consensus that it is mostly speculative and most of these ICOs are money grabs and no working products ever get released other than prototypes to raise money?

Yes the price has increased by 4000% in couple of months this year but most reasonable people agree it is a pure speculation / gambling.


I'd say that's a matter of opinion, not consensus. Plenty of us have a different opinion, including people from some large corporations in the Enterprise Ethereum Alliance, who say they hope to put applications on the public Ethereum chain after scalability improves.


The world's most expensive security audit...


Only in recent history.

I'm sure you would agree that by this definition any cyberheist can be called an "unsolicited 3rd party security audit".


Would it make sense to introduce some sort of escrow service into smart contracts to prevent such thefts in the future?


And this is reason #457, why I will not use a digital currency. No protection or recourse from fraud or theft.


Again, Gavin Wood did NOT write the change that caused this, he wasn't even the reviewer.


Thanks for pointing this out. I assume because he pushed the fix that he was the developer, my mistake! Have amended the article.


The developer shouldn't have executed arbitrary text. Hopefully we can just fork, blacklist the stolen transactions and pretend this didn't happen.


Don't think it'll happen. From the article:

A hard fork would be impractical–what do you do about all of the transactions that occur downstream? What about the people who innocently traded assets with the attacker? Once the ether they’ve stolen gets laundered and enters general circulation, it’s like counterfeit bills circulating in the economy — it’s easy to stop when it’s all in one briefcase, but once everyone’s potentially holding a counterfeit bill, you can’t really turn back the clock anymore.

Also, a tweet from Vitalik:

https://twitter.com/VitalikButerin/status/887782650026631168


Thus proving that "code is law" is a meaningless slogan.


another hardfork?

ethereum oldskool?


Stories like this make me consider whether programmers that engage in commerce should be forced (yes, by law) into guilds that have rigid journeyman and apprenticeship stages before the programmer gets to touch the production environment. Specialized, official, bonded developer roles need to be established.

Our community cannot continue operating in the hacker mode wherever money is involved.


So now people who are self taught excellent programmers are unemployable without paying a 60,000 tax into the hands of private institutions but morons who graduated from diploma mills in countries with lax educational standards are entirely safe.

I'm also sure that nobody will act to artificially limit the supply of legally employable programmers just to enrich the few at the expense of the rest of us.

I'm also sure that such guilds wont be run by the least talented bureaucrats possible unfit to produce code themselves!

Further I guess we can just cancel open source software.

This is a terrible terrible terrible idea. The cure is worse than the disease.


I don't think anyone is arguing that all computer programmers need to be accredited. The argument being put forward is that if you are deploying software in certain specific fields then your code should be signed off by a certified professional before it is allowed to be perform it's intended function (which in this case is handling financial transactions).

I am an engineer. There are codified regulations that I am required to comply with by law. Hypothetically if I certify the design of a structure and later on I was found to be have been negligent in performing my duties as a practicing professional engineer then Me, the company I work for (or both of us) are up for huge liabilities.

You can't build a $31M Bridge without the design being certified yet you can build software to handle $31M dollars of transactions just fine.

None of this would stop open source contributions. If you want to contribute code to some financial processing software submit your pull request and have the (professionally certified) reviewer sign off on it after doing his job (i.e reviewing it).

Edit: Here's a quote from William LeMessurier it's part of an ethics case study I learnt about at university (http://www.theaiatrust.com/whitepapers/ethics/study.php)

"If you’ve got a license from the State and a certification from the University first and now you’re gonna [sic] use the license to hold yourself out as a professional, you have a responsibility beyond yourself, if you see something that is a social risk...good heavens this thing would kill thousands! You must do something. You must do something"

Now a bug in this particular piece of code isn't going to kill someone but $31M is a lot of money to have stolen. No one in this topic is even thinking of the consequences. It could ruin multiple peoples lives losing that much money. A lot of people just seem to be content with this lawless "wild west" world of programming. Personally I think we should be striving for a higher level of professional and ethical standards.


There is a good likelihood that any substantial software effort by an accredited individual touches on a multitude of software written by less accredited people most of which he has never reviewed some of which nobody even knows who wrote it.

The discretion you desire ought to be enforced by the people who are responsible for that 31 million dollars not a set of standards imposed from on high.

If they fail and lose other peoples money or even lives the court is in the best position to correct this on a case by case basis.

Any set of standards imposed from on high are likely to evolve slowly and work poorly as it is difficult to fully specify the problem without in each case fully using understanding the code, the problem space, and the risks.

Ex a standard codified a few years ago would probably specify safe ways to write c but forbid rust.

We can fully specify safe and proper ways to build bridges because we have been building bridges for thousands of years while software development is less understood and still in Flux.

I don't think we could effectively turn software development into engineering even if this was desirable.


>>> The argument being put forward is that if you are deploying software in certain specific fields then your code should be signed off by a certified professional before it is allowed to be perform it's intended function (which in this case is handling financial transactions).

This is already the case. Try working in aerospace.


That just makes the price of a "programmer" go up. And the normal people responsible for putting together said requirements know that in the end it would just make their IT costs go up, so therefore they don't (which is fine with me)


Darn right, it's costly!

But how else will we rope in foolish devs from doing foolish things like eval() in the context of a user's wallet except by policing our community?

You can expect businesses to do it...


Meant to say can't there, darn phone keyboard...


Or work move to countries without red tape around the job. Unlike masonry, software is easily shipped.


I think we should not require person to be certied rather the code to be certified by a body. I think we already have this for Infra like PCIDSS and there private companies. Now if some one setup a company and work insure for cerified code it will be great

And people should demand for such static analysis like now we do ask https connections

https://www.owasp.org/index.php/Source_Code_Analysis_Tools


What you are proposing:

(1) Is bad economics. In most cases, getting rid of occupational licensing would create wealth. To take law/lawyers as an example, see http://www.econtalk.org/archives/2011/09/winston_on_lawy.htm...

(2) Would have the practical effect of taking away my livelihood and ability to work. Would have radically altered my life, personally, for the worse.


Status quo sounds like it's your thing, which is cool.

I just want to posit that the world doesn't care about what we, the developer community, thinks. All they care about is what we DO. And, if we're going to keep acting like unethical mercenaries, and then something truly tragic happens (like mass deaths) as a result of our mistakes or malice, then your livelihood will be affected anyways.

So, do you want to get ahead of this thing and define the parameters of our reordering? Or, would you like some clueless politicians and bureaucracies to decide our fate?


I think you're vastly underestimating the number of deadly mistakes doctors and lawyers and other such licensed professionals make every day. Just look at Enron!

Maybe such a system would keep out the very worst programmers but I doubt someone hacking on Ethereum smart contracts falls into that bucket anyways.


Are you arguing for self-taught doctors to practice their quackery, then? Shall we accept freelance surgeons having out gall bladder and appendixes with whatever whiskey, x-acto knife, needle and thread they have at-hand?

What exactly are you arguing for here? Obviously, humans are imperfect and corrupt - but you can impose some order and ethics and error correction into any community when you get organized.

OP said one of the creators of Etherium was responsible for the bug, how much more 'expert' can you get? The problem is one of programmer craft, or the lack thereof.


My point is that your suggestion is unlikely to have helped prevent this specific incident or others like it.

A guild or professional association keeps quacks and idiots out, it doesn't solve the problem of experienced competent people occasionally making subtle mistakes.


Ok, you're saying that a guild won't prevent human error, especially in something intricate like software development. But there are actual historical examples that run counter to your claim. Other disciplines DO have error correcting standards and practices that catch and prevent errors from flowing downstream. Architects and accountants for example, have such well-established standards that those standards got codified into laws in most countries. I suspect that you believe that software development is not, or cannot ever be, an engineering discipline for reasons.

Thing is, you might not be able to imagine software development can be treated as an engineering discipline, but that doesn't stop others from trying to. And if lawmakers decide to get involved, then 'trying' suddenly becomes 'doing', whether you think that's proper or not.

Regarding 'subtle mistakes', do you consider performing an eval() on an unvalidated input string in the context of someone else's publicly addressable wallet a subtle mistake?

Check out all of the definitions of 'ethics' in the dictionary and then try to say the developers who wrote the original buggy code and the white hats who did the damage control were acting ethically. How deep does the corruption go? Is Etherium corrupt down to first principles and all its founders morally bankrupt?

One of the things a guild does is codify ethical standards for the group, and that is something all software developers sorely need.

We are, I would argue, the most important group of workers on the planet today. Shouldn't we get our act together and mature as a discipline?


That's already the case. You won't be able to enter without a degree or 10 years of experience.


Depends on the industry. I worked in the games industry with characters that didn't have their high school diploma.

I have a bachelors degree in CS and was working in banking and finance firms with <1 year of experience. No, it wasn't aerospace or quantum physics, but I did have to get cleared by a few 3-letter agencies before I could touch the codebase.

Things haven't changed, programmers are in high demand everywhere.


It is a very interesting thought.

Any Germans care to comment? They have the closest systems, I would think.


What do you mean? I've been working as a developer in Germany for 5 years now, and I'm only now getting a CS degree. There is a vocational training for software developers, bit it's nowhere near required.


Great read. Thanks!




Consider applying for YC's Spring batch! Applications are open till Feb 11.

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

Search: