Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
aaae7167
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,发现更多精彩内容 >>
未验证
提交
aaae7167
编写于
5月 03, 2018
作者:
K
Kevin Heifner
提交者:
GitHub
5月 03, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2743 from EOSIO/decimals
Fix for #2322 - issue and transfer quantities are processed the same way
上级
06aade1d
7f73b459
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
51 addition
and
3 deletion
+51
-3
contracts/eosio.token/eosio.token.cpp
contracts/eosio.token/eosio.token.cpp
+4
-0
contracts/eosiolib/asset.hpp
contracts/eosiolib/asset.hpp
+0
-1
unittests/currency_tests.cpp
unittests/currency_tests.cpp
+45
-0
unittests/eosio.token_tests.cpp
unittests/eosio.token_tests.cpp
+2
-2
未找到文件。
contracts/eosio.token/eosio.token.cpp
浏览文件 @
aaae7167
...
...
@@ -45,6 +45,10 @@ void token::issue( account_name to, asset quantity, string memo )
require_auth
(
st
.
issuer
);
eosio_assert
(
quantity
.
is_valid
(),
"invalid quantity"
);
eosio_assert
(
quantity
.
amount
>
0
,
"must issue positive quantity"
);
if
(
quantity
.
symbol
.
precision
()
!=
st
.
supply
.
symbol
.
precision
()
)
quantity
.
adjust_precision
(
st
.
supply
.
symbol
);
eosio_assert
(
quantity
<=
st
.
max_supply
-
st
.
supply
,
"quantity exceeds available supply"
);
statstable
.
modify
(
st
,
0
,
[
&
](
auto
&
s
)
{
...
...
contracts/eosiolib/asset.hpp
浏览文件 @
aaae7167
...
...
@@ -257,7 +257,6 @@ namespace eosio {
return
;
eosio_assert
(
ref_sym
.
precision
()
>=
this
->
symbol
.
precision
(),
"asset symbol has higher precision than expected"
);
for
(
uint8_t
i
=
0
;
i
<
ref_sym
.
precision
()
-
this
->
symbol
.
precision
();
++
i
)
{
printi
(
amount
);
this
->
amount
*=
10
;
}
this
->
symbol
.
value
=
ref_sym
.
value
;
...
...
unittests/currency_tests.cpp
浏览文件 @
aaae7167
...
...
@@ -63,6 +63,16 @@ class currency_tester : public TESTER {
return
trace
;
}
auto
issue
(
const
account_name
&
to
,
const
std
::
string
&
quantity
,
const
std
::
string
&
memo
=
""
)
{
auto
trace
=
push_action
(
N
(
eosio
.
token
),
N
(
issue
),
mutable_variant_object
()
(
"to"
,
to
)
(
"quantity"
,
quantity
)
(
"memo"
,
memo
)
);
produce_block
();
return
trace
;
}
currency_tester
()
:
TESTER
(),
abi_ser
(
json
::
from_string
(
eosio_token_abi
).
as
<
abi_def
>
())
{
...
...
@@ -571,6 +581,41 @@ BOOST_FIXTURE_TEST_CASE( test_input_quantity, currency_tester ) try {
eosio_assert_message_is
(
"asset symbol has higher precision than expected"
)
);
}
// transfer using different symbol name fails
{
BOOST_REQUIRE_THROW
(
transfer
(
N
(
alice
),
N
(
carl
),
"20.50 USD"
),
fc
::
assert_exception
);
}
// issue to alice using right precision
{
auto
trace
=
issue
(
N
(
alice
),
"25.0256 CUR"
);
BOOST_CHECK_EQUAL
(
true
,
chain_has_transaction
(
trace
->
id
));
BOOST_CHECK_EQUAL
(
asset
::
from_string
(
"112.0256 CUR"
),
get_balance
(
N
(
alice
)));
}
// issue to alice again using lower precision
{
auto
trace
=
issue
(
N
(
alice
),
"21.03 CUR"
);
BOOST_CHECK_EQUAL
(
true
,
chain_has_transaction
(
trace
->
id
));
BOOST_CHECK_EQUAL
(
asset
::
from_string
(
"133.0556 CUR"
),
get_balance
(
N
(
alice
)));
}
// no decimal point
{
auto
trace
=
issue
(
N
(
alice
),
"67 CUR"
);
BOOST_CHECK_EQUAL
(
true
,
chain_has_transaction
(
trace
->
id
));
BOOST_CHECK_EQUAL
(
asset
::
from_string
(
"200.0556 CUR"
),
get_balance
(
N
(
alice
)));
}
// issue using higher precision fails
{
BOOST_REQUIRE_EXCEPTION
(
issue
(
N
(
alice
),
"5.340067 CUR"
),
fc
::
assert_exception
,
eosio_assert_message_is
(
"asset symbol has higher precision than expected"
)
);
}
}
FC_LOG_AND_RETHROW
()
/// test_currency
BOOST_AUTO_TEST_SUITE_END
()
unittests/eosio.token_tests.cpp
浏览文件 @
aaae7167
...
...
@@ -239,11 +239,11 @@ BOOST_FIXTURE_TEST_CASE( issue_tests, eosio_token_tester ) try {
issue
(
N
(
alice
),
N
(
alice
),
asset
::
from_string
(
"-1.000 TKN"
),
"hola"
)
);
BOOST_REQUIRE_EQUAL
(
error
(
"condition: assertion failed: comparison of assets with different symbols is not allowed"
),
BOOST_REQUIRE_EQUAL
(
success
(
),
issue
(
N
(
alice
),
N
(
alice
),
asset
::
from_string
(
"1.00 TKN"
),
"hola"
)
);
BOOST_REQUIRE_EQUAL
(
error
(
"condition: assertion failed:
comparison of assets with different symbols is not allow
ed"
),
BOOST_REQUIRE_EQUAL
(
error
(
"condition: assertion failed:
asset symbol has higher precision than expect
ed"
),
issue
(
N
(
alice
),
N
(
alice
),
asset
::
from_string
(
"1.0000 TKN"
),
"hola"
)
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录