ERC2771 compatibility
This commit is contained in:
		
							parent
							
								
									a3e6aa5879
								
							
						
					
					
						commit
						e95828b7dd
					
				| @ -67,7 +67,7 @@ abstract contract OwnerSettings is | ||||
|                 sLoc := add(sLoc, 0x20) | ||||
|             } { | ||||
|                 // cache hashmap entry in scratch space | ||||
|                 mstore(0x20, isTrustedForwarder.slot) | ||||
|                 mstore(0x20, trustedForwarders.slot) | ||||
|                 mstore(0x00, mload(fLoc)) | ||||
|                 //  let mapSlot := keccak256(0x00, 0x40) | ||||
|                 sstore(keccak256(0x00, 0x40), mload(sLoc)) | ||||
|  | ||||
| @ -39,7 +39,7 @@ abstract contract Context { | ||||
| /// @dev Context variant with ERC2771 support. | ||||
| abstract contract ERC2771Context is Context { | ||||
|     // address private immutable _trustedForwarder; | ||||
|     mapping(address => bool) public isTrustedForwarder; | ||||
|     mapping(address => bool) public trustedForwarders; | ||||
| 
 | ||||
|     /// @custom:oz-upgrades-unsafe-allow constructor | ||||
|     // constructor(address trustedForwarder) { | ||||
| @ -53,7 +53,7 @@ abstract contract ERC2771Context is Context { | ||||
|         override | ||||
|         returns (address sender) | ||||
|     { | ||||
|         if (isTrustedForwarder[msg.sender]) { | ||||
|         if (trustedForwarders[msg.sender]) { | ||||
|             // The assembly code is more direct than the Solidity version using `abi.decode`. | ||||
|             /// @solidity memory-safe-assembly | ||||
|             assembly { | ||||
| @ -67,15 +67,8 @@ abstract contract ERC2771Context is Context { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     function _isTrustedForwarder() | ||||
|         internal | ||||
|         view | ||||
|         returns (address _sender, uint256 _forwarder) | ||||
|     { | ||||
|         _sender = _msgSender(); | ||||
|         _forwarder = (_sender != msg.sender) | ||||
|             ? uint256(1) | ||||
|             : uint256(0); | ||||
|     function isTrustedForwarder(address forwarder) public view virtual returns (bool) { | ||||
|       return trustedForwarders[forwarder]; | ||||
|     } | ||||
| 
 | ||||
|     function _msgData() | ||||
| @ -85,7 +78,7 @@ abstract contract ERC2771Context is Context { | ||||
|         override | ||||
|         returns (bytes calldata) | ||||
|     { | ||||
|         if (isTrustedForwarder[msg.sender]) { | ||||
|         if (isTrustedForwarder(msg.sender)) { | ||||
|             return msg.data[:msg.data.length - 20]; | ||||
|         } else { | ||||
|             return super._msgData(); | ||||
|  | ||||
| @ -158,20 +158,18 @@ contract P2PIX is BaseUtils { | ||||
|             mapLocks[lockID].expirationBlock >= block.number | ||||
|         ) revert NotExpired(); | ||||
| 
 | ||||
|         address sender; uint256 forwarder; | ||||
|         (sender, forwarder) = _isTrustedForwarder(); | ||||
|         bytes32 _pixTarget = getPixTarget(args.seller, args.token); | ||||
| 
 | ||||
|         // transaction forwarding must leave `merkleProof` empty; | ||||
|         // otherwise, the trustedForwarder must be previously added  | ||||
|         // to a seller whitelist. | ||||
|         if (args.merkleProof.length != 0) { | ||||
|             _merkleVerify( args.merkleProof, sellerAllowList(args.seller), sender); | ||||
|             _merkleVerify( args.merkleProof, sellerAllowList(args.seller), _msgSender()); | ||||
| 
 | ||||
|         } else if (args.amount > REPUTATION_LOWERBOUND && forwarder == 0) { | ||||
|         } else if ( args.amount > REPUTATION_LOWERBOUND && msg.sender == _msgSender() ) { | ||||
|              | ||||
|             uint256 spendLimit; uint256 userCredit =  | ||||
|             userRecord[_castAddrToKey(msg.sender)]; | ||||
|             userRecord[_castAddrToKey(_msgSender())]; | ||||
|             (spendLimit) = _limiter(userCredit / WAD); | ||||
|             if (  | ||||
|                 args.amount > (spendLimit * WAD) ||  | ||||
| @ -185,7 +183,7 @@ contract P2PIX is BaseUtils { | ||||
|             _pixTarget, | ||||
|             args.amount, | ||||
|             args.token, | ||||
|             sender, | ||||
|             _msgSender(), | ||||
|             args.seller | ||||
|         ); | ||||
| 
 | ||||
| @ -231,11 +229,8 @@ contract P2PIX is BaseUtils { | ||||
|         l.amount = 0; | ||||
|         l.expirationBlock = 0; | ||||
|         _setUsedTransactions(message); | ||||
| 
 | ||||
|         address sender; uint256 forwarder; | ||||
|         (sender, forwarder) = _isTrustedForwarder(); | ||||
|          | ||||
|         if (forwarder == 0) {  | ||||
|         if (_msgSender() == msg.sender) {  | ||||
|         if (msg.sender != l.buyerAddress) { | ||||
|             userRecord[_castAddrToKey(msg.sender)] += (lockAmount >> 1); | ||||
|             userRecord[_castAddrToKey(l.buyerAddress)] += (lockAmount >> 1); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user