Bitcoin Forum
May 23, 2024, 08:24:31 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 ... 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 [72] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 ... 186 »
1421  Bitcoin / Armory / Re: Armory - Discussion Thread on: April 22, 2013, 06:33:52 PM
Ack, that's quite a long compile time!  I didn't realize that it couldn't be compiled in the available RPi RAM.  You have A or B pi?   I guess I'll download the Raspbian image and take a shot at it... in a little bit.  At the moment, I gotta focus on some other development activities.

I would highly recommend following the guide here to get a cross-compiler set up for the Pi. Compiling on the Pi itself seems like a form of masochism.

Oh yeah, I actually started doing that in a VM a month ago and totally forgot.  I probably don't even have it anymore.  I'll take another shot at it...  That would certainly make the release process easier, to not have to outsource the compiling to a separate physical device.
1422  Bitcoin / Development & Technical Discussion / Re: Tools to Navigate and Analyze the Blockchain on: April 22, 2013, 06:19:00 PM
I've been using blockchain explorer for a bit now and I'm very impressed. However, I'd like to download and analyze a local copy of the blockchain and I'm wondering if anyone wrote some software to do this?

You could make one pretty easily out of armoryengine (obviously what Armory is based on).  It scans and indexes the blockchain and allows for arbitrary header and tx-lookup.  Within a python script, you can traverse the entire blockchain in any way you want to (though you'd want to use the lower-level C++ stuff if you want to do full blockchain scans in less than an 30 min).  There's a bunch of examples of it in the extras/sample_armory_code.py in the github project.  I know znort had done something similar.

At one point, I had created a block explorer with an ancient version of armoryengine, but there's no way that works anymore.  It would require more work upgrading it probably, than just making your own wrapper around armoryengine that serves your purposes. 

No idea if that's what you're looking for.  But it's out there.
1423  Bitcoin / Bitcoin Discussion / Re: Is a bitcoin address really an address? on: April 22, 2013, 05:26:01 PM
Your "wallet" is "you", and your "addresses" are "one-time payment codes" to pay "you".  These one-time payment codes could be reused to go to the same person, but it's really bad practice unless they explicitly request it
1424  Bitcoin / Development & Technical Discussion / Re: Ultimate blockchain compression w/ trust-free lite nodes on: April 22, 2013, 04:58:00 PM
gmaxwell pointed out the obvious flaw in this proposal:  you can supply the input branches to prove that the TxOuts that you are spending exist, but you can't supply the destination branches.  Otherwise, full nodes have no idea how to update the sub-branches of the target address.  Even if they know that this is the first UTXO for that address, there may be lots of other branches on the way down to that node which are unknown to it.

There's not a way around this, other than just having full nodes store the entire trees.  Which means we're back to square one Sad
1425  Bitcoin / Armory / Re: Armory - Discussion Thread on: April 22, 2013, 04:15:13 PM
Honestly, I was hoping to just eventually release an offline bundle for the RPi.  But I'm not sure if I can support that at this time.  I finally have an RPi, but I haven't really had time to set it up.  Maybe someone could help me figure out what is needed for the offline bundle...?  (and a good way to set it up, like what image to install, etc)
Let me know if you want an image of my setup. It's just Raspbian (the official Raspberry Pi distro) with Armory installed. Nothing else. That way you can just dd the image to an SD card and pop it in to test it.

It seems to return the correct value for platform.system() at least.

Code:
pi@raspberrypi ~/BitcoinArmory $ python -i
Python 2.7.3 (default, Jan 13 2013, 11:20:46)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import platform
>>> print platform.system()
Linux
>>> platform.processor()
''

And putting in the "raise" as you say makes Armory start properly. Yay!

How is the speed? Acceptable I hope?
It's acceptable. Although there are some very long delays with 100% CPU usage. Especially when opening the "Print Paper Wallet" dialog. It takes like 15 seconds with 100% CPU usage. Anything related to viewing the root private key and chain code takes a long time (with 100% CPU usage).

Building Armory itself took at least three hours. But this was mainly caused by having to use a swap file, because it ran out of memory.

Ack, that's quite a long compile time!  I didn't realize that it couldn't be compiled in the available RPi RAM.  You have A or B pi?   I guess I'll download the Raspbian image and take a shot at it... in a little bit.  At the moment, I gotta focus on some other development activities. 

For the unlocking, there's not much you can do about it.  Armory does a bunch of verification checks when unlocking to make sure there's no corruption.  Although it takes a while, it's saved my bacon in a couple instances (and for other users) when it did actually find something was corrupted.  This will prevent you from using a corrupted wallet and potentially using addresses that were based on a faulty chain calculation. The downside is that there's a lot of EC-multiply operations being performed when you unlock, which does take a while, especially on slower HW.

I suppose you could run with a much smaller keypool on the offline computer, since it doesn't need any lookahead  (because it's not looking anywhere for transactions).  That would speed up unlocking in the short-term.
1426  Bitcoin / Development & Technical Discussion / Re: Deterministic wallets on: April 22, 2013, 02:51:57 PM
Keys generated within a single sub account might also use any random index.

