Merge pull request #2 from PedroCailleret/p2pix-ts

:zap :SM perf improvement
This commit is contained in:
PedroCailleret 2022-11-23 19:55:53 -03:00 committed by GitHub
commit 2d3f5f7bf1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
91 changed files with 3862 additions and 3973 deletions

1
.gitignore vendored
View File

@ -6,7 +6,6 @@
!.yarn/sdks
!.yarn/versions
# **/artifacts
artifacts/@openzeppelin
artifacts/build-info
**/build
**/ref

View File

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

View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

@ -1,194 +0,0 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "IERC20",
"sourceName": "contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x",
"deployedBytecode": "0x",
"linkReferences": {},
"deployedLinkReferences": {}
}

View File

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

View File

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

View File

@ -1,10 +0,0 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "Context",
"sourceName": "contracts/@openzeppelin/contracts/utils/Context.sol",
"abi": [],
"bytecode": "0x",
"deployedBytecode": "0x",
"linkReferences": {},
"deployedLinkReferences": {}
}

View File

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

View File

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

View File

@ -1,7 +1,7 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "Counters",
"sourceName": "contracts/@openzeppelin/contracts/utils/Counters.sol",
"contractName": "DataTypes",
"sourceName": "contracts/DataTypes.sol",
"abi": [],
"bytecode": "0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",

View File

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

View File

@ -0,0 +1,225 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "EventAndErrors",
"sourceName": "contracts/EventAndErrors.sol",
"abi": [
{
"inputs": [],
"name": "AlreadyReleased",
"type": "error"
},
{
"inputs": [],
"name": "DepositAlreadyExists",
"type": "error"
},
{
"inputs": [],
"name": "InvalidDeposit",
"type": "error"
},
{
"inputs": [],
"name": "InvalidSigner",
"type": "error"
},
{
"inputs": [],
"name": "LoopOverflow",
"type": "error"
},
{
"inputs": [],
"name": "NotEnoughTokens",
"type": "error"
},
{
"inputs": [],
"name": "NotExpired",
"type": "error"
},
{
"inputs": [],
"name": "OnlySeller",
"type": "error"
},
{
"inputs": [],
"name": "TxAlreadyUsed",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "seller",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "DepositAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "seller",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
}
],
"name": "DepositClosed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "seller",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "DepositWithdrawn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "buyer",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "lockID",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "LockAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "buyer",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "lockId",
"type": "bytes32"
}
],
"name": "LockReleased",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "buyer",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "lockId",
"type": "bytes32"
}
],
"name": "LockReturned",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "PremiumsWithdrawn",
"type": "event"
}
],
"bytecode": "0x",
"deployedBytecode": "0x",
"linkReferences": {},
"deployedLinkReferences": {}
}

View File

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

View File

@ -1,7 +1,7 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "Ownable",
"sourceName": "contracts/@openzeppelin/contracts/access/Ownable.sol",
"contractName": "Owned",
"sourceName": "contracts/lib/auth/Owned.sol",
"abi": [
{
"anonymous": false,
@ -9,7 +9,7 @@
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"name": "user",
"type": "address"
},
{
@ -19,7 +19,7 @@
"type": "address"
}
],
"name": "OwnershipTransferred",
"name": "OwnerUpdated",
"type": "event"
},
{
@ -35,13 +35,6 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
@ -50,7 +43,7 @@
"type": "address"
}
],
"name": "transferOwnership",
"name": "setOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"

View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

@ -1,7 +1,7 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "IERC20Metadata",
"sourceName": "contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
"contractName": "ERC20",
"sourceName": "contracts/lib/tokens/ERC20.sol",
"abi": [
{
"anonymous": false,
@ -21,7 +21,7 @@
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"name": "amount",
"type": "uint256"
}
],
@ -46,23 +46,36 @@
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"name": "amount",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"name": "",
"type": "address"
}
],
@ -105,7 +118,7 @@
"inputs": [
{
"internalType": "address",
"name": "account",
"name": "",
"type": "address"
}
],
@ -146,6 +159,68 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "permit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",

View File

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

View File

@ -0,0 +1,16 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "Counters",
"sourceName": "contracts/lib/utils/Counters.sol",
"abi": [
{
"inputs": [],
"name": "DecOverflow",
"type": "error"
}
],
"bytecode": "0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
"linkReferences": {},
"deployedLinkReferences": {}
}

View File

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

View File

@ -0,0 +1,16 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "ReentrancyGuard",
"sourceName": "contracts/lib/utils/ReentrancyGuard.sol",
"abi": [
{
"inputs": [],
"name": "Reentrancy",
"type": "error"
}
],
"bytecode": "0x",
"deployedBytecode": "0x",
"linkReferences": {},
"deployedLinkReferences": {}
}

View File

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

View File

@ -0,0 +1,10 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "SafeTransferLib",
"sourceName": "contracts/lib/utils/SafeTransferLib.sol",
"abi": [],
"bytecode": "0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
"linkReferences": {},
"deployedLinkReferences": {}
}

View File

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

View File

@ -1,96 +0,0 @@
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(
owner() == _msgSender(),
"Ownable: caller is not the owner"
);
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(
address newOwner
) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(
address newOwner
) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}

View File

