If you live in a country with a highly functional banking system and no kleptocracy, Bitcoin is probably a bit puzzling unless you have family in Cuba. But it's not puzzling at all for those of us who live somewhere in the middle of the broad spectrum between Switzerland and Somalia, because most places have a little kleptocracy. Argentina is far from being "a failed state," but if you want to send US$500 abroad via non-Bitcoin means it's basically impossible, and the only broadly available savings vehicle is real estate ("ahorrar en ladrillos"), which of course grossly inflates real-estate prices, with a substantial part of the capital city occupied by empty apartments someone bought "as an investment". Historically Argentines have saved by buying dollars but that's limited to US$200 a month now, and then only if you have a non-under-the-table job (about a third of total employment is under the table):
You can see that in September 02019 when this measure was imposed the price of a dollar was AR$63.50; now it's AR$147. So whatever savings you had in pesos in 02019 have lost 57% of their value to peso devaluation.
In 02001 a lot of Argentines had saved dollars in their dollar-denominated bank accounts. This did not preserve their savings through the financial crisis that year; the cash-strapped government limited withdrawals to a trickle, then converted dollar deposits to pesos at a one-to-one rate, then released the exchange-rate peg, at which point peso went overnight from being worth US$1 to being worth US$0.25 before settling at about US$0.31 for the next few years.
You suggest, "alternatives to banks like credit unions where customers—as owners—hold more power," but Credicoop depositors suffered the same two-thirds confiscation of savings as depositors in for-profit banks. And they pay the same 3% tax on bank transactions including checks. That's more than a fast Bitcoin transaction fee of US$15 for transactions over US$500.
But we're not a failed state. There are no gangs of bandits roving the streets in Argentine cities (though there are some pretty bad slums where you'll get robbed if you wander in without knowing anybody). Courts, free public hospitals, and roads continue to function, though there are more potholes than a year ago. Argentine infant mortality is 10 per 1000 live births, down from almost 20 in the late 01990s and the same as the late 01980s in the US; life expectancy at birth is 77 years, worse than Switzerland's 84, but the same as China and Hungary, and better than Saudi or Mexico. (Somalia is 54.)
Most of the world is worse off than Argentina, although not necessarily in such a statistically transparent fashion. About one fourth of the people in the world are unbanked, 51% here in Argentina; even advanced countries like Russia, Hungary, and Uruguay have roughly a quarter of the population unbanked:
And if your family lives in a country like Iran or Venezuela subject to US sanctions, and you live in the US? Good luck sending them an ACH, instant or otherwise! It's well known that Bitcoin is very popular in Venezuela, which kind of is a failed state, so one of the Venezuelan governments is trying to tax Bitcoin remittances at 15%.
Bitcoin handles a few billion dollars per year in such remittances. This might seem like a trivial amount of money to someone in a rich country, but in poor countries, it's enough to keep several million people alive.
Even in the US, it's common for the police to confiscate large amounts of paper currency just because they can ("civil forfeiture"); US bank accounts are probably fine for US$100K but probably somewhat risky for US$10M if the bank thinks you don't seem like the kind of person who ought to have it. US$10M in US$100 bills fits in a box you can wheel around on a dolly, but Bitcoin is a lot more practical. (And of course US$10M in dollar bills loses about US$200k per year to inflation.)
So, Bitcoin doesn't have to be a cypherpunk utopia to be a big improvement on the status quo ante. For those of you living in stable countries where your worries are things like "instant and extremely low-fee ACHs" and "decentralized utopia", this may be very confusing, but try to remember that most of the world lives in places with much more pressing concerns, concerns that Bitcoin helps a lot with. And you may live there too, soon — the loyal subjects of Kaiser Wilhelm in 01913 certainly didn't expect that in 15 years they'd be in the middle of a hyperinflation episode that remains legendary a century later.
Sometimes I feel that it can be a lucrative trap to become invested in a single person, and then accumulate expectations that far outweigh the responsible obligations of any friendship.
As I have gotten older, a pattern that is working much better for me is the campfire model - I just try to keep a metaphorical campfire going, for people traveling through this life to stop and warm themselves upon while I tend it. I cannot know which direction people are traveling from, or to, or how long their journey has been or will be. But all people need to warm their calloused hands and feet, and I can keep this fire with a bed of rosy coals.
Sometimes someone will stop at my fire and warm themselves without my ever having paid attention, but to them it may have meant all the difference in the world. By keeping this obligation in mind, to simply expect people to need a place to sit a spell, I can at least believe I am helping.
The campfire is a nice way for me to remember we're all suffering, that not a one of us is unique to loneliness. Because sometimes that person who sits down at your fire is the person you have been waiting for, and only by making a seat for them were you able to ever meet.
Solidity has far worse problems than not being an advanced research language. Just being a sanely designed normal language would be a big step up. Solidity is so riddled with bizarre design errors it makes PHP 4 look like a work of genius.
A small sampling of the issues:
Everything is 256 bits wide, including the "byte" type. This means that whilst byte[] is valid syntax, it will take up 32x more space than you expect. Storage space is extremely limited in Solidity programs. You should use "bytes" instead which is an actual byte array. The native 256-bit wide primitive type is called "bytes32" but the actual 8-bit wide byte type is called "int8".
Strings. What can we say about this. There is a string type. It is useless. There is no support for string manipulation at all. String concatenation must be done by hand after casting to a byte array. Basics like indexOf() must also be written by hand or implementations copied into your program. To even learn the length of a string you must cast it to a byte array, but see above. In some versions of the Solidity compiler passing an empty string to a function would cause all arguments after that string to be silently corrupted.
There is no garbage collector. Dead allocations are never reclaimed, despite the scarcity of available memory space. There is also no manual memory management.
Solidity looks superficially like an object oriented language. There is a "this" keyword. However there are actually security-critical differences between "this.setX()" and "setX()" that can cause wrong results: https://github.com/ethereum/solidity/issues/583
Numbers. Despite being intended for financial applications like insurance, floating point is not supported. Integer operations can overflow, despite the underlying operation being interpreted and not implemented in hardware. There is no way to do overflow-checked operations: you need constructs like "require((balanceOf[_to] + _value) >= balanceOf[_to]);"
You can return statically sized arrays from functions, but not variably sized arrays.
For loops are completely broken. Solidity is meant to look like JavaScript but the literal 0 type-infers to byte, not int. Therefore "for (var i = 0; i < a.length; i ++) { a[i] = i; }" will enter an infinite loop if a[] is longer than 255 elements, because it will wrap around back to zero. This is despite the underlying VM using 256 bits to store this byte. You are just supposed to know this and write "uint" instead of "var".
Arrays. Array access syntax looks like C or Java, but array declaration syntax is written backwards: int8[][5] creates 5 dynamic arrays of bytes. Dynamically sized arrays work, in theory, but you cannot create multi-dimensional dynamic arrays. Because "string" is a byte array, that means "string[]" does not work.
The compiler is riddled with mis-compilation bugs, many of them security critical. The documentation helpfully includes a list of these bugs .... in JSON. The actual contents of the JSON is of course just strings meant to be read by humans. Here are some summaries of miscompile bugs:
In some situations, the optimizer replaces certain numbers in the code with routines that compute different numbers
Types shorter than 32 bytes are packed together into the same 32 byte storage slot, but storage writes always write 32 bytes. For some types, the higher order bytes were not cleaned properly, which made it sometimes possible to overwrite a variable in storage when writing to another one.
Dynamic allocation of an empty memory array caused an infinite loop and thus an exception
Access to array elements for arrays of types with less than 32 bytes did not correctly clean the higher order bits, causing corruption in other array elements.
As you can see the decision to build a virtual machine with that is natively 256-bit wide led to a huge number of bugs whereby reads or writes randomly corrupt memory.
Solidity/EVM is by far the worst programming environment I have ever encountered. It would be impossible to write even toy programs correctly in this language, yet it is literally called "Solidity" and used to program a financial system that manages hundreds of millions of dollars.
I have intimate personal experience with the FCRA. Sadly I don't have an hour to talk about it at the moment, but ping me any time. Short version: it's one of the most absurdly customer-friendly pieces of legislation in the US, assuming you know how to work it. There exist Internet communities where they basically do nothing but assist each other with using the FCRA to get legitimate debts removed from their credit report, which, when combined with the Fair Debt Collection Practices Act, means you can essentially unilaterally absolve yourself of many debts if the party currently owning it is not on the ball for compliance.
The brief version, with the exact search queries you'll want bracketed: you send a [debt validation letter] under the FCRA to the CRAs. This starts a 30 day clock, during which time they have to get to the reporter and receive evidence from the reporter that you actually own the debt. If that clock expires, the CRAs must remove that tradeline from your report and never reinstate it. Roughly simultaneously with that letter, you send the collection agency a [FDCPA dispute letter], and allege specifically that you have "No recollection of the particulars of the debt" (this stops short of saying "It isn't mine"), request documentation of it, and -- this is the magic part -- remind them that the FDCPA means they have to stop collection activities until they've produced docs for you. Collection activities include responding to inquiries from the CRAs. If the CRA comes back to you with a "We validated the debt with the reporter." prior to you hearing from the reporter directly, you've got documentary evidence of a per-se violation of the FDCPA, which you can use to get the debt discharged and statutory damages (if you sue) or just threaten to do that in return for the reporter agreeing to tell the CRA to delete the tradeline.
No response from the CRA? You watch your mail box like a hawk for the next 30 days. Odds are, you'll get nothing back from the reporter in that timeframe, because most debt collection agencies are poorly organized and can't find the original documentation for the debt in their files quickly enough. Many simply won't have original documentation -- they just have a CSV file from the original lender listing people and amounts.
If you get nothing back from the reporter in 30 days, game over, you win. The CRA is now legally required to delete the tradeline and never put it back. Sometimes you have to send a few pieces of mail to get this to stick. You will probably follow-up on this with a second letter to the reporter, asserting the FDCPA right to not receive any communication from them which is inconvenient, and you'll tell them that all communication is inconvenient. (This letter is sometimes referred to as a [FOAD letter], for eff-off-and-die.) The reporter's only possible choices at that point are to abandon collection attempts entirely or sue you. If they sue you prior to sending validation, that was a very bad move, because that is a per-se FDCPA violation and means your debt will be voided. (That assumes you owe it in the first place. Lots of the people doing these mechanics actually did owe the debt at one point, but are betting that it can't be conveniently demonstrated that they owe the debt.)
If the reporter sends a letter: "Uh, we have you in a CSV file." you wait patiently until day 31 then say "You've failed to produce documentary evidence of this debt under the FDCPA. Accordingly, you're barred from attempting to collect on it. If you dispute that this is how the FDCPA works, meet me in any court of competent jurisdiction because I have the certified mail return receipt from the letter I sent you and every judge in the United States can count to 30." and then you file that with the CRA alleging "This debt on my credit report is invalid." The CRA will get in touch with the debt collection company, have their attempt timeout, and nuke the trade line. You now still technically speaking owe money but you owe it to someone who can't collect on the debt, (licitly [+]) sell it, or report it against your credit.
I just outlined the semi-abusive use of those two laws, but the perfectly legitimate use (for resolving situations like mine, where my credit report was alleging that I owed $X00,000 in debts dating to before I was born) is structurally similar. My dropbox still has 30 PDFs for letters I sent to the 3 CRAs, several banks, and a few debt collection companies disputing the information on my report and taking polite professional notice that there was an easy way out of this predicament for them but that if they weren't willing to play ball on that I was well aware of the mechanics of the hard way.
[+] Owing more to disorganization and incompetence than malice, many debt collection companies will in fact sell debts which they're not longer legally entitled to. This happened to me twice. I sent out two "intent to sue" letters and they fixed the problem within a week.
[Edit: I last did this in 2006 and my recollection on some of the steps I took was faulty, so I've corrected them above and made it a little more flow-charty.]
This is a long read, but it's worth it. The metric can be calculated in FRED[2], and as a predictor of future returns, it outperforms all of the most common stock market valuation metrics, including cyclically-adjusted price-earnings (CAPE) ratio[3]. (Basically, the average investor portfolio allocation to equities versus bonds and cash is inversely correlated with future returns over the long-term. This works better than pure valuation models because it accounts for supply and demand dynamics.)
Dependencies (coupling) is an important concern to address, but it's only 1 of 4 criteria that I consider and it's not the most important one. I try to optimize my code around reducing state, coupling, complexity and code, in that order. I'm willing to add increased coupling if it makes my code more stateless. I'm willing to make it more complex if it reduces coupling. And I'm willing to duplicate code if it makes the code less complex. Only if it doesn't increase state, coupling or complexity do I dedup code.
The reason I put stateless code as the highest priority is it's the easiest to reason about. Stateless logic functions the same whether run normally, in parallel or distributed. It's the easiest to test, since it requires very little setup code. And it's the easiest to scale up, since you just run another copy of it. Once you introduce state, your life gets significantly harder.
I think the reason that novice programmers optimize around code reduction is that it's the easiest of the 4 to spot. The other 3 are much more subtle and subjective and so will require greater experience to spot. But learning those priorities, in that order, has made me a significantly better developer.
I'll restate something that's often misunderstood about democracy.
The use of elections is not to find the "best" leader (for any definition of "best" that you have) but to prevent civil unrest. It offers an alternative to pushing for opinions violently in order to be heard.
For this it needs to offer a credible and legitimate path towards political changes.
Similarly, police do not exist to prevent - or even punish - crime. They exist to prevent vigilante justice because vigilantism is unreliable and destabilizing.
I've been out of startups for a few years now, but it always struck me that there is plenty of room in the cap table for employees, if founders and VCs realize they have to cut back.
If founders and VCs gave a third to half of their companies to employees, instead of crushingly small option pools, this math would almost certainly shift. And the returns wouldn't be much worse for founders or VCs.
> I think we can have a society that rewards people for productive or otherwise socially valuable contributions while also taking care of the poor and those who can’t work.
I find "socially valuable contributions" to be a disturbing phrase.
First, that implies there's some sort of authority - legal or otherwise - that determines "socially valuable."
Second, quite often society is wrong in what "it" values or finds popular.
Finally, I use "wrong" from my point of view. Obviously there are many definitions of "wrong" based on your ethics, morality, religion (or lack thereof), values, and preferences.
It sounds like yet another social credit system.. whoever runs it wins.
The internet has made it more clear that being an early startup employee will be worse in almost all possible cases compared to working at google even when you get to the $1 billion 'unicorn' status.
For example, I was a jr. engineer at a stage A $5 million startup with ~%0.4 of the company in stock options. When it reached its $1 billion valuation 4 years later, my options with dilution were worth x25. But $500k/4 years is $125k/yr, which is pretty close to the stock compensation working at google. But these options were not cash equivalent like google's stock, and I had to drop it all on the floor because of the 90 day window. I lost $500k in compensation because I decided to work at the startup vs. google.
Imagine if your employees had a good amount of savings and could easily afford the $10-20k it costs to pre-exercise their options in your infant stage startup. Then these rules are pretty moot. It takes advantage of people who don't have the money to pre-exercise options, who tend to be younger people.
Also it's unfair, investors can diversify their income sources, while employees cannot.
https://www.ambito.com/finanzas/dolares/cronologia-del-cepo-...
You can see that in September 02019 when this measure was imposed the price of a dollar was AR$63.50; now it's AR$147. So whatever savings you had in pesos in 02019 have lost 57% of their value to peso devaluation.
In 02001 a lot of Argentines had saved dollars in their dollar-denominated bank accounts. This did not preserve their savings through the financial crisis that year; the cash-strapped government limited withdrawals to a trickle, then converted dollar deposits to pesos at a one-to-one rate, then released the exchange-rate peg, at which point peso went overnight from being worth US$1 to being worth US$0.25 before settling at about US$0.31 for the next few years.
You suggest, "alternatives to banks like credit unions where customers—as owners—hold more power," but Credicoop depositors suffered the same two-thirds confiscation of savings as depositors in for-profit banks. And they pay the same 3% tax on bank transactions including checks. That's more than a fast Bitcoin transaction fee of US$15 for transactions over US$500.
But we're not a failed state. There are no gangs of bandits roving the streets in Argentine cities (though there are some pretty bad slums where you'll get robbed if you wander in without knowing anybody). Courts, free public hospitals, and roads continue to function, though there are more potholes than a year ago. Argentine infant mortality is 10 per 1000 live births, down from almost 20 in the late 01990s and the same as the late 01980s in the US; life expectancy at birth is 77 years, worse than Switzerland's 84, but the same as China and Hungary, and better than Saudi or Mexico. (Somalia is 54.)
Most of the world is worse off than Argentina, although not necessarily in such a statistically transparent fashion. About one fourth of the people in the world are unbanked, 51% here in Argentina; even advanced countries like Russia, Hungary, and Uruguay have roughly a quarter of the population unbanked:
https://www.gfmag.com/global-data/economic-data/worlds-most-...
And if your family lives in a country like Iran or Venezuela subject to US sanctions, and you live in the US? Good luck sending them an ACH, instant or otherwise! It's well known that Bitcoin is very popular in Venezuela, which kind of is a failed state, so one of the Venezuelan governments is trying to tax Bitcoin remittances at 15%.
https://archive.fo/ZRXzS
Bitcoin handles a few billion dollars per year in such remittances. This might seem like a trivial amount of money to someone in a rich country, but in poor countries, it's enough to keep several million people alive.
Even in the US, it's common for the police to confiscate large amounts of paper currency just because they can ("civil forfeiture"); US bank accounts are probably fine for US$100K but probably somewhat risky for US$10M if the bank thinks you don't seem like the kind of person who ought to have it. US$10M in US$100 bills fits in a box you can wheel around on a dolly, but Bitcoin is a lot more practical. (And of course US$10M in dollar bills loses about US$200k per year to inflation.)
So, Bitcoin doesn't have to be a cypherpunk utopia to be a big improvement on the status quo ante. For those of you living in stable countries where your worries are things like "instant and extremely low-fee ACHs" and "decentralized utopia", this may be very confusing, but try to remember that most of the world lives in places with much more pressing concerns, concerns that Bitcoin helps a lot with. And you may live there too, soon — the loyal subjects of Kaiser Wilhelm in 01913 certainly didn't expect that in 15 years they'd be in the middle of a hyperinflation episode that remains legendary a century later.