Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
31cf5f73
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,体验更适合开发者的 AI 搜索 >>
提交
31cf5f73
编写于
10月 31, 2019
作者:
W
Wang Zhi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update system contract
上级
6d15e2a6
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
33 addition
and
168 deletion
+33
-168
contracts/eosio.system/eosio.system.abi
contracts/eosio.system/eosio.system.abi
+1
-11
contracts/eosio.system/eosio.system.cpp
contracts/eosio.system/eosio.system.cpp
+1
-2
contracts/eosio.system/eosio.system.hpp
contracts/eosio.system/eosio.system.hpp
+7
-8
contracts/eosio.system/producer_pay.cpp
contracts/eosio.system/producer_pay.cpp
+6
-101
contracts/eosio.system/voting.cpp
contracts/eosio.system/voting.cpp
+18
-46
未找到文件。
contracts/eosio.system/eosio.system.abi
浏览文件 @
31cf5f73
...
...
@@ -307,6 +307,7 @@
"fields": [
{"name":"owner", "type":"account_name"},
{"name":"seq_num", "type":"uint16"},
{"name":"level", "type":"uint8"},
{"name":"out_votes", "type":"int64"},
{"name":"deposit_votes", "type":"int64"},
{"name":"unpaid_base_cnt", "type":"uint32"},
...
...
@@ -352,13 +353,6 @@
"name": "testnewelec",
"base": "",
"fields": []
},{
"name": "tmpvotennn",
"base": "",
"fields": [
{"name":"producer", "type":"account_name"},
{"name":"tickets", "type":"int64"}
]
},{
"name": "setram",
"base": "",
...
...
@@ -575,10 +569,6 @@
"name": "testnewelec",
"type": "testnewelec",
"ricardian_contract": ""
},{
"name": "tmpvotennn",
"type": "tmpvotennn",
"ricardian_contract": ""
},{
"name": "regproxy",
"type": "regproxy",
...
...
contracts/eosio.system/eosio.system.cpp
浏览文件 @
31cf5f73
...
...
@@ -96,8 +96,7 @@ namespace eosiosystem {
_producers
.
modify
(
prod
,
0
,
[
&
](
auto
&
p
)
{
p
.
deactivate
();
});
change_producer_seq_info
(
producer
,
public_key
(),
false
,
false
,
""
);
change_producer_yta_info
(
producer
,
public_key
(),
false
,
false
,
""
);
}
void
system_contract
::
bidname
(
account_name
bidder
,
account_name
newname
,
asset
bid
)
{
...
...
contracts/eosio.system/eosio.system.hpp
浏览文件 @
31cf5f73
...
...
@@ -101,13 +101,14 @@ namespace eosiosystem {
struct
producer_info_ext
{
account_name
owner
;
uint16_t
seq_num
=
1
;
// from 1 to 21
uint8_t
level
=
3
;
int64_t
out_votes
=
0
;
int64_t
deposit_votes
=
0
;
uint32_t
unpaid_base_cnt
=
0
;
account_name
shadow
=
0
;
uint64_t
primary_key
()
const
{
return
owner
;
}
EOSLIB_SERIALIZE
(
producer_info_ext
,
(
owner
)(
seq_num
)(
out_votes
)(
deposit_votes
)(
unpaid_base_cnt
)(
shadow
))
EOSLIB_SERIALIZE
(
producer_info_ext
,
(
owner
)(
seq_num
)(
level
)(
out_votes
)(
deposit_votes
)(
unpaid_base_cnt
)(
shadow
))
};
//##YTA-Change end:
...
...
@@ -117,7 +118,7 @@ namespace eosiosystem {
account_name
owner
;
double
total_votes
=
0
;
// total votes
eosio
::
public_key
producer_key
;
/// a packed public key object
int64_t
all_stake
=
0
;
// total original votes (buy yta amount)
int64_t
all_stake
=
0
;
// total original votes (buy yta amount)
-- depracated
bool
is_active
=
true
;
std
::
string
url
;
uint16_t
location
=
0
;
...
...
@@ -276,8 +277,6 @@ namespace eosiosystem {
void
seqproducer
(
const
account_name
producer
,
const
account_name
shadow
,
uint16_t
seq
,
uint8_t
level
);
void
tmpvotennn
(
const
account_name
producer
,
int64_t
tickets
);
void
testnewelec
();
void
changevotes
(
const
account_name
voter_name
);
...
...
@@ -306,13 +305,13 @@ namespace eosiosystem {
//##YTA-Change start:
void
update_elected_producers_yta
(
block_timestamp
timestamp
);
void
rm_producer_
seq
(
const
account_name
producer
,
uint16_t
seq
);
void
rm_producer_
yta
(
const
account_name
producer
);
void
add_producer_
seq
(
const
account_name
producer
,
uint16_t
seq
,
uint8_t
level
);
void
add_producer_
yta
(
const
account_name
producer
,
uint8_t
level
);
void
change_producer_
seq
_info
(
const
account_name
producer
,
const
eosio
::
public_key
&
producer_key
,
bool
isactive
,
bool
seturl
,
const
std
::
string
&
url
);
void
change_producer_
yta
_info
(
const
account_name
producer
,
const
eosio
::
public_key
&
producer_key
,
bool
isactive
,
bool
seturl
,
const
std
::
string
&
url
);
void
update_producers_
seq_totalvotes
(
uint16_t
seq_num
,
account_name
owner
,
double
total_votes
);
void
update_producers_
yta_totalvotes
(
account_name
owner
,
double
total_votes
);
void
delproducer
(
const
account_name
producer
);
//##YTA-Change end:
...
...
contracts/eosio.system/producer_pay.cpp
浏览文件 @
31cf5f73
...
...
@@ -107,109 +107,14 @@ namespace eosiosystem {
using
namespace
eosio
;
void
system_contract
::
claimrewards
(
const
account_name
&
owner
)
{
require_auth
(
_self
);
//require_auth(owner);
//@@@@@@@@@@@@@@@@@@@@
const
auto
&
prod
=
_producers
.
get
(
owner
);
eosio_assert
(
prod
.
active
(),
"producer does not have an active key"
);
eosio_assert
(
_gstate
.
total_activated_stake
>=
min_activated_stake
,
"cannot claim rewards until the chain is activated (at least 15% of all tokens participate in voting)"
);
auto
ct
=
current_time
();
eosio_assert
(
ct
-
prod
.
last_claim_time
>
useconds_per_day
,
"already claimed rewards within past day"
);
const
asset
token_supply
=
token
(
N
(
eosio
.
token
)).
get_supply
(
symbol_type
(
system_token_symbol
).
name
()
);
const
auto
usecs_since_last_fill
=
ct
-
_gstate
.
last_pervote_bucket_fill
;
print
(
"usecs_since_last_fill: "
,
usecs_since_last_fill
,
"
\n
"
);
print
(
"_gstate.last_pervote_bucket_fill: "
,
_gstate
.
last_pervote_bucket_fill
,
"
\n
"
);
print
(
"now(): "
,
now
(),
"
\n
"
);
int
idx_year
=
(
int
)((
now
()
-
block_initial_timestamp
)
/
seconds_per_year
);
auto
seo_token
=
yta_seo_year
[
idx_year
]
*
YTA_SEO_BASE
;
print
(
"idx_year: "
,
idx_year
,
"
\n
"
);
print
(
"yta_seo_year[idx_year]: "
,
yta_seo_year
[
idx_year
],
"
\n
"
);
print
(
"token_supply: "
,
token_supply
,
"
\n
"
);
print
(
"seo_token: "
,
seo_token
,
"
\n
"
);
if
(
usecs_since_last_fill
>
0
&&
_gstate
.
last_pervote_bucket_fill
>
0
)
{
auto
new_tokens
=
static_cast
<
int64_t
>
(
seo_token
*
YTA_PRECISION
*
double
(
usecs_since_last_fill
)
/
double
(
useconds_per_year
));
print
(
"new_token: "
,
new_tokens
,
"
\n
"
);
auto
to_per_base_pay
=
static_cast
<
int64_t
>
((
new_tokens
*
3
)
/
5
);
auto
to_producers
=
new_tokens
-
to_per_base_pay
;
auto
to_per_block_pay
=
to_producers
/
2
;
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
;
_gstate
.
last_pervote_bucket_fill
=
ct
;
}
const
auto
&
prodext
=
_producersext
.
get
(
owner
);
int64_t
producer_per_base_pay
=
0
;
if
(
_gstateex
.
total_unpaid_base_cnt
>
0
)
{
producer_per_base_pay
=
(
_gstateex
.
perbase_bucket
*
prodext
.
unpaid_base_cnt
)
/
_gstateex
.
total_unpaid_base_cnt
;
}
int64_t
producer_per_block_pay
=
0
;
if
(
_gstate
.
total_unpaid_blocks
>
0
)
{
producer_per_block_pay
=
(
_gstate
.
perblock_bucket
*
prod
.
unpaid_blocks
)
/
_gstate
.
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
*
prod
.
total_votes
)
/
_gstate
.
total_producer_vote_weight
);
}
if
(
producer_per_vote_pay
<
min_pervote_daily_pay
)
{
producer_per_vote_pay
=
0
;
}
_gstateex
.
perbase_bucket
-=
producer_per_base_pay
;
_gstate
.
pervote_bucket
-=
producer_per_vote_pay
;
_gstate
.
perblock_bucket
-=
producer_per_block_pay
;
_gstate
.
total_unpaid_blocks
-=
prod
.
unpaid_blocks
;
_gstateex
.
total_unpaid_base_cnt
-=
prodext
.
unpaid_base_cnt
;
_producers
.
modify
(
prod
,
0
,
[
&
](
auto
&
p
)
{
p
.
last_claim_time
=
ct
;
p
.
unpaid_blocks
=
0
;
});
_producersext
.
modify
(
prodext
,
0
,
[
&
](
auto
&
p
)
{
p
.
unpaid_base_cnt
=
0
;
});
eosio_assert
(
1
==
2
,
"can not claimrewards by self"
);
return
;
((
void
)
owner
);
if
(
producer_per_base_pay
>
0
)
{
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{
N
(
hddbasefound
),
N
(
active
)},
{
N
(
hddbasefound
),
owner
,
asset
(
producer_per_base_pay
),
std
::
string
(
"producer base pay"
)
}
);
}
if
(
producer_per_block_pay
>
0
)
{
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{
N
(
eosio
.
bpay
),
N
(
active
)},
{
N
(
eosio
.
bpay
),
owner
,
asset
(
producer_per_block_pay
),
std
::
string
(
"producer block pay"
)
}
);
}
if
(
producer_per_vote_pay
>
0
)
{
INLINE_ACTION_SENDER
(
eosio
::
token
,
transfer
)(
N
(
eosio
.
token
),
{
N
(
eosio
.
vpay
),
N
(
active
)},
{
N
(
eosio
.
vpay
),
owner
,
asset
(
producer_per_vote_pay
),
std
::
string
(
"producer vote pay"
)
}
);
}
require_auth
(
_self
);
//require_auth(owner);
}
...
...
contracts/eosio.system/voting.cpp
浏览文件 @
31cf5f73
...
...
@@ -54,7 +54,7 @@ namespace eosiosystem {
info.location = location;
});
change_producer_
seq
_info(producer, producer_key, true, true, url);
change_producer_
yta
_info(producer, producer_key, true, true, url);
} else {
_producers.emplace( producer, [&]( producer_info& info ){
info.owner = producer;
...
...
@@ -79,7 +79,7 @@ namespace eosiosystem {
info
.
location
=
location
;
});
change_producer_
seq
_info
(
producer
,
producer_key
,
true
,
true
,
url
);
change_producer_
yta
_info
(
producer
,
producer_key
,
true
,
true
,
url
);
}
else
{
_producers
.
emplace
(
_self
,
[
&
](
producer_info
&
info
){
info
.
owner
=
producer
;
...
...
@@ -94,18 +94,16 @@ namespace eosiosystem {
}
void
system_contract
::
unregprod
(
const
account_name
producer
)
{
require_auth
(
producer
);
///@@@@@@@@@@@@@@@@@@@@@
eosio_assert
(
1
==
2
,
"unregprod is disabled"
);
return
;
require_auth
(
producer
);
const
auto
&
prod
=
_producers
.
get
(
producer
,
"producer not found"
);
_producers
.
modify
(
prod
,
0
,
[
&
](
producer_info
&
info
){
info
.
deactivate
();
});
change_producer_
seq
_info
(
producer
,
public_key
(),
false
,
false
,
""
);
change_producer_
yta
_info
(
producer
,
public_key
(),
false
,
false
,
""
);
}
//##YTA-Change start:
void
system_contract
::
clsprods2
()
{
...
...
@@ -146,17 +144,13 @@ namespace eosiosystem {
}
auto
itpex
=
_producersext
.
find
(
producer
);
uint16_t
seq_num
=
0
;
if
(
itpex
!=
_producersext
.
end
()
)
{
_gstateex
.
total_unpaid_base_cnt
-=
itpex
->
unpaid_base_cnt
;
seq_num
=
itpex
->
seq_num
;
_producersext
.
erase
(
itpex
);
}
else
{
return
;
}
rm_producer_seq
(
producer
,
seq_num
);
rm_producer_yta
(
producer
);
}
void
system_contract
::
seqproducer
(
const
account_name
producer
,
const
account_name
shadow
,
uint16_t
seq
,
uint8_t
level
)
{
...
...
@@ -175,23 +169,22 @@ namespace eosiosystem {
_producersext
.
emplace
(
_self
,
[
&
](
auto
&
row
)
{
row
.
owner
=
producer
;
row
.
seq_num
=
seq
;
row
.
level
=
level
;
row
.
shadow
=
shadow
;
});
add_producer_
seq
(
producer
,
seq
,
level
);
add_producer_
yta
(
producer
,
level
);
}
else
{
uint16_t
old_seq
=
it
->
seq_num
;
_producersext
.
modify
(
it
,
_self
,
[
&
](
auto
&
row
)
{
row
.
seq_num
=
seq
;
row
.
level
=
level
;
row
.
shadow
=
shadow
;
});
rm_producer_
seq
(
producer
,
old_seq
);
add_producer_
seq
(
producer
,
seq
,
level
);
rm_producer_
yta
(
producer
);
add_producer_
yta
(
producer
,
level
);
}
}
void
system_contract
::
rm_producer_seq
(
const
account_name
producer
,
uint16_t
seq
)
{
void
system_contract
::
rm_producer_yta
(
const
account_name
producer
)
{
all_prods_singleton
_all_prods
(
_self
,
_self
);
all_prods_level
_all_prods_state
;
if
(
_all_prods
.
exists
())
{
...
...
@@ -219,7 +212,7 @@ namespace eosiosystem {
}
void
system_contract
::
add_producer_
seq
(
const
account_name
producer
,
uint16_t
seq
,
uint8_t
level
)
{
void
system_contract
::
add_producer_
yta
(
const
account_name
producer
,
uint8_t
level
)
{
//need retrive from system producers table
const
auto
&
prod
=
_producers
.
get
(
producer
,
"producer not found"
);
...
...
@@ -242,8 +235,10 @@ namespace eosiosystem {
prodyta
.
total_votes
=
prod
.
total_votes
;
prodyta
.
url
=
prod
.
url
;
if
(
level
==
1
)
{
eosio_assert
(
_all_prods_state
.
prods_l1
.
size
()
<
21
,
"too many level one bp"
);
_all_prods_state
.
prods_l1
.
push_back
(
prodyta
);
}
else
if
(
level
==
2
)
{
eosio_assert
(
_all_prods_state
.
prods_l2
.
size
()
<
105
,
"too many level two bp"
);
_all_prods_state
.
prods_l2
.
push_back
(
prodyta
);
}
else
{
_all_prods_state
.
prods_l3
.
push_back
(
prodyta
);
...
...
@@ -252,7 +247,7 @@ namespace eosiosystem {
}
void
system_contract
::
change_producer_
seq
_info
(
const
account_name
producer
,
const
eosio
::
public_key
&
producer_key
,
bool
isactive
,
bool
seturl
,
const
std
::
string
&
url
)
{
void
system_contract
::
change_producer_
yta
_info
(
const
account_name
producer
,
const
eosio
::
public_key
&
producer_key
,
bool
isactive
,
bool
seturl
,
const
std
::
string
&
url
)
{
if
(
!
isactive
)
{
delproducer
(
producer
);
...
...
@@ -295,7 +290,7 @@ namespace eosiosystem {
}
void
system_contract
::
update_producers_
seq_totalvotes
(
uint16_t
seq_num
,
account_name
owner
,
double
total_votes
)
{
void
system_contract
::
update_producers_
yta_totalvotes
(
account_name
owner
,
double
total_votes
)
{
all_prods_singleton
_all_prods
(
_self
,
_self
);
all_prods_level
_all_prods_state
;
...
...
@@ -333,29 +328,6 @@ namespace eosiosystem {
update_elected_producers_yta
(
block_time
);
}
void
system_contract
::
tmpvotennn
(
const
account_name
producer
,
int64_t
tickets
)
{
require_auth
(
_self
);
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
){
auto
pitr2
=
_producersext
.
find
(
producer
);
if
(
pitr2
!=
_producersext
.
end
()
)
{
vote_delta
=
tickets
-
pitr2
->
out_votes
;
info
.
total_votes
+=
vote_delta
;
_producersext
.
modify
(
pitr2
,
0
,
[
&
](
producer_info_ext
&
info2
){
info2
.
out_votes
=
tickets
;
});
update_producers_seq_totalvotes
(
pitr2
->
seq_num
,
producer
,
info
.
total_votes
);
}
});
_gstate
.
total_producer_vote_weight
+=
vote_delta
;
}
void
system_contract
::
update_elected_producers_yta
(
block_timestamp
block_time
)
{
all_prods_singleton
_all_prods
(
_self
,
_self
);
...
...
@@ -808,7 +780,7 @@ namespace eosiosystem {
auto
pitr2
=
_producersext
.
find
(
pd
.
first
);
if
(
pitr2
!=
_producersext
.
end
()
)
{
//pitr2->seq_num
update_producers_
seq_totalvotes
(
pitr2
->
seq_num
,
pd
.
first
,
total_votes
);
update_producers_
yta_totalvotes
(
pd
.
first
,
total_votes
);
}
else
{
if
(
voting
)
{
eosio_assert
(
!
pd
.
second
.
second
/* not from new set */
,
"producer is not registered"
);
//data corruption
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录