Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
8c5a0e70
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,发现更多精彩内容 >>
提交
8c5a0e70
编写于
8月 02, 2017
作者:
N
Nathan Hourt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Ref #123: Implement linkauth
Implement the linkauth handler in the system contract
上级
05550b82
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
34 addition
and
5 deletion
+34
-5
libraries/native_contract/eos_contract.cpp
libraries/native_contract/eos_contract.cpp
+32
-3
libraries/types/types.eos
libraries/types/types.eos
+2
-2
未找到文件。
libraries/native_contract/eos_contract.cpp
浏览文件 @
8c5a0e70
#include <eos/native_contract/eos_contract.hpp>
#include <eos/native_contract/balance_object.hpp>
#include <eos/chain/message_handling_contexts.hpp>
#include <eos/chain/message.hpp>
#include <eos/chain/account_object.hpp>
#include <eos/chain/exceptions.hpp>
#include <eos/chain/account_object.hpp>
#include <eos/native_contract/balance_object.hpp>
#include <eos/chain/permission_object.hpp>
#include <eos/chain/permission_link_object.hpp>
#include <eos/chain/global_property_object.hpp>
#include <eos/native_contract/staked_balance_objects.hpp>
#include <eos/native_contract/producer_objects.hpp>
...
...
@@ -360,8 +361,36 @@ void apply_eos_setproxy(apply_context& context) {
*/
}
void
apply_eos_linkauth
(
apply_context
&
context
)
{
auto
requirement
=
context
.
msg
.
as
<
types
::
linkauth
>
();
///@}
EOS_ASSERT
(
!
requirement
.
requirement
.
empty
(),
message_validate_exception
,
"Required permission cannot be empty"
);
context
.
require_authorization
(
requirement
.
account
);
auto
&
db
=
context
.
mutable_db
;
db
.
get
<
account_object
,
by_name
>
(
requirement
.
account
);
db
.
get
<
account_object
,
by_name
>
(
requirement
.
code
);
db
.
get
<
permission_object
,
by_name
>
(
requirement
.
requirement
);
auto
linkKey
=
boost
::
make_tuple
(
requirement
.
account
,
requirement
.
code
,
requirement
.
type
);
auto
link
=
db
.
find
<
permission_link_object
,
by_message_type
>
(
linkKey
);
if
(
link
)
{
EOS_ASSERT
(
link
->
required_permission
!=
requirement
.
requirement
,
message_precondition_exception
,
"Attempting to update required authority, but new requirement is same as old."
);
db
.
modify
(
*
link
,
[
requirement
=
requirement
.
requirement
](
permission_link_object
&
link
)
{
link
.
required_permission
=
requirement
;
});
}
else
{
db
.
create
<
permission_link_object
>
([
&
requirement
](
permission_link_object
&
link
)
{
link
.
account
=
requirement
.
account
;
link
.
code
=
requirement
.
code
;
link
.
message_type
=
requirement
.
type
;
link
.
required_permission
=
requirement
.
requirement
;
});
}
}
}
// namespace eos
}
// namespace native
libraries/types/types.eos
浏览文件 @
8c5a0e70
...
...
@@ -129,5 +129,5 @@ struct DeletePermission
struct linkauth
account AccountName # The account to require permissions for
code AccountName # The contract to require permissions to invoke
type FuncName
# The message type to require permissions to invoke (if empty, all message types for contract)
requirement PermissionName # The permission name to require
(if empty, use default permission requirement)
type FuncName
requirement PermissionName # The permission name to require
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录