加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
漫云服务热线15515813000
公司新闻
智能合约链游开发详情-智能合约链游系统开发
发布时间: 2024-01-20 16:43 更新时间: 2024-11-21 20:09

    合约分层

    WeIdentity采用分层设计模式,即将合约分为逻辑合约、数据合约、及权限合约。

    逻辑合约:它专注于数据的逻辑处理和对外提供接口,通过访问数据合约获得数据,对数据做逻辑处理,写回数据合约。一般情况下,控制器合约不需要存储任何数据,它完全依赖外部的输入来决定对数据合约的访问。

    数据合约:它专注于数据结构的定义、数据内容的存储和数据读写的直接接口。

    权限合约:它专注于判断访问者的角色,并基于判断结果确定不同操作的权限。

fedd5fee32f896b8b4b551de845063fd

    当前的WeIdentity权限管理的挑战是:

    合约在链上部署之后,攻击者可能会绕过SDK直接以DApp的形式访问合约。因此合约层面必须要有自完善的权限处理逻辑,不能依赖SDK。

    数据合约是公开的,因此数据合约的操作也需要进行权限管理。

    WeIdentity的权限管理依赖于一个独立的RoleManager权限管理器合约,它承担了合约所有的权限检查逻辑。WeIdentity的权限粒度是基于角色和操作的二元组,这也是当前大多数智能合约权限控制的通用做法。 

它的设计要点包括:

    将角色和操作权限分别存储。

    设计一个权限检查函数checkPermission()供外部调用,输入参数为「地址,操作」的二元组。

    对角色和权限分别设计增删改函数供外部调用。

    所有WeIdentity的数据合约里需要进行权限检查的操作,都通过外部合约函数调用的方式,调用checkPermission()。

    所有WeIdentity依赖权限管理器的合约,需要有更新权限管理器地址的能力。

    WeIdentity的权限管理有以下特性: 

    的可扩展性。WeIdentity的权限控制合约使用外部调用而非继承(如ds-auth和OpenZepplin的Role智能合约实现角色管理方式)方式实现。在权限控制合约升级的场景中,外部调用方案只需简单地将权限管理器合约地址更新即可,极大地提升了灵活度。

    使用tx.origin而非msg.sender进行调用源追踪。这是因为用户的权限和自己的DID地址唯一绑定。因此所有权限的验证必须要以原始用户地址作为判断标准,不能单纯地依赖msg.sender。此外,WeIdentity的权限控制合约需要支持更大的可扩展性,以支持更多公众联盟链的参与成员自行实现不同的Controller。因此,需要通过tx.origin追踪到调用者的WeIdentityDID,并根据DID确定权限。



联系方式

  • 电  话:15515813000
  • 联系人:王乾
  • 手  机:15515813000
  • 微  信:15515813000