5 ms·
My understanding that a full sync in Bitcoin means something different than a full sync on Ethereum. Bitcoin's database is modeled on UTXO (https://en.m.wikiped
by bouncycastle 8y ago
My understanding that a full sync in Bitcoin means something different than a full sync on Ethereum. Bitcoin's database is modeled on UTXO (https://en.m.wikipedia.org/wiki/Unspent_transaction_output https://en.m.wikipedia.org/wiki/Unspent_transaction_output) therefore all clients need to validate all transactions from genesis to calculate final balances. Meanwhile, Ethereum is account based and state is global, and to determine the balances you only need to check the merkle proof, no need to store or re-validate each and every transaction, just the final result. Source: https://github.com/ethereum/wiki/wiki/Design-Rationale#accounts-and-not-utxos https://github.com/ethereum/wiki/wiki/Design-Rationale#accou... quote "The benefits of accounts are:Large space savings"
In Ethereum, the closet to a Bitcoin full node would be an 'full archive' node, those are keeping all the transactions, down to the stack traces and events, without pruning. These are usually run by block explorers, but you certainly don't need to store that much detail if you just want to interact with a dapps.
- CryptoPunk 8y agoBitcoin nodes could download the most recent UTXO index too. Validating the entire history is necessary in both if you want to trust nothing except the client code you're given. An archival node in Ethereum goes beyond a full node, and stores data not needed to do full validation. A full node in Ethereum needs to download about 80 GB I believe, which is a tenth of what an archival node needs to download and store.
- bouncycastle 8y agoarchival node doesn't need to download anything extra. It just reconstructs everything just from the blocks.
- keymone 8y agoYou say “check merkle proof”, how do you know what it’s supposed to be? Trust somebody gives you the right hash? There is no difference between BTC’s UTXO model and Ethereum’s account model in this sense - both are aggregate structures and to have full certainty the aggregate you’re looking at is correct you have to run through all the transactions. To speedup sync in BTC it is assumed that blocks older than some amount of YEARS are valid but you still have to go through their transactions to build up the aggregate UTXO set. In ETH instead it is common to just download the result and trust it’s valid. And since it’s now impossible to sync from origin you can never tell if some account doesn’t have ether created from nothing.
- bouncycastle 8y ago> how do you know what it’s supposed to be The information is in the block headers. > In ETH instead it is common to just download the result and trust it’s valid Nope. You still have to download all the block headers from block 0 and check if they are valid, including the PoW and other hashes.. The blocks are basically tamper proof as in Bitcoin (but can also be vulnerable to a 51% attack) Then that's where it all diverges from Bitcoin: in Ethereum, there are three merkle trees: one for the state, one for transactions and one for the transaction results (receipts). The roots of these trees are in the blocks, once you have these, you can verify a particular value of, say, a state value, without the need to verify each and every other value, by walking through the tree and doing a merkle proof. There's plenty of info on the web explaining how it works if you look it up, eg. Search for "ethereum state trie" As for syncing, recently it improved a lot. I did it a few times last month with Geth on an old machine just to test it out. Synced within 2 days, a big improvement over the previous versions of Geth. And yes, it got all the blocks from 0 to current. Blocks by themselves are very light.
- keymone 8y ago> The information is in the block headers > You still have to download all the block headers from block 0 and check if they are valid, including the PoW and other hashes.. and unless you validate those blocks you don't know if the chain you're looking at is valid. headers don't help with that. > The blocks are basically tamper proof as in Bitcoin (but can also be vulnerable to a 51% attack) vulnerability to 51% attack depends on cost of such attack. if it is "normal" in ethereum to trust third parties with state of just couple hundred blocks old - the attack becomes very cheap. and if i understand correctly that's the case with majority of ethereum nodes as they aren't fully validating and are in fast sync or light mode. in BTC `--assumevalid` points to a block that is more than year and a half old. > The roots of these trees are in the blocks, once you have these, you can verify a particular value of, say, a state value, without the need to verify each and every other value, by walking through the tree and doing a merkle proof. except when the state you downloaded from third parties and assumed was valid, was actually forged. since you're not executing transactions you can't know what transaction receipts would have been created. > And yes, it got all the blocks from 0 to current. Blocks by themselves are very light. nah, i call bs. it might have downloaded them but didn't validate anything beyond headers and some recent transactions. admittedly i haven't checked for like half a year, but full sync was literally freezing and not completing at all on powerful laptops and aws instances. it's quite possible the wonder kids of javascript cryptocurrency finally fixed their shit but i wouldn't bet my money on it.