Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
44d2c4d2
Y
YTBP
项目概览
YottaChain
/
YTBP
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
YTBP
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
44d2c4d2
编写于
6月 14, 2018
作者:
A
Andrianto Lie
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add push block with invalid transaction test
上级
4ff4caaa
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
53 addition
and
0 deletion
+53
-0
unittests/block_tests.cpp
unittests/block_tests.cpp
+53
-0
未找到文件。
unittests/block_tests.cpp
0 → 100644
浏览文件 @
44d2c4d2
/**
* @file
* @copyright defined in eos/LICENSE.txt
*/
#include <boost/test/unit_test.hpp>
#include <eosio/testing/tester.hpp>
using
namespace
eosio
;
using
namespace
testing
;
using
namespace
chain
;
BOOST_AUTO_TEST_SUITE
(
block_tests
)
BOOST_AUTO_TEST_CASE
(
block_with_invalid_tx_test
)
{
tester
main
;
// First we create a valid block with valid transaction
main
.
create_account
(
N
(
newacc
));
auto
b
=
main
.
produce_block
();
// Make a copy of the valid block and corrupt the transaction
auto
copy_b
=
std
::
make_shared
<
signed_block
>
(
*
b
);
auto
signed_tx
=
copy_b
->
transactions
.
back
().
trx
.
get
<
packed_transaction
>
().
get_signed_transaction
();
auto
&
act
=
signed_tx
.
actions
.
back
();
auto
act_data
=
act
.
data_as
<
newaccount
>
();
// Make the transaction invalid by having the new account name the same as the creator name
act_data
.
name
=
act_data
.
creator
;
act
.
data
=
fc
::
raw
::
pack
(
act_data
);
// Re-sign the transaction
signed_tx
.
signatures
.
clear
();
signed_tx
.
sign
(
main
.
get_private_key
(
N
(
eosio
),
"active"
),
main
.
control
->
get_chain_id
());
// Replace the valid transaction with the invalid transaction
auto
invalid_packed_tx
=
packed_transaction
(
signed_tx
);
copy_b
->
transactions
.
back
().
trx
=
invalid_packed_tx
;
// Re-sign the block
auto
header_bmroot
=
digest_type
::
hash
(
std
::
make_pair
(
copy_b
->
digest
(),
main
.
control
->
head_block_state
()
->
blockroot_merkle
.
get_root
()
)
);
auto
sig_digest
=
digest_type
::
hash
(
std
::
make_pair
(
header_bmroot
,
main
.
control
->
head_block_state
()
->
pending_schedule_hash
)
);
copy_b
->
producer_signature
=
main
.
get_private_key
(
N
(
eosio
),
"active"
).
sign
(
sig_digest
);
// Push block with invalid transaction to other chain
tester
validator
;
validator
.
control
->
abort_block
();
BOOST_REQUIRE_EXCEPTION
(
validator
.
control
->
push_block
(
copy_b
),
fc
::
exception
,
[]
(
const
fc
::
exception
&
e
)
->
bool
{
return
e
.
code
()
==
action_validate_exception
::
code_value
;
})
;
}
BOOST_AUTO_TEST_SUITE_END
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录