Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
89f1a347
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,发现更多精彩内容 >>
提交
89f1a347
编写于
7月 19, 2019
作者:
W
Wang Zhi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
implement YTA chain BP election policy -- fix some bugs about vector usage
上级
fbd30bad
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
169 addition
and
14 deletion
+169
-14
contracts/eosio.system/voting.cpp
contracts/eosio.system/voting.cpp
+169
-14
未找到文件。
contracts/eosio.system/voting.cpp
浏览文件 @
89f1a347
...
...
@@ -336,6 +336,12 @@ namespace eosiosystem {
void
system_contract
::
testnewelec
()
{
require_auth
(
_self
);
block_timestamp
block_time
;
update_elected_producers_yta2
(
block_time
);
/*
std::vector< std::pair<eosio::producer_key,uint16_t> > top_producers;
top_producers.reserve(21);
...
...
@@ -375,6 +381,8 @@ namespace eosiosystem {
print("\n");
}
print("producers end------------------------------\n");
*/
}
...
...
@@ -411,11 +419,82 @@ namespace eosiosystem {
if
(
!
_all_prods
.
exists
())
return
;
_all_prods_state
=
_all_prods
.
get
();
/*
for(int i = 0 ; i < 3 ; i++) {
yta_prod_info info;
info.total_votes = 50000000000;
info.all_stake = 50000000000;
info.is_active = true;
info.is_in_grace = false;
_all_prods_state.prods_l1.push_back(info);
}
_all_prods_state.prods_l1[0].owner = N(producer1);
_all_prods_state.prods_l1[0].is_active = false;
_all_prods_state.prods_l1[1].owner = N(producer2);
_all_prods_state.prods_l1[1].is_in_grace = true;
_all_prods_state.prods_l1[1].total_votes = 10000000000;
_all_prods_state.prods_l1[2].owner = N(producer3);
for(int i = 0 ; i < 6 ; i++) {
yta_prod_info info;
info.total_votes = 20000000000;
info.all_stake = 20000000000;
info.is_active = true;
info.is_in_grace = false;
_all_prods_state.prods_l2.push_back(info);
}
_all_prods_state.prods_l2[0].owner = N(producer11);
_all_prods_state.prods_l2[1].owner = N(producer12);
_all_prods_state.prods_l2[2].owner = N(producer13);
_all_prods_state.prods_l2[3].owner = N(producer14);
_all_prods_state.prods_l2[3].is_in_grace = true;
_all_prods_state.prods_l2[3].total_votes = 15000000000;
_all_prods_state.prods_l2[4].owner = N(producer15);
_all_prods_state.prods_l2[5].owner = N(producer1a);
for(int i = 0 ; i < 2 ; i++) {
yta_prod_info info;
info.total_votes = 10000000000;
info.all_stake = 10000000000;
info.is_active = true;
info.is_in_grace = false;
_all_prods_state.prods_l3.push_back(info);
}
_all_prods_state.prods_l3[0].owner = N(producer21);
_all_prods_state.prods_l3[0].total_votes = 21000000000;
_all_prods_state.prods_l3[1].owner = N(producer22);
print("before-----------------------------------\n");
print("level 1-----------------------------------\n");
for( auto it =_all_prods_state.prods_l1.begin(); it != _all_prods_state.prods_l1.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 2-----------------------------------\n");
for( auto it =_all_prods_state.prods_l2.begin(); it != _all_prods_state.prods_l2.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 3-----------------------------------\n");
for( auto it =_all_prods_state.prods_l3.begin(); it != _all_prods_state.prods_l3.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 1 again-----------------------------------\n");
for( auto it =_all_prods_state.prods_l1.begin(); it != _all_prods_state.prods_l1.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
*/
for
(
auto
it
=
_all_prods_state
.
prods_l1
.
begin
();
it
!=
_all_prods_state
.
prods_l1
.
end
();)
{
bool
is_remove
=
false
;
if
(
!
it
->
is_active
)
is_remove
=
true
;
if
(
it
->
total_votes
<
50000000000
)
{
//print("-----level1 down--", (name{it->owner}), "---",(int64_t)it->total_votes ,"\n");
if
((
int64_t
)
it
->
total_votes
<
50000000000
)
{
//print("-----level1 down--", (name{it->owner}), "votes not enough\n");
if
(
it
->
is_in_grace
)
{
if
(
current_time
()
-
it
->
grace_start_time
>
useconds_per_day_v
)
{
is_remove
=
true
;
...
...
@@ -433,15 +512,35 @@ namespace eosiosystem {
if
(
is_remove
)
{
_all_prods_state
.
prods_l3
.
push_back
(
*
it
);
_all_prods_state
.
prods_l1
.
erase
(
it
);
it
=
_all_prods_state
.
prods_l1
.
erase
(
it
);
}
else
{
++
it
;
}
}
/*
print("step 1-----------------------------------\n");
print("level 1-----------------------------------\n");
for( auto it =_all_prods_state.prods_l1.begin(); it != _all_prods_state.prods_l1.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 2-----------------------------------\n");
for( auto it =_all_prods_state.prods_l2.begin(); it != _all_prods_state.prods_l2.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 3-----------------------------------\n");
for( auto it =_all_prods_state.prods_l3.begin(); it != _all_prods_state.prods_l3.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
*/
for
(
auto
it
=
_all_prods_state
.
prods_l2
.
begin
();
it
!=
_all_prods_state
.
prods_l2
.
end
();)
{
bool
is_remove
=
false
;
if
(
!
it
->
is_active
)
is_remove
=
true
;
if
(
it
->
total_votes
<
20000000000
)
{
//print("-----level2 down--", (name{it->owner}), "---",(int64_t)it->total_votes ,"\n");
if
((
int64_t
)
it
->
total_votes
<
20000000000
)
{
//print("-----level2 down--", (name{it->owner}), "votes not enough\n");
if
(
it
->
is_in_grace
)
{
if
(
current_time
()
-
it
->
grace_start_time
>
useconds_per_day_v
)
{
is_remove
=
true
;
...
...
@@ -459,36 +558,92 @@ namespace eosiosystem {
if
(
is_remove
)
{
_all_prods_state
.
prods_l3
.
push_back
(
*
it
);
_all_prods_state
.
prods_l2
.
erase
(
it
);
it
=
_all_prods_state
.
prods_l2
.
erase
(
it
);
}
else
{
++
it
;
}
}
std
::
sort
(
_all_prods_state
.
prods_l2
.
begin
(),
_all_prods_state
.
prods_l2
.
end
(),
[
&
](
yta_prod_info
lhs
,
yta_prod_info
rhs
){
return
lhs
.
total_votes
>
rhs
.
total_votes
;});
/*
print("step 2-----------------------------------\n");
for( auto it =_all_prods_state.prods_l1.begin(); it != _all_prods_state.prods_l1.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 2-----------------------------------\n");
for( auto it =_all_prods_state.prods_l2.begin(); it != _all_prods_state.prods_l2.end(); it++ ) {
if
(
it
->
total_votes
>=
50000000000
)
{
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 3-----------------------------------\n");
for( auto it =_all_prods_state.prods_l3.begin(); it != _all_prods_state.prods_l3.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
*/
std
::
sort
(
_all_prods_state
.
prods_l2
.
begin
(),
_all_prods_state
.
prods_l2
.
end
(),
[
&
](
yta_prod_info
lhs
,
yta_prod_info
rhs
){
return
lhs
.
total_votes
>
rhs
.
total_votes
;});
for
(
auto
it
=
_all_prods_state
.
prods_l2
.
begin
();
it
!=
_all_prods_state
.
prods_l2
.
end
();)
{
//print("-----level2 up--", (name{it->owner}), "---",(int64_t)it->total_votes ,"\n");
if
((
int64_t
)
it
->
total_votes
>=
50000000000
)
{
//print("-----level2 up--", (name{it->owner}), "votes execeed\n");
if
(
_all_prods_state
.
prods_l1
.
size
()
<
21
)
{
_all_prods_state
.
prods_l1
.
push_back
(
*
it
);
_all_prods_state
.
prods_l2
.
erase
(
it
);
it
=
_all_prods_state
.
prods_l2
.
erase
(
it
);
}
else
{
break
;
}
}
else
{
++
it
;
}
}
std
::
sort
(
_all_prods_state
.
prods_l3
.
begin
(),
_all_prods_state
.
prods_l3
.
end
(),
[
&
](
yta_prod_info
lhs
,
yta_prod_info
rhs
){
return
lhs
.
total_votes
>
rhs
.
total_votes
;});
/*
print("step 3-----------------------------------\n");
for( auto it =_all_prods_state.prods_l1.begin(); it != _all_prods_state.prods_l1.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 2-----------------------------------\n");
for( auto it =_all_prods_state.prods_l2.begin(); it != _all_prods_state.prods_l2.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 3-----------------------------------\n");
for( auto it =_all_prods_state.prods_l3.begin(); it != _all_prods_state.prods_l3.end(); it++ ) {
if
(
it
->
total_votes
>=
20000000000
)
{
if
(
_all_prods_state
.
prods_l3
.
size
()
<
105
)
{
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
*/
std
::
sort
(
_all_prods_state
.
prods_l3
.
begin
(),
_all_prods_state
.
prods_l3
.
end
(),
[
&
](
yta_prod_info
lhs
,
yta_prod_info
rhs
){
return
lhs
.
total_votes
>
rhs
.
total_votes
;});
for
(
auto
it
=
_all_prods_state
.
prods_l3
.
begin
();
it
!=
_all_prods_state
.
prods_l3
.
end
();)
{
//print("-----level3 up--", (name{it->owner}), "---",(int64_t)it->total_votes ,"\n");
if
((
int64_t
)
it
->
total_votes
>=
20000000000
&&
it
->
is_active
)
{
//print("-----level3 up--", (name{it->owner}), "votes execeed\n");
if
(
_all_prods_state
.
prods_l2
.
size
()
<
105
)
{
_all_prods_state
.
prods_l2
.
push_back
(
*
it
);
_all_prods_state
.
prods_l3
.
erase
(
it
);
it
=
_all_prods_state
.
prods_l3
.
erase
(
it
);
}
else
{
break
;
}
}
else
{
++
it
;
}
}
_all_prods
.
set
(
_all_prods_state
,
_self
);
/*
print("after-----------------------------------\n");
for( auto it =_all_prods_state.prods_l1.begin(); it != _all_prods_state.prods_l1.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 2-----------------------------------\n");
for( auto it =_all_prods_state.prods_l2.begin(); it != _all_prods_state.prods_l2.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
print("level 3-----------------------------------\n");
for( auto it =_all_prods_state.prods_l3.begin(); it != _all_prods_state.prods_l3.end(); it++ ) {
print("producer - ", (name{it->owner}), "--", (int64_t)it->total_votes, " --\n");
}
return;
*/
///---------------------------------------------------
_gstate
.
last_producer_schedule_update
=
block_time
;
...
...
@@ -660,8 +815,8 @@ namespace eosiosystem {
void
system_contract
::
voteproducer
(
const
account_name
voter_name
,
const
account_name
proxy
,
const
std
::
vector
<
account_name
>&
producers
)
{
require_auth
(
voter_name
);
///@@@@@@@@@@@@@@@@@@@@@
//
eosio_assert(1 == 2, "can not vote now.");
//
return;
eosio_assert
(
1
==
2
,
"can not vote now."
);
return
;
///@@@@@@@@@@@@@@@@@@@@
update_votes
(
voter_name
,
proxy
,
producers
,
true
);
...
...
@@ -677,7 +832,7 @@ namespace eosiosystem {
//##YTA-Change start:
//eosio_assert( producers.size() <= 30, "attempt to vote for too many producers" );
// One voter can only vote for one producer
eosio_assert
(
producers
.
size
()
<=
30
,
"attempt to vote for too many producers"
);
eosio_assert
(
producers
.
size
()
<=
1
,
"attempt to vote for too many producers"
);
//##YTA-Change end:
for
(
size_t
i
=
1
;
i
<
producers
.
size
();
++
i
)
{
eosio_assert
(
producers
[
i
-
1
]
<
producers
[
i
],
"producer votes must be unique and sorted"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录