Transactions are made outside of blocks, and transmitted unconfirmed between all nodes in a network; Nodes advertise new transactions assuming they pass verification to other nodes, who ask for the transaction if they have not seen it before.

It therefore seems redundant to include the full transaction within a block, because we can be pretty sure that most nodes already have most transactions, and if they are missing a transaction on receiving a block, must know at least 1 peer who can supply the transaction on demand (the node that sent them the block).

An SHA256 hash of a transaction is much smaller than an actual transaction, 32 Bytes versus at least 200 Bytes, so why not just list the transaction hashes within a block and let each node confirm they have all the transactions locally that are associated to that block, by calculating transaction hashes and confirm they have everything needed?

Im sure I must be missing something fundamental.

EDIT: I suppose its inefficient on storage, assuming we add 32 Bytes to every transaction, and then an associated 32 Bytes inside the block for each transaction. 100 Transactions per second would fit inside a 64KB block (at 20 seconds per block), but would add an additional, 188GB storage per annum. Even so storage is relatively trivial compared to block propagation, isn't it?

  • For some reason this sounds eerily similar to how I imagine block pipelining would work. It was briefly mentioned in the most recent mid-month update: youtube.com/watch?v=_JNK4eDZFMA
    – zhekson
    Dec 18, 2021 at 13:28

1 Answer 1


there is indeed a Cardano-improvement-proposal addressing such reference scripts


also here on github https://github.com/cardano-foundation/CIPs/tree/master/CIP-0033

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.