[Bitcoin-ml] Flexible Transactions are canonical
Tom Zander
tomz at freedommail.ch
Fri Sep 8 10:10:26 UTC 2017
On Friday, 8 September 2017 11:30:24 CEST Tomas via bitcoin-ml wrote:
> I am sorry, but that is not what canonical means. A format has a
> canonical form if there is only one way to represent the same logical
> information.
The logical information is the information that generates a certain hash and
signature.
So canonical is *exactly* the right description. Because its signed you
can't change any single byte. And that's the exact definition of canonical.
> (In that case *every* format would have a canonical form!)
No, because you can have an unsigned v1 transaction where you swap outputs
and nothing breaks.
So current unsigned transactions are not canonical.
I'm repeating my previous email, because you are repeating your arguments I
already countered in previous emails.
I'll try to explain in more detail, can I ask you to spend time following my
arguments before you reply with the same questions?
Bottom line is that you are talking about unsigned transactions.
Unsigned transactions have no canonical form. Just like a draft email has no
canonical form. You could write it out in a dozen different encoding, for
instance.
The process of signing a document or transaction will turn a non-canonical
data format into a canonical one.
And Flexible Transactions are canonical, the moment they are signed.
Exactly like current v1 transactions.
> There isn't
> suddenly a canonical form when you sign it; there are still multiples
> ways to construct the same logical transaction, each of which would
> yield a different a byte sequence, different signature and different id.
The signing makes it canonical, because you break the signature if you
reorder anything.
Realize that you can reorder a v1 transactions outputs and the exact same
happens.
> Consider for instance tooling that uses a SQL back end to store its
> information (like http://blockchainsql.io/). Currently they can
> reconstruct every transaction's byte sequence from the data.
Sounds like they misunderstood the concept of “data warehousing”.
You don't store 100% of the raw data in your warehouse, you refer to
upstream if you want the raw data.
Storing the entire blockchain in a SQL database is not scaleabe and
ultimately a bad idea.
What happens when people add a new tag in FlexTrans? For instance a tag
where wallets like blockchain.info can say they generated this transaction
and miners that are keen on growing the industry recognize that those kind
of wallets are essential for growing the industry. So they give a weekly
reward spread based on how many transactions a certain company created.
Will you say that adding tags like this or any other also breaks “canonical”
format, because its some information your database doesn’t know about?
No, your examples like the CTransaction format and your SQL database are
filtered versions of the canonical format. They are not meant to enable a
round-trip.
A signed transaction is read-only information, the entire approach of
interpreting it and then writing it out expecting a 100% same output is
broken by design.
Don't round-trip it if you want the original. Use the original.
ps. data-warehousing of blockchain data is a research topic related to the
Bitcoin Classic project and some more sane approaches are being worked on.
--
Tom Zander
Blog: https://zander.github.io
Vlog: https://vimeo.com/channels/tomscryptochannel
More information about the bitcoin-ml
mailing list