首页 文章

区块链如何验证交易金额是否有效

提问于
浏览
1

我是区块链的新手 . 我知道区块链会保留所有交易的记录,并且每个交易都使用私钥进行签名 . 但是,为什么不能有人进入任意数量的比特币交易?说,地址只有1比特币,但其所有者可以创建100比特币的交易,仍然签署它 . 什么是比特币的机制来验证交易的传出和传入金额?

3 回答

  • 1

    比特币的区块链包含所有交易的历史记录 . 客户当然可以选择存储更少,并且可以通过不存储已经花费很久以前的交易来修剪区块链 .

    从传统银行分类账的角度来看,比特币地址在技术上并没有“ balancer ” . 相反,地址可以花费发送给它的交易 .

    要深入研究技术细节,让我们看一下 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 能够"spend"事务 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)
    

    这是一个客户端错误,但是如果我要成功地将原始事务广播到网络,其他对等体只会查找引用的(或"spent")事务 432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705 并看到我的新事务的输出总和大于输出我试图花费的交易总额 .

    这条规则有一个例外:coinbase交易为矿工生成比特币,因此可以输出正确的区块补贴(最初为50 BTC,但目前在一个半月前减半后为12.5 BTC)加上交易费用块内包含的所有事务 .

  • 0

    我知道这篇文章已经过时但是有一个完整的列表可以验证比特币的转换:

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

  • 1

    也许关于比特币交易如何运作的link会对你有所帮助 . 看看名为"What if the input and output amounts don’t match?"的部分

    此外,由于区块链使用分布式分类帐,因此所有节点都会在接受之前验证该事务 . 此外,链上应该有审计员,以确保不会发生欺诈活动 . 希望这可以帮助 .

相关问题