public inbox for bitcoindev@googlegroups.com
 help / color / mirror / Atom feed
* [bitcoin-dev] Stamping transaction
@ 2020-06-05 12:05 Mostafa Sedaghat joo
  2020-06-07  0:40 ` ZmnSCPxj
  0 siblings, 1 reply; 6+ messages in thread
From: Mostafa Sedaghat joo @ 2020-06-05 12:05 UTC (permalink / raw)
  To: bitcoin-dev

[-- Attachment #1: Type: text/plain, Size: 446 bytes --]

Hi

*stamping transactions* is as simple idea but has huge impact.
Simply, stamping transaction means putting previous block hash in the
header of the transaction. With this simple technique we can *decouple
*translation from
the block.
I have described my idea here:
https://b00f.github.io/blockchain/stamping_transactions


I know bitcoin developers tends to not change the core, but you can
consider it for next big change.


Regards,
Mostafa

[-- Attachment #2: Type: text/html, Size: 1035 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [bitcoin-dev] Stamping transaction
  2020-06-05 12:05 [bitcoin-dev] Stamping transaction Mostafa Sedaghat joo
@ 2020-06-07  0:40 ` ZmnSCPxj
  2020-06-07  7:27   ` Mostafa Sedaghat joo
  0 siblings, 1 reply; 6+ messages in thread
From: ZmnSCPxj @ 2020-06-07  0:40 UTC (permalink / raw)
  To: Mostafa Sedaghat joo, Bitcoin Protocol Discussion

Good morning Mostafa,

First off, the proposed mechanism can be made into a softfork by using an unspendable `scriptPubKey` with 0 output value.

For example, a stamp could by convention be any 0-value output whose `scriptPubKey` is `<blockhash> OP_0`, which should be unspendable.

Post-softfork nodes would reject blocks where some transaction is stamped and the stamped `<blockhash>` is not within the last N blocks.
Pre-softfork nodes would not see anything special about the unspendable `scriptPubKey` and would just accept it (but would not relay such transactions due to standardness).

Engineering-wise, block validation now needs to memorize the last N block hashes.

The mempool design currently assumes that a transaction that enters the mempool is always valid unless any UTXOs it spends have been removed.
This is important since miner block selection algorithms assume the mempool contains transactions that are currently valid.
Thus, there is the additional need to drop transactions from the mempool if they are stamped with a block that has dropped from the stamp TTL.

Another issue is incentives.
The stamp takes up blockchain space that is paid for by the creator of the transaction.
Further, the creator of the transaction gains no advantage from the stamped transaction; it is others who gain an advantage (the stamped transaction is more likely to be dropped from the mempool).
Discounting the stamp somehow will probably make this into a hardfork.
It might be sneaked into the witness somehow by adding it as a field somewhere in the new parts of Taproot (there is, a new block of data in Taproot that can be used for this), but note that the cost will still be non-zero (and users of this feature will still have a disadvantage in that their transactions are more likely to be dropped from the mempool).

Finally, it is expected to increase bandwidth use since a dropped stamped transaction will probably be rebroadcast with a new stamp, so effectively the transaction is retransmitted again with a different stamp.


Regards,
ZmnSCPxj


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [bitcoin-dev] Stamping transaction
  2020-06-07  0:40 ` ZmnSCPxj
@ 2020-06-07  7:27   ` Mostafa Sedaghat joo
  2020-06-07 15:01     ` ZmnSCPxj
  0 siblings, 1 reply; 6+ messages in thread
From: Mostafa Sedaghat joo @ 2020-06-07  7:27 UTC (permalink / raw)
  To: ZmnSCPxj; +Cc: Bitcoin Protocol Discussion

