Compare commits

...

2 Commits
dev ... hueso

Author SHA1 Message Date
hueso
55409a960c use ERC20 datatype 2023-02-27 14:21:40 -03:00
hueso
d5aee72bed revamped lock conditionals 2023-02-27 14:19:47 -03:00
3 changed files with 43 additions and 54 deletions

View File

@ -1,6 +1,8 @@
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity 0.8.9; pragma solidity 0.8.9;
import { ERC20 } from "./lib/tokens/ERC20.sol";
library DataTypes { library DataTypes {
struct Lock { struct Lock {
uint256 sellerKey; uint256 sellerKey;
@ -19,7 +21,7 @@ library DataTypes {
/// @dev Relayer address (msg.sender) that facilitated this transaction. /// @dev Relayer address (msg.sender) that facilitated this transaction.
/// @dev Reputation points accruer. /// @dev Reputation points accruer.
address relayerAddress; address relayerAddress;
address token; ERC20 token;
} }
// prettier-ignore // prettier-ignore

View File

@ -1,6 +1,8 @@
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity 0.8.9; pragma solidity 0.8.9;
import { ERC20 } from "./lib/tokens/ERC20.sol";
// prettier-ignore // prettier-ignore
interface EventAndErrors { interface EventAndErrors {
/// Events /// Events
@ -8,17 +10,17 @@ interface EventAndErrors {
event DepositAdded( event DepositAdded(
address indexed seller, address indexed seller,
// uint256 depositID, // uint256 depositID,
address token, ERC20 token,
uint256 amount uint256 amount
); );
event ValidSet( event ValidSet(
address indexed seller, address indexed seller,
address token, ERC20 token,
bool state bool state
); );
event DepositWithdrawn( event DepositWithdrawn(
address indexed seller, address indexed seller,
address token, ERC20 token,
uint256 amount uint256 amount
); );
event LockAdded( event LockAdded(

View File

@ -78,7 +78,7 @@ contract P2PIX is
uint256 defaultBlocks, uint256 defaultBlocks,
address[] memory validSigners, address[] memory validSigners,
IReputation _reputation, IReputation _reputation,
address[] memory tokens, ERC20[] memory tokens,
bool[] memory tokenStates bool[] memory tokenStates
) payable { ) payable {
setDefaultLockBlocks(defaultBlocks); setDefaultLockBlocks(defaultBlocks);
@ -97,7 +97,7 @@ contract P2PIX is
/// as the deposit identifier. /// as the deposit identifier.
/// @dev Function sighash: 0xbfe07da6. /// @dev Function sighash: 0xbfe07da6.
function deposit( function deposit(
address _token, ERC20 _token,
uint96 _amount, uint96 _amount,
uint160 _pixTarget, uint160 _pixTarget,
bool _valid, bool _valid,
@ -166,7 +166,7 @@ contract P2PIX is
sellerBalance[key][token] = _sellerBalance; sellerBalance[key][token] = _sellerBalance;
emit ValidSet(msg.sender, address(token), state); emit ValidSet(msg.sender, token, state);
} else revert NotInitialized(); } else revert NotInitialized();
} }
@ -191,7 +191,7 @@ contract P2PIX is
/// @dev Function sighash: 0x03aaf306. /// @dev Function sighash: 0x03aaf306.
function lock( function lock(
address _seller, address _seller,
address _token, ERC20 _token,
address _buyerAddress, address _buyerAddress,
address _relayerTarget, address _relayerTarget,
uint256 _relayerPremium, uint256 _relayerPremium,
@ -201,7 +201,7 @@ contract P2PIX is
) public nonReentrant returns (uint256) { ) public nonReentrant returns (uint256) {
unlockExpired(expiredLocks); unlockExpired(expiredLocks);
ERC20 t = ERC20(_token); ERC20 t = _token;
if (!getValid(_seller, t)) revert InvalidDeposit(); if (!getValid(_seller, t)) revert InvalidDeposit();
uint256 bal = getBalance(_seller, t); uint256 bal = getBalance(_seller, t);
@ -215,6 +215,27 @@ contract P2PIX is
mapLocks[cCounter].expirationBlock >= block.number mapLocks[cCounter].expirationBlock >= block.number
) revert NotExpired(); ) revert NotExpired();
if (merkleProof.length != 0) {
merkleVerify(
merkleProof,
sellerAllowList[k],
msg.sender
);
} else if (_amount > 1e2 ether) {
uint256 userCredit = userRecord[
_castAddrToKey(msg.sender)
];
uint256 spendLimit;
(spendLimit) = _limiter(userCredit / WAD);
if (
_amount > (spendLimit * WAD) ||
_amount > 1e6 ether
) revert AmountNotAllowed();
}
DT.Lock memory l = DT.Lock( DT.Lock memory l = DT.Lock(
k, k,
cCounter, cCounter,
@ -225,51 +246,15 @@ contract P2PIX is
_buyerAddress, _buyerAddress,
_relayerTarget, _relayerTarget,
msg.sender, msg.sender,
address(t) t
); );
if (merkleProof.length != 0) { _addLock(bal, _amount, cCounter, l, t, k);
merkleVerify(
merkleProof,
sellerAllowList[k],
msg.sender
);
_addLock(bal, _amount, cCounter, l, t, k); lockCounter++;
lockCounter++; // Halt execution and output `lockID`.
return cCounter;
// Halt execution and output `lockID`.
return cCounter;
} else {
if (l.amount <= 1e2 ether) {
_addLock(bal, _amount, cCounter, l, t, k);
lockCounter++;
// Halt execution and output `lockID`.
return cCounter;
} else {
uint256 userCredit = userRecord[
_castAddrToKey(msg.sender)
];
uint256 spendLimit;
(spendLimit) = _limiter(userCredit / WAD);
if (
l.amount > (spendLimit * WAD) ||
l.amount > 1e6 ether
) revert AmountNotAllowed();
_addLock(bal, _amount, cCounter, l, t, k);
lockCounter++;
// Halt execution and output `lockID`.
return cCounter;
}
}
} }
/// @notice Lock release method that liquidate lock /// @notice Lock release method that liquidate lock
@ -394,12 +379,12 @@ contract P2PIX is
uint256 _sellerBalance = sellerBalance[ uint256 _sellerBalance = sellerBalance[
l.sellerKey l.sellerKey
][ERC20(l.token)] & BITMASK_SB_ENTRY; ][l.token] & BITMASK_SB_ENTRY;
if ((_sellerBalance + l.amount) > 1e8 ether) if ((_sellerBalance + l.amount) > 1e8 ether)
revert MaxBalExceeded(); revert MaxBalExceeded();
sellerBalance[l.sellerKey][ERC20(l.token)] += l sellerBalance[l.sellerKey][l.token] += l
.amount; .amount;
l.amount = 0; l.amount = 0;
@ -463,7 +448,7 @@ contract P2PIX is
emit DepositWithdrawn( emit DepositWithdrawn(
msg.sender, msg.sender,
address(token), token,
amount amount
); );
} }
@ -528,7 +513,7 @@ contract P2PIX is
} }
function tokenSettings( function tokenSettings(
address[] memory _tokens, ERC20[] memory _tokens,
bool[] memory _states bool[] memory _states
) public onlyOwner { ) public onlyOwner {
/* Yul Impl */ /* Yul Impl */