That's just complicating things for yourself, but yes, you can.

grau, I think the part you are missing is that there is a "convention" tied in with BIP 32.  You could do arbitrary things with BIP 32, and use key gaps of 1,000,000 keys, or use arbitrary 32-byte strings for your child indices, or go deeper than three levels.

But a "standard" implementation of BIP 32 will not do that.  BIP 32 specifies a set of tools that let you do all these arbitrarily complex things, but also describes a convention that avoids the problems you are talking about.  Don't skip wallets, don't use arbitrary 32-byte IDs, don't go past level 3.  If you violate any of these things, you won't be compatible with other implementations of BIP 32, and you'll be forced to address all the problems you are bringing up.  

Look at BIP 32 as a flexible, extensible language for addresses tress and also a prescription for using that is generally accepted.  By generally accepted, I mean that if you follow this prescription, you should be able to import your root private key into Armory, Bitcoin-Qt, Electrum, Multibit, etc, and it will work.  

EDIT: But the simplicity and flexibility of the design allows for us to expand into more complicated things, later, or for devs to do their own "proprietary" deviation of this prescription, and not have to come up with a whole new deterministic wallet algorithm (if they don't mind being incompatible with other apps). 
1427  Bitcoin / Armory / Re: [ANN] The first Armory-for-OSX Release! (Testing) on: April 22, 2013, 01:35:35 AM
Fwhew!  The issues are slowly fading away...

Still problems that need to be cleaned up, but at least the problems people are having have workarounds. 

Working on the RAM-reduced, instant-startup upgrades now.  The new design will actually remove direct dependence on the blk*.dat files entirely!  There's just been way too many problems with it.  I'll simply retrieve and process data directly from Bitcoin-Qt/bitcoind as a peer using regular getdata/getheaders/getblocks requests and maintain my own database.  And that database will start out duplicating everything, but I am doing it in such a way that it will gracefully support various subsets of that data, like pruned blockchain, lite-node, address-indexed, etc.  This way, users will have the capability to run using remote [trusted!] bitcoind instances, and use as much RAM as they desire.

Might be some time before I iron all of it out, though...

1428  Bitcoin / Armory / Re: Armory - Discussion Thread on: April 22, 2013, 01:12:40 AM
I see what's going on.  It fails to set the CpuStr variable because platform.processor() is empty.  I forgot to set a default value.
The reason it fails is because none of the lines in /proc/cpuinfo start with 'model name'. In GetSystemDetails() you look for lines that start with that string to determine the CPU model name. But this is the output of the Pi's cpuinfo:

Code:
pi@raspberrypi ~ $ cat /proc/cpuinfo
Processor : ARMv6-compatible processor rev 7 (v6l)

Quote
I guess that will be fixed in the next release.
Will you consider using cryptopp 5.6.2 at some point too? This release supports GCC 4.7, while 5.6.1 supports only gcc 3.3 - 4.5. And it also fixes the compile issue on the Pi (as mentioned before) where the compiler is detected incorrectly. That would make it easier for people with Raspberry Pis to use Armory as an offline wallet.

Good to know about the CPU "model name".  Oh well.  I really don't need it, I just need to add a default value for that completely informational-not-functional piece of code...

I didn't realize there was a new release of Crypto++ recently.  I will look into it.  There was a bug in the old version that I had to manually fix, but it was so long ago, I don't remember what it was.  I may have to do some git-blaming to figure it out.

Honestly, I was hoping to just eventually release an offline bundle for the RPi.  But I'm not sure if I can support that at this time.  I finally have an RPi, but I haven't really had time to set it up.  Maybe someone could help me figure out what is needed for the offline bundle...?  (and a good way to set it up, like what image to install, etc)
1429  Bitcoin / Armory / Re: Armory - Discussion Thread on: April 21, 2013, 11:22:36 PM
It seems to return the correct value for platform.system() at least.

Code:
pi@raspberrypi ~/BitcoinArmory $ python -i
Python 2.7.3 (default, Jan 13 2013, 11:20:46)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import platform
>>> print platform.system()
Linux
>>> platform.processor()
''

And putting in the "raise" as you say makes Armory start properly. Yay!

I see what's going on.  It fails to set the CpuStr variable because platform.processor() is empty.  I forgot to set a default value.  I guess that will be fixed in the next release. 
1430  Bitcoin / Armory / Re: Armory - Discussion Thread on: April 21, 2013, 11:10:12 PM
So my Armory install is broke? I was the OP of the error that was coming up. I'm not really sure what I'm suppose to do. I didn't do any upgrades or make any changes. And I still have bitcoin in my Armory wallet. I don't know what you mean when you say run it with this argument or whatever. Can you be a bit more detailed?

Just uninstall your current Armory and install the new version, 0.88.1.  That error you originally reported has been fixed.

https://bitcoinarmory.com/get-armory/

Then what happens with my wallet?

The installation directory is completely separate from your home directory.  All your wallets and settings will be untouched through a software upgrade.  It's like that by design. The two never mix.

Armory gets installed to:   C:\Program Files (x86)\Armory
Armory home directory:    C:\Users\<username>\AppData\Roaming\Armory
1431  Bitcoin / Development & Technical Discussion / Re: Deterministic wallets on: April 21, 2013, 11:02:26 PM
It's described by gmaxwell in the OP of this thread.

Thanks for that.   Just for myself, I copied it below, adding sub tags for subscripts, and bolding EC points (but not scalars)

As currently in BIP32 you would still have I=HMAC-SHA512(Key=cpar, Data=Kpar || i)
And then:

ki=kpar+IL
Ki=Kpar+G*IL
ci=IR


Pieter: what's the difference between what you just posted and what iddo posted?

Also, aren't timing attacks supposed to already be "covered" if you are using a vetted implementation?  I'm not opposed to making it easier to implement, but I thought that was part of the reason to use, say, OpenSSL, because they already diligently covered a bunch of these side-channel concerns.

1432  Bitcoin / Armory / Re: Armory - Discussion Thread on: April 21, 2013, 10:45:01 PM
On the RPi, when you run python, what is the return value of "import platform; print platform.system(), platform.processor()" ?

It looks like a completely unnecessary piece of code is causing the problem, though it looks to me that it should work if ".system()" returns "Linux" as I expect.  Either way, that problem can be solved by finding the line:

Code:
SystemSpecs = GetSystemDetails()

Just add a single line before it, saying "raise".  That will cause it to error out and set default/unknown for all those member variables.   If the RPi registers as a different OS than the ones I look for already, that would be good to know!

1433  Bitcoin / Development & Technical Discussion / Re: Deterministic wallets on: April 21, 2013, 10:38:21 PM
I'm still hoping to hear some explanation on why the multiplicative variant is advantageous.
It seems to me that it makes sense to re-consider this issue before BIP32 is finalized.

Can someone precisely specify the additive variant of the CKD function?  I'm fairly certain I know, but I don't want to end up missing a detail and evaluating something else.

1434  Bitcoin / Armory / Re: verifying file signatures on: April 21, 2013, 02:42:53 PM
By the way, there is a problem with downloads. I had accidentally mixed the architectures.  I reuploaded them last night.   If you had problems, try downloading again.  It should be correct now.
1435  Bitcoin / Armory / Re: Armory - Discussion Thread on: April 21, 2013, 02:39:14 PM
Hi,

Just followed the exact instructions on the website to make an offline wallet wit ubuntu.
Used the offline module (.sh) installer. But it gives me 2 broken packages/dependencies.
Armory wont start.

Fresh install and second thing i did was running the installer, nothing more/nothing less..

Ubuntu 10.04-32bit was used.

Hope you can help me out.

When did you download it?  I updated the offline bundles last night space because I mixed up the architectures.
1436  Bitcoin / Armory / Re: verifying file signatures on: April 20, 2013, 09:39:07 PM
Understood, thanks for the fast reply!

I was able to verify the msi file now. The signature asc file checked out good, but warned about it not being certified with a trusted signature. Not sure if I missed a step somewhere in that process. If not, it looks like everything is good to go. Thanks for the information.

Yeah, that's GPG being pedantic.  It doesn't truly trust a signature unless the GPG key has been explicitly set as "Fully Trusted", or it is signed by another GPG key that is "Fully Trusted."  It's trying to encourage the whole Web-of-Trust thing, where everyone signs everyone else's keys to help prevent man-in-the-middle attacks.  But the web-of-trust thing never hit critical mass.  Though in small community's like ours, maybe the major developers should make some effort to do this...
1437  Bitcoin / Armory / Re: verifying file signatures on: April 20, 2013, 09:23:04 PM
I am a newbie with verifying signatures, but am trying to follow the instructions on your download page. I'd like to verify the windows files and the linux ones for my offline machine.

I attempted verification with the windows files on a linux machine via the following steps:

1) gpg --recv-keys --keyserver keyserver.ubuntu.com 98832223
2) sudo apt-get install dpkg-sig
3) gpg --verify armory_0.88.1-beta_sha256sum.txt.asc armory_0.88.1-beta_win32.msi

