比特幣改進(jìn)協(xié)議BIP16(翻譯)

比特幣改進(jìn)協(xié)議BIP16(翻譯)

英文原文地址:

https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki

標(biāo)題 Pay to Script Hash(P2SH)

備注:P2SH 在2012 年被作為一種新型箩绍、強(qiáng)大幽七、且能大大簡(jiǎn)化復(fù)雜交易腳本的交易類型而引入


摘要

此BIP描述了Bitcoin腳本系統(tǒng)的新“標(biāo)準(zhǔn)”交易類型,并定義了僅適用于新交易的其他驗(yàn)證規(guī)則甚纲。

目的

pay-to-script-hash目的是將提供條件的責(zé)任從資金發(fā)送者轉(zhuǎn)移到接收方露泊。

好處是允許發(fā)送者發(fā)起無論多復(fù)雜的交易尤泽,使用足夠短的20字節(jié)固定長(zhǎng)度的散列來掃描QR碼或輕松地復(fù)制和粘貼签杈。

詳細(xì)說明

定義了一個(gè)包含在采礦區(qū)塊中的新標(biāo)準(zhǔn)交易類型:

    OP_HASH160 [20-byte-hash-value] OP_EQUAL

[20-byte-hash-value]應(yīng)為推20字節(jié)到堆棧操作碼(0x14),后跟20個(gè)字節(jié)沽一。

這個(gè)新的交易類型被標(biāo)準(zhǔn)腳本代碼贖回:

signatures... {serialized script}

如果序列化腳本(也稱為redeemScript)本身就是其他標(biāo)準(zhǔn)交易類型之一盖溺,那么兌換這些pay-to-script outpoints的交易只能被視為標(biāo)準(zhǔn)。

