函数IsStandardTx
可以返回一些非标准交易的原因。 其中一些目前一方面通过单元测试test_IsStandard
( transaction_tests.cpp
) 进行测试,直接检查函数调用的结果,另一方面通过功能测试mempool_accept.py
,通过使用testmempoolaccept
RPC 并检查结果中的reject-reason
字段来间接测试。 在当前的 master 分支 (7967104aee055476107dc17265cefc4ae4e75378) 上,测试覆盖率如下所示:
| IsStandardTx()
拒绝原因 | 功能测试 ( mempool_accept.py
) | 单元测试( transaction_tests.cpp
)|
| ------------- |:------------:|:-----:|
| "version"
| :heavy_check_mark: | |
| "tx-size"
| :heavy_check_mark: | |
| "scriptsig-size"
|
| "scriptsig-not-pushonly"
| :heavy_check_mark: | |
| "scriptpubkey"
| :heavy_check_mark: | :heavy_check_mark: |
| "bare-multisig"
|
| "dust"
| :heavy_check_mark: | :heavy_check_mark: |
| "multi-op-return"
| :heavy_check_mark: | :heavy_check_mark: |
我认为通过单元测试或功能测试为每种原因至少进行一次测试是有意义的——对于"scriptsig-size"
和"bare-multisig"
我们没有任何测试,所以这些是最像现在一样需要。 鉴于此,这将导致以下七个小任务的列表(大致按优先级降序排列):
"scriptsig-size"
原因添加单元测试(PR #17480,提交 5e8a56348b5e1026e9ddcae0b2fa2a68faf4439e,由我谦虚的自己完成)"bare-multisig"
原因添加单元测试(PR #17502,提交 1bb5d517aa616c1d5b5801d2ea36a2de5fb61eba,由我谦虚的自己完成)"scriptsig-size"
原因添加功能测试(PR #17532,提交 8f2d7737cc236b6122f30e31856eb3181960fba1,由我谦虚的自己完成)"bare-multisig"
原因添加功能测试(PR #17541,提交 1be0b1fb2adcf95d76f879195564c0bf84162e31,由我谦虚的自己完成)"scriptsig-not-pushonly"
原因添加单元测试(PR #17720,提交 5aab011805ceb12801644170700b1a62e0bf4a5d,由我谦虚的自己完成)"tx-size"
原因添加单元测试(PR #17947,提交 4537ba5f21ad8afb705325cd8e15dd43877eb28f,dony 谦虚的自我)"version"
原因添加单元测试(PR #17555,提交 https://github.com/bitcoin/bitcoin/pull/17555/commits/76303f65f92a0fbe9a90c0e807554a6daa860636,由 dspicher 完成)我想这将是一个很好的“好的第一期”候选人——我很想自己做这个,但是为了鼓励新的贡献者(并且知道“好的第一期”可以有多大帮助)我不会摸一会儿。
我想为此工作。
@theStack您是否已经开始进行"bare-multisig"
测试?
@dspicher :很高兴听到您感兴趣! "bare-multisig"
的单元测试和功能测试的 PR 已在最近几天内由我打开(请参阅 #17502 和 #17541——尽管两者都尚未合并),因此现在以下三个测试是失踪:
"scriptsig-not-pushonly"
原因的单元测试"tx-size"
原因的单元测试"version"
原因的单元测试随意从事这些工作,玩得开心! :)
现在所有缺少的单元测试和功能测试都在 master 分支中实现和合并:tada: :beer: 所以我要关闭这个问题。
最有用的评论
@dspicher :很高兴听到您感兴趣!
"bare-multisig"
的单元测试和功能测试的 PR 已在最近几天内由我打开(请参阅 #17502 和 #17541——尽管两者都尚未合并),因此现在以下三个测试是失踪:"scriptsig-not-pushonly"
原因的单元测试"tx-size"
原因的单元测试"version"
原因的单元测试随意从事这些工作,玩得开心! :)