This does not appear to work. I get "gpg: not a detached signature"

For the linux files, I did steps 1 and 2 as above, and with step 3:
dpkg-sig --verify *.deb

In the folder the offline files uncompressed into. It checked all the deb but only reported
Processing armory_0.88-beta_amd64.deb...
GOODSIG _gpgbuilder 821F122936BDD565366AC36A4AB16AEA98832223 1366309670

For that .deb. The rest of the debs it just said Processing but never had a GOODSIG line. Is this expected behavior?

Okay, I guess need to update those instructions.  "Detached signatures" would look like this:

     armory_win32.msi
     armory_win32.msi.sig


Then your command-line would work, because the .sig file explicitly contains the signature of only the .msi file.

But I didn't make a detached signature.  I simply hashed all the installers, listed them in the .asc file, and signed that file.  Here's what the file looks like:

Code:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

a730df751c753bdd2664d1e0b32a3ff138494900040c742b0ebfced3b516fad6 armory_0.88.1-beta_OSX.dmg
918e9123c372557ac73f563bb3d4d76af4ab218845872d6c49d502b798015826 armory_0.88.1-beta_OfflineBundle_Ubuntu-10.04-32bit.tar.gz
43a6228c495a5f9f92ff594d41b2d954c94b85e5da0333d4f53591d75dccdb43 armory_0.88.1-beta_OfflineBundle_Ubuntu-10.04-64bit.tar.gz
3d7f620c028940540dc48d41a9cf6127f7f42b920664de4a957fc407b3f59abf armory_0.88.1-beta_amd64.deb
670b74ade48b041bd376512f5e2db78075d794495ef347bf0b792156c9a90048 armory_0.88.1-beta_i386.deb
4d14b43ed75194a753dc202d70f9650a92d7b8756c917fe82a7f46ecd3466aa1 armory_0.88.1-beta_win32.msi
26735a99948ac1402242e83f0c18aed4477b132654d1a94d7968caa0e72790df armory_0.88.1-beta_win64.msi
-----BEGIN PGP SIGNATURE-----
...
-----END PGP SIGNATURE-----

