7 - 2 執行腳本

推薦使用 btcdeb 來看腳本是怎樣執行的

首先先隨邊開個資料夾,然後用 git 把專案載下來

$ sudo apt-get install git
$ git clone https://github.com/kallewoof/btcdeb.git

接著安裝必要的編譯套件以及C++套件

$ sudo apt-get install autoconf
$ sudo apt-get install libtool
$ sudo apt-get install g++
$ sudo apt-get install pkg-config
$ sudo apt-get install make

$ cd btcdeb
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

安裝完用 which 看看應該要在以下的資料夾

$ which btcdeb
/usr/local/bin/btcdeb

Bitcoin Script language

Bitcoin script 有三部分:input, stack, execution

腳本是從「左到右」執行,每次運算子會從 stack 拿出需要的運算元,例如: OP_1 OP_2 OP_ADD

用 btcdeb 執行起來是這樣

$ btcdeb 0x$(btcc OP_1 OP_2 OP_ADD)   //要加 0x
script  |  stack
--------+--------
1       |
2       |
OP_ADD  |
#0001 1
btcdeb> step
        <> PUSH stack 01
script  |  stack
--------+--------
2       |      01
OP_ADD  |
#0002 2
btcdeb> step
        <> PUSH stack 02
script  |  stack
--------+--------
OP_ADD  |      02
        |      01
#0003 OP_ADD
btcdeb> step
        <> POP  stack
        <> POP  stack
        <> PUSH stack 03
script  |  stack
--------+--------
        |      03

回到 7 - 1 的鎖定、解鎖腳本,他們是這樣運作的

假設 scriptPubKeyOP_ADD 99 OP_EQUAL

那麼 scriptSig 就應該要是兩個加起來是 99 的 script,像是 1 98

那腳本會是這樣執行 (scriptSig) (scriptPubKey) => 1 98 OP_ADD 99 OP_EQUAL

不過比特幣的鎖定、解鎖腳本的執行有很嚴格的規定:

在執行的每一點都不能失敗

在 stack 上的值不為負數

小總結:

比特幣解鎖腳本是跟著鎖定腳本的,腳本是從左執行到右,運算子會拿出需要的運算元,再把結果放到棧上,

如果執行的每一點都沒有失敗,那麼就可以使用這筆 UTXO

results matching ""

    No results matching ""