Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
90297ff1
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,发现更多精彩内容 >>
提交
90297ff1
编写于
5月 06, 2018
作者:
K
Khaled Al-Hassanieh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move issue and payment calculations from onblock to claimrewards
上级
8d817242
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
41 addition
and
61 deletion
+41
-61
contracts/eosio.system/eosio.system.hpp
contracts/eosio.system/eosio.system.hpp
+4
-2
contracts/eosio.system/producer_pay.cpp
contracts/eosio.system/producer_pay.cpp
+37
-59
未找到文件。
contracts/eosio.system/eosio.system.hpp
浏览文件 @
90297ff1
...
...
@@ -32,7 +32,7 @@ namespace eosiosystem {
eosio
::
asset
total_ram_stake
;
block_timestamp
last_producer_schedule_update
=
0
;
block_timestamp
last_pervote_bucket_fill
=
0
;
time
last_pervote_bucket_fill
=
0
;
eosio
::
asset
eos_bucket
;
eosio
::
asset
savings
;
checksum160
last_producer_schedule_id
;
...
...
@@ -188,10 +188,12 @@ namespace eosiosystem {
void
claimrewards
(
const
account_name
&
owner
);
private:
eosio
::
asset
payment_per_block
(
double
rate
,
const
eosio
::
asset
&
token_supply
);
eosio
::
asset
payment_per_block
(
double
rate
,
const
eosio
::
asset
&
token_supply
,
uint32_t
num_blocks
);
eosio
::
asset
payment_per_vote
(
const
account_name
&
owner
,
double
owners_votes
,
const
eosio
::
asset
&
eos_bucket
);
eosio
::
asset
supply_growth
(
double
rate
,
const
eosio
::
asset
&
token_supply
,
time
seconds
);
void
update_elected_producers
(
block_timestamp
timestamp
);
// Implementation details:
...
...
contracts/eosio.system/producer_pay.cpp
浏览文件 @
90297ff1
...
...
@@ -5,19 +5,24 @@
namespace
eosiosystem
{
const
int64_t
min_daily_tokens
=
100
;
/*
const double continuous_rate =
std::log1p(0.05);
// 5% annual rate
const double per
_block_rate
= 0.0025; // 0.25%
const
double
continuous_rate
=
0.04879
;
// 5% annual rate
const
double
per
block_rate
=
0.0025
;
// 0.25%
const
double
standby_rate
=
0.0075
;
// 0.75%
const
uint32_t
blocks_per_year
=
52
*
7
*
24
*
2
*
3600
;
// half seconds per year
const
uint32_t
seconds_per_year
=
52
*
7
*
24
*
3600
;
const
uint32_t
blocks_per_day
=
2
*
24
*
3600
;
const
uint32_t
blocks_per_hour
=
2
*
3600
;
eosio::asset system_contract::payment_per_block( double rate, const eosio::asset& token_supply ) {
const int64_t payment = static_cast<int64_t>( (rate * double(token_supply.amount)) / double(blocks_per_year) );
eosio
::
asset
system_contract
::
payment_per_block
(
double
rate
,
const
eosio
::
asset
&
token_supply
,
uint32_t
num_blocks
)
{
const
int64_t
payment
=
static_cast
<
int64_t
>
(
(
rate
*
double
(
token_supply
.
amount
)
*
double
(
num_blocks
))
/
double
(
blocks_per_year
)
);
return
eosio
::
asset
(
payment
,
token_supply
.
symbol
);
}
eosio
::
asset
system_contract
::
supply_growth
(
double
rate
,
const
eosio
::
asset
&
token_supply
,
time
seconds
)
{
const
int64_t
payment
=
static_cast
<
int64_t
>
(
(
rate
*
double
(
token_supply
.
amount
)
*
double
(
seconds
))
/
double
(
seconds_per_year
)
);
return
eosio
::
asset
(
payment
,
token_supply
.
symbol
);
}
*/
void
system_contract
::
onblock
(
block_timestamp
timestamp
,
account_name
producer
)
{
using
namespace
eosio
;
...
...
@@ -34,40 +39,11 @@ namespace eosiosystem {
p
.
last_produced_block_time
=
timestamp
;
});
/// only update block producers once every minute, block_timestamp is in half seconds
if
(
timestamp
-
_gstate
.
last_producer_schedule_update
>
120
)
{
update_elected_producers
(
timestamp
);
}
/// only update block producers once every minute, block_timestamp is in half seconds
/*
if( timestamp % 120 != 0 )
return;
const asset token_supply = token( N(eosio.token)).get_supply(symbol_type(system_token_symbol).name() );
const asset issued = payment_per_block( continuous_rate, token_supply );
const asset producer_payment = payment_per_block( per_block_rate, token_supply );
const asset to_eos_bucket = payment_per_block( standby_rate, token_supply );
const asset to_savings = issued - (producer_payment + to_eos_bucket);
INLINE_ACTION_SENDER(eosio::token, issue)( N(eosio.token), {{N(eosio),N(active)}},
{N(eosio), issued, std::string("issue tokens per block")} );
*/
/*
INLINE_ACTION_SENDER(eosio::token, transfer)( N(eosio.token), {{N(eosio),N(active)}},
{N(eosio), N(eosio), to_savings, std::string("transfer to savings per block")} );
auto parameters = _global.exists() ? _global.get() : get_default_parameters();
parameters.eos_bucket += to_eos_bucket;
parameters.savings += to_savings;
_global.set ( parameters, _self );
const auto& producer_schedule_update = parameters.last_producer_schedule_update;
if ( producer_schedule_update == 0 || producer_schedule_update < timestamp + blocks_per_hour ) {
update_elected_producers( producer_schedule_update );
}
*/
}
eosio
::
asset
system_contract
::
payment_per_vote
(
const
account_name
&
owner
,
double
owners_votes
,
const
eosio
::
asset
&
eos_bucket
)
{
...
...
@@ -112,6 +88,8 @@ namespace eosiosystem {
}
void
system_contract
::
claimrewards
(
const
account_name
&
owner
)
{
using
namespace
eosio
;
require_auth
(
owner
);
auto
prod
=
_producers
.
find
(
owner
);
...
...
@@ -120,34 +98,34 @@ namespace eosiosystem {
eosio_assert
(
now
()
>=
prod
->
last_rewards_claim
+
seconds_per_day
,
"already claimed rewards within a day"
);
}
/// calcualte the price-per-block
auto
parameters
=
_global
.
get
();
const
asset
token_supply
=
token
(
N
(
eosio
.
token
)).
get_supply
(
symbol_type
(
system_token_symbol
).
name
()
);
const
time
time_since_last_fill
=
now
()
-
parameters
.
last_pervote_bucket_fill
;
const
asset
to_eos_bucket
=
supply_growth
(
standby_rate
,
token_supply
,
time_since_last_fill
);
const
asset
to_savings
=
supply_growth
(
continuous_rate
-
(
perblock_rate
+
standby_rate
),
token_supply
,
time_since_last_fill
);
const
asset
perblock_pay
=
payment_per_block
(
perblock_rate
,
token_supply
,
prod
->
produced_blocks
);
const
asset
issue_amount
=
to_eos_bucket
+
to_savings
+
perblock_pay
;
/*
eosio::asset rewards = prod->per_block_payments
;
INLINE_ACTION_SENDER
(
eosio
::
token
,
issue
)(
N
(
eosio
.
token
),
{{
N
(
eosio
),
N
(
active
)}},
{
N
(
eosio
),
issue_amount
,
std
::
string
(
"issue tokens for producer pay"
)}
)
;
if ( _global.exists() ) {
auto parameters = _global.get();
if ( parameters.eos_bucket.amount > 0 && prod->total_votes > 0 ) {
eosio::asset standby_payment = payment_per_vote( owner, prod->total_votes, parameters.eos_bucket );
if ( standby_payment.amount > 0 ) {
rewards += standby_payment;
parameters.eos_bucket -= standby_payment;
const
asset
pervote_pay
=
payment_per_vote
(
owner
,
prod
->
total_votes
,
to_eos_bucket
+
parameters
.
eos_bucket
);
parameters
.
eos_bucket
+=
(
to_eos_bucket
-
pervote_pay
);
parameters
.
last_pervote_bucket_fill
=
now
();
_global
.
set
(
parameters
,
_self
);
}
}
}
eosio_assert( rewards > asset(0, S(4,EOS)), "no rewards available to claim" );
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{
N
(
eosio
),
N
(
active
)},
{
N
(
eosio
),
owner
,
perblock_pay
+
perblock_pay
,
std
::
string
(
"producer claiming rewards"
)
}
);
_producers
.
modify
(
prod
,
0
,
[
&
](
auto
&
p
)
{
p
.
last_rewards_claim
=
now
();
p
.
produced_blocks
=
0
;
});
INLINE_ACTION_SENDER(eosio::token, transfer)( N(eosio.token), {N(eosio),N(active)},
{ N(eosio), owner, rewards, std::string("producer claiming rewards") } );
*/
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{{
N
(
eosio
),
N
(
active
)}},
{
N
(
eosio
),
N
(
eosio
),
to_savings
,
std
::
string
(
"transfer to savings"
)
}
);
}
}
//namespace eosiosystem
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录