傳播交易或?qū)⑵浼{入新區(qū)塊時(shí)對(duì)這些outpoints進(jìn)行驗(yàn)證的規(guī)則如下:

  1. 如果scriptSig(解鎖腳本)中存在除“push data”以外的任何操作铣缠,驗(yàn)證失敗烘嘱。
  1. 正常驗(yàn)證完成:從簽名和{序列化腳本}創(chuàng)建初始堆棧,并且計(jì)算腳本的哈希值蝗蛙,如果它與outpoint的哈希不匹配蝇庭,則驗(yàn)證失敗。
  1. {serialized script}從初始堆棧彈出捡硅,并使用彈出的堆棧和反序列化腳本作為scriptPubKey再次驗(yàn)證交易哮内。

這些新規(guī)則只應(yīng)在使用時(shí)間戳=> 1333238400(2012年4月1日)[1]的區(qū)塊中驗(yàn)證交易時(shí)應(yīng)用。

在區(qū)塊鏈中早于1333238400個(gè)的交易壮韭,應(yīng)用這些新的驗(yàn)證規(guī)則會(huì)失敗北发。 [2]。較舊的交易必須根據(jù)舊規(guī)則進(jìn)行驗(yàn)證喷屋。 (有關(guān)詳細(xì)信息琳拨,請(qǐng)參閱向后兼容性部分)。

例如逼蒙,scriptPubKey和相應(yīng)的scriptSig用于單簽名所需的交易:

scriptSig: [signature] {[pubkey] OP_CHECKSIG}
    
scriptPubKey: OP_HASH160 [20-byte-hash of {[pubkey] OP_CHECKSIG} ] OP_EQUAL

{序列化腳本}中的簽名操作將有助于每個(gè)塊允許的最大數(shù)量(20,000)从绘,如下所示:

  1. OP_CHECKSIG和OP_CHECKSIGVERIFY計(jì)數(shù)為1簽名操作,不管它們是否被評(píng)估是牢。
  1. OP_CHECKMULTISIG和OP_CHECKMULTISIGVERIFY之前的OP_1到OP_16將被計(jì)入1到16簽名操作僵井,不管它們是否被評(píng)估。
  1. 所有其他OP_CHECKMULTISIG和OP_CHECKMULTISIGVERIFY都被計(jì)為20個(gè)簽名操作驳棱。

舉例:

+3 簽名操作:

    {2 [pubkey1] [pubkey2] [pubkey3] 3 OP_CHECKMULTISIG}
    

+22 簽名操作

    {OP_CHECKSIG OP_IF OP_CHECKSIGVERIFY OP_ELSE OP_CHECKMULTISIGVERIFY OP_ENDIF}

理論依據(jù)

這個(gè)BIP替代了BIP 12焰盗,它提出了一個(gè)新的腳本操作碼(“OP_EVAL”)來完成此BIP中的所有操作叭喜。

這個(gè)BIP的動(dòng)機(jī)(和BIP 13援奢, pay-to-script-hash地址類型)有些爭(zhēng)議; 有人覺得這是不必要的挚躯,復(fù)雜/多重簽名的交易類型應(yīng)該是通過簡(jiǎn)單地向發(fā)送人提供完整的{序列化腳本}來支持的。 作者認(rèn)為形葬,此BIP已經(jīng)將改動(dòng)做到最小合呐,用以將資金發(fā)送到base58編碼的20字節(jié)比特幣地址,從而允許商家和交易所及其他軟件開始支持多重簽名交易笙以。

識(shí)別scriptPubKey的一個(gè)“特殊”形式淌实,并在檢測(cè)到時(shí)執(zhí)行額外的驗(yàn)證是丑陋的。 然而,一致認(rèn)為拆祈,替代方案要么越來越復(fù)雜恨闪,要么以危險(xiǎn)的方式擴(kuò)大表達(dá)語言的力量。

簽名操作計(jì)數(shù)規(guī)則旨在通過靜態(tài)掃描{序列化腳本}來簡(jiǎn)單快速地實(shí)現(xiàn)放坏。比特幣對(duì)每個(gè)區(qū)塊施加最大數(shù)的簽名操作咙咽,以防止對(duì)礦工的拒絕服務(wù)攻擊。如果沒有限制淤年,流氓礦工可能會(huì)廣播一個(gè)需要數(shù)十萬個(gè)ECDSA簽名操作進(jìn)行驗(yàn)證的區(qū)塊钧敞,并且可能能夠開始計(jì)算下一個(gè)塊,而網(wǎng)絡(luò)的其余部分工作來驗(yàn)證當(dāng)前的這個(gè)區(qū)塊互亮。

對(duì)舊的實(shí)現(xiàn)有 一次確認(rèn) 的攻擊犁享,但在實(shí)踐中是昂貴和困難的余素。攻擊是:

  1. 攻擊者創(chuàng)建一個(gè)pay-to-script-hash 交易豹休,這對(duì)舊軟件是有效的,但對(duì)新實(shí)現(xiàn)無效桨吊,并使用它發(fā)送一些比特幣威根。
  1. 攻擊者還創(chuàng)建一個(gè)pay-to-script 標(biāo)準(zhǔn)交易,并支付運(yùn)行舊軟件的受害者视乐。
  1. 攻擊者運(yùn)算一個(gè)包含這兩個(gè)交易的塊洛搀。

如果受害者接受1次確認(rèn)付款,則攻擊者獲勝佑淀,因?yàn)楫?dāng)網(wǎng)絡(luò)的其余部分覆蓋攻擊者的無效塊時(shí)留美,兩個(gè)交易將被無效。

攻擊是昂貴的伸刃,因?yàn)樗蠊粽邉?chuàng)建一個(gè)他們知道\將被網(wǎng)絡(luò)的其它節(jié)點(diǎn)確認(rèn)無效的區(qū)塊谎砾。這是困難的,因?yàn)閯?chuàng)建區(qū)塊是的代價(jià)是非常高的捧颅,用戶不應(yīng)該接受高價(jià)值交易的一次確認(rèn)交易景图。

向后兼容

這些交易對(duì)于舊的實(shí)現(xiàn)是非標(biāo)準(zhǔn)的,它們(通常)不會(huì)傳播它們或?qū)⑺鼈儼趨^(qū)塊中碉哑。

舊的實(shí)現(xiàn)將驗(yàn)證{serialize script}的哈希值在驗(yàn)證由完全支持此BIP的軟件創(chuàng)建的區(qū)塊時(shí)匹配挚币,但不會(huì)進(jìn)行其他驗(yàn)證。

為了避免區(qū)塊鏈被通過惡意pay-to-script交易分割需要仔細(xì)處理一種情況:

