How does Counterparty determine consensus? Imagine there is some small difference in the Counterparty software as it runs on one machine versus another. How could we be sure that each instance has interpreted the data in the blockchain in the same exact way?
Is there some sort of hash that is calculated over the accepted transactions that could be compared or is there some other number I can point to and say with certainty that these two instances agree?
[quote author=weex link=topic=513.msg3196#msg3196 date=1409184325]
How does Counterparty determine consensus? Imagine there is some small difference in the Counterparty software as it runs on one machine versus another. How could we be sure that each instance has interpreted the data in the blockchain in the same exact way?
Is there some sort of hash that is calculated over the accepted transactions that could be compared or is there some other number I can point to and say with certainty that these two instances agree?
[/quote]
The test suite (with py-test
) does verify the entire set of local debits and credits (and so effectively all balances, too) against one distributed with the codebase, from a recent checkpoint. This process could be simplified and made automatic, of course.
Moreover, right now, everyone runs the same codebase, with a minimum version number, and there are a number of sanity checks in the code to prevent subtle variations across systems, e.g. rounding errors.
[quote author=PhantomPhreak link=topic=513.msg3198#msg3198 date=1409197641]
The test suite (with py-test
) does verify the entire set of local debits and credits (and so effectively all balances, too) against one distributed with the codebase, from a recent checkpoint. This process could be simplified and made automatic, of course.
Moreover, right now, everyone runs the same codebase, with a minimum version number, and there are a number of sanity checks in the code to prevent subtle variations across systems, e.g. rounding errors.
[/quote]
Thank you for pointing out these tests. I guess my question can be put more practically as, what happens if I don't update my v9.41.0 software for ten releases? When I then run the program will it know somehow that it's out of date by the content of transactions that it sees? Or would that provide a vector for abuse?
I like that each block hash is a sort of checksum on the entire history ending with that block and wish to see that same level of rigor with Counterparty transactions. Then we could query every public api node and be able to track consensus as I believe is done on the Bitcoin network. I suppose the block hash and counterparty_last_message_index could work pretty well currently depending on what the actual risks are.
[quote author=weex link=topic=513.msg3199#msg3199 date=1409204524]
[quote author=PhantomPhreak link=topic=513.msg3198#msg3198 date=1409197641]
The test suite (with py-test
) does verify the entire set of local debits and credits (and so effectively all balances, too) against one distributed with the codebase, from a recent checkpoint. This process could be simplified and made automatic, of course.
Moreover, right now, everyone runs the same codebase, with a minimum version number, and there are a number of sanity checks in the code to prevent subtle variations across systems, e.g. rounding errors.
[/quote]
Thank you for pointing out these tests. I guess my question can be put more practically as, what happens if I don't update my v9.41.0 software for ten releases? When I then run the program will it know somehow that it's out of date by the content of transactions that it sees? Or would that provide a vector for abuse?
I like that each block hash is a sort of checksum on the entire history ending with that block and wish to see that same level of rigor with Counterparty transactions. Then we could query every public api node and be able to track consensus as I believe is done on the Bitcoin network. I suppose the block hash and counterparty_last_message_index could work pretty well currently depending on what the actual risks are.
[/quote]
By default, counterpartyd checks its local version against the minimum version specified in a file on GitHub. There are ways of tying versions to transactions, though, which we're exploring.
Great to hear. I understand that from the beginning the project has tried to minimize the trust required any outside individuals, organizations, and services. Ultimately trust in the protocol grows as that goal is pursued.