Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
e311680f
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,发现更多精彩内容 >>
提交
e311680f
编写于
4月 05, 2018
作者:
K
Khaled Al-Hassanieh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix #2140 - Check that producers are unique and corresponding accounts exist
上级
addbe2fa
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
33 addition
and
0 deletion
+33
-0
libraries/chain/wasm_interface.cpp
libraries/chain/wasm_interface.cpp
+7
-0
tests/chain_tests/block_tests.cpp
tests/chain_tests/block_tests.cpp
+1
-0
tests/chain_tests/producer_schedule_tests.cpp
tests/chain_tests/producer_schedule_tests.cpp
+25
-0
未找到文件。
libraries/chain/wasm_interface.cpp
浏览文件 @
e311680f
...
...
@@ -142,6 +142,13 @@ class privileged_api : public context_aware_api {
datastream
<
const
char
*>
ds
(
packed_producer_schedule
,
datalen
);
producer_schedule_type
psch
;
fc
::
raw
::
unpack
(
ds
,
psch
);
// check that producers are unique
std
::
set
<
account_name
>
unique_producers
;
for
(
const
auto
&
p
:
psch
.
producers
)
{
EOS_ASSERT
(
context
.
is_account
(
p
.
producer_name
),
wasm_execution_error
,
"producer schedule includes a nonexisting account"
);
unique_producers
.
insert
(
p
.
producer_name
);
}
EOS_ASSERT
(
psch
.
producers
.
size
()
==
unique_producers
.
size
(),
wasm_execution_error
,
"duplicate producer name in producer schedule"
);
context
.
mutable_db
.
modify
(
context
.
controller
.
get_global_properties
(),
[
&
](
auto
&
gprops
)
{
gprops
.
new_active_producers
=
psch
;
...
...
tests/chain_tests/block_tests.cpp
浏览文件 @
e311680f
...
...
@@ -376,6 +376,7 @@ BOOST_AUTO_TEST_CASE(missed_blocks)
for
(
char
i
=
'a'
;
i
<=
'u'
;
i
++
)
{
producer_names
.
emplace_back
(
std
::
string
(
"init"
)
+
i
);
}
chain
.
create_accounts
(
producer_names
);
chain
.
set_producers
(
producer_names
);
// Produce blocks until the next block production will use the new set of producers from beginning
...
...
tests/chain_tests/producer_schedule_tests.cpp
浏览文件 @
e311680f
...
...
@@ -114,6 +114,31 @@ BOOST_AUTO_TEST_SUITE(producer_schedule_tests)
}
FC_LOG_AND_RETHROW
()
BOOST_FIXTURE_TEST_CASE
(
verify_producers
,
TESTER
)
try
{
vector
<
account_name
>
valid_producers
=
{
"inita"
,
"initb"
,
"initc"
,
"initd"
,
"inite"
,
"initf"
,
"initg"
,
"inith"
,
"initi"
,
"initj"
,
"initk"
,
"initl"
,
"initm"
,
"initn"
,
"inito"
,
"initp"
,
"initq"
,
"initr"
,
"inits"
,
"initt"
,
"initu"
};
create_accounts
(
valid_producers
);
set_producers
(
valid_producers
);
// account initz does not exist
vector
<
account_name
>
nonexisting_producer
=
{
"initz"
};
BOOST_CHECK_THROW
(
set_producers
(
nonexisting_producer
),
wasm_execution_error
);
// replace initg with inita, inita is now duplicate
vector
<
account_name
>
invalid_producers
=
{
"inita"
,
"initb"
,
"initc"
,
"initd"
,
"inite"
,
"initf"
,
"inita"
,
"inith"
,
"initi"
,
"initj"
,
"initk"
,
"initl"
,
"initm"
,
"initn"
,
"inito"
,
"initp"
,
"initq"
,
"initr"
,
"inits"
,
"initt"
,
"initu"
};
BOOST_CHECK_THROW
(
set_producers
(
invalid_producers
),
wasm_execution_error
);
}
FC_LOG_AND_RETHROW
()
BOOST_FIXTURE_TEST_CASE
(
verify_header_schedule_version
,
TESTER
)
try
{
// Utility function to ensure that producer schedule version in the header is correct
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录