一個(gè)pay-to-script-hash交易對(duì)新客戶/礦工無效扣典,但對(duì)舊客戶/礦工有效妆毕。

為了正常升級(jí)并確保不會(huì)發(fā)生持久的區(qū)塊鏈分裂,超過50%的礦工必須支持對(duì)新交易類型的全面驗(yàn)證贮尖,并且必須同時(shí)從舊的驗(yàn)證規(guī)則切換到新的規(guī)則笛粘。

為了判斷是否有超過50%的散列能力支持此BIP,礦工們被要求升級(jí)他們的軟件,并將字符串“/ P2SH /”輸入到他們創(chuàng)建的區(qū)塊的coinbase交易中闰蛔。

2012年2月1日痕钢,檢查區(qū)塊鏈,以確定在過去7天支持pay-to-script-hash的區(qū)塊數(shù)序六。如果550個(gè)或更多的coinbase交易中包含“/ P2SH /”任连,那么在2012年2月15日00:00:00之后的所有具有時(shí)間戳的區(qū)塊將具有完全驗(yàn)證的pay-to-script-hash交易。一周內(nèi)創(chuàng)建約1,000個(gè)區(qū)塊;因此例诀,550應(yīng)該是支持新功能的網(wǎng)絡(luò)的大約占比55%随抠。

如果大多數(shù)散列算力不支持新的驗(yàn)證規(guī)則,那么推出將被推遲(或者如果明確表示絕大多數(shù)將永遠(yuǎn)不會(huì)實(shí)現(xiàn))繁涂。

序列化腳本大小限制在520字節(jié)拱她。

作為向后兼容性的要求的結(jié)果,序列化腳本本身受到與任何其他PUSHDATA操作相同的規(guī)則扔罪,包括大于520字節(jié)的數(shù)據(jù)可能被推送到堆棧的規(guī)則秉沼。因此,如果所引用的兌換腳本長(zhǎng)度大于520字節(jié)矿酵,則不可能花費(fèi)P2SH輸出唬复。例如,當(dāng)OP_CHECKMULTISIG操作碼本身可以接受多達(dá)20個(gè)pubkey時(shí)全肮,使用33字節(jié)壓縮的公鑰敞咧,只能花費(fèi)最多需要15個(gè)pubkey的P2SH輸出來兌換:3個(gè)字節(jié)+ 15個(gè)pubkeys * 34個(gè)字節(jié)/ pubkey = 513字節(jié)。

參考實(shí)現(xiàn)

https://gist.github.com/gavinandresen/3966071

引申閱讀

參考

  1. Remove -bip16 and -paytoscripthashtime command-line arguments
  2. Transaction 6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辜腺,一起剝皮案震驚了整個(gè)濱河市休建,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌评疗,老刑警劉巖测砂,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異壤巷,居然都是意外死亡邑彪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門胧华,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寄症,“玉大人,你說我怎么就攤上這事矩动∮星桑” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵悲没,是天一觀的道長(zhǎng)篮迎。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么甜橱? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任逊笆,我火速辦了婚禮,結(jié)果婚禮上岂傲,老公的妹妹穿的比我還像新娘难裆。我一直安慰自己,他們只是感情好镊掖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布乃戈。 她就那樣靜靜地躺著,像睡著了一般亩进。 火紅的嫁衣襯著肌膚如雪症虑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天归薛,我揣著相機(jī)與錄音谍憔,去河邊找鬼。 笑死苟翻,一個(gè)胖子當(dāng)著我的面吹牛韵卤,可吹牛的內(nèi)容都是我干的骗污。 我是一名探鬼主播崇猫,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼需忿!你這毒婦竟也來了诅炉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤屋厘,失蹤者是張志新(化名)和其女友劉穎涕烧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汗洒,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡议纯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溢谤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞻凤。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖世杀,靈堂內(nèi)的尸體忽然破棺而出阀参,到底是詐尸還是另有隱情,我是刑警寧澤瞻坝,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布蛛壳,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏衙荐。R本人自食惡果不足惜捞挥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忧吟。 院中可真熱鬧树肃,春花似錦、人聲如沸瀑罗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斩祭。三九已至劣像,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摧玫,已是汗流浹背耳奕。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诬像,地道東北人屋群。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像坏挠,于是被迫代替她去往敵國和親芍躏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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