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 的鎖定、解鎖腳本,他們是這樣運作的
假設 scriptPubKey
是 OP_ADD 99 OP_EQUAL
那麼 scriptSig
就應該要是兩個加起來是 99 的 script,像是 1 98
那腳本會是這樣執行 (scriptSig) (scriptPubKey)
=> 1 98 OP_ADD 99 OP_EQUAL
不過比特幣的鎖定、解鎖腳本的執行有很嚴格的規定:
在執行的每一點都不能失敗
在 stack 上的值不為負數
小總結:
比特幣解鎖腳本是跟著鎖定腳本的,腳本是從左執行到右,運算子會拿出需要的運算元,再把結果放到棧上,
如果執行的每一點都沒有失敗,那麼就可以使用這筆 UTXO