Skip to content

Commit

Permalink
move code in the Specification section
Browse files Browse the repository at this point in the history
  • Loading branch information
vdusart committed Apr 17, 2023
1 parent 301d322 commit 72583f2
Showing 1 changed file with 53 additions and 55 deletions.
108 changes: 53 additions & 55 deletions EIPS/eip-6617.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,58 @@ _Note_ The following specifications use syntax from Solidity `0.8.7` (or above)
- Permission MUST be unique
- `0` MUST be used for none permission

```solidity
pragma solidity ^0.8.7;
/**
@title EIP-6617 Bit Based Permission
@dev See https://eips.ethereum.org/EIPS/eip-6617
*/
library EIP6617 {
/**
@notice Check if _permission is a superset of _requiredPermission
@param _permission The given permission
@param _requiredPermission The required permission
@return True if the _permission is a superset of the _requiredPermission else False
*/
function permissionCheck(uint256 _permission, uint256 _requiredPermission)
internal
pure
returns (bool)
{
return _permission & _requiredPermission == _requiredPermission;
}
/**
@notice Add permission
@param _permission The given permission
@param _permissionToAdd The permission that will be added
@return The new permission with the _permissionToAdd
*/
function permissionGrant(uint256 _permission, uint256 _permissionToAdd)
internal
pure
returns (uint256)
{
return _permission | _permissionToAdd;
}
/**
@notice Remove permission
@param _permission The given permission
@param _permissionToRemove The permission that will be removed
@return The new permission without the _permissionToRemove
*/
function permissionRevoke(uint256 _permission, uint256 _permissionToRemove)
internal
pure
returns (uint256)
{
return (_permission | _permissionToRemove) ^ _permissionToRemove;
}
}
```

## Rationale

Currently permission and access control is performed using a single owner ([ERC-173](./eip-173.md)) or with `bytes32` roles ([ERC-5982](./eip-5982.md)).
Expand Down Expand Up @@ -88,63 +140,9 @@ contract Test {
}
```

## Reference Implementation

```solidity
pragma solidity ^0.8.7;
/**
@title EIP-6617 Bit Based Permission
@dev See https://eips.ethereum.org/EIPS/eip-6617
*/
library EIP6617 {
/**
@notice Check if _permission is a superset of _requiredPermission
@param _permission The given permission
@param _requiredPermission The required permission
@return True if the _permission is a superset of the _requiredPermission else False
*/
function permissionCheck(uint256 _permission, uint256 _requiredPermission)
internal
pure
returns (bool)
{
return _permission & _requiredPermission == _requiredPermission;
}
/**
@notice Add permission
@param _permission The given permission
@param _permissionToAdd The permission that will be added
@return The new permission with the _permissionToAdd
*/
function permissionGrant(uint256 _permission, uint256 _permissionToAdd)
internal
pure
returns (uint256)
{
return _permission | _permissionToAdd;
}
/**
@notice Remove permission
@param _permission The given permission
@param _permissionToRemove The permission that will be removed
@return The new permission without the _permissionToRemove
*/
function permissionRevoke(uint256 _permission, uint256 _permissionToRemove)
internal
pure
returns (uint256)
{
return (_permission | _permissionToRemove) ^ _permissionToRemove;
}
}
```

## Security Considerations

Need more discussion.
No security considerations.

## Copyright

Expand Down

0 comments on commit 72583f2

Please sign in to comment.