比特幣的腳本系統(tǒng)原理解釋

問題的提出:比特幣系統(tǒng)中并沒有賬戶的概念,那么用戶是怎么知道自己有多少錢并能花掉自己的bitcoin的黄娘,即進(jìn)行bitcoin的交易呢伶贰?

問題的理解:在比特幣系統(tǒng)的交易(也叫轉(zhuǎn)賬記錄)中為了進(jìn)行交易權(quán)限校驗(yàn)迅脐,即驗(yàn)證某人是否有權(quán)利動(dòng)用發(fā)送給他的比特幣愁溜,使用了腳本系統(tǒng)來進(jìn)行權(quán)限驗(yàn)證疾嗅。常用的權(quán)限驗(yàn)證方式例如利用公鑰和簽名進(jìn)行,又或者例如多人投票機(jī)制等冕象。

該腳本系統(tǒng)是一種簡(jiǎn)單的代承、基于堆棧的、從左到右處理的渐扮、非圖靈完整的腳本系統(tǒng)次泽,它比起以太坊、EOS等下一代區(qū)塊鏈技術(shù)中使用的智能合約是要簡(jiǎn)單太多了席爽,所以功能也比較有限。其本質(zhì)是包含多個(gè)指令的列表啊片,只要這些指令在逐個(gè)的運(yùn)行過程中沒有失敗只锻,一直到該指令列表中的指令都正常執(zhí)行,那么表明交易有效紫谷,即該用戶可以動(dòng)用這個(gè)交易中發(fā)給他的比特幣齐饮。只要在指令列表的指令執(zhí)行過程中,有一個(gè)失敗或異常笤昨,則表明交易無效祖驱,該用戶無權(quán)動(dòng)用這個(gè)交易中發(fā)給他的比特幣,因?yàn)樗赡苁欠欠ㄊ褂谜摺?/p>

腳本系統(tǒng)中常用的指令包括:

1.堆棧處理指令:OP_DUP(進(jìn)行復(fù)制操作)瞒窒、OP_DROP(刪除棧頂元素)捺僻、OP_SWAP(棧頂?shù)膬蓚€(gè)元素進(jìn)行交換)

2.腳本流程控制指令:OP_RETURN(標(biāo)記交易無效)\OP_VERIFY(如果棧頂元素為false,標(biāo)識(shí)交易無效崇裁。如果為true匕坯,則交易有效)

3.加密簽名指令:OP_HASH256(進(jìn)行hash散列計(jì)算)、OP_CHECKSIGVERIFY(進(jìn)行簽名驗(yàn)證)拔稳、葛峻、等;

4.邏輯操作指令:OP_EQUAL(判斷是否相等)巴比、OP_EQUALVERIFY(判斷是否相等后進(jìn)行腳本流程控制判斷术奖,如果棧頂元素為false就標(biāo)識(shí)交易無效)

5.算術(shù)操作指令:OP_ADD(加)\OP_SUB(減)\OP_MAX(取最大值)\OP_MIN(取最小值)等礁遵。

問題的解釋:

下面我們以一個(gè)例子來形象的說明一下比特幣的腳本系統(tǒng)的執(zhí)行過程。

假設(shè)有下面一系列的交易執(zhí)行過程采记,Alice交易了一些bitcoin給Bob佣耐,Bob又交易了一些bitcoin給Carol,Carol又交易了一些bitcoin給Dave挺庞。那么在交易b中晰赞,系統(tǒng)是如何驗(yàn)證Bob是有權(quán)將Alice轉(zhuǎn)給他的bitcoin又轉(zhuǎn)給Carol呢?


一個(gè)交易的數(shù)據(jù)結(jié)構(gòu)包括三部分选侨,HASH掖鱼、輸入交易和輸出交易。如下圖所示:


我們知道在每個(gè)交易中援制,其輸入交易是包含了前一個(gè)交易的txid以及scriptSig戏挡,這個(gè)scriptSig就是驗(yàn)證用戶是否有權(quán)花掉前一個(gè)交易中轉(zhuǎn)給自己的比特幣,

例如

在Bob->Carol的交易b中晨仑,Bob為了轉(zhuǎn)賬給Carol褐墅,必須在交易b的輸入交易里提供足夠的信息才能證明Bob是可以動(dòng)用交易a中Alice轉(zhuǎn)給Bod的bitoin,交易b的輸入交易信息是和交易a的輸出交易信息進(jìn)行配對(duì)的洪己,兩者的執(zhí)行成功才能證明Bob是合法的擁有者并且可以花掉交易a中轉(zhuǎn)給他的bitcoin妥凳。

Bob為了轉(zhuǎn)賬給Carol,在交易b中提供輸入交易的輸入腳本scriptSig信息如下:

3046022100ba1427639c9f67f2ca1088d0140318a98cb1e84f604dc90ae00ed7a5f9c61cab02210094233d018f2f014a5864c9e0795f13735780cafd51b950f503534a6af246aca301

03a63ab88e75116b313c6de384496328df2656156b8ac48c75505cd20a4890f5ab

這么一長(zhǎng)串其實(shí)就是一個(gè)簽名和一個(gè)公鑰答捕。

與之對(duì)應(yīng)的逝钥,是在交易a中的輸出交易的輸出腳本scriptPubKey信息了,其內(nèi)容如下:

OP_DUP OP_HASH160be10f0a78f5ac63e8746f7f2e62a5663eed05788 OP_EQUALVERIFY OP_CHECKSIG

