2.1 标准交易

资料:

https://blog.csdn.net/jerry81333/article/details/56824166

http://book.8btc.com/books/1/master_bitcoin/_book/5/5.html

https://www.liaoxuefeng.com/article/001482718603696a6b6eb2bebc74211ab967146a952ae0c000

标准交易

  • 在比特币最初几年的发展过程中,开发者对可以经由客户端进行操作的脚本类型设置了一些限制。这些限制被编译为一个Standard()函数,该函数定义了五种类型的标准交易。
  • 五大标准脚本分别为P2PKH、P2PK、MS(限15个密钥)、P2SH和OP_Return

P2PKH(Pay-to-Public-Key-Hash)

  • 比特币网络上的大多数交易都是P2PKH交易,此类交易都含有一个锁定脚本,该脚本由公钥哈希实现阻止输出功能,公钥哈希即为广为人知的比特币地址。由P2PKH脚本锁定的输出可以通过键入公钥和由相应私钥创设的数字签名得以解锁。
  • 锁定脚本 OP_DUP OP_HASH160 <Cafe Public Key Hash> OP_EQUAL OP_CHECKSI
  • 脚本中的Cafe Public Key Hash即为收款方的比特币地址,但这个地址不是基于Base58Check编码的。事实上,大多数比特币地址都显示为十六进制码,而不是以1开头的基于Bsase58Check编码的比特币地址。
  • 解锁版脚本 <Cafe Signature> <Cafe Public Key>
  • 将两个脚本结合起来可以形成有效的组合脚本
  • <Cafe Signature> <Cafe Public Key> OP_DUP OP_HASH160 <Cafe Public Key Hash> OP_EQUALOP_CHECKSIG
  • 只有当解锁版脚本与锁定版脚本的设定条件相匹配时 即只有当解锁脚本得到了收款方的有效签名,交易执行结果才会被通过(结果为真),该有效签名是从与公钥哈希相匹配的咖啡馆的私钥中所获取的。
  • http://book.8btc.com/books/1/master_bitcoin/_book/5/Fig504.png

P2PK(Pay-to-Public-Key)

  • 与P2PKH模式含有公钥哈希的模式不同,在P2PK脚本模式中,公钥本身已经存储在锁定脚本中,而且代码长度也更短。P2PKH是由Satoshi创建的,主要目的一方面为使比特币地址更简短,另一方面也使之更方便使用。
  • P2PK目前在Coinbase交易中最为常见,Coinbase交易由老的采矿软件产生,目前还没更新至P2PKH。
  • 锁定的脚本 <Public Key A> OP_CHECKSIG
  • 解锁的脚本 <Signature from Private Key A>
  • 组合脚本 <Signature from Private Key A> <Public Key A> OP_CHECKSIG

MS(Multiple Signatures)多重签名

  • 多重签名脚本设置了这样一个条件,假如记录在脚本中的公钥个数为N,则至少需提供其中的M个公钥才可以解锁。这也被称为M-N组合,其中,N是记录在脚本中的公钥总个数,M是使得多重签名生效的公钥数阀值(最少数目)。

  • 例: 对于一个2-3多重签名组合而言,存档公钥数为3个,至少同时使用其中2个或者2个以上的公钥时,才能生成激活交易的签名,通过验证后才可使用这笔资金。

  • M-N多重签名锁定脚本 M <Public Key 1> <Public Key 2> ... <Public Key N> N OP_CHECKMULTISIG

  • N是存档公钥总数,M是要求激活交易的最少公钥数。

  • 例:2 <Public Key A> <Public Key B> <Public Key C> 3 OP_CHECKMULTISIG

  • 锁定脚本可由含有签名和公钥的脚本予以解锁 OP_0 <Signature B> <Signature C>

  • 组合将形成一个验证脚本:

  • OP_0 <Signature B> <Signature C> 2 <Public Key A> <Public Key B> <Public Key C> 3 OP_CHECKMULTISIG

