Rearchitected storage 🗃️

This commit is contained in:
PedroCailleret 2023-05-14 20:44:18 -03:00
parent 6a3bea432c
commit 9d14f053d5
14 changed files with 303 additions and 277 deletions

View File

@ -1,4 +1,4 @@
{ {
"_format": "hh-sol-dbg-1", "_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/e4fd58ee172659ae7bbfbfbb00ad761b.json" "buildInfo": "../../build-info/577d08e3f9a8a685ac15a7ca46572ea5.json"
} }

View File

@ -1,4 +1,4 @@
{ {
"_format": "hh-sol-dbg-1", "_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/e4fd58ee172659ae7bbfbfbb00ad761b.json" "buildInfo": "../../build-info/e522f455f7b0dc000985ae9761f3041a.json"
} }

View File

@ -291,13 +291,13 @@
"anonymous": false, "anonymous": false,
"inputs": [ "inputs": [
{ {
"indexed": false, "indexed": true,
"internalType": "address", "internalType": "address",
"name": "seller", "name": "seller",
"type": "address" "type": "address"
}, },
{ {
"indexed": false, "indexed": true,
"internalType": "bytes32", "internalType": "bytes32",
"name": "merkleRoot", "name": "merkleRoot",
"type": "bytes32" "type": "bytes32"

View File

@ -1,4 +1,4 @@
{ {
"_format": "hh-sol-dbg-1", "_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/e4fd58ee172659ae7bbfbfbb00ad761b.json" "buildInfo": "../../build-info/577d08e3f9a8a685ac15a7ca46572ea5.json"
} }

File diff suppressed because one or more lines are too long

View File

@ -14,9 +14,8 @@ library DataTypes {
uint160 pixTarget; uint160 pixTarget;
/// @dev Where the tokens are sent the when order gets validated. /// @dev Where the tokens are sent the when order gets validated.
address buyerAddress; address buyerAddress;
/// @dev Relayer's target address that receives `relayerPremium` funds.
address relayerTarget;
/// @dev Relayer address (msg.sender) that facilitated this transaction. /// @dev Relayer address (msg.sender) that facilitated this transaction.
/// @dev Relayer's target address that receives `relayerPremium` funds.
/// @dev Reputation points accruer. /// @dev Reputation points accruer.
address relayerAddress; address relayerAddress;
address token; address token;

View File

@ -5,51 +5,63 @@ pragma solidity 0.8.9;
interface EventAndErrors { interface EventAndErrors {
/// Events /// Events
/// @dev 0x63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf
event DepositAdded( event DepositAdded(
address indexed seller, address indexed seller,
// uint256 depositID, // uint256 depositID,
address token, address token,
uint256 amount uint256 amount
); );
/// @dev 0xca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d49
event ValidSet( event ValidSet(
address indexed seller, address indexed seller,
address token, address token,
bool state bool state
); );
/// @dev 0x2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e
event DepositWithdrawn( event DepositWithdrawn(
address indexed seller, address indexed seller,
address token, address token,
uint256 amount uint256 amount
); );
/// @dev 0x8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65
event LockAdded( event LockAdded(
address indexed buyer, address indexed buyer,
uint256 indexed lockID, uint256 indexed lockID,
uint256 seller, uint256 seller,
uint256 amount uint256 amount
); );
/// @dev 0x364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8
event LockReleased( event LockReleased(
address indexed buyer, address indexed buyer,
uint256 lockId, uint256 lockId,
uint256 amount uint256 amount
); );
/// @dev 0x830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da5
event LockReturned( event LockReturned(
address indexed buyer, address indexed buyer,
uint256 lockId uint256 lockId
); );
/// @dev 0xeaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d
event FundsWithdrawn( event FundsWithdrawn(
address owner, address owner,
uint256 amount uint256 amount
); );
/// @dev 0x0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632
event RootUpdated( event RootUpdated(
address seller, address indexed seller,
bytes32 merkleRoot bytes32 indexed merkleRoot
); );
/// @dev 0x5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a
event AllowedERC20Updated( event AllowedERC20Updated(
address indexed token, address indexed token,
bool indexed state bool indexed state
); );
/// @dev 0xe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f
event ReputationUpdated(address reputation); event ReputationUpdated(address reputation);
/// @dev 0x70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511
event LockBlocksUpdated(uint256 blocks); event LockBlocksUpdated(uint256 blocks);
/// @dev 0x14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d7
event ValidSignersUpdated(address[] signers); event ValidSignersUpdated(address[] signers);
/// Errors /// Errors

View File

@ -30,6 +30,28 @@ contract P2PIX is
/// Constants /// Constants
uint256 private constant _ROOT_UPDATED_EVENT_SIGNATURE =
0x0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632;
uint256 private constant _ALLOWED_ERC20_UPDATED_EVENT_SIGNATURE =
0x5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a;
/// @dev Seller casted to key => Seller's allowlist merkleroot.
/// mapping(uint256 => bytes32) public sellerAllowList;
uint256 private constant _SELLER_ALLOWLIST_SLOT_SEED = 0x74dfee70;
/// @dev Tokens allowed to serve as the underlying amount of a deposit.
/// mapping(ERC20 => bool) public allowedERC20s;
uint256 private constant _ALLOWED_ERC20_SLOT_SEED = 0xcbc9d1c4;
// BITS LAYOUT
// `uint96` [0...94] := balance
// `uint160` [95...254] := pixTarget
// `bool` [255] := valid
/// @dev `balance` max. value = 10**26.
/// @dev `pixTarget` keys are restricted to 160 bits.
// mapping(uint256 => mapping(ERC20 => uint256)) public sellerBalance;
uint256 private constant _SELLER_BALANCE_SLOT_SEED = 0x739094b1;
/// @dev The bitmask of `sellerBalance` entry. /// @dev The bitmask of `sellerBalance` entry.
uint256 private constant BITMASK_SB_ENTRY = (1 << 94) - 1; uint256 private constant BITMASK_SB_ENTRY = (1 << 94) - 1;
/// @dev The bit position of `pixTarget` in `sellerBalance`. /// @dev The bit position of `pixTarget` in `sellerBalance`.
@ -38,11 +60,22 @@ contract P2PIX is
uint256 private constant BITPOS_VALID = 255; uint256 private constant BITPOS_VALID = 255;
/// @dev The bitmask of all 256 bits of `sellerBalance` except for the last one. /// @dev The bitmask of all 256 bits of `sellerBalance` except for the last one.
uint256 private constant BITMASK_VALID = (1 << 255) - 1; uint256 private constant BITMASK_VALID = (1 << 255) - 1;
/// @dev The scalar of BRZ token. /// @dev The scalar of BRZ token.
uint256 public constant WAD = 1e18; uint256 public constant WAD = 1e18;
/// Storage /// Storage
/// @dev List of valid Bacen signature addresses
/// @dev Value in custom storage slot given by:
/// let slot := sload(shl(12, address)).
// mapping(uint256 => bool) public validBacenSigners;
/// @dev List of Pix transactions already signed.
/// @dev Value in custom storage slot given by:
/// let slot := sload(bytes32).
// mapping(bytes32 => bool) public usedTransactions;
IReputation public reputation; IReputation public reputation;
/// @dev Default blocks that lock will hold tokens. /// @dev Default blocks that lock will hold tokens.
@ -51,26 +84,8 @@ contract P2PIX is
/// @dev List of Locks. /// @dev List of Locks.
mapping(uint256 => DT.Lock) public mapLocks; mapping(uint256 => DT.Lock) public mapLocks;
/// @dev Seller casted to key => Seller's allowlist merkleroot.
mapping(uint256 => bytes32) public sellerAllowList;
/// @dev Stores an relayer's last computed credit. /// @dev Stores an relayer's last computed credit.
mapping(uint256 => uint256) public userRecord; mapping(uint256 => uint256) public userRecord;
/// @dev List of valid Bacen signature addresses
mapping(uint256 => bool) public validBacenSigners;
/// @dev List of Pix transactions already signed.
mapping(bytes32 => bool) public usedTransactions;
/// @dev Tokens allowed to serve as the underlying amount of a deposit.
mapping(ERC20 => bool) public allowedERC20s;
// BITS LAYOUT
// `uint96` [0...94] := balance
// `uint160` [95...254] := pixTarget
// `bool` [255] := valid
/// @dev `balance` max. value = 10**26.
/// @dev `pixTarget` keys are restricted to 160 bits.
mapping(uint256 => mapping(ERC20 => uint256))
public sellerBalance;
/// Constructor /// Constructor
@ -107,8 +122,8 @@ contract P2PIX is
uint256 k = _castAddrToKey(msg.sender); uint256 k = _castAddrToKey(msg.sender);
if (_pixTarget == 0) revert EmptyPixTarget(); if (_pixTarget == 0) revert EmptyPixTarget();
if (!allowedERC20s[t]) revert TokenDenied(); if (!allowedERC20s(t)) revert TokenDenied();
uint256 _sellerBalance = sellerBalance[k][t]; uint256 _sellerBalance = sellerBalance(k,t);
uint256 currBal = _sellerBalance & BITMASK_SB_ENTRY; uint256 currBal = _sellerBalance & BITMASK_SB_ENTRY;
if ((currBal + _amount) > 1e8 ether) if ((currBal + _amount) > 1e8 ether)
@ -129,10 +144,13 @@ contract P2PIX is
validCasted validCasted
) = _castToUint(_amount, _pixTarget, _valid); ) = _castToUint(_amount, _pixTarget, _valid);
sellerBalance[k][t] = _setSellerBalance(
(currBal + amountCasted) | k,
t,
((currBal + amountCasted) |
(pixTargetCasted << BITPOS_PIXTARGET) | (pixTargetCasted << BITPOS_PIXTARGET) |
(validCasted << BITPOS_VALID); (validCasted << BITPOS_VALID))
);
SafeTransferLib.safeTransferFrom( SafeTransferLib.safeTransferFrom(
t, t,
@ -152,7 +170,7 @@ contract P2PIX is
/// @dev Function sighash: 0x72fada5c. /// @dev Function sighash: 0x72fada5c.
function setValidState(ERC20 token, bool state) public { function setValidState(ERC20 token, bool state) public {
uint256 key = _castAddrToKey(msg.sender); uint256 key = _castAddrToKey(msg.sender);
uint256 _sellerBalance = sellerBalance[key][token]; uint256 _sellerBalance = sellerBalance(key, token);
if (_sellerBalance != 0) { if (_sellerBalance != 0) {
uint256 _valid; uint256 _valid;
@ -164,7 +182,7 @@ contract P2PIX is
(_sellerBalance & BITMASK_VALID) | (_sellerBalance & BITMASK_VALID) |
(_valid << BITPOS_VALID); (_valid << BITPOS_VALID);
sellerBalance[key][token] = _sellerBalance; _setSellerBalance(key, token, _sellerBalance);
emit ValidSet(msg.sender, address(token), state); emit ValidSet(msg.sender, address(token), state);
} else revert NotInitialized(); } else revert NotInitialized();
@ -179,7 +197,6 @@ contract P2PIX is
/// from the total `remaining` value. /// from the total `remaining` value.
/// @dev Locks can only be performed in valid orders. /// @dev Locks can only be performed in valid orders.
/// @param _buyerAddress The address of the buyer of a `_depositID`. /// @param _buyerAddress The address of the buyer of a `_depositID`.
/// @param _relayerTarget Target address entitled to the `relayerPremium`.
/// @param _relayerPremium The refund/premium owed to a relayer. /// @param _relayerPremium The refund/premium owed to a relayer.
/// @param _amount The deposit's remaining amount wished to be locked. /// @param _amount The deposit's remaining amount wished to be locked.
/// @param merkleProof This value should be: /// @param merkleProof This value should be:
@ -193,7 +210,7 @@ contract P2PIX is
address _seller, address _seller,
address _token, address _token,
address _buyerAddress, address _buyerAddress,
address _relayerTarget, // address _relayerTarget,
uint256 _relayerPremium, uint256 _relayerPremium,
uint256 _amount, uint256 _amount,
bytes32[] calldata merkleProof, bytes32[] calldata merkleProof,
@ -221,17 +238,17 @@ contract P2PIX is
_relayerPremium, _relayerPremium,
_amount, _amount,
(block.number + defaultLockBlocks), (block.number + defaultLockBlocks),
uint160(sellerBalance[k][t] >> BITPOS_PIXTARGET), uint160(sellerBalance(k, t) >> BITPOS_PIXTARGET),
_buyerAddress, _buyerAddress,
_relayerTarget, // _relayerTarget,
msg.sender, msg.sender,
address(t) address(t)
); );
if (merkleProof.length != 0) { if (merkleProof.length != 0) {
merkleVerify( _merkleVerify(
merkleProof, merkleProof,
sellerAllowList[k], sellerAllowList(k),
msg.sender msg.sender
); );
@ -283,11 +300,10 @@ contract P2PIX is
/// In case of they differing: /// In case of they differing:
/// - `lock` caller gets accrued with `l.amount` as userRecord credit; /// - `lock` caller gets accrued with `l.amount` as userRecord credit;
/// - `release` caller gets accrued with `l.relayerPremium` as userRecord credit; /// - `release` caller gets accrued with `l.relayerPremium` as userRecord credit;
/// @param _relayerTarget Target address entitled to the `relayerPremium`.
/// @dev Function sighash: 0x4e1389ed. /// @dev Function sighash: 0x4e1389ed.
function release( function release(
uint256 lockID, uint256 lockID,
address _relayerTarget, // address _relayerTarget,
bytes32 pixTimestamp, bytes32 pixTimestamp,
bytes32 r, bytes32 r,
bytes32 s, bytes32 s,
@ -313,14 +329,14 @@ contract P2PIX is
) )
); );
if (usedTransactions[message] == true) if (usedTransactions(message) == true)
revert TxAlreadyUsed(); revert TxAlreadyUsed();
uint256 signer = _castAddrToKey( uint256 signer = _castAddrToKey(
ecrecover(messageDigest, v, r, s) ecrecover(messageDigest, v, r, s)
); );
if (!validBacenSigners[signer]) if (!validBacenSigners(signer))
revert InvalidSigner(); revert InvalidSigner();
ERC20 t = ERC20(l.token); ERC20 t = ERC20(l.token);
@ -331,7 +347,7 @@ contract P2PIX is
l.amount = 0; l.amount = 0;
l.expirationBlock = 0; l.expirationBlock = 0;
usedTransactions[message] = true; _setUsedTransactions(message);
if (msg.sender != l.relayerAddress) { if (msg.sender != l.relayerAddress) {
userRecord[_castAddrToKey(msg.sender)] += l userRecord[_castAddrToKey(msg.sender)] += l
@ -352,21 +368,21 @@ contract P2PIX is
// Method doesn't check for zero address. // Method doesn't check for zero address.
if (l.relayerPremium != 0) { if (l.relayerPremium != 0) {
if (_relayerTarget != l.relayerTarget) { if (msg.sender != l.relayerAddress) {
SafeTransferLib.safeTransfer( SafeTransferLib.safeTransfer(
t, t,
l.relayerTarget, l.relayerAddress,
(l.relayerPremium >> 1) (l.relayerPremium >> 1)
); );
SafeTransferLib.safeTransfer( SafeTransferLib.safeTransfer(
t, t,
_relayerTarget, msg.sender,
(l.relayerPremium >> 1) (l.relayerPremium >> 1)
); );
} else { } else {
SafeTransferLib.safeTransfer( SafeTransferLib.safeTransfer(
t, t,
_relayerTarget, msg.sender,
l.relayerPremium l.relayerPremium
); );
} }
@ -392,15 +408,12 @@ contract P2PIX is
_notExpired(l); _notExpired(l);
uint256 _sellerBalance = sellerBalance[ uint256 _sellerBalance = sellerBalance(l.sellerKey, ERC20(l.token)) & BITMASK_SB_ENTRY;
l.sellerKey
][ERC20(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 _addSellerBalance(l.sellerKey, ERC20(l.token), l.amount);
.amount;
l.amount = 0; l.amount = 0;
@ -448,7 +461,7 @@ contract P2PIX is
uint256 key = _castAddrToKey(msg.sender); uint256 key = _castAddrToKey(msg.sender);
_decBal( _decBal(
(sellerBalance[key][token] & BITMASK_SB_ENTRY), (sellerBalance(key, token) & BITMASK_SB_ENTRY),
amount, amount,
token, token,
key key
@ -471,13 +484,29 @@ contract P2PIX is
function setRoot(address addr, bytes32 merkleroot) function setRoot(address addr, bytes32 merkleroot)
public public
{ {
if (addr == msg.sender) { assembly {
sellerAllowList[ // if (addr != msg.sender)
_castAddrToKey(addr) if iszero(eq(addr, caller())) {
] = merkleroot; // revert OnlySeller()
emit RootUpdated(addr, merkleroot); mstore(0x00, 0x85d1f726)
} else revert OnlySeller(); revert(0x1c, 0x04)
} }
// sets root to SellerAllowlist's storage slot
mstore(0x0c, _SELLER_ALLOWLIST_SLOT_SEED)
mstore(0x00, addr)
sstore(keccak256(0x00, 0x20), merkleroot)
// emit RootUpdated(addr, merkleroot);
log3(
0,
0,
_ROOT_UPDATED_EVENT_SIGNATURE,
addr,
merkleroot
)
}
}
/// Owner Only /// Owner Only
@ -513,15 +542,16 @@ contract P2PIX is
public public
onlyOwner onlyOwner
{ {
unchecked { assembly {
uint256 i; let i := add(_validSigners, 0x20)
uint256 len = _validSigners.length; let end := add(i, shl(0x05, mload(_validSigners)))
for (i; i < len; ) { for {/* */} iszero(returndatasize()) {/* */} {
uint256 key = _castAddrToKey( sstore(shl(12, mload(i)), true)
_validSigners[i] i := add(i, 0x20)
);
validBacenSigners[key] = true; if iszero(lt(i, end)) {
++i; break
}
} }
} }
emit ValidSignersUpdated(_validSigners); emit ValidSignersUpdated(_validSigners);
@ -554,15 +584,16 @@ contract P2PIX is
sLoc := add(sLoc, 0x20) sLoc := add(sLoc, 0x20)
} { } {
// cache hashmap entry in scratch space // cache hashmap entry in scratch space
mstore(0x0c, _ALLOWED_ERC20_SLOT_SEED)
mstore(0x00, mload(tLoc)) mstore(0x00, mload(tLoc))
mstore(0x20, allowedERC20s.slot) // let mapSlot := keccak256(0x0c, 0x20)
let mapSlot := keccak256(0x00, 0x40) sstore(keccak256(0x0c, 0x20), mload(sLoc))
sstore(mapSlot, mload(sLoc))
// emit AllowedERC20Updated(address, bool)
log3( log3(
0, 0,
0, 0,
// AllowedERC20Updated(address, bool) _ALLOWED_ERC20_UPDATED_EVENT_SIGNATURE,
0x5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a,
mload(tLoc), mload(tLoc),
mload(sLoc) mload(sLoc)
) )
@ -605,7 +636,7 @@ contract P2PIX is
); );
} }
function merkleVerify( function _merkleVerify(
bytes32[] calldata _merkleProof, bytes32[] calldata _merkleProof,
bytes32 root, bytes32 root,
address _addr address _addr
@ -631,8 +662,8 @@ contract P2PIX is
); );
// cast the uninitialized return values to memory // cast the uninitialized return values to memory
bool success; bool success;
uint256 returnSize; // uint256 returnSize;
uint256 returnValue; // uint256 returnValue;
// perform staticcall from the stack w yul // perform staticcall from the stack w yul
assembly { assembly {
success := staticcall( success := staticcall(
@ -649,9 +680,10 @@ contract P2PIX is
// retSize // retSize
0x20 0x20
) )
returnSize := returndatasize() // returnSize := returndatasize()
returnValue := mload(0x00) // returnValue := mload(0x00)
_spendLimit := returnValue // _spendLimit := returnValue
_spendLimit := mload(0x00)
// reverts if call does not succeed. // reverts if call does not succeed.
if iszero(success) { if iszero(success) {
// StaticCallFailed() // StaticCallFailed()
@ -692,7 +724,7 @@ contract P2PIX is
iszero( iszero(
or( or(
iszero(_bal), iszero(_bal),
lt(sub(_bal, _amount), 0x0) gt(sub(_bal, _amount), _bal)
) )
) )
) { ) {
@ -703,7 +735,7 @@ contract P2PIX is
} }
// we can directly dec from packed uint entry value // we can directly dec from packed uint entry value
sellerBalance[_k][_t] -= _amount; _decSellerBalance(_k,_t, _amount);
} }
function getBalance(address seller, ERC20 token) function getBalance(address seller, ERC20 token)
@ -717,17 +749,15 @@ contract P2PIX is
assembly { assembly {
for { for {
/* */ /* */
} iszero(0x0) { } iszero(returndatasize()) {
/* */ /* */
} { } {
mstore(0x00, shl(0xC, seller)) mstore(0x20, token)
mstore(0x20, sellerBalance.slot) mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
let sbkslot := keccak256(0x00, 0x40) mstore(0x00, seller)
mstore(0x00, token)
mstore(0x20, sbkslot)
bal := and( bal := and(
BITMASK_SB_ENTRY, BITMASK_SB_ENTRY,
sload(keccak256(0x00, 0x40)) sload(keccak256(0x0c, 0x34))
) )
break break
} }
@ -746,19 +776,17 @@ contract P2PIX is
assembly { assembly {
for { for {
/* */ /* */
} iszero(0x0) { } iszero(returndatasize()) {
/* */ /* */
} { } {
mstore(0x00, shl(0xC, seller)) mstore(0x20, token)
mstore(0x20, sellerBalance.slot) mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
let sbkslot := keccak256(0x00, 0x40) mstore(0x00, seller)
mstore(0x00, token)
mstore(0x20, sbkslot)
valid := and( valid := and(
BITMASK_SB_ENTRY, BITMASK_SB_ENTRY,
shr( shr(
BITPOS_VALID, BITPOS_VALID,
sload(keccak256(0x00, 0x40)) sload(keccak256(0x0c, 0x34))
) )
) )
break break
@ -778,17 +806,15 @@ contract P2PIX is
assembly { assembly {
for { for {
/* */ /* */
} iszero(0) { } iszero(returndatasize()) {
/* */ /* */
} { } {
mstore(0, shl(12, seller)) mstore(0x20, token)
mstore(32, sellerBalance.slot) mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
let sbkslot := keccak256(0, 64) mstore(0x00, seller)
mstore(0, token)
mstore(32, sbkslot)
pixTarget := shr( pixTarget := shr(
BITPOS_PIXTARGET, BITPOS_PIXTARGET,
sload(keccak256(0, 64)) sload(keccak256(0x0c, 0x34))
) )
break break
} }
@ -862,6 +888,79 @@ contract P2PIX is
return (sortedIDs, status); return (sortedIDs, status);
} }
function allowedERC20s(ERC20 erc20) public view returns (bool state) {
assembly {
mstore(0x0c, _ALLOWED_ERC20_SLOT_SEED)
mstore(0x00, erc20)
state := sload(keccak256(0x0c, 0x20))
}
}
function _setUsedTransactions(bytes32 message) private {
assembly {
sstore(message, true)
}
}
function usedTransactions(bytes32 message) public view returns(bool used) {
assembly {
used := sload(message)
}
}
function validBacenSigners(uint256 signer) public view returns(bool valid) {
assembly {
valid := sload(signer)
}
}
function sellerAllowList(uint256 sellerKey) public view returns(bytes32 root) {
assembly {
mstore(0x0c, _SELLER_ALLOWLIST_SLOT_SEED)
mstore(0x00, shr(12, sellerKey))
root := sload(keccak256(0x00, 0x20))
}
}
function _setSellerBalance(uint256 sellerKey, ERC20 erc20, uint256 packed) private {
assembly {
mstore(0x20, erc20)
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
mstore(0x00, shr(12, sellerKey))
sstore(keccak256(0x0c, 0x34), packed)
}
}
function _addSellerBalance(uint256 sellerKey, ERC20 erc20, uint256 amount) private {
assembly {
mstore(0x20, erc20)
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
mstore(0x00, shr(12, sellerKey))
let slot := keccak256(0x0c, 0x34)
sstore(slot, add(sload(slot), amount))
}
}
function _decSellerBalance(uint256 sellerKey, ERC20 erc20, uint256 amount) private {
assembly {
mstore(0x20, erc20)
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
mstore(0x00, shr(12, sellerKey))
let slot := keccak256(0x0c, 0x34)
sstore(slot, sub(sload(slot), amount))
}
}
function sellerBalance(uint256 sellerKey, ERC20 erc20) public view returns(uint256 packed) {
assembly {
mstore(0x20, erc20)
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
mstore(0x00, shr(12, sellerKey))
packed := sload(keccak256(0x0c, 0x34))
}
}
/// @notice Public method that handles `address` /// @notice Public method that handles `address`
/// to `uint256` safe type casting. /// to `uint256` safe type casting.
/// @dev Function sighash: 0x4b2ae980. /// @dev Function sighash: 0x4b2ae980.

View File

@ -5,6 +5,7 @@ import type {
BaseContract, BaseContract,
BigNumber, BigNumber,
BigNumberish, BigNumberish,
BytesLike,
Signer, Signer,
utils, utils,
} from "ethers"; } from "ethers";
@ -300,10 +301,13 @@ export interface EventAndErrors extends BaseContract {
ReputationUpdated(reputation?: null): ReputationUpdatedEventFilter; ReputationUpdated(reputation?: null): ReputationUpdatedEventFilter;
"RootUpdated(address,bytes32)"( "RootUpdated(address,bytes32)"(
seller?: null, seller?: PromiseOrValue<string> | null,
merkleRoot?: null merkleRoot?: PromiseOrValue<BytesLike> | null
): RootUpdatedEventFilter;
RootUpdated(
seller?: PromiseOrValue<string> | null,
merkleRoot?: PromiseOrValue<BytesLike> | null
): RootUpdatedEventFilter; ): RootUpdatedEventFilter;
RootUpdated(seller?: null, merkleRoot?: null): RootUpdatedEventFilter;
"ValidSet(address,address,bool)"( "ValidSet(address,address,bool)"(
seller?: PromiseOrValue<string> | null, seller?: PromiseOrValue<string> | null,

View File

@ -298,13 +298,13 @@ const _abi = [
anonymous: false, anonymous: false,
inputs: [ inputs: [
{ {
indexed: false, indexed: true,
internalType: "address", internalType: "address",
name: "seller", name: "seller",
type: "address", type: "address",
}, },
{ {
indexed: false, indexed: true,
internalType: "bytes32", internalType: "bytes32",
name: "merkleRoot", name: "merkleRoot",
type: "bytes32", type: "bytes32",

File diff suppressed because one or more lines are too long

View File

@ -40,11 +40,11 @@ export interface P2PIXInterface extends utils.Interface {
"getLocksStatus(uint256[])": FunctionFragment; "getLocksStatus(uint256[])": FunctionFragment;
"getPixTarget(address,address)": FunctionFragment; "getPixTarget(address,address)": FunctionFragment;
"getValid(address,address)": FunctionFragment; "getValid(address,address)": FunctionFragment;
"lock(address,address,address,address,uint256,uint256,bytes32[],uint256[])": FunctionFragment; "lock(address,address,address,uint256,uint256,bytes32[],uint256[])": FunctionFragment;
"lockCounter()": FunctionFragment; "lockCounter()": FunctionFragment;
"mapLocks(uint256)": FunctionFragment; "mapLocks(uint256)": FunctionFragment;
"owner()": FunctionFragment; "owner()": FunctionFragment;
"release(uint256,address,bytes32,bytes32,bytes32,uint8)": FunctionFragment; "release(uint256,bytes32,bytes32,bytes32,uint8)": FunctionFragment;
"reputation()": FunctionFragment; "reputation()": FunctionFragment;
"sellerAllowList(uint256)": FunctionFragment; "sellerAllowList(uint256)": FunctionFragment;
"sellerBalance(uint256,address)": FunctionFragment; "sellerBalance(uint256,address)": FunctionFragment;
@ -152,7 +152,6 @@ export interface P2PIXInterface extends utils.Interface {
PromiseOrValue<string>, PromiseOrValue<string>,
PromiseOrValue<string>, PromiseOrValue<string>,
PromiseOrValue<string>, PromiseOrValue<string>,
PromiseOrValue<string>,
PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>,
PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>,
PromiseOrValue<BytesLike>[], PromiseOrValue<BytesLike>[],
@ -172,7 +171,6 @@ export interface P2PIXInterface extends utils.Interface {
functionFragment: "release", functionFragment: "release",
values: [ values: [
PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>,
PromiseOrValue<string>,
PromiseOrValue<BytesLike>, PromiseOrValue<BytesLike>,
PromiseOrValue<BytesLike>, PromiseOrValue<BytesLike>,
PromiseOrValue<BytesLike>, PromiseOrValue<BytesLike>,
@ -560,9 +558,9 @@ export interface P2PIX extends BaseContract {
): Promise<[string] & { _addr: string }>; ): Promise<[string] & { _addr: string }>;
allowedERC20s( allowedERC20s(
arg0: PromiseOrValue<string>, erc20: PromiseOrValue<string>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<[boolean]>; ): Promise<[boolean] & { state: boolean }>;
defaultLockBlocks(overrides?: CallOverrides): Promise<[BigNumber]>; defaultLockBlocks(overrides?: CallOverrides): Promise<[BigNumber]>;
@ -608,7 +606,6 @@ export interface P2PIX extends BaseContract {
_seller: PromiseOrValue<string>, _seller: PromiseOrValue<string>,
_token: PromiseOrValue<string>, _token: PromiseOrValue<string>,
_buyerAddress: PromiseOrValue<string>, _buyerAddress: PromiseOrValue<string>,
_relayerTarget: PromiseOrValue<string>,
_relayerPremium: PromiseOrValue<BigNumberish>, _relayerPremium: PromiseOrValue<BigNumberish>,
_amount: PromiseOrValue<BigNumberish>, _amount: PromiseOrValue<BigNumberish>,
merkleProof: PromiseOrValue<BytesLike>[], merkleProof: PromiseOrValue<BytesLike>[],
@ -631,7 +628,6 @@ export interface P2PIX extends BaseContract {
BigNumber, BigNumber,
string, string,
string, string,
string,
string string
] & { ] & {
sellerKey: BigNumber; sellerKey: BigNumber;
@ -641,7 +637,6 @@ export interface P2PIX extends BaseContract {
expirationBlock: BigNumber; expirationBlock: BigNumber;
pixTarget: BigNumber; pixTarget: BigNumber;
buyerAddress: string; buyerAddress: string;
relayerTarget: string;
relayerAddress: string; relayerAddress: string;
token: string; token: string;
} }
@ -651,7 +646,6 @@ export interface P2PIX extends BaseContract {
release( release(
lockID: PromiseOrValue<BigNumberish>, lockID: PromiseOrValue<BigNumberish>,
_relayerTarget: PromiseOrValue<string>,
pixTimestamp: PromiseOrValue<BytesLike>, pixTimestamp: PromiseOrValue<BytesLike>,
r: PromiseOrValue<BytesLike>, r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>, s: PromiseOrValue<BytesLike>,
@ -662,15 +656,15 @@ export interface P2PIX extends BaseContract {
reputation(overrides?: CallOverrides): Promise<[string]>; reputation(overrides?: CallOverrides): Promise<[string]>;
sellerAllowList( sellerAllowList(
arg0: PromiseOrValue<BigNumberish>, sellerKey: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<[string]>; ): Promise<[string] & { root: string }>;
sellerBalance( sellerBalance(
arg0: PromiseOrValue<BigNumberish>, sellerKey: PromiseOrValue<BigNumberish>,
arg1: PromiseOrValue<string>, erc20: PromiseOrValue<string>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<[BigNumber]>; ): Promise<[BigNumber] & { packed: BigNumber }>;
setDefaultLockBlocks( setDefaultLockBlocks(
_blocks: PromiseOrValue<BigNumberish>, _blocks: PromiseOrValue<BigNumberish>,
@ -716,9 +710,9 @@ export interface P2PIX extends BaseContract {
): Promise<ContractTransaction>; ): Promise<ContractTransaction>;
usedTransactions( usedTransactions(
arg0: PromiseOrValue<BytesLike>, message: PromiseOrValue<BytesLike>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<[boolean]>; ): Promise<[boolean] & { used: boolean }>;
userRecord( userRecord(
arg0: PromiseOrValue<BigNumberish>, arg0: PromiseOrValue<BigNumberish>,
@ -726,9 +720,9 @@ export interface P2PIX extends BaseContract {
): Promise<[BigNumber]>; ): Promise<[BigNumber]>;
validBacenSigners( validBacenSigners(
arg0: PromiseOrValue<BigNumberish>, signer: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<[boolean]>; ): Promise<[boolean] & { valid: boolean }>;
withdraw( withdraw(
token: PromiseOrValue<string>, token: PromiseOrValue<string>,
@ -755,7 +749,7 @@ export interface P2PIX extends BaseContract {
): Promise<string>; ): Promise<string>;
allowedERC20s( allowedERC20s(
arg0: PromiseOrValue<string>, erc20: PromiseOrValue<string>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<boolean>; ): Promise<boolean>;
@ -803,7 +797,6 @@ export interface P2PIX extends BaseContract {
_seller: PromiseOrValue<string>, _seller: PromiseOrValue<string>,
_token: PromiseOrValue<string>, _token: PromiseOrValue<string>,
_buyerAddress: PromiseOrValue<string>, _buyerAddress: PromiseOrValue<string>,
_relayerTarget: PromiseOrValue<string>,
_relayerPremium: PromiseOrValue<BigNumberish>, _relayerPremium: PromiseOrValue<BigNumberish>,
_amount: PromiseOrValue<BigNumberish>, _amount: PromiseOrValue<BigNumberish>,
merkleProof: PromiseOrValue<BytesLike>[], merkleProof: PromiseOrValue<BytesLike>[],
@ -826,7 +819,6 @@ export interface P2PIX extends BaseContract {
BigNumber, BigNumber,
string, string,
string, string,
string,
string string
] & { ] & {
sellerKey: BigNumber; sellerKey: BigNumber;
@ -836,7 +828,6 @@ export interface P2PIX extends BaseContract {
expirationBlock: BigNumber; expirationBlock: BigNumber;
pixTarget: BigNumber; pixTarget: BigNumber;
buyerAddress: string; buyerAddress: string;
relayerTarget: string;
relayerAddress: string; relayerAddress: string;
token: string; token: string;
} }
@ -846,7 +837,6 @@ export interface P2PIX extends BaseContract {
release( release(
lockID: PromiseOrValue<BigNumberish>, lockID: PromiseOrValue<BigNumberish>,
_relayerTarget: PromiseOrValue<string>,
pixTimestamp: PromiseOrValue<BytesLike>, pixTimestamp: PromiseOrValue<BytesLike>,
r: PromiseOrValue<BytesLike>, r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>, s: PromiseOrValue<BytesLike>,
@ -857,13 +847,13 @@ export interface P2PIX extends BaseContract {
reputation(overrides?: CallOverrides): Promise<string>; reputation(overrides?: CallOverrides): Promise<string>;
sellerAllowList( sellerAllowList(
arg0: PromiseOrValue<BigNumberish>, sellerKey: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<string>; ): Promise<string>;
sellerBalance( sellerBalance(
arg0: PromiseOrValue<BigNumberish>, sellerKey: PromiseOrValue<BigNumberish>,
arg1: PromiseOrValue<string>, erc20: PromiseOrValue<string>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<BigNumber>; ): Promise<BigNumber>;
@ -911,7 +901,7 @@ export interface P2PIX extends BaseContract {
): Promise<ContractTransaction>; ): Promise<ContractTransaction>;
usedTransactions( usedTransactions(
arg0: PromiseOrValue<BytesLike>, message: PromiseOrValue<BytesLike>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<boolean>; ): Promise<boolean>;
@ -921,7 +911,7 @@ export interface P2PIX extends BaseContract {
): Promise<BigNumber>; ): Promise<BigNumber>;
validBacenSigners( validBacenSigners(
arg0: PromiseOrValue<BigNumberish>, signer: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<boolean>; ): Promise<boolean>;
@ -950,7 +940,7 @@ export interface P2PIX extends BaseContract {
): Promise<string>; ): Promise<string>;
allowedERC20s( allowedERC20s(
arg0: PromiseOrValue<string>, erc20: PromiseOrValue<string>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<boolean>; ): Promise<boolean>;
@ -998,7 +988,6 @@ export interface P2PIX extends BaseContract {
_seller: PromiseOrValue<string>, _seller: PromiseOrValue<string>,
_token: PromiseOrValue<string>, _token: PromiseOrValue<string>,
_buyerAddress: PromiseOrValue<string>, _buyerAddress: PromiseOrValue<string>,
_relayerTarget: PromiseOrValue<string>,
_relayerPremium: PromiseOrValue<BigNumberish>, _relayerPremium: PromiseOrValue<BigNumberish>,
_amount: PromiseOrValue<BigNumberish>, _amount: PromiseOrValue<BigNumberish>,
merkleProof: PromiseOrValue<BytesLike>[], merkleProof: PromiseOrValue<BytesLike>[],
@ -1021,7 +1010,6 @@ export interface P2PIX extends BaseContract {
BigNumber, BigNumber,
string, string,
string, string,
string,
string string
] & { ] & {
sellerKey: BigNumber; sellerKey: BigNumber;
@ -1031,7 +1019,6 @@ export interface P2PIX extends BaseContract {
expirationBlock: BigNumber; expirationBlock: BigNumber;
pixTarget: BigNumber; pixTarget: BigNumber;
buyerAddress: string; buyerAddress: string;
relayerTarget: string;
relayerAddress: string; relayerAddress: string;
token: string; token: string;
} }
@ -1041,7 +1028,6 @@ export interface P2PIX extends BaseContract {
release( release(
lockID: PromiseOrValue<BigNumberish>, lockID: PromiseOrValue<BigNumberish>,
_relayerTarget: PromiseOrValue<string>,
pixTimestamp: PromiseOrValue<BytesLike>, pixTimestamp: PromiseOrValue<BytesLike>,
r: PromiseOrValue<BytesLike>, r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>, s: PromiseOrValue<BytesLike>,
@ -1052,13 +1038,13 @@ export interface P2PIX extends BaseContract {
reputation(overrides?: CallOverrides): Promise<string>; reputation(overrides?: CallOverrides): Promise<string>;
sellerAllowList( sellerAllowList(
arg0: PromiseOrValue<BigNumberish>, sellerKey: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<string>; ): Promise<string>;
sellerBalance( sellerBalance(
arg0: PromiseOrValue<BigNumberish>, sellerKey: PromiseOrValue<BigNumberish>,
arg1: PromiseOrValue<string>, erc20: PromiseOrValue<string>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<BigNumber>; ): Promise<BigNumber>;
@ -1106,7 +1092,7 @@ export interface P2PIX extends BaseContract {
): Promise<void>; ): Promise<void>;
usedTransactions( usedTransactions(
arg0: PromiseOrValue<BytesLike>, message: PromiseOrValue<BytesLike>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<boolean>; ): Promise<boolean>;
@ -1116,7 +1102,7 @@ export interface P2PIX extends BaseContract {
): Promise<BigNumber>; ): Promise<BigNumber>;
validBacenSigners( validBacenSigners(
arg0: PromiseOrValue<BigNumberish>, signer: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<boolean>; ): Promise<boolean>;
@ -1219,10 +1205,13 @@ export interface P2PIX extends BaseContract {
ReputationUpdated(reputation?: null): ReputationUpdatedEventFilter; ReputationUpdated(reputation?: null): ReputationUpdatedEventFilter;
"RootUpdated(address,bytes32)"( "RootUpdated(address,bytes32)"(
seller?: null, seller?: PromiseOrValue<string> | null,
merkleRoot?: null merkleRoot?: PromiseOrValue<BytesLike> | null
): RootUpdatedEventFilter;
RootUpdated(
seller?: PromiseOrValue<string> | null,
merkleRoot?: PromiseOrValue<BytesLike> | null
): RootUpdatedEventFilter; ): RootUpdatedEventFilter;
RootUpdated(seller?: null, merkleRoot?: null): RootUpdatedEventFilter;
"ValidSet(address,address,bool)"( "ValidSet(address,address,bool)"(
seller?: PromiseOrValue<string> | null, seller?: PromiseOrValue<string> | null,
@ -1255,7 +1244,7 @@ export interface P2PIX extends BaseContract {
): Promise<BigNumber>; ): Promise<BigNumber>;
allowedERC20s( allowedERC20s(
arg0: PromiseOrValue<string>, erc20: PromiseOrValue<string>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<BigNumber>; ): Promise<BigNumber>;
@ -1303,7 +1292,6 @@ export interface P2PIX extends BaseContract {
_seller: PromiseOrValue<string>, _seller: PromiseOrValue<string>,
_token: PromiseOrValue<string>, _token: PromiseOrValue<string>,
_buyerAddress: PromiseOrValue<string>, _buyerAddress: PromiseOrValue<string>,
_relayerTarget: PromiseOrValue<string>,
_relayerPremium: PromiseOrValue<BigNumberish>, _relayerPremium: PromiseOrValue<BigNumberish>,
_amount: PromiseOrValue<BigNumberish>, _amount: PromiseOrValue<BigNumberish>,
merkleProof: PromiseOrValue<BytesLike>[], merkleProof: PromiseOrValue<BytesLike>[],
@ -1322,7 +1310,6 @@ export interface P2PIX extends BaseContract {
release( release(
lockID: PromiseOrValue<BigNumberish>, lockID: PromiseOrValue<BigNumberish>,
_relayerTarget: PromiseOrValue<string>,
pixTimestamp: PromiseOrValue<BytesLike>, pixTimestamp: PromiseOrValue<BytesLike>,
r: PromiseOrValue<BytesLike>, r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>, s: PromiseOrValue<BytesLike>,
@ -1333,13 +1320,13 @@ export interface P2PIX extends BaseContract {
reputation(overrides?: CallOverrides): Promise<BigNumber>; reputation(overrides?: CallOverrides): Promise<BigNumber>;
sellerAllowList( sellerAllowList(
arg0: PromiseOrValue<BigNumberish>, sellerKey: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<BigNumber>; ): Promise<BigNumber>;
sellerBalance( sellerBalance(
arg0: PromiseOrValue<BigNumberish>, sellerKey: PromiseOrValue<BigNumberish>,
arg1: PromiseOrValue<string>, erc20: PromiseOrValue<string>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<BigNumber>; ): Promise<BigNumber>;
@ -1387,7 +1374,7 @@ export interface P2PIX extends BaseContract {
): Promise<BigNumber>; ): Promise<BigNumber>;
usedTransactions( usedTransactions(
arg0: PromiseOrValue<BytesLike>, message: PromiseOrValue<BytesLike>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<BigNumber>; ): Promise<BigNumber>;
@ -1397,7 +1384,7 @@ export interface P2PIX extends BaseContract {
): Promise<BigNumber>; ): Promise<BigNumber>;
validBacenSigners( validBacenSigners(
arg0: PromiseOrValue<BigNumberish>, signer: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<BigNumber>; ): Promise<BigNumber>;
@ -1427,7 +1414,7 @@ export interface P2PIX extends BaseContract {
): Promise<PopulatedTransaction>; ): Promise<PopulatedTransaction>;
allowedERC20s( allowedERC20s(
arg0: PromiseOrValue<string>, erc20: PromiseOrValue<string>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<PopulatedTransaction>; ): Promise<PopulatedTransaction>;
@ -1475,7 +1462,6 @@ export interface P2PIX extends BaseContract {
_seller: PromiseOrValue<string>, _seller: PromiseOrValue<string>,
_token: PromiseOrValue<string>, _token: PromiseOrValue<string>,
_buyerAddress: PromiseOrValue<string>, _buyerAddress: PromiseOrValue<string>,
_relayerTarget: PromiseOrValue<string>,
_relayerPremium: PromiseOrValue<BigNumberish>, _relayerPremium: PromiseOrValue<BigNumberish>,
_amount: PromiseOrValue<BigNumberish>, _amount: PromiseOrValue<BigNumberish>,
merkleProof: PromiseOrValue<BytesLike>[], merkleProof: PromiseOrValue<BytesLike>[],
@ -1494,7 +1480,6 @@ export interface P2PIX extends BaseContract {
release( release(
lockID: PromiseOrValue<BigNumberish>, lockID: PromiseOrValue<BigNumberish>,
_relayerTarget: PromiseOrValue<string>,
pixTimestamp: PromiseOrValue<BytesLike>, pixTimestamp: PromiseOrValue<BytesLike>,
r: PromiseOrValue<BytesLike>, r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>, s: PromiseOrValue<BytesLike>,
@ -1505,13 +1490,13 @@ export interface P2PIX extends BaseContract {
reputation(overrides?: CallOverrides): Promise<PopulatedTransaction>; reputation(overrides?: CallOverrides): Promise<PopulatedTransaction>;
sellerAllowList( sellerAllowList(
arg0: PromiseOrValue<BigNumberish>, sellerKey: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<PopulatedTransaction>; ): Promise<PopulatedTransaction>;
sellerBalance( sellerBalance(
arg0: PromiseOrValue<BigNumberish>, sellerKey: PromiseOrValue<BigNumberish>,
arg1: PromiseOrValue<string>, erc20: PromiseOrValue<string>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<PopulatedTransaction>; ): Promise<PopulatedTransaction>;
@ -1559,7 +1544,7 @@ export interface P2PIX extends BaseContract {
): Promise<PopulatedTransaction>; ): Promise<PopulatedTransaction>;
usedTransactions( usedTransactions(
arg0: PromiseOrValue<BytesLike>, message: PromiseOrValue<BytesLike>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<PopulatedTransaction>; ): Promise<PopulatedTransaction>;
@ -1569,7 +1554,7 @@ export interface P2PIX extends BaseContract {
): Promise<PopulatedTransaction>; ): Promise<PopulatedTransaction>;
validBacenSigners( validBacenSigners(
arg0: PromiseOrValue<BigNumberish>, signer: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides overrides?: CallOverrides
): Promise<PopulatedTransaction>; ): Promise<PopulatedTransaction>;

View File

@ -622,7 +622,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
price, price,
[], [],
@ -632,7 +631,6 @@ describe("P2PIX", () => {
zero, zero,
zero, zero,
zero, zero,
zero,
0, 0,
price, price,
[], [],
@ -664,7 +662,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
price.mul(ethers.BigNumber.from(2)), price.mul(ethers.BigNumber.from(2)),
[], [],
@ -692,7 +689,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
1000, 1000,
[ [
@ -726,7 +722,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
price.mul(BigNumber.from("2")), price.mul(BigNumber.from("2")),
[], [],
@ -754,7 +749,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
price, price,
proof, proof,
@ -788,7 +782,6 @@ describe("P2PIX", () => {
expect(storage.expirationBlock).to.eq(expiration); expect(storage.expirationBlock).to.eq(expiration);
expect(storage.pixTarget).to.eq(target); expect(storage.pixTarget).to.eq(target);
expect(storage.buyerAddress).to.eq(acc02.address); expect(storage.buyerAddress).to.eq(acc02.address);
expect(storage.relayerTarget).to.eq(acc03.address);
expect(storage.relayerAddress).to.eq(acc01.address); expect(storage.relayerAddress).to.eq(acc01.address);
expect(storage.token).to.eq(erc20.address); expect(storage.token).to.eq(erc20.address);
}); });
@ -809,7 +802,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
price, price,
[], [],
@ -839,7 +831,6 @@ describe("P2PIX", () => {
expect(storage.expirationBlock).to.eq(expiration); expect(storage.expirationBlock).to.eq(expiration);
expect(storage.pixTarget).to.eq(target); expect(storage.pixTarget).to.eq(target);
expect(storage.buyerAddress).to.eq(acc02.address); expect(storage.buyerAddress).to.eq(acc02.address);
expect(storage.relayerTarget).to.eq(acc03.address);
expect(storage.relayerAddress).to.eq(acc01.address); expect(storage.relayerAddress).to.eq(acc01.address);
expect(storage.token).to.eq(erc20.address); expect(storage.token).to.eq(erc20.address);
@ -878,7 +869,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
price, price,
price, price,
[], [],
@ -888,7 +878,6 @@ describe("P2PIX", () => {
.connect(acc01) .connect(acc01)
.release( .release(
1, 1,
acc02.address,
endtoendID, endtoendID,
sig.r, sig.r,
sig.s, sig.s,
@ -900,7 +889,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
price.add(ethers.constants.One), price.add(ethers.constants.One),
[], [],
@ -932,7 +920,6 @@ describe("P2PIX", () => {
expect(storage.expirationBlock).to.eq(expiration); expect(storage.expirationBlock).to.eq(expiration);
expect(storage.pixTarget).to.eq(target); expect(storage.pixTarget).to.eq(target);
expect(storage.buyerAddress).to.eq(acc02.address); expect(storage.buyerAddress).to.eq(acc02.address);
expect(storage.relayerTarget).to.eq(acc03.address);
expect(storage.relayerAddress).to.eq(acc01.address); expect(storage.relayerAddress).to.eq(acc01.address);
expect(storage.token).to.eq(erc20.address); expect(storage.token).to.eq(erc20.address);
@ -958,7 +945,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
newPrice, newPrice,
proof, proof,
@ -977,7 +963,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
100, 100,
[], [],
@ -996,7 +981,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc03.address, acc03.address,
acc03.address,
0, 0,
100, 100,
[], [],
@ -1110,10 +1094,10 @@ describe("P2PIX", () => {
.and.to.eq(storage2.buyerAddress); .and.to.eq(storage2.buyerAddress);
expect(storage3.buyerAddress).to.eq(acc03.address); expect(storage3.buyerAddress).to.eq(acc03.address);
expect(acc03.address) // expect(acc03.address)
.to.eq(storage1.relayerTarget) // .to.eq(storage1.relayerTarget)
.and.to.eq(storage2.relayerTarget) // .and.to.eq(storage2.relayerTarget)
.and.to.eq(storage3.relayerTarget); // .and.to.eq(storage3.relayerTarget);
expect(acc01.address) expect(acc01.address)
.to.eq(storage1.relayerAddress) .to.eq(storage1.relayerAddress)
@ -1290,7 +1274,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
6, 6,
100, 100,
[], [],
@ -1300,7 +1283,6 @@ describe("P2PIX", () => {
await mine(13); await mine(13);
const fail = p2pix.release( const fail = p2pix.release(
lockID, lockID,
acc03.address,
ethers.constants.HashZero, ethers.constants.HashZero,
sig.r, sig.r,
sig.s, sig.s,
@ -1337,7 +1319,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
6, 6,
100, 100,
[], [],
@ -1346,7 +1327,6 @@ describe("P2PIX", () => {
const lockID = ethers.constants.One; const lockID = ethers.constants.One;
await p2pix.release( await p2pix.release(
lockID, lockID,
acc03.address,
ethers.constants.HashZero, ethers.constants.HashZero,
sig.r, sig.r,
sig.s, sig.s,
@ -1354,7 +1334,6 @@ describe("P2PIX", () => {
); );
const fail = p2pix.release( const fail = p2pix.release(
lockID, lockID,
acc03.address,
ethers.constants.HashZero, ethers.constants.HashZero,
sig.r, sig.r,
sig.s, sig.s,
@ -1390,7 +1369,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
6, 6,
100, 100,
[], [],
@ -1401,7 +1379,6 @@ describe("P2PIX", () => {
.connect(acc01) .connect(acc01)
.release( .release(
1, 1,
acc02.address,
ethers.constants.HashZero, ethers.constants.HashZero,
sig.r, sig.r,
sig.s, sig.s,
@ -1413,7 +1390,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
6, 6,
100, 100,
[], [],
@ -1423,7 +1399,6 @@ describe("P2PIX", () => {
.connect(acc01) .connect(acc01)
.release( .release(
2, 2,
acc02.address,
ethers.constants.HashZero, ethers.constants.HashZero,
sig.r, sig.r,
sig.s, sig.s,
@ -1460,7 +1435,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
6, 6,
100, 100,
[], [],
@ -1470,7 +1444,6 @@ describe("P2PIX", () => {
.connect(acc01) .connect(acc01)
.release( .release(
1, 1,
acc02.address,
ethers.constants.HashZero, ethers.constants.HashZero,
sig.r, sig.r,
sig.s, sig.s,
@ -1522,7 +1495,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
6, 6,
100, 100,
[], [],
@ -1547,7 +1519,6 @@ describe("P2PIX", () => {
.connect(acc01) .connect(acc01)
.release( .release(
1, 1,
acc02.address,
endtoendID, endtoendID,
sig.r, sig.r,
sig.s, sig.s,
@ -1633,8 +1604,8 @@ describe("P2PIX", () => {
expect(userRecord2).to.eq(ethers.BigNumber.from(100)); expect(userRecord2).to.eq(ethers.BigNumber.from(100));
await expect(tx).to.changeTokenBalances( await expect(tx).to.changeTokenBalances(
erc20, erc20,
[acc03.address, acc02.address], [acc03.address, acc01.address, acc02.address ],
[3, 97], [3, 3, 94],
// acc02 is acting both as buyer and relayerTarget // acc02 is acting both as buyer and relayerTarget
// (i.e., 94 + 3 = 97) // (i.e., 94 + 3 = 97)
); );
@ -1694,7 +1665,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
100, 100,
[], [],
@ -1706,7 +1676,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
6, 6,
50, 50,
[], [],
@ -1718,7 +1687,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
10, 10,
25, 25,
[], [],
@ -1754,7 +1722,6 @@ describe("P2PIX", () => {
.connect(acc01) .connect(acc01)
.release( .release(
lockID, lockID,
acc02.address,
endtoendID, endtoendID,
sig1.r, sig1.r,
sig1.s, sig1.s,
@ -1766,7 +1733,6 @@ describe("P2PIX", () => {
.connect(acc01) .connect(acc01)
.release( .release(
lockID2, lockID2,
acc02.address,
endtoendID, endtoendID,
sig2.r, sig2.r,
sig2.s, sig2.s,
@ -1778,7 +1744,6 @@ describe("P2PIX", () => {
.connect(acc03) .connect(acc03)
.release( .release(
lockID3, lockID3,
acc02.address,
endtoendID, endtoendID,
sig3.r, sig3.r,
sig3.s, sig3.s,
@ -1849,8 +1814,8 @@ describe("P2PIX", () => {
const balances = [ const balances = [
[0, 100, 0, "-100"], [0, 100, 0, "-100"],
[0, 47, 3, "-50"], [3, 44, 3, "-50"],
[0, 20, 5, "-25"], [0, 15, 10, "-25"],
]; ];
for (let i = 0; i < 3; i++) { for (let i = 0; i < 3; i++) {
@ -1899,7 +1864,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
1, 1,
[], [],
@ -1940,7 +1904,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
1, 1,
[], [],
@ -1950,7 +1913,6 @@ describe("P2PIX", () => {
// await mine(10); // await mine(10);
await p2pix.release( await p2pix.release(
lockID, lockID,
acc03.address,
endtoendID, endtoendID,
sig.r, sig.r,
sig.s, sig.s,
@ -1979,7 +1941,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
1, 1,
[], [],
@ -2045,7 +2006,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
price, price,
proof, proof,
@ -2087,7 +2047,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
100, 100,
[], [],
@ -2123,7 +2082,6 @@ describe("P2PIX", () => {
owner.address, owner.address,
erc20.address, erc20.address,
acc02.address, acc02.address,
acc03.address,
0, 0,
price, price,
proof, proof,

View File

@ -27,7 +27,6 @@ export interface Lock {
expirationBlock: BigNumber; expirationBlock: BigNumber;
pixTarget: BigNumber; pixTarget: BigNumber;
buyerAddress: string; buyerAddress: string;
relayerTarget: string;
relayerAddress: string; relayerAddress: string;
token: string; token: string;
} }