So, there's two steps to verification:
(1) Execute "sha256sum armory_0.88.1-beta_win32.msi" from the command line.  Compare it to the contents of the .asc file, make sure it matches
(2) Verify the signature of the .asc file:  "gpg -v armory_0.88.1-beta_sha256sum.txt.asc"


Note: for your question about the debian package, I highlighted the important part of your post.  You successfully verified the .deb signature.  This is useful for just downloading the .deb and verifying it before you install it.  But in the case of the offline bundle, I don't sign all the packages because I only created one of them.  Instead, you should follow the procedure I just explained for the .msi files, but for the appropriate tar.gz file.
1438  Bitcoin / Development & Technical Discussion / SIGHASH_WITHINPUTVALUE: Super-lightweight HW wallets and offline data on: April 20, 2013, 09:14:41 PM
I bring this up, because as long as we've committed ourself to a [potential] hardfork in the next month, I think the following should be seriously considered.  Why?  Because "cold storage" is becoming a major force in the Bitcoin world.  More and more people and companies are looking at the benefits and trying to get it setup.  More people are finding themselves wealthy and want to protect it.  It is the holy grail of wallet security (multi-sig, too, but that will probably include offline wallets, instead of replacing it).    But implementation suffers from one extraordinary hurdle.


Example:

Let's say I want to create a $10 offline signing device.  I will put 32 kB of RAM and a small screen and a tiny embedded chip that is just powerful enough for ECDSA signing.   It will sign transactions for me after asking me to physically confirm with a button press.  But the device has so little RAM, it can't support arbitrary transactions.  So, I'll just make sure my online computer software never produces transactions bigger than 10 kB, and just do multiple transactions if necessary.  In Armory, I'll happily make that a configurable parameter.

