合约分层
WeIdentity采用分层设计模式,即将合约分为逻辑合约、数据合约、及权限合约。
逻辑合约:它专注于数据的逻辑处理和对外提供接口,通过访问数据合约获得数据,对数据做逻辑处理,写回数据合约。一般情况下,控制器合约不需要存储任何数据,它完全依赖外部的输入来决定对数据合约的访问。
数据合约:它专注于数据结构的定义、数据内容的存储和数据读写的直接接口。
权限合约:它专注于判断访问者的角色,并基于判断结果确定不同操作的权限。
当前的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确定权限。
- 智能合约开发系统开发设计一站式解决方案 2024-11-21
- Web3.0智能合约DAPP系统开发技术 2024-11-21
- FISCO BCOS智能合约开发 2024-11-21
- 智能合约DAPP系统开发详解介绍 2024-11-21
- ARB链智能合约开发运营版丨ARB链智能合约系统开发 2024-11-21
- ARB链OP链马蹄链智能合约dapp系统开发 2024-11-21
- OP链ARBT项目系统开发指南与详情智能合约 2024-11-21
- DAPP开发(三)——智能合约开发 2024-11-21
- 链游开发-链游出售-Dapp合约的链上游戏 2024-11-21
- 链游定制开发 NFT游戏系统开发搭建 2024-11-21
- 链游链游开发的-dapp开发,DeFi开发,IDO开发 2024-11-21
- 链游开发,成品出售.数字藏品交易平台 2024-11-21
- 链游搭建与开发 NFT游戏开发定制服务商 2024-11-21
- nft链游开发链上游戏开发 2024-11-21
- 链游DAPP智能合约游戏系统开发 2024-11-21
联系方式
- 电 话:15515813000
- 联系人:王乾
- 手 机:15515813000
- 微 信:15515813000