该BIP (Bitcoin Improvement Proposal) 提议引入一个新的操作码 OP_EVAL,旨在允许比特币的接收者指定重新花费这些比特币所需的交易类型,从而实现端到端安全钱包,并支持对旧客户端和矿工具有后向兼容性的复杂交易。
forked from bitcoin/bips
bip-anyprevout
搜索此仓库
/
复制路径
Blame更多文件操作
Blame更多文件操作
打开提交详情
2016年11月30日
959fecc · 2016年11月30日
打开提交详情
86 行 (54 loc) · 5.86 KB
/
顶部
预览
代码
Blame
86 行 (54 loc) · 5.86 KB
复制原始文件
下载原始文件
大纲
编辑和原始操作
BIP: 12
Layer: Consensus (soft fork)
Title: OP_EVAL
Author: Gavin Andresen <gavinandresen@gmail.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0012
Status: Withdrawn
Type: Standards Track
Created: 2011-10-18
## 目录<br>Permalink: 目录<br>- 摘要<br>- 动机<br>- 规范<br>- 原理<br>- 向后兼容性<br>- 参考实现<br>- 参见 |
这个 BIP 描述了一个新的操作码 (OP_EVAL),用于 比特币脚本系统,以及一个新的 '标准' 交易类型,它使用该操作码使比特币的接收者能够指定重新花费比特币所需的交易类型。
启用“端到端”安全钱包和支付,以资助第三方托管交易或其他复杂交易,这种方式对旧客户端和矿工向后兼容。
OP_EVAL 将重新定义现有的 OP_NOP1 操作码,并将按如下方式运行:
还定义了一种新的标准交易类型 (scriptPubKey),它由客户端转发并包含在挖出的区块中:
DUP HASH160 {20-byte-hash-value} EQUALVERIFY OP_EVAL
它由标准 scriptSig 赎回:
...signatures... {serialized script}
只有当 serialized script 本身是标准交易类型之一时,才会认为赎回标准 OP_EVAL scriptPubKey 的交易是标准的。
OP_EVAL 允许比特币的接收者指定在花费比特币时如何花费它们,而不是要求比特币的发送者知道如何赎回比特币的详细信息。发送者只需要知道 serialized script 的哈希值,并且可以使用一种新的比特币地址类型来资助任意复杂的交易。
如果 serialized script 是一个大型或复杂的多重签名脚本,那么支付它的负担(由于更多的签名操作或交易大小而导致的交易费用增加)将从发送者转移到接收者。
对 OP_EVAL 的主要反对意见是它增加了复杂性,而复杂性是安全性的敌人。此外,将数据评估为代码长期以来一直是安全漏洞的来源。
同样的论点也适用于现有的比特币“脚本”系统;scriptPubKey 作为数据在网络上传输,然后由每个比特币实现解释。OP_EVAL 只是移动将被解释的数据。将一种小的解释型表达式评估语言置于比特币核心的想法是聪明还是愚蠢,这是有争议的,但 OP_EVAL 的存在并不会降低表达式语言的安全性。
对将 OP_EVAL 解释为空操作的旧客户端存在 1 次确认攻击,但在实践中成本高昂且困难。攻击是:
这种攻击的成本很高,因为它要求攻击者创建一个他们知道会失效的区块。这很困难,因为比特币企业不应接受高价值交易的 1 次确认交易。
令人惊讶的是,由于 OP_EVAL 重新定义了 OP_NOP1 操作码,因此标准 OP_EVAL 交易将通过旧客户端和矿工的验证。他们将仅检查 serialized script 是否哈希到正确的值;OP_EVAL 将被解释为空操作,并且只要哈希值正确,该交易将被认为是有效的(旧客户端和矿工将不进行签名检查)。
旧客户端将忽略 OP_EVAL 交易和依赖于它们的交易,直到旧矿工将非标准交易包含在其区块中或新矿工将其放入区块中。
避免恶意 OP_EVAL 交易造成的区块链分裂需要谨慎处理两种情况:
对于情况 (1),新的客户端和矿工将被编码为将 OP_EVAL 解释为空操作,直到 2012 年 2 月 1 日。在此之前,将要求矿工将字符串“OP_EVAL”放入他们生成的区块中,以便可以衡量支持新操作码的算力。如果截至 2012 年 1 月 15 日少于 50% 的矿工接受更改,则推广将推迟到超过 50% 的算力支持 OP_EVAL 为止(如果明确表明大多数算力将无法实现,则推广将被拒绝)。
对于情况 (2),将编写新的客户端和矿工来确保涉及 OP_EVAL 的交易在 OP_EVAL 被解释为空操作时有效。 新旧矿工/客户端都必须失败的交易示例:
scriptSig: {serialized OP_11}
scriptPubKey: OP_EVAL OP_11 OP_EQUAL
https://github.com/gavinandresen/bitcoin-git/tree/op_eval
https://bitcointalk.org/index.php?topic=46538
"Bitcoin Address 01" BIP
M-of-N 多重签名交易 BIP 11
- 原文链接: github.com/ajtowns/bips/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!