這么一長(zhǎng)串其實(shí)就是一個(gè)指令的腳本列表拱镐,比特幣系統(tǒng)將在腳本系統(tǒng)堆棧中逐個(gè)執(zhí)行這些指令以驗(yàn)證權(quán)限艘款。

下面看看是如何執(zhí)行這組腳本來進(jìn)行驗(yàn)證權(quán)限的。

第一步沃琅、執(zhí)行交易b的輸入腳本哗咆,因?yàn)槭莾蓚€(gè)元素,一個(gè)簽名和一個(gè)公鑰益眉,所以將這兩個(gè)元素加入堆棧晌柬;


第二步、根據(jù)輸入腳本引用的txid找到交易a的輸出腳本郭脂,得到輸出腳本的那個(gè)指令列表空繁,逐個(gè)執(zhí)行;


第三步朱庆、第一個(gè)指令是OP_DUP盛泡,表示復(fù)制操作,也就是對(duì)當(dāng)前堆棧中的棧頂元素進(jìn)行復(fù)制娱颊,那就復(fù)制一份吧


第四步傲诵、第二個(gè)指令是OP_HASH160凯砍,表示計(jì)算hash值,也就是對(duì)當(dāng)前堆棧中的棧頂元素計(jì)算其hash值拴竹,那就將計(jì)算出來的hash值入棧


第五步悟衩、第三個(gè)指令是一組數(shù)字,所以將這個(gè)元素加入堆棧栓拜;


第六步座泳、第四個(gè)指令是OP_EQUALVERIFY,表示檢查是否相等幕与,也就是從堆棧中取出最上面的兩個(gè)元素挑势,判斷是否相等,如果相等就正常進(jìn)行啦鸣,如果不相等潮饱,則中斷執(zhí)行,返回失敗诫给。


第七步香拉、第五個(gè)指令是OP_CHECKSIG,表示檢查簽名校驗(yàn)中狂,也就是從堆棧中取出最上面的兩個(gè)元素凫碌,判斷其簽名是否正確,如果相等就正常進(jìn)行胃榕,如果不相等盛险,則中斷執(zhí)行,返回失敗勤晚。


這樣,交易b的輸入腳本和交易a的輸出腳本所包含的一串指令列表執(zhí)行下來泉褐,就可以驗(yàn)證Bob是否有權(quán)利動(dòng)用交易a中轉(zhuǎn)給他的bitcoin赐写,即轉(zhuǎn)賬給Carol了。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膜赃,一起剝皮案震驚了整個(gè)濱河市挺邀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跳座,老刑警劉巖端铛,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異疲眷,居然都是意外死亡禾蚕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門狂丝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來换淆,“玉大人哗总,你說我怎么就攤上這事”妒裕” “怎么了讯屈?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)县习。 經(jīng)常有香客問我涮母,道長(zhǎng),這世上最難降的妖魔是什么躁愿? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任叛本,我火速辦了婚禮,結(jié)果婚禮上攘已,老公的妹妹穿的比我還像新娘炮赦。我一直安慰自己,他們只是感情好样勃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布吠勘。 她就那樣靜靜地躺著,像睡著了一般峡眶。 火紅的嫁衣襯著肌膚如雪剧防。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天辫樱,我揣著相機(jī)與錄音峭拘,去河邊找鬼。 笑死狮暑,一個(gè)胖子當(dāng)著我的面吹牛鸡挠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搬男,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼拣展,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了缔逛?” 一聲冷哼從身側(cè)響起备埃,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎褐奴,沒想到半個(gè)月后按脚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敦冬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年辅搬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脖旱。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伞辛,死狀恐怖烂翰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚤氏,我是刑警寧澤甘耿,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站竿滨,受9級(jí)特大地震影響佳恬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜于游,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一毁葱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贰剥,春花似錦折联、人聲如沸燕刻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苛萎。三九已至娜亿,卻和暖如春馁启,著一層夾襖步出監(jiān)牢的瞬間养匈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國打工瓶盛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留最欠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓惩猫,卻偏偏與公主長(zhǎng)得像芝硬,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子轧房,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 其實(shí)我們可以這樣看待比特幣的交易:『交易的發(fā)起者懸賞若干比特幣拌阴,在網(wǎng)絡(luò)上貼出了一到數(shù)學(xué)題,誰解出了這道數(shù)學(xué)題锯厢,懸賞...
    汪海波閱讀 1,181評(píng)論 1 13
  • 官網(wǎng)原文:本章原文 建議打開原版對(duì)照著英文版同時(shí)閱讀皮官。官網(wǎng)原文:在git上閱讀 建議打開原版對(duì)照著英文版同時(shí)閱讀脯倒。...
    阿龍學(xué)區(qū)塊鏈閱讀 1,039評(píng)論 0 2
  • 前言: 本文參考文獻(xiàn):1实辑、https://learn.adafruit.com/introduction-to-b...
    esonyf閱讀 5,229評(píng)論 3 10
  • 大宋帝國是中國封建王朝時(shí)期經(jīng)濟(jì)最發(fā)達(dá)的一個(gè)朝代悠反,這離不開建國皇帝趙匡胤的文治武功残黑。宋朝后續(xù)的發(fā)展在他的治下開了個(gè)好...
    醬油拉面閱讀 534評(píng)論 0 2
  • 美白亮麗的肌膚人人都想擁有梨水,但是歲月對(duì)肌膚的摧殘實(shí)則讓人無奈啊拭荤。太田痣,又稱上腭部褐青色痣疫诽,是東方民族常見的舅世、以眼...
    美麗閨蜜吖閱讀 554評(píng)論 0 0