看看比特币的来源(https://github.com/bitcoin/bitcoin/blob/v0.9.3/src/script.cpp#L843-具体来说,是L847),我使用了OP\u代码分隔符。我对这段代码的解释是不是正确的,不是所有的scriptPubKey都是有签名的,而实际上只是比最新的OP\u代码分隔符晚的部分?如果opu-if导致跳过opu-codesparator,会发生什么情况?
我觉得很奇怪,不是所有情况下都使用整个scriptPubKey进行签名,所以我猜有一些我没有想到的用例。有人知道这个用例是什么吗?
我已经通读了这个bitcointalk的帖子,但是没有找到任何结论。
脚本
比特币核心开发
分享
打印此问题
跟随
编辑时间:6月21日0:26
马丁哈里根
17499青铜徽章
12月13日下午2点45分被问到
莫尔斯编码器
13.3k22金有3636枚银徽章8585枚铜徽章
5
opu codesparator的有用之处在于,谷歌所有的搜索结果都是人们在问它的用途尼克·奥德尔2014年12月13日3:19
五年后,youtube.com/watch?v=mxPFvRTT4Eg上出现了很多关于脚本专家的信息。 – 9月9日19:38
添加评论
3个答案
7
查看这张OP\u CHECKSIG步骤图和比特币脚本wiki,OP\u codesparator用于使OP\u CHECKSIG check仅成为scriptPubKey的一部分。本质上,只有在最后一个OP\u代码分隔符之后的脚本才用于对事务进行签名,因此由OP\u CHECKSIG进行计算。
理论上,支出事务可能会在输入事务的最后一个OP\u code分隔符之前更改scriptPubKey的部分。
但是,有一个问题。由于scriptPubKey来自输入事务,因此在不更改输入事务哈希的情况下,您实际上无法修改scriptPubKey的任何部分(甚至是最后一个OP\u CODESEPARATOR之前的部分)。更改输入事务哈希会断开任何试图使用未使用的输入事务的输出的事务的链接,从而在实践中不可能使用OP\u codesparator。
我在实践中找不到有人成功地将OP\u代码分隔符用于有用目的的案例,尽管它确实出现在区块链中。请参阅这个、这个和这个(以及您引用的线程),以便核心开发人员评论或讨论OP\u codesparator的可能用途。
如果OP\u codesparator在if else块中,脚本求值会发生什么?要签名的部分是否总是直接指向scriptPubKey的末尾穆尔塞科德12月25日下午17:39
我不能确定,但根据这里的比特币测试,如果IF条件为false,则IF语句中的OP\u codesparator不应作为最后一个OP\u codesparator求值soroushjp 2014年12月26日1:44
但它将允许else块中的所有内容都被签名,在这种情况下,这似乎很奇怪。我还没看过你发送的链接,但还不能想象OP有用的情况,即使它可以使用。。。谢谢你的回答穆塞科特12月26日14点47分
我认为它会在最后一个OP\u代码分隔符之后对所有内容进行签名,因此除非ELSE块中有OP\u代码分隔符,否则所有内容都会被签名。但是,是的,我同意,还没有找到一个有用的例子,特别是在输入tx散列改变的问题上。如果你找到一个,请张贴在这里的社区。好问题@StephenM347.–soroushjp 2014年12月26日2:04
添加评论
0
opu codesparator是以前版本的脚本语言遗留下来的操作码,被发现包含非常可怕的bug;它不再用于比特币脚本中,除了一些可能非常低级的边缘情况外,其他情况都可以安全地忽略它的存在。
有关其导致的潜在攻击向量的更多详细信息,请参阅
https://bitcointalk.org/index.php?topic=255145.msg2757327
分享
改进这个答案
跟随
8月14日17:46答复
阿尔梅尔
215611金徽章1414银徽章1717铜徽章
添加评论
0
唯一向我解释过opu代码分隔符用法的人是craigwright。据他说,主要用途是委托多重签字合同,以便一个签字方可以签字,并增加一个不同的签字人,然后可以在原来的地方签字。(一种使多签名者可更改/可委派的方法)。使用分层操作
分享
改进这个答案
跟随