P2SH(Pay-to-Script-Hash)

  • 在P2SH支付中,复杂的锁定脚本被电子指纹所取代,电子指纹为密码学哈希。

  • 当一笔交易试图支付UTXO时,要解锁支付脚本,它必须含有与哈希相匹配的脚本。

  • P2SH的含义是,向与该哈希匹配的脚本支付。

  • P2SH是MS多重签名的简化版本

  • (ms锁定脚本) 2 <Public Key A> <Public Key B> <Public Key C> 3 OP_CHECKMULTISIG

  • 对MS锁定脚本,首先采用SHA256哈希算法,随后对其运用RIPEMD160算法 生成20字节的脚本

  • 8ac1d7a2fa204a16dc984fa81cfdf86a2a4e1731

  • 最终转化为

  • (P2SH 锁定脚本) OP_HASH160 8ac1d7a2fa204a16dc984fa81cfdf86a2a4e1731 OP_EQUAL

  • 当接收方要使用此交易中的UTXO时,需要提交解锁脚本(这里又可称为赎回脚本)

  • 解锁脚本:

  • <Sig1> <Sig2> <2 PKA PKB PKC 3 OP_CHECKMULTISIG>

  • 结合脚本:

  • <Sig1> <Sig2> <2 PKA PKB PKC 3 OP_CHECKMULTISIG> OP_HASH160 8ac1d7a2fa204a16dc984fa81cfdf86a2a4e1731 OP_EQUAL

  • P2SH地址

  • P2SH的另一重要特征是它能将脚本哈希编译为一个地址(其定义请见BIP0013)。

  • P2SH地址是基于Base58编码的一个含有20个字节哈希的脚本,就像比特币地址是基于Base58编码的一个含有20个字节的公钥。

  • 由于P2SH地址采用5作为前缀,这导致基于Base58编码的地址以“3”开头。

  • 例如,Mohammed的脚本,基于Base58编码下的P2SH地址变为“39RF6JqABiHdYHkfChV6USGMe6Nsr66Gzw”。此时,Mohammed可以将该地址发送给他的客户,这些客户可以采用任何的比特币钱包实现简单支付,就像这是一个比特币地址一样。以“3”为前缀给予客户这是一种特殊类型的地址的暗示,该地址与一个脚本相对应而非与一个公钥相对应,但是它的效果与比特币地址支付别无二致。

  • P2SH的优点

  • 在交易输出中,复杂脚本由简短电子指纹取代,使得交易代码变短。

  • 脚本能被编译为地址,支付指令的发出者和支付者的比特币钱包不需要复杂工序就可以执行P2SH。

  • P2SH将构建脚本的重担转移至接收方,而非发送方。

  • P2SH将长脚本数据存储的负担从输出方(存储于UTXO集,影响内存)转移至输入方(仅存储于区块链)。

  • P2SH将长脚本数据存储的重担从当前(支付时)转移至未来(花费时)。

  • P2SH将长脚本的交易费成本从发送方转移至接收方,接收方在使用该笔资金时必须含有赎回脚本。

数据输出(OP_RETURN操作符)

  1. 比特币的分发和时间戳账户机制(也即区块链),其潜在运用将大大超越支付领域。许多开发者试图充分发挥交易脚本语言的安全性和可恢复性优势,将其运用于电子公证服务、证券认证和智能协议等领域。比特币脚本语言的早期运用主要包括在区块链上创造出交易输出。例如,为文件记录电子指纹,则任何人都可以通过该机制在特定的日期建立关于文档存在性的证明。

  2. 运用比特币区块链存储与比特币支付不相关数据的做法是一个有争议的话题。许多开发者认为其有滥用的嫌疑,因而试图予以阻止。另一些开发者则将之视为区块链技术强大功能的有力证明,从而试图给予大力支持。那些反对非支付相关应用的开发者认为这样做将引致“区块链膨胀”,因为所有的区块链节点都将以消耗磁盘存储空间为成本,负担存储此类数据的任务。更为严重的是,此类交易仅将比特币地址当作自由组合的20个字节而使用,进而会产生不能用于交易的UTXO。因为比特币地址只是被当作数据使用,并不与私钥相匹配,所以会导致UTXO不能被用于交易,因而是一种伪支付行为。这样的做法将使得内存中的UTXO不断增加,而且这些不能被用于交易的数据同样也不能被移除,因此比特币节点将永久性地担负这些数据,这无疑是代价高昂的。

  3. 在0.9版的比特币核心客户端上,通过采用OP_Return操作符最终实现了妥协。OP_Return允许开发者在交易输出上增加40字节的非交易数据。然后,与伪交易型的UTXO不同,OP_Return创造了一种明确的可复查的非交易型输出,此类数据无需存储于UTXO集。OP_Return输出被记录在区块链上,它们会消耗磁盘空间,也会导致区块链规模的增加,但它们不存储在UTXO集中,因此也不会使得UTXO内存膨胀,更不会以消耗代价高昂的内存为代价使全节点都不堪重负。

  4. OP_RETURN脚本的样式:

  5. OP_RETURN <data>

  6. “data”部分被限制为40字节,且多以哈希方式呈现,如32字节的SHA256算法输出。许多应用都在其前面加上前缀以辅助认定。例如,电子公正服务的证明材料采用8个字节的前缀“DOCPROOF”,在十六进制算法中,相应的ASCII码为44f4350524f4f46。

  7. 请记住OP_RETURN不涉及可用于支付的解锁脚本的特点,OP_RETURN不能使用其输出中所锁定的资金,因此它也就没有必要记录在蕴含潜在成本的UTXO集中,所以OP_RETURN实际是没有成本的。OP_RETURN常为一个金额为0的比特币输出,因为任何与该输出相对应的比特币都会永久消失。假如一笔OP_RETURN遇到脚本验证软件,它将立即导致验证脚本和标记交易的行为无效。如果你碰巧将OP_RETURN的输出作为另一笔交易的输入,则该交易是无效的。

  8. 一笔标准交易(通过了isStandard()函数检验的)只能有一个OP_RETURN输出。但是单个OP_RETURN输出能与任意类型的输出交易进行组合。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容