I'm certain there is something I am missing... Can I, if I was so inclined, create a wallet which behaved as I wish? What is to stop me from generating a transaction to send one BTC to an address, then, a day or a week or a month later, after that transaction is verified and in the blockchain, send another transaction to another address using the same BTC? Seems like the only way to verify whether someone actually has the coins available is to go through the entire blockchain and see how much they have received and sent.
@binance: 📚Double Spending Explained - @BinanceAcademy #Bitcoin is designed to prevent double-spending attacks, at least when the protocol is used as expected. 3 popular methods for performing a double-spend: ⚔️51% attacks ⚔️Race attacks ⚔️Finney attacks ⬇️ https://t.co/8HaXcSLYQa
@binance: What Is Proof of Work (PoW)? Proof of Work was the original solution to the double-spend problem and has proven to be reliable and secure. #Bitcoin proved that we don’t need centralized entities to prevent the same funds from being spent twice. More ⬇️ https://t.co/2unf5rKtX7
Don't understand how the "voting" system works in correlation to the mining.
This may sound really stupid because Im just now learning about bitcoin but what I learned was that basically bitcoin prevents double spend attacks by having every node have a copy of the database and then all the nodes kind of "vote" on whether the transaction seems valid or not and whether to accept it into a block. Ok. Makes sense. But when it comes to add a block to the blockchain, cant someone mine a faulty block? Or are there no such things as faulty blocks? (blocks with transactions that shouldnt have been approved). Pretty confused, would be awesome if someone could help me out.
Question about how does the bitcoin network prevent double-spending.
It is my first time started learning how do bitcoin transactions happen under the hood, and all the technology behind it. So, I come across this double-spending thing and how does the network prevent it. Basically, if I send the same 1BTC I have in my wallet to separate bitcoin addresses, one after another, only one transaction get confirmed (the first transaction most likely) , and the other one will be recognized as invalid. So, my question is how the network (or miners) confirm that a particular transaction is invalid(1BTC has already been spent)/valid(1BTC has not been spent), and according to what factors? I know the technology behind the blockchain, and more specifically how transactions get added inside blocks and the proof-of-work miners do to include blocks into the blockchain. WHAT I DON'T UNDERSTAND IS HOW THE NETWORK DETERMINE A CERTAIN TRANSACTION IS VALID OR NOT? It'd be really great if one can explain it to me more clearly, so that I could understand the whole process, without having any doubts about anything.
(explainlikeimfive) : How the Bitcoin Block Chain Works (part 1)
Bitcoin was invented to be an electronic kind of cash, and so it should act like it. But, it needs to work without a grownup telling everyone how to play with their bitcoin. Imagine, if the grownup is a jerk they might do things with your bitcoins that you wouldn't like. That's why Bitcoin was designed the way it was. What is a block? A block is a group of a bunch of numbers that keep track of really important info so Bitcoin works the way it should. The most important stuff it contains is who sent bitcoins to who and how much they sent. What is a hash? There are a lot of cool things in math that some really smart people figured out. They found out that if you take a bunch of numbers, you can mash them all together and get one really long number to come out. This number can be anywhere from 0 to a really big number. That really long number is called a hash. Now, there's a lot of really complicated math to get that number, and it's really boring how it works, but what is cool is how the numbers come out. You can't tell how big the number is going to be until you do the math, and if you do all the math, and then give your buddy the hash, he can't figure out what numbers you started with, unless he tries for a very long time and by the time he's done he'll have a big, bushy beard. And luckily for us, the math is really easy for computers. They can do it all day and never get tired or sore fingers from showing too much work. Also, since a block is just a bunch of numbers, you can actually hash the block. I know it sounds really complicated but it's as easy as squishing a big potato, to a computer. This is explained further in part 2. What is the block chain? The very first block is a block made a long time ago when Bitcoin was first made. Mr. Satoshi made it himself. Now, every time someone finds a new block, their computer yells it out really loud so that everyone else can hear. And then those computers tell their neigbors, and so on until everyone's computer knows about that block. That process is called broadcasting. Now, every time this happens, we are adding a new block onto the end of the block chain. Now, it's possible for someone to make a new block to be added, but the news doesn't spread very fast. Maybe someone else finds a block that follows the same one. Now, we have what is called a branch in the chain. Users who play by the rules will work on the first branch they hear about, but keep any other ones as backup in case it ends up becoming longer. What is double-spending? Have you ever watched a cartoon or movie and see a bad guy tie a string to a quarter, put it into a vending machine, buy a drink, and pull the quarter back out? That's a kind of double-spending. It's really bad but since greedy people would really like to do it, Bitcoin has to be made so that it can't happen. But bitcoins are stored on your computer, which makes it really easy to double-spend. Imagine if all of your buddies wanted to give you a carton of chocolate milk at lunch if you sent them the new Justin Bieber album that your mom bought you. You wouldn't send them the songs and delete them from your computer! You would just copy them, and if you copied them to all of your friends, you would have a lot of chocolate milk! It's a good deal, but it's double-spending so it's not fair. Bitcoins are the same way, and they are designed to make it really hard for bad guys to double-spend. How does Bitcoin prevent double-spending? The block chain is really important to preventing double-spending. Let's say a bad guy pays you five bitcoins for your favorite pokemon game. Then, let's say Satoshi finds a block, which has a lot of stuff in it, including a record saying you got 5 bitcoins from the bad guy. Now, here is where the bad guy gets to work. He's going to start from the block just before Satoshi's new block and then look for the next one. He's going to include everyone else's trade (which we can call a transaction) except for the one saying he paid you, and instead put in one saying he paid someone else those bitcoins. (He would probably send them to an extra address he has). If he has a really fast computer, he might be lucky enough to do it and make his branch longer than the one where everyone is playing fair. Now, by the rules of the game, if his branch gets longer, everyone is supposed to switch to his branch. Suddenly, you don't have the 5 bitcoins he gave you, and he has them back. So what people do is they let a certain number of blocks get found before they treat the trade as complete, or confirmed. This is why MtRed only pays out after 120 blocks of confirmation. They don't want to give you your bitcoins right away because you might be a bad guy who tries to go back and undoes it. But that is just for coins that are already made. People are stricter on coins you get from making a block. In fact, if you make a block, nobody will let you spend your coins until 100 blocks confirm yours. Edit: Part 2 Edit2: Fixed a few errors. Thanks, Theymos.
Interesting paper: "Investigation of the Potential for Using the Bitcoin Blockchain as the World's Primary Infrastructure for Internet Commerce". Talks about huge blocks, "Fast Payment Networks"/0-conf double spend prevention, and "clustered" nodes consisting of multiple Nvidia + Xeon phi machines.
Nchain paper: "Investigation of the Potential for Using the Bitcoin Blockchain as the World's Primary Infrastructure for Internet Commerce". Talks about huge blocks, 0-conf double spend prevention, parallelization of "clustered" nodes consisting of multiple Nvidia + Xeon phi machines, and more.
Preventing double-spends is an "embarrassingly parallel" massive search problem - like Google, [email protected], [email protected], or PrimeGrid. BUIP024 "address sharding" is similar to Google's MapReduce & Berkeley's BOINC grid computing - "divide-and-conquer" providing unlimited on-chain scaling for Bitcoin.
TL;DR: Like all other successful projects involving "embarrassingly parallel" search problems in massive search spaces, Bitcoin can and should - and inevitably will - move to a distributed computing paradigm based on successful "sharding" architectures such as Google Search (based on Google's MapReduce algorithm), or [email protected], [email protected], or PrimeGrid (based on Berkeley's BOINC grid computing architecture) - which use simple mathematical "decompose" and "recompose" operations to break big problems into tiny pieces, providing virtually unlimited scaling (plus fault tolerance) at the logical / software level, on top of possibly severely limited (and faulty) resources at the physical / hardware level. The discredited "heavy" (and over-complicated) design philosophy of centralized "legacy" dev teams such as Core / Blockstream (requiring every single node to download, store and verify the massively growing blockchain, and pinning their hopes on non-existent off-chain vaporware such as the so-called "Lightning Network" which has no mathematical definition and is missing crucial components such as decentralized routing) is doomed to failure, and will be out-competed by simpler on-chain "lightweight" distributed approaches such as distributed trustless Merkle trees or BUIP024's "Address Sharding" emerging from independent devs such as u/thezerg1 (involved with Bitcoin Unlimited). No one in their right mind would expect Google's vast search engine to fit entirely on a Raspberry Pi behind a crappy Internet connection - and no one in their right mind should expect Bitcoin's vast financial network to fit entirely on a Raspberry Pi behind a crappy Internet connection either. Any "normal" (ie, competent) company with $76 million to spend could provide virtually unlimited on-chain scaling for Bitcoin in a matter of months - simply by working with devs who would just go ahead and apply the existing obvious mature successful tried-and-true "recipes" for solving "embarrassingly parallel" search problems in massive search spaces, based on standard DISTRIBUTED COMPUTING approaches like Google Search (based on Google's MapReduce algorithm), or [email protected], [email protected], or PrimeGrid (based on Berkeley's BOINC grid computing architecture). The fact that Blockstream / Core devs refuse to consider any standard DISTRIBUTED COMPUTING approaches just proves that they're "embarrassingly stupid" - and the only way Bitcoin will succeed is by routing around their damage. Proven, mature sharding architectures like the ones powering Google Search, [email protected], [email protected], or PrimeGrid will allow Bitcoin to achieve virtually unlimited on-chain scaling, with minimal disruption to the existing Bitcoin network topology and mining and wallet software. Longer Summary: People who argue that "Bitcoin can't scale" - because it involves major physical / hardware requirements (lots of processing power, upload bandwidth, storage space) - are at best simply misinformed or incompetent - or at worst outright lying to you. Bitcoin mainly involves searching the blockchain to prevent double-spends - and so it is similar to many other projects involving "embarrassingly parallel" searching in massive search spaces - like Google Search, [email protected], [email protected], or PrimeGrid. But there's a big difference between those long-running wildly successful massively distributed infinitely scalable parallel computing projects, and Bitcoin. Those other projects do their data storage and processing across a distributed network. But Bitcoin (under the misguided "leadership" of Core / Blockstream devs) instists on a fatally flawed design philosophy where every individual node must be able to download, store and verify the system's entire data structure. And it's even wore than that - they want to let the least powerful nodes in the system dictate the resource requirements for everyone else. Meanwhile, those other projects are all based on some kind of "distributed computing" involving "sharding". They achieve massive scaling by adding a virtually unlimited (and fault-tolerant) logical / software layer on top of the underlying resource-constrained / limited physical / hardware layer - using approaches like Google's MapReduce algorithm or Berkeley's Open Infrastructure for Network Computing (BOINC) grid computing architecture. This shows that it is a fundamental error to continue insisting on viewing an individual Bitcoin "node" as the fundamental "unit" of the Bitcoin network. Coordinated distributed pools already exist for mining the blockchain - and eventually coordinated distributed trustless architectures will also exist for verifying and querying it. Any architecture or design philosophy where a single "node" is expected to be forever responsible for storing or verifying the entire blockchain is the wrong approach, and is doomed to failure. The most well-known example of this doomed approach is Blockstream / Core's "roadmap" - which is based on two disastrously erroneous design requirements:
Core / Blockstream support convoluted, incomplete off-chain scaling approaches such as the so-called "Lightning Network" - which lacks a mathematical foundation, and also has some serious gaps (eg, no solution for decentralized routing).
Instead, the future of Bitcoin will inevitably be based on unlimited on-chain scaling, where all of Bitcoin's existing algorithms and data structures and networking are essentially preserved unchanged / as-is - but they are distributed at the logical / software level using sharding approaches such as u/thezerg1's BUIP024 or distributed trustless Merkle trees. These kinds of sharding architectures will allow individual nodes to use a minimum of physical resources to access a maximum of logical storage and processing resources across a distributed network with virtually unlimited on-chain scaling - where every node will be able to use and verify the entire blockchain without having to download and store the whole thing - just like Google Search, [email protected], [email protected], or PrimeGrid and other successful distributed sharding-based projects have already been successfully doing for years. Details: Sharding, which has been so successful in many other areas, is a topic that keeps resurfacing in various shapes and forms among independent Bitcoin developers. The highly successful track record of sharding architectures on other projects involving "embarrassingly parallel" massive search problems (harnessing resource-constrained machines at the physical level into a distributed network at the logical level, in order to provide fault tolerance and virtually unlimited scaling searching for web pages, interstellar radio signals, protein sequences, or prime numbers in massive search spaces up to hundreds of terabytes in size) provides convincing evidence that sharding architectures will also work for Bitcoin (which also requires virtually unlimited on-chain scaling, searching the ever-expanding blockchain for previous "spends" from an existing address, before appending a new transaction from this address to the blockchain). Below are some links involving proposals for sharding Bitcoin, plus more discussion and related examples.
[Brainstorming] "Let's Fork Smarter, Not Harder"? Can we find some natural way(s) of making the scaling problem "embarrassingly parallel", perhaps introducing some hierarchical (tree) structures or some natural "sharding" at the level of the network and/or the mempool and/or the blockchain?
"Braiding the Blockchain" (32 min + Q&A): We can't remove all sources of latency. We can redesign the "chain" to tolerate multiple simultaneous writers. Let miners mine and validate at the same time. Ideal block time / size / difficulty can become emergent per-node properties of the network topology
https://np.reddit.com/btc/comments/4su1gf/braiding_the_blockchain_32_min_qa_we_cant_remove/ Some kind of sharding - perhaps based on address sharding as in BUIP024, or based on distributed trustless Merkle trees as proposed earlier by u/thezerg1 - is very likely to turn out to be the simplest, and safest approach towards massive on-chain scaling. A thought experiment showing that we already have most of the ingredients for a kind of simplistic "instant sharding" A simplistic thought experiment can be used to illustrate how easy it could be to do sharding - with almost no changes to the existing Bitcoin system. Recall that Bitcoin addresses and keys are composed from an alphabet of 58 characters. So, in this simplified thought experiment, we will outline a way to add a kind of "instant sharding" within the existing system - by using the last character of each address in order to assign that address to one of 58 shards. (Maybe you can already see where this is going...) Similar to vanity address generation, a user who wants to receive Bitcoins would be required to generate 58 different receiving addresses (each ending with a different character) - and, similarly, miners could be required to pick one of the 58 shards to mine on. Then, when a user wanted to send money, they would have to look at the last character of their "send from" address - and also select a "send to" address ending in the same character - and presto! we already have a kind of simplistic "instant sharding". (And note that this part of the thought experiment would require only the "softest" kind of soft fork: indeed, we haven't changed any of the code at all, but instead we simply adopted a new convention by agreement, while using the existing code.) Of course, this simplistic "instant sharding" example would still need a few more features in order to be complete - but they'd all be fairly straightforward to provide:
A transaction can actually send from multiple addresses, to multiple addresses - so the approach of simply looking at the final character of a single (receive) address would not be enough to instantly assign a transaction to a particular shard. But a slightly more sophisticated decision criterion could easily be developed - and computed using code - to assign every transaction to a particular shard, based on the "from" and "to" addresses in the transaction. The basic concept from the "simplistic" example would remain the same, sharding the network based on some characteristic of transactions.
If we had 58 shards, then the mining reward would have to be decreased to 1/58 of what it currently is - and also the mining hash power on each of the shards would end up being roughly 1/58 of what it is now. In general, many people might agree that decreased mining rewards would actually be a good thing (spreading out mining rewards among more people, instead of the current problems where mining is done by about 8 entities). Also, network hashing power has been growing insanely for years, so we probably have way more than enough needed to secure the network - after all, Bitcoin was secure back when network hash power was 1/58 of what it is now.
This simplistic example does not handle cases where you need to do "cross-shard" transactions. But it should be feasible to implement such a thing. The various proposals from u/thezerg1 such as BUIP024 do deal with "cross-shard" transactions.
(Also, the fact that a simplified address-based sharding mechanics can be outlined in just a few paragraphs as shown here suggests that this might be "simple and understandable enough to actually work" - unlike something such as the so-called "Lightning Network", which is actually just a catchy-sounding name with no clearly defined mechanics or mathematics behind it.) Addresses are plentiful, and can be generated locally, and you can generate addresses satisfying a certain pattern (eg ending in a certain character) the same way people can already generate vanity addresses. So imposing a "convention" where the "send" and "receive" address would have to end in the same character (and where the miner has to only mine transactions in that shard) - would be easy to understand and do. Similarly, the earlier solution proposed by u/thezerg1, involving distributed trustless Merkle trees, is easy to understand: you'd just be distributing the Merkle tree across multiple nodes, while still preserving its immutablity guarantees. Such approaches don't really change much about the actual system itself. They preserve the existing system, and just split its data structures into multiple pieces, distributed across the network. As long as we have the appropriate operators for decomposing and recomposing the pieces, then everything should work the same - but more efficiently, with unlimited on-chain scaling, and much lower resource requirements. The examples below show how these kinds of "sharding" approaches have already been implemented successfully in many other systems. Massive search is already efficiently performed with virtually unlimited scaling using divide-and-conquer / decompose-and-recompose approaches such as MapReduce and BOINC. Every time you do a Google search, you're using Google's MapReduce algorithm to solve an embarrassingly parallel problem. And distributed computing grids using the Berkeley Open Infrastructure for Network Computing (BOINC) are constantly setting new records searching for protein combinations, prime numbers, or radio signals from possible intelligent life in the universe. We all use Google to search hundreds of terabytes of data on the web and get results in a fraction of a second - using cheap "commodity boxes" on the server side, and possibly using limited bandwidth on the client side - with fault tolerance to handle crashing servers and dropped connections. Other examples are [email protected], [email protected] and PrimeGrid - involving searching massive search spaces for protein sequences, interstellar radio signals, or prime numbers hundreds of thousands of digits long. Each of these examples uses sharding to decompose a giant search space into smaller sub-spaces which are searched separately in parallel and then the resulting (sub-)solutions are recomposed to provide the overall search results. It seems obvious to apply this tactic to Bitcoin - searching the blockchain for existing transactions involving a "send" from an address, before appending a new "send" transaction from that address to the blockchain. Some people might object that those systems are different from Bitcoin. But we should remember that preventing double-spends (the main thing that the Bitcoin does) is, after all, an embarrassingly parallel massive search problem - and all of these other systems also involve embarrassingly parallel massive search problems. The mathematics of Google's MapReduce and Berkeley's BOINC is simple, elegant, powerful - and provably correct. Google's MapReduce and Berkeley's BOINC have demonstrated that in order to provide massive scaling for efficient searching of massive search spaces, all you need is...
an appropriate "decompose" operation,
an appropriate "recompose" operation,
the necessary coordination mechanisms
...in order to distribute a single problem across multiple, cheap, fault-tolerant processors. This allows you to decompose the problem into tiny sub-problems, solving each sub-problem to provide a sub-solution, and then recompose the sub-solutions into the overall solution - gaining virtually unlimited scaling and massive efficiency. The only "hard" part involves analyzing the search space in order to select the appropriate DECOMPOSE and RECOMPOSE operations which guarantee that recomposing the "sub-solutions" obtained by decomposing the original problem is equivalent to the solving the original problem. This essential property could be expressed in "pseudo-code" as follows:
(DECOMPOSE ; SUB-SOLVE ; RECOMPOSE) = (SOLVE)
Selecting the appropriate DECOMPOSE and RECOMPOSE operations (and implementing the inter-machine communication coordination) can be somewhat challenging, but it's certainly doable. In fact, as mentioned already, these things have already been done in many distributed computing systems. So there's hardly any "original work to be done in this case. All we need to focus on now is translating the existing single-processor architecture of Bitcoin to a distributed architecture, adopting the mature, proven, efficient "recipes" provided by the many examples of successful distributed systems already up and running like such as Google Search (based on Google's MapReduce algorithm), or [email protected], [email protected], or PrimeGrid (based on Berkeley's BOINC grid computing architecture). That's what any "competent" company with $76 million to spend would have done already - simply work with some devs who know how to implement open-source distributed systems, and focus on adapting Bitcoin's particular data structures (merkle trees, hashed chains) to a distributed environment. That's a realistic roadmap that any team of decent programmers with distributed computing experience could easily implement in a few months, and any decent managers could easily manage and roll out on a pre-determined schedule - instead of all these broken promises and missed deadlines and non-existent vaporware and pathetic excuses we've been getting from the incompetent losers and frauds involved with Core / Blockstream. ASIDE: MapReduce and BOINC are based on math - but the so-called "Lightning Network" is based on wishful thinking involving kludges on top of workarounds on top of hacks - which is how you can tell that LN will never work. Once you have succeeded in selecting the appropriate mathematical DECOMPOSE and RECOMPOSE operations, you get simple massive scaling - and it's also simple for anyone to verify that these operations are correct - often in about a half-page of math and code. An example of this kind of elegance and brevity (and provable correctness) involving compositionality can be seen in this YouTube clip by the accomplished mathematician Lucius Greg Meredith presenting some operators for scaling Ethereum - in just a half page of code: https://youtu.be/uzahKc_ukfM?t=1101 Conversely, if you fail to select the appropriate mathematical DECOMPOSE and RECOMPOSE operations, then you end up with a convoluted mess of wishful thinking - like the "whitepaper" for the so-called "Lightning Network", which is just a cool-sounding name with no actual mathematics behind it. The LN "whitepaper" is an amateurish, non-mathematical meandering mishmash of 60 pages of "Alice sends Bob" examples involving hacks on top of workarounds on top of kludges - also containing a fatal flaw (a lack of any proposed solution for doing decentralized routing). The disaster of the so-called "Lightning Network" - involving adding never-ending kludges on top of hacks on top of workarounds (plus all kinds of "timing" dependencies) - is reminiscent of the "epicycles" which were desperately added in a last-ditch attempt to make Ptolemy's "geocentric" system work - based on the incorrect assumption that the Sun revolved around the Earth. This is how you can tell that the approach of the so-called "Lightning Network" is simply wrong, and it would never work - because it fails to provide appropriate (and simple, and provably correct) mathematical DECOMPOSE and RECOMPOSE operations in less than a single page of math and code. Meanwhile, sharding approaches based on a DECOMPOSE and RECOMPOSE operation are simple and elegant - and "functional" (ie, they don't involve "procedural" timing dependencies like keeping your node running all the time, or closing out your channel before a certain deadline). Bitcoin only has 6,000 nodes - but the leading sharding-based projects have over 100,000 nodes, with no financial incentives. Many of these sharding-based projects have many more nodes than the Bitcoin network. The Bitcoin network currently has about 6,000 nodes - even though there are financial incentives for running a node (ie, verifying your own Bitcoin balance. [email protected] and [email protected] each have over 100,000 active users - even though these projects don't provide any financial incentives. This higher number of users might be due in part the the low resource demands required in these BOINC-based projects, which all are based on sharding the data set. [email protected]
As part of the client-server network architecture, the volunteered machines each receive pieces of a simulation (work units), complete them, and return them to the project's database servers, where the units are compiled into an overall simulation. In 2007, Guinness World Records recognized [email protected] as the most powerful distributed computing network. As of September 30, 2014, the project has 107,708 active CPU cores and 63,977 active GPUs for a total of 40.190 x86 petaFLOPS (19.282 native petaFLOPS). At the same time, the combined efforts of all distributed computing projects under BOINC totals 7.924 petaFLOPS.
Using distributed computing, [email protected] sends the millions of chunks of data to be analyzed off-site by home computers, and then have those computers report the results. Thus what appears an onerous problem in data analysis is reduced to a reasonable one by aid from a large, Internet-based community of borrowed computer resources. Observational data are recorded on 2-terabyte SATA hard disk drives at the Arecibo Observatory in Puerto Rico, each holding about 2.5 days of observations, which are then sent to Berkeley. Arecibo does not have a broadband Internet connection, so data must go by postal mail to Berkeley. Once there, it is divided in both time and frequency domains work units of 107 seconds of data, or approximately 0.35 megabytes (350 kilobytes or 350,000 bytes), which overlap in time but not in frequency. These work units are then sent from the [email protected] server over the Internet to personal computers around the world to analyze. Data is merged into a database using [email protected] computers in Berkeley. The [email protected] distributed computing software runs either as a screensaver or continuously while a user works, making use of processor time that would otherwise be unused. Active users: 121,780 (January 2015)
PrimeGrid is a distributed computing project for searching for prime numbers of world-record size. It makes use of the Berkeley Open Infrastructure for Network Computing (BOINC) platform. Active users 8,382 (March 2016)
A MapReduce program is composed of a Map() procedure (method) that performs filtering and sorting (such as sorting students by first name into queues, one queue for each name) and a Reduce() method that performs a summary operation (such as counting the number of students in each queue, yielding name frequencies).
How can we go about developing sharding approaches for Bitcoin? We have to identify a part of the problem which is in some sense "invariant" or "unchanged" under the operations of DECOMPOSE and RECOMPOSE - and we also have to develop a coordination mechanism which orchestrates the DECOMPOSE and RECOMPOSE operations among the machines. The simplistic thought experiment above outlined an "instant sharding" approach where we would agree upon a convention where the "send" and "receive" address would have to end in the same character - instantly providing a starting point illustrating some of the mechanics of an actual sharding solution. BUIP024 involves address sharding and deals with the additional features needed for a complete solution - such as cross-shard transactions. And distributed trustless Merkle trees would involve storing Merkle trees across a distributed network - which would provide the same guarantees of immutability, while drastically reducing storage requirements. So how can we apply ideas like MapReduce and BOINC to providing massive on-chain scaling for Bitcoin? First we have to examine the structure of the problem that we're trying to solve - and we have to try to identify how the problem involves a massive search space which can be decomposed and recomposed. In the case of Bitcoin, the problem involves:
sequentializing (serializing) APPEND operations to a blockchain data structure
in such a way as to avoid double-spends
Can we view "preventing Bitcoin double-spends" as a "massive search space problem"? Yes we can! Just like Google efficiently searches hundreds of terabytes of web pages for a particular phrase (and [email protected], [email protected], PrimeGrid etc. efficiently search massive search spaces for other patterns), in the case of "preventing Bitcoin double-spends", all we're actually doing is searching a massive seach space (the blockchain) in order to detect a previous "spend" of the same coin(s). So, let's imagine how a possible future sharding-based architecture of Bitcoin might look. We can observe that, in all cases of successful sharding solutions involving searching massive search spaces, the entire data structure is never stored / searched on a single machine. Instead, the DECOMPOSE and RECOMPOSE operations (and the coordination mechanism) a "virtual" layer or grid across multiple machines - allowing the data structure to be distributed across all of them, and allowing users to search across all of them. This suggests that requiring everyone to store 80 Gigabytes (and growing) of blockchain on their own individual machine should no longer be a long-term design goal for Bitcoin. Instead, in a sharding environment, the DECOMPOSE and RECOMPOSE operations (and the coordination mechanism) should allow everyone to only store a portion of the blockchain on their machine - while also allowing anyone to search the entire blockchain across everyone's machines. This might involve something like BUIP024's "address sharding" - or it could involve something like distributed trustless Merkle trees. In either case, it's easy to see that the basic data structures of the system would remain conceptually unaltered - but in the sharding approaches, these structures would be logically distributed across multiple physical devices, in order to provide virtually unlimited scaling while dramatically reducing resource requirements. This would be the most "conservative" approach to scaling Bitcoin: leaving the data structures of the system conceptually the same - and just spreading them out more, by adding the appropriately defined mathematical DECOMPOSE and RECOMPOSE operators (used in successful sharding approaches), which can be easily proven to preserve the same properties as the original system. Conclusion Bitcoin isn't the only project in the world which is permissionless and distributed. Other projects (BOINC-based permisionless decentralized [email protected], [email protected], and PrimeGrid - as well as Google's (permissioned centralized) MapReduce-based search engine) have already achieved unlimited scaling by providing simple mathematical DECOMPOSE and RECOMPOSE operations (and coordination mechanisms) to break big problems into smaller pieces - without changing the properties of the problems or solutions. This provides massive scaling while dramatically reducing resource requirements - with several projects attracting over 100,000 nodes, much more than Bitcoin's mere 6,000 nodes - without even offering any of Bitcoin's financial incentives. Although certain "legacy" Bitcoin development teams such as Blockstream / Core have been neglecting sharding-based scaling approaches to massive on-chain scaling (perhaps because their business models are based on misguided off-chain scaling approaches involving radical changes to Bitcoin's current successful network architecture, or even perhaps because their owners such as AXA and PwC don't want a counterparty-free new asset class to succeed and destroy their debt-based fiat wealth), emerging proposals from independent developers suggest that on-chain scaling for Bitcoin will be based on proven sharding architectures such as MapReduce and BOINC - and so we should pay more attention to these innovative, independent developers who are pursuing this important and promising line of research into providing sharding solutions for virtually unlimited on-chain Bitcoin scaling.
What was preventing a solution for the double-spend problem prior to Bitcoin?
Blockchain/bitcoin is hailed to be the solution to the double-spend problem. Was it that there was no good way to verify which ledger each of the distributed nodes had was correct? Can somebody please thoroughly go through this as I have a lot of questions/uncertainties. And yes I did read the bitcoin paper and a ton of other resources prior to posting this. Seems like there is a way to mitigate the double-spend problem (https://arxiv.org/pdf/0802.0832v1.pdf) but no clear way to truly prevent it in a somewhat fast approach. I can think of a sample solution where each node keeps a ledger and they all constantly reach consensus between them to verify which one is correct - but I guess that would require a node to talk to ALL other nodes, or at least a majority. That would tremendously slow I imagine.
When Bitcoin is forked, both the new and old chain share the same history until the fork. So in that case, how is double spending prevented?
Lets say I have a certain amount of coin under my address. So, after the fork both the chains will have a record of that, right? So now let's say I spend them on the original chain. How will the fork know that I don't have those money in my address anymore?
How does Bitcoin prevent double spending? DueDEX CS July 06, 2020 14:34; Updated; Follow. What is double spending? Double spending refers to the possibility that in the digital currency system where reproducibility of the data is more likely, the system may have the same digital asset be reused due to improper operation. Double spending is a problem that any digital currency must solve. If a ... Double spending is spending the same digital currency twice without the network security noticing it. Double spending is one of the biggest problems in the market, and the financial institution takes extra caution to ensure that they prevent double-spending at any cost. It is mainly done by duping the network to think the original amount is never spent, making it available to be used for other ... Double-spending problem is the successful use of the same funds twice. Double-spending of Bitcoin is not possible as Bitcoin is protected against a double-spending problem thanks to each transaction which is added to the blockchain being verified, and the majority of funds contained in this transaction cannot have been previously spent.. Double-spending is a potential flaw in a digital cash ... Bitcoin solves the double spend problem through the use of a public ledger that is constantly monitored by network participants, and through the Proof of Work consensus mechanism. That’s double spending in a nutshell. For a more detailed explanation keep on reading, here’s what I’ll cover: Double Spending Explained; How to Prevent Double ... Bitcoin’s solution to double-spending is that if the majority of the nodes agree on which transaction was first to be received, later attempts to double-spend are irrelevant. Bitcoin’s ...
Bitcoin Exploit. Double Spend Attack! Who's At Risk?? BTC Volatility Index. Waves & Enigma Web 3.0
Bitcoin ATM’s have recently been targeted in Canada, and thieves made away with $200,000 in cash because of a double spend exploit. The Bitcoin core code has a replace by fee tool which allows a ... What is double-spending? Can someone duplicate my Bitcoins? Watch this video for more information and visit https://coiner.co.za/ Understand bitcoin Fundamentals : Live session Telegram : https://t.me/joinchat/AAAAAEu-1OZeyuN2g3D5BQ "Double-spending" Bitcoin -- the process of making someone believe you sent them funds when you didn't -- used to be only for the tech-savvy. Thanks to Glass... Daniel and I discuss this essential problem and the solution that is Bitcoin.