[-- Attachment #1: Type: text/plain, Size: 4426 bytes --]

Good day ZmnSCPxj

Thank you so much for your time to read my proposal.
About your comments, I do agree with some of them but maybe we need to
discuss more about them.
You might agree that any changes (especially a fundamental change like
stamping transactions) comes with advantages and probably some
disadvantages. I believe the advantages of stamping transactions are worth
having it.


*The main point of stamping transactions is decoupling transactions from
the block. *

*Blockchain size matters*
SegWit is a good witness that shows blockchain size matters. Nowadays, Data
storage is cheap and easy, but that doesn't mean it's a simple matter. If
you need to have a data-center to keep a copy of a blockchain, then you are
far from a decentralization system.

*A Solution*
Stamping transaction is a simple idea to keep the size of the blockchain as
small as possible. The question that I was looking to answer is how we can
decouple the transaction from the blocks.
Who cares about the transaction that happened 10 years ago. In the real
world you may go to your bank and ask them to give you transaction history.
But they probably have limits. They might say we just only keep the last 3
months in our system.

*Implementation*

> First off, the proposed mechanism can be made into a softfork by using an
unspendable `scriptPubKey` with 0 output value.
SoftFork is not possible here. Because the transaction will not be saved
inside the block (only tx hashes). Block format needs to be changed.
Therefore the block will be invalid.

> Engineering-wise, block validation now needs to memorize the last N block
hashes.
I don't think we need to memorize the last N block hashes.  We can have
something like:
```
Current_Height - Height_Of(tx.stamp) <= N
```
*Incentives*
I think Stamping transactions have nothing to do with the
incentivization mechanism.  Forgive me if I couldn't get your point.

*Mempool*
It's bad of me that I don't really know how mempool works in Bitcoin. My
assumption is that there are some junk transactions (transactions that are
valid but have very low or zero fees) inside the mempool. Stamping
transactions might help to get rid of them time to time.

Best Regards,
Mostafa


On Sun, Jun 7, 2020 at 8:40 AM ZmnSCPxj <ZmnSCPxj@protonmail.com> wrote:

> Good morning Mostafa,
>
> First off, the proposed mechanism can be made into a softfork by using an
> unspendable `scriptPubKey` with 0 output value.
>
> For example, a stamp could by convention be any 0-value output whose
> `scriptPubKey` is `<blockhash> OP_0`, which should be unspendable.
>
> Post-softfork nodes would reject blocks where some transaction is stamped
> and the stamped `<blockhash>` is not within the last N blocks.
> Pre-softfork nodes would not see anything special about the unspendable
> `scriptPubKey` and would just accept it (but would not relay such
> transactions due to standardness).
>
> Engineering-wise, block validation now needs to memorize the last N block
> hashes.
>
> The mempool design currently assumes that a transaction that enters the
> mempool is always valid unless any UTXOs it spends have been removed.
> This is important since miner block selection algorithms assume the
> mempool contains transactions that are currently valid.
> Thus, there is the additional need to drop transactions from the mempool
> if they are stamped with a block that has dropped from the stamp TTL.
>
> Another issue is incentives.
> The stamp takes up blockchain space that is paid for by the creator of the
> transaction.
> Further, the creator of the transaction gains no advantage from the
> stamped transaction; it is others who gain an advantage (the stamped
> transaction is more likely to be dropped from the mempool).
> Discounting the stamp somehow will probably make this into a hardfork.
> It might be sneaked into the witness somehow by adding it as a field
> somewhere in the new parts of Taproot (there is, a new block of data in
> Taproot that can be used for this), but note that the cost will still be
> non-zero (and users of this feature will still have a disadvantage in that
> their transactions are more likely to be dropped from the mempool).
>
> Finally, it is expected to increase bandwidth use since a dropped stamped
> transaction will probably be rebroadcast with a new stamp, so effectively
> the transaction is retransmitted again with a different stamp.
>
>
> Regards,
> ZmnSCPxj
>

[-- Attachment #2: Type: text/html, Size: 5265 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [bitcoin-dev] Stamping transaction
  2020-06-07  7:27   ` Mostafa Sedaghat joo
@ 2020-06-07 15:01     ` ZmnSCPxj
  2020-06-09  9:34       ` Mostafa Sedaghat joo
  0 siblings, 1 reply; 6+ messages in thread
From: ZmnSCPxj @ 2020-06-07 15:01 UTC (permalink / raw)
  To: Mostafa Sedaghat joo; +Cc: Bitcoin Protocol Discussion

Good morning Mostafa,


> The main point of stamping transactions is decoupling transactions from the block. 
>
> Blockchain size matters
> SegWit is a good witness that shows blockchain size matters. Nowadays, Data storage is cheap and easy, but that doesn't mean it's a simple matter. If you need to have a data-center to keep a copy of a blockchain, then you are far from a decentralization system. 
>
> A Solution
> Stamping transaction is a simple idea to keep the size of the blockchain as small as possible. The question that I was looking to answer is how we can decouple the transaction from the blocks.
> Who cares about the transaction that happened 10 years ago. In the real world you may go to your bank and ask them to give you transaction history. But they probably have limits. They might say we just only keep the last 3 months in our system. 

Stamping transaction is not how you would be able to keep **blockchain** size low.

The reason why very old history is retained is that, if a new node is brought up, you need to prove to that node that you are in fact the correct owner of the current coins.
Thus the entire history of Bitcoin is needed when starting a new node, and why archive nodes exist.

You might argue that banks do not do that, and that is because we want to do better than banks; we know that existing currency systems have not only the "official" minter, but also many "unofficial" minters (commonly called counterfeiters) which dilute the value of the currency.
It is this insistence on a full accounting of the provenance for every satoshi that separates Bitcoin from previous currency systems; bank fraud exists, and it hides in such sloppy techniques as deleting old transaction records.

Work has been done to have client-side validation (i.e. the owner of a coin keeps the entire history, and when paying, you hand over the entire history of your coin to the payee, instead of everyone validating every transaction).
Look up Peter Todd for some initial work on this.


> Implementation
>
> > First off, the proposed mechanism can be made into a softfork by using an unspendable `scriptPubKey` with 0 output value.
> SoftFork is not possible here. Because the transaction will not be saved inside the block (only tx hashes). Block format needs to be changed. Therefore the block will be invalid.

That greatly reduces the chances your proposal will get into Bitcoin; you would need to have very good advantages to counterbalance the tremendous risk that hardforks introduce in the continuity of the coin.

Bitcoin has never gone through a hardfork that has not instead created a new cryptocurrency, so any solution that requires a hardfork is going to be unlikely to be accepted by everyone.

> > Engineering-wise, block validation now needs to memorize the last N block hashes.
> I don't think we need to memorize the last N block hashes.  We can have something like:
> ```
> Current_Height - Height_Of(tx.stamp) <= N 
> ```

...


`Height_Of()` would basically be a mapping from block hashes to block heights, with the number of elements equal to the height of the blockchain, and thus continuously growing.
Thus, validation is expected to become more expensive as the blockchain grows.

Since stamped transactions have a time-to-live anyway, instead you can use a *set* of the most recent N block hashes.
Then you simply check if the stamp is in the set.
This creates a data structure that is constant in size (at each block, you remove the block from N blocks ago), which is good for validation.

> Incentives
> I think Stamping transactions have nothing to do with the incentivization mechanism.  Forgive me if I couldn't get your point.

A stamped tranasction has a stamp, an unstamped transaction has no stamp.
The stamped transaction is larger because of the stamp.
Larger transactions are more expensive because fees.

Thus, stamped transactions are more expensive than unstamped transactions.

Convince me why I would make *my* transaction stamped when I can just convince *everyone else* to stamp *their* transactions and use unstamped transactions myself.

If you propose that all transactions must be stamped in a new version of Bitcoin, then take note that users will prefer to run older versions and never upgrade to the new version that requires stamped transactions.
Why should users prefer a more expensive transaction format?
For the good of the network?
That is precisely an incentives problem: if it is so good for the network, then it should be good for an individual user, because the network is made up of individual users anyway; if individual users are not incentivized to use it, then that fact suggests it might not be as good for the network as you might think.

If you answer "the stamp can be discounted" then be aware that validating the stamp is still a cost on every node, and it is that cost that we want to be reflected in pricing every byte in the transaction.
For instance, UTXOs are retained, potentially indefinitely, and the UTXO lookup structure has to be very fast and is referred to at every transaction validation, so outputs (which create new UTXO entries) in SegWit are 4x more expensive than signatures, since signatures are only validated once when the transaction is queued to be put in the mempool.


> Mempool
> It's bad of me that I don't really know how mempool works in Bitcoin. My assumption is that there are some junk transactions (transactions that are valid but have very low or zero fees) inside the mempool. Stamping transactions might help to get rid of them time to time. 

Why would you think that stamping reduces mempool size?

If I wanted to I could just re-send the transaction with a fresh stamp.
Then the mempool usage would still be the same, and bandwidth use will increase (because the same transaction is now re-broadcast with a fresh stamp, and the added size of the stamps themselves).


Regards,
ZmnSCPxj



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [bitcoin-dev] Stamping transaction
  2020-06-07 15:01     ` ZmnSCPxj
@ 2020-06-09  9:34       ` Mostafa Sedaghat joo
  2020-06-09 14:16         ` Chris Riley
  0 siblings, 1 reply; 6+ messages in thread
From: Mostafa Sedaghat joo @ 2020-06-09  9:34 UTC (permalink / raw)
  To: ZmnSCPxj; +Cc: Bitcoin Protocol Discussion

[-- Attachment #1: Type: text/plain, Size: 7166 bytes --]

Good day ZmnSCPxj

As I said before, I don't expect a hard fork for this change. I wanted to
share my thoughts with you guys. Anytime the bitcoin community decides to
make a hard-fork, you might consider this change as well.
I believe decoupling transactions from the block is beautiful.

 About transaction verification,
Transactions have their own way to survive. Owner of the coin can keep the
history of his transactions.
But there is no guarantee that ndes should keep all of them from the
genesis. It depends. Maybe some nodes want to keep  all the transactions,
some part of them and might nothing.
Also we can think about check pointing. When a new node connects to the
network, it doesn't need to validate all the blocks since genesis. It can
start validating from a checkpoint.

And also adding 32 bits to the header of translation (which won't be saved
inside the block) is not a big deal.


Adios,
Mostafa



On Sun, Jun 7, 2020 at 11:01 PM ZmnSCPxj <ZmnSCPxj@protonmail.com> wrote:

> Good morning Mostafa,
>
>
> > The main point of stamping transactions is decoupling transactions from
> the block.
> >
> > Blockchain size matters
> > SegWit is a good witness that shows blockchain size matters.
> Nowadays, Data storage is cheap and easy, but that doesn't mean it's a
> simple matter. If you need to have a data-center to keep a copy of a
> blockchain, then you are far from a decentralization system.
> >
> > A Solution
> > Stamping transaction is a simple idea to keep the size of the blockchain
> as small as possible. The question that I was looking to answer is how we
> can decouple the transaction from the blocks.
> > Who cares about the transaction that happened 10 years ago. In the real
> world you may go to your bank and ask them to give you transaction history.
> But they probably have limits. They might say we just only keep the last 3
> months in our system.
>
> Stamping transaction is not how you would be able to keep **blockchain**
> size low.
>
> The reason why very old history is retained is that, if a new node is
> brought up, you need to prove to that node that you are in fact the correct
> owner of the current coins.
> Thus the entire history of Bitcoin is needed when starting a new node, and
> why archive nodes exist.
>
> You might argue that banks do not do that, and that is because we want to
> do better than banks; we know that existing currency systems have not only
> the "official" minter, but also many "unofficial" minters (commonly called
> counterfeiters) which dilute the value of the currency.
> It is this insistence on a full accounting of the provenance for every
> satoshi that separates Bitcoin from previous currency systems; bank fraud
> exists, and it hides in such sloppy techniques as deleting old transaction
> records.
>
> Work has been done to have client-side validation (i.e. the owner of a
> coin keeps the entire history, and when paying, you hand over the entire
> history of your coin to the payee, instead of everyone validating every
> transaction).
> Look up Peter Todd for some initial work on this.
>
>
> > Implementation
> >
> > > First off, the proposed mechanism can be made into a softfork by using
> an unspendable `scriptPubKey` with 0 output value.
> > SoftFork is not possible here. Because the transaction will not be saved
> inside the block (only tx hashes). Block format needs to be changed.
> Therefore the block will be invalid.
>
> That greatly reduces the chances your proposal will get into Bitcoin; you
> would need to have very good advantages to counterbalance the tremendous
> risk that hardforks introduce in the continuity of the coin.
>
> Bitcoin has never gone through a hardfork that has not instead created a
> new cryptocurrency, so any solution that requires a hardfork is going to be
> unlikely to be accepted by everyone.
>
> > > Engineering-wise, block validation now needs to memorize the last N
> block hashes.
> > I don't think we need to memorize the last N block hashes.  We can have
> something like:
> > ```
> > Current_Height - Height_Of(tx.stamp) <= N
> > ```
>
> ...
>
>
> `Height_Of()` would basically be a mapping from block hashes to block
> heights, with the number of elements equal to the height of the blockchain,
> and thus continuously growing.
> Thus, validation is expected to become more expensive as the blockchain
> grows.
>
> Since stamped transactions have a time-to-live anyway, instead you can use
> a *set* of the most recent N block hashes.
> Then you simply check if the stamp is in the set.
> This creates a data structure that is constant in size (at each block, you
> remove the block from N blocks ago), which is good for validation.
>
> > Incentives
> > I think Stamping transactions have nothing to do with the
> incentivization mechanism.  Forgive me if I couldn't get your point.
>
> A stamped tranasction has a stamp, an unstamped transaction has no stamp.
> The stamped transaction is larger because of the stamp.
> Larger transactions are more expensive because fees.
>
> Thus, stamped transactions are more expensive than unstamped transactions.
>
> Convince me why I would make *my* transaction stamped when I can just
> convince *everyone else* to stamp *their* transactions and use unstamped
> transactions myself.
>
> If you propose that all transactions must be stamped in a new version of
> Bitcoin, then take note that users will prefer to run older versions and
> never upgrade to the new version that requires stamped transactions.
> Why should users prefer a more expensive transaction format?
> For the good of the network?
> That is precisely an incentives problem: if it is so good for the network,
> then it should be good for an individual user, because the network is made
> up of individual users anyway; if individual users are not incentivized to
> use it, then that fact suggests it might not be as good for the network as
> you might think.
>
> If you answer "the stamp can be discounted" then be aware that validating
> the stamp is still a cost on every node, and it is that cost that we want
> to be reflected in pricing every byte in the transaction.
> For instance, UTXOs are retained, potentially indefinitely, and the UTXO
> lookup structure has to be very fast and is referred to at every
> transaction validation, so outputs (which create new UTXO entries) in
> SegWit are 4x more expensive than signatures, since signatures are only
> validated once when the transaction is queued to be put in the mempool.
>
>
> > Mempool
> > It's bad of me that I don't really know how mempool works in Bitcoin. My
> assumption is that there are some junk transactions (transactions that are
> valid but have very low or zero fees) inside the mempool. Stamping
> transactions might help to get rid of them time to time.
>
> Why would you think that stamping reduces mempool size?
>
> If I wanted to I could just re-send the transaction with a fresh stamp.
> Then the mempool usage would still be the same, and bandwidth use will
> increase (because the same transaction is now re-broadcast with a fresh
> stamp, and the added size of the stamps themselves).
>
>
> Regards,
> ZmnSCPxj
>
>

[-- Attachment #2: Type: text/html, Size: 7985 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [bitcoin-dev] Stamping transaction
  2020-06-09  9:34       ` Mostafa Sedaghat joo
@ 2020-06-09 14:16         ` Chris Riley
  0 siblings, 0 replies; 6+ messages in thread
From: Chris Riley @ 2020-06-09 14:16 UTC (permalink / raw)
  To: Mostafa Sedaghat joo; +Cc: Bitcoin Protocol Discussion

[-- Attachment #1: Type: text/plain, Size: 9730 bytes --]

Hello,

Just a few comments.

>But there is no guarantee that ndes should keep all of them from the
genesis. It depends. Maybe some nodes want to keep  all the transactions,
some part of them and might nothing.
There is no guarantee that nodes keep them all from the genesis now, nodes
can turn on pruning if the operator doesn't desire to keep all the
transactions from the genesis block
(https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning).
Likewise, light clients may not keep any transaction history.

>Also we can think about check pointing. When a new node connects to the
network, it doesn't need to validate all the blocks since genesis. It can
start validating from a checkpoint.
>Transactions have their own way to survive. Owner of the coin can keep the
history of his transactions.
There have been some checkpoint discussions on here too, which have
discussed the pros and cons of them.
see, e.g.:
site:https://lists.linuxfoundation.org/pipermail/bitcoin-dev/ checkpointand:
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-May/016001.html
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-August/017209.html

Without introducing trusted people, how can you prove that the "owner" is
person A or B without verification from the genesis block?  For example, A
or B could claim to be the owner and provide an altered client with an
altered checkpoint to "prove" it.

>Anytime the bitcoin community decides to make a hard-fork, you might
consider this change as well
From reading the initial bitcoin paper, many proposals etc since and having
been around the "bitcoin community" for 9 years, I think that this change
has a very, very small chance of ever happening because full transaction
verification is an important part of the blockchain bank.   Not to say this
isn't a useful, interesting, informative, and educational discussion, but
it seems unlikely to happen.  Likewise,  it could lead to something related
that would be likely to occur, so full discussions like this are useful.

Regards,  :-)
Chris

On Tue, Jun 9, 2020 at 7:20 AM Mostafa Sedaghat joo via bitcoin-dev <
bitcoin-dev@lists.linuxfoundation.org> wrote:

> Good day ZmnSCPxj
>
> As I said before, I don't expect a hard fork for this change. I wanted to
> share my thoughts with you guys. Anytime the bitcoin community decides to
> make a hard-fork, you might consider this change as well.
> I believe decoupling transactions from the block is beautiful.
>
>  About transaction verification,
> Transactions have their own way to survive. Owner of the coin can keep the
> history of his transactions.
> But there is no guarantee that ndes should keep all of them from the
> genesis. It depends. Maybe some nodes want to keep  all the transactions,
> some part of them and might nothing.
> Also we can think about check pointing. When a new node connects to the
> network, it doesn't need to validate all the blocks since genesis. It can
> start validating from a checkpoint.
>
> And also adding 32 bits to the header of translation (which won't be saved
> inside the block) is not a big deal.
>
>
> Adios,
> Mostafa
>
>
>
> On Sun, Jun 7, 2020 at 11:01 PM ZmnSCPxj <ZmnSCPxj@protonmail.com> wrote:
>
>> Good morning Mostafa,
>>
>>
>> > The main point of stamping transactions is decoupling transactions from
>> the block.
>> >
>> > Blockchain size matters
>> > SegWit is a good witness that shows blockchain size matters.
>> Nowadays, Data storage is cheap and easy, but that doesn't mean it's a
>> simple matter. If you need to have a data-center to keep a copy of a
>> blockchain, then you are far from a decentralization system.
>> >
>> > A Solution
>> > Stamping transaction is a simple idea to keep the size of the
>> blockchain as small as possible. The question that I was looking to answer
>> is how we can decouple the transaction from the blocks.
>> > Who cares about the transaction that happened 10 years ago. In the real
>> world you may go to your bank and ask them to give you transaction history.
>> But they probably have limits. They might say we just only keep the last 3
>> months in our system.
>>
>> Stamping transaction is not how you would be able to keep **blockchain**
>> size low.
>>
>> The reason why very old history is retained is that, if a new node is
>> brought up, you need to prove to that node that you are in fact the correct
>> owner of the current coins.
>> Thus the entire history of Bitcoin is needed when starting a new node,
>> and why archive nodes exist.
>>
>> You might argue that banks do not do that, and that is because we want to
>> do better than banks; we know that existing currency systems have not only
>> the "official" minter, but also many "unofficial" minters (commonly called
>> counterfeiters) which dilute the value of the currency.
>> It is this insistence on a full accounting of the provenance for every
>> satoshi that separates Bitcoin from previous currency systems; bank fraud
>> exists, and it hides in such sloppy techniques as deleting old transaction
>> records.
>>
>> Work has been done to have client-side validation (i.e. the owner of a
>> coin keeps the entire history, and when paying, you hand over the entire
>> history of your coin to the payee, instead of everyone validating every
>> transaction).
>> Look up Peter Todd for some initial work on this.
>>
>>
>> > Implementation
>> >
>> > > First off, the proposed mechanism can be made into a softfork by
>> using an unspendable `scriptPubKey` with 0 output value.
>> > SoftFork is not possible here. Because the transaction will not be
>> saved inside the block (only tx hashes). Block format needs to be changed.
>> Therefore the block will be invalid.
>>
>> That greatly reduces the chances your proposal will get into Bitcoin; you
>> would need to have very good advantages to counterbalance the tremendous
>> risk that hardforks introduce in the continuity of the coin.
>>
>> Bitcoin has never gone through a hardfork that has not instead created a
>> new cryptocurrency, so any solution that requires a hardfork is going to be
>> unlikely to be accepted by everyone.
>>
>> > > Engineering-wise, block validation now needs to memorize the last N
>> block hashes.
>> > I don't think we need to memorize the last N block hashes.  We can have
>> something like:
>> > ```
>> > Current_Height - Height_Of(tx.stamp) <= N
>> > ```
>>
>> ...
>>
>>
>> `Height_Of()` would basically be a mapping from block hashes to block
>> heights, with the number of elements equal to the height of the blockchain,
>> and thus continuously growing.
>> Thus, validation is expected to become more expensive as the blockchain
>> grows.
>>
>> Since stamped transactions have a time-to-live anyway, instead you can
>> use a *set* of the most recent N block hashes.
>> Then you simply check if the stamp is in the set.
>> This creates a data structure that is constant in size (at each block,
>> you remove the block from N blocks ago), which is good for validation.
>>
>> > Incentives
>> > I think Stamping transactions have nothing to do with the
>> incentivization mechanism.  Forgive me if I couldn't get your point.
>>
>> A stamped tranasction has a stamp, an unstamped transaction has no stamp.
>> The stamped transaction is larger because of the stamp.
>> Larger transactions are more expensive because fees.
>>
>> Thus, stamped transactions are more expensive than unstamped transactions.
>>
>> Convince me why I would make *my* transaction stamped when I can just
>> convince *everyone else* to stamp *their* transactions and use unstamped
>> transactions myself.
>>
>> If you propose that all transactions must be stamped in a new version of
>> Bitcoin, then take note that users will prefer to run older versions and
>> never upgrade to the new version that requires stamped transactions.
>> Why should users prefer a more expensive transaction format?
>> For the good of the network?
>> That is precisely an incentives problem: if it is so good for the
>> network, then it should be good for an individual user, because the network
>> is made up of individual users anyway; if individual users are not
>> incentivized to use it, then that fact suggests it might not be as good for
>> the network as you might think.
>>
>> If you answer "the stamp can be discounted" then be aware that validating
>> the stamp is still a cost on every node, and it is that cost that we want
>> to be reflected in pricing every byte in the transaction.
>> For instance, UTXOs are retained, potentially indefinitely, and the UTXO
>> lookup structure has to be very fast and is referred to at every
>> transaction validation, so outputs (which create new UTXO entries) in
>> SegWit are 4x more expensive than signatures, since signatures are only
>> validated once when the transaction is queued to be put in the mempool.
>>
>>
>> > Mempool
>> > It's bad of me that I don't really know how mempool works in Bitcoin.
>> My assumption is that there are some junk transactions (transactions that
>> are valid but have very low or zero fees) inside the mempool. Stamping
>> transactions might help to get rid of them time to time.
>>
>> Why would you think that stamping reduces mempool size?
>>
>> If I wanted to I could just re-send the transaction with a fresh stamp.
>> Then the mempool usage would still be the same, and bandwidth use will
>> increase (because the same transaction is now re-broadcast with a fresh
>> stamp, and the added size of the stamps themselves).
>>
>>
>> Regards,
>> ZmnSCPxj
>>
>> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists.linuxfoundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
>

[-- Attachment #2: Type: text/html, Size: 11964 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-06-09 14:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-05 12:05 [bitcoin-dev] Stamping transaction Mostafa Sedaghat joo
2020-06-07  0:40 ` ZmnSCPxj
2020-06-07  7:27   ` Mostafa Sedaghat joo
2020-06-07 15:01     ` ZmnSCPxj
2020-06-09  9:34       ` Mostafa Sedaghat joo
2020-06-09 14:16         ` Chris Riley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox