簡體   English   中英

區塊鏈如何驗證交易金額有效

[英]How blockchain verifies transaction amount is valid

我是區塊鏈新手。 我了解區塊鏈會保留所有交易的記錄,並且每個交易都使用私鑰簽名。 但是,為什么沒有人可以輸入任意數量的比特幣交易? 假設一個地址只有1個比特幣,但是​​它的所有者可以創建100個比特幣的交易並仍然對其進行簽名。 比特幣用於驗證交易的出入金額的機制是什么?

比特幣的區塊鏈包含曾經發生過的所有交易的歷史記錄。 客戶當然可以選擇減少存儲量,並且可以通過不存儲已經花費很長時間的交易來修剪區塊鏈。

從傳統的銀行總賬的意義上講,比特幣地址在技術上沒有“余額”。 相反,地址可以處理發送給它的交易。

為了深入研究技術細節,讓我們看一下地址1PkCAVKjPz1YK7iJwT8xTLxBXR1av8dL98 (我擁有)。

最近,我在TxID 432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705的交易中收到了一筆很小的0.004 BTC交易。

的(十六進制編碼)該事務的原始數據是: 0100000001e9a24c1d1b8d10b13482cdcbbb90d894577292c4d0c0c1427411fb9d82ea710c010000006b483045022100d9a5433c1381b39b7e02b0b0f042990e7c16cfea252b05ccfef2e85c2dab2a6f022057c7def782fe3b0d7e5e0eae277d2a5890844da7d72309817a2dac22a6307c6001210390d78cb0c1d34d4417db7e0a9a9f125a689dc29dc2197a01a5f827a20f870f62ffffffff01801a0600000000001976a914f97df8f593e0056d337c274fd81a163f47a17d3788ac00000000

以其人類可讀的形式是:

{
  "txid": "432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705",
  "size": 192,
  "version": 1,
  "locktime": 0,
  "vin": [
    {
      "txid": "0c71ea829dfb117442c1c0d0c492725794d890bbcbcd8234b1108d1b1d4ca2e9",
      "vout": 1,
      "scriptSig": {
        "asm": "3045022100d9a5433c1381b39b7e02b0b0f042990e7c16cfea252b05ccfef2e85c2dab2a6f022057c7def782fe3b0d7e5e0eae277d2a5890844da7d72309817a2dac22a6307c60[ALL] 0390d78cb0c1d34d4417db7e0a9a9f125a689dc29dc2197a01a5f827a20f870f62",
        "hex": "483045022100d9a5433c1381b39b7e02b0b0f042990e7c16cfea252b05ccfef2e85c2dab2a6f022057c7def782fe3b0d7e5e0eae277d2a5890844da7d72309817a2dac22a6307c6001210390d78cb0c1d34d4417db7e0a9a9f125a689dc29dc2197a01a5f827a20f870f62"
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.00400000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 f97df8f593e0056d337c274fd81a163f47a17d37 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914f97df8f593e0056d337c274fd81a163f47a17d3788ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "1PkCAVKjPz1YK7iJwT8xTLxBXR1av8dL98"
        ]
      }
    }
  ]
}

因此,地址1PkCAVKjPz1YK7iJwT8xTLxBXR1av8dL98能夠“花費”交易432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705 該交易的輸出值為0.004 BTC,因此我無法進行嘗試花費更多的比特幣交易。 但是,無論如何,我們都嘗試這樣做。

我將創建一個原始交易,嘗試從交易中輸出0.01 BTC到1MgLu9L7ftmGQM84xhKYKw8pTXiSANwggs ,輸出余額為0.004 BTC:

bitcoin-rpc createrawtransaction '[{"txid":"432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705","vout":0}]' '{"1MgLu9L7ftmGQM84xhKYKw8pTXiSANwggs":0.01}'

返回原始交易:

010000000105e7a355a6c2492a70d90ce0c9d44d44249ab57aeb0efbca7562052ebe9427430000000000ffffffff0140420f00000000001976a914e2d3595bd0a55c16f4b19f5cd996568dd7e811f688ac00000000

然后,我可以簽署交易:

bitcoin-rpc signrawtransaction 010000000105e7a355a6c2492a70d90ce0c9d44d44249ab57aeb0efbca7562052ebe9427430000000000ffffffff0140420f00000000001976a914e2d3595bd0a55c16f4b19f5cd996568dd7e811f688ac00000000

返回:

{
      "hex": "010000000105e7a355a6c2492a70d90ce0c9d44d44249ab57aeb0efbca7562052ebe942743000000006b483045022100ce3fad8ccdee48f1fe9060ef81624d3bbe721293feb8ee06a96751e65b9c423e0220106a3e80d5fdf93df5dbf037d8cfd32af70a405586e12294c937308a3c57b10e012102f2acb810346866908108dd86462ee5400b15786739f5e908711d2d15d9dd2238ffffffff0140420f00000000001976a914e2d3595bd0a55c16f4b19f5cd996568dd7e811f688ac00000000",
      "complete": true
}

然后,我可以將返回的十六進制(格式正確的交易)提交給網絡:

bitcoin-rpc sendrawtransaction 010000000105e7a355a6c2492a70d90ce0c9d44d44249ab57aeb0efbca7562052ebe942743000000006b483045022100ce3fad8ccdee48f1fe9060ef81624d3bbe721293feb8ee06a96751e65b9c423e0220106a3e80d5fdf93df5dbf037d8cfd32af70a405586e12294c937308a3c57b10e012102f2acb810346866908108dd86462ee5400b15786739f5e908711d2d15d9dd2238ffffffff0140420f00000000001976a914e2d3595bd0a55c16f4b19f5cd996568dd7e811f688ac00000000

這給了我錯誤:

66: insufficient priority (code -26)

這是一個客戶端錯誤,但是如果我要成功地將原始事務廣播到網絡,其他對等方將簡單地查找引用(或“花掉”的)事務432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705比我嘗試花費的交易的總輸出金額高。

此規則有一個例外:幣庫交易為礦工生成比特幣,因此被允許輸出正確的大宗補貼(最初為50 BTC,但目前在大約一個半月前減半后為12.5 BTC)加上交易費用為該區塊中包含的所有交易。

我知道這篇文章已經很老了,但是有一個完整的列表來驗證比特幣交易:

https://en.bitcoin.it/wiki/Protocol_rules#.22tx.22_messages

也許有關比特幣交易如何工作的鏈接將為您提供幫助。 查看“輸入和輸出量不匹配怎么辦?”一節。

此外,由於區塊鏈使用分布式分類帳,因此所有節點都將在接受交易之前驗證交易。 此外,應在鏈上配備審核員,以確保不會發生欺詐活動。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM