test: 🚧 Added fixtures for new test schema
This commit is contained in:
parent
4403541660
commit
c69d82ccee
@ -26,7 +26,9 @@
|
||||
├── p2pix.sol
|
||||
└── Reputation.sol
|
||||
```
|
||||
|
||||
## Callgraph
|
||||
|
||||

|
||||
|
||||
## Usage
|
||||
@ -76,16 +78,15 @@ $ yarn clean
|
||||
To import artifacts on the project use the following:
|
||||
|
||||
```ts
|
||||
import P2PIXArtifact from 'p2pix-smart-contracts/artifacts/contracts/p2pix.sol/P2PIX.json'
|
||||
import P2PIXArtifact from "p2pix-smart-contracts/artifacts/contracts/p2pix.sol/P2PIX.json";
|
||||
```
|
||||
|
||||
To grab deployment addresses you can just grab from deploys folder:
|
||||
|
||||
```ts
|
||||
import localhostDeploys from 'p2pix-smart-contracts/deploys/localhost.json'
|
||||
import localhostDeploys from "p2pix-smart-contracts/deploys/localhost.json";
|
||||
```
|
||||
|
||||
|
||||
## Deploying to local environment
|
||||
|
||||
On the first teminal, use the following command and import some wallets to your Metamask, then connect to the network pointed:
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
|
||||
}
|
||||
|
@ -63,6 +63,11 @@
|
||||
"name": "OnlySeller",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
"name": "StaticCallFailed",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
"name": "TokenDenied",
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../../../build-info/da574cda4da83daffd2579005f189352.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../../../build-info/da574cda4da83daffd2579005f189352.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../../../build-info/da574cda4da83daffd2579005f189352.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../../../build-info/da574cda4da83daffd2579005f189352.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../../../build-info/da574cda4da83daffd2579005f189352.json"
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"_format": "hh-sol-dbg-1",
|
||||
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||
"buildInfo": "../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -2,7 +2,6 @@
|
||||
pragma solidity 0.8.9;
|
||||
|
||||
interface EventAndErrors {
|
||||
|
||||
/// ███ Events ████████████████████████████████████████████████████████████
|
||||
|
||||
event DepositAdded(
|
||||
|
@ -5,41 +5,43 @@ import { IReputation } from "./lib/interfaces/IReputation.sol";
|
||||
import { Owned } from "./lib/auth/Owned.sol";
|
||||
import { FixedPointMathLib as WADMath } from "./lib/utils/FixedPointMathLib.sol";
|
||||
|
||||
|
||||
contract Reputation is
|
||||
IReputation,
|
||||
Owned(msg.sender)
|
||||
{
|
||||
|
||||
contract Reputation is IReputation, Owned(msg.sender) {
|
||||
using WADMath for uint256;
|
||||
|
||||
/// @dev Asymptote numerator constant value for the `limiter` fx.
|
||||
uint256 constant public maxLimit = 1e6;
|
||||
uint256 public constant maxLimit = 1e6;
|
||||
/// @dev Denominator's constant operand for the `limiter` fx.
|
||||
uint256 constant public magicValue = 2.5e11;
|
||||
uint256 public constant magicValue = 2.5e11;
|
||||
|
||||
constructor(/* */) {/* */}
|
||||
constructor() /* */ {
|
||||
/* */
|
||||
}
|
||||
|
||||
function limiter(uint256 _userCredit)
|
||||
function limiter(
|
||||
uint256 _userCredit
|
||||
)
|
||||
external
|
||||
pure
|
||||
override(IReputation)
|
||||
returns(uint256 _spendLimit)
|
||||
returns (uint256 _spendLimit)
|
||||
{
|
||||
// _spendLimit = 1 + ( ( maxLimit * _userCredit ) / sqrt( magicValue * ( _userCredit * _userCredit ) ) );
|
||||
// return _spendLimit;
|
||||
|
||||
|
||||
unchecked {
|
||||
uint256 numeratorWad =
|
||||
maxLimit.mulWadDown(_userCredit);
|
||||
uint256 userCreditSquaredWad =
|
||||
_userCredit.mulWadDown(_userCredit);
|
||||
uint256 denominatorSqrtWad =
|
||||
(userCreditSquaredWad.mulWadDown(magicValue)).sqrt();
|
||||
uint256 numeratorWad = maxLimit.mulWadDown(
|
||||
_userCredit
|
||||
);
|
||||
uint256 userCreditSquaredWad = _userCredit
|
||||
.mulWadDown(_userCredit);
|
||||
uint256 denominatorSqrtWad = (
|
||||
userCreditSquaredWad.mulWadDown(magicValue)
|
||||
).sqrt();
|
||||
|
||||
_spendLimit = (1 + (numeratorWad).divWadDown(denominatorSqrtWad));
|
||||
_spendLimit = (1 +
|
||||
(numeratorWad).divWadDown(
|
||||
denominatorSqrtWad
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,12 +1,8 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity >=0.8.4;
|
||||
|
||||
|
||||
interface IReputation {
|
||||
|
||||
function limiter(uint256 _userCredit)
|
||||
external
|
||||
pure
|
||||
returns(uint256 _spendLimit);
|
||||
|
||||
function limiter(
|
||||
uint256 _userCredit
|
||||
) external pure returns (uint256 _spendLimit);
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ pragma solidity >=0.8.4;
|
||||
/// @notice Arithmetic library with operations for fixed-point numbers.
|
||||
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol)
|
||||
library FixedPointMathLib {
|
||||
|
||||
/*//////////////////////////////////////////////////////////////
|
||||
SIMPLIFIED FIXED POINT OPERATIONS
|
||||
//////////////////////////////////////////////////////////////*/
|
||||
@ -12,12 +11,18 @@ library FixedPointMathLib {
|
||||
/// @dev The scalar of ETH and most ERC20s.
|
||||
uint256 internal constant WAD = 1e18;
|
||||
|
||||
function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
|
||||
function mulWadDown(
|
||||
uint256 x,
|
||||
uint256 y
|
||||
) internal pure returns (uint256) {
|
||||
// Equivalent to (x * y) / WAD rounded down.
|
||||
return mulDivDown(x, y, WAD);
|
||||
}
|
||||
|
||||
function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
|
||||
function divWadDown(
|
||||
uint256 x,
|
||||
uint256 y
|
||||
) internal pure returns (uint256) {
|
||||
// Equivalent to (x * WAD) / y rounded down.
|
||||
return mulDivDown(x, WAD, y);
|
||||
}
|
||||
@ -36,7 +41,12 @@ library FixedPointMathLib {
|
||||
z := mul(x, y)
|
||||
|
||||
// Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y))
|
||||
if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) {
|
||||
if iszero(
|
||||
and(
|
||||
iszero(iszero(denominator)),
|
||||
or(iszero(x), eq(div(z, x), y))
|
||||
)
|
||||
) {
|
||||
revert(0, 0)
|
||||
}
|
||||
|
||||
@ -49,7 +59,9 @@ library FixedPointMathLib {
|
||||
GENERAL NUMBER UTILITIES
|
||||
//////////////////////////////////////////////////////////////*/
|
||||
|
||||
function sqrt(uint256 x) internal pure returns (uint256 z) {
|
||||
function sqrt(
|
||||
uint256 x
|
||||
) internal pure returns (uint256 z) {
|
||||
assembly {
|
||||
let y := x // We start y at x, which will help us make our initial estimate.
|
||||
|
||||
@ -60,7 +72,9 @@ library FixedPointMathLib {
|
||||
|
||||
// We check y >= 2^(k + 8) but shift right by k bits
|
||||
// each branch to ensure that if x >= 256, then y >= 256.
|
||||
if iszero(lt(y, 0x10000000000000000000000000000000000)) {
|
||||
if iszero(
|
||||
lt(y, 0x10000000000000000000000000000000000)
|
||||
) {
|
||||
y := shr(128, y)
|
||||
z := shl(64, z)
|
||||
}
|
||||
|
@ -10,31 +10,46 @@ pragma solidity >=0.8.4;
|
||||
/// (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol)
|
||||
library MerkleProofLib {
|
||||
/// @dev Returns whether `leaf` exists in the Merkle tree with `root`, given `proof`.
|
||||
function verify(bytes32[] calldata proof, bytes32 root, bytes32 leaf)
|
||||
internal
|
||||
pure
|
||||
returns (bool isValid)
|
||||
{
|
||||
function verify(
|
||||
bytes32[] calldata proof,
|
||||
bytes32 root,
|
||||
bytes32 leaf
|
||||
) internal pure returns (bool isValid) {
|
||||
/// @solidity memory-safe-assembly
|
||||
assembly {
|
||||
if proof.length {
|
||||
// Left shift by 5 is equivalent to multiplying by 0x20.
|
||||
let end := add(proof.offset, shl(5, proof.length))
|
||||
let end := add(
|
||||
proof.offset,
|
||||
shl(5, proof.length)
|
||||
)
|
||||
// Initialize `offset` to the offset of `proof` in the calldata.
|
||||
let offset := proof.offset
|
||||
// Iterate over proof elements to compute root hash.
|
||||
for {} 1 {} {
|
||||
for {
|
||||
|
||||
} 1 {
|
||||
|
||||
} {
|
||||
// Slot of `leaf` in scratch space.
|
||||
// If the condition is true: 0x20, otherwise: 0x00.
|
||||
let scratch := shl(5, gt(leaf, calldataload(offset)))
|
||||
let scratch := shl(
|
||||
5,
|
||||
gt(leaf, calldataload(offset))
|
||||
)
|
||||
// Store elements to hash contiguously in scratch space.
|
||||
// Scratch space is 64 bytes (0x00 - 0x3f) and both elements are 32 bytes.
|
||||
mstore(scratch, leaf)
|
||||
mstore(xor(scratch, 0x20), calldataload(offset))
|
||||
mstore(
|
||||
xor(scratch, 0x20),
|
||||
calldataload(offset)
|
||||
)
|
||||
// Reuse `leaf` to store the hash to reduce stack operations.
|
||||
leaf := keccak256(0x00, 0x40)
|
||||
offset := add(offset, 0x20)
|
||||
if iszero(lt(offset, end)) { break }
|
||||
if iszero(lt(offset, end)) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
isValid := eq(leaf, root)
|
||||
|
@ -82,12 +82,7 @@ contract P2PIX is
|
||||
uint256 _amount,
|
||||
string calldata _pixTarget,
|
||||
bytes32 allowlistRoot
|
||||
)
|
||||
public
|
||||
returns (
|
||||
uint256 depositID
|
||||
)
|
||||
{
|
||||
) public returns (uint256 depositID) {
|
||||
ERC20 t = ERC20(_token);
|
||||
if (!allowedERC20s[t]) revert TokenDenied();
|
||||
|
||||
@ -211,8 +206,7 @@ contract P2PIX is
|
||||
|
||||
// Halt execution and output `lockID`.
|
||||
return lockID;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
uint256 userCredit = userRecord[
|
||||
_castAddrToKey(msg.sender)
|
||||
];
|
||||
@ -345,9 +339,9 @@ contract P2PIX is
|
||||
/// @dev For each successfull unexpired lock recovered,
|
||||
/// `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.
|
||||
/// @dev Function sighash: 0x8e2749d6.
|
||||
function unlockExpired(bytes32[] calldata lockIDs)
|
||||
public
|
||||
{
|
||||
function unlockExpired(
|
||||
bytes32[] calldata lockIDs
|
||||
) public {
|
||||
uint256 i;
|
||||
uint256 locksSize = lockIDs.length;
|
||||
|
||||
@ -359,10 +353,11 @@ contract P2PIX is
|
||||
mapDeposits[l.depositID].remaining += l.amount;
|
||||
l.amount = 0;
|
||||
|
||||
uint256 userKey =
|
||||
_castAddrToKey(l.relayerAddress);
|
||||
uint256 _newUserRecord =
|
||||
(userRecord[userKey] >> 1);
|
||||
uint256 userKey = _castAddrToKey(
|
||||
l.relayerAddress
|
||||
);
|
||||
uint256 _newUserRecord = (userRecord[userKey] >>
|
||||
1);
|
||||
|
||||
if (_newUserRecord <= 100) {
|
||||
userRecord[userKey] = 100;
|
||||
@ -414,9 +409,10 @@ contract P2PIX is
|
||||
emit DepositWithdrawn(msg.sender, depositID, amount);
|
||||
}
|
||||
|
||||
function setRoot(address addr, bytes32 merkleroot)
|
||||
public
|
||||
{
|
||||
function setRoot(
|
||||
address addr,
|
||||
bytes32 merkleroot
|
||||
) public {
|
||||
if (addr == msg.sender) {
|
||||
sellerAllowList[
|
||||
_castAddrToKey(addr)
|
||||
@ -434,30 +430,27 @@ contract P2PIX is
|
||||
emit FundsWithdrawn(msg.sender, balance);
|
||||
}
|
||||
|
||||
function setReputation(IReputation _reputation)
|
||||
public
|
||||
onlyOwner
|
||||
{
|
||||
function setReputation(
|
||||
IReputation _reputation
|
||||
) public onlyOwner {
|
||||
assembly {
|
||||
sstore(reputation.slot, _reputation)
|
||||
}
|
||||
emit ReputationUpdated(address(_reputation));
|
||||
}
|
||||
|
||||
function setDefaultLockBlocks(uint256 _blocks)
|
||||
public
|
||||
onlyOwner
|
||||
{
|
||||
function setDefaultLockBlocks(
|
||||
uint256 _blocks
|
||||
) public onlyOwner {
|
||||
assembly {
|
||||
sstore(defaultLockBlocks.slot, _blocks)
|
||||
}
|
||||
emit LockBlocksUpdated(_blocks);
|
||||
}
|
||||
|
||||
function setValidSigners(address[] memory _validSigners)
|
||||
public
|
||||
onlyOwner
|
||||
{
|
||||
function setValidSigners(
|
||||
address[] memory _validSigners
|
||||
) public onlyOwner {
|
||||
unchecked {
|
||||
uint256 i;
|
||||
uint256 len = _validSigners.length;
|
||||
@ -626,11 +619,9 @@ contract P2PIX is
|
||||
) revert AddressDenied();
|
||||
}
|
||||
|
||||
function _limiter(uint256 _userCredit)
|
||||
internal
|
||||
view
|
||||
returns (uint256 _spendLimit)
|
||||
{
|
||||
function _limiter(
|
||||
uint256 _userCredit
|
||||
) internal view returns (uint256 _spendLimit) {
|
||||
// enconde the fx sighash and args
|
||||
bytes memory encodedParams = abi.encodeWithSelector(
|
||||
IReputation.limiter.selector,
|
||||
@ -670,11 +661,9 @@ contract P2PIX is
|
||||
/// @notice Public method that handles `address`
|
||||
/// to `uint256` safe type casting.
|
||||
/// @dev Function sighash: 0x4b2ae980.
|
||||
function _castAddrToKey(address _addr)
|
||||
public
|
||||
pure
|
||||
returns (uint256 _key)
|
||||
{
|
||||
function _castAddrToKey(
|
||||
address _addr
|
||||
) public pure returns (uint256 _key) {
|
||||
_key = uint256(uint160(address(_addr))) << 12;
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1 @@
|
||||
# DataTypes
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,14 +1,5 @@
|
||||
# EventAndErrors
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Events
|
||||
|
||||
### AllowedERC20Updated
|
||||
@ -17,14 +8,10 @@
|
||||
event AllowedERC20Updated(address indexed token, bool indexed state)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------------- | ------- | ----------- |
|
||||
| token `indexed` | address | undefined |
|
||||
| state `indexed` | bool | undefined |
|
||||
|
||||
@ -36,12 +23,10 @@ event DepositAdded(address indexed seller, uint256 depositID, address token, uin
|
||||
|
||||
███ Events ████████████████████████████████████████████████████████████
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------------- | ------- | ----------- |
|
||||
| seller `indexed` | address | undefined |
|
||||
| depositID | uint256 | undefined |
|
||||
| token | address | undefined |
|
||||
@ -53,14 +38,10 @@ event DepositAdded(address indexed seller, uint256 depositID, address token, uin
|
||||
event DepositClosed(address indexed seller, uint256 depositID)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------------- | ------- | ----------- |
|
||||
| seller `indexed` | address | undefined |
|
||||
| depositID | uint256 | undefined |
|
||||
|
||||
@ -70,14 +51,10 @@ event DepositClosed(address indexed seller, uint256 depositID)
|
||||
event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------------- | ------- | ----------- |
|
||||
| seller `indexed` | address | undefined |
|
||||
| depositID | uint256 | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
@ -88,14 +65,10 @@ event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount
|
||||
event FundsWithdrawn(address owner, uint256 amount)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------ | ------- | ----------- |
|
||||
| owner | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
|
||||
@ -105,14 +78,10 @@ event FundsWithdrawn(address owner, uint256 amount)
|
||||
event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID, uint256 amount)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------------- | ------- | ----------- |
|
||||
| buyer `indexed` | address | undefined |
|
||||
| lockID `indexed` | bytes32 | undefined |
|
||||
| depositID | uint256 | undefined |
|
||||
@ -124,14 +93,10 @@ event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID
|
||||
event LockBlocksUpdated(uint256 blocks)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------ | ------- | ----------- |
|
||||
| blocks | uint256 | undefined |
|
||||
|
||||
### LockReleased
|
||||
@ -140,14 +105,10 @@ event LockBlocksUpdated(uint256 blocks)
|
||||
event LockReleased(address indexed buyer, bytes32 lockId)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------------- | ------- | ----------- |
|
||||
| buyer `indexed` | address | undefined |
|
||||
| lockId | bytes32 | undefined |
|
||||
|
||||
@ -157,14 +118,10 @@ event LockReleased(address indexed buyer, bytes32 lockId)
|
||||
event LockReturned(address indexed buyer, bytes32 lockId)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------------- | ------- | ----------- |
|
||||
| buyer `indexed` | address | undefined |
|
||||
| lockId | bytes32 | undefined |
|
||||
|
||||
@ -174,14 +131,10 @@ event LockReturned(address indexed buyer, bytes32 lockId)
|
||||
event ReputationUpdated(address reputation)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------- | ------- | ----------- |
|
||||
| reputation | address | undefined |
|
||||
|
||||
### ValidSignersUpdated
|
||||
@ -190,18 +143,12 @@ event ReputationUpdated(address reputation)
|
||||
event ValidSignersUpdated(address[] signers)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------- | --------- | ----------- |
|
||||
| signers | address[] | undefined |
|
||||
|
||||
|
||||
|
||||
## Errors
|
||||
|
||||
### AddressDenied
|
||||
@ -210,10 +157,7 @@ event ValidSignersUpdated(address[] signers)
|
||||
error AddressDenied()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Address doesn't exist in a MerkleTree.Address not allowed as relayer.0x3b8474be*
|
||||
|
||||
_Address doesn't exist in a MerkleTree.Address not allowed as relayer.0x3b8474be_
|
||||
|
||||
### AlreadyReleased
|
||||
|
||||
@ -221,10 +165,7 @@ error AddressDenied()
|
||||
error AlreadyReleased()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Lock already released or returned.0x63b4904e*
|
||||
|
||||
_Lock already released or returned.0x63b4904e_
|
||||
|
||||
### AmountNotAllowed
|
||||
|
||||
@ -232,10 +173,7 @@ error AlreadyReleased()
|
||||
error AmountNotAllowed()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Wished amount to be locked exceeds the limit allowed.0x1c18f846*
|
||||
|
||||
_Wished amount to be locked exceeds the limit allowed.0x1c18f846_
|
||||
|
||||
### DepositAlreadyExists
|
||||
|
||||
@ -243,10 +181,7 @@ error AmountNotAllowed()
|
||||
error DepositAlreadyExists()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Deposit already exist and it is still valid.0xc44bd765*
|
||||
|
||||
_Deposit already exist and it is still valid.0xc44bd765_
|
||||
|
||||
### InvalidDeposit
|
||||
|
||||
@ -254,10 +189,7 @@ error DepositAlreadyExists()
|
||||
error InvalidDeposit()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Deposit not valid anymore.0xb2e532de*
|
||||
|
||||
_Deposit not valid anymore.0xb2e532de_
|
||||
|
||||
### InvalidSigner
|
||||
|
||||
@ -265,10 +197,7 @@ error InvalidDeposit()
|
||||
error InvalidSigner()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Signer is not a valid signer.0x815e1d64*
|
||||
|
||||
_Signer is not a valid signer.0x815e1d64_
|
||||
|
||||
### LengthMismatch
|
||||
|
||||
@ -276,10 +205,7 @@ error InvalidSigner()
|
||||
error LengthMismatch()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Arrays' length don't match.0xff633a38*
|
||||
|
||||
_Arrays' length don't match.0xff633a38_
|
||||
|
||||
### LoopOverflow
|
||||
|
||||
@ -287,10 +213,7 @@ error LengthMismatch()
|
||||
error LoopOverflow()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Loop bounds have overflowed.0xdfb035c9*
|
||||
|
||||
_Loop bounds have overflowed.0xdfb035c9_
|
||||
|
||||
### NoTokens
|
||||
|
||||
@ -298,10 +221,7 @@ error LoopOverflow()
|
||||
error NoTokens()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*No tokens array provided as argument.0xdf957883*
|
||||
|
||||
_No tokens array provided as argument.0xdf957883_
|
||||
|
||||
### NotEnoughTokens
|
||||
|
||||
@ -309,10 +229,7 @@ error NoTokens()
|
||||
error NotEnoughTokens()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Not enough token remaining on deposit.0x22bbb43c*
|
||||
|
||||
_Not enough token remaining on deposit.0x22bbb43c_
|
||||
|
||||
### NotExpired
|
||||
|
||||
@ -320,10 +237,7 @@ error NotEnoughTokens()
|
||||
error NotExpired()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85*
|
||||
|
||||
_Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85_
|
||||
|
||||
### OnlySeller
|
||||
|
||||
@ -331,10 +245,7 @@ error NotExpired()
|
||||
error OnlySeller()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726*
|
||||
|
||||
_Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726_
|
||||
|
||||
### TokenDenied
|
||||
|
||||
@ -342,10 +253,7 @@ error OnlySeller()
|
||||
error TokenDenied()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Token address not allowed to be deposited.0x1578328e*
|
||||
|
||||
_Token address not allowed to be deposited.0x1578328e_
|
||||
|
||||
### TxAlreadyUsed
|
||||
|
||||
@ -353,9 +261,4 @@ error TokenDenied()
|
||||
error TxAlreadyUsed()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Transaction already used to unlock payment.0xf490a6ea*
|
||||
|
||||
|
||||
|
||||
_Transaction already used to unlock payment.0xf490a6ea_
|
||||
|
370
docs/P2PIX.md
370
docs/P2PIX.md
@ -1,16 +1,8 @@
|
||||
# P2PIX
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Methods
|
||||
|
||||
### _castAddrToKey
|
||||
### \_castAddrToKey
|
||||
|
||||
```solidity
|
||||
function _castAddrToKey(address _addr) external pure returns (uint256 _key)
|
||||
@ -18,19 +10,19 @@ function _castAddrToKey(address _addr) external pure returns (uint256 _key)
|
||||
|
||||
Public method that handles `address` to `uint256` safe type casting.
|
||||
|
||||
*Function sighash: 0x4b2ae980.*
|
||||
_Function sighash: 0x4b2ae980._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _addr | address | undefined |
|
||||
| ------ | ------- | ----------- |
|
||||
| \_addr | address | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _key | uint256 | undefined |
|
||||
| ----- | ------- | ----------- |
|
||||
| \_key | uint256 | undefined |
|
||||
|
||||
### allowedERC20s
|
||||
|
||||
@ -38,21 +30,19 @@ Public method that handles `address` to `uint256` safe type casting.
|
||||
function allowedERC20s(contract ERC20) external view returns (bool)
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Tokens allowed to serve as the underlying amount of a deposit.*
|
||||
_Tokens allowed to serve as the underlying amount of a deposit._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | contract ERC20 | undefined |
|
||||
| ---- | -------------- | ----------- |
|
||||
| \_0 | contract ERC20 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bool | undefined |
|
||||
| ---- | ---- | ----------- |
|
||||
| \_0 | bool | undefined |
|
||||
|
||||
### cancelDeposit
|
||||
|
||||
@ -62,12 +52,12 @@ function cancelDeposit(uint256 depositID) external nonpayable
|
||||
|
||||
Enables seller to invalidate future locks made to his/her token offering order.
|
||||
|
||||
*This function does not affect any ongoing active locks.Function sighash: 0x72fada5c.*
|
||||
_This function does not affect any ongoing active locks.Function sighash: 0x72fada5c._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------- | ------- | ----------- |
|
||||
| depositID | uint256 | undefined |
|
||||
|
||||
### defaultLockBlocks
|
||||
@ -76,16 +66,13 @@ Enables seller to invalidate future locks made to his/her token offering order.
|
||||
function defaultLockBlocks() external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Default blocks that lock will hold tokens.*
|
||||
|
||||
_Default blocks that lock will hold tokens._
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### deposit
|
||||
|
||||
@ -95,21 +82,21 @@ function deposit(address _token, uint256 _amount, string _pixTarget, bytes32 all
|
||||
|
||||
Creates a deposit order based on a seller's offer of an amount of ERC20 tokens.
|
||||
|
||||
*Seller needs to send his tokens to the P2PIX smart contract.Function sighash: 0xbfe07da6.*
|
||||
_Seller needs to send his tokens to the P2PIX smart contract.Function sighash: 0xbfe07da6._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _token | address | undefined |
|
||||
| _amount | uint256 | undefined |
|
||||
| _pixTarget | string | Pix key destination provided by the offer's seller. |
|
||||
| ------------- | ------- | ------------------------------------------------------- |
|
||||
| \_token | address | undefined |
|
||||
| \_amount | uint256 | undefined |
|
||||
| \_pixTarget | string | Pix key destination provided by the offer's seller. |
|
||||
| allowlistRoot | bytes32 | Optional allow list merkleRoot update `bytes32` value. |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------- | ------- | -------------------------------------------------------------- |
|
||||
| depositID | uint256 | The `uint256` return value provided as the deposit identifier. |
|
||||
|
||||
### depositCount
|
||||
@ -118,16 +105,11 @@ Creates a deposit order based on a seller's offer of an amount of ERC20 toke
|
||||
function depositCount() external view returns (uint256 _val)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _val | uint256 | undefined |
|
||||
| ----- | ------- | ----------- |
|
||||
| \_val | uint256 | undefined |
|
||||
|
||||
### lock
|
||||
|
||||
@ -137,24 +119,24 @@ function lock(uint256 _depositID, address _buyerAddress, address _relayerTarget,
|
||||
|
||||
Public method designed to lock an remaining amount of the deposit order of a seller.
|
||||
|
||||
*This method can be performed either by: - An user allowed via the seller's allowlist; - An user with enough userRecord to lock the wished amount; There can only exist a lock per each `_amount` partitioned from the total `remaining` value.Locks can only be performed in valid orders.Function sighash: 0x03aaf306.*
|
||||
_This method can be performed either by: - An user allowed via the seller's allowlist; - An user with enough userRecord to lock the wished amount; There can only exist a lock per each `_amount` partitioned from the total `remaining` value.Locks can only be performed in valid orders.Function sighash: 0x03aaf306._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _depositID | uint256 | undefined |
|
||||
| _buyerAddress | address | The address of the buyer of a `_depositID`. |
|
||||
| _relayerTarget | address | Target address entitled to the `relayerPremim`. |
|
||||
| _relayerPremium | uint256 | The refund/premium owed to a relayer. |
|
||||
| _amount | uint256 | The deposit's remaining amount wished to be locked. |
|
||||
| ---------------- | --------- | ------------------------------------------------------------------------------------------------------------------------ |
|
||||
| \_depositID | uint256 | undefined |
|
||||
| \_buyerAddress | address | The address of the buyer of a `_depositID`. |
|
||||
| \_relayerTarget | address | Target address entitled to the `relayerPremim`. |
|
||||
| \_relayerPremium | uint256 | The refund/premium owed to a relayer. |
|
||||
| \_amount | uint256 | The deposit's remaining amount wished to be locked. |
|
||||
| merkleProof | bytes32[] | This value should be: - Provided as a pass if the `msg.sender` is in the seller's allowlist; - Left empty otherwise; |
|
||||
| expiredLocks | bytes32[] | An array of `bytes32` identifiers to be provided so to unexpire locks using this transaction gas push. |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------ | ------- | ---------------------------------------------------- |
|
||||
| lockID | bytes32 | The `bytes32` value returned as the lock identifier. |
|
||||
|
||||
### mapDeposits
|
||||
@ -163,20 +145,18 @@ Public method designed to lock an remaining amount of the deposit order of a sel
|
||||
function mapDeposits(uint256) external view returns (uint256 remaining, string pixTarget, address seller, address token, bool valid)
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Seller list of deposits*
|
||||
_Seller list of deposits_
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------- | ------- | ----------- |
|
||||
| remaining | uint256 | undefined |
|
||||
| pixTarget | string | undefined |
|
||||
| seller | address | undefined |
|
||||
@ -189,20 +169,18 @@ function mapDeposits(uint256) external view returns (uint256 remaining, string p
|
||||
function mapLocks(bytes32) external view returns (uint256 depositID, uint256 relayerPremium, uint256 amount, uint256 expirationBlock, address buyerAddress, address relayerTarget, address relayerAddress)
|
||||
```
|
||||
|
||||
|
||||
|
||||
*List of Locks.*
|
||||
_List of Locks._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bytes32 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | bytes32 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------------- | ------- | ----------- |
|
||||
| depositID | uint256 | undefined |
|
||||
| relayerPremium | uint256 | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
@ -217,16 +195,11 @@ function mapLocks(bytes32) external view returns (uint256 depositID, uint256 rel
|
||||
function owner() external view returns (address)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | address | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | address | undefined |
|
||||
|
||||
### release
|
||||
|
||||
@ -236,14 +209,14 @@ function release(bytes32 lockID, address _relayerTarget, uint256 pixTimestamp, b
|
||||
|
||||
Lock release method that liquidate lock orders and distributes relayer fees.
|
||||
|
||||
*This method can be called by any public actor as long the signature provided is valid.`relayerPremium` gets splitted equaly if `relayerTarget` addresses differ.If the `msg.sender` of this method and `l.relayerAddress` are the same, `msg.sender` accrues both l.amount and l.relayerPremium as userRecord credit. In case of they differing: - `lock` caller gets accrued with `l.amount` as userRecord credit; - `release` caller gets accrued with `l.relayerPremium` as userRecord credit; Function sighash: 0x4e1389ed.*
|
||||
_This method can be called by any public actor as long the signature provided is valid.`relayerPremium` gets splitted equaly if `relayerTarget` addresses differ.If the `msg.sender` of this method and `l.relayerAddress` are the same, `msg.sender` accrues both l.amount and l.relayerPremium as userRecord credit. In case of they differing: - `lock` caller gets accrued with `l.amount` as userRecord credit; - `release` caller gets accrued with `l.relayerPremium` as userRecord credit; Function sighash: 0x4e1389ed._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------------- | ------- | ----------------------------------------------- |
|
||||
| lockID | bytes32 | undefined |
|
||||
| _relayerTarget | address | Target address entitled to the `relayerPremim`. |
|
||||
| \_relayerTarget | address | Target address entitled to the `relayerPremim`. |
|
||||
| pixTimestamp | uint256 | undefined |
|
||||
| r | bytes32 | undefined |
|
||||
| s | bytes32 | undefined |
|
||||
@ -257,14 +230,11 @@ function reputation() external view returns (contract IReputation)
|
||||
|
||||
███ Storage ████████████████████████████████████████████████████████████
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | contract IReputation | undefined |
|
||||
| ---- | -------------------- | ----------- |
|
||||
| \_0 | contract IReputation | undefined |
|
||||
|
||||
### sellerAllowList
|
||||
|
||||
@ -272,21 +242,19 @@ function reputation() external view returns (contract IReputation)
|
||||
function sellerAllowList(uint256) external view returns (bytes32)
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Seller casted to key => Seller's allowlist merkleroot.*
|
||||
_Seller casted to key => Seller's allowlist merkleroot._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bytes32 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | bytes32 | undefined |
|
||||
|
||||
### setDefaultLockBlocks
|
||||
|
||||
@ -294,15 +262,11 @@ function sellerAllowList(uint256) external view returns (bytes32)
|
||||
function setDefaultLockBlocks(uint256 _blocks) external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _blocks | uint256 | undefined |
|
||||
| -------- | ------- | ----------- |
|
||||
| \_blocks | uint256 | undefined |
|
||||
|
||||
### setOwner
|
||||
|
||||
@ -310,14 +274,10 @@ function setDefaultLockBlocks(uint256 _blocks) external nonpayable
|
||||
function setOwner(address newOwner) external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| -------- | ------- | ----------- |
|
||||
| newOwner | address | undefined |
|
||||
|
||||
### setReputation
|
||||
@ -326,15 +286,11 @@ function setOwner(address newOwner) external nonpayable
|
||||
function setReputation(contract IReputation _reputation) external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _reputation | contract IReputation | undefined |
|
||||
| ------------ | -------------------- | ----------- |
|
||||
| \_reputation | contract IReputation | undefined |
|
||||
|
||||
### setRoot
|
||||
|
||||
@ -342,14 +298,10 @@ function setReputation(contract IReputation _reputation) external nonpayable
|
||||
function setRoot(address addr, bytes32 merkleroot) external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------- | ------- | ----------- |
|
||||
| addr | address | undefined |
|
||||
| merkleroot | bytes32 | undefined |
|
||||
|
||||
@ -359,15 +311,11 @@ function setRoot(address addr, bytes32 merkleroot) external nonpayable
|
||||
function setValidSigners(address[] _validSigners) external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _validSigners | address[] | undefined |
|
||||
| -------------- | --------- | ----------- |
|
||||
| \_validSigners | address[] | undefined |
|
||||
|
||||
### tokenSettings
|
||||
|
||||
@ -375,16 +323,12 @@ function setValidSigners(address[] _validSigners) external nonpayable
|
||||
function tokenSettings(address[] _tokens, bool[] _states) external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _tokens | address[] | undefined |
|
||||
| _states | bool[] | undefined |
|
||||
| -------- | --------- | ----------- |
|
||||
| \_tokens | address[] | undefined |
|
||||
| \_states | bool[] | undefined |
|
||||
|
||||
### unlockExpired
|
||||
|
||||
@ -394,12 +338,12 @@ function unlockExpired(bytes32[] lockIDs) external nonpayable
|
||||
|
||||
Unlocks expired locks.
|
||||
|
||||
*Triggered in the callgraph by both `lock` and `withdraw` functions.This method can also have any public actor as its `tx.origin`.For each successfull unexpired lock recovered, `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.Function sighash: 0x8e2749d6.*
|
||||
_Triggered in the callgraph by both `lock` and `withdraw` functions.This method can also have any public actor as its `tx.origin`.For each successfull unexpired lock recovered, `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.Function sighash: 0x8e2749d6._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------- | --------- | ----------- |
|
||||
| lockIDs | bytes32[] | undefined |
|
||||
|
||||
### userRecord
|
||||
@ -408,21 +352,19 @@ Unlocks expired locks.
|
||||
function userRecord(uint256) external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Stores an relayer's last computed credit.*
|
||||
_Stores an relayer's last computed credit._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### validBacenSigners
|
||||
|
||||
@ -430,21 +372,19 @@ function userRecord(uint256) external view returns (uint256)
|
||||
function validBacenSigners(uint256) external view returns (bool)
|
||||
```
|
||||
|
||||
|
||||
|
||||
*List of valid Bacen signature addresses*
|
||||
_List of valid Bacen signature addresses_
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bool | undefined |
|
||||
| ---- | ---- | ----------- |
|
||||
| \_0 | bool | undefined |
|
||||
|
||||
### withdraw
|
||||
|
||||
@ -454,12 +394,12 @@ function withdraw(uint256 depositID, bytes32[] expiredLocks) external nonpayable
|
||||
|
||||
Seller's expired deposit fund sweeper.
|
||||
|
||||
*A seller may use this method to recover tokens from expired deposits.Function sighash: 0x36317972.*
|
||||
_A seller may use this method to recover tokens from expired deposits.Function sighash: 0x36317972._
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------------ | --------- | ----------- |
|
||||
| depositID | uint256 | undefined |
|
||||
| expiredLocks | bytes32[] | undefined |
|
||||
|
||||
@ -469,12 +409,7 @@ Seller's expired deposit fund sweeper.
|
||||
function withdrawBalance() external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Contract's underlying balance withdraw method.Function sighash: 0x5fd8c710.*
|
||||
|
||||
|
||||
|
||||
_Contract's underlying balance withdraw method.Function sighash: 0x5fd8c710._
|
||||
|
||||
## Events
|
||||
|
||||
@ -484,14 +419,10 @@ function withdrawBalance() external nonpayable
|
||||
event AllowedERC20Updated(address indexed token, bool indexed state)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------------- | ------- | ----------- |
|
||||
| token `indexed` | address | undefined |
|
||||
| state `indexed` | bool | undefined |
|
||||
|
||||
@ -503,12 +434,10 @@ event DepositAdded(address indexed seller, uint256 depositID, address token, uin
|
||||
|
||||
███ Events ████████████████████████████████████████████████████████████
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------------- | ------- | ----------- |
|
||||
| seller `indexed` | address | undefined |
|
||||
| depositID | uint256 | undefined |
|
||||
| token | address | undefined |
|
||||
@ -520,14 +449,10 @@ event DepositAdded(address indexed seller, uint256 depositID, address token, uin
|
||||
event DepositClosed(address indexed seller, uint256 depositID)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------------- | ------- | ----------- |
|
||||
| seller `indexed` | address | undefined |
|
||||
| depositID | uint256 | undefined |
|
||||
|
||||
@ -537,14 +462,10 @@ event DepositClosed(address indexed seller, uint256 depositID)
|
||||
event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------------- | ------- | ----------- |
|
||||
| seller `indexed` | address | undefined |
|
||||
| depositID | uint256 | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
@ -555,14 +476,10 @@ event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount
|
||||
event FundsWithdrawn(address owner, uint256 amount)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------ | ------- | ----------- |
|
||||
| owner | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
|
||||
@ -572,14 +489,10 @@ event FundsWithdrawn(address owner, uint256 amount)
|
||||
event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID, uint256 amount)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------------- | ------- | ----------- |
|
||||
| buyer `indexed` | address | undefined |
|
||||
| lockID `indexed` | bytes32 | undefined |
|
||||
| depositID | uint256 | undefined |
|
||||
@ -591,14 +504,10 @@ event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID
|
||||
event LockBlocksUpdated(uint256 blocks)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------ | ------- | ----------- |
|
||||
| blocks | uint256 | undefined |
|
||||
|
||||
### LockReleased
|
||||
@ -607,14 +516,10 @@ event LockBlocksUpdated(uint256 blocks)
|
||||
event LockReleased(address indexed buyer, bytes32 lockId)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------------- | ------- | ----------- |
|
||||
| buyer `indexed` | address | undefined |
|
||||
| lockId | bytes32 | undefined |
|
||||
|
||||
@ -624,14 +529,10 @@ event LockReleased(address indexed buyer, bytes32 lockId)
|
||||
event LockReturned(address indexed buyer, bytes32 lockId)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| --------------- | ------- | ----------- |
|
||||
| buyer `indexed` | address | undefined |
|
||||
| lockId | bytes32 | undefined |
|
||||
|
||||
@ -641,14 +542,10 @@ event LockReturned(address indexed buyer, bytes32 lockId)
|
||||
event OwnerUpdated(address indexed user, address indexed newOwner)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------------------ | ------- | ----------- |
|
||||
| user `indexed` | address | undefined |
|
||||
| newOwner `indexed` | address | undefined |
|
||||
|
||||
@ -658,14 +555,10 @@ event OwnerUpdated(address indexed user, address indexed newOwner)
|
||||
event ReputationUpdated(address reputation)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ---------- | ------- | ----------- |
|
||||
| reputation | address | undefined |
|
||||
|
||||
### ValidSignersUpdated
|
||||
@ -674,18 +567,12 @@ event ReputationUpdated(address reputation)
|
||||
event ValidSignersUpdated(address[] signers)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------- | --------- | ----------- |
|
||||
| signers | address[] | undefined |
|
||||
|
||||
|
||||
|
||||
## Errors
|
||||
|
||||
### AddressDenied
|
||||
@ -694,10 +581,7 @@ event ValidSignersUpdated(address[] signers)
|
||||
error AddressDenied()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Address doesn't exist in a MerkleTree.Address not allowed as relayer.0x3b8474be*
|
||||
|
||||
_Address doesn't exist in a MerkleTree.Address not allowed as relayer.0x3b8474be_
|
||||
|
||||
### AlreadyReleased
|
||||
|
||||
@ -705,10 +589,7 @@ error AddressDenied()
|
||||
error AlreadyReleased()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Lock already released or returned.0x63b4904e*
|
||||
|
||||
_Lock already released or returned.0x63b4904e_
|
||||
|
||||
### AmountNotAllowed
|
||||
|
||||
@ -716,10 +597,7 @@ error AlreadyReleased()
|
||||
error AmountNotAllowed()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Wished amount to be locked exceeds the limit allowed.0x1c18f846*
|
||||
|
||||
_Wished amount to be locked exceeds the limit allowed.0x1c18f846_
|
||||
|
||||
### DepositAlreadyExists
|
||||
|
||||
@ -727,10 +605,7 @@ error AmountNotAllowed()
|
||||
error DepositAlreadyExists()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Deposit already exist and it is still valid.0xc44bd765*
|
||||
|
||||
_Deposit already exist and it is still valid.0xc44bd765_
|
||||
|
||||
### InvalidDeposit
|
||||
|
||||
@ -738,10 +613,7 @@ error DepositAlreadyExists()
|
||||
error InvalidDeposit()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Deposit not valid anymore.0xb2e532de*
|
||||
|
||||
_Deposit not valid anymore.0xb2e532de_
|
||||
|
||||
### InvalidSigner
|
||||
|
||||
@ -749,10 +621,7 @@ error InvalidDeposit()
|
||||
error InvalidSigner()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Signer is not a valid signer.0x815e1d64*
|
||||
|
||||
_Signer is not a valid signer.0x815e1d64_
|
||||
|
||||
### LengthMismatch
|
||||
|
||||
@ -760,10 +629,7 @@ error InvalidSigner()
|
||||
error LengthMismatch()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Arrays' length don't match.0xff633a38*
|
||||
|
||||
_Arrays' length don't match.0xff633a38_
|
||||
|
||||
### LoopOverflow
|
||||
|
||||
@ -771,10 +637,7 @@ error LengthMismatch()
|
||||
error LoopOverflow()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Loop bounds have overflowed.0xdfb035c9*
|
||||
|
||||
_Loop bounds have overflowed.0xdfb035c9_
|
||||
|
||||
### NoTokens
|
||||
|
||||
@ -782,10 +645,7 @@ error LoopOverflow()
|
||||
error NoTokens()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*No tokens array provided as argument.0xdf957883*
|
||||
|
||||
_No tokens array provided as argument.0xdf957883_
|
||||
|
||||
### NotEnoughTokens
|
||||
|
||||
@ -793,10 +653,7 @@ error NoTokens()
|
||||
error NotEnoughTokens()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Not enough token remaining on deposit.0x22bbb43c*
|
||||
|
||||
_Not enough token remaining on deposit.0x22bbb43c_
|
||||
|
||||
### NotExpired
|
||||
|
||||
@ -804,10 +661,7 @@ error NotEnoughTokens()
|
||||
error NotExpired()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85*
|
||||
|
||||
_Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85_
|
||||
|
||||
### OnlySeller
|
||||
|
||||
@ -815,10 +669,7 @@ error NotExpired()
|
||||
error OnlySeller()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726*
|
||||
|
||||
_Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726_
|
||||
|
||||
### Reentrancy
|
||||
|
||||
@ -826,21 +677,13 @@ error OnlySeller()
|
||||
error Reentrancy()
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### TokenDenied
|
||||
|
||||
```solidity
|
||||
error TokenDenied()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Token address not allowed to be deposited.0x1578328e*
|
||||
|
||||
_Token address not allowed to be deposited.0x1578328e_
|
||||
|
||||
### TxAlreadyUsed
|
||||
|
||||
@ -848,9 +691,4 @@ error TokenDenied()
|
||||
error TxAlreadyUsed()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Transaction already used to unlock payment.0xf490a6ea*
|
||||
|
||||
|
||||
|
||||
_Transaction already used to unlock payment.0xf490a6ea_
|
||||
|
@ -1,13 +1,5 @@
|
||||
# Reputation
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Methods
|
||||
|
||||
### limiter
|
||||
@ -16,21 +8,17 @@
|
||||
function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _userCredit | uint256 | undefined |
|
||||
| ------------ | ------- | ----------- |
|
||||
| \_userCredit | uint256 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _spendLimit | uint256 | undefined |
|
||||
| ------------ | ------- | ----------- |
|
||||
| \_spendLimit | uint256 | undefined |
|
||||
|
||||
### magicValue
|
||||
|
||||
@ -38,16 +26,13 @@ function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit
|
||||
function magicValue() external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Denominator's constant operand for the `limiter` fx. *
|
||||
|
||||
_Denominator's constant operand for the `limiter` fx. _
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### maxLimit
|
||||
|
||||
@ -55,16 +40,13 @@ function magicValue() external view returns (uint256)
|
||||
function maxLimit() external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
*Asymptote numerator constant value for the `limiter` fx.*
|
||||
|
||||
_Asymptote numerator constant value for the `limiter` fx._
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### owner
|
||||
|
||||
@ -72,16 +54,11 @@ function maxLimit() external view returns (uint256)
|
||||
function owner() external view returns (address)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | address | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | address | undefined |
|
||||
|
||||
### setOwner
|
||||
|
||||
@ -89,18 +66,12 @@ function owner() external view returns (address)
|
||||
function setOwner(address newOwner) external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| -------- | ------- | ----------- |
|
||||
| newOwner | address | undefined |
|
||||
|
||||
|
||||
|
||||
## Events
|
||||
|
||||
### OwnerUpdated
|
||||
@ -109,16 +80,9 @@ function setOwner(address newOwner) external nonpayable
|
||||
event OwnerUpdated(address indexed user, address indexed newOwner)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------------------ | ------- | ----------- |
|
||||
| user `indexed` | address | undefined |
|
||||
| newOwner `indexed` | address | undefined |
|
||||
|
||||
|
||||
|
||||
|
@ -1,13 +1,9 @@
|
||||
# Owned
|
||||
|
||||
*Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Owned.sol)*
|
||||
|
||||
|
||||
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Owned.sol)_
|
||||
|
||||
Simple single owner authorization mixin.
|
||||
|
||||
|
||||
|
||||
## Methods
|
||||
|
||||
### owner
|
||||
@ -16,16 +12,11 @@ Simple single owner authorization mixin.
|
||||
function owner() external view returns (address)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | address | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | address | undefined |
|
||||
|
||||
### setOwner
|
||||
|
||||
@ -33,18 +24,12 @@ function owner() external view returns (address)
|
||||
function setOwner(address newOwner) external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| -------- | ------- | ----------- |
|
||||
| newOwner | address | undefined |
|
||||
|
||||
|
||||
|
||||
## Events
|
||||
|
||||
### OwnerUpdated
|
||||
@ -53,16 +38,9 @@ function setOwner(address newOwner) external nonpayable
|
||||
event OwnerUpdated(address indexed user, address indexed newOwner)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------------------ | ------- | ----------- |
|
||||
| user `indexed` | address | undefined |
|
||||
| newOwner `indexed` | address | undefined |
|
||||
|
||||
|
||||
|
||||
|
@ -1,13 +1,5 @@
|
||||
# IReputation
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Methods
|
||||
|
||||
### limiter
|
||||
@ -16,22 +8,14 @@
|
||||
function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _userCredit | uint256 | undefined |
|
||||
| ------------ | ------- | ----------- |
|
||||
| \_userCredit | uint256 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _spendLimit | uint256 | undefined |
|
||||
|
||||
|
||||
|
||||
|
||||
| ------------ | ------- | ----------- |
|
||||
| \_spendLimit | uint256 | undefined |
|
||||
|
@ -1,13 +1,5 @@
|
||||
# MockToken
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Methods
|
||||
|
||||
### DOMAIN_SEPARATOR
|
||||
@ -16,16 +8,11 @@
|
||||
function DOMAIN_SEPARATOR() external view returns (bytes32)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bytes32 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | bytes32 | undefined |
|
||||
|
||||
### allowance
|
||||
|
||||
@ -33,22 +20,18 @@ function DOMAIN_SEPARATOR() external view returns (bytes32)
|
||||
function allowance(address, address) external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | address | undefined |
|
||||
| _1 | address | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | address | undefined |
|
||||
| \_1 | address | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### approve
|
||||
|
||||
@ -56,22 +39,18 @@ function allowance(address, address) external view returns (uint256)
|
||||
function approve(address spender, uint256 amount) external nonpayable returns (bool)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------- | ------- | ----------- |
|
||||
| spender | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bool | undefined |
|
||||
| ---- | ---- | ----------- |
|
||||
| \_0 | bool | undefined |
|
||||
|
||||
### balanceOf
|
||||
|
||||
@ -79,21 +58,17 @@ function approve(address spender, uint256 amount) external nonpayable returns (b
|
||||
function balanceOf(address) external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | address | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | address | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### decimals
|
||||
|
||||
@ -101,16 +76,11 @@ function balanceOf(address) external view returns (uint256)
|
||||
function decimals() external view returns (uint8)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint8 | undefined |
|
||||
| ---- | ----- | ----------- |
|
||||
| \_0 | uint8 | undefined |
|
||||
|
||||
### name
|
||||
|
||||
@ -118,16 +88,11 @@ function decimals() external view returns (uint8)
|
||||
function name() external view returns (string)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | string | undefined |
|
||||
| ---- | ------ | ----------- |
|
||||
| \_0 | string | undefined |
|
||||
|
||||
### nonces
|
||||
|
||||
@ -135,21 +100,17 @@ function name() external view returns (string)
|
||||
function nonces(address) external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | address | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | address | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### permit
|
||||
|
||||
@ -157,14 +118,10 @@ function nonces(address) external view returns (uint256)
|
||||
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| -------- | ------- | ----------- |
|
||||
| owner | address | undefined |
|
||||
| spender | address | undefined |
|
||||
| value | uint256 | undefined |
|
||||
@ -179,16 +136,11 @@ function permit(address owner, address spender, uint256 value, uint256 deadline,
|
||||
function symbol() external view returns (string)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | string | undefined |
|
||||
| ---- | ------ | ----------- |
|
||||
| \_0 | string | undefined |
|
||||
|
||||
### totalSupply
|
||||
|
||||
@ -196,16 +148,11 @@ function symbol() external view returns (string)
|
||||
function totalSupply() external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### transfer
|
||||
|
||||
@ -213,22 +160,18 @@ function totalSupply() external view returns (uint256)
|
||||
function transfer(address to, uint256 amount) external nonpayable returns (bool)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------ | ------- | ----------- |
|
||||
| to | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bool | undefined |
|
||||
| ---- | ---- | ----------- |
|
||||
| \_0 | bool | undefined |
|
||||
|
||||
### transferFrom
|
||||
|
||||
@ -236,14 +179,10 @@ function transfer(address to, uint256 amount) external nonpayable returns (bool)
|
||||
function transferFrom(address from, address to, uint256 amount) external nonpayable returns (bool)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------ | ------- | ----------- |
|
||||
| from | address | undefined |
|
||||
| to | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
@ -251,10 +190,8 @@ function transferFrom(address from, address to, uint256 amount) external nonpaya
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bool | undefined |
|
||||
|
||||
|
||||
| ---- | ---- | ----------- |
|
||||
| \_0 | bool | undefined |
|
||||
|
||||
## Events
|
||||
|
||||
@ -264,14 +201,10 @@ function transferFrom(address from, address to, uint256 amount) external nonpaya
|
||||
event Approval(address indexed owner, address indexed spender, uint256 amount)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ----------------- | ------- | ----------- |
|
||||
| owner `indexed` | address | undefined |
|
||||
| spender `indexed` | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
@ -282,17 +215,10 @@ event Approval(address indexed owner, address indexed spender, uint256 amount)
|
||||
event Transfer(address indexed from, address indexed to, uint256 amount)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| -------------- | ------- | ----------- |
|
||||
| from `indexed` | address | undefined |
|
||||
| to `indexed` | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
|
||||
|
||||
|
||||
|
@ -1,12 +1,10 @@
|
||||
# ERC20
|
||||
|
||||
*Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)*
|
||||
|
||||
|
||||
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)_
|
||||
|
||||
Modern and gas efficient ERC20 + EIP-2612 implementation.
|
||||
|
||||
*Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.*
|
||||
_Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it._
|
||||
|
||||
## Methods
|
||||
|
||||
@ -16,16 +14,11 @@ Modern and gas efficient ERC20 + EIP-2612 implementation.
|
||||
function DOMAIN_SEPARATOR() external view returns (bytes32)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bytes32 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | bytes32 | undefined |
|
||||
|
||||
### allowance
|
||||
|
||||
@ -33,22 +26,18 @@ function DOMAIN_SEPARATOR() external view returns (bytes32)
|
||||
function allowance(address, address) external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | address | undefined |
|
||||
| _1 | address | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | address | undefined |
|
||||
| \_1 | address | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### approve
|
||||
|
||||
@ -56,22 +45,18 @@ function allowance(address, address) external view returns (uint256)
|
||||
function approve(address spender, uint256 amount) external nonpayable returns (bool)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------- | ------- | ----------- |
|
||||
| spender | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bool | undefined |
|
||||
| ---- | ---- | ----------- |
|
||||
| \_0 | bool | undefined |
|
||||
|
||||
### balanceOf
|
||||
|
||||
@ -79,21 +64,17 @@ function approve(address spender, uint256 amount) external nonpayable returns (b
|
||||
function balanceOf(address) external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | address | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | address | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### decimals
|
||||
|
||||
@ -101,16 +82,11 @@ function balanceOf(address) external view returns (uint256)
|
||||
function decimals() external view returns (uint8)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint8 | undefined |
|
||||
| ---- | ----- | ----------- |
|
||||
| \_0 | uint8 | undefined |
|
||||
|
||||
### name
|
||||
|
||||
@ -118,16 +94,11 @@ function decimals() external view returns (uint8)
|
||||
function name() external view returns (string)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | string | undefined |
|
||||
| ---- | ------ | ----------- |
|
||||
| \_0 | string | undefined |
|
||||
|
||||
### nonces
|
||||
|
||||
@ -135,21 +106,17 @@ function name() external view returns (string)
|
||||
function nonces(address) external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | address | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | address | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### permit
|
||||
|
||||
@ -157,14 +124,10 @@ function nonces(address) external view returns (uint256)
|
||||
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external nonpayable
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| -------- | ------- | ----------- |
|
||||
| owner | address | undefined |
|
||||
| spender | address | undefined |
|
||||
| value | uint256 | undefined |
|
||||
@ -179,16 +142,11 @@ function permit(address owner, address spender, uint256 value, uint256 deadline,
|
||||
function symbol() external view returns (string)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | string | undefined |
|
||||
| ---- | ------ | ----------- |
|
||||
| \_0 | string | undefined |
|
||||
|
||||
### totalSupply
|
||||
|
||||
@ -196,16 +154,11 @@ function symbol() external view returns (string)
|
||||
function totalSupply() external view returns (uint256)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | uint256 | undefined |
|
||||
| ---- | ------- | ----------- |
|
||||
| \_0 | uint256 | undefined |
|
||||
|
||||
### transfer
|
||||
|
||||
@ -213,22 +166,18 @@ function totalSupply() external view returns (uint256)
|
||||
function transfer(address to, uint256 amount) external nonpayable returns (bool)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------ | ------- | ----------- |
|
||||
| to | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bool | undefined |
|
||||
| ---- | ---- | ----------- |
|
||||
| \_0 | bool | undefined |
|
||||
|
||||
### transferFrom
|
||||
|
||||
@ -236,14 +185,10 @@ function transfer(address to, uint256 amount) external nonpayable returns (bool)
|
||||
function transferFrom(address from, address to, uint256 amount) external nonpayable returns (bool)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ------ | ------- | ----------- |
|
||||
| from | address | undefined |
|
||||
| to | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
@ -251,10 +196,8 @@ function transferFrom(address from, address to, uint256 amount) external nonpaya
|
||||
#### Returns
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| _0 | bool | undefined |
|
||||
|
||||
|
||||
| ---- | ---- | ----------- |
|
||||
| \_0 | bool | undefined |
|
||||
|
||||
## Events
|
||||
|
||||
@ -264,14 +207,10 @@ function transferFrom(address from, address to, uint256 amount) external nonpaya
|
||||
event Approval(address indexed owner, address indexed spender, uint256 amount)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| ----------------- | ------- | ----------- |
|
||||
| owner `indexed` | address | undefined |
|
||||
| spender `indexed` | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
@ -282,17 +221,10 @@ event Approval(address indexed owner, address indexed spender, uint256 amount)
|
||||
event Transfer(address indexed from, address indexed to, uint256 amount)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
|---|---|---|
|
||||
| -------------- | ------- | ----------- |
|
||||
| from `indexed` | address | undefined |
|
||||
| to `indexed` | address | undefined |
|
||||
| amount | uint256 | undefined |
|
||||
|
||||
|
||||
|
||||
|
@ -1,14 +1,12 @@
|
||||
# Counters
|
||||
|
||||
*buf0t9Modified from OpenZeppelin Contracts (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol)*
|
||||
_buf0t9Modified from OpenZeppelin Contracts (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol)_
|
||||
|
||||
> Counters
|
||||
|
||||
Provides counters that can only be incremented, decrementedor reset.
|
||||
|
||||
*Include with `using Counters for Counters.Counter;`*
|
||||
|
||||
|
||||
_Include with `using Counters for Counters.Counter;`_
|
||||
|
||||
## Errors
|
||||
|
||||
@ -18,9 +16,4 @@ Provides counters that can only be incremented, decrementedor reset.
|
||||
error DecOverflow()
|
||||
```
|
||||
|
||||
|
||||
|
||||
*0xce3a3d37*
|
||||
|
||||
|
||||
|
||||
_0xce3a3d37_
|
||||
|
@ -1,12 +1,5 @@
|
||||
# FixedPointMathLib
|
||||
|
||||
*Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol)*
|
||||
|
||||
|
||||
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol)_
|
||||
|
||||
Arithmetic library with operations for fixed-point numbers.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,12 +1,5 @@
|
||||
# MerkleProofLib
|
||||
|
||||
*Solady (https://github.com/vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol)*
|
||||
|
||||
|
||||
_Solady (https://github.com/vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol)_
|
||||
|
||||
Gas optimized verification of proof of inclusion for a leaf in a Merkle tree.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,15 +1,9 @@
|
||||
# ReentrancyGuard
|
||||
|
||||
*z0r0z.ethModified from Seaport (https://github.com/ProjectOpenSea/seaport/blob/main/contracts/lib/ReentrancyGuard.sol)Modified from Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/ReentrancyGuard.sol)*
|
||||
|
||||
|
||||
_z0r0z.ethModified from Seaport (https://github.com/ProjectOpenSea/seaport/blob/main/contracts/lib/ReentrancyGuard.sol)Modified from Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/ReentrancyGuard.sol)_
|
||||
|
||||
Reentrancy protection for smart contracts.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Errors
|
||||
|
||||
### Reentrancy
|
||||
@ -17,10 +11,3 @@ Reentrancy protection for smart contracts.
|
||||
```solidity
|
||||
error Reentrancy()
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,12 +1,7 @@
|
||||
# SafeTransferLib
|
||||
|
||||
*Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)*
|
||||
|
||||
|
||||
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)_
|
||||
|
||||
Safe ETH and ERC20 transfer library that gracefully handles missing return values.
|
||||
|
||||
*Caution! This library won't check that a token has code, responsibility is delegated to the caller.*
|
||||
|
||||
|
||||
|
||||
_Caution! This library won't check that a token has code, responsibility is delegated to the caller._
|
||||
|
@ -1,12 +1,11 @@
|
||||
import "@nomicfoundation/hardhat-chai-matchers";
|
||||
import "@nomicfoundation/hardhat-toolbox";
|
||||
import { config as dotenvConfig } from "dotenv";
|
||||
import "hardhat-tracer";
|
||||
import { HardhatUserConfig } from "hardhat/config";
|
||||
import { NetworkUserConfig } from "hardhat/types";
|
||||
import { resolve } from "path";
|
||||
|
||||
import "hardhat-tracer";
|
||||
|
||||
dotenvConfig({ path: resolve(__dirname, "./.env") });
|
||||
|
||||
const mnemonic: string | undefined = process.env.MNEMONIC;
|
||||
|
@ -2,6 +2,7 @@ import "@nomiclabs/hardhat-ethers";
|
||||
import "@nomiclabs/hardhat-etherscan";
|
||||
import * as fs from "fs";
|
||||
import { ethers, network } from "hardhat";
|
||||
|
||||
// import hre from "hardhat";
|
||||
|
||||
interface Deploys {
|
||||
|
@ -3,6 +3,7 @@ import "@nomiclabs/hardhat-etherscan";
|
||||
import { BigNumber } from "ethers";
|
||||
import * as fs from "fs";
|
||||
import { ethers, network } from "hardhat";
|
||||
|
||||
// import hre from "hardhat";
|
||||
|
||||
interface Deploys {
|
||||
|
@ -70,6 +70,11 @@ const _abi = [
|
||||
name: "OnlySeller",
|
||||
type: "error",
|
||||
},
|
||||
{
|
||||
inputs: [],
|
||||
name: "StaticCallFailed",
|
||||
type: "error",
|
||||
},
|
||||
{
|
||||
inputs: [],
|
||||
name: "TokenDenied",
|
||||
|
File diff suppressed because one or more lines are too long
149
test/p2pix.test.ts
Normal file
149
test/p2pix.test.ts
Normal file
@ -0,0 +1,149 @@
|
||||
import "@nomicfoundation/hardhat-chai-matchers";
|
||||
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||||
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
|
||||
import { expect } from "chai";
|
||||
import { BigNumber, Wallet } from "ethers";
|
||||
import { ethers, network } from "hardhat";
|
||||
|
||||
import { MockToken, P2PIX, Reputation } from "../src/types";
|
||||
import { P2PixErrors } from "./utils/errors";
|
||||
import { p2pixFixture } from "./utils/fixtures";
|
||||
|
||||
describe("P2PIX", () => {
|
||||
type WalletWithAddress = Wallet & SignerWithAddress;
|
||||
|
||||
// contract deployer/admin
|
||||
let owner: WalletWithAddress;
|
||||
|
||||
// extra EOAs
|
||||
let acc01: WalletWithAddress;
|
||||
let acc02: WalletWithAddress;
|
||||
let acc03: WalletWithAddress;
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let res: any;
|
||||
|
||||
let p2pix: P2PIX; // Contract instance
|
||||
let erc20: MockToken; // Token instance
|
||||
let reputation: Reputation; // Reputation Interface instance;
|
||||
|
||||
const fundAmount: BigNumber =
|
||||
ethers.utils.parseEther("10000");
|
||||
const price: BigNumber = ethers.utils.parseEther("100");
|
||||
|
||||
const zero = ethers.constants.AddressZero;
|
||||
|
||||
before("Set signers and reset network", async () => {
|
||||
[owner, acc01, acc02, acc03] =
|
||||
await // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
(ethers as any).getSigners();
|
||||
|
||||
await network.provider.send("hardhat_reset");
|
||||
});
|
||||
beforeEach("Load deployment fixtures", async () => {
|
||||
({ erc20, p2pix, reputation } = await loadFixture(
|
||||
p2pixFixture,
|
||||
));
|
||||
});
|
||||
|
||||
describe("Init", async () => {
|
||||
it("P2PIX, Reputation and ERC20 should initialize", async () => {
|
||||
await p2pix.deployed();
|
||||
await erc20.deployed();
|
||||
await reputation.deployed();
|
||||
expect(p2pix).to.be.ok;
|
||||
expect(erc20).to.be.ok;
|
||||
expect(reputation).to.be.ok;
|
||||
|
||||
const ownerKey = await p2pix._castAddrToKey(
|
||||
owner.address,
|
||||
);
|
||||
const acc01Key = await p2pix._castAddrToKey(
|
||||
acc01.address,
|
||||
);
|
||||
|
||||
// storage checks
|
||||
expect(
|
||||
await p2pix.callStatic.defaultLockBlocks(),
|
||||
).to.eq(4);
|
||||
expect(await p2pix.callStatic.reputation()).to.eq(
|
||||
reputation.address,
|
||||
);
|
||||
expect(await p2pix.callStatic.depositCount()).to.eq(0);
|
||||
expect(
|
||||
await p2pix.callStatic.validBacenSigners(ownerKey),
|
||||
).to.eq(true);
|
||||
expect(
|
||||
await p2pix.callStatic.validBacenSigners(acc01Key),
|
||||
).to.eq(true);
|
||||
expect(
|
||||
await p2pix.callStatic.allowedERC20s(erc20.address),
|
||||
).to.eq(true);
|
||||
|
||||
// event emission
|
||||
await expect(await p2pix.deployTransaction)
|
||||
.to.emit(p2pix, "OwnerUpdated")
|
||||
.withArgs(zero, owner.address)
|
||||
.and.to.emit(p2pix, "LockBlocksUpdated")
|
||||
.withArgs(4)
|
||||
.and.to.emit(p2pix, "ReputationUpdated")
|
||||
.withArgs(reputation.address)
|
||||
.and.to.emit(p2pix, "ValidSignersUpdated")
|
||||
.withArgs([owner.address, acc01.address])
|
||||
.and.to.emit(p2pix, "AllowedERC20Updated")
|
||||
.withArgs(erc20.address, true);
|
||||
});
|
||||
|
||||
it("accounts have been funded", async () => {
|
||||
// can't be eq to fundAmount due to contract deployment cost
|
||||
res = await ethers.provider.getBalance(owner.address);
|
||||
expect(res.toString()).to.have.lengthOf(22);
|
||||
// console.log(res); // lengthOf = 22
|
||||
// console.log(fundAmount); // lengthOf = 23
|
||||
|
||||
// those should eq to hardhat prefunded account's value
|
||||
expect(
|
||||
await ethers.provider.getBalance(acc01.address),
|
||||
).to.eq(fundAmount);
|
||||
expect(
|
||||
await ethers.provider.getBalance(acc02.address),
|
||||
).to.eq(fundAmount);
|
||||
expect(
|
||||
await ethers.provider.getBalance(acc03.address),
|
||||
).to.eq(fundAmount);
|
||||
});
|
||||
});
|
||||
|
||||
// each describe tests a set of functionalities of the contract's behavior
|
||||
describe("Owner Functions", async () => {
|
||||
it("should allow contract's balance withdraw", async () => {
|
||||
const oldBal = await p2pix.provider.getBalance(
|
||||
p2pix.address,
|
||||
);
|
||||
const tx1 = await acc01.sendTransaction({
|
||||
to: p2pix.address,
|
||||
value: price,
|
||||
});
|
||||
const newBal = await p2pix.provider.getBalance(
|
||||
p2pix.address,
|
||||
);
|
||||
|
||||
expect(tx1).to.be.ok;
|
||||
expect(oldBal).to.eq(0);
|
||||
expect(newBal).to.eq(price);
|
||||
|
||||
await expect(
|
||||
p2pix.withdrawBalance(),
|
||||
).to.changeEtherBalances(
|
||||
[owner.address, p2pix.address],
|
||||
[price, "-100000000000000000000"],
|
||||
);
|
||||
|
||||
await expect(
|
||||
p2pix.connect(acc01).withdrawBalance(),
|
||||
).to.be.revertedWith(
|
||||
P2PixErrors.UNAUTHORIZED,
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
@ -8,4 +8,5 @@ export enum P2PixErrors {
|
||||
AlreadyReleased = "AlreadyReleased",
|
||||
TxAlreadyUsed = "TxAlreadyUsed",
|
||||
InvalidSigner = "InvalidSigner",
|
||||
UNAUTHORIZED = "UNAUTHORIZED",
|
||||
}
|
82
test/utils/fixtures.ts
Normal file
82
test/utils/fixtures.ts
Normal file
@ -0,0 +1,82 @@
|
||||
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
|
||||
import { Signer } from "ethers";
|
||||
import { ethers } from "hardhat";
|
||||
|
||||
// import keccak256 from "keccak256";
|
||||
// import { MerkleTree } from "merkletreejs";
|
||||
import {
|
||||
MockToken,
|
||||
P2PIX,
|
||||
Reputation,
|
||||
} from "../../src/types";
|
||||
|
||||
// exported interfaces
|
||||
export interface P2pixFixture {
|
||||
p2pix: P2PIX;
|
||||
reputation: Reputation;
|
||||
erc20: MockToken;
|
||||
// proof: string[];
|
||||
// wrongProof: string[];
|
||||
// merkleRoot: string;
|
||||
}
|
||||
|
||||
// exported constants
|
||||
export const getSignerAddrs = (
|
||||
amount: number,
|
||||
addrs: SignerWithAddress[],
|
||||
): string[] => {
|
||||
const signers: string[] = [];
|
||||
const buffr = addrs.slice(0, amount);
|
||||
for (let i = 0; i < amount; i++) {
|
||||
signers.push(buffr[i].address);
|
||||
}
|
||||
return signers;
|
||||
};
|
||||
export const randomSigners = (amount: number): Signer[] => {
|
||||
const signers: Signer[] = [];
|
||||
for (let i = 0; i < amount; i++) {
|
||||
signers.push(ethers.Wallet.createRandom());
|
||||
}
|
||||
return signers;
|
||||
};
|
||||
export const getError = (Error: string) =>
|
||||
ethers.utils
|
||||
.keccak256(ethers.utils.toUtf8Bytes(Error))
|
||||
.slice(0, 10);
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export const padBuffer = (addr: any) => {
|
||||
return Buffer.from(
|
||||
addr.substr(2).padStart(32 * 2, 0),
|
||||
"hex",
|
||||
);
|
||||
};
|
||||
|
||||
// exported async functions
|
||||
export async function p2pixFixture(): Promise<P2pixFixture> {
|
||||
const validSigners = getSignerAddrs(
|
||||
2,
|
||||
await ethers.getSigners(),
|
||||
);
|
||||
|
||||
const Reputation = await ethers.getContractFactory(
|
||||
"Reputation",
|
||||
);
|
||||
const reputation =
|
||||
(await Reputation.deploy()) as Reputation;
|
||||
|
||||
const ERC20 = await ethers.getContractFactory("MockToken");
|
||||
const erc20 = (await ERC20.deploy(
|
||||
ethers.utils.parseEther("20000000"), // 20M
|
||||
)) as MockToken;
|
||||
|
||||
const P2PIX = await ethers.getContractFactory("P2PIX");
|
||||
const p2pix = (await P2PIX.deploy(
|
||||
4,
|
||||
validSigners,
|
||||
reputation.address,
|
||||
[erc20.address],
|
||||
[true],
|
||||
)) as P2PIX;
|
||||
|
||||
return { reputation, erc20, p2pix };
|
||||
}
|
67
yarn.lock
67
yarn.lock
@ -3175,7 +3175,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"bn.js@npm:^5.2.1":
|
||||
"bn.js@npm:^5.2.0, bn.js@npm:^5.2.1":
|
||||
version: 5.2.1
|
||||
resolution: "bn.js@npm:5.2.1"
|
||||
checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3
|
||||
@ -3291,6 +3291,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"buffer-reverse@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "buffer-reverse@npm:1.0.1"
|
||||
checksum: e350872a89b17af0a7e1bd7a73239a535164f3f010b0800add44f2e52bd0511548dc5b96c20309effba969868c385023d2d02a0add6155f6a76da7b3073b77bd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"buffer-xor@npm:^1.0.3":
|
||||
version: 1.0.3
|
||||
resolution: "buffer-xor@npm:1.0.3"
|
||||
@ -4146,6 +4153,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"crypto-js@npm:^3.1.9-1":
|
||||
version: 3.3.0
|
||||
resolution: "crypto-js@npm:3.3.0"
|
||||
checksum: 193923143a4784b2f974366068d96fe8280168fd3fef2bfea9551a5c3e32096f5a8fa49ff4eeb5bd0b9716d325618d38cfbe6125e359a4ef488fbca93e600824
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cz-conventional-changelog@npm:3.2.0":
|
||||
version: 3.2.0
|
||||
resolution: "cz-conventional-changelog@npm:3.2.0"
|
||||
@ -5067,7 +5081,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ethers@npm:^5.7.2":
|
||||
"ethers@npm:^5.6.1, ethers@npm:^5.7.2":
|
||||
version: 5.7.2
|
||||
resolution: "ethers@npm:5.7.2"
|
||||
dependencies:
|
||||
@ -6035,6 +6049,19 @@ fsevents@~2.1.1:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"hardhat-tracer@npm:^1.2.0":
|
||||
version: 1.2.0
|
||||
resolution: "hardhat-tracer@npm:1.2.0"
|
||||
dependencies:
|
||||
ethers: ^5.6.1
|
||||
peerDependencies:
|
||||
chalk: 4.x
|
||||
ethers: 5.x
|
||||
hardhat: 2.x
|
||||
checksum: 1d348fb3ed60cbde2287329730ccd37c73af80cc2cf4ccfb045f26af26c7efebd4a6fdf611035f34ca7fb75d0eb95985e8f5ed4f0537d2615fb6e126d1d035f0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"hardhat@npm:^2.12.2":
|
||||
version: 2.12.2
|
||||
resolution: "hardhat@npm:2.12.2"
|
||||
@ -7028,6 +7055,17 @@ fsevents@~2.1.1:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"keccak256@npm:^1.0.6":
|
||||
version: 1.0.6
|
||||
resolution: "keccak256@npm:1.0.6"
|
||||
dependencies:
|
||||
bn.js: ^5.2.0
|
||||
buffer: ^6.0.3
|
||||
keccak: ^3.0.2
|
||||
checksum: decafb4b37adcfa6d06b6a5d28546d0d7a9f01ccf4b8cc8963cf8188fcc79a230d7e22988e860813623c602d764259734423e38fd7b9aadfeb409d6928a1d4cf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"keccak@npm:^3.0.0":
|
||||
version: 3.0.1
|
||||
resolution: "keccak@npm:3.0.1"
|
||||
@ -7456,6 +7494,19 @@ fsevents@~2.1.1:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"merkletreejs@npm:^0.2.32":
|
||||
version: 0.2.32
|
||||
resolution: "merkletreejs@npm:0.2.32"
|
||||
dependencies:
|
||||
bignumber.js: ^9.0.1
|
||||
buffer-reverse: ^1.0.1
|
||||
crypto-js: ^3.1.9-1
|
||||
treeify: ^1.1.0
|
||||
web3-utils: ^1.3.4
|
||||
checksum: 041b235adde94de584fdf5ef60138baca8d6f16bb48b3b7f714b607eaa76e4207ed5fef501ee5967371c56c5876804c4ff6da4705707f8cc0362d5c1e0358425
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4":
|
||||
version: 4.0.4
|
||||
resolution: "micromatch@npm:4.0.4"
|
||||
@ -8407,9 +8458,12 @@ fsevents@~2.1.1:
|
||||
fs-extra: ^10.1.0
|
||||
hardhat: ^2.12.2
|
||||
hardhat-gas-reporter: ^1.0.9
|
||||
hardhat-tracer: ^1.2.0
|
||||
husky: ^8.0.1
|
||||
keccak256: ^1.0.6
|
||||
lint-staged: ^13.0.3
|
||||
lodash: ^4.17.21
|
||||
merkletreejs: ^0.2.32
|
||||
mocha: ^10.1.0
|
||||
pinst: ^3.0.0
|
||||
prettier: ^2.7.1
|
||||
@ -10295,6 +10349,13 @@ resolve@1.17.0:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"treeify@npm:^1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "treeify@npm:1.1.0"
|
||||
checksum: aa00dded220c1dd052573bd6fc2c52862f09870851a284f0d3650d72bf913ba9b4f6b824f4f1ab81899bae29375f4266b07fe47cbf82343a1efa13cc09ce87af
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"trim-newlines@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "trim-newlines@npm:3.0.0"
|
||||
@ -10805,7 +10866,7 @@ resolve@1.17.0:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"web3-utils@npm:^1.3.6":
|
||||
"web3-utils@npm:^1.3.4, web3-utils@npm:^1.3.6":
|
||||
version: 1.8.1
|
||||
resolution: "web3-utils@npm:1.8.1"
|
||||
dependencies:
|
||||
|
Loading…
x
Reference in New Issue
Block a user