code

2017年7月3日 星期一

Bitcoin筆記 9 - Bitcoin scripts

每個node(bitcoin wallet軟體)都在緊盯整個bitcoin network中的transactions,當有人”送錢“給某人,意思就是node偵測到某個與自己public address相關的transaction,可以用此wallet的private key去redeem這筆錢,而再還沒redeem之前,所有的transaction outputs都是"unspent"。

但是redeem,要發生在交易才會realize,所以錢包內所謂的“餘額” = 關於此public address的unspent outputs的總和,換句話說,實際上沒有“餘額”的概念(因為沒有帳戶概念)。

每個output都會有一個"locking script" (scriptPubKey),解開此lock的人才能真正"使用(spend, redeem)"此output紀錄的錢幣金額。

某人要想解開此lock,要先去下載此locking output,然後錢包軟體需要創造一個交易,在input部分放入unlocking script(scriptSig, 來解reference到的output locking script),通常是一個digital signature + public key。

一個可能的input:

此input referenced到的output為txid = "7957....6f18"的output,如下:


要redeem output中的錢幣時,錢包會製作一個input unlocking script,銜接上referened到的output locking script,來進行驗證:


總之讓結合起來的所有instructions在stack上,最後能得出OP_TRUE,就代表redeem成功了啦!!!! 例如以下的結合過的instructions:

2 7 OP_ADD 3 OP_SUB 1 OP_ADD 7 OP_EQUAL
可以簡單驗證: 
2+7-3+1 == 7
的確是true!

有趣的一點是unlocking script看來要先parse locking script,才能知道如何最後得出OP_TRUE,反過來說,如果要付費給某人,收費方也有可能要求付費方編寫一個符合收費沆的locking script。

沒有留言:

張貼留言