@ -1,479 +0,0 @@
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256))
private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name()
public
view
virtual
override
returns (string memory)
{
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol()
public
view
virtual
override
returns (string memory)
{
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals()
public
view
virtual
override
returns (uint8)
{
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply()
public
view
virtual
override
returns (uint256)
{
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(
address account
) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(
address to,
uint256 amount
) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(
address owner,
address spender
) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(
address spender,
uint256 amount
) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
address owner = _msgSender();
_approve(
owner,
spender,
allowance(owner, spender) + addedValue
);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(
owner,
spender,
currentAllowance - subtractedValue
);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(
from != address(0),
"ERC20: transfer from the zero address"
);
require(
to != address(0),
"ERC20: transfer to the zero address"
);
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(
fromBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(
address account,
uint256 amount
) internal virtual {
require(
account != address(0),
"ERC20: mint to the zero address"
);
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(
address account,
uint256 amount
) internal virtual {
require(
account != address(0),
"ERC20: burn from the zero address"
);
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(
accountBalance >= amount,
"ERC20: burn amount exceeds balance"
);
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(
owner != address(0),
"ERC20: approve from the zero address"
);
require(
spender != address(0),
"ERC20: approve to the zero address"
);
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(
currentAllowance >= amount,
"ERC20: insufficient allowance"
);
unchecked {
_approve(
owner,
spender,
currentAllowance - amount
);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}

View File

@ -1,101 +0,0 @@
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(
address indexed from,
address indexed to,
uint256 value
);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(
address account
) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(
address to,
uint256 amount
) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(
address owner,
address spender
) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(
address spender,
uint256 amount
) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}

View File

@ -1,28 +0,0 @@
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}

View File

@ -1,34 +0,0 @@
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender()
internal
view
virtual
returns (address)
{
return msg.sender;
}
function _msgData()
internal
view
virtual
returns (bytes calldata)
{
return msg.data;
}
}

View File

@ -1,45 +0,0 @@
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(
Counter storage counter
) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}

32
contracts/DataTypes.sol Normal file
View File

@ -0,0 +1,32 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
library DataTypes {
struct Deposit {
/// @dev Remaining tokens available.
uint256 remaining;
/// @dev Premium paid in ETH for priority.
uint256 premium;
/// @dev The PIX account for the seller receive transactions.
string pixTarget;
address seller;
/// @dev ERC20 stable token address.
address token;
/// @dev Could be invalidated by the seller.
bool valid;
}
struct Lock {
uint256 depositID;
/// @dev Amount to be paid for relayer.
uint256 relayerPremium;
/// @dev Amount to be tranfered via PIX.
uint256 amount;
/// @dev If not paid at this block will be expired.
uint256 expirationBlock;
/// @dev Where goes the tokens when validated.
address targetAddress;
/// @dev Relayer address that facilitated this transaction.
address relayerAddress;
}
}

View File

@ -0,0 +1,72 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
interface EventAndErrors {
/// Events
event DepositAdded(
address indexed seller,
uint256 depositID,
address token,
uint256 premium,
uint256 amount
);
event DepositClosed(
address indexed seller,
uint256 depositID
);
event DepositWithdrawn(
address indexed seller,
uint256 depositID,
uint256 amount
);
event LockAdded(
address indexed buyer,
bytes32 indexed lockID,
uint256 depositID,
uint256 amount
);
event LockReleased(
address indexed buyer,
bytes32 lockId
);
event LockReturned(
address indexed buyer,
bytes32 lockId
);
event PremiumsWithdrawn(
address owner,
uint256 amount
);
/// Errors
/// @dev Deposit already exist and it is still valid.
/// @dev 0xc44bd765
error DepositAlreadyExists();
/// @dev Only seller could call this function.
/// @dev 0x85d1f726
error OnlySeller();
/// @dev Lock not expired or already released.
/// @dev 0xd0404f85
error NotExpired();
/// @dev Loop bounds have overflowed.
/// @dev 0xdfb035c9
error LoopOverflow();
/// @dev Deposit not valid anymore.
/// @dev 0xb2e532de
error InvalidDeposit();
/// @dev Not enough token remaining on deposit.
/// @dev 0x22bbb43c
error NotEnoughTokens();
/// @dev Lock already released or returned.
/// @dev 0x63b4904e
error AlreadyReleased();
/// @dev Transaction already used to unlock payment
/// @dev 0xf490a6ea
error TxAlreadyUsed();
/// @dev Signer is not a valid signer.
/// @dev 0x815e1d64
error InvalidSigner();
}

View File

@ -0,0 +1,49 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;
/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event OwnerUpdated(
address indexed user,
address indexed newOwner
);
/*//////////////////////////////////////////////////////////////
OWNERSHIP STORAGE
//////////////////////////////////////////////////////////////*/
address public owner;
modifier onlyOwner() virtual {
require(msg.sender == owner, "UNAUTHORIZED");
_;
}
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(address _owner) {
owner = _owner;
emit OwnerUpdated(address(0), _owner);
}
/*//////////////////////////////////////////////////////////////
OWNERSHIP LOGIC
//////////////////////////////////////////////////////////////*/
function setOwner(
address newOwner
) public virtual onlyOwner {
owner = newOwner;
emit OwnerUpdated(msg.sender, newOwner);
}
}

View File

@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
import { ERC20 } from "../tokens/ERC20.sol";
contract MockToken is ERC20 {
constructor(uint256 supply) ERC20("MockBRL", "MBRL", 18) {
_mint(msg.sender, supply);
}
}

View File

@ -0,0 +1,250 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;
/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event Transfer(
address indexed from,
address indexed to,
uint256 amount
);
event Approval(
address indexed owner,
address indexed spender,
uint256 amount
);
/*//////////////////////////////////////////////////////////////
METADATA STORAGE
//////////////////////////////////////////////////////////////*/
string public name;
string public symbol;
uint8 public immutable decimals;
/*//////////////////////////////////////////////////////////////
ERC20 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256))
public allowance;
/*//////////////////////////////////////////////////////////////
EIP-2612 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 internal immutable INITIAL_CHAIN_ID;
bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;
mapping(address => uint256) public nonces;
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(
string memory _name,
string memory _symbol,
uint8 _decimals
) {
name = _name;
symbol = _symbol;
decimals = _decimals;
INITIAL_CHAIN_ID = block.chainid;
INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
}
/*//////////////////////////////////////////////////////////////
ERC20 LOGIC
//////////////////////////////////////////////////////////////*/
function approve(
address spender,
uint256 amount
) public virtual returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transfer(
address to,
uint256 amount
) public virtual returns (bool) {
balanceOf[msg.sender] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(msg.sender, to, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual returns (bool) {
uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.
if (allowed != type(uint256).max)
allowance[from][msg.sender] = allowed - amount;
balanceOf[from] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
return true;
}
/*//////////////////////////////////////////////////////////////
EIP-2612 LOGIC
//////////////////////////////////////////////////////////////*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public virtual {
require(
deadline >= block.timestamp,
"PERMIT_DEADLINE_EXPIRED"
);
// Unchecked because the only math done is incrementing
// the owner's nonce which cannot realistically overflow.
unchecked {
address recoveredAddress = ecrecover(
keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR(),
keccak256(
abi.encode(
keccak256(
"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
),
owner,
spender,
value,
nonces[owner]++,
deadline
)
)
)
),
v,
r,
s
);
require(
recoveredAddress != address(0) &&
recoveredAddress == owner,
"INVALID_SIGNER"
);
allowance[recoveredAddress][spender] = value;
}
emit Approval(owner, spender, value);
}
function DOMAIN_SEPARATOR()
public
view
virtual
returns (bytes32)
{
return
block.chainid == INITIAL_CHAIN_ID
? INITIAL_DOMAIN_SEPARATOR
: computeDomainSeparator();
}
function computeDomainSeparator()
internal
view
virtual
returns (bytes32)
{
return
keccak256(
abi.encode(
keccak256(
"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
),
keccak256(bytes(name)),
keccak256("1"),
block.chainid,
address(this)
)
);
}
/*//////////////////////////////////////////////////////////////
INTERNAL MINT/BURN LOGIC
//////////////////////////////////////////////////////////////*/
function _mint(
address to,
uint256 amount
) internal virtual {
totalSupply += amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function _burn(
address from,
uint256 amount
) internal virtual {
balanceOf[from] -= amount;
// Cannot underflow because a user's balance
// will never be larger than the total supply.
unchecked {
totalSupply -= amount;
}
emit Transfer(from, address(0), amount);
}
}

View File

@ -0,0 +1,52 @@
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.4;
/// @title Counters
/// @author buf0t9
/// @author Modified from OpenZeppelin Contracts
/// (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol)
/// @notice Provides counters that can only be incremented, decrementedor reset.
/// @dev Include with `using Counters for Counters.Counter;`
library Counters {
// solhint-disable no-inline-assembly
struct Counter {
/// @dev Interactions must be restricted to the library's function.
uint256 _val; // := 0
}
/// @dev 0xce3a3d37
error DecOverflow();
function current(
Counter storage counter
) internal view returns (uint256 _val) {
assembly {
_val := sload(counter.slot)
}
}
function increment(Counter storage counter) internal {
assembly {
let _val := sload(counter.slot)
sstore(counter.slot, add(_val, 0x01))
}
}
function decrement(Counter storage counter) internal {
assembly {
let _val := sload(counter.slot)
if or(iszero(_val), lt(_val, 0x00)) {
mstore(0x00, 0xce3a3d37)
revert(0x1c, 0x04)
}
sstore(counter.slot, sub(_val, 0x01))
}
}
function reset(Counter storage counter) internal {
assembly {
sstore(counter.slot, 0)
}
}
}

View File

@ -0,0 +1,34 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;
/// @notice Reentrancy protection for smart contracts.
/// @author z0r0z.eth
/// @author Modified from Seaport
/// (https://github.com/ProjectOpenSea/seaport/blob/main/contracts/lib/ReentrancyGuard.sol)
/// @author Modified from Solmate
/// (https://github.com/Rari-Capital/solmate/blob/main/src/utils/ReentrancyGuard.sol)
abstract contract ReentrancyGuard {
error Reentrancy();
uint256 private guard = 1;
modifier nonReentrant() virtual {
setReentrancyGuard();
_;
clearReentrancyGuard();
}
/// @dev Check guard sentinel value and set it.
function setReentrancyGuard() internal virtual {
if (guard == 2) revert Reentrancy();
guard = 2;
}
/// @dev Unset sentinel value.
function clearReentrancyGuard() internal virtual {
guard = 1;
}
}

View File

@ -0,0 +1,159 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;
import { ERC20 } from "../tokens/ERC20.sol";
/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)
/// @dev Caution! This library won't check that a token has code, responsibility is delegated to the caller.
library SafeTransferLib {
/*//////////////////////////////////////////////////////////////
ETH OPERATIONS
//////////////////////////////////////////////////////////////*/
function safeTransferETH(
address to,
uint256 amount
) internal {
bool success;
assembly {
// Transfer the ETH and store if it succeeded or not.
success := call(gas(), to, amount, 0, 0, 0, 0)
}
require(success, "ETH_TRANSFER_FAILED");
}
/*//////////////////////////////////////////////////////////////
ERC20 OPERATIONS
//////////////////////////////////////////////////////////////*/
function safeTransferFrom(
ERC20 token,
address from,
address to,
uint256 amount
) internal {
bool success;
assembly {
// We'll write our calldata to this slot below, but restore it later.
let memPointer := mload(0x40)
// Write the abi-encoded calldata into memory, beginning with the function selector.
mstore(
0,
0x23b872dd00000000000000000000000000000000000000000000000000000000
)
mstore(4, from) // Append the "from" argument.
mstore(36, to) // Append the "to" argument.
mstore(68, amount) // Append the "amount" argument.
success := and(
// Set success to whether the call reverted, if not we check it either
// returned exactly 1 (can't just be non-zero data), or had no return data.
or(
and(
eq(mload(0), 1),
gt(returndatasize(), 31)
),
iszero(returndatasize())
),
// We use 100 because that's the total length of our calldata (4 + 32 * 3)
// Counterintuitively, this call() must be positioned after the or() in the
// surrounding and() because and() evaluates its arguments from right to left.
call(gas(), token, 0, 0, 100, 0, 32)
)
mstore(0x60, 0) // Restore the zero slot to zero.
mstore(0x40, memPointer) // Restore the memPointer.
}
require(success, "TRANSFER_FROM_FAILED");
}
function safeTransfer(
ERC20 token,
address to,
uint256 amount
) internal {
bool success;
assembly {
// We'll write our calldata to this slot below, but restore it later.
let memPointer := mload(0x40)
// Write the abi-encoded calldata into memory, beginning with the function selector.
mstore(
0,
0xa9059cbb00000000000000000000000000000000000000000000000000000000
)
mstore(4, to) // Append the "to" argument.
mstore(36, amount) // Append the "amount" argument.
success := and(
// Set success to whether the call reverted, if not we check it either
// returned exactly 1 (can't just be non-zero data), or had no return data.
or(
and(
eq(mload(0), 1),
gt(returndatasize(), 31)
),
iszero(returndatasize())
),
// We use 68 because that's the total length of our calldata (4 + 32 * 2)
// Counterintuitively, this call() must be positioned after the or() in the
// surrounding and() because and() evaluates its arguments from right to left.
call(gas(), token, 0, 0, 68, 0, 32)
)
mstore(0x60, 0) // Restore the zero slot to zero.
mstore(0x40, memPointer) // Restore the memPointer.
}
require(success, "TRANSFER_FAILED");
}
function safeApprove(
ERC20 token,
address to,
uint256 amount
) internal {
bool success;
assembly {
// We'll write our calldata to this slot below, but restore it later.
let memPointer := mload(0x40)
// Write the abi-encoded calldata into memory, beginning with the function selector.
mstore(
0,
0x095ea7b300000000000000000000000000000000000000000000000000000000
)
mstore(4, to) // Append the "to" argument.
mstore(36, amount) // Append the "amount" argument.
success := and(
// Set success to whether the call reverted, if not we check it either
// returned exactly 1 (can't just be non-zero data), or had no return data.
or(
and(
eq(mload(0), 1),
gt(returndatasize(), 31)
),
iszero(returndatasize())
),
// We use 68 because that's the total length of our calldata (4 + 32 * 2)
// Counterintuitively, this call() must be positioned after the or() in the
// surrounding and() because and() evaluates its arguments from right to left.
call(gas(), token, 0, 0, 68, 0, 32)
)
mstore(0x60, 0) // Restore the zero slot to zero.
mstore(0x40, memPointer) // Restore the memPointer.
}
require(success, "APPROVE_FAILED");
}
}

View File

@ -1,10 +0,0 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "./@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MockToken is ERC20 {
constructor(uint256 supply) ERC20("MockBRL", "MBRL") {
_mint(msg.sender, supply);
}
}

View File

@ -1,112 +1,108 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
pragma solidity 0.8.9;
import "./@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./@openzeppelin/contracts/access/Ownable.sol";
import "./@openzeppelin/contracts/utils/Counters.sol";
/// ______ __
/// .-----.|__ |.-----.|__|.--.--.
/// | _ || __|| _ || ||_ _|
/// | __||______|| __||__||__.__|
/// |__| |__|
///
import { Owned } from "./lib/auth/Owned.sol";
import { Counters } from "./lib/utils/Counters.sol";
import { ERC20, SafeTransferLib } from "./lib/utils/SafeTransferLib.sol";
import { ReentrancyGuard } from "./lib/utils/ReentrancyGuard.sol";
import { EventAndErrors } from "./EventAndErrors.sol";
import { DataTypes as DT } from "./DataTypes.sol";
contract P2PIX is
EventAndErrors,
Owned(msg.sender),
ReentrancyGuard
{
// solhint-disable use-forbidden-name
// solhint-disable no-inline-assembly
contract P2PIX is Ownable {
using Counters for Counters.Counter;
using DT for DT.Deposit;
using DT for DT.Lock;
event DepositAdded(
address indexed seller,
uint256 depositID,
address token,
uint256 premium,
uint256 amount
);
event DepositClosed(
address indexed seller,
uint256 depositID
);
event DepositWithdrawn(
address indexed seller,
uint256 depositID,
uint256 amount
);
event LockAdded(
address indexed buyer,
bytes32 indexed lockID,
uint256 depositID,
uint256 amount
);
event LockReleased(address indexed buyer, bytes32 lockId);
event LockReturned(address indexed buyer, bytes32 lockId);
// Events
event PremiumsWithdrawn(address owner, uint256 amount);
struct Deposit {
address seller;
address token; // ERC20 stable token address
uint256 remaining; // Remaining tokens available
uint256 premium; // Premium paid in ETH for priority
bool valid; // Could be invalidated by the seller
string pixTarget; // The PIX account for the seller receive transactions
}
struct Lock {
uint256 depositID;
address targetAddress; // Where goes the tokens when validated
address relayerAddress; // Relayer address that facilitated this transaction
uint256 relayerPremium; // Amount to be paid for relayer
uint256 amount; // Amount to be tranfered via PIX
uint256 expirationBlock; // If not paid at this block will be expired
}
/// Storage
Counters.Counter public depositCount;
// Default blocks that lock will hold tokens
/// @dev Default blocks that lock will hold tokens.
uint256 public defaultLockBlocks;
// List of valid Bacen signature addresses
mapping(address => bool) public validBacenSigners;
// Seller list of deposits
mapping(uint256 => Deposit) mapDeposits;
// List of Locks
mapping(bytes32 => Lock) mapLocks;
// List of Pix transactions already signed
mapping(bytes32 => bool) usedTransactions;
modifier onlySeller(uint256 depositID) {
require(
mapDeposits[depositID].seller == msg.sender,
"P2PIX: Only seller could call this function."
);
_;
}
/// @dev List of valid Bacen signature addresses
mapping(uint256 => bool) public validBacenSigners;
/// @dev Seller list of deposits
mapping(uint256 => DT.Deposit) public mapDeposits;
/// @dev List of Locks.
mapping(bytes32 => DT.Lock) public mapLocks;
/// @dev List of Pix transactions already signed.
mapping(bytes32 => bool) private usedTransactions;
/// Constructor
constructor(
uint256 defaultBlocks,
address[] memory validSigners
) Ownable() {
defaultLockBlocks = defaultBlocks;
for (uint8 i = 0; i < validSigners.length; i++) {
validBacenSigners[validSigners[i]] = true;
) payable {
assembly {
sstore(defaultLockBlocks.slot, defaultBlocks)
}
unchecked {
uint256 i;
uint256 len = validSigners.length;
for (i; i < len; ) {
uint256 key = _castAddrToKey(validSigners[i]);
validBacenSigners[key] = true;
++i;
}
}
}
/// Public FX
// Vendedor precisa mandar token para o smart contract + chave PIX destino. Retorna um DepositID.
function deposit(
address token,
uint256 amount,
string calldata pixTarget
) public payable returns (uint256 depositID) {
depositID = depositCount.current();
require(
!mapDeposits[depositID].valid,
"P2PIX: Deposit already exist and it is still valid"
);
IERC20 t = IERC20(token);
t.transferFrom(msg.sender, address(this), amount);
Deposit memory d = Deposit(
msg.sender,
token,
amount,
msg.value,
true,
pixTarget
);
)
public
payable
returns (uint256 depositID)
{
(depositID) = _encodeDepositID();
ERC20 t = ERC20(token);
DT.Deposit memory d =
DT.Deposit({
remaining: amount,
premium: msg.value,
pixTarget: pixTarget,
seller: msg.sender,
token: token,
valid: true
});
setReentrancyGuard();
mapDeposits[depositID] = d;
depositCount.increment();
SafeTransferLib.safeTransferFrom(
t,
msg.sender,
address(this),
amount
);
clearReentrancyGuard();
emit DepositAdded(
msg.sender,
depositID,
@ -116,10 +112,12 @@ contract P2PIX is Ownable {
);
}
// Vendedor pode invalidar da ordem de venda impedindo novos locks na mesma (isso não afeta nenhum lock que esteja ativo).
// Vendedor pode invalidar da ordem de venda impedindo novos
// locks na mesma (isso não afeta nenhum lock que esteja ativo).
function cancelDeposit(
uint256 depositID
) public onlySeller(depositID) {
) public {
_onlySeller(depositID);
mapDeposits[depositID].valid = false;
emit DepositClosed(
mapDeposits[depositID].seller,
@ -134,64 +132,80 @@ contract P2PIX is Ownable {
// Essa etapa pode ser feita pelo vendedor conjuntamente com a parte 1.
// Retorna um LockID.
function lock(
uint256 depositID,
address targetAddress,
address relayerAddress,
uint256 relayerPremium,
uint256 amount,
uint256 _depositID,
address _targetAddress,
address _relayerAddress,
uint256 _relayerPremium,
uint256 _amount,
bytes32[] calldata expiredLocks
) public returns (bytes32 lockID) {
)
public
nonReentrant
returns (bytes32 lockID)
{
unlockExpired(expiredLocks);
Deposit storage d = mapDeposits[depositID];
require(d.valid, "P2PIX: Deposit not valid anymore");
require(
d.remaining >= amount,
"P2PIX: Not enough token remaining on deposit"
);
lockID = keccak256(
abi.encodePacked(depositID, amount, targetAddress)
);
require(
mapLocks[lockID].expirationBlock < block.number,
"P2PIX: Another lock with same ID is not expired yet"
);
Lock memory l = Lock(
depositID,
targetAddress,
relayerAddress,
relayerPremium,
amount,
block.number + defaultLockBlocks
DT.Deposit storage d =
mapDeposits[_depositID];
if(!d.valid)
revert InvalidDeposit();
if(d.remaining < _amount)
revert NotEnoughTokens();
(lockID) =
_encodeLockID(
_depositID,
_amount,
_targetAddress
);
DT.Lock memory l =
DT.Lock
({
depositID: _depositID,
relayerPremium: _relayerPremium,
amount: _amount,
expirationBlock: (block.number + defaultLockBlocks),
targetAddress: _targetAddress,
relayerAddress: _relayerAddress
});
mapLocks[lockID] = l;
d.remaining -= amount;
d.remaining -= _amount;
emit LockAdded(
targetAddress,
_targetAddress,
lockID,
depositID,
amount
_depositID,
_amount
);
}
// Relayer interage com o smart contract, colocando no calldata o comprovante do PIX realizado.
// Smart contract valida o comprovante, manda os tokens para o endereço do pagador, e reembolsa o custo do gás para o endereço do relayer especificado na parte (2).
// Smart contract valida o comprovante, manda os tokens para o endereço do pagador,
// e reembolsa o custo do gás para o endereço do relayer especificado na parte (2).
function release(
bytes32 lockID,
uint256 pixTimestamp,
bytes32 r,
bytes32 s,
uint8 v
) public {
)
public
nonReentrant
{
// TODO **Prevenir que um Pix não relacionado ao APP seja usado pois tem o mesmo destino
Lock storage l = mapLocks[lockID];
require(
l.expirationBlock > block.number && l.amount > 0,
"P2PIX: Lock already released or returned"
);
Deposit storage d = mapDeposits[l.depositID];
DT.Lock storage l = mapLocks[lockID];
if(
l.expirationBlock <= block.number
&& l.amount <= 0
) revert
AlreadyReleased();
DT.Deposit storage d = mapDeposits[l.depositID];
bytes32 message = keccak256(
abi.encodePacked(
mapDeposits[l.depositID].pixTarget,
d.pixTarget,
l.amount,
pixTimestamp
)
@ -202,43 +216,94 @@ contract P2PIX is Ownable {
message
)
);
require(
!usedTransactions[message],
"P2PIX: Transaction already used to unlock payment"
);
address signer = ecrecover(messageDigest, v, r, s);
require(
validBacenSigners[signer],
"P2PIX: Signer is not a valid signer"
);
IERC20 t = IERC20(d.token);
t.transfer(
l.targetAddress,
l.amount - l.relayerPremium
);
if (l.relayerPremium > 0)
t.transfer(l.relayerAddress, l.relayerPremium);
if(
usedTransactions[message]
== true
) revert
TxAlreadyUsed();
uint256 signer = _castAddrToKey(
ecrecover(
messageDigest,
v,
r,
s
));
if(!validBacenSigners[signer])
revert InvalidSigner();
ERC20 t = ERC20(d.token);
// We cache values before zeroing them out.
uint256 totalAmount = (l.amount - l.relayerPremium);
l.amount = 0;
l.expirationBlock = 0;
usedTransactions[message] = true;
emit LockReleased(l.targetAddress, lockID);
SafeTransferLib.safeTransfer(
t,
l.targetAddress,
totalAmount
);
if (l.relayerPremium != 0) {
SafeTransferLib.safeTransfer(
t,
l.relayerAddress,
l.relayerPremium
);
}
emit LockReleased(
l.targetAddress,
lockID
);
}
// Unlock expired locks
function unlockExpired(
bytes32[] calldata lockIDs
) public {
uint256 locksSize = lockIDs.length;
for (uint16 i = 0; i < locksSize; i++) {
Lock storage l = mapLocks[lockIDs[i]];
require(
l.expirationBlock < block.number &&
l.amount > 0,
"P2PIX: Lock not expired or already released"
);
mapDeposits[l.depositID].remaining += l.amount;
uint256 i;
uint256 locksSize =
lockIDs.length;
for (i; i < locksSize;)
{
DT.Lock storage l = mapLocks[lockIDs[i]];
_notExpired(l);
mapDeposits[l.depositID].remaining
+= l.amount;
l.amount = 0;
emit LockReturned(l.targetAddress, lockIDs[i]);
emit LockReturned(
l.targetAddress,
lockIDs[i]
);
unchecked {
++i;
}
}
assembly {
if lt(i, locksSize) {
// LoopOverflow()
mstore(
0x00,
0xdfb035c9
)
revert(
0x1c,
0x04
)
}
}
}
@ -246,22 +311,145 @@ contract P2PIX is Ownable {
function withdraw(
uint256 depositID,
bytes32[] calldata expiredLocks
) public onlySeller(depositID) {
)
public
nonReentrant
{
_onlySeller(depositID);
unlockExpired(expiredLocks);
Deposit storage d = mapDeposits[depositID];
if (d.valid) cancelDeposit(depositID);
IERC20 token = IERC20(d.token);
DT.Deposit storage d =
mapDeposits[depositID];
if (d.valid == true) {
cancelDeposit(depositID);
}
ERC20 token = ERC20(d.token);
// Withdraw remaining tokens from mapDeposit[depositID]
token.transfer(d.seller, d.remaining);
uint256 amount = d.remaining;
d.remaining = 0;
emit DepositWithdrawn(msg.sender, depositID, amount);
// safeTransfer tokens to seller
SafeTransferLib.safeTransfer(
token,
d.seller,
amount
);
emit DepositWithdrawn(
msg.sender,
depositID,
amount
);
}
/// Owner Only
// O dono do contrato pode sacar os premiums pagos
function withdrawPremiums() external onlyOwner {
uint256 balance = address(this).balance;
payable(msg.sender).transfer(balance);
emit PremiumsWithdrawn(msg.sender, balance);
uint256 balance =
address(this).balance;
SafeTransferLib.safeTransferETH(
msg.sender,
balance
);
emit PremiumsWithdrawn(
msg.sender,
balance
);
}
/// Helper FX
function _onlySeller(uint256 _depositID)
private
view
{
if (
mapDeposits[_depositID].seller
!= msg.sender
) revert
OnlySeller();
}
function _notExpired(DT.Lock storage _l)
private
view
{
// Custom Error Solidity Impl
if
(
_l.expirationBlock >= block.number ||
_l.amount <= 0
) revert
NotExpired();
// Custom Error Yul Impl
// assembly {
// if iszero(iszero(
// or(
// or(
// lt(number(), sload(add(_l.slot, 3))),
// eq(sload(add(_l.slot, 3)), number())
// ),
// iszero(sload(add(_l.slot, 2)))
// )))
// {
// mstore(0x00, 0xd0404f85)
// revert(0x1c, 0x04)
// }
// }
// Require Error Solidity Impl
// require(
// _l.expirationBlock < block.number &&
// _l.amount > 0,
// "P2PIX: Lock not expired or already released"
// );
}
function _encodeDepositID()
internal
view
returns (uint256 _depositID)
{
(_depositID) = depositCount.current();
if (
mapDeposits[_depositID].valid
== true
) revert
DepositAlreadyExists();
}
function _encodeLockID(
uint256 _depositID,
uint256 _amount,
address _targetAddress)
private
view
returns (bytes32 _lockID)
{
_lockID = keccak256(
abi.encodePacked(_depositID, _amount, _targetAddress)
);
if (
mapLocks[_lockID].expirationBlock
>= block.number
) revert
NotExpired();
}
function _castAddrToKey(address _addr)
public
pure
returns (uint256 _key)
{
_key = uint256(
uint160(
address(
_addr
))) << 12;
}
}

View File

@ -1,7 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type * as access from "./access";
export type { access };
import type * as token from "./token";
export type { token };

View File

@ -1,342 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
BaseContract,
BigNumber,
BigNumberish,
BytesLike,
CallOverrides,
ContractTransaction,
Overrides,
PopulatedTransaction,
Signer,
utils,
} from "ethers";
import type {
FunctionFragment,
Result,
EventFragment,
} from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type {
TypedEventFilter,
TypedEvent,
TypedListener,
OnEvent,
PromiseOrValue,
} from "../../../../common";
export interface IERC20Interface extends utils.Interface {
functions: {
"allowance(address,address)": FunctionFragment;
"approve(address,uint256)": FunctionFragment;
"balanceOf(address)": FunctionFragment;
"totalSupply()": FunctionFragment;
"transfer(address,uint256)": FunctionFragment;
"transferFrom(address,address,uint256)": FunctionFragment;
};
getFunction(
nameOrSignatureOrTopic:
| "allowance"
| "approve"
| "balanceOf"
| "totalSupply"
| "transfer"
| "transferFrom"
): FunctionFragment;
encodeFunctionData(
functionFragment: "allowance",
values: [PromiseOrValue<string>, PromiseOrValue<string>]
): string;
encodeFunctionData(
functionFragment: "approve",
values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
): string;
encodeFunctionData(
functionFragment: "balanceOf",
values: [PromiseOrValue<string>]
): string;
encodeFunctionData(
functionFragment: "totalSupply",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "transfer",
values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
): string;
encodeFunctionData(
functionFragment: "transferFrom",
values: [
PromiseOrValue<string>,
PromiseOrValue<string>,
PromiseOrValue<BigNumberish>
]
): string;
decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "totalSupply",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "transferFrom",
data: BytesLike
): Result;
events: {
"Approval(address,address,uint256)": EventFragment;
"Transfer(address,address,uint256)": EventFragment;
};
getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment;
getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment;
}
export interface ApprovalEventObject {
owner: string;
spender: string;
value: BigNumber;
}
export type ApprovalEvent = TypedEvent<
[string, string, BigNumber],
ApprovalEventObject
>;
export type ApprovalEventFilter = TypedEventFilter<ApprovalEvent>;
export interface TransferEventObject {
from: string;
to: string;
value: BigNumber;
}
export type TransferEvent = TypedEvent<
[string, string, BigNumber],
TransferEventObject
>;
export type TransferEventFilter = TypedEventFilter<TransferEvent>;
export interface IERC20 extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
interface: IERC20Interface;
queryFilter<TEvent extends TypedEvent>(
event: TypedEventFilter<TEvent>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TEvent>>;
listeners<TEvent extends TypedEvent>(
eventFilter?: TypedEventFilter<TEvent>
): Array<TypedListener<TEvent>>;
listeners(eventName?: string): Array<Listener>;
removeAllListeners<TEvent extends TypedEvent>(
eventFilter: TypedEventFilter<TEvent>
): this;
removeAllListeners(eventName?: string): this;
off: OnEvent<this>;
on: OnEvent<this>;
once: OnEvent<this>;
removeListener: OnEvent<this>;
functions: {
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber]>;
approve(
spender: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
balanceOf(
account: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber]>;
totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
transfer(
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
transferFrom(
from: PromiseOrValue<string>,
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
};
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
balanceOf(
account: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
transferFrom(
from: PromiseOrValue<string>,
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
callStatic: {
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
balanceOf(
account: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
transferFrom(
from: PromiseOrValue<string>,
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
};
filters: {
"Approval(address,address,uint256)"(
owner?: PromiseOrValue<string> | null,
spender?: PromiseOrValue<string> | null,
value?: null
): ApprovalEventFilter;
Approval(
owner?: PromiseOrValue<string> | null,
spender?: PromiseOrValue<string> | null,
value?: null
): ApprovalEventFilter;
"Transfer(address,address,uint256)"(
from?: PromiseOrValue<string> | null,
to?: PromiseOrValue<string> | null,
value?: null
): TransferEventFilter;
Transfer(
from?: PromiseOrValue<string> | null,
to?: PromiseOrValue<string> | null,
value?: null
): TransferEventFilter;
};
estimateGas: {
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
balanceOf(
account: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
transferFrom(
from: PromiseOrValue<string>,
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
};
populateTransaction: {
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
approve(
spender: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
balanceOf(
account: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
transfer(
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
transferFrom(
from: PromiseOrValue<string>,
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
};
}

View File

@ -1,384 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
BaseContract,
BigNumber,
BigNumberish,
BytesLike,
CallOverrides,
ContractTransaction,
Overrides,
PopulatedTransaction,
Signer,
utils,
} from "ethers";
import type {
FunctionFragment,
Result,
EventFragment,
} from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type {
TypedEventFilter,
TypedEvent,
TypedListener,
OnEvent,
PromiseOrValue,
} from "../../../../../common";
export interface IERC20MetadataInterface extends utils.Interface {
functions: {
"allowance(address,address)": FunctionFragment;
"approve(address,uint256)": FunctionFragment;
"balanceOf(address)": FunctionFragment;
"decimals()": FunctionFragment;
"name()": FunctionFragment;
"symbol()": FunctionFragment;
"totalSupply()": FunctionFragment;
"transfer(address,uint256)": FunctionFragment;
"transferFrom(address,address,uint256)": FunctionFragment;
};
getFunction(
nameOrSignatureOrTopic:
| "allowance"
| "approve"
| "balanceOf"
| "decimals"
| "name"
| "symbol"
| "totalSupply"
| "transfer"
| "transferFrom"
): FunctionFragment;
encodeFunctionData(
functionFragment: "allowance",
values: [PromiseOrValue<string>, PromiseOrValue<string>]
): string;
encodeFunctionData(
functionFragment: "approve",
values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
): string;
encodeFunctionData(
functionFragment: "balanceOf",
values: [PromiseOrValue<string>]
): string;
encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
encodeFunctionData(functionFragment: "name", values?: undefined): string;
encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
encodeFunctionData(
functionFragment: "totalSupply",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "transfer",
values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
): string;
encodeFunctionData(
functionFragment: "transferFrom",
values: [
PromiseOrValue<string>,
PromiseOrValue<string>,
PromiseOrValue<BigNumberish>
]
): string;
decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "totalSupply",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "transferFrom",
data: BytesLike
): Result;
events: {
"Approval(address,address,uint256)": EventFragment;
"Transfer(address,address,uint256)": EventFragment;
};
getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment;
getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment;
}
export interface ApprovalEventObject {
owner: string;
spender: string;
value: BigNumber;
}
export type ApprovalEvent = TypedEvent<
[string, string, BigNumber],
ApprovalEventObject
>;
export type ApprovalEventFilter = TypedEventFilter<ApprovalEvent>;
export interface TransferEventObject {
from: string;
to: string;
value: BigNumber;
}
export type TransferEvent = TypedEvent<
[string, string, BigNumber],
TransferEventObject
>;
export type TransferEventFilter = TypedEventFilter<TransferEvent>;
export interface IERC20Metadata extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
interface: IERC20MetadataInterface;
queryFilter<TEvent extends TypedEvent>(
event: TypedEventFilter<TEvent>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TEvent>>;
listeners<TEvent extends TypedEvent>(
eventFilter?: TypedEventFilter<TEvent>
): Array<TypedListener<TEvent>>;
listeners(eventName?: string): Array<Listener>;
removeAllListeners<TEvent extends TypedEvent>(
eventFilter: TypedEventFilter<TEvent>
): this;
removeAllListeners(eventName?: string): this;
off: OnEvent<this>;
on: OnEvent<this>;
once: OnEvent<this>;
removeListener: OnEvent<this>;
functions: {
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber]>;
approve(
spender: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
balanceOf(
account: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber]>;
decimals(overrides?: CallOverrides): Promise<[number]>;
name(overrides?: CallOverrides): Promise<[string]>;
symbol(overrides?: CallOverrides): Promise<[string]>;
totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
transfer(
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
transferFrom(
from: PromiseOrValue<string>,
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
};
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
balanceOf(
account: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<number>;
name(overrides?: CallOverrides): Promise<string>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
transferFrom(
from: PromiseOrValue<string>,
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
callStatic: {
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
balanceOf(
account: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<number>;
name(overrides?: CallOverrides): Promise<string>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
transferFrom(
from: PromiseOrValue<string>,
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
};
filters: {
"Approval(address,address,uint256)"(
owner?: PromiseOrValue<string> | null,
spender?: PromiseOrValue<string> | null,
value?: null
): ApprovalEventFilter;
Approval(
owner?: PromiseOrValue<string> | null,
spender?: PromiseOrValue<string> | null,
value?: null
): ApprovalEventFilter;
"Transfer(address,address,uint256)"(
from?: PromiseOrValue<string> | null,
to?: PromiseOrValue<string> | null,
value?: null
): TransferEventFilter;
Transfer(
from?: PromiseOrValue<string> | null,
to?: PromiseOrValue<string> | null,
value?: null
): TransferEventFilter;
};
estimateGas: {
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
balanceOf(
account: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<BigNumber>;
name(overrides?: CallOverrides): Promise<BigNumber>;
symbol(overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
transferFrom(
from: PromiseOrValue<string>,
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
};
populateTransaction: {
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
approve(
spender: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
balanceOf(
account: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
decimals(overrides?: CallOverrides): Promise<PopulatedTransaction>;
name(overrides?: CallOverrides): Promise<PopulatedTransaction>;
symbol(overrides?: CallOverrides): Promise<PopulatedTransaction>;
totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
transfer(
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
transferFrom(
from: PromiseOrValue<string>,
to: PromiseOrValue<string>,
amount: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
};
}

View File

@ -1,4 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export type { IERC20Metadata } from "./IERC20Metadata";

View File

@ -1,7 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type * as extensions from "./extensions";
export type { extensions };
export type { ERC20 } from "./ERC20";
export type { IERC20 } from "./IERC20";

View File

@ -1,5 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type * as erc20 from "./ERC20";
export type { erc20 };

232
src/types/EventAndErrors.ts Normal file
View File

@ -0,0 +1,232 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type { BaseContract, BigNumber, BytesLike, Signer, utils } from "ethers";
import type { EventFragment } from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type {
TypedEventFilter,
TypedEvent,
TypedListener,
OnEvent,
PromiseOrValue,
} from "./common";
export interface EventAndErrorsInterface extends utils.Interface {
functions: {};
events: {
"DepositAdded(address,uint256,address,uint256,uint256)": EventFragment;
"DepositClosed(address,uint256)": EventFragment;
"DepositWithdrawn(address,uint256,uint256)": EventFragment;
"LockAdded(address,bytes32,uint256,uint256)": EventFragment;
"LockReleased(address,bytes32)": EventFragment;
"LockReturned(address,bytes32)": EventFragment;
"PremiumsWithdrawn(address,uint256)": EventFragment;
};
getEvent(nameOrSignatureOrTopic: "DepositAdded"): EventFragment;
getEvent(nameOrSignatureOrTopic: "DepositClosed"): EventFragment;
getEvent(nameOrSignatureOrTopic: "DepositWithdrawn"): EventFragment;
getEvent(nameOrSignatureOrTopic: "LockAdded"): EventFragment;
getEvent(nameOrSignatureOrTopic: "LockReleased"): EventFragment;
getEvent(nameOrSignatureOrTopic: "LockReturned"): EventFragment;
getEvent(nameOrSignatureOrTopic: "PremiumsWithdrawn"): EventFragment;
}
export interface DepositAddedEventObject {
seller: string;
depositID: BigNumber;
token: string;
premium: BigNumber;
amount: BigNumber;
}
export type DepositAddedEvent = TypedEvent<
[string, BigNumber, string, BigNumber, BigNumber],
DepositAddedEventObject
>;
export type DepositAddedEventFilter = TypedEventFilter<DepositAddedEvent>;
export interface DepositClosedEventObject {
seller: string;
depositID: BigNumber;
}
export type DepositClosedEvent = TypedEvent<
[string, BigNumber],
DepositClosedEventObject
>;
export type DepositClosedEventFilter = TypedEventFilter<DepositClosedEvent>;
export interface DepositWithdrawnEventObject {
seller: string;
depositID: BigNumber;
amount: BigNumber;
}
export type DepositWithdrawnEvent = TypedEvent<
[string, BigNumber, BigNumber],
DepositWithdrawnEventObject
>;
export type DepositWithdrawnEventFilter =
TypedEventFilter<DepositWithdrawnEvent>;
export interface LockAddedEventObject {
buyer: string;
lockID: string;
depositID: BigNumber;
amount: BigNumber;
}
export type LockAddedEvent = TypedEvent<
[string, string, BigNumber, BigNumber],
LockAddedEventObject
>;
export type LockAddedEventFilter = TypedEventFilter<LockAddedEvent>;
export interface LockReleasedEventObject {
buyer: string;
lockId: string;
}
export type LockReleasedEvent = TypedEvent<
[string, string],
LockReleasedEventObject
>;
export type LockReleasedEventFilter = TypedEventFilter<LockReleasedEvent>;
export interface LockReturnedEventObject {
buyer: string;
lockId: string;
}
export type LockReturnedEvent = TypedEvent<
[string, string],
LockReturnedEventObject
>;
export type LockReturnedEventFilter = TypedEventFilter<LockReturnedEvent>;
export interface PremiumsWithdrawnEventObject {
owner: string;
amount: BigNumber;
}
export type PremiumsWithdrawnEvent = TypedEvent<
[string, BigNumber],
PremiumsWithdrawnEventObject
>;
export type PremiumsWithdrawnEventFilter =
TypedEventFilter<PremiumsWithdrawnEvent>;
export interface EventAndErrors extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
interface: EventAndErrorsInterface;
queryFilter<TEvent extends TypedEvent>(
event: TypedEventFilter<TEvent>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TEvent>>;
listeners<TEvent extends TypedEvent>(
eventFilter?: TypedEventFilter<TEvent>
): Array<TypedListener<TEvent>>;
listeners(eventName?: string): Array<Listener>;
removeAllListeners<TEvent extends TypedEvent>(
eventFilter: TypedEventFilter<TEvent>
): this;
removeAllListeners(eventName?: string): this;
off: OnEvent<this>;
on: OnEvent<this>;
once: OnEvent<this>;
removeListener: OnEvent<this>;
functions: {};
callStatic: {};
filters: {
"DepositAdded(address,uint256,address,uint256,uint256)"(
seller?: PromiseOrValue<string> | null,
depositID?: null,
token?: null,
premium?: null,
amount?: null
): DepositAddedEventFilter;
DepositAdded(
seller?: PromiseOrValue<string> | null,
depositID?: null,
token?: null,
premium?: null,
amount?: null
): DepositAddedEventFilter;
"DepositClosed(address,uint256)"(
seller?: PromiseOrValue<string> | null,
depositID?: null
): DepositClosedEventFilter;
DepositClosed(
seller?: PromiseOrValue<string> | null,
depositID?: null
): DepositClosedEventFilter;
"DepositWithdrawn(address,uint256,uint256)"(
seller?: PromiseOrValue<string> | null,
depositID?: null,
amount?: null
): DepositWithdrawnEventFilter;
DepositWithdrawn(
seller?: PromiseOrValue<string> | null,
depositID?: null,
amount?: null
): DepositWithdrawnEventFilter;
"LockAdded(address,bytes32,uint256,uint256)"(
buyer?: PromiseOrValue<string> | null,
lockID?: PromiseOrValue<BytesLike> | null,
depositID?: null,
amount?: null
): LockAddedEventFilter;
LockAdded(
buyer?: PromiseOrValue<string> | null,
lockID?: PromiseOrValue<BytesLike> | null,
depositID?: null,
amount?: null
): LockAddedEventFilter;
"LockReleased(address,bytes32)"(
buyer?: PromiseOrValue<string> | null,
lockId?: null
): LockReleasedEventFilter;
LockReleased(
buyer?: PromiseOrValue<string> | null,
lockId?: null
): LockReleasedEventFilter;
"LockReturned(address,bytes32)"(
buyer?: PromiseOrValue<string> | null,
lockId?: null
): LockReturnedEventFilter;
LockReturned(
buyer?: PromiseOrValue<string> | null,
lockId?: null
): LockReturnedEventFilter;
"PremiumsWithdrawn(address,uint256)"(
owner?: null,
amount?: null
): PremiumsWithdrawnEventFilter;
PremiumsWithdrawn(
owner?: null,
amount?: null
): PremiumsWithdrawnEventFilter;
};
estimateGas: {};
populateTransaction: {};
}

View File

@ -1,4 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export { Ownable__factory } from "./Ownable__factory";

View File

@ -1,5 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export * as access from "./access";
export * as token from "./token";

File diff suppressed because one or more lines are too long

View File

@ -1,206 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Contract, Signer, utils } from "ethers";
import type { Provider } from "@ethersproject/providers";
import type {
IERC20,
IERC20Interface,
} from "../../../../../@openzeppelin/contracts/token/ERC20/IERC20";
const _abi = [
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "owner",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "spender",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "value",
type: "uint256",
},
],
name: "Approval",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "from",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "to",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "value",
type: "uint256",
},
],
name: "Transfer",
type: "event",
},
{
inputs: [
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "address",
name: "spender",
type: "address",
},
],
name: "allowance",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "spender",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "approve",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "balanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "totalSupply",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "transfer",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "from",
type: "address",
},
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "transferFrom",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
];
export class IERC20__factory {
static readonly abi = _abi;
static createInterface(): IERC20Interface {
return new utils.Interface(_abi) as IERC20Interface;
}
static connect(address: string, signerOrProvider: Signer | Provider): IERC20 {
return new Contract(address, _abi, signerOrProvider) as IERC20;
}
}

View File

@ -1,4 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export { IERC20Metadata__factory } from "./IERC20Metadata__factory";

View File

@ -1,6 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export * as extensions from "./extensions";
export { ERC20__factory } from "./ERC20__factory";
export { IERC20__factory } from "./IERC20__factory";

View File

@ -0,0 +1,240 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Contract, Signer, utils } from "ethers";
import type { Provider } from "@ethersproject/providers";
import type {
EventAndErrors,
EventAndErrorsInterface,
} from "../EventAndErrors";
const _abi = [
{
inputs: [],
name: "AlreadyReleased",
type: "error",
},
{
inputs: [],
name: "DepositAlreadyExists",
type: "error",
},
{
inputs: [],
name: "InvalidDeposit",
type: "error",
},
{
inputs: [],
name: "InvalidSigner",
type: "error",
},
{
inputs: [],
name: "LoopOverflow",
type: "error",
},
{
inputs: [],
name: "NotEnoughTokens",
type: "error",
},
{
inputs: [],
name: "NotExpired",
type: "error",
},
{
inputs: [],
name: "OnlySeller",
type: "error",
},
{
inputs: [],
name: "TxAlreadyUsed",
type: "error",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
type: "uint256",
},
{
indexed: false,
internalType: "address",
name: "token",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "premium",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "DepositAdded",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
type: "uint256",
},
],
name: "DepositClosed",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "DepositWithdrawn",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "buyer",
type: "address",
},
{
indexed: true,
internalType: "bytes32",
name: "lockID",
type: "bytes32",
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "LockAdded",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "buyer",
type: "address",
},
{
indexed: false,
internalType: "bytes32",
name: "lockId",
type: "bytes32",
},
],
name: "LockReleased",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "buyer",
type: "address",
},
{
indexed: false,
internalType: "bytes32",
name: "lockId",
type: "bytes32",
},
],
name: "LockReturned",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "owner",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "PremiumsWithdrawn",
type: "event",
},
];
export class EventAndErrors__factory {
static readonly abi = _abi;
static createInterface(): EventAndErrorsInterface {
return new utils.Interface(_abi) as EventAndErrorsInterface;
}
static connect(
address: string,
signerOrProvider: Signer | Provider
): EventAndErrors {
return new Contract(address, _abi, signerOrProvider) as EventAndErrors;
}
}

View File

@ -1,6 +1,6 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export * as openzeppelin from "./@openzeppelin";
export * as mockTokenSol from "./mockToken.sol";
export * as lib from "./lib";
export * as p2PixSol from "./p2pix.sol";
export { EventAndErrors__factory } from "./EventAndErrors__factory";

View File

@ -4,10 +4,7 @@
import { Contract, Signer, utils } from "ethers";
import type { Provider } from "@ethersproject/providers";
import type {
Ownable,
OwnableInterface,
} from "../../../../@openzeppelin/contracts/access/Ownable";
import type { Owned, OwnedInterface } from "../../../lib/auth/Owned";
const _abi = [
{
@ -16,7 +13,7 @@ const _abi = [
{
indexed: true,
internalType: "address",
name: "previousOwner",
name: "user",
type: "address",
},
{
@ -26,7 +23,7 @@ const _abi = [
type: "address",
},
],
name: "OwnershipTransferred",
name: "OwnerUpdated",
type: "event",
},
{
@ -42,13 +39,6 @@ const _abi = [
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "renounceOwnership",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
@ -57,22 +47,19 @@ const _abi = [
type: "address",
},
],
name: "transferOwnership",
name: "setOwner",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
];
export class Ownable__factory {
export class Owned__factory {
static readonly abi = _abi;
static createInterface(): OwnableInterface {
return new utils.Interface(_abi) as OwnableInterface;
static createInterface(): OwnedInterface {
return new utils.Interface(_abi) as OwnedInterface;
}
static connect(
address: string,
signerOrProvider: Signer | Provider
): Ownable {
return new Contract(address, _abi, signerOrProvider) as Ownable;
static connect(address: string, signerOrProvider: Signer | Provider): Owned {
return new Contract(address, _abi, signerOrProvider) as Owned;
}
}

View File

@ -0,0 +1,4 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export { Owned__factory } from "./Owned__factory";

View File

@ -0,0 +1,7 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export * as auth from "./auth";
export * as mock from "./mock";
export * as tokens from "./tokens";
export * as utils from "./utils";

View File

@ -1,4 +1,4 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export * as contracts from "./contracts";
export * as mockTokenSol from "./mockToken.sol";

File diff suppressed because one or more lines are too long

View File

@ -4,10 +4,7 @@
import { Contract, Signer, utils } from "ethers";
import type { Provider } from "@ethersproject/providers";
import type {
IERC20Metadata,
IERC20MetadataInterface,
} from "../../../../../../@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata";
import type { ERC20, ERC20Interface } from "../../../lib/tokens/ERC20";
const _abi = [
{
@ -28,7 +25,7 @@ const _abi = [
{
indexed: false,
internalType: "uint256",
name: "value",
name: "amount",
type: "uint256",
},
],
@ -53,23 +50,36 @@ const _abi = [
{
indexed: false,
internalType: "uint256",
name: "value",
name: "amount",
type: "uint256",
},
],
name: "Transfer",
type: "event",
},
{
inputs: [],
name: "DOMAIN_SEPARATOR",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "owner",
name: "",
type: "address",
},
{
internalType: "address",
name: "spender",
name: "",
type: "address",
},
],
@ -112,7 +122,7 @@ const _abi = [
inputs: [
{
internalType: "address",
name: "account",
name: "",
type: "address",
},
],
@ -153,6 +163,68 @@ const _abi = [
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
name: "nonces",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "address",
name: "spender",
type: "address",
},
{
internalType: "uint256",
name: "value",
type: "uint256",
},
{
internalType: "uint256",
name: "deadline",
type: "uint256",
},
{
internalType: "uint8",
name: "v",
type: "uint8",
},
{
internalType: "bytes32",
name: "r",
type: "bytes32",
},
{
internalType: "bytes32",
name: "s",
type: "bytes32",
},
],
name: "permit",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "symbol",
@ -234,15 +306,12 @@ const _abi = [
},
];
export class IERC20Metadata__factory {
export class ERC20__factory {
static readonly abi = _abi;
static createInterface(): IERC20MetadataInterface {
return new utils.Interface(_abi) as IERC20MetadataInterface;
static createInterface(): ERC20Interface {
return new utils.Interface(_abi) as ERC20Interface;
}
static connect(
address: string,
signerOrProvider: Signer | Provider
): IERC20Metadata {
return new Contract(address, _abi, signerOrProvider) as IERC20Metadata;
static connect(address: string, signerOrProvider: Signer | Provider): ERC20 {
return new Contract(address, _abi, signerOrProvider) as ERC20;
}
}

View File

@ -0,0 +1,4 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export { ERC20__factory } from "./ERC20__factory";

View File

@ -0,0 +1,65 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
import type { Provider, TransactionRequest } from "@ethersproject/providers";
import type { PromiseOrValue } from "../../../common";
import type { Counters, CountersInterface } from "../../../lib/utils/Counters";
const _abi = [
{
inputs: [],
name: "DecOverflow",
type: "error",
},
];
const _bytecode =
"0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a";
type CountersConstructorParams =
| [signer?: Signer]
| ConstructorParameters<typeof ContractFactory>;
const isSuperArgs = (
xs: CountersConstructorParams
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
export class Counters__factory extends ContractFactory {
constructor(...args: CountersConstructorParams) {
if (isSuperArgs(args)) {
super(...args);
} else {
super(_abi, _bytecode, args[0]);
}
}
override deploy(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<Counters> {
return super.deploy(overrides || {}) as Promise<Counters>;
}
override getDeployTransaction(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): TransactionRequest {
return super.getDeployTransaction(overrides || {});
}
override attach(address: string): Counters {
return super.attach(address) as Counters;
}
override connect(signer: Signer): Counters__factory {
return super.connect(signer) as Counters__factory;
}
static readonly bytecode = _bytecode;
static readonly abi = _abi;
static createInterface(): CountersInterface {
return new utils.Interface(_abi) as CountersInterface;
}
static connect(
address: string,
signerOrProvider: Signer | Provider
): Counters {
return new Contract(address, _abi, signerOrProvider) as Counters;
}
}

View File

@ -0,0 +1,31 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Contract, Signer, utils } from "ethers";
import type { Provider } from "@ethersproject/providers";
import type {
ReentrancyGuard,
ReentrancyGuardInterface,
} from "../../../lib/utils/ReentrancyGuard";
const _abi = [
{
inputs: [],
name: "Reentrancy",
type: "error",
},
];
export class ReentrancyGuard__factory {
static readonly abi = _abi;
static createInterface(): ReentrancyGuardInterface {
return new utils.Interface(_abi) as ReentrancyGuardInterface;
}
static connect(
address: string,
signerOrProvider: Signer | Provider
): ReentrancyGuard {
return new Contract(address, _abi, signerOrProvider) as ReentrancyGuard;
}
}

View File

@ -0,0 +1,5 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export { Counters__factory } from "./Counters__factory";
export { ReentrancyGuard__factory } from "./ReentrancyGuard__factory";

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -13,55 +13,64 @@ import * as Contracts from ".";
declare module "hardhat/types/runtime" {
interface HardhatEthersHelpers extends HardhatEthersHelpersBase {
getContractFactory(
name: "Ownable",
name: "EventAndErrors",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.Ownable__factory>;
): Promise<Contracts.EventAndErrors__factory>;
getContractFactory(
name: "Owned",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.Owned__factory>;
getContractFactory(
name: "MockToken",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.MockToken__factory>;
getContractFactory(
name: "ERC20",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.ERC20__factory>;
getContractFactory(
name: "IERC20Metadata",
name: "Counters",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.IERC20Metadata__factory>;
): Promise<Contracts.Counters__factory>;
getContractFactory(
name: "IERC20",
name: "ReentrancyGuard",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.IERC20__factory>;
getContractFactory(
name: "MockToken",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.MockToken__factory>;
): Promise<Contracts.ReentrancyGuard__factory>;
getContractFactory(
name: "P2PIX",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.P2PIX__factory>;
getContractAt(
name: "Ownable",
name: "EventAndErrors",
address: string,
signer?: ethers.Signer
): Promise<Contracts.Ownable>;
): Promise<Contracts.EventAndErrors>;
getContractAt(
name: "Owned",
address: string,
signer?: ethers.Signer
): Promise<Contracts.Owned>;
getContractAt(
name: "MockToken",
address: string,
signer?: ethers.Signer
): Promise<Contracts.MockToken>;
getContractAt(
name: "ERC20",
address: string,
signer?: ethers.Signer
): Promise<Contracts.ERC20>;
getContractAt(
name: "IERC20Metadata",
name: "Counters",
address: string,
signer?: ethers.Signer
): Promise<Contracts.IERC20Metadata>;
): Promise<Contracts.Counters>;
getContractAt(
name: "IERC20",
name: "ReentrancyGuard",
address: string,
signer?: ethers.Signer
): Promise<Contracts.IERC20>;
getContractAt(
name: "MockToken",
address: string,
signer?: ethers.Signer
): Promise<Contracts.MockToken>;
): Promise<Contracts.ReentrancyGuard>;
getContractAt(
name: "P2PIX",
address: string,

View File

@ -1,22 +1,22 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type * as openzeppelin from "./@openzeppelin";
export type { openzeppelin };
import type * as mockTokenSol from "./mockToken.sol";
export type { mockTokenSol };
import type * as lib from "./lib";
export type { lib };
import type * as p2PixSol from "./p2pix.sol";
export type { p2PixSol };
export type { EventAndErrors } from "./EventAndErrors";
export * as factories from "./factories";
export type { Ownable } from "./@openzeppelin/contracts/access/Ownable";
export { Ownable__factory } from "./factories/@openzeppelin/contracts/access/Ownable__factory";
export type { ERC20 } from "./@openzeppelin/contracts/token/ERC20/ERC20";
export { ERC20__factory } from "./factories/@openzeppelin/contracts/token/ERC20/ERC20__factory";
export type { IERC20Metadata } from "./@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata";
export { IERC20Metadata__factory } from "./factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory";
export type { IERC20 } from "./@openzeppelin/contracts/token/ERC20/IERC20";
export { IERC20__factory } from "./factories/@openzeppelin/contracts/token/ERC20/IERC20__factory";
export type { MockToken } from "./mockToken.sol/MockToken";
export { MockToken__factory } from "./factories/mockToken.sol/MockToken__factory";
export { EventAndErrors__factory } from "./factories/EventAndErrors__factory";
export type { Owned } from "./lib/auth/Owned";
export { Owned__factory } from "./factories/lib/auth/Owned__factory";
export type { MockToken } from "./lib/mock/mockToken.sol/MockToken";
export { MockToken__factory } from "./factories/lib/mock/mockToken.sol/MockToken__factory";
export type { ERC20 } from "./lib/tokens/ERC20";
export { ERC20__factory } from "./factories/lib/tokens/ERC20__factory";
export type { Counters } from "./lib/utils/Counters";
export { Counters__factory } from "./factories/lib/utils/Counters__factory";
export type { ReentrancyGuard } from "./lib/utils/ReentrancyGuard";
export { ReentrancyGuard__factory } from "./factories/lib/utils/ReentrancyGuard__factory";
export type { P2PIX } from "./p2pix.sol/P2PIX";
export { P2PIX__factory } from "./factories/p2pix.sol/P2PIX__factory";

View File

@ -24,64 +24,49 @@ import type {
TypedListener,
OnEvent,
PromiseOrValue,
} from "../../../common";
} from "../../common";
export interface OwnableInterface extends utils.Interface {
export interface OwnedInterface extends utils.Interface {
functions: {
"owner()": FunctionFragment;
"renounceOwnership()": FunctionFragment;
"transferOwnership(address)": FunctionFragment;
"setOwner(address)": FunctionFragment;
};
getFunction(
nameOrSignatureOrTopic: "owner" | "renounceOwnership" | "transferOwnership"
): FunctionFragment;
getFunction(nameOrSignatureOrTopic: "owner" | "setOwner"): FunctionFragment;
encodeFunctionData(functionFragment: "owner", values?: undefined): string;
encodeFunctionData(
functionFragment: "renounceOwnership",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "transferOwnership",
functionFragment: "setOwner",
values: [PromiseOrValue<string>]
): string;
decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "renounceOwnership",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "transferOwnership",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "setOwner", data: BytesLike): Result;
events: {
"OwnershipTransferred(address,address)": EventFragment;
"OwnerUpdated(address,address)": EventFragment;
};
getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment;
getEvent(nameOrSignatureOrTopic: "OwnerUpdated"): EventFragment;
}
export interface OwnershipTransferredEventObject {
previousOwner: string;
export interface OwnerUpdatedEventObject {
user: string;
newOwner: string;
}
export type OwnershipTransferredEvent = TypedEvent<
export type OwnerUpdatedEvent = TypedEvent<
[string, string],
OwnershipTransferredEventObject
OwnerUpdatedEventObject
>;
export type OwnershipTransferredEventFilter =
TypedEventFilter<OwnershipTransferredEvent>;
export type OwnerUpdatedEventFilter = TypedEventFilter<OwnerUpdatedEvent>;
export interface Ownable extends BaseContract {
export interface Owned extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
interface: OwnableInterface;
interface: OwnedInterface;
queryFilter<TEvent extends TypedEvent>(
event: TypedEventFilter<TEvent>,
@ -105,11 +90,7 @@ export interface Ownable extends BaseContract {
functions: {
owner(overrides?: CallOverrides): Promise<[string]>;
renounceOwnership(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
transferOwnership(
setOwner(
newOwner: PromiseOrValue<string>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
@ -117,11 +98,7 @@ export interface Ownable extends BaseContract {
owner(overrides?: CallOverrides): Promise<string>;
renounceOwnership(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
transferOwnership(
setOwner(
newOwner: PromiseOrValue<string>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
@ -129,33 +106,27 @@ export interface Ownable extends BaseContract {
callStatic: {
owner(overrides?: CallOverrides): Promise<string>;
renounceOwnership(overrides?: CallOverrides): Promise<void>;
transferOwnership(
setOwner(
newOwner: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<void>;
};
filters: {
"OwnershipTransferred(address,address)"(
previousOwner?: PromiseOrValue<string> | null,
"OwnerUpdated(address,address)"(
user?: PromiseOrValue<string> | null,
newOwner?: PromiseOrValue<string> | null
): OwnershipTransferredEventFilter;
OwnershipTransferred(
previousOwner?: PromiseOrValue<string> | null,
): OwnerUpdatedEventFilter;
OwnerUpdated(
user?: PromiseOrValue<string> | null,
newOwner?: PromiseOrValue<string> | null
): OwnershipTransferredEventFilter;
): OwnerUpdatedEventFilter;
};
estimateGas: {
owner(overrides?: CallOverrides): Promise<BigNumber>;
renounceOwnership(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
transferOwnership(
setOwner(
newOwner: PromiseOrValue<string>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
@ -164,11 +135,7 @@ export interface Ownable extends BaseContract {
populateTransaction: {
owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
renounceOwnership(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
transferOwnership(
setOwner(
newOwner: PromiseOrValue<string>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;

View File

@ -1,4 +1,4 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export * as erc20 from "./ERC20";
export type { Owned } from "./Owned";

11
src/types/lib/index.ts Normal file
View File

@ -0,0 +1,11 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type * as auth from "./auth";
export type { auth };
import type * as mock from "./mock";
export type { mock };
import type * as tokens from "./tokens";
export type { tokens };
import type * as utils from "./utils";
export type { utils };

View File

@ -1,5 +1,5 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type * as contracts from "./contracts";
export type { contracts };
import type * as mockTokenSol from "./mockToken.sol";
export type { mockTokenSol };

View File

@ -25,17 +25,18 @@ import type {
TypedListener,
OnEvent,
PromiseOrValue,
} from "../common";
} from "../../../common";
export interface MockTokenInterface extends utils.Interface {
functions: {
"DOMAIN_SEPARATOR()": FunctionFragment;
"allowance(address,address)": FunctionFragment;
"approve(address,uint256)": FunctionFragment;
"balanceOf(address)": FunctionFragment;
"decimals()": FunctionFragment;
"decreaseAllowance(address,uint256)": FunctionFragment;
"increaseAllowance(address,uint256)": FunctionFragment;
"name()": FunctionFragment;
"nonces(address)": FunctionFragment;
"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment;
"symbol()": FunctionFragment;
"totalSupply()": FunctionFragment;
"transfer(address,uint256)": FunctionFragment;
@ -44,19 +45,24 @@ export interface MockTokenInterface extends utils.Interface {
getFunction(
nameOrSignatureOrTopic:
| "DOMAIN_SEPARATOR"
| "allowance"
| "approve"
| "balanceOf"
| "decimals"
| "decreaseAllowance"
| "increaseAllowance"
| "name"
| "nonces"
| "permit"
| "symbol"
| "totalSupply"
| "transfer"
| "transferFrom"
): FunctionFragment;
encodeFunctionData(
functionFragment: "DOMAIN_SEPARATOR",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "allowance",
values: [PromiseOrValue<string>, PromiseOrValue<string>]
@ -70,15 +76,23 @@ export interface MockTokenInterface extends utils.Interface {
values: [PromiseOrValue<string>]
): string;
encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
encodeFunctionData(
functionFragment: "decreaseAllowance",
values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
): string;
encodeFunctionData(
functionFragment: "increaseAllowance",
values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
): string;
encodeFunctionData(functionFragment: "name", values?: undefined): string;
encodeFunctionData(
functionFragment: "nonces",
values: [PromiseOrValue<string>]
): string;
encodeFunctionData(
functionFragment: "permit",
values: [
PromiseOrValue<string>,
PromiseOrValue<string>,
PromiseOrValue<BigNumberish>,
PromiseOrValue<BigNumberish>,
PromiseOrValue<BigNumberish>,
PromiseOrValue<BytesLike>,
PromiseOrValue<BytesLike>
]
): string;
encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
encodeFunctionData(
functionFragment: "totalSupply",
@ -97,19 +111,17 @@ export interface MockTokenInterface extends utils.Interface {
]
): string;
decodeFunctionResult(
functionFragment: "DOMAIN_SEPARATOR",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "decreaseAllowance",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "increaseAllowance",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "totalSupply",
@ -133,7 +145,7 @@ export interface MockTokenInterface extends utils.Interface {
export interface ApprovalEventObject {
owner: string;
spender: string;
value: BigNumber;
amount: BigNumber;
}
export type ApprovalEvent = TypedEvent<
[string, string, BigNumber],
@ -145,7 +157,7 @@ export type ApprovalEventFilter = TypedEventFilter<ApprovalEvent>;
export interface TransferEventObject {
from: string;
to: string;
value: BigNumber;
amount: BigNumber;
}
export type TransferEvent = TypedEvent<
[string, string, BigNumber],
@ -181,9 +193,11 @@ export interface MockToken extends BaseContract {
removeListener: OnEvent<this>;
functions: {
DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>;
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
arg1: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber]>;
@ -194,26 +208,30 @@ export interface MockToken extends BaseContract {
): Promise<ContractTransaction>;
balanceOf(
account: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber]>;
decimals(overrides?: CallOverrides): Promise<[number]>;
decreaseAllowance(
spender: PromiseOrValue<string>,
subtractedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
increaseAllowance(
spender: PromiseOrValue<string>,
addedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
name(overrides?: CallOverrides): Promise<[string]>;
nonces(
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber]>;
permit(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
value: PromiseOrValue<BigNumberish>,
deadline: PromiseOrValue<BigNumberish>,
v: PromiseOrValue<BigNumberish>,
r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
symbol(overrides?: CallOverrides): Promise<[string]>;
totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
@ -232,9 +250,11 @@ export interface MockToken extends BaseContract {
): Promise<ContractTransaction>;
};
DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<string>;
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
arg1: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
@ -245,26 +265,30 @@ export interface MockToken extends BaseContract {
): Promise<ContractTransaction>;
balanceOf(
account: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<number>;
decreaseAllowance(
spender: PromiseOrValue<string>,
subtractedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
increaseAllowance(
spender: PromiseOrValue<string>,
addedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
name(overrides?: CallOverrides): Promise<string>;
nonces(
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
permit(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
value: PromiseOrValue<BigNumberish>,
deadline: PromiseOrValue<BigNumberish>,
v: PromiseOrValue<BigNumberish>,
r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
@ -283,9 +307,11 @@ export interface MockToken extends BaseContract {
): Promise<ContractTransaction>;
callStatic: {
DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<string>;
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
arg1: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
@ -296,26 +322,30 @@ export interface MockToken extends BaseContract {
): Promise<boolean>;
balanceOf(
account: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<number>;
decreaseAllowance(
spender: PromiseOrValue<string>,
subtractedValue: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
increaseAllowance(
spender: PromiseOrValue<string>,
addedValue: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
name(overrides?: CallOverrides): Promise<string>;
nonces(
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
permit(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
value: PromiseOrValue<BigNumberish>,
deadline: PromiseOrValue<BigNumberish>,
v: PromiseOrValue<BigNumberish>,
r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>,
overrides?: CallOverrides
): Promise<void>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
@ -338,30 +368,32 @@ export interface MockToken extends BaseContract {
"Approval(address,address,uint256)"(
owner?: PromiseOrValue<string> | null,
spender?: PromiseOrValue<string> | null,
value?: null
amount?: null
): ApprovalEventFilter;
Approval(
owner?: PromiseOrValue<string> | null,
spender?: PromiseOrValue<string> | null,
value?: null
amount?: null
): ApprovalEventFilter;
"Transfer(address,address,uint256)"(
from?: PromiseOrValue<string> | null,
to?: PromiseOrValue<string> | null,
value?: null
amount?: null
): TransferEventFilter;
Transfer(
from?: PromiseOrValue<string> | null,
to?: PromiseOrValue<string> | null,
value?: null
amount?: null
): TransferEventFilter;
};
estimateGas: {
DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<BigNumber>;
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
arg1: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
@ -372,26 +404,30 @@ export interface MockToken extends BaseContract {
): Promise<BigNumber>;
balanceOf(
account: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<BigNumber>;
decreaseAllowance(
spender: PromiseOrValue<string>,
subtractedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
increaseAllowance(
spender: PromiseOrValue<string>,
addedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
name(overrides?: CallOverrides): Promise<BigNumber>;
nonces(
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
permit(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
value: PromiseOrValue<BigNumberish>,
deadline: PromiseOrValue<BigNumberish>,
v: PromiseOrValue<BigNumberish>,
r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
symbol(overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
@ -411,9 +447,11 @@ export interface MockToken extends BaseContract {
};
populateTransaction: {
DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<PopulatedTransaction>;
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
arg1: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
@ -424,26 +462,30 @@ export interface MockToken extends BaseContract {
): Promise<PopulatedTransaction>;
balanceOf(
account: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
decimals(overrides?: CallOverrides): Promise<PopulatedTransaction>;
decreaseAllowance(
spender: PromiseOrValue<string>,
subtractedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
increaseAllowance(
spender: PromiseOrValue<string>,
addedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
name(overrides?: CallOverrides): Promise<PopulatedTransaction>;
nonces(
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
permit(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
value: PromiseOrValue<BigNumberish>,
deadline: PromiseOrValue<BigNumberish>,
v: PromiseOrValue<BigNumberish>,
r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
symbol(overrides?: CallOverrides): Promise<PopulatedTransaction>;
totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;

View File

@ -25,17 +25,18 @@ import type {
TypedListener,
OnEvent,
PromiseOrValue,
} from "../../../../common";
} from "../../common";
export interface ERC20Interface extends utils.Interface {
functions: {
"DOMAIN_SEPARATOR()": FunctionFragment;
"allowance(address,address)": FunctionFragment;
"approve(address,uint256)": FunctionFragment;
"balanceOf(address)": FunctionFragment;
"decimals()": FunctionFragment;
"decreaseAllowance(address,uint256)": FunctionFragment;
"increaseAllowance(address,uint256)": FunctionFragment;
"name()": FunctionFragment;
"nonces(address)": FunctionFragment;
"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment;
"symbol()": FunctionFragment;
"totalSupply()": FunctionFragment;
"transfer(address,uint256)": FunctionFragment;
@ -44,19 +45,24 @@ export interface ERC20Interface extends utils.Interface {
getFunction(
nameOrSignatureOrTopic:
| "DOMAIN_SEPARATOR"
| "allowance"
| "approve"
| "balanceOf"
| "decimals"
| "decreaseAllowance"
| "increaseAllowance"
| "name"
| "nonces"
| "permit"
| "symbol"
| "totalSupply"
| "transfer"
| "transferFrom"
): FunctionFragment;
encodeFunctionData(
functionFragment: "DOMAIN_SEPARATOR",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "allowance",
values: [PromiseOrValue<string>, PromiseOrValue<string>]
@ -70,15 +76,23 @@ export interface ERC20Interface extends utils.Interface {
values: [PromiseOrValue<string>]
): string;
encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
encodeFunctionData(
functionFragment: "decreaseAllowance",
values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
): string;
encodeFunctionData(
functionFragment: "increaseAllowance",
values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
): string;
encodeFunctionData(functionFragment: "name", values?: undefined): string;
encodeFunctionData(
functionFragment: "nonces",
values: [PromiseOrValue<string>]
): string;
encodeFunctionData(
functionFragment: "permit",
values: [
PromiseOrValue<string>,
PromiseOrValue<string>,
PromiseOrValue<BigNumberish>,
PromiseOrValue<BigNumberish>,
PromiseOrValue<BigNumberish>,
PromiseOrValue<BytesLike>,
PromiseOrValue<BytesLike>
]
): string;
encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
encodeFunctionData(
functionFragment: "totalSupply",
@ -97,19 +111,17 @@ export interface ERC20Interface extends utils.Interface {
]
): string;
decodeFunctionResult(
functionFragment: "DOMAIN_SEPARATOR",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "decreaseAllowance",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "increaseAllowance",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "totalSupply",
@ -133,7 +145,7 @@ export interface ERC20Interface extends utils.Interface {
export interface ApprovalEventObject {
owner: string;
spender: string;
value: BigNumber;
amount: BigNumber;
}
export type ApprovalEvent = TypedEvent<
[string, string, BigNumber],
@ -145,7 +157,7 @@ export type ApprovalEventFilter = TypedEventFilter<ApprovalEvent>;
export interface TransferEventObject {
from: string;
to: string;
value: BigNumber;
amount: BigNumber;
}
export type TransferEvent = TypedEvent<
[string, string, BigNumber],
@ -181,9 +193,11 @@ export interface ERC20 extends BaseContract {
removeListener: OnEvent<this>;
functions: {
DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>;
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
arg1: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber]>;
@ -194,26 +208,30 @@ export interface ERC20 extends BaseContract {
): Promise<ContractTransaction>;
balanceOf(
account: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber]>;
decimals(overrides?: CallOverrides): Promise<[number]>;
decreaseAllowance(
spender: PromiseOrValue<string>,
subtractedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
increaseAllowance(
spender: PromiseOrValue<string>,
addedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
name(overrides?: CallOverrides): Promise<[string]>;
nonces(
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber]>;
permit(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
value: PromiseOrValue<BigNumberish>,
deadline: PromiseOrValue<BigNumberish>,
v: PromiseOrValue<BigNumberish>,
r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
symbol(overrides?: CallOverrides): Promise<[string]>;
totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
@ -232,9 +250,11 @@ export interface ERC20 extends BaseContract {
): Promise<ContractTransaction>;
};
DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<string>;
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
arg1: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
@ -245,26 +265,30 @@ export interface ERC20 extends BaseContract {
): Promise<ContractTransaction>;
balanceOf(
account: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<number>;
decreaseAllowance(
spender: PromiseOrValue<string>,
subtractedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
increaseAllowance(
spender: PromiseOrValue<string>,
addedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
name(overrides?: CallOverrides): Promise<string>;
nonces(
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
permit(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
value: PromiseOrValue<BigNumberish>,
deadline: PromiseOrValue<BigNumberish>,
v: PromiseOrValue<BigNumberish>,
r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
@ -283,9 +307,11 @@ export interface ERC20 extends BaseContract {
): Promise<ContractTransaction>;
callStatic: {
DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<string>;
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
arg1: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
@ -296,26 +322,30 @@ export interface ERC20 extends BaseContract {
): Promise<boolean>;
balanceOf(
account: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<number>;
decreaseAllowance(
spender: PromiseOrValue<string>,
subtractedValue: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
increaseAllowance(
spender: PromiseOrValue<string>,
addedValue: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
name(overrides?: CallOverrides): Promise<string>;
nonces(
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
permit(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
value: PromiseOrValue<BigNumberish>,
deadline: PromiseOrValue<BigNumberish>,
v: PromiseOrValue<BigNumberish>,
r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>,
overrides?: CallOverrides
): Promise<void>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
@ -338,30 +368,32 @@ export interface ERC20 extends BaseContract {
"Approval(address,address,uint256)"(
owner?: PromiseOrValue<string> | null,
spender?: PromiseOrValue<string> | null,
value?: null
amount?: null
): ApprovalEventFilter;
Approval(
owner?: PromiseOrValue<string> | null,
spender?: PromiseOrValue<string> | null,
value?: null
amount?: null
): ApprovalEventFilter;
"Transfer(address,address,uint256)"(
from?: PromiseOrValue<string> | null,
to?: PromiseOrValue<string> | null,
value?: null
amount?: null
): TransferEventFilter;
Transfer(
from?: PromiseOrValue<string> | null,
to?: PromiseOrValue<string> | null,
value?: null
amount?: null
): TransferEventFilter;
};
estimateGas: {
DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<BigNumber>;
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
arg1: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
@ -372,26 +404,30 @@ export interface ERC20 extends BaseContract {
): Promise<BigNumber>;
balanceOf(
account: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<BigNumber>;
decreaseAllowance(
spender: PromiseOrValue<string>,
subtractedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
increaseAllowance(
spender: PromiseOrValue<string>,
addedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
name(overrides?: CallOverrides): Promise<BigNumber>;
nonces(
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
permit(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
value: PromiseOrValue<BigNumberish>,
deadline: PromiseOrValue<BigNumberish>,
v: PromiseOrValue<BigNumberish>,
r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
symbol(overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
@ -411,9 +447,11 @@ export interface ERC20 extends BaseContract {
};
populateTransaction: {
DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<PopulatedTransaction>;
allowance(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
arg1: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
@ -424,26 +462,30 @@ export interface ERC20 extends BaseContract {
): Promise<PopulatedTransaction>;
balanceOf(
account: PromiseOrValue<string>,
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
decimals(overrides?: CallOverrides): Promise<PopulatedTransaction>;
decreaseAllowance(
spender: PromiseOrValue<string>,
subtractedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
increaseAllowance(
spender: PromiseOrValue<string>,
addedValue: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
name(overrides?: CallOverrides): Promise<PopulatedTransaction>;
nonces(
arg0: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
permit(
owner: PromiseOrValue<string>,
spender: PromiseOrValue<string>,
value: PromiseOrValue<BigNumberish>,
deadline: PromiseOrValue<BigNumberish>,
v: PromiseOrValue<BigNumberish>,
r: PromiseOrValue<BytesLike>,
s: PromiseOrValue<BytesLike>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
symbol(overrides?: CallOverrides): Promise<PopulatedTransaction>;
totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;

View File

@ -1,4 +1,4 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export type { Ownable } from "./Ownable";
export type { ERC20 } from "./ERC20";

View File

@ -0,0 +1,56 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type { BaseContract, Signer, utils } from "ethers";
import type { Listener, Provider } from "@ethersproject/providers";
import type {
TypedEventFilter,
TypedEvent,
TypedListener,
OnEvent,
PromiseOrValue,
} from "../../common";
export interface CountersInterface extends utils.Interface {
functions: {};
events: {};
}
export interface Counters extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
interface: CountersInterface;
queryFilter<TEvent extends TypedEvent>(
event: TypedEventFilter<TEvent>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TEvent>>;
listeners<TEvent extends TypedEvent>(
eventFilter?: TypedEventFilter<TEvent>
): Array<TypedListener<TEvent>>;
listeners(eventName?: string): Array<Listener>;
removeAllListeners<TEvent extends TypedEvent>(
eventFilter: TypedEventFilter<TEvent>
): this;
removeAllListeners(eventName?: string): this;
off: OnEvent<this>;
on: OnEvent<this>;
once: OnEvent<this>;
removeListener: OnEvent<this>;
functions: {};
callStatic: {};
filters: {};
estimateGas: {};
populateTransaction: {};
}

View File

@ -0,0 +1,56 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type { BaseContract, Signer, utils } from "ethers";
import type { Listener, Provider } from "@ethersproject/providers";
import type {
TypedEventFilter,
TypedEvent,
TypedListener,
OnEvent,
PromiseOrValue,
} from "../../common";
export interface ReentrancyGuardInterface extends utils.Interface {
functions: {};
events: {};
}
export interface ReentrancyGuard extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
interface: ReentrancyGuardInterface;
queryFilter<TEvent extends TypedEvent>(
event: TypedEventFilter<TEvent>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TEvent>>;
listeners<TEvent extends TypedEvent>(
eventFilter?: TypedEventFilter<TEvent>
): Array<TypedListener<TEvent>>;
listeners(eventName?: string): Array<Listener>;
removeAllListeners<TEvent extends TypedEvent>(
eventFilter: TypedEventFilter<TEvent>
): this;
removeAllListeners(eventName?: string): this;
off: OnEvent<this>;
on: OnEvent<this>;
once: OnEvent<this>;
removeListener: OnEvent<this>;
functions: {};
callStatic: {};
filters: {};
estimateGas: {};
populateTransaction: {};
}

View File

@ -0,0 +1,5 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export type { Counters } from "./Counters";
export type { ReentrancyGuard } from "./ReentrancyGuard";

View File

@ -30,38 +30,46 @@ import type {
export interface P2PIXInterface extends utils.Interface {
functions: {
"_castAddrToKey(address)": FunctionFragment;
"cancelDeposit(uint256)": FunctionFragment;
"defaultLockBlocks()": FunctionFragment;
"deposit(address,uint256,string)": FunctionFragment;
"depositCount()": FunctionFragment;
"lock(uint256,address,address,uint256,uint256,bytes32[])": FunctionFragment;
"mapDeposits(uint256)": FunctionFragment;
"mapLocks(bytes32)": FunctionFragment;
"owner()": FunctionFragment;
"release(bytes32,uint256,bytes32,bytes32,uint8)": FunctionFragment;
"renounceOwnership()": FunctionFragment;
"transferOwnership(address)": FunctionFragment;
"setOwner(address)": FunctionFragment;
"unlockExpired(bytes32[])": FunctionFragment;
"validBacenSigners(address)": FunctionFragment;
"validBacenSigners(uint256)": FunctionFragment;
"withdraw(uint256,bytes32[])": FunctionFragment;
"withdrawPremiums()": FunctionFragment;
};
getFunction(
nameOrSignatureOrTopic:
| "_castAddrToKey"
| "cancelDeposit"
| "defaultLockBlocks"
| "deposit"
| "depositCount"
| "lock"
| "mapDeposits"
| "mapLocks"
| "owner"
| "release"
| "renounceOwnership"
| "transferOwnership"
| "setOwner"
| "unlockExpired"
| "validBacenSigners"
| "withdraw"
| "withdrawPremiums"
): FunctionFragment;
encodeFunctionData(
functionFragment: "_castAddrToKey",
values: [PromiseOrValue<string>]
): string;
encodeFunctionData(
functionFragment: "cancelDeposit",
values: [PromiseOrValue<BigNumberish>]
@ -93,6 +101,14 @@ export interface P2PIXInterface extends utils.Interface {
PromiseOrValue<BytesLike>[]
]
): string;
encodeFunctionData(
functionFragment: "mapDeposits",
values: [PromiseOrValue<BigNumberish>]
): string;
encodeFunctionData(
functionFragment: "mapLocks",
values: [PromiseOrValue<BytesLike>]
): string;
encodeFunctionData(functionFragment: "owner", values?: undefined): string;
encodeFunctionData(
functionFragment: "release",
@ -105,11 +121,7 @@ export interface P2PIXInterface extends utils.Interface {
]
): string;
encodeFunctionData(
functionFragment: "renounceOwnership",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "transferOwnership",
functionFragment: "setOwner",
values: [PromiseOrValue<string>]
): string;
encodeFunctionData(
@ -118,7 +130,7 @@ export interface P2PIXInterface extends utils.Interface {
): string;
encodeFunctionData(
functionFragment: "validBacenSigners",
values: [PromiseOrValue<string>]
values: [PromiseOrValue<BigNumberish>]
): string;
encodeFunctionData(
functionFragment: "withdraw",
@ -129,6 +141,10 @@ export interface P2PIXInterface extends utils.Interface {
values?: undefined
): string;
decodeFunctionResult(
functionFragment: "_castAddrToKey",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "cancelDeposit",
data: BytesLike
@ -143,16 +159,14 @@ export interface P2PIXInterface extends utils.Interface {
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "lock", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "mapDeposits",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "mapLocks", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "release", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "renounceOwnership",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "transferOwnership",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "setOwner", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "unlockExpired",
data: BytesLike
@ -174,7 +188,7 @@ export interface P2PIXInterface extends utils.Interface {
"LockAdded(address,bytes32,uint256,uint256)": EventFragment;
"LockReleased(address,bytes32)": EventFragment;
"LockReturned(address,bytes32)": EventFragment;
"OwnershipTransferred(address,address)": EventFragment;
"OwnerUpdated(address,address)": EventFragment;
"PremiumsWithdrawn(address,uint256)": EventFragment;
};
@ -184,7 +198,7 @@ export interface P2PIXInterface extends utils.Interface {
getEvent(nameOrSignatureOrTopic: "LockAdded"): EventFragment;
getEvent(nameOrSignatureOrTopic: "LockReleased"): EventFragment;
getEvent(nameOrSignatureOrTopic: "LockReturned"): EventFragment;
getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment;
getEvent(nameOrSignatureOrTopic: "OwnerUpdated"): EventFragment;
getEvent(nameOrSignatureOrTopic: "PremiumsWithdrawn"): EventFragment;
}
@ -261,17 +275,16 @@ export type LockReturnedEvent = TypedEvent<
export type LockReturnedEventFilter = TypedEventFilter<LockReturnedEvent>;
export interface OwnershipTransferredEventObject {
previousOwner: string;
export interface OwnerUpdatedEventObject {
user: string;
newOwner: string;
}
export type OwnershipTransferredEvent = TypedEvent<
export type OwnerUpdatedEvent = TypedEvent<
[string, string],
OwnershipTransferredEventObject
OwnerUpdatedEventObject
>;
export type OwnershipTransferredEventFilter =
TypedEventFilter<OwnershipTransferredEvent>;
export type OwnerUpdatedEventFilter = TypedEventFilter<OwnerUpdatedEvent>;
export interface PremiumsWithdrawnEventObject {
owner: string;
@ -312,6 +325,11 @@ export interface P2PIX extends BaseContract {
removeListener: OnEvent<this>;
functions: {
_castAddrToKey(
_addr: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<[BigNumber] & { _key: BigNumber }>;
cancelDeposit(
depositID: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
@ -328,18 +346,46 @@ export interface P2PIX extends BaseContract {
depositCount(
overrides?: CallOverrides
): Promise<[BigNumber] & { _value: BigNumber }>;
): Promise<[BigNumber] & { _val: BigNumber }>;
lock(
depositID: PromiseOrValue<BigNumberish>,
targetAddress: PromiseOrValue<string>,
relayerAddress: PromiseOrValue<string>,
relayerPremium: PromiseOrValue<BigNumberish>,
amount: PromiseOrValue<BigNumberish>,
_depositID: PromiseOrValue<BigNumberish>,
_targetAddress: PromiseOrValue<string>,
_relayerAddress: PromiseOrValue<string>,
_relayerPremium: PromiseOrValue<BigNumberish>,
_amount: PromiseOrValue<BigNumberish>,
expiredLocks: PromiseOrValue<BytesLike>[],
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
mapDeposits(
arg0: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<
[BigNumber, BigNumber, string, string, string, boolean] & {
remaining: BigNumber;
premium: BigNumber;
pixTarget: string;
seller: string;
token: string;
valid: boolean;
}
>;
mapLocks(
arg0: PromiseOrValue<BytesLike>,
overrides?: CallOverrides
): Promise<
[BigNumber, BigNumber, BigNumber, BigNumber, string, string] & {
depositID: BigNumber;
relayerPremium: BigNumber;
amount: BigNumber;
expirationBlock: BigNumber;
targetAddress: string;
relayerAddress: string;
}
>;
owner(overrides?: CallOverrides): Promise<[string]>;
release(
@ -351,11 +397,7 @@ export interface P2PIX extends BaseContract {
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
renounceOwnership(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
transferOwnership(
setOwner(
newOwner: PromiseOrValue<string>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
@ -366,7 +408,7 @@ export interface P2PIX extends BaseContract {
): Promise<ContractTransaction>;
validBacenSigners(
arg0: PromiseOrValue<string>,
arg0: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<[boolean]>;
@ -381,6 +423,11 @@ export interface P2PIX extends BaseContract {
): Promise<ContractTransaction>;
};
_castAddrToKey(
_addr: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
cancelDeposit(
depositID: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
@ -398,15 +445,43 @@ export interface P2PIX extends BaseContract {
depositCount(overrides?: CallOverrides): Promise<BigNumber>;
lock(
depositID: PromiseOrValue<BigNumberish>,
targetAddress: PromiseOrValue<string>,
relayerAddress: PromiseOrValue<string>,
relayerPremium: PromiseOrValue<BigNumberish>,
amount: PromiseOrValue<BigNumberish>,
_depositID: PromiseOrValue<BigNumberish>,
_targetAddress: PromiseOrValue<string>,
_relayerAddress: PromiseOrValue<string>,
_relayerPremium: PromiseOrValue<BigNumberish>,
_amount: PromiseOrValue<BigNumberish>,
expiredLocks: PromiseOrValue<BytesLike>[],
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
mapDeposits(
arg0: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<
[BigNumber, BigNumber, string, string, string, boolean] & {
remaining: BigNumber;
premium: BigNumber;
pixTarget: string;
seller: string;
token: string;
valid: boolean;
}
>;
mapLocks(
arg0: PromiseOrValue<BytesLike>,
overrides?: CallOverrides
): Promise<
[BigNumber, BigNumber, BigNumber, BigNumber, string, string] & {
depositID: BigNumber;
relayerPremium: BigNumber;
amount: BigNumber;
expirationBlock: BigNumber;
targetAddress: string;
relayerAddress: string;
}
>;
owner(overrides?: CallOverrides): Promise<string>;
release(
@ -418,11 +493,7 @@ export interface P2PIX extends BaseContract {
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
renounceOwnership(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
transferOwnership(
setOwner(
newOwner: PromiseOrValue<string>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<ContractTransaction>;
@ -433,7 +504,7 @@ export interface P2PIX extends BaseContract {
): Promise<ContractTransaction>;
validBacenSigners(
arg0: PromiseOrValue<string>,
arg0: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
@ -448,6 +519,11 @@ export interface P2PIX extends BaseContract {
): Promise<ContractTransaction>;
callStatic: {
_castAddrToKey(
_addr: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
cancelDeposit(
depositID: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
@ -465,15 +541,43 @@ export interface P2PIX extends BaseContract {
depositCount(overrides?: CallOverrides): Promise<BigNumber>;
lock(
depositID: PromiseOrValue<BigNumberish>,
targetAddress: PromiseOrValue<string>,
relayerAddress: PromiseOrValue<string>,
relayerPremium: PromiseOrValue<BigNumberish>,
amount: PromiseOrValue<BigNumberish>,
_depositID: PromiseOrValue<BigNumberish>,
_targetAddress: PromiseOrValue<string>,
_relayerAddress: PromiseOrValue<string>,
_relayerPremium: PromiseOrValue<BigNumberish>,
_amount: PromiseOrValue<BigNumberish>,
expiredLocks: PromiseOrValue<BytesLike>[],
overrides?: CallOverrides
): Promise<string>;
mapDeposits(
arg0: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<
[BigNumber, BigNumber, string, string, string, boolean] & {
remaining: BigNumber;
premium: BigNumber;
pixTarget: string;
seller: string;
token: string;
valid: boolean;
}
>;
mapLocks(
arg0: PromiseOrValue<BytesLike>,
overrides?: CallOverrides
): Promise<
[BigNumber, BigNumber, BigNumber, BigNumber, string, string] & {
depositID: BigNumber;
relayerPremium: BigNumber;
amount: BigNumber;
expirationBlock: BigNumber;
targetAddress: string;
relayerAddress: string;
}
>;
owner(overrides?: CallOverrides): Promise<string>;
release(
@ -485,9 +589,7 @@ export interface P2PIX extends BaseContract {
overrides?: CallOverrides
): Promise<void>;
renounceOwnership(overrides?: CallOverrides): Promise<void>;
transferOwnership(
setOwner(
newOwner: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<void>;
@ -498,7 +600,7 @@ export interface P2PIX extends BaseContract {
): Promise<void>;
validBacenSigners(
arg0: PromiseOrValue<string>,
arg0: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<boolean>;
@ -578,14 +680,14 @@ export interface P2PIX extends BaseContract {
lockId?: null
): LockReturnedEventFilter;
"OwnershipTransferred(address,address)"(
previousOwner?: PromiseOrValue<string> | null,
"OwnerUpdated(address,address)"(
user?: PromiseOrValue<string> | null,
newOwner?: PromiseOrValue<string> | null
): OwnershipTransferredEventFilter;
OwnershipTransferred(
previousOwner?: PromiseOrValue<string> | null,
): OwnerUpdatedEventFilter;
OwnerUpdated(
user?: PromiseOrValue<string> | null,
newOwner?: PromiseOrValue<string> | null
): OwnershipTransferredEventFilter;
): OwnerUpdatedEventFilter;
"PremiumsWithdrawn(address,uint256)"(
owner?: null,
@ -598,6 +700,11 @@ export interface P2PIX extends BaseContract {
};
estimateGas: {
_castAddrToKey(
_addr: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<BigNumber>;
cancelDeposit(
depositID: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
@ -615,15 +722,25 @@ export interface P2PIX extends BaseContract {
depositCount(overrides?: CallOverrides): Promise<BigNumber>;
lock(
depositID: PromiseOrValue<BigNumberish>,
targetAddress: PromiseOrValue<string>,
relayerAddress: PromiseOrValue<string>,
relayerPremium: PromiseOrValue<BigNumberish>,
amount: PromiseOrValue<BigNumberish>,
_depositID: PromiseOrValue<BigNumberish>,
_targetAddress: PromiseOrValue<string>,
_relayerAddress: PromiseOrValue<string>,
_relayerPremium: PromiseOrValue<BigNumberish>,
_amount: PromiseOrValue<BigNumberish>,
expiredLocks: PromiseOrValue<BytesLike>[],
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
mapDeposits(
arg0: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<BigNumber>;
mapLocks(
arg0: PromiseOrValue<BytesLike>,
overrides?: CallOverrides
): Promise<BigNumber>;
owner(overrides?: CallOverrides): Promise<BigNumber>;
release(
@ -635,11 +752,7 @@ export interface P2PIX extends BaseContract {
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
renounceOwnership(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
transferOwnership(
setOwner(
newOwner: PromiseOrValue<string>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<BigNumber>;
@ -650,7 +763,7 @@ export interface P2PIX extends BaseContract {
): Promise<BigNumber>;
validBacenSigners(
arg0: PromiseOrValue<string>,
arg0: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<BigNumber>;
@ -666,6 +779,11 @@ export interface P2PIX extends BaseContract {
};
populateTransaction: {
_castAddrToKey(
_addr: PromiseOrValue<string>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
cancelDeposit(
depositID: PromiseOrValue<BigNumberish>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
@ -683,15 +801,25 @@ export interface P2PIX extends BaseContract {
depositCount(overrides?: CallOverrides): Promise<PopulatedTransaction>;
lock(
depositID: PromiseOrValue<BigNumberish>,
targetAddress: PromiseOrValue<string>,
relayerAddress: PromiseOrValue<string>,
relayerPremium: PromiseOrValue<BigNumberish>,
amount: PromiseOrValue<BigNumberish>,
_depositID: PromiseOrValue<BigNumberish>,
_targetAddress: PromiseOrValue<string>,
_relayerAddress: PromiseOrValue<string>,
_relayerPremium: PromiseOrValue<BigNumberish>,
_amount: PromiseOrValue<BigNumberish>,
expiredLocks: PromiseOrValue<BytesLike>[],
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
mapDeposits(
arg0: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
mapLocks(
arg0: PromiseOrValue<BytesLike>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
release(
@ -703,11 +831,7 @@ export interface P2PIX extends BaseContract {
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
renounceOwnership(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
transferOwnership(
setOwner(
newOwner: PromiseOrValue<string>,
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<PopulatedTransaction>;
@ -718,7 +842,7 @@ export interface P2PIX extends BaseContract {
): Promise<PopulatedTransaction>;
validBacenSigners(
arg0: PromiseOrValue<string>,
arg0: PromiseOrValue<BigNumberish>,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;

View File

@ -36,12 +36,15 @@ describe("P2PIX deposit test", () => {
]);
await p2pix.deployed();
const ownerKey = await p2pix._castAddrToKey(owner.address);
const wallet2Key = await p2pix._castAddrToKey(wallet2.address);
// Verify values at deployment
expect(
await p2pix.validBacenSigners(owner.address),
await p2pix.callStatic.validBacenSigners(ownerKey),
).to.equal(true);
expect(
await p2pix.validBacenSigners(wallet2.address),
await p2pix.validBacenSigners(wallet2Key),
).to.equal(true);
});

View File

@ -1,6 +1,7 @@
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
import { expect } from "chai";
import { ethers, network } from "hardhat";
import { P2PixErrors } from "./utils/errors";
import { MockToken, P2PIX } from "../src/types";
@ -37,15 +38,19 @@ describe("P2PIX deposit test", () => {
]);
await p2pix.deployed();
const ownerKey = await p2pix._castAddrToKey(owner.address);
const wallet2key = await p2pix._castAddrToKey(wallet2.address);
const wallet3key = await p2pix._castAddrToKey(wallet3.address);
// Verify values at deployment
expect(
await p2pix.validBacenSigners(owner.address),
await p2pix.validBacenSigners(ownerKey),
).to.equal(true);
expect(
await p2pix.validBacenSigners(wallet2.address),
await p2pix.validBacenSigners(wallet2key),
).to.equal(true);
expect(
await p2pix.validBacenSigners(wallet3.address),
await p2pix.validBacenSigners(wallet3key),
).to.equal(false);
});
@ -189,9 +194,7 @@ describe("P2PIX deposit test", () => {
ethers.utils.parseEther("100"),
[],
),
).to.be.revertedWith(
"P2PIX: Another lock with same ID is not expired yet",
);
).to.be.revertedWithCustomError(p2pix, P2PixErrors.NotExpired);
});
it("Should release the locked amount to the buyer", async () => {
@ -234,9 +237,7 @@ describe("P2PIX deposit test", () => {
p2pix
.connect(wallet3)
.release(lockID, endtoendID, sig.r, sig.s, sig.v),
).to.be.revertedWith(
"P2PIX: Lock already released or returned",
);
).to.be.revertedWithCustomError(p2pix, P2PixErrors.AlreadyReleased);
});
it("Should prevent create a 900 lock", async () => {
@ -251,9 +252,8 @@ describe("P2PIX deposit test", () => {
ethers.utils.parseEther("900"),
[],
),
).to.be.revertedWith(
"P2PIX: Not enough token remaining on deposit",
);
).to.be.revertedWithCustomError(
p2pix, P2PixErrors.NotEnoughTokens);
});
it("Should allow recreate same lock again", async () => {
@ -284,9 +284,9 @@ describe("P2PIX deposit test", () => {
it("Should allow unlock expired lock", async () => {
await expect(
p2pix.unlockExpired([lockID]),
).to.be.revertedWith(
"P2PIX: Lock not expired or already released",
);
).to.be.revertedWithCustomError(
p2pix, P2PixErrors.NotExpired);
await network.provider.send("evm_mine");
await network.provider.send("evm_mine");
await network.provider.send("evm_mine");
@ -299,8 +299,7 @@ describe("P2PIX deposit test", () => {
it("Should prevent unlock again", async () => {
await expect(
p2pix.unlockExpired([lockID]),
).to.be.revertedWith(
"P2PIX: Lock not expired or already released",
);
).to.be.revertedWithCustomError(
p2pix, P2PixErrors.NotExpired);
});
});

11
test/utils/errors.ts Normal file
View File

@ -0,0 +1,11 @@
export enum P2PixErrors {
DepositAlreadyExists = "DepositAlreadyExists",
OnlySeller = "OnlySeller",
NotExpired = "NotExpired",
LoopOverflow = "LoopOverflow",
InvalidDeposit = "InvalidDeposit",
NotEnoughTokens = "NotEnoughTokens",
AlreadyReleased = "AlreadyReleased",
TxAlreadyUsed = "TxAlreadyUsed",
InvalidSigner = "InvalidSigner",
}