But there's a serious problem here:  this isn't possible (and the Trezor ran into this).  Because of a tiny little oversight by Satoshi, nothing about the 10kB transaction indicates what the transaction fee is.  Without access to the blockchain, my tiny little device doesn't know whether it's signing 1 BTC input, or 1000 BTC input.  To accommodate this, you must supply all supporting transactions along with the one to be signed (and BIP 10 does this).  By doing this, the offline device can hash the supporting transaction, verify it matches the TxIn it is signing, and then record the 8-byte amount/value from that transaction.   It's a lot of work to verify those 8 bytes...

Worse, I don't have control over this.  I can choose never to create transactions bigger than X kB, and pick X based on my HW.  But if my wallet contains a UTXO that comes from a 100 kB transaction, I have to upload 100 kB to my offline device, just to verify those 8 bytes.  This forces devices like the Trezor, to implement streaming calculations, complicating the protocol 10-fold.  

If you don't do this, an attacker compromising the online computer could trick your offline computer into signing away your entire wallet to transaction fee.  While it's not the most direct way for the attacker to make money, it's the most direct way to ruin you by sending your life savings to some lucky miner (and they may have a way to benefit from it, like owning some mining power).

EDIT: I shouldn't focus entirely on the signing hardware.  Another major problem is bandwidth:  there's a lot of good ways to transfer a few kB securely between an online and offline computer, but not on the order of megabytes.  QR codes are such a method that I keep shooting down, because I have no idea how to make it work with MB of data.


Raw Technical Solution:

