Saturday, July 6, 2024

output – What’s happening with this “NULL tackle enter” transaction?

When a receiver asks to be despatched cash, they specify the situations below which they need to have the ability to spend the funds in an output script. Later when the receiver needs to spend their funds, they should present an enter script that satisfies the output script of the output they’re spending. In transaction validation, the enter script is evaluated first, then the ensuing stack is used as the place to begin to judge the output script.

For instance with P2PKH, the enter script accommodates a signature and a public key, the output script accommodates OP_DUP OP_HASH160 pubkeyhash OP_EQUALVERIFY OP_CHECKSIG.

In analysis the enter script pushes first the signature then the pubkey on the stack. The stack is then handed to the output script which:

  1. duplicates the pubkey
  2. replaces the primary of the 2 pubkey copies with a hash of the pubkey
  3. pushes the pubkeyhash to the stack
  4. Verifies that the pubkeyhash pushed from the output script and the pubkeyhash hashed from the pubkey within the enter are equal
  5. Checks that the remaining pubkey and signature quantity to a legitimate signature of the transaction.

There are a selection of output scripts which are standardized for frequent use. A few of these cowl single-sig usecases, however there are additionally a number of commonplace output varieties for complicated scripts. Addresses are a handy shorthand to speak the receiver’s output scripts to the sender for traditional output script varieties. Even earlier than P2SH was launched, a receiver might outline arbitrary situations by writing out the corresponding output script utilizing the opcodes outlined in Bitcoin Script. These naked scripts are unusual, since their arbitrary content material doesn’t lend itself to an tackle commonplace. The UX is horrible: as an alternative of an tackle with a checksum, the receiver and sender need to change the precise script, and the sender must create a uncooked transaction manually specifying the output script. (P2SH was launched to enhance the UX round defining your personal spending situations whereas permitting for an tackle commonplace.)

The transaction you’re looking at accommodates such a naked script: as an alternative of following one of many commonplace output schemes, the receiver outlined their very own output script and glad it accordingly within the succeeding enter.

The output script specified within the output a601…0e0c:0 of the previous transaction is:

OP_DUP
OP_0
OP_LESSTHAN
OP_VERIFY
OP_ABS
OP_PUSHNUM_1
OP_PUSHNUM_16
OP_WITHIN
OP_TOALTSTACK
OP_PUSHBYTES_33 0378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71
OP_CHECKSIGVERIFY
OP_FROMALTSTACK

The enter script within the first enter of 54fa…814f is:

OP_PUSHBYTES_72 
3045022100d92e4b61452d91a473a43cde4b469a472467c0ba0cbd5ebba0834e4f4762810402204802b76b7783db57ac1f61d2992799810e173e91055938750815b6d8a675902e01
OP_PUSHNUM_NEG1

The script basically quantities to an obfuscated model of a P2PK output as might be seen by evaluating the script execution:

  1. The enter script pushes a signature onto the stack.
    Present Stack (left is backside): SIG
  2. The quantity -1 is pushed onto the stack
    Present Stack: SIG -1
  3. The stack is handed to output script validation
  4. The quantity -1 is duplicated
    Present Stack: SIG -1 -1
  5. A 0 is pushed onto the stack
    Present Stack: SIG -1 -1 0
  6. OP_LESSTHAN consumes two objects (a, b) from the stack returns a 1 to the stack as a result of a (-1) is lower than b (0).
    Present Stack: SIG -1 1
  7. OP_VERIFY consumes the 1 on prime of the stack and succeeds
    Present Stack: SIG -1
  8. OP_ABS replaces the highest stack merchandise with its absolute worth
    Present Stack: SIG 1
  9. A 1 is pushed to the stack
    Present Stack: SIG 1 1
  10. A 16 is pushed to the stack
    Present Stack: SIG 1 1 16
  11. OP_WITHIN consumes three values (x min max) and returns a 1 as a result of x is larger than or equal to the minimal and smaller than the utmost
    Present Stack: SIG 1
  12. OP_TOALTSTACK removes the highest component from the stack and places it on the choice stack.
    Present Stack: SIG, Altstack: 1
  13. A pubkey is pushed on the stack:
    Present Stack: SIG PUBKEY, Altstack: 1
  14. OP_CHECKSIGVERIFY consumes the signature and pubkey and verifies that the signature is legitimate within the context of the transaction and pubkey.
    Present Stack: <empty>, Altstack: 1
  15. OP_FROMALTSTACK removes the highest worth of the alt stack and locations it on the stack:
    Present Stack: 1, Altstack: <empty>
  16. The script succeeds as a result of it ends with a single 1 on the stack.

These transactions might break some block explorers within the sense that some block explorers might solely have help for traditional scripts and wouldn’t correctly show naked outputs. It appears to me that fashionable block explorers now not undergo from that: Mempool.space shows the entire output sc appears to doript just fine
e.g. mempool.area reveals the output script within the previous transaction…

enter image description here
… and the spending transaction simply fantastic.

In case “breaking block explorers” was understood as a privateness profit, this transaction is just not extra non-public. In Bitcoin transactions don’t spend funds from addresses: addresses merely specify the situations below which funds might be spent, however every enter should specify precisely which transaction output it’s spending.
The previous transaction a601…0e0c created a single output a601…0e0c:0 with the talked about naked output script that could possibly be spent by the proprietor of that script, and the primary enter of 54fa…814f explicitly spent that a601…0e0c:0, to create one other transaction output 54fa…814f:0 that may be spent by the receiver in charge of the tackle 1GMaxweLLbo8mdXvnnC19Wt2wigiYUKgEB.
I.e. each UTXO is uniquely identifiable and the transaction graph is public info. The absence of an tackle has no privateness profit.

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles