3

I was reading the Bitcoin wiki on how the Bitcoin protocol has no "From" address and the closest thing to a from address is a "previously receiving address".

The article then proceeds to show a transaction that breaks Bitcoin chain explorers: 54fabd73f1d20c980a0686bf0035078e07f69c58437e4d586fb29aa0bee9814f

This is indeed true. Web-based explorers such as blockchain.com and BlockCypher cannot resolve the Input address.

I see in the transaction's details that the tx creator has placed a PUSHDATA(72)[somedata] operation at the Input.

Can this effectively be used to break/hide a Bitcoin transaction chain? If yes, what is the point for alternative Privacy-oriented coins such as Monero, when absolute privacy in transactions (hidden-input transactions) can be created in Bitcoin?

I'm probably misunderstanding something, and If you can point me in the right direction, I'd be more than grateful.

2

Can this effectively be used to break/hide a Bitcoin transaction chain?

No, the block explorers you've mentioned simply do not include code that is capable of decyphering the nonstandard transaction you've linked to.

Importantly: Bitcoin transactions do not include a 'from address', instead they reference a valid unspent transaction output (UTXO) that they are spending. That said, the majority of transactions throughout history can be decoded to present the user with a 'from address', so this is simply a user-friendly abstraction that block explorers make. The 'from address' is not inherent to the Bitcoin protocol.

So in a simplified sense, rather than trace the transaction history via "this address, and then this address, etc", you would say "this UTXO, and then this UTXO, etc".

Thus, using bitcoin-cli you can easily trace the transaction history. Here is the output when using the getrawtransaction RPC for the transaction you mentioned, with verbosity=1:

user$ bitcoin-cli getrawtransaction 54fabd73f1d20c980a0686bf0035078e07f69c58437e4d586fb29aa0bee9814f 1
{
 "txid": "54fabd73f1d20c980a0686bf0035078e07f69c58437e4d586fb29aa0bee9814f",
  "hash": "54fabd73f1d20c980a0686bf0035078e07f69c58437e4d586fb29aa0bee9814f",
  "version": 1,
  "size": 159,
  "vsize": 159,  
  "weight": 636,
  "locktime": 0,
  "vin": [
    {
      "txid": 
"a60143eb3f8d3cd1f42cca874f35736186d67c488efd3c1b7214bbd74b310e0c",
      "vout": 0,
      "scriptSig": {
        "asm":"3045022100d92e4b61452d91a473a43cde4b469a472467c0ba0cbd5ebba0834e4f4762810402204802b76b7783db57ac1f61d2992799810e173e91055938750815b6d8a675902e[ALL] -1",
        "hex":"483045022100d92e4b61452d91a473a43cde4b469a472467c0ba0cbd5ebba0834e4f4762810402204802b76b7783db57ac1f61d2992799810e173e91055938750815b6d8a675902e014f"
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.09000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 a86e8ee2a05a44613904e18132e49b2448adc4e6 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914a86e8ee2a05a44613904e18132e49b2448adc4e688ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "1GMaxweLLbo8mdXvnnC19Wt2wigiYUKgEB"
        ]
      }
    }
  ],
  "hex":"01000000010c0e314bd7bb14721b3cfd8e487cd6866173354f87ca2cf4d13c8d3feb4301a6000000004a483045022100d92e4b61452d91a473a43cde4b469a472467c0ba0cbd5ebba0834e4f4762810402204802b76b7783db57ac1f61d2992799810e173e91055938750815b6d8a675902e014fffffffff0140548900000000001976a914a86e8ee2a05a44613904e18132e49b2448adc4e688ac00000000",
  "blockhash": 
"000000000000000c15dfb68cc1abead192f718cf8b772977d79938f3a4259afa",
  "confirmations": 299789,
  "time": 1378742541,
  "blocktime": 1378742541
}

So we can see that the input is the first output created by the transaction with id:a60143eb3f8d3cd1f42cca874f35736186d67c488efd3c1b7214bbd74b310e0c. Using the same method as above, we can look up that transaction:

user$ bitcoin-cli getrawtransaction a60143eb3f8d3cd1f42cca874f35736186d67c488efd3c1b7214bbd74b310e0c 1
{
  "txid": "a60143eb3f8d3cd1f42cca874f35736186d67c488efd3c1b7214bbd74b310e0c",
  "hash": "a60143eb3f8d3cd1f42cca874f35736186d67c488efd3c1b7214bbd74b310e0c",
  "version": 1,
  "size": 212,
  "vsize": 212,
  "weight": 848,
  "locktime": 0,
  "vin": [
    {
      "txid": 
"c079314b17b7a2c3fbe879e6fc610291c685f6f7819d70bef785295c774b1e04",
      "vout": 1,
      "scriptSig": {
        "asm":"3045022100d4f73a357e323a3f0666264bd018f25296682bd7db12979890b3952b159337d7022039ebfd0d3deeb6236545e6d05d65e9fa395544f69e5275fab2e4f73cc7c20286[ALL] 0223a6fbf80fe06efa9a8707620a1215cf6a5834e6f81ca6592b0e7195fe92eae7",
        "hex":"483045022100d4f73a357e323a3f0666264bd018f25296682bd7db12979890b3952b159337d7022039ebfd0d3deeb6236545e6d05d65e9fa395544f69e5275fab2e4f73cc7c2028601210223a6fbf80fe06efa9a8707620a1215cf6a5834e6f81ca6592b0e7195fe92eae7"
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.09000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP 0 OP_LESSTHAN OP_VERIFY OP_ABS 1 16 OP_WITHIN OP_TOALTSTACK 0378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71 OP_CHECKSIGVERIFY OP_FROMALTSTACK",
        "hex":"76009f69905160a56b210378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71ad6c",
        "type": "nonstandard"
      }
    }
  ],
  "hex":"0100000001041e4b775c2985f7be709d81f7f685c6910261fce679e8fbc3a2b7174b3179c0010000006b483045022100d4f73a357e323a3f0666264bd018f25296682bd7db12979890b3952b159337d7022039ebfd0d3deeb6236545e6d05d65e9fa395544f69e5275fab2e4f73cc7c2028601210223a6fbf80fe06efa9a8707620a1215cf6a5834e6f81ca6592b0e7195fe92eae7ffffffff0140548900000000002d76009f69905160a56b210378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71ad6c00000000",
  "blockhash": 
"0000000000000026c3b45ad70e4622dcdaffc8cad2b202d1d5a4254625166ec9",
  "confirmations": 306793,
  "time": 1375519263,
  "blocktime": 1375519263
}

And we could continue following the transaction history in this way, so you can see that this type of nonstandard transaction does not break the transaction history. Keep in mind that a bitcoin is fungible, so while we can trace a general transaction history, we cannot trace an 'exact coin' through time, as such a thing does not exist. This allows for privacy and fungibility enhancing techniques such as 'CoinJoins' to function.

  • Thank you for your well-written answer. One more comment on it, out of curiosity: What was the input UTXO for the first transaction on the genesis block? – Dimitris Sfounis Jan 2 at 23:17
  • 1
    @DimitrisSfounis that question has an interesting answer! The first tx in each block is a special type of tx with no inputs, called the coinbase transaction. The output it creates is composed of the miner's block reward + tx fees from that block. However, the genesis block is hardcoded into the client, so the UTXO set starts being populated from the second block onwards. Because of this, there is no valid UTXO for the genesis block coinbase tx, meaning those coins are unspendable. See: bitcoin.stackexchange.com/questions/10009/… – chytrik Jan 2 at 23:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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