How is blockchain superior than me just creating a git repository on GitHub called "allmoney" and just setting it up such that a commit represents a transaction and the log represents the ledger?
I also don't see how block chains or smart contracts can override reality. Let's say you buy a house using a smart contract, and someone, in real life, comes to you with a gun and says give me your wallet and transfer it to me, or you die. Are we supposed to just accept that? If not, what mechanism will undo the crime and restore the house back to the [rightful] owner?
it just all seems dumb, imo - technology cannot exist in a vacuum, ever.
Git lets you rewrite history. And I can easily modify the files on GitHub to show that actually I own all your money.
Also, I can make a PR that says that Joe gave me 100$. When Joe in fact did not give me 100$, in fact, Joe doesn't even know me. Yet I can still make a PR for that and how would you know to merge it or not?
Also, I can make a PR where I have 0$, but I transfer 10000$ from myself to Barbara. What is there to stop it? You could just go and accept my patch and I just created money that didn't exist.
Another example is I can have 10000$ and make 10 PRs all showing that I am transferring that 10k to a different person. You merge them all, and now with only 10k I managed to transfer 100k.
Etc.
Basically it's just insufficient in many many ways.
Blockchain requires everything to be cryptographically signed. In a blockchain, each dollar is cryptographically accounted for. Each person is cryptographically accounted for. And the whole system is redundant so that if you temper with one repo it doesn't matter, you need to temper with the majority of them.
Edit: And to your other question. If someone forces you to transfer your coins from your wallet to theirs, you got your coins stolen. Currently most cryptocurrency are designed to be anonymous. In that case, you're screwed. But there could be non-anonymous cryptocurrencies. Those would allow to track criminals much more effectively as it be difficult for them to hide the trail of money. Even in the anonymous case though, if there were processes around this, the network could decide okay this transaction was fraudulent, we agree, and the money trail would all be there, so it could choose to correct it, reinstitute you the fund, do charge backs, or whatever else it wants. That would be much harder with real cash, because the cash is gone, even if you say yup your cash was stolen, nobody knows where it is now. With crypto you'd know where it is, and you'd know which wallet stole it from yours. So that's already a little better.
For example, you could imagine that you'd have say 24h to claim a fraudulent transaction, as soon as you do, all stolen funds could be frozen in the entire network for 14 day, where an investigation would take place. Etc. The technology opens up this kind of things.
Not quite true. Git makes it possible to hard fork it’s internal commit tree, and easily move the HEAD marker to your new fork. But it’s obvious to everyone observing the tree that the modification has happened.
Same applies to all normal blockchains. Only difference is that blockchain clients will ignore that fork if the correct proof work hasn’t been provided, but you could add that to a git commit if you really wanted too.
The git commit tree is cryptographically signed, every commit is identified by its cryptographic hash, and that has is taken from the content of the commit, which includes the hash of the parent commits. So you can cryptographically prove that a specific git tree is properly linked together, and the each individual commit hasn’t been tampered with.
The ability to detect tampered commits, and observe forks is all you really need for a blockchain. Everything else is just deciding how you determine which branch is the “real” branch. But you don’t need proof of work for that, it could be enforced by courts or governments the old fashioned way.
As for your PR stuff. You can fix that by publishing an agreed set of valid commit types, which limits the types of modifications that are allowable. Then when validating a tree, you ignore commits that don’t meet that specification (just like more traditional blockchains do).
Ultimately the only novel thing blockchains bring to the table is proof of work algorithms etc which allow for supposedly decentralised trust.
But decentralised trust doesn’t really exist when dealing with physical assets. At the end of the day ownership is determined by your ability to physically defend your assets, or ability to convince the state to defend them on your behalf. So if the state says you don’t own your house (and the courts agree), then the content of your decentralised blockchain is irrelevant because it won’t stop the police from forcibly evicting you.
I did assume that people meant a decentralized distributed ledger when saying blockchain. In that regard, git is lacking replication, consensus and validation, all of which are key to a decentralized distributed ledger.
Git has some of the properties you'd want, but not all, could you implement more things on top of git to create a blockchain, possibly yes, but that doesn't make git a blockchain.
I like the wikipedia qualification for this:
> Logically, a blockchain can be seen as consisting of several layers:[21]
> infrastructure (hardware) networking (node discovery, information propagation and verification)
> consensus (proof of work, proof of stake)
> data (blocks, transactions)
> application (smart contracts/dApps, if applicable)
Git is a distributed version control system, by design and definition it's decentralized.
Lacks replication? What do you think the git clone and fetch commands do?
Validation is easily turned on, you can tell git to traverse the tree it pulls and make sure it's cryptographic integrity is upheld, that just a config flag.
Consensus is that "hard" one, but even that has already been solved on community-by-community basis. For the Linux kernel the community consensus is that Linus git repo is truth, but that can easily be changed if the community wanted to.
Certainly you need a few extra bits and bobs to build a proper cryptocurrency on top of git. But all the basics are there, and for many applications a git repository would be a perfect substitute for blockchain.
Is this actually a serious question? Do you think there is no point to PayPal, or do you think your GitHub repo is an equivalent replacement? Is forwarding an email to a bunch of people equal to twitter?
The point of cryptocurrency and smart contracts from a technology perspective is that it is distributed, decentralized/p2p, and has immutable atomic operations. There were lots of early cryptocurrencies and lots of early ledgers. World of Worldcraft gold is a a digital currency if you want to call it one.
What bitcoin solved was decentralized atomic operations (double spend). That's pretty much it. Whether or not you need that is open for debate, but points like you're making are ridiculous.
yeah, I am serious. git is already distributed and decentralized. you can also enable immutable atomic operations. it's also optionally transparent like a blockchain.
in practice what's the difference? what can you do with a blockchain that you couldn't do with a repo?
Settle positions between two mutually non cooperating parties. Your github solution doesn't consider that many non cooperating parties may want to do conflicting things on chain and you need a trustless way to resolve those conflicts. First writer wins to a centralized database at github is not an acceptable settlement method for billion dollar transactions.
EDIT: A blockchain is not just about keeping a history, it's also about maintaining liveness of the chain and preventing censorship even when many non cooperating parties are involved with conflicting incentives.
you don't need a trustless way - the two mutually non cooperating parties could fork the repo, reconcile separately using traditional git tools and then have the new commit(s), representing the conflict, merged into the main branch.
this is literally already what happens with software development now.
This is how I view the handling of the "well what about complex transactions..." game. You can create a totally separate branch to process that complex beast and then attempt to merge it back into the main. If there is a merge conflict (someone debited/credited the account line between branch & merge operation), the transaction would be aborted. Rebasing of transactions on top of the main branch would be possible and the semantics of this even make sense for real world use cases - "We attempted to reconcile your transaction into the main flow, but there was a change in the circumstances of the various basis accounts. Can you rebase your transactions on these circumstances and resubmit?" As part of that rebase operation, you would re-run your biz constraints on the complex transaction and then resubmit if you could still satisfy them all.
Depending on how you use and understand git for software, it is either a hauntingly-similar facsimile of any arbitrary blockchain tech today, or a completely alien technology with no practical relationship to blockchain whatsoever.
There also seems to be some notion that the time domain must flow in a continuous way. The time domain in git is discrete, but this does not violate any of the semantics. Just hypothetical processes around them.
these are transactions with extremely high value and often extremely urgent and not possible to merge together - e.g. the both liquidate the same unhealthy loan position (could be worth ~$10m+)
the whole point is it's not remotely easy to just "reconcile separately" when you have two mutually exclusive financial operations - these are not code changes made by mutually cooperating developers happy to change their code to resolve merge conflicts, they are actively fighting against each other
edit: this also point out how having a centralized entity decide the ordering of transactions is a horrible idea - sequencing is worth enormous amounts of money and you could not be trusted to resolve transactions in a way that is sometimes against your interests but in the interest of other participants in the network
outside of trivial transfer transactions there are much more complicated things you can do with smart contracts such as decentralized lending and decentralized exchange of assets
these are more like arbitrary atomic changes to on chain state that can affect many wallets and different contracts (and depend on the existing state) rather than just a transfer from my wallet to another address, which can be reordered freely
see protocols such as uniswap, compound, aave, synthetix, sushiswap, liquity, etc.
yes, decentralized. That's why you were using Github? (i'm going to completely leave out issues such timings of updates in the repo, failed nodes, etc)
the groundbreaking innovation when it comes to blockchain is distributed trust. you don't have one entity that decides what happens in case there is disagreement. Everyone, following the same rules, reach the same conclusion.
In practice the transactions you perform on the blockchain have value in USD whereas the transactions on your equally-technically-sophisticated git repo have no value at all. So there is no reason for the average person to choose your repo over existing blockchains.
Do you think there is no point to PayPal, or do you think your GitHub repo is an equivalent replacement? Is forwarding an email to a bunch of people equal to twitter?
Yes, and yes.
Paypal is superior to a github repo, but that doesn't mean they can't do the same job. Twitter is superior to an email chain, in most situations, but that doesn't mean it can't do the same job.
Concrete is superior to wood, that doesn't mean you cannot build houses out of wood. You could theoretically build a payments system on top of github, it might not be as efficient but it'll work.
Crypto does not override reality as much as it creates new pockets for reality to exist within. Want to create a group project that splits funds with people in various parts of the world? Crypto might work well for that.
To partially address your question about the github "allmoney" repository, some people already have a similar system called Hawala. People who make that system need to have networks of trust set up.
I actually use this analogy in my own thinking. I think there are for sure similarities although I say this without having read any crypto white papers.
In my mind at least, blockchain is probably a stricter subset of the git feature set (no git push --force, only git commit -a -m is allowed, and probably a much more strict process to merge PRs to the master branch). There's probably a built in verification and mirroring aspect as well.
In my mind, blockchain is a very strict, application specific implementation of git for finance.
> How is blockchain superior than me just creating a git repository on GitHub called "allmoney" and just setting it up such that a commit represents a transaction and the log represents the ledger?
Blockchains are designed in such a way that each new block contains information from the previous block. Changing a single transaction in the past on a blockchain requires doing all the work to make each subsequent block conform to the rules, something which is designed to be prohibitively expensive to do by generating unlikely random hashes with special properties. Even if someone decided to do this anyway, the protocol says that in the case of competing chains, go with the chain that has the most work put into it. So it's just not feasible for someone to rewrite history in a healthy chain with many nodes validating/mining blocks; they just can't catch up, and nobody will trust their chain.
Git commits are designed around the idea that they can be rearranged relatively freely, and rearrangements are cheap, so there's no good criteria for trusting the git history that has the most work done with it.
This is more a social convention than a technical limitation. Both Git and blockchains use Merkle trees to describe a linear history, and both allow rewriting history (via "git rebase" for the former and forking + the manual equivalent of a rebase for the latter). Many hosted Git repos disallow rewriting history on the central branch (i.e., they do not permit force-pushing to the main/master branch).
I think you have it backwards. On git it is a social convention, and when it's a technical one it's only because some singular 3rd party (e.g. Github) has made it this way. e.g. an employee at GH certainly can rewrite history on the central branch of your repo.
I don't see how it's not true for a distributed blockchain. People have forked the Ethereum and Bitcoin blockchains, and individuals chose whether to follow the fork or what they believed to be the original, uncorrupted version. Technically, anyone can fork a blockchain; socially and due to the governance processes of the blockchain's user community, this is difficult to pull off.
yes, and when it is modified the hash changes - it would be obvious it was modified. how are you suggesting they do this in a way that is not detectable?
I'm not really following you. in this scenario, the source of the truth, is the repo, not necessarily the repo on GitHub. GitHub is just hosting the repo. in your attack situation, since it's trivial to see it was changed, you would just push over the verifiably correct repo and switch hosting providers.
Secure or not you still have two blockchains and people have to decide which one they prefer. Do you understand there have been bitcoin and ethereum forks where exactly that has happened?
Yeah so like you've just rediscovered proof of work. If a bunch of people clone it, who can say which repo is the real repo? Well you burn a bunch of electricity in a provable way to vote for a repo. The repo with the most burned electricity is the real repo.
> Yeah so like you've just rediscovered proof of work. If a bunch of people clone it, who can say which repo is the real repo? Well you burn a bunch of electricity in a provable way to vote for a repo. The repo with the most burned electricity is the real repo.
what? no, the original repo is the real repo. my point is, is that the transparency makes it impossible for you to not trust me/GitHub.
why wouldn't you trust? you can see nothing was altered yourself - and if it is altered, the issue isn't trust anymore, I've simply committed fraud and you can use the existing legal system to punish me.
this is the same reason you would trust open source software installed on your machine, said machine that presumably has access to your environment/browser/etc which could contain a virus to take your existing fiat money today.
The central authority (here, Github or the repo owner) can rewrite history by rebasing and then force pushing. The only way you can detect that as a third party is by cloning the repo and periodically pulling to make sure the history of the main/master branch has not been altered.
If it has been altered, how can you prove that you didn't just rewrite history locally and then make a spurious claim? You would need others with local copies to vote on which history was legitimate.
if one were to actually implement what I'm describing, the transactions would need to be signed by the participating parties, so it wouldn't be possible to do what you're describing anyway.
How can you know nothing was altered, even if you stay in constant sync with the git repo, if github wanted they could selectively send different copies to different people. The entire point is that it's a trustless system where malicious actors get drowned out by others, especially if they're uncoordinated.
So in case you get mismatches, you can then have a bunch of humans figure out what happened and how to recover from it, and if necessary, involve a court system to settle disputes based on the evidence that exists.
This type of human resolution is needed even in blockchain systems: people will try and fork, people will try to launch 51% attacks, software will have bugs. In the end, a blockchain is a bunch of bits. People believing it and acting based on it is what matters.
Then what happens when your comparison fails. There's no consensus mechanism. But then can't everyone just start using a fork from the last time you all agreed (ignoring that coming to a consensus on where to fork would pretty much be impossible)? Well since github is hosting that git repo, and they're the malicious actor, they just alter that as well. You could take them to court, but this would take a huge amount of time. Effectively if you have a central authority you gain nothing from a public ledger because you have to trust them in the first place. Maybe it makes it quicker to find out that fraud has been committed, but the individual(s) who suffered from it will probably be suing anyhow.
that's not really possible - presumably if someone were implementing what I was describing they'd have it so all transactions are signed by the participants. they wouldn't have the private key(s) so, well, it's impossible.
How is blockchain superior than me just creating a git repository on GitHub called "allmoney" and just setting it up such that a commit represents a transaction and the log represents the ledger?
I also don't see how block chains or smart contracts can override reality. Let's say you buy a house using a smart contract, and someone, in real life, comes to you with a gun and says give me your wallet and transfer it to me, or you die. Are we supposed to just accept that? If not, what mechanism will undo the crime and restore the house back to the [rightful] owner?
it just all seems dumb, imo - technology cannot exist in a vacuum, ever.