Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
73b4f458
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,发现更多精彩内容 >>
提交
73b4f458
编写于
7月 15, 2019
作者:
W
Wang Zhi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update BP rewards policy
上级
4462b188
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
53 addition
and
15 deletion
+53
-15
contracts/eosio.system/producer_pay.cpp
contracts/eosio.system/producer_pay.cpp
+41
-11
contracts/eosio.system/voting.cpp
contracts/eosio.system/voting.cpp
+12
-4
未找到文件。
contracts/eosio.system/producer_pay.cpp
浏览文件 @
73b4f458
...
...
@@ -231,18 +231,23 @@ namespace eosiosystem {
auto
to_per_block_pay
=
to_producers
/
4
;
auto
to_per_vote_pay
=
to_producers
-
to_per_block_pay
;
INLINE_ACTION_SENDER
(
eosio
::
token
,
issue
)(
N
(
eosio
.
token
),
{{
N
(
eosio
),
N
(
active
)}},
{
N
(
eosio
),
asset
(
new_tokens
),
std
::
string
(
"issue tokens for producer pay"
)}
);
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{
N
(
eosio
),
N
(
active
)},
{
N
(
eosio
),
N
(
hddbasefound
),
asset
(
to_per_base_pay
),
"fund per-base bucket"
}
);
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{
N
(
eosio
),
N
(
active
)},
{
N
(
eosio
),
N
(
eosio
.
bpay
),
asset
(
to_per_block_pay
),
"fund per-block bucket"
}
);
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{
N
(
eosio
),
N
(
active
)},
{
N
(
eosio
),
N
(
eosio
.
vpay
),
asset
(
to_per_vote_pay
),
"fund per-vote bucket"
}
);
_gstateex
.
perbase_bucket
+=
to_per_base_pay
;
_gstate
.
pervote_bucket
+=
to_per_vote_pay
;
_gstate
.
perblock_bucket
+=
to_per_block_pay
;
...
...
@@ -251,30 +256,47 @@ namespace eosiosystem {
}
int64_t
producer_total_base_pay
=
_gstateex
.
perbase_bucket
;
int64_t
producer_total_block_pay
=
_gstate
.
pervote_bucket
;
int64_t
producer_total_vote_pay
=
_gstate
.
perblock_bucket
;
int64_t
producer_total_block_pay
=
_gstate
.
perblock_bucket
;
int64_t
producer_total_vote_pay
=
_gstate
.
pervote_bucket
;
print
(
"producer_total_base_pay -- "
,
producer_total_base_pay
,
"
\n
"
);
print
(
"producer_total_block_pay -- "
,
producer_total_block_pay
,
"
\n
"
);
print
(
"producer_total_vote_pay -- "
,
producer_total_vote_pay
,
"
\n
"
);
int64_t
producer_already_base_pay
=
0
;
int64_t
producer_already_block_pay
=
0
;
int64_t
producer_already_vote_pay
=
0
;
uint32_t
total_unpaid_blocks
=
_gstate
.
total_unpaid_blocks
;
uint32_t
total_unpaid_base_cnt
=
_gstateex
.
total_unpaid_base_cnt
;
for
(
auto
it
=
_producers
.
begin
();
it
!=
_producers
.
end
();
it
++
)
{
if
(
!
(
it
->
active
()))
continue
;
auto
prodex
=
_producersext
.
get
(
it
->
owner
);
auto
&
prodex
=
_producersext
.
get
(
it
->
owner
);
int64_t
producer_per_base_pay
=
0
;
if
(
_gstateex
.
total_unpaid_base_cnt
>
0
)
{
producer_per_base_pay
=
(
_gstateex
.
perbase_bucket
*
prodex
.
unpaid_base_cnt
)
/
_gstateex
.
total_unpaid_base_cnt
;
producer_per_base_pay
=
(
_gstateex
.
perbase_bucket
*
prodex
.
unpaid_base_cnt
)
/
total_unpaid_base_cnt
;
}
int64_t
producer_per_block_pay
=
0
;
if
(
_gstate
.
total_unpaid_blocks
>
0
)
{
producer_per_block_pay
=
(
_gstate
.
perblock_bucket
*
it
->
unpaid_blocks
)
/
_gstate
.
total_unpaid_blocks
;
producer_per_block_pay
=
(
_gstate
.
perblock_bucket
*
it
->
unpaid_blocks
)
/
total_unpaid_blocks
;
}
int64_t
producer_per_vote_pay
=
0
;
if
(
_gstate
.
total_producer_vote_weight
>
0
)
{
producer_per_vote_pay
=
int64_t
((
_gstate
.
pervote_bucket
*
it
->
total_votes
)
/
_gstate
.
total_producer_vote_weight
);
}
print
(
"producer_per_base_pay -- "
,
producer_per_base_pay
,
"
\n
"
);
print
(
"producer_per_block_pay -- "
,
producer_per_block_pay
,
"
\n
"
);
print
(
"producer_per_vote_pay -- "
,
producer_per_vote_pay
,
"
\n
"
);
_gstate
.
total_unpaid_blocks
-=
it
->
unpaid_blocks
;
_gstateex
.
total_unpaid_base_cnt
-=
prodex
.
unpaid_base_cnt
;
_producers
.
modify
(
it
,
0
,
[
&
](
auto
&
p
)
{
p
.
last_claim_time
=
ct
;
p
.
unpaid_blocks
=
0
;
...
...
@@ -284,32 +306,40 @@ namespace eosiosystem {
p
.
unpaid_base_cnt
=
0
;
});
_gstate
.
total_unpaid_blocks
-=
it
->
unpaid_blocks
;
_gstateex
.
total_unpaid_base_cnt
-=
prodex
.
unpaid_base_cnt
;
if
(
producer_per_base_pay
>
0
&&
((
producer_per_base_pay
+
producer_already_base_pay
)
<=
producer_total_base_pay
)
)
{
producer_already_base_pay
+=
producer_per_base_pay
;
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{
N
(
hddbasefound
),
N
(
active
)},
{
N
(
hddbasefound
),
it
->
owner
,
asset
(
producer_per_base_pay
),
std
::
string
(
"producer base pay"
)
}
);
}
if
(
producer_per_block_pay
>
0
&&
((
producer_per_block_pay
+
producer_already_block_pay
)
<=
producer_total_block_pay
)
)
{
producer_already_block_pay
+=
producer_per_block_pay
;
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{
N
(
eosio
.
bpay
),
N
(
active
)},
{
N
(
eosio
.
bpay
),
it
->
owner
,
asset
(
producer_per_block_pay
),
std
::
string
(
"producer block pay"
)
}
);
}
if
(
producer_per_vote_pay
>
0
&&
((
producer_per_vote_pay
+
producer_already_vote_pay
)
<=
producer_total_vote_pay
)
)
{
producer_already_vote_pay
+=
producer_per_vote_pay
;
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{
N
(
eosio
.
vpay
),
N
(
active
)},
{
N
(
eosio
.
vpay
),
it
->
owner
,
asset
(
producer_per_vote_pay
),
std
::
string
(
"producer vote pay"
)
}
);
}
}
_gstateex
.
perbase_bucket
-=
producer_already_base_pay
;
_gstate
.
pervote_bucket
-=
producer_already_block_pay
;
_gstate
.
perblock_bucket
-=
producer_already_vote_pay
;
_gstate
.
pervote_bucket
-=
producer_already_vote_pay
;
_gstate
.
perblock_bucket
-=
producer_already_block_pay
;
if
(
_gstateex
.
perbase_bucket
<
0
)
_gstateex
.
perbase_bucket
=
0
;
if
(
_gstate
.
pervote_bucket
<
0
)
_gstate
.
pervote_bucket
=
0
;
if
(
_gstate
.
perblock_bucket
<
0
)
_gstate
.
perblock_bucket
=
0
;
}
...
...
contracts/eosio.system/voting.cpp
浏览文件 @
73b4f458
...
...
@@ -107,8 +107,16 @@ namespace eosiosystem {
void
system_contract
::
clsprods2
()
{
require_auth
(
_self
);
while
(
_producersext
.
begin
()
!=
_producersext
.
end
())
while
(
_producersext
.
begin
()
!=
_producersext
.
end
())
{
auto
it
=
_producersext
.
begin
();
//it->out_votes
const
auto
&
prod
=
_producers
.
get
(
it
->
owner
,
"producer not found"
);
_producers
.
modify
(
prod
,
0
,
[
&
](
producer_info
&
info
){
info
.
total_votes
-=
it
->
out_votes
;
});
_gstate
.
total_producer_vote_weight
-=
it
->
out_votes
;
_producersext
.
erase
(
_producersext
.
begin
());
}
for
(
uint16_t
seq
=
1
;
seq
<=
21
;
seq
++
)
{
producers_seq_table
_prod_seq
(
_self
,
seq
);
...
...
@@ -376,9 +384,9 @@ namespace eosiosystem {
const
auto
&
prod
=
_producers
.
get
(
producer
,
"producer not found"
);
//auto it = _producers.find(producer);
//eosio_assert( it != _producers.end() , "producer not found");
int64_t
vote_delta
=
0
;
_producers
.
modify
(
prod
,
0
,
[
&
](
producer_info
&
info
){
int64_t
vote_delta
=
0
;
auto
pitr2
=
_producersext
.
find
(
producer
);
if
(
pitr2
!=
_producersext
.
end
()
)
{
vote_delta
=
tickets
-
pitr2
->
out_votes
;
...
...
@@ -389,7 +397,7 @@ namespace eosiosystem {
update_producers_seq_totalvotes
(
pitr2
->
seq_num
,
producer
,
info
.
total_votes
);
}
});
_gstate
.
total_producer_vote_weight
+=
tickets
;
_gstate
.
total_producer_vote_weight
+=
vote_delta
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录