All this because Satoshi made one little oversight in the OP_CHECKSIG procedure:  the TxOut script is copied into the input being signed, but not the value.  If the value was copied prepended to the TxOut script, then the offline system only needs to be given the 8 bytes, and it could securely present the correct fee to the user and sign it.  If an attacker compromises the online computer and puts incorrect values into there to trick the offline computer, the offline signature will be invalid (because full nodes verifying the transaction will use the correct value the signature won't match).  

So the technical solution is simple:  Add a new SIGHASH type, which I dub SIGHASH_WITHINPUTVALUE.  This would have hashcode 0x10.  This would be OR'd with the existing hash types.  i.e. Currently all "regular" transactions are signed with (SIGHASH_ALL), now anyone who wants the benefit would sign with (SIGHASH_ALL | SIGHASH_WITHINPUTVALUE).  It is compatible with the existing hash types.

Analogy:
Right Now:  "I, the offline computer, sign this input to be sent to this address, no matter how much this input is worth"
Proposal:  "I, the offline computer, have been told this input is worth 13.28 BTC.  This signature is only valid if that's how much it's actually worth"


Considerations:

This solution has some nice properties:
  • Simple!  For the signing and verification procedures, it's probably only a few lines of code.
  • I have full control over data sizes to be exchanged with the offline device, down to the minimum of being able to sign a one-input-one-output transaction.  Currently, there's no way to avoid having to deal with 100kB-200kB of transaction data transfer (and if you want to be able to sign multi-input tx, you need to be able to handle megabytes)
  • Also makes it resistent to changes at the network level: we plan to allow only 100 kB transactions right now.  So without this new SIGHASH, I design my device to handle up to 100kB.  But in two years, the limit is raised and people start mining 1 MB transactions, and I find that one of my inputs was from a 1 MB transaction.  Hardware upgrade?  Remember, the offline wallet needs to handle 100.0% of all transactions!  
  • No problems with backwards compatibility:  Once the change goes into effect, new devices can be made and wallet software updated, to only use the new SIGHASH type.  It can be used even on wallets that already contain coins... because it only changes what is being signed.
  • Should be completely non-controversial (technically):  this adds an optional restriction to transaction validity.  It doesn't change overall network topology or philosophy at all.  It's like asking the network to confirm, for the signer, that they were given the right value when signing.  That's all.

Downsides:
  • Hardfork (of course).  But we've committed ourselves to a hard-fork next month, anyway.  And the extra hashtype would simply be "present" next month, but not become usable for 6-12 months, to allow time for upgrades.  I think this change has the right combination of simplicity and benefit to be worth throwing in
  • Other clients would break if they're not paying attention and they are in the habit of verifying their own transactions.  Oblivious nodes would still be able to sign transactions, just not verify them.  Not so important for nodes that already trust the network to verify validity of transactions, but I'm sure things would break.

Anyone who has worked on offline wallets knows what a PITA it is to have to deal with supporting transactions.  Most of the ideas proposed in the Improving Offline Tx thread, were shot down because the solution needs to support multi-megabyte transfers.  This solution would eliminate that necessity.
1439  Bitcoin / Development & Technical Discussion / Re: Ultimate blockchain compression w/ trust-free lite nodes on: April 20, 2013, 06:48:45 PM
Right.  Just use the transaction hash directly as key and accept that there might be imbalances.  However, the imbalances are not really going to happen because you are using a hash (effectively random) value as key.  So the law of large numbers does tree balancing for you.

Just to clarify:  tries/patricia trees/de la brandais trees do not have balancing issues.  They are all tightly bounded to a maximum number of operations to do queries, inserts, deletes.  It's just that the optimizations of PATRICIA/Brandais bring you far below that constant upperbound.  Thus, "unbalancing" simply removes optimization, but you're still operating well within the confines of constant time, no matter what the tree structure looks like.  

The distinction only matters if there was reason to believe that those optimizations are necessary to make this idea feasible.  I do not believe that is the case, here.   In terms of access times, I believe even a regular-old trie (forcing full traversal of each path) would still work. 

1440  Bitcoin / Development & Technical Discussion / Re: Ultimate blockchain compression w/ trust-free lite nodes on: April 20, 2013, 06:33:54 PM
I was thinking about this as a pure system that would allow dropping the blockchain storage (except for recent blocks) completely.  Effectively, the data associated with coins would be moved to the owners of the coins.

You need to store the merkle path down to the transaction that created the coin.  This won't change with time.

However, to spend it you also need live path from the latest root.

This tree could be stored in a distributed fashion.  It only needs to be stored for a while, but the longer the better.

Your client could try to keep track of the tree down to your transactions.  The amount of data depends on the number of transaction outputs.  If there was 1 trillion outputs, then you would need to store around 40 levels until yours was the only transaction left on the path.

This works out at 40 * 32 bytes = 1280 bytes for per block per coin.  This data rate could be decreased by combining all your coins into one and/or reducing the time between asking for the updated data.

The longer the network stores update data, the less often nodes need to update.

That's a super interesting idea.  I'll have to sleep on that one.

Right now, everyone tracks everyone's coins, and you are responsible for maintaining your own private keys.  In your system, you are maintaining your own private keys and the subtree information about the coins contained within.   Nodes don't have to keep that information, because they only need it when the coins are being spent, and you are the only who ever spends the coins.  

Sure part of the UTXO set could be "lost" if your computer crashes, but those coins are lost, too, so it doesn't really matter...?  If the coins will never be spent, the sub-tree never changes, and so nodes don't care what's inside that subtree, as they have its fingerprint.   I have not had time to think through the implications (or complications) of it, but it's a super-interesting thought-experiment.  


P.S. -- This is yet another area where the trie-based structures win -- since there is branch independence in tries, peers don't have to store what's below a certain node as long what's below it is not changing (they only need the fingerprint of that node after the last update to it).  If you use a BST, this doesn't work, because updates in neighboring branches can cause rebalances, forcing you to know what's in this branch so that nodes can be shuffled between branches.

Pages: « 1 ... 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 [72] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 ... 186 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!