7 - 1

比特幣每一筆交易都是被一個「密碼拼圖腳本」鎖起來,更精準的說,比特幣是

「一系列的交易,每一筆交易都是發送方解開了某交易的密碼拼圖腳本,所以發送方可以使用這筆交易;

而每一筆交易要送到接受方時,都是用密碼拼圖腳本鎖起來送給接受方」,

而密碼拼圖腳本是用「比特幣腳本」寫的。

每一筆交易都會用比特幣腳本鎖起來,如果可以解鎖這個腳本,那麼就可以使用這筆交易。

因為腳本可以撰寫,所以就可以發展出很多種不同的腳本,適合不同場景,

例如:用於公司的多簽名交易、普通錢包對錢包的交易,這兩個是用不同的比特幣腳本

以下是幾個不同的 op code,用來使用在不同腳本:

  • OP_CHECKSIG:檢查公私鑰配對,用於 P2PKH
  • OP_CHECKMULTISIG:多簽地址配對
  • OP_CHECKLOCKTIMEVERIFY:時間配對
  • OP_RETURN:無法使用的交易,通常是傳送資料用

讓我們看一下實際的腳本,首先創造一個交易,但不要 sendrawtransaction

$ utxo_txid=$(bitcoin-cli listunspent | jq -r '.[0] | .txid') 
$ utxo_vout=$(bitcoin-cli listunspent | jq -r '.[0] | .vout')
$ recipient=$(bitcoin-cli getrawchangeaddress)
$ rawtxhex=$(bitcoin-cli -named createrawtransaction inputs='''[ { "txid": "'$utxo_txid'", "vout": '$utxo_vout' } ]''' outputs='''{ "'$recipient'": 1.2985 }''')
$ signedtx=$(bitcoin-cli -named signrawtransaction hexstring=$rawtxhex | jq -r '.hex')

我們來檢視這個簽名過的交易

$ bitcoin-cli -named decoderawtransaction hexstring=$signedtx
{
  "txid": "7b5f161ff9f9275c94dca38348c91056fe6829a2b768ed82ede4bcf7c7384a68",
  "hash": "7b5f161ff9f9275c94dca38348c91056fe6829a2b768ed82ede4bcf7c7384a68",
  "size": 192,
  "vsize": 192,
  "version": 2,
  "locktime": 0,
  "vin": [
    {
      "txid": "99d2b5717fed8875a1ed3b2827dd60ae3089f9caa7c7c23d47635f6f5b397c04",
      "vout": 0,
      "scriptSig": {
        "asm": "3045022100c4ef5b531061a184404e84ab46beee94e51e8ae15ce98d2f3e10ae7774772ffd02203c546c399c4dc1d6eea692f73bb3fff490ea2e98fe300ac6a11840c7d52b6166[ALL] 0319cd3f2485e3d47552617b03c693b7f92916ac374644e22b07420c8812501cfb",
        "hex": "483045022100c4ef5b531061a184404e84ab46beee94e51e8ae15ce98d2f3e10ae7774772ffd02203c546c399c4dc1d6eea692f73bb3fff490ea2e98fe300ac6a11840c7d52b616601210319cd3f2485e3d47552617b03c693b7f92916ac374644e22b07420c8812501cfb"
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 1.29850000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 371c20fb2e9899338ce5e99908e64fd30b789313 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914371c20fb2e9899338ce5e99908e64fd30b78931388ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "mkYMA2i2vzEXjoDn4GfvPoFr3MJ62uUtMx"
        ]
      }
    }
  ]
}

vin 裡面有個 scriptSig,這個是「解鎖腳本」(unlocking script),

也就是要用這個腳本來解鎖這個 UTXO,每個 UTXO 都有解鎖腳本

scriptPubKey 則是在 vout,這是「鎖定腳本」(locking script),這是把 output 鎖住,

讓接受方用他的 scriptSig 解鎖,那麼他就可以使用

results matching ""

    No results matching ""