Skip to content

Commit

Permalink
Clawback transferer is allowed for to, from and operator
Browse files Browse the repository at this point in the history
  • Loading branch information
ScreamingHawk committed May 23, 2024
1 parent 578e97b commit 534ecef
Show file tree
Hide file tree
Showing 3 changed files with 164 additions and 42 deletions.
34 changes: 22 additions & 12 deletions src/tokens/wrappers/clawback/Clawback.sol
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,14 @@ contract Clawback is ERC1155MintBurn, ERC1155Metadata, IClawback {
}

/// @inheritdoc IClawbackFunctions
function wrap(uint24 templateId, TokenType tokenType, address tokenAddr, uint256 tokenId, uint256 amount, address receiver)
public
returns (uint256 wrappedTokenId)
{
function wrap(
uint24 templateId,
TokenType tokenType,
address tokenAddr,
uint256 tokenId,
uint256 amount,
address receiver
) public returns (uint256 wrappedTokenId) {
if (_templates[templateId].admin == address(0)) {
revert InvalidTemplate();
}
Expand Down Expand Up @@ -181,10 +185,13 @@ contract Clawback is ERC1155MintBurn, ERC1155Metadata, IClawback {
{
TokenDetails memory details = _tokenDetails[wrappedTokenId];
Template memory template = _templates[details.templateId];
bool isTransferer = templateTransferers[details.templateId][msg.sender];
if (!template.transferOpen && !isTransferer) {
// Transfer not allowed
revert Unauthorized();
if (!template.transferOpen) {
bool isTransferer = templateTransferers[details.templateId][msg.sender]
|| templateTransferers[details.templateId][from] || templateTransferers[details.templateId][to];
if (!isTransferer) {
// Transfer not allowed
revert Unauthorized();
}
}
super.safeTransferFrom(from, to, wrappedTokenId, amount, data);
}
Expand All @@ -208,10 +215,13 @@ contract Clawback is ERC1155MintBurn, ERC1155Metadata, IClawback {
uint256 wrappedTokenId = wrappedTokenIds[i];
TokenDetails memory details = _tokenDetails[wrappedTokenId];
Template memory template = _templates[details.templateId];
bool isTransferer = templateTransferers[details.templateId][msg.sender];
if (!template.transferOpen && !isTransferer) {
// Transfer not allowed
revert Unauthorized();
if (!template.transferOpen) {
bool isTransferer = templateTransferers[details.templateId][msg.sender]
|| templateTransferers[details.templateId][from] || templateTransferers[details.templateId][to];
if (!isTransferer) {
// Transfer not allowed
revert Unauthorized();
}
}
}
super.safeBatchTransferFrom(from, to, wrappedTokenIds, amounts, data);
Expand Down
12 changes: 9 additions & 3 deletions src/tokens/wrappers/clawback/IClawback.sol
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,14 @@ interface IClawbackFunctions {
* @param receiver The receiver of the wrapped token.
* @return wrappedTokenId The wrapped token ID.
*/
function wrap(uint24 templateId, TokenType tokenType, address tokenAddr, uint256 tokenId, uint256 amount, address receiver)
external
returns (uint256 wrappedTokenId);
function wrap(
uint24 templateId,
TokenType tokenType,
address tokenAddr,
uint256 tokenId,
uint256 amount,
address receiver
) external returns (uint256 wrappedTokenId);

/**
* Unwraps a token.
Expand Down Expand Up @@ -103,6 +108,7 @@ interface IClawbackFunctions {
* @param transferer The address of the transferer.
* @notice Only the admin of the template can add a transferer.
* @notice Transferers cannot be removed.
* @notice Transfers are allowed when the to, from or operator is a template operator, even when the template is not in transferOpen mode.
*/
function addTemplateTransferer(uint24 templateId, address transferer) external;

Expand Down
Loading

0 comments on commit 534ecef

Please sign in to comment.