Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
0536d6e6
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,发现更多精彩内容 >>
提交
0536d6e6
编写于
5月 21, 2018
作者:
A
Anton Perkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
system contract: unit-test for taking stake from pednding refund #3213 bugfix #3180
上级
6a84f63e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
81 addition
and
1 deletion
+81
-1
contracts/eosio.system/delegate_bandwidth.cpp
contracts/eosio.system/delegate_bandwidth.cpp
+4
-0
contracts/eosio.system/eosio.system.abi
contracts/eosio.system/eosio.system.abi
+2
-1
unittests/eosio.system_tests.cpp
unittests/eosio.system_tests.cpp
+75
-0
未找到文件。
contracts/eosio.system/delegate_bandwidth.cpp
浏览文件 @
0536d6e6
...
...
@@ -303,11 +303,15 @@ namespace eosiosystem {
if
(
r
.
net_amount
<
asset
(
0
)
)
{
net_balance
=
-
r
.
net_amount
;
r
.
net_amount
=
asset
(
0
);
}
else
{
net_balance
=
asset
(
0
);
}
r
.
cpu_amount
-=
cpu_balance
;
if
(
r
.
cpu_amount
<
asset
(
0
)
){
cpu_balance
=
-
r
.
cpu_amount
;
r
.
cpu_amount
=
asset
(
0
);
}
else
{
cpu_balance
=
asset
(
0
);
}
});
eosio_assert
(
asset
(
0
)
<=
req
->
net_amount
,
"negative net refund amount"
);
//should never happen
...
...
contracts/eosio.system/eosio.system.abi
浏览文件 @
0536d6e6
...
...
@@ -207,7 +207,8 @@
"fields": [
{"name":"owner", "type":"account_name"},
{"name":"request_time", "type":"time_point_sec"},
{"name":"amount", "type":"uint64"}
{"name":"net_amount", "type":"asset"},
{"name":"cpu_amount", "type":"asset"}
]
},{
"name": "blockchain_parameters",
...
...
unittests/eosio.system_tests.cpp
浏览文件 @
0536d6e6
...
...
@@ -378,6 +378,11 @@ public:
}
fc
::
variant
get_refund_request
(
name
account
)
{
vector
<
char
>
data
=
get_row_by_account
(
N
(
eosio
),
account
,
N
(
refunds
),
account
);
return
data
.
empty
()
?
fc
::
variant
()
:
abi_ser
.
binary_to_variant
(
"refund_request"
,
data
);
}
abi_serializer
abi_ser
;
abi_serializer
token_abi_ser
;
};
...
...
@@ -856,6 +861,76 @@ BOOST_FIXTURE_TEST_CASE( adding_stake_partial_unstake, eosio_system_tester ) try
}
FC_LOG_AND_RETHROW
()
BOOST_FIXTURE_TEST_CASE
(
stake_from_refund
,
eosio_system_tester
)
try
{
issue
(
"alice1111111"
,
core_from_string
(
"1000.0000"
),
config
::
system_account_name
);
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"alice1111111"
,
"bob111111111"
,
core_from_string
(
"200.0000"
),
core_from_string
(
"100.0000"
)
)
);
auto
total
=
get_total_stake
(
"bob111111111"
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"210.0000"
),
total
[
"net_weight"
].
as
<
asset
>
());
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"110.0000"
),
total
[
"cpu_weight"
].
as
<
asset
>
());
REQUIRE_MATCHING_OBJECT
(
voter
(
"alice1111111"
,
core_from_string
(
"300.0000"
)
),
get_voter_info
(
"alice1111111"
)
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"700.0000"
),
get_balance
(
"alice1111111"
)
);
//unstake a share
BOOST_REQUIRE_EQUAL
(
success
(),
unstake
(
"alice1111111"
,
"bob111111111"
,
core_from_string
(
"100.0000"
),
core_from_string
(
"50.0000"
)
)
);
total
=
get_total_stake
(
"bob111111111"
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"110.0000"
),
total
[
"net_weight"
].
as
<
asset
>
());
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"60.0000"
),
total
[
"cpu_weight"
].
as
<
asset
>
());
REQUIRE_MATCHING_OBJECT
(
voter
(
"alice1111111"
,
core_from_string
(
"150.0000"
)
),
get_voter_info
(
"alice1111111"
)
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"700.0000"
),
get_balance
(
"alice1111111"
)
);
auto
refund
=
get_refund_request
(
"alice1111111"
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"100.0000"
),
refund
[
"net_amount"
].
as
<
asset
>
()
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"50.0000"
),
refund
[
"cpu_amount"
].
as
<
asset
>
()
);
//XXX auto request_time = refund["request_time"].as_int64();
//std::cout << std::endl << std::endl << "Stake from refund" << std::endl;
//stake less than pending refund, entire amount should be traken from refund
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"alice1111111"
,
"bob111111111"
,
core_from_string
(
"50.0000"
),
core_from_string
(
"25.0000"
)
)
);
total
=
get_total_stake
(
"bob111111111"
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"160.0000"
),
total
[
"net_weight"
].
as
<
asset
>
());
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"85.0000"
),
total
[
"cpu_weight"
].
as
<
asset
>
());
refund
=
get_refund_request
(
"alice1111111"
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"50.0000"
),
refund
[
"net_amount"
].
as
<
asset
>
()
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"25.0000"
),
refund
[
"cpu_amount"
].
as
<
asset
>
()
);
//request time should stay the same
//BOOST_REQUIRE_EQUAL( request_time, refund["request_time"].as_int64() );
//balance shoud stay the same
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"700.0000"
),
get_balance
(
"alice1111111"
)
);
//stake exactly pending refund amount
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"alice1111111"
,
"bob111111111"
,
core_from_string
(
"50.0000"
),
core_from_string
(
"25.0000"
)
)
);
total
=
get_total_stake
(
"bob111111111"
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"210.0000"
),
total
[
"net_weight"
].
as
<
asset
>
());
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"110.0000"
),
total
[
"cpu_weight"
].
as
<
asset
>
());
//pending refund should be removed
refund
=
get_refund_request
(
"alice1111111"
);
BOOST_TEST_REQUIRE
(
refund
.
is_null
()
);
//balance shoud stay the same
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"700.0000"
),
get_balance
(
"alice1111111"
)
);
//create pending refund again
BOOST_REQUIRE_EQUAL
(
success
(),
unstake
(
"alice1111111"
,
"bob111111111"
,
core_from_string
(
"200.0000"
),
core_from_string
(
"100.0000"
)
)
);
total
=
get_total_stake
(
"bob111111111"
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"10.0000"
),
total
[
"net_weight"
].
as
<
asset
>
());
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"10.0000"
),
total
[
"cpu_weight"
].
as
<
asset
>
());
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"700.0000"
),
get_balance
(
"alice1111111"
)
);
refund
=
get_refund_request
(
"alice1111111"
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"200.0000"
),
refund
[
"net_amount"
].
as
<
asset
>
()
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"100.0000"
),
refund
[
"cpu_amount"
].
as
<
asset
>
()
);
//stake more than pending refund
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"alice1111111"
,
"bob111111111"
,
core_from_string
(
"300.0000"
),
core_from_string
(
"200.0000"
)
)
);
total
=
get_total_stake
(
"bob111111111"
);
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"310.0000"
),
total
[
"net_weight"
].
as
<
asset
>
());
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"210.0000"
),
total
[
"cpu_weight"
].
as
<
asset
>
());
refund
=
get_refund_request
(
"alice1111111"
);
BOOST_TEST_REQUIRE
(
refund
.
is_null
()
);
//200 EOS should be taken from alice's account
BOOST_REQUIRE_EQUAL
(
core_from_string
(
"500.0000"
),
get_balance
(
"alice1111111"
)
);
}
FC_LOG_AND_RETHROW
()
// Tests for voting
BOOST_FIXTURE_TEST_CASE
(
producer_register_unregister
,
eosio_system_tester
)
try
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录