Compare commits
2 Commits
dev
...
fd7c84f20a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd7c84f20a | ||
|
|
ee470c0393 |
2
.commitlintrc.yaml
Normal file
2
.commitlintrc.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
extends:
|
||||||
|
- "@commitlint/config-conventional"
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
MNEMONIC="{INSERT_12_WORD_MNEMONIC}"
|
MNEMONIC="{INSERT_12_WORD_MNEMONIC}"
|
||||||
PRIVATE_KEY="{INSERT_0x_PRIVATE_KEY}"
|
|
||||||
|
|
||||||
INFURA_API_KEY="{INSERT_API_KEY}"
|
INFURA_API_KEY="{INSERT_API_KEY}"
|
||||||
ALCHEMY_API_KEY="{INSERT_API_KEY}"
|
ALCHEMY_API_KEY="{INSERT_API_KEY}"
|
||||||
|
|||||||
21
.eslintignore
Normal file
21
.eslintignore
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# directories
|
||||||
|
.yarn/
|
||||||
|
**/.coverage_artifacts
|
||||||
|
**/.coverage_cache
|
||||||
|
**/.coverage_contracts
|
||||||
|
**/artifacts
|
||||||
|
**/build
|
||||||
|
**/cache
|
||||||
|
**/coverage
|
||||||
|
**/dist
|
||||||
|
**/node_modules
|
||||||
|
**/types
|
||||||
|
|
||||||
|
# files
|
||||||
|
*.env
|
||||||
|
*.log
|
||||||
|
.pnp.*
|
||||||
|
coverage.json
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
21
.eslintrc.yaml
Normal file
21
.eslintrc.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
extends:
|
||||||
|
- "eslint:recommended"
|
||||||
|
- "plugin:@typescript-eslint/eslint-recommended"
|
||||||
|
- "plugin:@typescript-eslint/recommended"
|
||||||
|
- "prettier"
|
||||||
|
parser: "@typescript-eslint/parser"
|
||||||
|
parserOptions:
|
||||||
|
project: "./tsconfig.json"
|
||||||
|
plugins:
|
||||||
|
- "@typescript-eslint"
|
||||||
|
root: true
|
||||||
|
rules:
|
||||||
|
"@typescript-eslint/no-floating-promises":
|
||||||
|
- error
|
||||||
|
- ignoreIIFE: true
|
||||||
|
ignoreVoid: true
|
||||||
|
"@typescript-eslint/no-inferrable-types": "off"
|
||||||
|
"@typescript-eslint/no-unused-vars":
|
||||||
|
- error
|
||||||
|
- argsIgnorePattern: "_"
|
||||||
|
varsIgnorePattern: "_"
|
||||||
32
.github/workflows/lint.yml
vendored
32
.github/workflows/lint.yml
vendored
@@ -1,32 +0,0 @@
|
|||||||
name: Lint
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main, dev]
|
|
||||||
pull_request:
|
|
||||||
branches: [main, dev]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: lint-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lint:
|
|
||||||
name: Solidity + TypeScript + Prettier
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Enable Corepack
|
|
||||||
run: corepack enable
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 22
|
|
||||||
cache: yarn
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: yarn install --immutable
|
|
||||||
|
|
||||||
- name: Run lint
|
|
||||||
run: yarn lint
|
|
||||||
35
.github/workflows/test.yml
vendored
35
.github/workflows/test.yml
vendored
@@ -1,35 +0,0 @@
|
|||||||
name: Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main, dev]
|
|
||||||
pull_request:
|
|
||||||
branches: [main, dev]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: test-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
name: Hardhat tests
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Enable Corepack
|
|
||||||
run: corepack enable
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 22
|
|
||||||
cache: yarn
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: yarn install --immutable
|
|
||||||
|
|
||||||
- name: Compile contracts
|
|
||||||
run: yarn compile
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: yarn test
|
|
||||||
13
.gitignore
vendored
13
.gitignore
vendored
@@ -5,8 +5,7 @@
|
|||||||
!.yarn/plugins
|
!.yarn/plugins
|
||||||
!.yarn/sdks
|
!.yarn/sdks
|
||||||
!.yarn/versions
|
!.yarn/versions
|
||||||
artifacts
|
# **/artifacts
|
||||||
**/artifacts
|
|
||||||
artifacts/build-info
|
artifacts/build-info
|
||||||
**/build
|
**/build
|
||||||
**/ref
|
**/ref
|
||||||
@@ -17,8 +16,6 @@ artifacts/build-info
|
|||||||
**/.coverage_contracts
|
**/.coverage_contracts
|
||||||
**/dist
|
**/dist
|
||||||
**/node_modules
|
**/node_modules
|
||||||
.deps
|
|
||||||
src/types
|
|
||||||
|
|
||||||
# files
|
# files
|
||||||
*.env
|
*.env
|
||||||
@@ -28,11 +25,3 @@ coverage.json
|
|||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
docs/lib/mock/*.md
|
|
||||||
.dagrobin/
|
|
||||||
|
|
||||||
# Hardhat Ignition local/ephemeral deployments
|
|
||||||
ignition/deployments/chain-31337/
|
|
||||||
|
|
||||||
# Per-developer local deploy state (deterministic per mnemonic)
|
|
||||||
deploys/localhost.json
|
|
||||||
|
|||||||
1
.husky/.gitignore
vendored
Normal file
1
.husky/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
_
|
||||||
4
.husky/commit-msg
Executable file
4
.husky/commit-msg
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
|
yarn dlx commitlint --edit $1
|
||||||
4
.husky/pre-commit
Executable file
4
.husky/pre-commit
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
|
yarn dlx lint-staged
|
||||||
@@ -11,12 +11,6 @@
|
|||||||
**/node_modules
|
**/node_modules
|
||||||
**/types
|
**/types
|
||||||
|
|
||||||
# deploy artifacts
|
|
||||||
deploys/old/
|
|
||||||
|
|
||||||
# auto-generated docs
|
|
||||||
docs/
|
|
||||||
|
|
||||||
# files
|
# files
|
||||||
*.env
|
*.env
|
||||||
*.log
|
*.log
|
||||||
@@ -25,3 +19,5 @@ coverage.json
|
|||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
|
||||||
|
contracts/p2pix.sol
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
plugins:
|
|
||||||
- prettier-plugin-solidity
|
|
||||||
arrowParens: avoid
|
arrowParens: avoid
|
||||||
bracketSpacing: true
|
bracketSpacing: true
|
||||||
endOfLine: auto
|
endOfLine: auto
|
||||||
|
importOrder: ["<THIRD_PARTY_MODULES>", "^[./]"]
|
||||||
|
importOrderParserPlugins: ["typescript"]
|
||||||
|
importOrderSeparation: true
|
||||||
|
importOrderSortSpecifiers: true
|
||||||
printWidth: 62
|
printWidth: 62
|
||||||
singleQuote: false
|
singleQuote: false
|
||||||
tabWidth: 2
|
tabWidth: 2
|
||||||
|
|||||||
17
.solcover.js
17
.solcover.js
@@ -1,22 +1,7 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
configureYulOptimizer: true,
|
|
||||||
solcOptimizerDetails: {
|
|
||||||
deduplicate: true,
|
|
||||||
cse: true,
|
|
||||||
constantOptimizer: true,
|
|
||||||
peephole: true,
|
|
||||||
jumpdestRemover: true,
|
|
||||||
yul: true,
|
|
||||||
// inliner: false,
|
|
||||||
// orderLiterals: true,
|
|
||||||
},
|
|
||||||
istanbulReporter: ["html", "lcov"],
|
istanbulReporter: ["html", "lcov"],
|
||||||
providerOptions: {
|
providerOptions: {
|
||||||
mnemonic: process.env.MNEMONIC,
|
mnemonic: process.env.MNEMONIC,
|
||||||
},
|
},
|
||||||
skipFiles: [
|
skipFiles: ["test"],
|
||||||
"test",
|
|
||||||
"core/BaseUtils.sol",
|
|
||||||
"core/OwnerSettings.sol",
|
|
||||||
],
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
"plugins": ["prettier"],
|
"plugins": ["prettier"],
|
||||||
"rules": {
|
"rules": {
|
||||||
"code-complexity": ["error", 8],
|
"code-complexity": ["error", 8],
|
||||||
"avoid-low-level-calls": "off",
|
|
||||||
"compiler-version": ["error", ">=0.8.4"],
|
"compiler-version": ["error", ">=0.8.4"],
|
||||||
"const-name-snakecase": "off",
|
"const-name-snakecase": "off",
|
||||||
"constructor-syntax": "error",
|
"constructor-syntax": "error",
|
||||||
@@ -11,14 +10,7 @@
|
|||||||
"error",
|
"error",
|
||||||
{ "ignoreConstructors": true }
|
{ "ignoreConstructors": true }
|
||||||
],
|
],
|
||||||
"function-max-lines": "off",
|
|
||||||
"gas-calldata-parameters": "off",
|
|
||||||
"gas-indexed-events": "off",
|
|
||||||
"gas-strict-inequalities": "off",
|
|
||||||
"gas-struct-packing": "off",
|
|
||||||
"interface-starts-with-i": "off",
|
|
||||||
"max-line-length": ["error", 120],
|
"max-line-length": ["error", 120],
|
||||||
"no-inline-assembly": "off",
|
|
||||||
"not-rely-on-time": "off",
|
"not-rely-on-time": "off",
|
||||||
"prettier/prettier": [
|
"prettier/prettier": [
|
||||||
"error",
|
"error",
|
||||||
@@ -26,7 +18,6 @@
|
|||||||
"endOfLine": "auto"
|
"endOfLine": "auto"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"reason-string": ["warn", { "maxLength": 64 }],
|
"reason-string": ["warn", { "maxLength": 64 }]
|
||||||
"use-natspec": "off"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
# directories
|
# directories
|
||||||
**/artifacts
|
**/artifacts
|
||||||
**/cache
|
|
||||||
**/node_modules
|
**/node_modules
|
||||||
deploys/
|
|
||||||
docs/
|
|
||||||
|
|||||||
546
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
Normal file
546
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
786
.yarn/releases/yarn-3.2.1.cjs
vendored
Executable file
786
.yarn/releases/yarn-3.2.1.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
942
.yarn/releases/yarn-4.9.2.cjs
vendored
942
.yarn/releases/yarn-4.9.2.cjs
vendored
File diff suppressed because one or more lines are too long
10
.yarnrc.yml
10
.yarnrc.yml
@@ -1,7 +1,7 @@
|
|||||||
compressionLevel: mixed
|
|
||||||
|
|
||||||
enableGlobalCache: false
|
|
||||||
|
|
||||||
nodeLinker: node-modules
|
nodeLinker: node-modules
|
||||||
|
|
||||||
yarnPath: .yarn/releases/yarn-4.9.2.cjs
|
plugins:
|
||||||
|
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
|
||||||
|
spec: "@yarnpkg/plugin-interactive-tools"
|
||||||
|
|
||||||
|
yarnPath: .yarn/releases/yarn-3.2.1.cjs
|
||||||
|
|||||||
91
README.md
91
README.md
@@ -55,23 +55,25 @@
|
|||||||
|
|
||||||
| Testnet | Token Address | P2pix Address | Reputation Address | Multicall Address |
|
| Testnet | Token Address | P2pix Address | Reputation Address | Multicall Address |
|
||||||
| ------- | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ |
|
| ------- | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ |
|
||||||
| Sepolia | 0x3eBE212377D847828eBb9D2a100f5c5EA1EF3A72 | 0xb7cDAE58C6e715Cfd795BB142041E43b9CB02497 | 0xFd1194A56995Ef7B62730F4061408e79d88E5207 | 0x2f7f9848A803E67d79C0C8aa42b663dCF6E1B5ed |
|
| Goerli | 0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00 | 0x2414817FF64A114d91eCFA16a834d3fCf69103d4 | 0x2CFD9354Ec7614fEf036EFd6A730dA1d5fC2762A | 0x8FE009992d96A86c7f0Bccdaf1eC3471E302a8a6 |
|
||||||
|
| Mumbai | 0xC86042E9F2977C62Da8c9dDF7F9c40fde4796A29 | 0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00 | 0x570445E3eF413bCDb5De79ed27B1c3840683e385 | 0x718B2C4DE4F9654E1349F610ff561249bfe1c418 |
|
||||||
|
|
||||||
<!-- All contracts deployed by 0x8dC06F985C131166570825F52447E8c88d64aE20 -->
|
<!-- All contracts deployed by 0x8dC06F985C131166570825F52447E8c88d64aE20 -->
|
||||||
<!-- https://sepolia.etherscan.io/address/0x3eBE212377D847828eBb9D2a100f5c5EA1EF3A72#code -->
|
<!-- https://goerli.etherscan.io/address/0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00#code -->
|
||||||
<!-- https://sepolia.etherscan.io/address/0xb7cDAE58C6e715Cfd795BB142041E43b9CB02497#code -->
|
<!-- https://goerli.etherscan.io/address/0x2414817FF64A114d91eCFA16a834d3fCf69103d4#code -->
|
||||||
<!-- https://sepolia.etherscan.io/address/0xFd1194A56995Ef7B62730F4061408e79d88E5207#code -->
|
<!-- https://goerli.etherscan.io/address/0x2CFD9354Ec7614fEf036EFd6A730dA1d5fC2762A#code -->
|
||||||
<!-- https://sepolia.etherscan.io/address/0x2f7f9848A803E67d79C0C8aa42b663dCF6E1B5ed#code -->
|
<!-- https://goerli.etherscan.io/address/0x8FE009992d96A86c7f0Bccdaf1eC3471E302a8a6#code -->
|
||||||
|
|
||||||
|
<!-- https://mumbai.polygonscan.com/address/0xC86042E9F2977C62Da8c9dDF7F9c40fde4796A29#code -->
|
||||||
|
<!-- https://mumbai.polygonscan.com/address/0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00#code -->
|
||||||
|
<!-- https://mumbai.polygonscan.com/address/0x570445e3ef413bcdb5de79ed27b1c3840683e385#code -->
|
||||||
|
<!-- https://mumbai.polygonscan.com/address/0x718B2C4DE4F9654E1349F610ff561249bfe1c418#code -->
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### Pre Requisites
|
### Pre Requisites
|
||||||
|
|
||||||
Before installing, create a `.env` file and set the authentication method and other env criteria as in `.env.example`.
|
Before installing, create a `.env` file and set a BIP-39 compatible mnemonic and other env criteria as in `.env.example`.
|
||||||
|
|
||||||
You can authenticate with either:
|
|
||||||
- `PRIVATE_KEY` — a raw hex private key (e.g. `0x123...`). Takes priority if both are set.
|
|
||||||
- `MNEMONIC` — a BIP-39 compatible 12-word mnemonic phrase. Used as fallback when `PRIVATE_KEY` is not set.
|
|
||||||
|
|
||||||
### Install
|
### Install
|
||||||
|
|
||||||
@@ -123,71 +125,36 @@ To grab deployment addresses you can just grab from deploys folder:
|
|||||||
import localhostDeploys from "p2pix-smart-contracts/deploys/localhost.json";
|
import localhostDeploys from "p2pix-smart-contracts/deploys/localhost.json";
|
||||||
```
|
```
|
||||||
|
|
||||||
## Deployment (Hardhat Ignition)
|
## Deploying to local environment
|
||||||
|
|
||||||
Deployments are orchestrated by
|
On the first teminal, use the following command and import some wallets to your Metamask, then connect to the network pointed:
|
||||||
[Hardhat Ignition](https://hardhat.org/ignition). Each module declares its
|
|
||||||
contracts; Ignition handles ordering, idempotency, and per-network state
|
|
||||||
under `ignition/deployments/`.
|
|
||||||
|
|
||||||
### Modules
|
|
||||||
|
|
||||||
- `ignition/modules/MockToken.ts` — ERC20 mock used in dev / testnets.
|
|
||||||
- `ignition/modules/Reputation.ts` — Reputation + Multicall.
|
|
||||||
- `ignition/modules/P2PIX.ts` — production deploy (no MockToken). Token
|
|
||||||
addresses passed via parameters (`tokens` + `allowed`).
|
|
||||||
- `ignition/modules/P2PIXWithMock.ts` — dev/test deploy. Wires Reputation +
|
|
||||||
MockToken and deploys P2PIX.
|
|
||||||
|
|
||||||
### Per-network parameters
|
|
||||||
|
|
||||||
Network-specific values (e.g. `defaultBlocks`, `validSigners`, MockToken
|
|
||||||
`supply`) live in `ignition/parameters/<network>.json`. Only
|
|
||||||
`localhost.json` is checked in; copy it to e.g. `sepolia.json` and set the
|
|
||||||
network values before running the deploy script.
|
|
||||||
|
|
||||||
### Local environment
|
|
||||||
|
|
||||||
On the first terminal:
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
yarn hardhat node
|
yarn hardhat node
|
||||||
```
|
```
|
||||||
|
|
||||||
On the second terminal:
|
On the second teminal, run the following commands:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
yarn deploy:mock --network localhost --parameters ignition/parameters/localhost.json
|
yarn deploy1:localhost
|
||||||
|
yarn deploy2:localhost
|
||||||
```
|
```
|
||||||
|
|
||||||
Addresses for every deployed contract are written to
|
**_NOTE_:** The second script transfers 2M tokens to the first wallet of the node.
|
||||||
`ignition/deployments/chain-31337/deployed_addresses.json` (this path is
|
To use the P2Pix smart contract first transfer some of the tokens to other wallets.
|
||||||
gitignored — local-only state).
|
|
||||||
|
|
||||||
### Testnets
|
## Deploying to testnets
|
||||||
|
|
||||||
|
Deploy to Ethereum's Goerli testnet:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
yarn deploy:mock --network sepolia
|
yarn deploy1:goerli
|
||||||
|
yarn deploy2:goerli
|
||||||
```
|
```
|
||||||
|
|
||||||
Requires the matching `ignition/parameters/sepolia.json` and the relevant
|
Deploy to Polygon's Mumbai testnet:
|
||||||
API keys in `.env`.
|
|
||||||
|
|
||||||
### Production (real tokens)
|
```sh
|
||||||
|
yarn deploy1:mumbai
|
||||||
Use the `P2PIX` module when the target network already has the ERC20
|
yarn deploy2:mumbai
|
||||||
tokens you want P2PIX to support — no MockToken is deployed.
|
```
|
||||||
|
|
||||||
1. Copy `ignition/parameters/prod.example.json` to
|
|
||||||
`ignition/parameters/<network>.json` and set:
|
|
||||||
- `defaultBlocks`, `validSigners`
|
|
||||||
- `tokens` — array of ERC20 addresses on the target network
|
|
||||||
- `allowed` — array of booleans, same length as `tokens`
|
|
||||||
2. Run:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn deploy --network <network> --parameters ignition/parameters/<network>.json
|
|
||||||
```
|
|
||||||
|
|
||||||
The deployed Reputation/Multicall/P2PIX addresses are written to
|
|
||||||
`ignition/deployments/chain-<id>/deployed_addresses.json`.
|
|
||||||
|
|||||||
4
artifacts/contracts/Reputation.sol/Reputation.dbg.json
Normal file
4
artifacts/contracts/Reputation.sol/Reputation.dbg.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
61
artifacts/contracts/Reputation.sol/Reputation.json
Normal file
61
artifacts/contracts/Reputation.sol/Reputation.json
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "Reputation",
|
||||||
|
"sourceName": "contracts/Reputation.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"stateMutability": "payable",
|
||||||
|
"type": "constructor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_userCredit",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "limiter",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_spendLimit",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "pure",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "magicValue",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "maxLimit",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x6080806040526102c990816100128239f3fe6080806040526004908136101561001557600080fd5b600091823560e01c9182631a861d2614610254575081634d2b179114610085575063a4b345571461004557600080fd5b3461008257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610082576020604051643a352944008152f35b80fd5b82346100825760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261008257813591620f42408381029081048403610228578380029380850481149015171561022857643a352944009384018094116102285760b58471010000000000000000000000000000000000811015610211575b80690100000000000000000062010000921015610204575b650100000000008110156101f7575b63010000008110156101ea575b010260121c9360019480820401851c80820401851c80820401851c80820401851c80820401851c80820401851c80820401851c8080920410908181146101be57039004830180931161019257602083604051908152f35b9060116024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b6024856012867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60101c9160081b9161013b565b60201c9160101b9161012e565b60401c9160201b9161011f565b5068b500000000000000009050608085901c610107565b6024836011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b83903461028f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f5780620f424060209252f35b5080fdfea26469706673582212202029db6a087d223f768aabc1fe8120c7f9d7e525e947a354114a42f80a3955db64736f6c63430008130033",
|
||||||
|
"deployedBytecode": "0x6080806040526004908136101561001557600080fd5b600091823560e01c9182631a861d2614610254575081634d2b179114610085575063a4b345571461004557600080fd5b3461008257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610082576020604051643a352944008152f35b80fd5b82346100825760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261008257813591620f42408381029081048403610228578380029380850481149015171561022857643a352944009384018094116102285760b58471010000000000000000000000000000000000811015610211575b80690100000000000000000062010000921015610204575b650100000000008110156101f7575b63010000008110156101ea575b010260121c9360019480820401851c80820401851c80820401851c80820401851c80820401851c80820401851c80820401851c8080920410908181146101be57039004830180931161019257602083604051908152f35b9060116024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b6024856012867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60101c9160081b9161013b565b60201c9160101b9161012e565b60401c9160201b9161011f565b5068b500000000000000009050608085901c610107565b6024836011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b83903461028f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028f5780620f424060209252f35b5080fdfea26469706673582212202029db6a087d223f768aabc1fe8120c7f9d7e525e947a354114a42f80a3955db64736f6c63430008130033",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../build-info/f220dbc6fa6f1dbf5c2cb562d65f0725.json"
|
||||||
|
}
|
||||||
686
artifacts/contracts/core/BaseUtils.sol/BaseUtils.json
Normal file
686
artifacts/contracts/core/BaseUtils.sol/BaseUtils.json
Normal file
@@ -0,0 +1,686 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "BaseUtils",
|
||||||
|
"sourceName": "contracts/core/BaseUtils.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AddressDenied",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AlreadyReleased",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AmountNotAllowed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "DecOverflow",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "EmptyPixTarget",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "InvalidDeposit",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "InvalidSigner",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "LengthMismatch",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "LockExpired",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "LoopOverflow",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "MaxBalExceeded",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NoTokens",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NotEnoughTokens",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NotExpired",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NotInitialized",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "OnlySeller",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "Reentrancy",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "StaticCallFailed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "TokenDenied",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "TxAlreadyUsed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "Unauthorized",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "AllowedERC20Updated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "DepositWithdrawn",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "owner",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "FundsWithdrawn",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "buyer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "lockID",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockAdded",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "blocks",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockBlocksUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "buyer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "lockId",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockReleased",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "buyer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "lockId",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockReturned",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "user",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "newOwner",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "OwnerUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "reputation",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ReputationUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "bytes32",
|
||||||
|
"name": "merkleRoot",
|
||||||
|
"type": "bytes32"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "RootUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "forwarder",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "TrustedForwarderUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ValidSet",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "signers",
|
||||||
|
"type": "address[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ValidSignersUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "_addr",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "_castAddrToKey",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_key",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "pure",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_key",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "_castKeyToAddr",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "_addr",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "pure",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "contract ERC20",
|
||||||
|
"name": "erc20",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "allowedERC20s",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "defaultLockBlocks",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "string",
|
||||||
|
"name": "str",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "getStr",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bytes32",
|
||||||
|
"name": "strEnc",
|
||||||
|
"type": "bytes32"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "pure",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "isTrustedForwarder",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "owner",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "reputation",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "contract IReputation",
|
||||||
|
"name": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "sellerKey",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "sellerAllowList",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bytes32",
|
||||||
|
"name": "root",
|
||||||
|
"type": "bytes32"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_blocks",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setDefaultLockBlocks",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "newOwner",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setOwner",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "contract IReputation",
|
||||||
|
"name": "_reputation",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setReputation",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "forwarders",
|
||||||
|
"type": "address[]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bool[]",
|
||||||
|
"name": "states",
|
||||||
|
"type": "bool[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setTrustedFowarders",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "_validSigners",
|
||||||
|
"type": "address[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setValidSigners",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "_tokens",
|
||||||
|
"type": "address[]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bool[]",
|
||||||
|
"name": "_states",
|
||||||
|
"type": "bool[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "tokenSettings",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bytes32",
|
||||||
|
"name": "message",
|
||||||
|
"type": "bytes32"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "usedTransactions",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "used",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "signer",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "validBacenSigners",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "valid",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "withdrawBalance",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x",
|
||||||
|
"deployedBytecode": "0x",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
10
artifacts/contracts/core/Constants.sol/Constants.json
Normal file
10
artifacts/contracts/core/Constants.sol/Constants.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "Constants",
|
||||||
|
"sourceName": "contracts/core/Constants.sol",
|
||||||
|
"abi": [],
|
||||||
|
"bytecode": "0x",
|
||||||
|
"deployedBytecode": "0x",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
10
artifacts/contracts/core/DataTypes.sol/DataTypes.json
Normal file
10
artifacts/contracts/core/DataTypes.sol/DataTypes.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "DataTypes",
|
||||||
|
"sourceName": "contracts/core/DataTypes.sol",
|
||||||
|
"abi": [],
|
||||||
|
"bytecode": "0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220a40e6f94f4c0b9a9cdd9ac64f98613aece8f5a3f084ee1eca35eba466df9810964736f6c63430008130033",
|
||||||
|
"deployedBytecode": "0x600080fdfea2646970667358221220a40e6f94f4c0b9a9cdd9ac64f98613aece8f5a3f084ee1eca35eba466df9810964736f6c63430008130033",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
371
artifacts/contracts/core/EventAndErrors.sol/EventAndErrors.json
Normal file
371
artifacts/contracts/core/EventAndErrors.sol/EventAndErrors.json
Normal file
@@ -0,0 +1,371 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "EventAndErrors",
|
||||||
|
"sourceName": "contracts/core/EventAndErrors.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AddressDenied",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AlreadyReleased",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AmountNotAllowed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "DecOverflow",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "EmptyPixTarget",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "InvalidDeposit",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "InvalidSigner",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "LengthMismatch",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "LockExpired",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "LoopOverflow",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "MaxBalExceeded",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NoTokens",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NotEnoughTokens",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NotExpired",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NotInitialized",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "OnlySeller",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "StaticCallFailed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "TokenDenied",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "TxAlreadyUsed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "AllowedERC20Updated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "DepositWithdrawn",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "owner",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "FundsWithdrawn",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "buyer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "lockID",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockAdded",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "blocks",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockBlocksUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "buyer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "lockId",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockReleased",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "buyer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "lockId",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockReturned",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "reputation",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ReputationUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "bytes32",
|
||||||
|
"name": "merkleRoot",
|
||||||
|
"type": "bytes32"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "RootUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "forwarder",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "TrustedForwarderUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ValidSet",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "signers",
|
||||||
|
"type": "address[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ValidSignersUpdated",
|
||||||
|
"type": "event"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x",
|
||||||
|
"deployedBytecode": "0x",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
605
artifacts/contracts/core/OwnerSettings.sol/OwnerSettings.json
Normal file
605
artifacts/contracts/core/OwnerSettings.sol/OwnerSettings.json
Normal file
@@ -0,0 +1,605 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "OwnerSettings",
|
||||||
|
"sourceName": "contracts/core/OwnerSettings.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AddressDenied",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AlreadyReleased",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AmountNotAllowed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "DecOverflow",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "EmptyPixTarget",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "InvalidDeposit",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "InvalidSigner",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "LengthMismatch",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "LockExpired",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "LoopOverflow",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "MaxBalExceeded",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NoTokens",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NotEnoughTokens",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NotExpired",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NotInitialized",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "OnlySeller",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "StaticCallFailed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "TokenDenied",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "TxAlreadyUsed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "Unauthorized",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "AllowedERC20Updated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "DepositWithdrawn",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "owner",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "FundsWithdrawn",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "buyer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "lockID",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockAdded",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "blocks",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockBlocksUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "buyer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "lockId",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "amount",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockReleased",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "buyer",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "lockId",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockReturned",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "user",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "newOwner",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "OwnerUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "reputation",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ReputationUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "bytes32",
|
||||||
|
"name": "merkleRoot",
|
||||||
|
"type": "bytes32"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "RootUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "forwarder",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "TrustedForwarderUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "seller",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ValidSet",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "signers",
|
||||||
|
"type": "address[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ValidSignersUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "contract ERC20",
|
||||||
|
"name": "erc20",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "allowedERC20s",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "defaultLockBlocks",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "isTrustedForwarder",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "owner",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "reputation",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "contract IReputation",
|
||||||
|
"name": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "sellerKey",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "sellerAllowList",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bytes32",
|
||||||
|
"name": "root",
|
||||||
|
"type": "bytes32"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_blocks",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setDefaultLockBlocks",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "newOwner",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setOwner",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "contract IReputation",
|
||||||
|
"name": "_reputation",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setReputation",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "forwarders",
|
||||||
|
"type": "address[]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bool[]",
|
||||||
|
"name": "states",
|
||||||
|
"type": "bool[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setTrustedFowarders",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "_validSigners",
|
||||||
|
"type": "address[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setValidSigners",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "_tokens",
|
||||||
|
"type": "address[]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bool[]",
|
||||||
|
"name": "_states",
|
||||||
|
"type": "bool[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "tokenSettings",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "signer",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "validBacenSigners",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "valid",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "withdrawBalance",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x",
|
||||||
|
"deployedBytecode": "0x",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
4
artifacts/contracts/lib/auth/Owned.sol/Owned.dbg.json
Normal file
4
artifacts/contracts/lib/auth/Owned.sol/Owned.dbg.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
61
artifacts/contracts/lib/auth/Owned.sol/Owned.json
Normal file
61
artifacts/contracts/lib/auth/Owned.sol/Owned.json
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "Owned",
|
||||||
|
"sourceName": "contracts/lib/auth/Owned.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "Unauthorized",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "user",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "newOwner",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "OwnerUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "owner",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "newOwner",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setOwner",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x",
|
||||||
|
"deployedBytecode": "0x",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "IReputation",
|
||||||
|
"sourceName": "contracts/lib/interfaces/IReputation.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_userCredit",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "limiter",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_spendLimit",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "pure",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x",
|
||||||
|
"deployedBytecode": "0x",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "Context",
|
||||||
|
"sourceName": "contracts/lib/metatx/ERC2771Context.sol",
|
||||||
|
"abi": [],
|
||||||
|
"bytecode": "0x",
|
||||||
|
"deployedBytecode": "0x",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "ERC2771Context",
|
||||||
|
"sourceName": "contracts/lib/metatx/ERC2771Context.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "isTrustedForwarder",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x",
|
||||||
|
"deployedBytecode": "0x",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
337
artifacts/contracts/lib/mock/mockToken.sol/MockToken.json
Normal file
337
artifacts/contracts/lib/mock/mockToken.sol/MockToken.json
Normal file
File diff suppressed because one or more lines are too long
4
artifacts/contracts/lib/tokens/ERC20.sol/ERC20.dbg.json
Normal file
4
artifacts/contracts/lib/tokens/ERC20.sol/ERC20.dbg.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
308
artifacts/contracts/lib/tokens/ERC20.sol/ERC20.json
Normal file
308
artifacts/contracts/lib/tokens/ERC20.sol/ERC20.json
Normal file
@@ -0,0 +1,308 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "ERC20",
|
||||||
|
"sourceName": "contracts/lib/tokens/ERC20.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": "amount",
|
||||||
|
"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": "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": "",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "",
|
||||||
|
"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": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "balanceOf",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "decimals",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint8",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "name",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "string",
|
||||||
|
"name": "",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "string",
|
||||||
|
"name": "",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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": {}
|
||||||
|
}
|
||||||
4
artifacts/contracts/lib/utils/ECDSA.sol/ECDSA.dbg.json
Normal file
4
artifacts/contracts/lib/utils/ECDSA.sol/ECDSA.dbg.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
16
artifacts/contracts/lib/utils/ECDSA.sol/ECDSA.json
Normal file
16
artifacts/contracts/lib/utils/ECDSA.sol/ECDSA.json
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "ECDSA",
|
||||||
|
"sourceName": "contracts/lib/utils/ECDSA.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "InvalidSignature",
|
||||||
|
"type": "error"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212201f6fe8a460e1235bb7e19365d8e3cc56b718d44f5db82f5fa3c90d3c7da59ebf64736f6c63430008130033",
|
||||||
|
"deployedBytecode": "0x600080fdfea26469706673582212201f6fe8a460e1235bb7e19365d8e3cc56b718d44f5db82f5fa3c90d3c7da59ebf64736f6c63430008130033",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "MerkleProofLib",
|
||||||
|
"sourceName": "contracts/lib/utils/MerkleProofLib.sol",
|
||||||
|
"abi": [],
|
||||||
|
"bytecode": "0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220030f589a2a329a8fd0f451393f1e14e20eb0e1f782beb297fe6aade2ffebc0b564736f6c63430008130033",
|
||||||
|
"deployedBytecode": "0x600080fdfea2646970667358221220030f589a2a329a8fd0f451393f1e14e20eb0e1f782beb297fe6aade2ffebc0b564736f6c63430008130033",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
116
artifacts/contracts/lib/utils/Multicall.sol/Multicall.json
Normal file
116
artifacts/contracts/lib/utils/Multicall.sol/Multicall.json
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "Multicall",
|
||||||
|
"sourceName": "contracts/lib/utils/Multicall.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"stateMutability": "payable",
|
||||||
|
"type": "constructor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "string",
|
||||||
|
"name": "reason",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "CallFailed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "target",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bytes",
|
||||||
|
"name": "callData",
|
||||||
|
"type": "bytes"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct Multicall.Call[]",
|
||||||
|
"name": "calls",
|
||||||
|
"type": "tuple[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "mtc1",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bytes[]",
|
||||||
|
"name": "",
|
||||||
|
"type": "bytes[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "target",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bytes",
|
||||||
|
"name": "callData",
|
||||||
|
"type": "bytes"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct Multicall.Call[]",
|
||||||
|
"name": "calls",
|
||||||
|
"type": "tuple[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "mtc2",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bytes32",
|
||||||
|
"name": "",
|
||||||
|
"type": "bytes32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "success",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bytes",
|
||||||
|
"name": "returnData",
|
||||||
|
"type": "bytes"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"internalType": "struct Multicall.Result[]",
|
||||||
|
"name": "",
|
||||||
|
"type": "tuple[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x6080806040526107fb90816100128239f3fe604060808152600436101561001357600080fd5b6000803560e01c9182631b57b72f1461003c5750506386575ee91461003757600080fd5b610362565b3461015e5761004a36610162565b61005e61005982949394610523565b6104df565b928184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061008c83610523565b01855b81811061013e575050845b8281106100b6578351806100b2874380409084610238565b0390f35b806100cd6100c86101399386866105c7565b61060c565b87806100da8488886105c7565b92816100eb6020958681019061062d565b91906100fb8c518094819361067e565b03925af1906101086106c6565b9061011b6101146104ba565b9315158452565b8201526101288288610755565b526101338187610755565b50610769565b61009a565b6020906101496104ba565b8881528260608183015282890101520161008f565b5080fd5b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101cd5760043567ffffffffffffffff928382116101cd57806023830112156101cd5781600401359384116101cd5760248460051b830101116101cd576024019190565b600080fd5b60005b8381106101e55750506000910152565b81810151838201526020016101d5565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610231815180928187528780880191016101d2565b0116010190565b9160608301918352602090818401526040926060848201528451809352608081018260808560051b8401019601946000925b85841061027b575050505050505090565b9091929394959685806102ca837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80866001960301885286838d51805115158452015191818582015201906101f5565b99019401940192959493919061026a565b90604082019082526020604081840152835180925260608301928160608460051b8301019501936000915b8483106103165750505050505090565b9091929394958480610352837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa086600196030187528a516101f5565b9801930193019194939290610306565b346101cd5761037036610162565b6103798161053b565b916000805b83811061039457604051806100b28743836102db565b6103a26100c88286866105c7565b82806103bc6103b28589896105c7565b602081019061062d565b82604095926103cf87518094819361067e565b03925af1906103dc6106c6565b918290156103fa575050906103f5916101288288610755565b61037e565b604483929351106104535761042061044f916004809401602480915183010191016106ec565b92519283927fb5e1dc2d0000000000000000000000000000000000000000000000000000000084528301610744565b0390fd5b82517fb5e1dc2d0000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604490fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051906040820182811067ffffffffffffffff8211176104da57604052565b61048b565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff8211176104da57604052565b67ffffffffffffffff81116104da5760051b60200190565b9061054861005983610523565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06105768294610523565b019060005b82811061058757505050565b80606060208093850101520161057b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908110156106075760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1813603018212156101cd570190565b610598565b3573ffffffffffffffffffffffffffffffffffffffff811681036101cd5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101cd570180359067ffffffffffffffff82116101cd576020019181360383136101cd57565b908092918237016000815290565b67ffffffffffffffff81116104da57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b3d156106e7573d906106da6100598361068c565b9182523d6000602084013e565b606090565b6020818303126101cd5780519067ffffffffffffffff82116101cd570181601f820112156101cd5780516107226100598261068c565b92818452602082840101116101cd5761074191602080850191016101d2565b90565b9060206107419281815201906101f5565b80518210156106075760209160051b010190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107965760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c86e7cf81738039d37cf5e545b323288faae992e0d08dec8c43f2f2b31f35f664736f6c63430008130033",
|
||||||
|
"deployedBytecode": "0x604060808152600436101561001357600080fd5b6000803560e01c9182631b57b72f1461003c5750506386575ee91461003757600080fd5b610362565b3461015e5761004a36610162565b61005e61005982949394610523565b6104df565b928184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061008c83610523565b01855b81811061013e575050845b8281106100b6578351806100b2874380409084610238565b0390f35b806100cd6100c86101399386866105c7565b61060c565b87806100da8488886105c7565b92816100eb6020958681019061062d565b91906100fb8c518094819361067e565b03925af1906101086106c6565b9061011b6101146104ba565b9315158452565b8201526101288288610755565b526101338187610755565b50610769565b61009a565b6020906101496104ba565b8881528260608183015282890101520161008f565b5080fd5b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101cd5760043567ffffffffffffffff928382116101cd57806023830112156101cd5781600401359384116101cd5760248460051b830101116101cd576024019190565b600080fd5b60005b8381106101e55750506000910152565b81810151838201526020016101d5565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610231815180928187528780880191016101d2565b0116010190565b9160608301918352602090818401526040926060848201528451809352608081018260808560051b8401019601946000925b85841061027b575050505050505090565b9091929394959685806102ca837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80866001960301885286838d51805115158452015191818582015201906101f5565b99019401940192959493919061026a565b90604082019082526020604081840152835180925260608301928160608460051b8301019501936000915b8483106103165750505050505090565b9091929394958480610352837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa086600196030187528a516101f5565b9801930193019194939290610306565b346101cd5761037036610162565b6103798161053b565b916000805b83811061039457604051806100b28743836102db565b6103a26100c88286866105c7565b82806103bc6103b28589896105c7565b602081019061062d565b82604095926103cf87518094819361067e565b03925af1906103dc6106c6565b918290156103fa575050906103f5916101288288610755565b61037e565b604483929351106104535761042061044f916004809401602480915183010191016106ec565b92519283927fb5e1dc2d0000000000000000000000000000000000000000000000000000000084528301610744565b0390fd5b82517fb5e1dc2d0000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604490fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051906040820182811067ffffffffffffffff8211176104da57604052565b61048b565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff8211176104da57604052565b67ffffffffffffffff81116104da5760051b60200190565b9061054861005983610523565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06105768294610523565b019060005b82811061058757505050565b80606060208093850101520161057b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908110156106075760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1813603018212156101cd570190565b610598565b3573ffffffffffffffffffffffffffffffffffffffff811681036101cd5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101cd570180359067ffffffffffffffff82116101cd576020019181360383136101cd57565b908092918237016000815290565b67ffffffffffffffff81116104da57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b3d156106e7573d906106da6100598361068c565b9182523d6000602084013e565b606090565b6020818303126101cd5780519067ffffffffffffffff82116101cd570181601f820112156101cd5780516107226100598261068c565b92818452602082840101116101cd5761074191602080850191016101d2565b90565b9060206107419281815201906101f5565b80518210156106075760209160051b010190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107965760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c86e7cf81738039d37cf5e545b323288faae992e0d08dec8c43f2f2b31f35f664736f6c63430008130033",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
@@ -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": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/cd64a64b3749ac90866585a6471cc921.json"
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "SafeTransferLib",
|
||||||
|
"sourceName": "contracts/lib/utils/SafeTransferLib.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "ETHTransferFailed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "TransferFailed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "TransferFromFailed",
|
||||||
|
"type": "error"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220007e83452e6dfca4997d94ba5608da3c2308815d3239b1810079c74651f15a7464736f6c63430008130033",
|
||||||
|
"deployedBytecode": "0x600080fdfea2646970667358221220007e83452e6dfca4997d94ba5608da3c2308815d3239b1810079c74651f15a7464736f6c63430008130033",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
||||||
4
artifacts/contracts/p2pix.sol/P2PIX.dbg.json
Normal file
4
artifacts/contracts/p2pix.sol/P2PIX.dbg.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../build-info/f220dbc6fa6f1dbf5c2cb562d65f0725.json"
|
||||||
|
}
|
||||||
1123
artifacts/contracts/p2pix.sol/P2PIX.json
Normal file
1123
artifacts/contracts/p2pix.sol/P2PIX.json
Normal file
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity ^0.8.19;
|
pragma solidity 0.8.19;
|
||||||
|
|
||||||
import { IReputation } from "./lib/interfaces/IReputation.sol";
|
import { IReputation } from "./lib/interfaces/IReputation.sol";
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity ^0.8.19;
|
pragma solidity 0.8.19;
|
||||||
|
|
||||||
import { ERC20, OwnerSettings } from "contracts/core/OwnerSettings.sol";
|
import { ERC20, OwnerSettings } from "./OwnerSettings.sol";
|
||||||
|
|
||||||
import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
|
import { ECDSA } from "../lib/utils/ECDSA.sol";
|
||||||
import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol";
|
import { MerkleProofLib as Merkle } from "../lib/utils/MerkleProofLib.sol";
|
||||||
import { MerkleProof as Merkle } from "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
|
import { ReentrancyGuard } from "../lib/utils/ReentrancyGuard.sol";
|
||||||
import { ReentrancyGuard } from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
|
|
||||||
|
|
||||||
abstract contract BaseUtils is
|
abstract contract BaseUtils is
|
||||||
OwnerSettings,
|
OwnerSettings,
|
||||||
@@ -21,7 +20,7 @@ abstract contract BaseUtils is
|
|||||||
|
|
||||||
/// ███ Helper FX ██████████████████████████████████████████████████████████
|
/// ███ Helper FX ██████████████████████████████████████████████████████████
|
||||||
function _setUsedTransactions(bytes32 message) internal {
|
function _setUsedTransactions(bytes32 message) internal {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
sstore(message, true)
|
sstore(message, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -29,14 +28,16 @@ abstract contract BaseUtils is
|
|||||||
function usedTransactions(
|
function usedTransactions(
|
||||||
bytes32 message
|
bytes32 message
|
||||||
) public view returns (bool used) {
|
) public view returns (bool used) {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
used := sload(message)
|
used := sload(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _signerCheck(
|
function _signerCheck(
|
||||||
bytes32 _message,
|
bytes32 _message,
|
||||||
bytes calldata _signature
|
bytes32 _r,
|
||||||
|
bytes32 _s,
|
||||||
|
uint8 _v
|
||||||
) internal view {
|
) internal view {
|
||||||
if (usedTransactions(_message))
|
if (usedTransactions(_message))
|
||||||
revert TxAlreadyUsed();
|
revert TxAlreadyUsed();
|
||||||
@@ -45,9 +46,12 @@ abstract contract BaseUtils is
|
|||||||
!validBacenSigners(
|
!validBacenSigners(
|
||||||
_castAddrToKey(
|
_castAddrToKey(
|
||||||
ECDSA.recover(
|
ECDSA.recover(
|
||||||
MessageHashUtils
|
ECDSA.toEthSignedMessageHash(
|
||||||
.toEthSignedMessageHash(_message),
|
_message
|
||||||
_signature
|
),
|
||||||
|
_v,
|
||||||
|
_r,
|
||||||
|
_s
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -71,7 +75,7 @@ abstract contract BaseUtils is
|
|||||||
function _castBool(
|
function _castBool(
|
||||||
bool _valid
|
bool _valid
|
||||||
) internal pure returns (uint256 _validCasted) {
|
) internal pure returns (uint256 _validCasted) {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
_validCasted := _valid
|
_validCasted := _valid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,7 +84,7 @@ abstract contract BaseUtils is
|
|||||||
string memory str
|
string memory str
|
||||||
) public pure returns (bytes32 strEnc) {
|
) public pure returns (bytes32 strEnc) {
|
||||||
bytes memory enc = bytes(abi.encodePacked(str));
|
bytes memory enc = bytes(abi.encodePacked(str));
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
if lt(0x20, mload(enc)) {
|
if lt(0x20, mload(enc)) {
|
||||||
invalid()
|
invalid()
|
||||||
}
|
}
|
||||||
@@ -89,15 +93,15 @@ abstract contract BaseUtils is
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _setSellerBalance(
|
function _setSellerBalance(
|
||||||
address _sellerKey,
|
uint256 _sellerKey,
|
||||||
ERC20 _erc20,
|
ERC20 _erc20,
|
||||||
uint256 _packed,
|
uint256 _packed,
|
||||||
bytes32 _pixTarget
|
bytes32 _pixTarget
|
||||||
) internal {
|
) internal {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
mstore(0x20, _erc20)
|
mstore(0x20, _erc20)
|
||||||
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
||||||
mstore(0x00, _sellerKey)
|
mstore(0x00, shr(0xc, _sellerKey))
|
||||||
let _loc := keccak256(0x0c, 0x34)
|
let _loc := keccak256(0x0c, 0x34)
|
||||||
sstore(add(_loc, 0x01), _packed)
|
sstore(add(_loc, 0x01), _packed)
|
||||||
sstore(_loc, _pixTarget)
|
sstore(_loc, _pixTarget)
|
||||||
@@ -105,55 +109,55 @@ abstract contract BaseUtils is
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _setValidState(
|
function _setValidState(
|
||||||
address _sellerKey,
|
uint256 _sellerKey,
|
||||||
ERC20 _erc20,
|
ERC20 _erc20,
|
||||||
uint256 _packed
|
uint256 _packed
|
||||||
) internal {
|
) internal {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
mstore(0x20, _erc20)
|
mstore(0x20, _erc20)
|
||||||
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
||||||
mstore(0x00, _sellerKey)
|
mstore(0x00, shr(0xc, _sellerKey))
|
||||||
let _loc := keccak256(0x0c, 0x34)
|
let _loc := keccak256(0x0c, 0x34)
|
||||||
sstore(add(_loc, 0x01), _packed)
|
sstore(add(_loc, 0x01), _packed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _addSellerBalance(
|
function _addSellerBalance(
|
||||||
address _sellerKey,
|
uint256 _sellerKey,
|
||||||
ERC20 _erc20,
|
ERC20 _erc20,
|
||||||
uint256 _amount
|
uint256 _amount
|
||||||
) internal {
|
) internal {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
mstore(0x20, _erc20)
|
mstore(0x20, _erc20)
|
||||||
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
||||||
mstore(0x00, _sellerKey)
|
mstore(0x00, shr(0xc, _sellerKey))
|
||||||
let _loc := add(keccak256(0x0c, 0x34), 0x01)
|
let _loc := add(keccak256(0x0c, 0x34), 0x01)
|
||||||
sstore(_loc, add(sload(_loc), _amount))
|
sstore(_loc, add(sload(_loc), _amount))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _decSellerBalance(
|
function _decSellerBalance(
|
||||||
address _sellerKey,
|
uint256 _sellerKey,
|
||||||
ERC20 _erc20,
|
ERC20 _erc20,
|
||||||
uint256 _amount
|
uint256 _amount
|
||||||
) internal {
|
) internal {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
mstore(0x20, _erc20)
|
mstore(0x20, _erc20)
|
||||||
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
||||||
mstore(0x00, _sellerKey)
|
mstore(0x00, shr(0xc, _sellerKey))
|
||||||
let _loc := add(keccak256(0x0c, 0x34), 0x01)
|
let _loc := add(keccak256(0x0c, 0x34), 0x01)
|
||||||
sstore(_loc, sub(sload(_loc), _amount))
|
sstore(_loc, sub(sload(_loc), _amount))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function __sellerBalance(
|
function __sellerBalance(
|
||||||
address _sellerKey,
|
uint256 _sellerKey,
|
||||||
ERC20 _erc20
|
ERC20 _erc20
|
||||||
) internal view returns (uint256 _packed) {
|
) internal view returns (uint256 _packed) {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
mstore(0x20, _erc20)
|
mstore(0x20, _erc20)
|
||||||
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
||||||
mstore(0x00, _sellerKey)
|
mstore(0x00, shr(0xc, _sellerKey))
|
||||||
_packed := sload(add(keccak256(0x0c, 0x34), 0x01))
|
_packed := sload(add(keccak256(0x0c, 0x34), 0x01))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,7 +169,7 @@ abstract contract BaseUtils is
|
|||||||
address _addr
|
address _addr
|
||||||
) public pure returns (uint256 _key) {
|
) public pure returns (uint256 _key) {
|
||||||
// _key = uint256(uint160(address(_addr))) << 12;
|
// _key = uint256(uint160(address(_addr))) << 12;
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
_key := shl(0xc, _addr)
|
_key := shl(0xc, _addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -174,7 +178,7 @@ abstract contract BaseUtils is
|
|||||||
uint256 _key
|
uint256 _key
|
||||||
) public pure returns (address _addr) {
|
) public pure returns (address _addr) {
|
||||||
// _addr = address(uint160(uint256(_key >> 12)));
|
// _addr = address(uint160(uint256(_key >> 12)));
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
_addr := shr(0xc, _key)
|
_addr := shr(0xc, _key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +1,22 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity ^0.8.19;
|
pragma solidity 0.8.19;
|
||||||
|
|
||||||
abstract contract Constants {
|
abstract contract Constants {
|
||||||
/// ███ Constants ██████████████████████████████████████████████████████████
|
/// ███ Constants ██████████████████████████████████████████████████████████
|
||||||
|
|
||||||
uint256 internal constant _ROOT_UPDATED_EVENT_SIGNATURE =
|
uint256 constant _ROOT_UPDATED_EVENT_SIGNATURE =
|
||||||
0x0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632;
|
0x0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632;
|
||||||
uint256
|
uint256 constant _ALLOWED_ERC20_UPDATED_EVENT_SIGNATURE =
|
||||||
internal constant _ALLOWED_ERC20_UPDATED_EVENT_SIGNATURE =
|
|
||||||
0x5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a;
|
0x5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a;
|
||||||
uint256
|
uint256 constant _TRUSTED_FORWARDER_UPDATED_EVENT_SIGNATURE =
|
||||||
internal constant _TRUSTED_FORWARDER_UPDATED_EVENT_SIGNATURE =
|
|
||||||
0xbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df92;
|
0xbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df92;
|
||||||
|
|
||||||
/// @dev Seller casted to key => Seller's allowlist merkleroot.
|
/// @dev Seller casted to key => Seller's allowlist merkleroot.
|
||||||
/// mapping(uint256 => bytes32) public sellerAllowList;
|
/// mapping(uint256 => bytes32) public sellerAllowList;
|
||||||
uint256 internal constant _SELLER_ALLOWLIST_SLOT_SEED =
|
uint256 constant _SELLER_ALLOWLIST_SLOT_SEED = 0x74dfee70;
|
||||||
0x74dfee70;
|
|
||||||
/// @dev Tokens allowed to serve as the underlying amount of a deposit.
|
/// @dev Tokens allowed to serve as the underlying amount of a deposit.
|
||||||
/// mapping(ERC20 => bool) public allowedERC20s;
|
/// mapping(ERC20 => bool) public allowedERC20s;
|
||||||
uint256 internal constant _ALLOWED_ERC20_SLOT_SEED =
|
uint256 constant _ALLOWED_ERC20_SLOT_SEED = 0xcbc9d1c4;
|
||||||
0xcbc9d1c4;
|
|
||||||
|
|
||||||
/// @dev `balance` max. value = 10**26.
|
/// @dev `balance` max. value = 10**26.
|
||||||
/// @dev `pixTarget` keys are restricted to 160 bits.
|
/// @dev `pixTarget` keys are restricted to 160 bits.
|
||||||
@@ -36,21 +32,16 @@ abstract contract Constants {
|
|||||||
/// mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
/// mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
||||||
/// mstore(0x00, seller)
|
/// mstore(0x00, seller)
|
||||||
/// let value := sload(keccak256(0x0c, 0x34)).
|
/// let value := sload(keccak256(0x0c, 0x34)).
|
||||||
uint256 internal constant _SELLER_BALANCE_SLOT_SEED =
|
uint256 constant _SELLER_BALANCE_SLOT_SEED = 0x739094b1;
|
||||||
0x739094b1;
|
|
||||||
|
|
||||||
/// @dev The bitmask of `sellerBalance` entry.
|
/// @dev The bitmask of `sellerBalance` entry.
|
||||||
uint256 internal constant BITMASK_SB_ENTRY =
|
uint256 constant BITMASK_SB_ENTRY = (1 << 94) - 1;
|
||||||
(1 << 94) - 1;
|
|
||||||
/// @dev The bit position of `valid` in `sellerBalance`.
|
/// @dev The bit position of `valid` in `sellerBalance`.
|
||||||
uint256 internal constant BITPOS_VALID = 95;
|
uint256 constant BITPOS_VALID = 95;
|
||||||
|
|
||||||
/// @dev The scalar of BRZ token.
|
/// @dev The scalar of BRZ token.
|
||||||
uint256 internal constant WAD = 1e18;
|
uint256 constant WAD = 1e18;
|
||||||
uint256 internal constant MAXBALANCE_UPPERBOUND =
|
uint256 constant MAXBALANCE_UPPERBOUND = 1e8 ether;
|
||||||
1e8 ether;
|
uint256 constant REPUTATION_LOWERBOUND = 1e2 ether;
|
||||||
uint256 internal constant REPUTATION_LOWERBOUND =
|
uint256 constant LOCKAMOUNT_UPPERBOUND = 1e6 ether;
|
||||||
1e2 ether;
|
|
||||||
uint256 internal constant LOCKAMOUNT_UPPERBOUND =
|
|
||||||
1e6 ether;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity ^0.8.19;
|
pragma solidity 0.8.19;
|
||||||
|
|
||||||
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
import { ERC20 } from "../lib/tokens/ERC20.sol";
|
||||||
|
|
||||||
library DataTypes {
|
library DataTypes {
|
||||||
struct Lock {
|
struct Lock {
|
||||||
|
uint256 sellerKey;
|
||||||
uint256 counter;
|
uint256 counter;
|
||||||
uint256 expirationBlock;
|
uint256 expirationBlock;
|
||||||
bytes32 pixTarget;
|
bytes32 pixTarget;
|
||||||
uint80 amount;
|
uint80 amount;
|
||||||
ERC20 token;
|
ERC20 token;
|
||||||
address buyerAddress;
|
address buyerAddress;
|
||||||
address seller;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity ^0.8.19;
|
pragma solidity 0.8.19;
|
||||||
|
|
||||||
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
import { ERC20 } from "../lib/tokens/ERC20.sol";
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
interface EventAndErrors {
|
interface EventAndErrors {
|
||||||
@@ -30,7 +30,7 @@ interface EventAndErrors {
|
|||||||
event LockAdded(
|
event LockAdded(
|
||||||
address indexed buyer,
|
address indexed buyer,
|
||||||
uint256 indexed lockID,
|
uint256 indexed lockID,
|
||||||
address seller,
|
uint256 seller,
|
||||||
uint256 amount
|
uint256 amount
|
||||||
);
|
);
|
||||||
/// @dev 0x364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8
|
/// @dev 0x364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity ^0.8.19;
|
pragma solidity 0.8.19;
|
||||||
|
|
||||||
import { ERC2771 } from "contracts/lib/metatx/ERC2771Context.sol";
|
import { ERC2771Context as ERC2771 } from "../lib/metatx/ERC2771Context.sol";
|
||||||
import { ERC20, SafeTransferLib } from "contracts/lib/utils/SafeTransferLib.sol";
|
import { ERC20, SafeTransferLib } from "../lib/utils/SafeTransferLib.sol";
|
||||||
import { IReputation } from "contracts/lib/interfaces/IReputation.sol";
|
import { IReputation } from "../lib/interfaces/IReputation.sol";
|
||||||
import { EventAndErrors } from "contracts/core/EventAndErrors.sol";
|
import { EventAndErrors } from "./EventAndErrors.sol";
|
||||||
import { Constants } from "contracts/core/Constants.sol";
|
import { Constants } from "./Constants.sol";
|
||||||
import { Owned } from "contracts/lib/auth/Owned.sol";
|
import { Owned } from "../lib/auth/Owned.sol";
|
||||||
|
|
||||||
abstract contract OwnerSettings is
|
abstract contract OwnerSettings is
|
||||||
Constants,
|
Constants,
|
||||||
@@ -46,7 +46,7 @@ abstract contract OwnerSettings is
|
|||||||
address[] memory forwarders,
|
address[] memory forwarders,
|
||||||
bool[] memory states
|
bool[] memory states
|
||||||
) external onlyOwner {
|
) external onlyOwner {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
// first 32 bytes eq to array's length
|
// first 32 bytes eq to array's length
|
||||||
let fLen := mload(forwarders)
|
let fLen := mload(forwarders)
|
||||||
// halts execution if forwarders.length eq 0
|
// halts execution if forwarders.length eq 0
|
||||||
@@ -67,7 +67,7 @@ abstract contract OwnerSettings is
|
|||||||
sLoc := add(sLoc, 0x20)
|
sLoc := add(sLoc, 0x20)
|
||||||
} {
|
} {
|
||||||
// cache hashmap entry in scratch space
|
// cache hashmap entry in scratch space
|
||||||
mstore(0x20, trustedForwarders.slot)
|
mstore(0x20, isTrustedForwarder.slot)
|
||||||
mstore(0x00, mload(fLoc))
|
mstore(0x00, mload(fLoc))
|
||||||
// let mapSlot := keccak256(0x00, 0x40)
|
// let mapSlot := keccak256(0x00, 0x40)
|
||||||
sstore(keccak256(0x00, 0x40), mload(sLoc))
|
sstore(keccak256(0x00, 0x40), mload(sLoc))
|
||||||
@@ -95,7 +95,7 @@ abstract contract OwnerSettings is
|
|||||||
function setReputation(
|
function setReputation(
|
||||||
IReputation _reputation
|
IReputation _reputation
|
||||||
) public onlyOwner {
|
) public onlyOwner {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
sstore(reputation.slot, _reputation)
|
sstore(reputation.slot, _reputation)
|
||||||
}
|
}
|
||||||
emit ReputationUpdated(address(_reputation));
|
emit ReputationUpdated(address(_reputation));
|
||||||
@@ -104,7 +104,7 @@ abstract contract OwnerSettings is
|
|||||||
function setDefaultLockBlocks(
|
function setDefaultLockBlocks(
|
||||||
uint256 _blocks
|
uint256 _blocks
|
||||||
) public onlyOwner {
|
) public onlyOwner {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
sstore(defaultLockBlocks.slot, _blocks)
|
sstore(defaultLockBlocks.slot, _blocks)
|
||||||
}
|
}
|
||||||
emit LockBlocksUpdated(_blocks);
|
emit LockBlocksUpdated(_blocks);
|
||||||
@@ -113,7 +113,7 @@ abstract contract OwnerSettings is
|
|||||||
function setValidSigners(
|
function setValidSigners(
|
||||||
address[] memory _validSigners
|
address[] memory _validSigners
|
||||||
) public onlyOwner {
|
) public onlyOwner {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
let i := add(_validSigners, 0x20)
|
let i := add(_validSigners, 0x20)
|
||||||
let end := add(i, shl(0x05, mload(_validSigners)))
|
let end := add(i, shl(0x05, mload(_validSigners)))
|
||||||
for {
|
for {
|
||||||
@@ -121,7 +121,7 @@ abstract contract OwnerSettings is
|
|||||||
} iszero(returndatasize()) {
|
} iszero(returndatasize()) {
|
||||||
/* */
|
/* */
|
||||||
} {
|
} {
|
||||||
sstore(shl(0xc, mload(i)), true)
|
sstore(shl(12, mload(i)), true)
|
||||||
i := add(i, 0x20)
|
i := add(i, 0x20)
|
||||||
|
|
||||||
if iszero(lt(i, end)) {
|
if iszero(lt(i, end)) {
|
||||||
@@ -137,7 +137,7 @@ abstract contract OwnerSettings is
|
|||||||
bool[] memory _states
|
bool[] memory _states
|
||||||
) public onlyOwner {
|
) public onlyOwner {
|
||||||
/* Yul Impl */
|
/* Yul Impl */
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
// first 32 bytes eq to array's length
|
// first 32 bytes eq to array's length
|
||||||
let tLen := mload(_tokens)
|
let tLen := mload(_tokens)
|
||||||
// NoTokens()
|
// NoTokens()
|
||||||
@@ -181,17 +181,17 @@ abstract contract OwnerSettings is
|
|||||||
function validBacenSigners(
|
function validBacenSigners(
|
||||||
uint256 signer
|
uint256 signer
|
||||||
) public view returns (bool valid) {
|
) public view returns (bool valid) {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
valid := sload(signer)
|
valid := sload(signer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function sellerAllowList(
|
function sellerAllowList(
|
||||||
address sellerKey
|
uint256 sellerKey
|
||||||
) public view returns (bytes32 root) {
|
) public view returns (bytes32 root) {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
mstore(0x0c, _SELLER_ALLOWLIST_SLOT_SEED)
|
mstore(0x0c, _SELLER_ALLOWLIST_SLOT_SEED)
|
||||||
mstore(0x00, sellerKey)
|
mstore(0x00, shr(12, sellerKey))
|
||||||
root := sload(keccak256(0x00, 0x20))
|
root := sload(keccak256(0x00, 0x20))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -199,7 +199,7 @@ abstract contract OwnerSettings is
|
|||||||
function allowedERC20s(
|
function allowedERC20s(
|
||||||
ERC20 erc20
|
ERC20 erc20
|
||||||
) public view returns (bool state) {
|
) public view returns (bool state) {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
mstore(0x0c, _ALLOWED_ERC20_SLOT_SEED)
|
mstore(0x0c, _ALLOWED_ERC20_SLOT_SEED)
|
||||||
mstore(0x00, erc20)
|
mstore(0x00, erc20)
|
||||||
state := sload(keccak256(0x0c, 0x20))
|
state := sload(keccak256(0x0c, 0x20))
|
||||||
@@ -215,10 +215,10 @@ abstract contract OwnerSettings is
|
|||||||
_userCredit
|
_userCredit
|
||||||
);
|
);
|
||||||
bool success;
|
bool success;
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
success := staticcall(
|
success := staticcall(
|
||||||
// gas
|
// gas
|
||||||
gas(),
|
0x7530,
|
||||||
// address
|
// address
|
||||||
sload(reputation.slot),
|
sload(reputation.slot),
|
||||||
// argsOffset
|
// argsOffset
|
||||||
|
|||||||
@@ -1,15 +1,94 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
pragma solidity ^0.8.20;
|
pragma solidity >=0.8.4;
|
||||||
|
|
||||||
import { ERC2771Context } from "@openzeppelin/contracts/metatx/ERC2771Context.sol";
|
/// @author OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
|
||||||
|
/// (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol)
|
||||||
|
|
||||||
abstract contract ERC2771 is ERC2771Context(address(0)) {
|
/// @dev Provides information about the current execution context, including the
|
||||||
mapping(address => bool) public trustedForwarders;
|
/// 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 isTrustedForwarder(
|
function _msgData()
|
||||||
address forwarder
|
internal
|
||||||
) public view override returns (bool) {
|
view
|
||||||
return trustedForwarders[forwarder];
|
virtual
|
||||||
|
returns (bytes calldata)
|
||||||
|
{
|
||||||
|
return msg.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @author Modified from OpenZeppelin Contracts (last updated v4.7.0) (metatx/ERC2771Context.sol)
|
||||||
|
/// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/metatx/ERC2771Context.sol
|
||||||
|
|
||||||
|
/// @dev Context variant with ERC2771 support.
|
||||||
|
abstract contract ERC2771Context is Context {
|
||||||
|
// address private immutable _trustedForwarder;
|
||||||
|
mapping(address => bool) public isTrustedForwarder;
|
||||||
|
|
||||||
|
/// @custom:oz-upgrades-unsafe-allow constructor
|
||||||
|
// constructor(address trustedForwarder) {
|
||||||
|
// _trustedForwarder = trustedForwarder;
|
||||||
|
// }
|
||||||
|
|
||||||
|
function _msgSender()
|
||||||
|
internal
|
||||||
|
view
|
||||||
|
virtual
|
||||||
|
override
|
||||||
|
returns (address sender)
|
||||||
|
{
|
||||||
|
if (isTrustedForwarder[msg.sender]) {
|
||||||
|
// The assembly code is more direct than the Solidity version using `abi.decode`.
|
||||||
|
/// @solidity memory-safe-assembly
|
||||||
|
assembly {
|
||||||
|
sender := shr(
|
||||||
|
96,
|
||||||
|
calldataload(sub(calldatasize(), 20))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return super._msgSender();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _isTrustedForwarder()
|
||||||
|
internal
|
||||||
|
view
|
||||||
|
returns (address _sender, uint256 _forwarder)
|
||||||
|
{
|
||||||
|
_sender = _msgSender();
|
||||||
|
_forwarder = (_sender != msg.sender)
|
||||||
|
? uint256(1)
|
||||||
|
: uint256(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _msgData()
|
||||||
|
internal
|
||||||
|
view
|
||||||
|
virtual
|
||||||
|
override
|
||||||
|
returns (bytes calldata)
|
||||||
|
{
|
||||||
|
if (isTrustedForwarder[msg.sender]) {
|
||||||
|
return msg.data[:msg.data.length - 20];
|
||||||
|
} else {
|
||||||
|
return super._msgData();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity ^0.8.19;
|
pragma solidity 0.8.19;
|
||||||
|
|
||||||
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
import { ERC20 } from "../tokens/ERC20.sol";
|
||||||
|
|
||||||
contract MockToken is ERC20 {
|
contract MockToken is ERC20 {
|
||||||
constructor(uint256 supply) ERC20("MockBRL", "MBRL") {
|
constructor(uint256 supply) ERC20("MockBRL", "MBRL", 18) {
|
||||||
_mint(msg.sender, supply);
|
_mint(msg.sender, supply);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
250
contracts/lib/tokens/ERC20.sol
Normal file
250
contracts/lib/tokens/ERC20.sol
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
78
contracts/lib/utils/ECDSA.sol
Normal file
78
contracts/lib/utils/ECDSA.sol
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity >=0.8.4;
|
||||||
|
|
||||||
|
/// @notice Gas optimized ECDSA wrapper.
|
||||||
|
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ECDSA.sol)
|
||||||
|
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/ECDSA.sol)
|
||||||
|
/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/ECDSA.sol)
|
||||||
|
library ECDSA {
|
||||||
|
/// @dev The signature is invalid.
|
||||||
|
error InvalidSignature();
|
||||||
|
|
||||||
|
/// @dev The number which `s` must not exceed in order for
|
||||||
|
/// the signature to be non-malleable.
|
||||||
|
bytes32 private constant _MALLEABILITY_THRESHOLD =
|
||||||
|
0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0;
|
||||||
|
|
||||||
|
/// @dev Recovers the signer's address from a message digest `hash`,
|
||||||
|
/// and the signature defined by `v`, `r`, `s`.
|
||||||
|
function recover(
|
||||||
|
bytes32 hash,
|
||||||
|
uint8 v,
|
||||||
|
bytes32 r,
|
||||||
|
bytes32 s
|
||||||
|
) internal view returns (address result) {
|
||||||
|
/// @solidity memory-safe-assembly
|
||||||
|
assembly {
|
||||||
|
// Copy the free memory pointer so that we can restore it later.
|
||||||
|
let m := mload(0x40)
|
||||||
|
mstore(0x00, hash)
|
||||||
|
mstore(0x20, and(v, 0xff))
|
||||||
|
mstore(0x40, r)
|
||||||
|
mstore(0x60, s)
|
||||||
|
pop(
|
||||||
|
staticcall(
|
||||||
|
gas(), // Amount of gas left for the transaction.
|
||||||
|
// If `s` in lower half order, such that the signature is not malleable.
|
||||||
|
lt(s, add(_MALLEABILITY_THRESHOLD, 1)), // Address of `ecrecover`.
|
||||||
|
0x00, // Start of input.
|
||||||
|
0x80, // Size of input.
|
||||||
|
0x00, // Start of output.
|
||||||
|
0x20 // Size of output.
|
||||||
|
)
|
||||||
|
)
|
||||||
|
result := mload(0x00)
|
||||||
|
// `returndatasize()` will be `0x20` upon success, and `0x00` otherwise.
|
||||||
|
if iszero(returndatasize()) {
|
||||||
|
// Store the function selector of `InvalidSignature()`.
|
||||||
|
mstore(0x00, 0x8baa579f)
|
||||||
|
// Revert with (offset, size).
|
||||||
|
revert(0x1c, 0x04)
|
||||||
|
}
|
||||||
|
// Restore the zero slot.
|
||||||
|
mstore(0x60, 0)
|
||||||
|
// Restore the free memory pointer.
|
||||||
|
mstore(0x40, m)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Returns an Ethereum Signed Message, created from a `hash`.
|
||||||
|
/// This produces a hash corresponding to the one signed with the
|
||||||
|
/// [`eth_sign`](https://eth.wiki/json-rpc/API#eth_sign)
|
||||||
|
/// JSON-RPC method as part of EIP-191.
|
||||||
|
function toEthSignedMessageHash(
|
||||||
|
bytes32 hash
|
||||||
|
) internal pure returns (bytes32 result) {
|
||||||
|
/// @solidity memory-safe-assembly
|
||||||
|
assembly {
|
||||||
|
// Store into scratch space for keccak256.
|
||||||
|
mstore(0x20, hash)
|
||||||
|
mstore(
|
||||||
|
0x00,
|
||||||
|
"\x00\x00\x00\x00\x19Ethereum Signed Message:\n32"
|
||||||
|
)
|
||||||
|
// 0x40 - 0x04 = 0x3c
|
||||||
|
result := keccak256(0x04, 0x3c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
58
contracts/lib/utils/MerkleProofLib.sol
Normal file
58
contracts/lib/utils/MerkleProofLib.sol
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity >=0.8.4;
|
||||||
|
|
||||||
|
/// @notice Gas optimized verification of proof of inclusion for a leaf in a Merkle tree.
|
||||||
|
/// @author Solady
|
||||||
|
/// (https://github.com/vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)
|
||||||
|
/// @author Modified from Solmate
|
||||||
|
/// (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)
|
||||||
|
/// @author Modified from OpenZeppelin
|
||||||
|
/// (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol)
|
||||||
|
library MerkleProofLib {
|
||||||
|
/// @dev Returns whether `leaf` exists in the Merkle tree with `root`, given `proof`.
|
||||||
|
function verify(
|
||||||
|
bytes32[] calldata proof,
|
||||||
|
bytes32 root,
|
||||||
|
bytes32 leaf
|
||||||
|
) internal pure returns (bool isValid) {
|
||||||
|
/// @solidity memory-safe-assembly
|
||||||
|
assembly {
|
||||||
|
if proof.length {
|
||||||
|
// Left shift by 5 is equivalent to multiplying by 0x20.
|
||||||
|
let end := add(
|
||||||
|
proof.offset,
|
||||||
|
shl(5, proof.length)
|
||||||
|
)
|
||||||
|
// Initialize `offset` to the offset of `proof` in the calldata.
|
||||||
|
let offset := proof.offset
|
||||||
|
// Iterate over proof elements to compute root hash.
|
||||||
|
for {
|
||||||
|
|
||||||
|
} 1 {
|
||||||
|
|
||||||
|
} {
|
||||||
|
// Slot of `leaf` in scratch space.
|
||||||
|
// If the condition is true: 0x20, otherwise: 0x00.
|
||||||
|
let scratch := shl(
|
||||||
|
5,
|
||||||
|
gt(leaf, calldataload(offset))
|
||||||
|
)
|
||||||
|
// Store elements to hash contiguously in scratch space.
|
||||||
|
// Scratch space is 64 bytes (0x00 - 0x3f) and both elements are 32 bytes.
|
||||||
|
mstore(scratch, leaf)
|
||||||
|
mstore(
|
||||||
|
xor(scratch, 0x20),
|
||||||
|
calldataload(offset)
|
||||||
|
)
|
||||||
|
// Reuse `leaf` to store the hash to reduce stack operations.
|
||||||
|
leaf := keccak256(0x00, 0x40)
|
||||||
|
offset := add(offset, 0x20)
|
||||||
|
if iszero(lt(offset, end)) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
isValid := eq(leaf, root)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,12 +19,12 @@ contract Multicall {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//prettier-ignore
|
//prettier-ignore
|
||||||
//solhint-disable-next-line no-empty-blocks
|
|
||||||
constructor(/* */) payable {/* */}
|
constructor(/* */) payable {/* */}
|
||||||
|
|
||||||
function mtc1(
|
function mtc1(Call[] calldata calls)
|
||||||
Call[] calldata calls
|
external
|
||||||
) external returns (uint256, bytes[] memory) {
|
returns (uint256, bytes[] memory)
|
||||||
|
{
|
||||||
uint256 bn = block.number;
|
uint256 bn = block.number;
|
||||||
uint256 len = calls.length;
|
uint256 len = calls.length;
|
||||||
bytes[] memory res = new bytes[](len);
|
bytes[] memory res = new bytes[](len);
|
||||||
@@ -49,14 +49,21 @@ contract Multicall {
|
|||||||
return (bn, res);
|
return (bn, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
function mtc2(
|
function mtc2(Call[] calldata calls)
|
||||||
Call[] calldata calls
|
external
|
||||||
) external returns (uint256, bytes32, Result[] memory) {
|
returns (
|
||||||
|
uint256,
|
||||||
|
bytes32,
|
||||||
|
Result[] memory
|
||||||
|
)
|
||||||
|
{
|
||||||
uint256 bn = block.number;
|
uint256 bn = block.number;
|
||||||
// µ 0 s [0] ≡ P(IHp , µs [0], 0) ∴ P is the hash of a block of a particular number, up to a maximum age.
|
// µ 0 s [0] ≡ P(IHp , µs [0], 0) ∴ P is the hash of a block of a particular number, up to a maximum age.
|
||||||
// 0 is left on the stack if the looked for `block.number` is >= to the current `block.number` or more than 256
|
// 0 is left on the stack if the looked for `block.number` is >= to the current `block.number` or more than 256
|
||||||
// blocks behind the current block (Yellow Paper, p. 33, https://ethereum.github.io/yellowpaper/paper.pdf).
|
// blocks behind the current block (Yellow Paper, p. 33, https://ethereum.github.io/yellowpaper/paper.pdf).
|
||||||
bytes32 bh = blockhash(bn /* - 1 */);
|
bytes32 bh = blockhash(
|
||||||
|
bn /* - 1 */
|
||||||
|
);
|
||||||
uint256 len = calls.length;
|
uint256 len = calls.length;
|
||||||
Result[] memory res = new Result[](len);
|
Result[] memory res = new Result[](len);
|
||||||
uint256 i;
|
uint256 i;
|
||||||
|
|||||||
34
contracts/lib/utils/ReentrancyGuard.sol
Normal file
34
contracts/lib/utils/ReentrancyGuard.sol
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity >=0.8.4;
|
pragma solidity >=0.8.4;
|
||||||
|
|
||||||
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
import { ERC20 } from "../tokens/ERC20.sol";
|
||||||
|
|
||||||
/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
|
/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
|
||||||
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol)
|
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity ^0.8.19;
|
pragma solidity 0.8.19;
|
||||||
|
|
||||||
/// ______ __
|
/// ______ __
|
||||||
/// .-----.|__ |.-----.|__|.--.--.
|
/// .-----.|__ |.-----.|__|.--.--.
|
||||||
@@ -8,9 +8,10 @@ pragma solidity ^0.8.19;
|
|||||||
/// |__| |__|
|
/// |__| |__|
|
||||||
///
|
///
|
||||||
|
|
||||||
import { OwnerSettings, ERC20, SafeTransferLib } from "contracts/core/OwnerSettings.sol";
|
import { OwnerSettings, ERC20, SafeTransferLib } from "./core/OwnerSettings.sol";
|
||||||
import { BaseUtils } from "contracts/core/BaseUtils.sol";
|
import { BaseUtils } from "./core/BaseUtils.sol";
|
||||||
import { DataTypes as DT } from "contracts/core/DataTypes.sol";
|
import { DataTypes as DT } from "./core/DataTypes.sol";
|
||||||
|
|
||||||
|
|
||||||
contract P2PIX is BaseUtils {
|
contract P2PIX is BaseUtils {
|
||||||
// solhint-disable use-forbidden-name
|
// solhint-disable use-forbidden-name
|
||||||
@@ -20,6 +21,8 @@ contract P2PIX is BaseUtils {
|
|||||||
using DT for DT.Lock;
|
using DT for DT.Lock;
|
||||||
using DT for DT.LockStatus;
|
using DT for DT.LockStatus;
|
||||||
|
|
||||||
|
/// ███ Storage ████████████████████████████████████████████████████████████
|
||||||
|
|
||||||
uint256 public lockCounter;
|
uint256 public lockCounter;
|
||||||
|
|
||||||
/// @dev List of Locks.
|
/// @dev List of Locks.
|
||||||
@@ -27,6 +30,8 @@ contract P2PIX is BaseUtils {
|
|||||||
/// @dev Stores an relayer's last computed credit.
|
/// @dev Stores an relayer's last computed credit.
|
||||||
mapping(uint256 => uint256) public userRecord;
|
mapping(uint256 => uint256) public userRecord;
|
||||||
|
|
||||||
|
/// ███ Constructor ████████████████████████████████████████████████████████
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
uint256 defaultBlocks,
|
uint256 defaultBlocks,
|
||||||
address[] memory validSigners,
|
address[] memory validSigners,
|
||||||
@@ -34,7 +39,6 @@ contract P2PIX is BaseUtils {
|
|||||||
ERC20[] memory tokens,
|
ERC20[] memory tokens,
|
||||||
bool[] memory tokenStates
|
bool[] memory tokenStates
|
||||||
)
|
)
|
||||||
payable
|
|
||||||
OwnerSettings(
|
OwnerSettings(
|
||||||
defaultBlocks,
|
defaultBlocks,
|
||||||
validSigners,
|
validSigners,
|
||||||
@@ -42,70 +46,71 @@ contract P2PIX is BaseUtils {
|
|||||||
tokens,
|
tokens,
|
||||||
tokenStates
|
tokenStates
|
||||||
)
|
)
|
||||||
{
|
payable {/* */}
|
||||||
/* */
|
|
||||||
}
|
/// ███ Public FX ██████████████████████████████████████████████████████████
|
||||||
|
|
||||||
/// @notice Creates a deposit order based on a seller's
|
/// @notice Creates a deposit order based on a seller's
|
||||||
/// offer of an amount of ERC20 tokens.
|
/// offer of an amount of ERC20 tokens.
|
||||||
/// @notice Seller needs to send his tokens to the P2PIX smart contract.
|
/// @dev Seller needs to send his tokens to the P2PIX smart contract.
|
||||||
/// @param pixTarget Pix key destination provided by the offer's seller.
|
/// @param _pixTarget Pix key destination provided by the offer's seller.
|
||||||
/// @param allowlistRoot Optional allow list merkleRoot update `bytes32` value.
|
/// @param allowlistRoot Optional allow list merkleRoot update `bytes32` value.
|
||||||
/// as the deposit identifier.
|
/// as the deposit identifier.
|
||||||
/// @dev Function sighash: 0x5e918943
|
/// @dev Function sighash: 0xbfe07da6.
|
||||||
function deposit(
|
function deposit(
|
||||||
string calldata pixTarget,
|
ERC20 _token,
|
||||||
bytes32 allowlistRoot,
|
uint96 _amount,
|
||||||
ERC20 token,
|
string memory _pixTarget,
|
||||||
uint96 amount,
|
bool _valid,
|
||||||
bool valid
|
bytes32 allowlistRoot
|
||||||
) public nonReentrant {
|
) public {
|
||||||
if (bytes(pixTarget).length == 0)
|
ERC20 t = ERC20(_token);
|
||||||
revert EmptyPixTarget();
|
uint256 k = _castAddrToKey(msg.sender);
|
||||||
if (!allowedERC20s(token)) revert TokenDenied();
|
|
||||||
uint256 _sellerBalance = __sellerBalance(
|
if (bytes(_pixTarget).length == 0) revert EmptyPixTarget();
|
||||||
msg.sender,
|
if (!allowedERC20s(t)) revert TokenDenied();
|
||||||
token
|
uint256 _sellerBalance = __sellerBalance(k,t);
|
||||||
);
|
|
||||||
|
|
||||||
uint256 currBal = _sellerBalance & BITMASK_SB_ENTRY;
|
uint256 currBal = _sellerBalance & BITMASK_SB_ENTRY;
|
||||||
uint256 _newBal = uint256(currBal + amount);
|
uint256 _newBal = uint256(currBal + _amount);
|
||||||
if (_newBal > MAXBALANCE_UPPERBOUND)
|
if (_newBal > MAXBALANCE_UPPERBOUND)
|
||||||
revert MaxBalExceeded();
|
revert MaxBalExceeded();
|
||||||
|
|
||||||
|
setReentrancyGuard();
|
||||||
|
|
||||||
if (allowlistRoot != 0) {
|
if (allowlistRoot != 0) {
|
||||||
setRoot(msg.sender, allowlistRoot);
|
setRoot(msg.sender, allowlistRoot);
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes32 pixTargetCasted = getStr(pixTarget);
|
bytes32 pixTargetCasted = getStr(_pixTarget);
|
||||||
uint256 validCasted = _castBool(valid);
|
uint256 validCasted = _castBool(_valid);
|
||||||
|
|
||||||
_setSellerBalance(
|
_setSellerBalance(
|
||||||
msg.sender,
|
k,
|
||||||
token,
|
t,
|
||||||
(_newBal | (validCasted << BITPOS_VALID)),
|
(_newBal | (validCasted << BITPOS_VALID)),
|
||||||
pixTargetCasted
|
pixTargetCasted
|
||||||
);
|
);
|
||||||
|
|
||||||
SafeTransferLib.safeTransferFrom(
|
SafeTransferLib.safeTransferFrom(
|
||||||
token,
|
t,
|
||||||
msg.sender,
|
msg.sender,
|
||||||
address(this),
|
address(this),
|
||||||
amount
|
_amount
|
||||||
);
|
);
|
||||||
|
|
||||||
emit DepositAdded(msg.sender, token, amount);
|
clearReentrancyGuard();
|
||||||
|
|
||||||
|
emit DepositAdded(msg.sender, _token, _amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @notice Enables seller to invalidate future
|
/// @notice Enables seller to invalidate future
|
||||||
/// locks made to his/her token offering order.
|
/// locks made to his/her token offering order.
|
||||||
/// @notice This function does not affect any ongoing active locks.
|
/// @dev This function does not affect any ongoing active locks.
|
||||||
/// @dev Function sighash: 0x6d82d9e0
|
/// @dev Function sighash: 0x72fada5c.
|
||||||
function setValidState(ERC20 token, bool state) public {
|
function setValidState(ERC20 token, bool state) public {
|
||||||
uint256 _sellerBalance = __sellerBalance(
|
uint256 key = _castAddrToKey(msg.sender);
|
||||||
msg.sender,
|
uint256 _sellerBalance = __sellerBalance(key, token);
|
||||||
token
|
|
||||||
);
|
|
||||||
|
|
||||||
if (_sellerBalance != 0) {
|
if (_sellerBalance != 0) {
|
||||||
uint256 _valid = _castBool(state);
|
uint256 _valid = _castBool(state);
|
||||||
@@ -114,7 +119,7 @@ contract P2PIX is BaseUtils {
|
|||||||
(_sellerBalance & BITMASK_SB_ENTRY) |
|
(_sellerBalance & BITMASK_SB_ENTRY) |
|
||||||
(_valid << BITPOS_VALID);
|
(_valid << BITPOS_VALID);
|
||||||
|
|
||||||
_setValidState(msg.sender, token, _sellerBalance);
|
_setValidState(key, token, _sellerBalance);
|
||||||
|
|
||||||
emit ValidSet(msg.sender, token, state);
|
emit ValidSet(msg.sender, token, state);
|
||||||
} else revert NotInitialized();
|
} else revert NotInitialized();
|
||||||
@@ -122,98 +127,89 @@ contract P2PIX is BaseUtils {
|
|||||||
|
|
||||||
/// @notice Public method designed to lock an remaining amount of
|
/// @notice Public method designed to lock an remaining amount of
|
||||||
/// the deposit order of a seller.
|
/// the deposit order of a seller.
|
||||||
/// @notice Transaction forwarding must leave `merkleProof` empty;
|
/// @dev This method can be performed either by:
|
||||||
/// otherwise, the trustedForwarder must be previously added
|
|
||||||
/// to a seller whitelist.
|
|
||||||
/// @notice This method can be performed either by:
|
|
||||||
/// - An user allowed via the seller's allowlist;
|
/// - An user allowed via the seller's allowlist;
|
||||||
/// - An user with enough userRecord to lock the wished amount;
|
/// - An user with enough userRecord to lock the wished amount;
|
||||||
/// @notice There can only exist a lock per each `amount` partitioned
|
/// @dev There can only exist a lock per each `_amount` partitioned
|
||||||
/// from the total `remaining` value.
|
/// from the total `remaining` value.
|
||||||
/// @notice Locks can only be performed in valid orders.
|
/// @dev Locks can only be performed in valid orders.
|
||||||
/// @param amount The deposit's remaining amount wished to be locked.
|
/// @param _amount The deposit's remaining amount wished to be locked.
|
||||||
/// @param merkleProof Provided as a pass if the `msg.sender` is in the
|
/// @param merkleProof This value should be:
|
||||||
/// seller's allowlist; Left empty otherwise;
|
/// - Provided as a pass if the `msg.sender` is in the seller's allowlist;
|
||||||
/// @param expiredLocks An array of identifiers to be
|
/// - Left empty otherwise;
|
||||||
|
/// @param expiredLocks An array of `bytes32` identifiers to be
|
||||||
/// provided so to unexpire locks using this transaction gas push.
|
/// provided so to unexpire locks using this transaction gas push.
|
||||||
/// @return lockID The lock identifier.
|
/// @return lockID The `bytes32` value returned as the lock identifier.
|
||||||
/// @dev Function sighash: 0xdc43221c
|
/// @dev Function sighash: 0x03aaf306.
|
||||||
function lock(
|
function lock(
|
||||||
address seller,
|
address _seller,
|
||||||
ERC20 token,
|
ERC20 _token,
|
||||||
uint80 amount,
|
uint80 _amount,
|
||||||
bytes32[] calldata merkleProof,
|
bytes32[] calldata merkleProof,
|
||||||
uint256[] calldata expiredLocks
|
uint256[] calldata expiredLocks
|
||||||
) public nonReentrant returns (uint256 lockID) {
|
) public nonReentrant returns (uint256 lockID) {
|
||||||
unlockExpired(expiredLocks);
|
unlockExpired(expiredLocks);
|
||||||
|
|
||||||
if (!getValid(seller, token)) revert InvalidDeposit();
|
ERC20 t = _token;
|
||||||
|
if (!getValid(_seller, t)) revert InvalidDeposit();
|
||||||
|
|
||||||
uint256 bal = getBalance(seller, token);
|
uint256 bal = getBalance(_seller, t);
|
||||||
if (bal < amount) revert NotEnoughTokens();
|
if (bal < _amount) revert NotEnoughTokens();
|
||||||
|
|
||||||
unchecked {
|
uint256 k = _castAddrToKey(_seller);
|
||||||
lockID = ++lockCounter;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mapLocks[lockID].expirationBlock >= block.number)
|
uint256 cCounter = lockCounter + 1;
|
||||||
revert NotExpired();
|
|
||||||
|
|
||||||
bytes32 _pixTarget = getPixTarget(seller, token);
|
if (
|
||||||
|
mapLocks[cCounter].expirationBlock >= block.number
|
||||||
|
) revert NotExpired();
|
||||||
|
|
||||||
|
address sender; uint256 forwarder;
|
||||||
|
(sender, forwarder) = _isTrustedForwarder();
|
||||||
|
|
||||||
// transaction forwarding must leave `merkleProof` empty;
|
|
||||||
// otherwise, the trustedForwarder must be previously added
|
|
||||||
// to a seller whitelist.
|
|
||||||
if (merkleProof.length != 0) {
|
if (merkleProof.length != 0) {
|
||||||
_merkleVerify(
|
_merkleVerify( merkleProof, sellerAllowList(k), msg.sender);
|
||||||
merkleProof,
|
|
||||||
sellerAllowList(seller),
|
} else if (_amount > REPUTATION_LOWERBOUND && forwarder == 0) {
|
||||||
_msgSender()
|
|
||||||
);
|
uint256 userCredit = userRecord[_castAddrToKey(msg.sender)];
|
||||||
} else if (
|
uint256 spendLimit; (spendLimit) = _limiter(userCredit / WAD);
|
||||||
amount > REPUTATION_LOWERBOUND &&
|
|
||||||
msg.sender == _msgSender()
|
|
||||||
) {
|
|
||||||
uint256 spendLimit;
|
|
||||||
uint256 userCredit = userRecord[
|
|
||||||
_castAddrToKey(_msgSender())
|
|
||||||
];
|
|
||||||
(spendLimit) = _limiter(userCredit / WAD);
|
|
||||||
if (
|
if (
|
||||||
amount > (spendLimit * WAD) ||
|
_amount > (spendLimit * WAD) || _amount > LOCKAMOUNT_UPPERBOUND
|
||||||
amount > LOCKAMOUNT_UPPERBOUND
|
|
||||||
) revert AmountNotAllowed();
|
) revert AmountNotAllowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
DT.Lock memory l = DT.Lock(
|
DT.Lock memory l = DT.Lock(
|
||||||
lockID,
|
k,
|
||||||
|
cCounter,
|
||||||
(block.number + defaultLockBlocks),
|
(block.number + defaultLockBlocks),
|
||||||
_pixTarget,
|
getPixTarget(_seller, t),
|
||||||
amount,
|
_amount,
|
||||||
token,
|
t,
|
||||||
_msgSender(),
|
sender
|
||||||
seller
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_addLock(bal, l);
|
lockID = _addLock(bal, _amount, cCounter, l, t, k);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @notice Lock release method that liquidate lock
|
/// @notice Lock release method that liquidate lock
|
||||||
/// orders and distributes relayer fees.
|
/// orders and distributes relayer fees.
|
||||||
/// @notice This method can be called by any public actor
|
/// @dev This method can be called by any public actor
|
||||||
/// as long the signature provided is valid.
|
/// as long the signature provided is valid.
|
||||||
/// @notice `relayerPremium` gets splitted equaly
|
/// @dev `relayerPremium` gets splitted equaly
|
||||||
/// if relayer addresses differ.
|
/// if relayer addresses differ.
|
||||||
/// @notice If the `msg.sender` of this method and `l.relayerAddress` are the same,
|
/// @dev If the `msg.sender` of this method and `l.relayerAddress` are the same,
|
||||||
/// `msg.sender` accrues both l.amount and l.relayerPremium as userRecord credit.
|
/// `msg.sender` accrues both l.amount and l.relayerPremium as userRecord credit.
|
||||||
/// In case of they differing:
|
/// In case of they differing:
|
||||||
/// - `lock` caller gets accrued with `l.amount` as userRecord credit;
|
/// - `lock` caller gets accrued with `l.amount` as userRecord credit;
|
||||||
/// - `release` caller gets accrued with `l.relayerPremium` as userRecord credit;
|
/// - `release` caller gets accrued with `l.relayerPremium` as userRecord credit;
|
||||||
/// @dev Function sighash: 0x11fc7f9a
|
/// @dev Function sighash: 0x4e1389ed.
|
||||||
function release(
|
function release(
|
||||||
uint256 lockID,
|
uint256 lockID,
|
||||||
bytes32 pixTimestamp,
|
bytes32 pixTimestamp,
|
||||||
bytes calldata signature
|
bytes32 r,
|
||||||
|
bytes32 s,
|
||||||
|
uint8 v
|
||||||
) public nonReentrant {
|
) public nonReentrant {
|
||||||
DT.Lock storage l = mapLocks[lockID];
|
DT.Lock storage l = mapLocks[lockID];
|
||||||
|
|
||||||
@@ -229,7 +225,7 @@ contract P2PIX is BaseUtils {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
_signerCheck(message, signature);
|
_signerCheck(message, r, s, v);
|
||||||
|
|
||||||
ERC20 t = ERC20(l.token);
|
ERC20 t = ERC20(l.token);
|
||||||
|
|
||||||
@@ -240,20 +236,16 @@ contract P2PIX is BaseUtils {
|
|||||||
l.expirationBlock = 0;
|
l.expirationBlock = 0;
|
||||||
_setUsedTransactions(message);
|
_setUsedTransactions(message);
|
||||||
|
|
||||||
if (_msgSender() == msg.sender) {
|
address sender; uint256 forwarder;
|
||||||
if (msg.sender != l.buyerAddress) {
|
(sender, forwarder) = _isTrustedForwarder();
|
||||||
userRecord[
|
|
||||||
_castAddrToKey(msg.sender)
|
if (forwarder == 0) {
|
||||||
] += (lockAmount >> 1);
|
if (msg.sender != l.buyerAddress) {
|
||||||
userRecord[
|
userRecord[_castAddrToKey(msg.sender)] += (lockAmount >> 1);
|
||||||
_castAddrToKey(l.buyerAddress)
|
userRecord[_castAddrToKey(l.buyerAddress)] += (lockAmount >> 1);
|
||||||
] += (lockAmount >> 1);
|
} else {
|
||||||
} else {
|
userRecord[_castAddrToKey(msg.sender)] += lockAmount;
|
||||||
userRecord[
|
}}
|
||||||
_castAddrToKey(msg.sender)
|
|
||||||
] += lockAmount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SafeTransferLib.safeTransfer(
|
SafeTransferLib.safeTransfer(
|
||||||
t,
|
t,
|
||||||
@@ -265,14 +257,14 @@ contract P2PIX is BaseUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// @notice Unlocks expired locks.
|
/// @notice Unlocks expired locks.
|
||||||
/// @notice Triggered in the callgraph by both `lock` and `withdraw` functions.
|
/// @dev Triggered in the callgraph by both `lock` and `withdraw` functions.
|
||||||
/// @notice This method can also have any public actor as its `tx.origin`.
|
/// @dev This method can also have any public actor as its `tx.origin`.
|
||||||
/// @notice For each successfull unexpired lock recovered,
|
/// @dev For each successfull unexpired lock recovered,
|
||||||
/// `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.
|
/// `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.
|
||||||
/// @dev Function sighash: 0xb0983d39
|
/// @dev Function sighash: 0x8e2749d6.
|
||||||
function unlockExpired(
|
function unlockExpired(uint256[] calldata lockIDs)
|
||||||
uint256[] calldata lockIDs
|
public
|
||||||
) public {
|
{
|
||||||
uint256 i;
|
uint256 i;
|
||||||
uint256 locksSize = lockIDs.length;
|
uint256 locksSize = lockIDs.length;
|
||||||
|
|
||||||
@@ -281,21 +273,19 @@ contract P2PIX is BaseUtils {
|
|||||||
|
|
||||||
_notExpired(l);
|
_notExpired(l);
|
||||||
|
|
||||||
uint256 _sellerBalance = __sellerBalance(
|
uint256 _sellerBalance =
|
||||||
l.seller,
|
__sellerBalance(l.sellerKey, l.token) & BITMASK_SB_ENTRY;
|
||||||
l.token
|
|
||||||
) & BITMASK_SB_ENTRY;
|
|
||||||
|
|
||||||
if (
|
if ((_sellerBalance + l.amount) > MAXBALANCE_UPPERBOUND)
|
||||||
(_sellerBalance + l.amount) >
|
revert MaxBalExceeded();
|
||||||
MAXBALANCE_UPPERBOUND
|
|
||||||
) revert MaxBalExceeded();
|
|
||||||
|
|
||||||
_addSellerBalance(l.seller, l.token, l.amount);
|
_addSellerBalance(l.sellerKey, l.token, l.amount);
|
||||||
|
|
||||||
l.amount = 0;
|
l.amount = 0;
|
||||||
|
|
||||||
uint256 userKey = _castAddrToKey(l.buyerAddress);
|
uint256 userKey = _castAddrToKey(
|
||||||
|
l.buyerAddress
|
||||||
|
);
|
||||||
uint256 _newUserRecord = (userRecord[userKey] >>
|
uint256 _newUserRecord = (userRecord[userKey] >>
|
||||||
1);
|
1);
|
||||||
|
|
||||||
@@ -311,7 +301,7 @@ contract P2PIX is BaseUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
if lt(i, locksSize) {
|
if lt(i, locksSize) {
|
||||||
// LoopOverflow()
|
// LoopOverflow()
|
||||||
mstore(0x00, 0xdfb035c9)
|
mstore(0x00, 0xdfb035c9)
|
||||||
@@ -321,9 +311,9 @@ contract P2PIX is BaseUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// @notice Seller's expired deposit fund sweeper.
|
/// @notice Seller's expired deposit fund sweeper.
|
||||||
/// @notice A seller may use this method to recover
|
/// @dev A seller may use this method to recover
|
||||||
/// tokens from expired deposits.
|
/// tokens from expired deposits.
|
||||||
/// @dev Function sighash: 0xfb8c5ef0
|
/// @dev Function sighash: 0x36317972.
|
||||||
function withdraw(
|
function withdraw(
|
||||||
ERC20 token,
|
ERC20 token,
|
||||||
uint256 amount,
|
uint256 amount,
|
||||||
@@ -334,12 +324,12 @@ contract P2PIX is BaseUtils {
|
|||||||
if (getValid(msg.sender, token))
|
if (getValid(msg.sender, token))
|
||||||
setValidState(token, false);
|
setValidState(token, false);
|
||||||
|
|
||||||
|
uint256 key = _castAddrToKey(msg.sender);
|
||||||
_decBal(
|
_decBal(
|
||||||
(__sellerBalance(msg.sender, token) &
|
(__sellerBalance(key, token) & BITMASK_SB_ENTRY),
|
||||||
BITMASK_SB_ENTRY),
|
|
||||||
amount,
|
amount,
|
||||||
token,
|
token,
|
||||||
msg.sender
|
key
|
||||||
);
|
);
|
||||||
|
|
||||||
// safeTransfer tokens to seller
|
// safeTransfer tokens to seller
|
||||||
@@ -349,14 +339,17 @@ contract P2PIX is BaseUtils {
|
|||||||
amount
|
amount
|
||||||
);
|
);
|
||||||
|
|
||||||
emit DepositWithdrawn(msg.sender, token, amount);
|
emit DepositWithdrawn(
|
||||||
|
msg.sender,
|
||||||
|
token,
|
||||||
|
amount
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setRoot(
|
function setRoot(address addr, bytes32 merkleroot)
|
||||||
address addr,
|
public
|
||||||
bytes32 merkleroot
|
{
|
||||||
) public {
|
assembly {
|
||||||
assembly ("memory-safe") {
|
|
||||||
// if (addr != msg.sender)
|
// if (addr != msg.sender)
|
||||||
if iszero(eq(addr, caller())) {
|
if iszero(eq(addr, caller())) {
|
||||||
// revert OnlySeller()
|
// revert OnlySeller()
|
||||||
@@ -379,12 +372,15 @@ contract P2PIX is BaseUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ███ Helper FX ██████████████████████████████████████████████████████████
|
||||||
|
|
||||||
// solhint-disable-next-line no-empty-blocks
|
// solhint-disable-next-line no-empty-blocks
|
||||||
receive() external payable {}
|
receive() external payable {}
|
||||||
|
|
||||||
/// @notice Private view auxiliar logic that reverts
|
/// @notice Private view auxiliar logic that reverts
|
||||||
/// on a not expired lock passed as argument of the function.
|
/// on a not expired lock passed as argument of the function.
|
||||||
/// @dev Called exclusively by the `unlockExpired` method.
|
/// @dev Called exclusively by the `unlockExpired` method.
|
||||||
|
/// @dev Function sighash: 0x74e2a0bb.
|
||||||
function _notExpired(DT.Lock storage _l) private view {
|
function _notExpired(DT.Lock storage _l) private view {
|
||||||
if (_l.expirationBlock > block.number)
|
if (_l.expirationBlock > block.number)
|
||||||
revert NotExpired();
|
revert NotExpired();
|
||||||
@@ -393,16 +389,22 @@ contract P2PIX is BaseUtils {
|
|||||||
|
|
||||||
function _addLock(
|
function _addLock(
|
||||||
uint256 _bal,
|
uint256 _bal,
|
||||||
DT.Lock memory _l
|
uint256 _amount,
|
||||||
) internal {
|
uint256 _lockID,
|
||||||
mapLocks[_l.counter] = _l;
|
DT.Lock memory _l,
|
||||||
|
ERC20 _t,
|
||||||
|
uint256 _k
|
||||||
|
) internal returns(uint256 counter){
|
||||||
|
mapLocks[_lockID] = _l;
|
||||||
|
|
||||||
_decBal(_bal, _l.amount, ERC20(_l.token), _l.seller);
|
_decBal(_bal, _amount, _t, _k);
|
||||||
|
++lockCounter;
|
||||||
|
counter = _lockID;
|
||||||
|
|
||||||
emit LockAdded(
|
emit LockAdded(
|
||||||
_l.buyerAddress,
|
_l.buyerAddress,
|
||||||
_l.counter,
|
_lockID,
|
||||||
_l.seller,
|
_l.sellerKey,
|
||||||
_l.amount
|
_l.amount
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -411,9 +413,9 @@ contract P2PIX is BaseUtils {
|
|||||||
uint256 _bal,
|
uint256 _bal,
|
||||||
uint256 _amount,
|
uint256 _amount,
|
||||||
ERC20 _t,
|
ERC20 _t,
|
||||||
address _k
|
uint256 _k
|
||||||
) private {
|
) private {
|
||||||
assembly ("memory-safe") {
|
assembly {
|
||||||
if iszero(
|
if iszero(
|
||||||
iszero(
|
iszero(
|
||||||
or(
|
or(
|
||||||
@@ -429,14 +431,15 @@ contract P2PIX is BaseUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// we can directly dec from packed uint entry value
|
// we can directly dec from packed uint entry value
|
||||||
_decSellerBalance(_k, _t, _amount);
|
_decSellerBalance(_k,_t, _amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBalance(
|
function getBalance(address seller, ERC20 token)
|
||||||
address seller,
|
public
|
||||||
ERC20 token
|
view
|
||||||
) public view returns (uint256 bal) {
|
returns (uint256 bal)
|
||||||
assembly ("memory-safe") {
|
{
|
||||||
|
assembly {
|
||||||
for {
|
for {
|
||||||
/* */
|
/* */
|
||||||
} iszero(returndatasize()) {
|
} iszero(returndatasize()) {
|
||||||
@@ -454,11 +457,12 @@ contract P2PIX is BaseUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getValid(
|
function getValid(address seller, ERC20 token)
|
||||||
address seller,
|
public
|
||||||
ERC20 token
|
view
|
||||||
) public view returns (bool valid) {
|
returns (bool valid)
|
||||||
assembly ("memory-safe") {
|
{
|
||||||
|
assembly {
|
||||||
for {
|
for {
|
||||||
/* */
|
/* */
|
||||||
} iszero(returndatasize()) {
|
} iszero(returndatasize()) {
|
||||||
@@ -471,9 +475,7 @@ contract P2PIX is BaseUtils {
|
|||||||
BITMASK_SB_ENTRY,
|
BITMASK_SB_ENTRY,
|
||||||
shr(
|
shr(
|
||||||
BITPOS_VALID,
|
BITPOS_VALID,
|
||||||
sload(
|
sload(add(keccak256(0x0c, 0x34), 0x01))
|
||||||
add(keccak256(0x0c, 0x34), 0x01)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
@@ -481,11 +483,12 @@ contract P2PIX is BaseUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPixTarget(
|
function getPixTarget(address seller, ERC20 token)
|
||||||
address seller,
|
public
|
||||||
ERC20 token
|
view
|
||||||
) public view returns (bytes32 pixTarget) {
|
returns (bytes32 pixTarget)
|
||||||
assembly ("memory-safe") {
|
{
|
||||||
|
assembly {
|
||||||
for {
|
for {
|
||||||
/* */
|
/* */
|
||||||
} iszero(returndatasize()) {
|
} iszero(returndatasize()) {
|
||||||
@@ -500,12 +503,9 @@ contract P2PIX is BaseUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPixTargetString(
|
function getPixTargetString(address seller, ERC20 token) public view returns (string memory pixTarget) {
|
||||||
address seller,
|
|
||||||
ERC20 token
|
|
||||||
) public view returns (string memory pixTarget) {
|
|
||||||
bytes32 _pixEnc = getPixTarget(seller, token);
|
bytes32 _pixEnc = getPixTarget(seller, token);
|
||||||
pixTarget = string(abi.encodePacked(_pixEnc));
|
pixTarget = string(abi.encodePacked(_pixEnc));
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBalances(
|
function getBalances(
|
||||||
@@ -527,11 +527,9 @@ contract P2PIX is BaseUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// @notice External getter that returns the status of a lockIDs array.
|
/// @notice External getter that returns the status of a lockIDs array.
|
||||||
/// @notice Call will not revert if provided with an empty array as parameter.
|
/// @dev Call will not revert if provided with an empty array as parameter.
|
||||||
/// @dev Function sighash: 0x49ef8448
|
/// @dev Function sighash: 0x49ef8448
|
||||||
function getLocksStatus(
|
function getLocksStatus(uint256[] memory ids)
|
||||||
uint256[] memory ids
|
|
||||||
)
|
|
||||||
external
|
external
|
||||||
view
|
view
|
||||||
returns (uint256[] memory, DT.LockStatus[] memory)
|
returns (uint256[] memory, DT.LockStatus[] memory)
|
||||||
@@ -552,7 +550,7 @@ contract P2PIX is BaseUtils {
|
|||||||
);
|
);
|
||||||
unchecked {
|
unchecked {
|
||||||
for (c; c < len; ) {
|
for (c; c < len; ) {
|
||||||
if (mapLocks[ids[c]].seller == address(0)) {
|
if (mapLocks[ids[c]].sellerKey == 0x0) {
|
||||||
sortedIDs[c] = ids[c];
|
sortedIDs[c] = ids[c];
|
||||||
status[c] = type(DT.LockStatus).min;
|
status[c] = type(DT.LockStatus).min;
|
||||||
++c;
|
++c;
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
|
"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
|
||||||
"0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
|
"0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
|
||||||
],
|
],
|
||||||
"p2pix": "",
|
"p2pix": "0xC86042E9F2977C62Da8c9dDF7F9c40fde4796A29",
|
||||||
"token": ""
|
"token": "0xD38D6367f452D097ccBfDe4490b7de570B6A72Db"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"signers": [
|
|
||||||
"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
|
|
||||||
"0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
|
|
||||||
"0x8963E134E6d22Ee9A26ac62a99964aB391ead816"
|
|
||||||
],
|
|
||||||
"token": "0xfE841c74250e57640390f46d914C88d22C51e82e",
|
|
||||||
"p2pix": "0x57Dcba05980761169508886eEdc6f5E7EC0411Dc"
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"signers": [
|
|
||||||
"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
|
|
||||||
"0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
|
|
||||||
],
|
|
||||||
"p2pix": "0xb7cD135F5eFD9760981e02E2a898790b688939fe",
|
|
||||||
"token": "0x3eBE67A2C7bdB2081CBd34ba3281E90377462289"
|
|
||||||
}
|
|
||||||
1
docs/DataTypes.md
Normal file
1
docs/DataTypes.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# DataTypes
|
||||||
264
docs/EventAndErrors.md
Normal file
264
docs/EventAndErrors.md
Normal file
@@ -0,0 +1,264 @@
|
|||||||
|
# EventAndErrors
|
||||||
|
|
||||||
|
## Events
|
||||||
|
|
||||||
|
### AllowedERC20Updated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event AllowedERC20Updated(address indexed token, bool indexed state)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------------- | ------- | ----------- |
|
||||||
|
| token `indexed` | address | undefined |
|
||||||
|
| state `indexed` | bool | undefined |
|
||||||
|
|
||||||
|
### DepositAdded
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event DepositAdded(address indexed seller, uint256 depositID, address token, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
███ Events ████████████████████████████████████████████████████████████
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------------- | ------- | ----------- |
|
||||||
|
| seller `indexed` | address | undefined |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
| token | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### DepositClosed
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event DepositClosed(address indexed seller, uint256 depositID)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------------- | ------- | ----------- |
|
||||||
|
| seller `indexed` | address | undefined |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
|
||||||
|
### DepositWithdrawn
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------------- | ------- | ----------- |
|
||||||
|
| seller `indexed` | address | undefined |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### FundsWithdrawn
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event FundsWithdrawn(address owner, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------ | ------- | ----------- |
|
||||||
|
| owner | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### LockAdded
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------------- | ------- | ----------- |
|
||||||
|
| buyer `indexed` | address | undefined |
|
||||||
|
| lockID `indexed` | bytes32 | undefined |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### LockBlocksUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event LockBlocksUpdated(uint256 blocks)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------ | ------- | ----------- |
|
||||||
|
| blocks | uint256 | undefined |
|
||||||
|
|
||||||
|
### LockReleased
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event LockReleased(address indexed buyer, bytes32 lockId)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------------- | ------- | ----------- |
|
||||||
|
| buyer `indexed` | address | undefined |
|
||||||
|
| lockId | bytes32 | undefined |
|
||||||
|
|
||||||
|
### LockReturned
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event LockReturned(address indexed buyer, bytes32 lockId)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------------- | ------- | ----------- |
|
||||||
|
| buyer `indexed` | address | undefined |
|
||||||
|
| lockId | bytes32 | undefined |
|
||||||
|
|
||||||
|
### ReputationUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event ReputationUpdated(address reputation)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------- | ------- | ----------- |
|
||||||
|
| reputation | address | undefined |
|
||||||
|
|
||||||
|
### ValidSignersUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event ValidSignersUpdated(address[] signers)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------- | --------- | ----------- |
|
||||||
|
| signers | address[] | undefined |
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
|
### AddressDenied
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error AddressDenied()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Address doesn't exist in a MerkleTree.Address not allowed as relayer.0x3b8474be_
|
||||||
|
|
||||||
|
### AlreadyReleased
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error AlreadyReleased()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Lock already released or returned.0x63b4904e_
|
||||||
|
|
||||||
|
### AmountNotAllowed
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error AmountNotAllowed()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Wished amount to be locked exceeds the limit allowed.0x1c18f846_
|
||||||
|
|
||||||
|
### DepositAlreadyExists
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error DepositAlreadyExists()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Deposit already exist and it is still valid.0xc44bd765_
|
||||||
|
|
||||||
|
### InvalidDeposit
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error InvalidDeposit()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Deposit not valid anymore.0xb2e532de_
|
||||||
|
|
||||||
|
### InvalidSigner
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error InvalidSigner()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Signer is not a valid signer.0x815e1d64_
|
||||||
|
|
||||||
|
### LengthMismatch
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error LengthMismatch()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Arrays' length don't match.0xff633a38_
|
||||||
|
|
||||||
|
### LoopOverflow
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error LoopOverflow()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Loop bounds have overflowed.0xdfb035c9_
|
||||||
|
|
||||||
|
### NoTokens
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error NoTokens()
|
||||||
|
```
|
||||||
|
|
||||||
|
_No tokens array provided as argument.0xdf957883_
|
||||||
|
|
||||||
|
### NotEnoughTokens
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error NotEnoughTokens()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Not enough token remaining on deposit.0x22bbb43c_
|
||||||
|
|
||||||
|
### NotExpired
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error NotExpired()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85_
|
||||||
|
|
||||||
|
### OnlySeller
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error OnlySeller()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726_
|
||||||
|
|
||||||
|
### TokenDenied
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error TokenDenied()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Token address not allowed to be deposited.0x1578328e_
|
||||||
|
|
||||||
|
### TxAlreadyUsed
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error TxAlreadyUsed()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Transaction already used to unlock payment.0xf490a6ea_
|
||||||
694
docs/P2PIX.md
Normal file
694
docs/P2PIX.md
Normal file
@@ -0,0 +1,694 @@
|
|||||||
|
# P2PIX
|
||||||
|
|
||||||
|
## Methods
|
||||||
|
|
||||||
|
### \_castAddrToKey
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function _castAddrToKey(address _addr) external pure returns (uint256 _key)
|
||||||
|
```
|
||||||
|
|
||||||
|
Public method that handles `address` to `uint256` safe type casting.
|
||||||
|
|
||||||
|
_Function sighash: 0x4b2ae980._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------ | ------- | ----------- |
|
||||||
|
| \_addr | address | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ----- | ------- | ----------- |
|
||||||
|
| \_key | uint256 | undefined |
|
||||||
|
|
||||||
|
### allowedERC20s
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function allowedERC20s(contract ERC20) external view returns (bool)
|
||||||
|
```
|
||||||
|
|
||||||
|
_Tokens allowed to serve as the underlying amount of a deposit._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | -------------- | ----------- |
|
||||||
|
| \_0 | contract ERC20 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ---- | ----------- |
|
||||||
|
| \_0 | bool | undefined |
|
||||||
|
|
||||||
|
### cancelDeposit
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function cancelDeposit(uint256 depositID) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
Enables seller to invalidate future locks made to his/her token offering order.
|
||||||
|
|
||||||
|
_This function does not affect any ongoing active locks.Function sighash: 0x72fada5c._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------- | ------- | ----------- |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
|
||||||
|
### defaultLockBlocks
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function defaultLockBlocks() external view returns (uint256)
|
||||||
|
```
|
||||||
|
|
||||||
|
_Default blocks that lock will hold tokens._
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### deposit
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function deposit(address _token, uint256 _amount, string _pixTarget, bytes32 allowlistRoot) external nonpayable returns (uint256 depositID)
|
||||||
|
```
|
||||||
|
|
||||||
|
Creates a deposit order based on a seller's offer of an amount of ERC20 tokens.
|
||||||
|
|
||||||
|
_Seller needs to send his tokens to the P2PIX smart contract.Function sighash: 0xbfe07da6._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------------- | ------- | ------------------------------------------------------- |
|
||||||
|
| \_token | address | undefined |
|
||||||
|
| \_amount | uint256 | undefined |
|
||||||
|
| \_pixTarget | string | Pix key destination provided by the offer's seller. |
|
||||||
|
| allowlistRoot | bytes32 | Optional allow list merkleRoot update `bytes32` value. |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------- | ------- | -------------------------------------------------------------- |
|
||||||
|
| depositID | uint256 | The `uint256` return value provided as the deposit identifier. |
|
||||||
|
|
||||||
|
### depositCount
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function depositCount() external view returns (uint256 _val)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ----- | ------- | ----------- |
|
||||||
|
| \_val | uint256 | undefined |
|
||||||
|
|
||||||
|
### lock
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function lock(uint256 _depositID, address _buyerAddress, address _relayerTarget, uint256 _relayerPremium, uint256 _amount, bytes32[] merkleProof, bytes32[] expiredLocks) external nonpayable returns (bytes32 lockID)
|
||||||
|
```
|
||||||
|
|
||||||
|
Public method designed to lock an remaining amount of the deposit order of a seller.
|
||||||
|
|
||||||
|
_This method can be performed either by: - An user allowed via the seller's allowlist; - An user with enough userRecord to lock the wished amount; There can only exist a lock per each `_amount` partitioned from the total `remaining` value.Locks can only be performed in valid orders.Function sighash: 0x03aaf306._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------------- | --------- | ------------------------------------------------------------------------------------------------------------------------ |
|
||||||
|
| \_depositID | uint256 | undefined |
|
||||||
|
| \_buyerAddress | address | The address of the buyer of a `_depositID`. |
|
||||||
|
| \_relayerTarget | address | Target address entitled to the `relayerPremim`. |
|
||||||
|
| \_relayerPremium | uint256 | The refund/premium owed to a relayer. |
|
||||||
|
| \_amount | uint256 | The deposit's remaining amount wished to be locked. |
|
||||||
|
| merkleProof | bytes32[] | This value should be: - Provided as a pass if the `msg.sender` is in the seller's allowlist; - Left empty otherwise; |
|
||||||
|
| expiredLocks | bytes32[] | An array of `bytes32` identifiers to be provided so to unexpire locks using this transaction gas push. |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------ | ------- | ---------------------------------------------------- |
|
||||||
|
| lockID | bytes32 | The `bytes32` value returned as the lock identifier. |
|
||||||
|
|
||||||
|
### mapDeposits
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function mapDeposits(uint256) external view returns (uint256 remaining, string pixTarget, address seller, address token, bool valid)
|
||||||
|
```
|
||||||
|
|
||||||
|
_Seller list of deposits_
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------- | ------- | ----------- |
|
||||||
|
| remaining | uint256 | undefined |
|
||||||
|
| pixTarget | string | undefined |
|
||||||
|
| seller | address | undefined |
|
||||||
|
| token | address | undefined |
|
||||||
|
| valid | bool | undefined |
|
||||||
|
|
||||||
|
### mapLocks
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function mapLocks(bytes32) external view returns (uint256 depositID, uint256 relayerPremium, uint256 amount, uint256 expirationBlock, address buyerAddress, address relayerTarget, address relayerAddress)
|
||||||
|
```
|
||||||
|
|
||||||
|
_List of Locks._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | bytes32 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------------- | ------- | ----------- |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
| relayerPremium | uint256 | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
| expirationBlock | uint256 | undefined |
|
||||||
|
| buyerAddress | address | undefined |
|
||||||
|
| relayerTarget | address | undefined |
|
||||||
|
| relayerAddress | address | undefined |
|
||||||
|
|
||||||
|
### owner
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function owner() external view returns (address)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | address | undefined |
|
||||||
|
|
||||||
|
### release
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function release(bytes32 lockID, address _relayerTarget, uint256 pixTimestamp, bytes32 r, bytes32 s, uint8 v) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
Lock release method that liquidate lock orders and distributes relayer fees.
|
||||||
|
|
||||||
|
_This method can be called by any public actor as long the signature provided is valid.`relayerPremium` gets splitted equaly if `relayerTarget` addresses differ.If the `msg.sender` of this method and `l.relayerAddress` are the same, `msg.sender` accrues both l.amount and l.relayerPremium as userRecord credit. In case of they differing: - `lock` caller gets accrued with `l.amount` as userRecord credit; - `release` caller gets accrued with `l.relayerPremium` as userRecord credit; Function sighash: 0x4e1389ed._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------------- | ------- | ----------------------------------------------- |
|
||||||
|
| lockID | bytes32 | undefined |
|
||||||
|
| \_relayerTarget | address | Target address entitled to the `relayerPremim`. |
|
||||||
|
| pixTimestamp | uint256 | undefined |
|
||||||
|
| r | bytes32 | undefined |
|
||||||
|
| s | bytes32 | undefined |
|
||||||
|
| v | uint8 | undefined |
|
||||||
|
|
||||||
|
### reputation
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function reputation() external view returns (contract IReputation)
|
||||||
|
```
|
||||||
|
|
||||||
|
███ Storage ████████████████████████████████████████████████████████████
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | -------------------- | ----------- |
|
||||||
|
| \_0 | contract IReputation | undefined |
|
||||||
|
|
||||||
|
### sellerAllowList
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function sellerAllowList(uint256) external view returns (bytes32)
|
||||||
|
```
|
||||||
|
|
||||||
|
_Seller casted to key => Seller's allowlist merkleroot._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | bytes32 | undefined |
|
||||||
|
|
||||||
|
### setDefaultLockBlocks
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function setDefaultLockBlocks(uint256 _blocks) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| -------- | ------- | ----------- |
|
||||||
|
| \_blocks | uint256 | undefined |
|
||||||
|
|
||||||
|
### setOwner
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function setOwner(address newOwner) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| -------- | ------- | ----------- |
|
||||||
|
| newOwner | address | undefined |
|
||||||
|
|
||||||
|
### setReputation
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function setReputation(contract IReputation _reputation) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------------ | -------------------- | ----------- |
|
||||||
|
| \_reputation | contract IReputation | undefined |
|
||||||
|
|
||||||
|
### setRoot
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function setRoot(address addr, bytes32 merkleroot) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------- | ------- | ----------- |
|
||||||
|
| addr | address | undefined |
|
||||||
|
| merkleroot | bytes32 | undefined |
|
||||||
|
|
||||||
|
### setValidSigners
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function setValidSigners(address[] _validSigners) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| -------------- | --------- | ----------- |
|
||||||
|
| \_validSigners | address[] | undefined |
|
||||||
|
|
||||||
|
### tokenSettings
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function tokenSettings(address[] _tokens, bool[] _states) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| -------- | --------- | ----------- |
|
||||||
|
| \_tokens | address[] | undefined |
|
||||||
|
| \_states | bool[] | undefined |
|
||||||
|
|
||||||
|
### unlockExpired
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function unlockExpired(bytes32[] lockIDs) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
Unlocks expired locks.
|
||||||
|
|
||||||
|
_Triggered in the callgraph by both `lock` and `withdraw` functions.This method can also have any public actor as its `tx.origin`.For each successfull unexpired lock recovered, `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.Function sighash: 0x8e2749d6._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------- | --------- | ----------- |
|
||||||
|
| lockIDs | bytes32[] | undefined |
|
||||||
|
|
||||||
|
### userRecord
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function userRecord(uint256) external view returns (uint256)
|
||||||
|
```
|
||||||
|
|
||||||
|
_Stores an relayer's last computed credit._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### validBacenSigners
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function validBacenSigners(uint256) external view returns (bool)
|
||||||
|
```
|
||||||
|
|
||||||
|
_List of valid Bacen signature addresses_
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ---- | ----------- |
|
||||||
|
| \_0 | bool | undefined |
|
||||||
|
|
||||||
|
### withdraw
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function withdraw(uint256 depositID, bytes32[] expiredLocks) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
Seller's expired deposit fund sweeper.
|
||||||
|
|
||||||
|
_A seller may use this method to recover tokens from expired deposits.Function sighash: 0x36317972._
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------------ | --------- | ----------- |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
| expiredLocks | bytes32[] | undefined |
|
||||||
|
|
||||||
|
### withdrawBalance
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function withdrawBalance() external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
_Contract's underlying balance withdraw method.Function sighash: 0x5fd8c710._
|
||||||
|
|
||||||
|
## Events
|
||||||
|
|
||||||
|
### AllowedERC20Updated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event AllowedERC20Updated(address indexed token, bool indexed state)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------------- | ------- | ----------- |
|
||||||
|
| token `indexed` | address | undefined |
|
||||||
|
| state `indexed` | bool | undefined |
|
||||||
|
|
||||||
|
### DepositAdded
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event DepositAdded(address indexed seller, uint256 depositID, address token, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
███ Events ████████████████████████████████████████████████████████████
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------------- | ------- | ----------- |
|
||||||
|
| seller `indexed` | address | undefined |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
| token | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### DepositClosed
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event DepositClosed(address indexed seller, uint256 depositID)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------------- | ------- | ----------- |
|
||||||
|
| seller `indexed` | address | undefined |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
|
||||||
|
### DepositWithdrawn
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------------- | ------- | ----------- |
|
||||||
|
| seller `indexed` | address | undefined |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### FundsWithdrawn
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event FundsWithdrawn(address owner, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------ | ------- | ----------- |
|
||||||
|
| owner | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### LockAdded
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------------- | ------- | ----------- |
|
||||||
|
| buyer `indexed` | address | undefined |
|
||||||
|
| lockID `indexed` | bytes32 | undefined |
|
||||||
|
| depositID | uint256 | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### LockBlocksUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event LockBlocksUpdated(uint256 blocks)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------ | ------- | ----------- |
|
||||||
|
| blocks | uint256 | undefined |
|
||||||
|
|
||||||
|
### LockReleased
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event LockReleased(address indexed buyer, bytes32 lockId)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------------- | ------- | ----------- |
|
||||||
|
| buyer `indexed` | address | undefined |
|
||||||
|
| lockId | bytes32 | undefined |
|
||||||
|
|
||||||
|
### LockReturned
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event LockReturned(address indexed buyer, bytes32 lockId)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| --------------- | ------- | ----------- |
|
||||||
|
| buyer `indexed` | address | undefined |
|
||||||
|
| lockId | bytes32 | undefined |
|
||||||
|
|
||||||
|
### OwnerUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event OwnerUpdated(address indexed user, address indexed newOwner)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------------------ | ------- | ----------- |
|
||||||
|
| user `indexed` | address | undefined |
|
||||||
|
| newOwner `indexed` | address | undefined |
|
||||||
|
|
||||||
|
### ReputationUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event ReputationUpdated(address reputation)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---------- | ------- | ----------- |
|
||||||
|
| reputation | address | undefined |
|
||||||
|
|
||||||
|
### ValidSignersUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event ValidSignersUpdated(address[] signers)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------- | --------- | ----------- |
|
||||||
|
| signers | address[] | undefined |
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
|
### AddressDenied
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error AddressDenied()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Address doesn't exist in a MerkleTree.Address not allowed as relayer.0x3b8474be_
|
||||||
|
|
||||||
|
### AlreadyReleased
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error AlreadyReleased()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Lock already released or returned.0x63b4904e_
|
||||||
|
|
||||||
|
### AmountNotAllowed
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error AmountNotAllowed()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Wished amount to be locked exceeds the limit allowed.0x1c18f846_
|
||||||
|
|
||||||
|
### DepositAlreadyExists
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error DepositAlreadyExists()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Deposit already exist and it is still valid.0xc44bd765_
|
||||||
|
|
||||||
|
### InvalidDeposit
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error InvalidDeposit()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Deposit not valid anymore.0xb2e532de_
|
||||||
|
|
||||||
|
### InvalidSigner
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error InvalidSigner()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Signer is not a valid signer.0x815e1d64_
|
||||||
|
|
||||||
|
### LengthMismatch
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error LengthMismatch()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Arrays' length don't match.0xff633a38_
|
||||||
|
|
||||||
|
### LoopOverflow
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error LoopOverflow()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Loop bounds have overflowed.0xdfb035c9_
|
||||||
|
|
||||||
|
### NoTokens
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error NoTokens()
|
||||||
|
```
|
||||||
|
|
||||||
|
_No tokens array provided as argument.0xdf957883_
|
||||||
|
|
||||||
|
### NotEnoughTokens
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error NotEnoughTokens()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Not enough token remaining on deposit.0x22bbb43c_
|
||||||
|
|
||||||
|
### NotExpired
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error NotExpired()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85_
|
||||||
|
|
||||||
|
### OnlySeller
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error OnlySeller()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726_
|
||||||
|
|
||||||
|
### Reentrancy
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error Reentrancy()
|
||||||
|
```
|
||||||
|
|
||||||
|
### TokenDenied
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error TokenDenied()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Token address not allowed to be deposited.0x1578328e_
|
||||||
|
|
||||||
|
### TxAlreadyUsed
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error TxAlreadyUsed()
|
||||||
|
```
|
||||||
|
|
||||||
|
_Transaction already used to unlock payment.0xf490a6ea_
|
||||||
@@ -1,28 +1,6 @@
|
|||||||
# Solidity API
|
# Reputation
|
||||||
|
|
||||||
## Reputation
|
## Methods
|
||||||
|
|
||||||
### maxLimit
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 maxLimit
|
|
||||||
```
|
|
||||||
|
|
||||||
_Asymptote numerator constant value for the `limiter` fx._
|
|
||||||
|
|
||||||
### magicValue
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 magicValue
|
|
||||||
```
|
|
||||||
|
|
||||||
_Denominator's constant operand for the `limiter` fx._
|
|
||||||
|
|
||||||
### constructor
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
constructor() public payable
|
|
||||||
```
|
|
||||||
|
|
||||||
### limiter
|
### limiter
|
||||||
|
|
||||||
@@ -30,12 +8,81 @@ constructor() public payable
|
|||||||
function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit)
|
function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit)
|
||||||
```
|
```
|
||||||
|
|
||||||
### sqrt
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------------ | ------- | ----------- |
|
||||||
|
| \_userCredit | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------------ | ------- | ----------- |
|
||||||
|
| \_spendLimit | uint256 | undefined |
|
||||||
|
|
||||||
|
### magicValue
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
function sqrt(uint256 x) internal pure returns (uint256 z)
|
function magicValue() external view returns (uint256)
|
||||||
```
|
```
|
||||||
|
|
||||||
Taken from Solmate's FixedPointMathLib.
|
_Denominator's constant operand for the `limiter` fx. _
|
||||||
(https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol)
|
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### maxLimit
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function maxLimit() external view returns (uint256)
|
||||||
|
```
|
||||||
|
|
||||||
|
_Asymptote numerator constant value for the `limiter` fx._
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### owner
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function owner() external view returns (address)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | address | undefined |
|
||||||
|
|
||||||
|
### setOwner
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function setOwner(address newOwner) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| -------- | ------- | ----------- |
|
||||||
|
| newOwner | address | undefined |
|
||||||
|
|
||||||
|
## Events
|
||||||
|
|
||||||
|
### OwnerUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event OwnerUpdated(address indexed user, address indexed newOwner)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------------------ | ------- | ----------- |
|
||||||
|
| user `indexed` | address | undefined |
|
||||||
|
| newOwner `indexed` | address | undefined |
|
||||||
|
|||||||
@@ -1,89 +0,0 @@
|
|||||||
# Solidity API
|
|
||||||
|
|
||||||
## BaseUtils
|
|
||||||
|
|
||||||
### _setUsedTransactions
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _setUsedTransactions(bytes32 message) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
███ Helper FX ██████████████████████████████████████████████████████████
|
|
||||||
|
|
||||||
### usedTransactions
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function usedTransactions(bytes32 message) public view returns (bool used)
|
|
||||||
```
|
|
||||||
|
|
||||||
### _signerCheck
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _signerCheck(bytes32 _message, bytes _signature) internal view
|
|
||||||
```
|
|
||||||
|
|
||||||
### _merkleVerify
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _merkleVerify(bytes32[] _merkleProof, bytes32 _root, address _addr) internal pure
|
|
||||||
```
|
|
||||||
|
|
||||||
### _castBool
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _castBool(bool _valid) internal pure returns (uint256 _validCasted)
|
|
||||||
```
|
|
||||||
|
|
||||||
### getStr
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function getStr(string str) public pure returns (bytes32 strEnc)
|
|
||||||
```
|
|
||||||
|
|
||||||
### _setSellerBalance
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _setSellerBalance(address _sellerKey, contract ERC20 _erc20, uint256 _packed, bytes32 _pixTarget) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
### _setValidState
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _setValidState(address _sellerKey, contract ERC20 _erc20, uint256 _packed) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
### _addSellerBalance
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _addSellerBalance(address _sellerKey, contract ERC20 _erc20, uint256 _amount) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
### _decSellerBalance
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _decSellerBalance(address _sellerKey, contract ERC20 _erc20, uint256 _amount) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
### __sellerBalance
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function __sellerBalance(address _sellerKey, contract ERC20 _erc20) internal view returns (uint256 _packed)
|
|
||||||
```
|
|
||||||
|
|
||||||
### _castAddrToKey
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _castAddrToKey(address _addr) public pure returns (uint256 _key)
|
|
||||||
```
|
|
||||||
|
|
||||||
Public method that handles `address`
|
|
||||||
to `uint256` safe type casting.
|
|
||||||
|
|
||||||
_Function sighash: 0x4b2ae980._
|
|
||||||
|
|
||||||
### _castKeyToAddr
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _castKeyToAddr(uint256 _key) public pure returns (address _addr)
|
|
||||||
```
|
|
||||||
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
# Solidity API
|
|
||||||
|
|
||||||
## Constants
|
|
||||||
|
|
||||||
### _ROOT_UPDATED_EVENT_SIGNATURE
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 _ROOT_UPDATED_EVENT_SIGNATURE
|
|
||||||
```
|
|
||||||
|
|
||||||
███ Constants ██████████████████████████████████████████████████████████
|
|
||||||
|
|
||||||
### _ALLOWED_ERC20_UPDATED_EVENT_SIGNATURE
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 _ALLOWED_ERC20_UPDATED_EVENT_SIGNATURE
|
|
||||||
```
|
|
||||||
|
|
||||||
### _TRUSTED_FORWARDER_UPDATED_EVENT_SIGNATURE
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 _TRUSTED_FORWARDER_UPDATED_EVENT_SIGNATURE
|
|
||||||
```
|
|
||||||
|
|
||||||
### _SELLER_ALLOWLIST_SLOT_SEED
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 _SELLER_ALLOWLIST_SLOT_SEED
|
|
||||||
```
|
|
||||||
|
|
||||||
_Seller casted to key => Seller's allowlist merkleroot.
|
|
||||||
mapping(uint256 => bytes32) public sellerAllowList;_
|
|
||||||
|
|
||||||
### _ALLOWED_ERC20_SLOT_SEED
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 _ALLOWED_ERC20_SLOT_SEED
|
|
||||||
```
|
|
||||||
|
|
||||||
_Tokens allowed to serve as the underlying amount of a deposit.
|
|
||||||
mapping(ERC20 => bool) public allowedERC20s;_
|
|
||||||
|
|
||||||
### _SELLER_BALANCE_SLOT_SEED
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 _SELLER_BALANCE_SLOT_SEED
|
|
||||||
```
|
|
||||||
|
|
||||||
_Value in custom storage slot given by:
|
|
||||||
mstore(0x20, token)
|
|
||||||
mstore(0x0c, _SELLER_BALANCE_SLOT_SEED)
|
|
||||||
mstore(0x00, seller)
|
|
||||||
let value := sload(keccak256(0x0c, 0x34))._
|
|
||||||
|
|
||||||
### BITMASK_SB_ENTRY
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 BITMASK_SB_ENTRY
|
|
||||||
```
|
|
||||||
|
|
||||||
_The bitmask of `sellerBalance` entry._
|
|
||||||
|
|
||||||
### BITPOS_VALID
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 BITPOS_VALID
|
|
||||||
```
|
|
||||||
|
|
||||||
_The bit position of `valid` in `sellerBalance`._
|
|
||||||
|
|
||||||
### WAD
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 WAD
|
|
||||||
```
|
|
||||||
|
|
||||||
_The scalar of BRZ token._
|
|
||||||
|
|
||||||
### MAXBALANCE_UPPERBOUND
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 MAXBALANCE_UPPERBOUND
|
|
||||||
```
|
|
||||||
|
|
||||||
### REPUTATION_LOWERBOUND
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 REPUTATION_LOWERBOUND
|
|
||||||
```
|
|
||||||
|
|
||||||
### LOCKAMOUNT_UPPERBOUND
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 LOCKAMOUNT_UPPERBOUND
|
|
||||||
```
|
|
||||||
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# Solidity API
|
|
||||||
|
|
||||||
## DataTypes
|
|
||||||
|
|
||||||
### Lock
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
struct Lock {
|
|
||||||
uint256 counter;
|
|
||||||
uint256 expirationBlock;
|
|
||||||
bytes32 pixTarget;
|
|
||||||
uint80 amount;
|
|
||||||
contract ERC20 token;
|
|
||||||
address buyerAddress;
|
|
||||||
address seller;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### LockStatus
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
enum LockStatus {
|
|
||||||
Inexistent,
|
|
||||||
Active,
|
|
||||||
Expired,
|
|
||||||
Released
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
@@ -1,278 +0,0 @@
|
|||||||
# Solidity API
|
|
||||||
|
|
||||||
## EventAndErrors
|
|
||||||
|
|
||||||
### DepositAdded
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event DepositAdded(address seller, contract ERC20 token, uint256 amount)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf_
|
|
||||||
|
|
||||||
### ValidSet
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event ValidSet(address seller, contract ERC20 token, bool state)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0xca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d49_
|
|
||||||
|
|
||||||
### DepositWithdrawn
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event DepositWithdrawn(address seller, contract ERC20 token, uint256 amount)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e_
|
|
||||||
|
|
||||||
### LockAdded
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event LockAdded(address buyer, uint256 lockID, address seller, uint256 amount)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65_
|
|
||||||
|
|
||||||
### LockReleased
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event LockReleased(address buyer, uint256 lockId, uint256 amount)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8_
|
|
||||||
|
|
||||||
### LockReturned
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event LockReturned(address buyer, uint256 lockId)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da5_
|
|
||||||
|
|
||||||
### FundsWithdrawn
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event FundsWithdrawn(address owner, uint256 amount)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0xeaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d_
|
|
||||||
|
|
||||||
### RootUpdated
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event RootUpdated(address seller, bytes32 merkleRoot)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632_
|
|
||||||
|
|
||||||
### AllowedERC20Updated
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event AllowedERC20Updated(address token, bool state)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a_
|
|
||||||
|
|
||||||
### TrustedForwarderUpdated
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event TrustedForwarderUpdated(address forwarder, bool state)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0xbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df92_
|
|
||||||
|
|
||||||
### ReputationUpdated
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event ReputationUpdated(address reputation)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0xe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f_
|
|
||||||
|
|
||||||
### LockBlocksUpdated
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event LockBlocksUpdated(uint256 blocks)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511_
|
|
||||||
|
|
||||||
### ValidSignersUpdated
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event ValidSignersUpdated(address[] signers)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d7_
|
|
||||||
|
|
||||||
### OnlySeller
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error OnlySeller()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Only seller could call this function.
|
|
||||||
`msg.sender` and the seller differ.
|
|
||||||
0x85d1f726_
|
|
||||||
|
|
||||||
### NotExpired
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error NotExpired()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Lock not expired or already released.
|
|
||||||
Another lock with same ID is not expired yet.
|
|
||||||
0xd0404f85_
|
|
||||||
|
|
||||||
### LoopOverflow
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error LoopOverflow()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Loop bounds have overflowed.
|
|
||||||
0xdfb035c9_
|
|
||||||
|
|
||||||
### InvalidDeposit
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error InvalidDeposit()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Deposit not valid anymore.
|
|
||||||
0xb2e532de_
|
|
||||||
|
|
||||||
### NotEnoughTokens
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error NotEnoughTokens()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Not enough token remaining on deposit.
|
|
||||||
0x22bbb43c_
|
|
||||||
|
|
||||||
### AlreadyReleased
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error AlreadyReleased()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Lock already released or returned.
|
|
||||||
0x63b4904e_
|
|
||||||
|
|
||||||
### TxAlreadyUsed
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error TxAlreadyUsed()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Transaction already used to unlock payment.
|
|
||||||
0xf490a6ea_
|
|
||||||
|
|
||||||
### InvalidSigner
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error InvalidSigner()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Signer is not a valid signer.
|
|
||||||
0x815e1d64_
|
|
||||||
|
|
||||||
### AddressDenied
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error AddressDenied()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Address doesn't exist in a MerkleTree.
|
|
||||||
Address not allowed as relayer.
|
|
||||||
0x3b8474be_
|
|
||||||
|
|
||||||
### LengthMismatch
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error LengthMismatch()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Arrays' length don't match.
|
|
||||||
0xff633a38_
|
|
||||||
|
|
||||||
### NoTokens
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error NoTokens()
|
|
||||||
```
|
|
||||||
|
|
||||||
_No tokens array provided as argument.
|
|
||||||
0xdf957883_
|
|
||||||
|
|
||||||
### TokenDenied
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error TokenDenied()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Token address not allowed to be deposited.
|
|
||||||
0x1578328e_
|
|
||||||
|
|
||||||
### AmountNotAllowed
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error AmountNotAllowed()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Wished amount to be locked exceeds the limit allowed.
|
|
||||||
0x1c18f846_
|
|
||||||
|
|
||||||
### StaticCallFailed
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error StaticCallFailed()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Reverts when success return value returns false.
|
|
||||||
0xe10bf1cc_
|
|
||||||
|
|
||||||
### LockExpired
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error LockExpired()
|
|
||||||
```
|
|
||||||
|
|
||||||
_Reverts on an expired lock.
|
|
||||||
0xf6fafba0_
|
|
||||||
|
|
||||||
### DecOverflow
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error DecOverflow()
|
|
||||||
```
|
|
||||||
|
|
||||||
_0xce3a3d37_
|
|
||||||
|
|
||||||
### MaxBalExceeded
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error MaxBalExceeded()
|
|
||||||
```
|
|
||||||
|
|
||||||
_0xf3fb0eb9_
|
|
||||||
|
|
||||||
### EmptyPixTarget
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error EmptyPixTarget()
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x6a3bc53e_
|
|
||||||
|
|
||||||
### NotInitialized
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error NotInitialized()
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x87138d5c_
|
|
||||||
|
|
||||||
@@ -1,98 +0,0 @@
|
|||||||
# Solidity API
|
|
||||||
|
|
||||||
## OwnerSettings
|
|
||||||
|
|
||||||
### reputation
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
contract IReputation reputation
|
|
||||||
```
|
|
||||||
|
|
||||||
_List of valid Bacen signature addresses
|
|
||||||
mapping(uint256 => bool) public validBacenSigners;
|
|
||||||
Value in custom storage slot given by:
|
|
||||||
let value := sload(shl(12, address))._
|
|
||||||
|
|
||||||
### defaultLockBlocks
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 defaultLockBlocks
|
|
||||||
```
|
|
||||||
|
|
||||||
_Default blocks that lock will hold tokens._
|
|
||||||
|
|
||||||
### constructor
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
constructor(uint256 defaultBlocks, address[] validSigners, address _reputation, contract ERC20[] tokens, bool[] tokenStates) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
███ Constructor ████████████████████████████████████████████████████████
|
|
||||||
|
|
||||||
### setTrustedFowarders
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function setTrustedFowarders(address[] forwarders, bool[] states) external
|
|
||||||
```
|
|
||||||
|
|
||||||
███ Owner Only █████████████████████████████████████████████████████████
|
|
||||||
|
|
||||||
### withdrawBalance
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function withdrawBalance() external
|
|
||||||
```
|
|
||||||
|
|
||||||
_Contract's underlying balance withdraw method.
|
|
||||||
Function sighash: 0x5fd8c710._
|
|
||||||
|
|
||||||
### setReputation
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function setReputation(contract IReputation _reputation) public
|
|
||||||
```
|
|
||||||
|
|
||||||
### setDefaultLockBlocks
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function setDefaultLockBlocks(uint256 _blocks) public
|
|
||||||
```
|
|
||||||
|
|
||||||
### setValidSigners
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function setValidSigners(address[] _validSigners) public
|
|
||||||
```
|
|
||||||
|
|
||||||
### tokenSettings
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function tokenSettings(contract ERC20[] _tokens, bool[] _states) public
|
|
||||||
```
|
|
||||||
|
|
||||||
### validBacenSigners
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function validBacenSigners(uint256 signer) public view returns (bool valid)
|
|
||||||
```
|
|
||||||
|
|
||||||
███ View FX ████████████████████████████████████████████████████████████
|
|
||||||
|
|
||||||
### sellerAllowList
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function sellerAllowList(address sellerKey) public view returns (bytes32 root)
|
|
||||||
```
|
|
||||||
|
|
||||||
### allowedERC20s
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function allowedERC20s(contract ERC20 erc20) public view returns (bool state)
|
|
||||||
```
|
|
||||||
|
|
||||||
### _limiter
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _limiter(uint256 _userCredit) internal view returns (uint256 _spendLimit)
|
|
||||||
```
|
|
||||||
|
|
||||||
@@ -1,42 +1,46 @@
|
|||||||
# Solidity API
|
# Owned
|
||||||
|
|
||||||
## Owned
|
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Owned.sol)_
|
||||||
|
|
||||||
Simple single owner authorization mixin.
|
Simple single owner authorization mixin.
|
||||||
|
|
||||||
### Unauthorized
|
## Methods
|
||||||
|
|
||||||
```solidity
|
|
||||||
error Unauthorized()
|
|
||||||
```
|
|
||||||
|
|
||||||
### OwnerUpdated
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event OwnerUpdated(address user, address newOwner)
|
|
||||||
```
|
|
||||||
|
|
||||||
### owner
|
### owner
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
address owner
|
function owner() external view returns (address)
|
||||||
```
|
```
|
||||||
|
|
||||||
### onlyOwner
|
#### Returns
|
||||||
|
|
||||||
```solidity
|
| Name | Type | Description |
|
||||||
modifier onlyOwner()
|
| ---- | ------- | ----------- |
|
||||||
```
|
| \_0 | address | undefined |
|
||||||
|
|
||||||
### constructor
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
constructor(address _owner) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
### setOwner
|
### setOwner
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
function setOwner(address newOwner) public virtual
|
function setOwner(address newOwner) external nonpayable
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| -------- | ------- | ----------- |
|
||||||
|
| newOwner | address | undefined |
|
||||||
|
|
||||||
|
## Events
|
||||||
|
|
||||||
|
### OwnerUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event OwnerUpdated(address indexed user, address indexed newOwner)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------------------ | ------- | ----------- |
|
||||||
|
| user `indexed` | address | undefined |
|
||||||
|
| newOwner `indexed` | address | undefined |
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Solidity API
|
# IReputation
|
||||||
|
|
||||||
## IReputation
|
## Methods
|
||||||
|
|
||||||
### limiter
|
### limiter
|
||||||
|
|
||||||
@@ -8,3 +8,14 @@
|
|||||||
function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit)
|
function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------------ | ------- | ----------- |
|
||||||
|
| \_userCredit | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------------ | ------- | ----------- |
|
||||||
|
| \_spendLimit | uint256 | undefined |
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
# Solidity API
|
|
||||||
|
|
||||||
## Context
|
|
||||||
|
|
||||||
_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._
|
|
||||||
|
|
||||||
### _msgSender
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _msgSender() internal view virtual returns (address)
|
|
||||||
```
|
|
||||||
|
|
||||||
### _msgData
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _msgData() internal view virtual returns (bytes)
|
|
||||||
```
|
|
||||||
|
|
||||||
## ERC2771Context
|
|
||||||
|
|
||||||
_Context variant with ERC2771 support._
|
|
||||||
|
|
||||||
### trustedForwarders
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
mapping(address => bool) trustedForwarders
|
|
||||||
```
|
|
||||||
|
|
||||||
### _msgSender
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _msgSender() internal view virtual returns (address sender)
|
|
||||||
```
|
|
||||||
|
|
||||||
### isTrustedForwarder
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function isTrustedForwarder(address forwarder) public view virtual returns (bool)
|
|
||||||
```
|
|
||||||
|
|
||||||
### _msgData
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _msgData() internal view virtual returns (bytes)
|
|
||||||
```
|
|
||||||
|
|
||||||
224
docs/lib/mock/MockToken.md
Normal file
224
docs/lib/mock/MockToken.md
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
# MockToken
|
||||||
|
|
||||||
|
## Methods
|
||||||
|
|
||||||
|
### DOMAIN_SEPARATOR
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function DOMAIN_SEPARATOR() external view returns (bytes32)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | bytes32 | undefined |
|
||||||
|
|
||||||
|
### allowance
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function allowance(address, address) external view returns (uint256)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | address | undefined |
|
||||||
|
| \_1 | address | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### approve
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function approve(address spender, uint256 amount) external nonpayable returns (bool)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------- | ------- | ----------- |
|
||||||
|
| spender | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ---- | ----------- |
|
||||||
|
| \_0 | bool | undefined |
|
||||||
|
|
||||||
|
### balanceOf
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function balanceOf(address) external view returns (uint256)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | address | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### decimals
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function decimals() external view returns (uint8)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ----- | ----------- |
|
||||||
|
| \_0 | uint8 | undefined |
|
||||||
|
|
||||||
|
### name
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function name() external view returns (string)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------ | ----------- |
|
||||||
|
| \_0 | string | undefined |
|
||||||
|
|
||||||
|
### nonces
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function nonces(address) external view returns (uint256)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | address | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### permit
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| -------- | ------- | ----------- |
|
||||||
|
| owner | address | undefined |
|
||||||
|
| spender | address | undefined |
|
||||||
|
| value | uint256 | undefined |
|
||||||
|
| deadline | uint256 | undefined |
|
||||||
|
| v | uint8 | undefined |
|
||||||
|
| r | bytes32 | undefined |
|
||||||
|
| s | bytes32 | undefined |
|
||||||
|
|
||||||
|
### symbol
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function symbol() external view returns (string)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------ | ----------- |
|
||||||
|
| \_0 | string | undefined |
|
||||||
|
|
||||||
|
### totalSupply
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function totalSupply() external view returns (uint256)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### transfer
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function transfer(address to, uint256 amount) external nonpayable returns (bool)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------ | ------- | ----------- |
|
||||||
|
| to | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ---- | ----------- |
|
||||||
|
| \_0 | bool | undefined |
|
||||||
|
|
||||||
|
### transferFrom
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function transferFrom(address from, address to, uint256 amount) external nonpayable returns (bool)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------ | ------- | ----------- |
|
||||||
|
| from | address | undefined |
|
||||||
|
| to | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ---- | ----------- |
|
||||||
|
| \_0 | bool | undefined |
|
||||||
|
|
||||||
|
## Events
|
||||||
|
|
||||||
|
### Approval
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event Approval(address indexed owner, address indexed spender, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ----------------- | ------- | ----------- |
|
||||||
|
| owner `indexed` | address | undefined |
|
||||||
|
| spender `indexed` | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### Transfer
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event Transfer(address indexed from, address indexed to, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| -------------- | ------- | ----------- |
|
||||||
|
| from `indexed` | address | undefined |
|
||||||
|
| to `indexed` | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
@@ -1,128 +1,230 @@
|
|||||||
# Solidity API
|
# ERC20
|
||||||
|
|
||||||
## ERC20
|
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)_
|
||||||
|
|
||||||
Modern and gas efficient ERC20 + EIP-2612 implementation.
|
Modern and gas efficient ERC20 + EIP-2612 implementation.
|
||||||
|
|
||||||
_Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it._
|
_Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it._
|
||||||
|
|
||||||
### Transfer
|
## Methods
|
||||||
|
|
||||||
```solidity
|
|
||||||
event Transfer(address from, address to, uint256 amount)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Approval
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
event Approval(address owner, address spender, uint256 amount)
|
|
||||||
```
|
|
||||||
|
|
||||||
### name
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
string name
|
|
||||||
```
|
|
||||||
|
|
||||||
### symbol
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
string symbol
|
|
||||||
```
|
|
||||||
|
|
||||||
### decimals
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint8 decimals
|
|
||||||
```
|
|
||||||
|
|
||||||
### totalSupply
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 totalSupply
|
|
||||||
```
|
|
||||||
|
|
||||||
### balanceOf
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
mapping(address => uint256) balanceOf
|
|
||||||
```
|
|
||||||
|
|
||||||
### allowance
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
mapping(address => mapping(address => uint256)) allowance
|
|
||||||
```
|
|
||||||
|
|
||||||
### INITIAL_CHAIN_ID
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 INITIAL_CHAIN_ID
|
|
||||||
```
|
|
||||||
|
|
||||||
### INITIAL_DOMAIN_SEPARATOR
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
bytes32 INITIAL_DOMAIN_SEPARATOR
|
|
||||||
```
|
|
||||||
|
|
||||||
### nonces
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
mapping(address => uint256) nonces
|
|
||||||
```
|
|
||||||
|
|
||||||
### constructor
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
constructor(string _name, string _symbol, uint8 _decimals) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
### approve
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function approve(address spender, uint256 amount) public virtual returns (bool)
|
|
||||||
```
|
|
||||||
|
|
||||||
### transfer
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function transfer(address to, uint256 amount) public virtual returns (bool)
|
|
||||||
```
|
|
||||||
|
|
||||||
### transferFrom
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function transferFrom(address from, address to, uint256 amount) public virtual returns (bool)
|
|
||||||
```
|
|
||||||
|
|
||||||
### permit
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public virtual
|
|
||||||
```
|
|
||||||
|
|
||||||
### DOMAIN_SEPARATOR
|
### DOMAIN_SEPARATOR
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
function DOMAIN_SEPARATOR() public view virtual returns (bytes32)
|
function DOMAIN_SEPARATOR() external view returns (bytes32)
|
||||||
```
|
```
|
||||||
|
|
||||||
### computeDomainSeparator
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | bytes32 | undefined |
|
||||||
|
|
||||||
|
### allowance
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
function computeDomainSeparator() internal view virtual returns (bytes32)
|
function allowance(address, address) external view returns (uint256)
|
||||||
```
|
```
|
||||||
|
|
||||||
### _mint
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | address | undefined |
|
||||||
|
| \_1 | address | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### approve
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
function _mint(address to, uint256 amount) internal virtual
|
function approve(address spender, uint256 amount) external nonpayable returns (bool)
|
||||||
```
|
```
|
||||||
|
|
||||||
### _burn
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------- | ------- | ----------- |
|
||||||
|
| spender | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ---- | ----------- |
|
||||||
|
| \_0 | bool | undefined |
|
||||||
|
|
||||||
|
### balanceOf
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
function _burn(address from, uint256 amount) internal virtual
|
function balanceOf(address) external view returns (uint256)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | address | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### decimals
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function decimals() external view returns (uint8)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ----- | ----------- |
|
||||||
|
| \_0 | uint8 | undefined |
|
||||||
|
|
||||||
|
### name
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function name() external view returns (string)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------ | ----------- |
|
||||||
|
| \_0 | string | undefined |
|
||||||
|
|
||||||
|
### nonces
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function nonces(address) external view returns (uint256)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | address | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### permit
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external nonpayable
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| -------- | ------- | ----------- |
|
||||||
|
| owner | address | undefined |
|
||||||
|
| spender | address | undefined |
|
||||||
|
| value | uint256 | undefined |
|
||||||
|
| deadline | uint256 | undefined |
|
||||||
|
| v | uint8 | undefined |
|
||||||
|
| r | bytes32 | undefined |
|
||||||
|
| s | bytes32 | undefined |
|
||||||
|
|
||||||
|
### symbol
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function symbol() external view returns (string)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------ | ----------- |
|
||||||
|
| \_0 | string | undefined |
|
||||||
|
|
||||||
|
### totalSupply
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function totalSupply() external view returns (uint256)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ------- | ----------- |
|
||||||
|
| \_0 | uint256 | undefined |
|
||||||
|
|
||||||
|
### transfer
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function transfer(address to, uint256 amount) external nonpayable returns (bool)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------ | ------- | ----------- |
|
||||||
|
| to | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ---- | ----------- |
|
||||||
|
| \_0 | bool | undefined |
|
||||||
|
|
||||||
|
### transferFrom
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function transferFrom(address from, address to, uint256 amount) external nonpayable returns (bool)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ------ | ------- | ----------- |
|
||||||
|
| from | address | undefined |
|
||||||
|
| to | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ---- | ----------- |
|
||||||
|
| \_0 | bool | undefined |
|
||||||
|
|
||||||
|
## Events
|
||||||
|
|
||||||
|
### Approval
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event Approval(address indexed owner, address indexed spender, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ----------------- | ------- | ----------- |
|
||||||
|
| owner `indexed` | address | undefined |
|
||||||
|
| spender `indexed` | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### Transfer
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event Transfer(address indexed from, address indexed to, uint256 amount)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| -------------- | ------- | ----------- |
|
||||||
|
| from `indexed` | address | undefined |
|
||||||
|
| to `indexed` | address | undefined |
|
||||||
|
| amount | uint256 | undefined |
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
# Solidity API
|
|
||||||
|
|
||||||
## ECDSA
|
|
||||||
|
|
||||||
Gas optimized ECDSA wrapper.
|
|
||||||
|
|
||||||
### InvalidSignature
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error InvalidSignature()
|
|
||||||
```
|
|
||||||
|
|
||||||
_The signature is invalid._
|
|
||||||
|
|
||||||
### recoverCalldata
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function recoverCalldata(bytes32 hash, bytes signature) internal view returns (address result)
|
|
||||||
```
|
|
||||||
|
|
||||||
_Recovers the signer's address from a message digest `hash`,
|
|
||||||
and the `signature`.
|
|
||||||
|
|
||||||
This function does NOT accept EIP-2098 short form signatures.
|
|
||||||
Use `recover(bytes32 hash, bytes32 r, bytes32 vs)` for EIP-2098
|
|
||||||
short form signatures instead._
|
|
||||||
|
|
||||||
### toEthSignedMessageHash
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 result)
|
|
||||||
```
|
|
||||||
|
|
||||||
_Returns an Ethereum Signed Message, created from a `hash`.
|
|
||||||
This produces a hash corresponding to the one signed with the
|
|
||||||
[`eth_sign`](https://eth.wiki/json-rpc/API#eth_sign)
|
|
||||||
JSON-RPC method as part of EIP-191._
|
|
||||||
|
|
||||||
@@ -1,14 +1,5 @@
|
|||||||
# Solidity API
|
# MerkleProofLib
|
||||||
|
|
||||||
## MerkleProofLib
|
_Solady (https://github.com/vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol)_
|
||||||
|
|
||||||
Gas optimized verification of proof of inclusion for a leaf in a Merkle tree.
|
Gas optimized verification of proof of inclusion for a leaf in a Merkle tree.
|
||||||
|
|
||||||
### verify
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function verify(bytes32[] proof, bytes32 root, bytes32 leaf) internal pure returns (bool isValid)
|
|
||||||
```
|
|
||||||
|
|
||||||
_Returns whether `leaf` exists in the Merkle tree with `root`, given `proof`._
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
# Solidity API
|
|
||||||
|
|
||||||
## Multicall
|
|
||||||
|
|
||||||
Contract that batches view function calls and aggregates their results.
|
|
||||||
|
|
||||||
### CallFailed
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error CallFailed(string reason)
|
|
||||||
```
|
|
||||||
|
|
||||||
_0x_
|
|
||||||
|
|
||||||
### Call
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
struct Call {
|
|
||||||
address target;
|
|
||||||
bytes callData;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Result
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
struct Result {
|
|
||||||
bool success;
|
|
||||||
bytes returnData;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### constructor
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
constructor() public payable
|
|
||||||
```
|
|
||||||
|
|
||||||
### mtc1
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function mtc1(struct Multicall.Call[] calls) external returns (uint256, bytes[])
|
|
||||||
```
|
|
||||||
|
|
||||||
### mtc2
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function mtc2(struct Multicall.Call[] calls) external returns (uint256, bytes32, struct Multicall.Result[])
|
|
||||||
```
|
|
||||||
|
|
||||||
@@ -1,34 +1,13 @@
|
|||||||
# Solidity API
|
# ReentrancyGuard
|
||||||
|
|
||||||
## ReentrancyGuard
|
_z0r0z.ethModified from Seaport (https://github.com/ProjectOpenSea/seaport/blob/main/contracts/lib/ReentrancyGuard.sol)Modified from Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/ReentrancyGuard.sol)_
|
||||||
|
|
||||||
Reentrancy protection for smart contracts.
|
Reentrancy protection for smart contracts.
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
### Reentrancy
|
### Reentrancy
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
error Reentrancy()
|
error Reentrancy()
|
||||||
```
|
```
|
||||||
|
|
||||||
### nonReentrant
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
modifier nonReentrant()
|
|
||||||
```
|
|
||||||
|
|
||||||
### setReentrancyGuard
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function setReentrancyGuard() internal virtual
|
|
||||||
```
|
|
||||||
|
|
||||||
_Check guard sentinel value and set it._
|
|
||||||
|
|
||||||
### clearReentrancyGuard
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function clearReentrancyGuard() internal virtual
|
|
||||||
```
|
|
||||||
|
|
||||||
_Unset sentinel value._
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,62 +1,7 @@
|
|||||||
# Solidity API
|
# SafeTransferLib
|
||||||
|
|
||||||
## SafeTransferLib
|
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)_
|
||||||
|
|
||||||
Safe ETH and ERC20 transfer library that gracefully handles missing return values.
|
Safe ETH and ERC20 transfer library that gracefully handles missing return values.
|
||||||
|
|
||||||
_Caution! This library won't check that a token has code, responsibility is delegated to the caller._
|
_Caution! This library won't check that a token has code, responsibility is delegated to the caller._
|
||||||
|
|
||||||
### ETHTransferFailed
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error ETHTransferFailed()
|
|
||||||
```
|
|
||||||
|
|
||||||
_The ETH transfer has failed._
|
|
||||||
|
|
||||||
### TransferFromFailed
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error TransferFromFailed()
|
|
||||||
```
|
|
||||||
|
|
||||||
_The ERC20 `transferFrom` has failed._
|
|
||||||
|
|
||||||
### TransferFailed
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
error TransferFailed()
|
|
||||||
```
|
|
||||||
|
|
||||||
_The ERC20 `transfer` has failed._
|
|
||||||
|
|
||||||
### safeTransferETH
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function safeTransferETH(address to, uint256 amount) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
_Sends `amount` (in wei) ETH to `to`.
|
|
||||||
Reverts upon failure._
|
|
||||||
|
|
||||||
### safeTransferFrom
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function safeTransferFrom(contract ERC20 token, address from, address to, uint256 amount) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
_Sends `amount` of ERC20 `token` from `from` to `to`.
|
|
||||||
Reverts upon failure.
|
|
||||||
|
|
||||||
The `from` account must have at least `amount` approved for
|
|
||||||
the current contract to manage._
|
|
||||||
|
|
||||||
### safeTransfer
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function safeTransfer(contract ERC20 token, address to, uint256 amount) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
_Sends `amount` of ERC20 `token` from the current contract to `to`.
|
|
||||||
Reverts upon failure._
|
|
||||||
|
|
||||||
|
|||||||
207
docs/p2pix.md
207
docs/p2pix.md
@@ -1,207 +0,0 @@
|
|||||||
# Solidity API
|
|
||||||
|
|
||||||
## P2PIX
|
|
||||||
|
|
||||||
### lockCounter
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
uint256 lockCounter
|
|
||||||
```
|
|
||||||
|
|
||||||
### mapLocks
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
mapping(uint256 => struct DataTypes.Lock) mapLocks
|
|
||||||
```
|
|
||||||
|
|
||||||
_List of Locks._
|
|
||||||
|
|
||||||
### userRecord
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
mapping(uint256 => uint256) userRecord
|
|
||||||
```
|
|
||||||
|
|
||||||
_Stores an relayer's last computed credit._
|
|
||||||
|
|
||||||
### constructor
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
constructor(uint256 defaultBlocks, address[] validSigners, address _reputation, contract ERC20[] tokens, bool[] tokenStates) public payable
|
|
||||||
```
|
|
||||||
|
|
||||||
### deposit
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function deposit(string pixTarget, bytes32 allowlistRoot, contract ERC20 token, uint96 amount, bool valid) public
|
|
||||||
```
|
|
||||||
|
|
||||||
Creates a deposit order based on a seller's
|
|
||||||
offer of an amount of ERC20 tokens.
|
|
||||||
Seller needs to send his tokens to the P2PIX smart contract.
|
|
||||||
|
|
||||||
_Function sighash: 0x5e918943_
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| pixTarget | string | Pix key destination provided by the offer's seller. |
|
|
||||||
| allowlistRoot | bytes32 | Optional allow list merkleRoot update `bytes32` value. as the deposit identifier. |
|
|
||||||
| token | contract ERC20 | |
|
|
||||||
| amount | uint96 | |
|
|
||||||
| valid | bool | |
|
|
||||||
|
|
||||||
### setValidState
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function setValidState(contract ERC20 token, bool state) public
|
|
||||||
```
|
|
||||||
|
|
||||||
Enables seller to invalidate future
|
|
||||||
locks made to his/her token offering order.
|
|
||||||
This function does not affect any ongoing active locks.
|
|
||||||
|
|
||||||
_Function sighash: 0x6d82d9e0_
|
|
||||||
|
|
||||||
### lock
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function lock(address seller, contract ERC20 token, uint80 amount, bytes32[] merkleProof, uint256[] expiredLocks) public returns (uint256 lockID)
|
|
||||||
```
|
|
||||||
|
|
||||||
Public method designed to lock an remaining amount of
|
|
||||||
the deposit order of a seller.
|
|
||||||
Transaction forwarding must leave `merkleProof` empty;
|
|
||||||
otherwise, the trustedForwarder must be previously added
|
|
||||||
to a seller whitelist.
|
|
||||||
This method can be performed either by:
|
|
||||||
- An user allowed via the seller's allowlist;
|
|
||||||
- An user with enough userRecord to lock the wished amount;
|
|
||||||
There can only exist a lock per each `_amount` partitioned
|
|
||||||
from the total `remaining` value.
|
|
||||||
Locks can only be performed in valid orders.
|
|
||||||
|
|
||||||
_Function sighash: 0xdc43221c_
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| seller | address | |
|
|
||||||
| token | contract ERC20 | |
|
|
||||||
| amount | uint80 | The deposit's remaining amount wished to be locked. |
|
|
||||||
| merkleProof | bytes32[] | Provided as a pass if the `msg.sender` is in the seller's allowlist; Left empty otherwise; |
|
|
||||||
| expiredLocks | uint256[] | An array of identifiers to be provided so to unexpire locks using this transaction gas push. |
|
|
||||||
|
|
||||||
#### Return Values
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| lockID | uint256 | The lock identifier. |
|
|
||||||
|
|
||||||
### release
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function release(uint256 lockID, bytes32 pixTimestamp, bytes signature) public
|
|
||||||
```
|
|
||||||
|
|
||||||
Lock release method that liquidate lock
|
|
||||||
orders and distributes relayer fees.
|
|
||||||
This method can be called by any public actor
|
|
||||||
as long the signature provided is valid.
|
|
||||||
`relayerPremium` gets splitted equaly
|
|
||||||
if relayer addresses differ.
|
|
||||||
If the `msg.sender` of this method and `l.relayerAddress` are the same,
|
|
||||||
`msg.sender` accrues both l.amount and l.relayerPremium as userRecord credit.
|
|
||||||
In case of they differing:
|
|
||||||
- `lock` caller gets accrued with `l.amount` as userRecord credit;
|
|
||||||
- `release` caller gets accrued with `l.relayerPremium` as userRecord credit;
|
|
||||||
|
|
||||||
_Function sighash: 0x11fc7f9a_
|
|
||||||
|
|
||||||
### unlockExpired
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function unlockExpired(uint256[] lockIDs) public
|
|
||||||
```
|
|
||||||
|
|
||||||
Unlocks expired locks.
|
|
||||||
Triggered in the callgraph by both `lock` and `withdraw` functions.
|
|
||||||
This method can also have any public actor as its `tx.origin`.
|
|
||||||
For each successfull unexpired lock recovered,
|
|
||||||
`userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.
|
|
||||||
|
|
||||||
_Function sighash: 0xb0983d39_
|
|
||||||
|
|
||||||
### withdraw
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function withdraw(contract ERC20 token, uint256 amount, uint256[] expiredLocks) public
|
|
||||||
```
|
|
||||||
|
|
||||||
Seller's expired deposit fund sweeper.
|
|
||||||
A seller may use this method to recover
|
|
||||||
tokens from expired deposits.
|
|
||||||
|
|
||||||
_Function sighash: 0xfb8c5ef0_
|
|
||||||
|
|
||||||
### setRoot
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function setRoot(address addr, bytes32 merkleroot) public
|
|
||||||
```
|
|
||||||
|
|
||||||
### receive
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
receive() external payable
|
|
||||||
```
|
|
||||||
|
|
||||||
### _addLock
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function _addLock(uint256 _bal, struct DataTypes.Lock _l) internal
|
|
||||||
```
|
|
||||||
|
|
||||||
### getBalance
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function getBalance(address seller, contract ERC20 token) public view returns (uint256 bal)
|
|
||||||
```
|
|
||||||
|
|
||||||
### getValid
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function getValid(address seller, contract ERC20 token) public view returns (bool valid)
|
|
||||||
```
|
|
||||||
|
|
||||||
### getPixTarget
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function getPixTarget(address seller, contract ERC20 token) public view returns (bytes32 pixTarget)
|
|
||||||
```
|
|
||||||
|
|
||||||
### getPixTargetString
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function getPixTargetString(address seller, contract ERC20 token) public view returns (string pixTarget)
|
|
||||||
```
|
|
||||||
|
|
||||||
### getBalances
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function getBalances(address[] sellers, contract ERC20 token) external view returns (uint256[])
|
|
||||||
```
|
|
||||||
|
|
||||||
### getLocksStatus
|
|
||||||
|
|
||||||
```solidity
|
|
||||||
function getLocksStatus(uint256[] ids) external view returns (uint256[], enum DataTypes.LockStatus[])
|
|
||||||
```
|
|
||||||
|
|
||||||
External getter that returns the status of a lockIDs array.
|
|
||||||
Call will not revert if provided with an empty array as parameter.
|
|
||||||
|
|
||||||
_Function sighash: 0x49ef8448_
|
|
||||||
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
const tseslint = require("typescript-eslint");
|
|
||||||
const js = require("@eslint/js");
|
|
||||||
const eslintConfigPrettier = require("eslint-config-prettier");
|
|
||||||
|
|
||||||
module.exports = tseslint.config(
|
|
||||||
{
|
|
||||||
ignores: [
|
|
||||||
".yarn/",
|
|
||||||
"**/.coverage_artifacts",
|
|
||||||
"**/.coverage_cache",
|
|
||||||
"**/.coverage_contracts",
|
|
||||||
"**/artifacts",
|
|
||||||
"**/build",
|
|
||||||
"**/cache",
|
|
||||||
"**/coverage",
|
|
||||||
"**/dist",
|
|
||||||
"**/node_modules",
|
|
||||||
"**/types",
|
|
||||||
"deploys/old/",
|
|
||||||
"docs/",
|
|
||||||
"*.env",
|
|
||||||
"*.log",
|
|
||||||
".pnp.*",
|
|
||||||
"coverage.json",
|
|
||||||
"npm-debug.log*",
|
|
||||||
"yarn-debug.log*",
|
|
||||||
"yarn-error.log*",
|
|
||||||
".solcover.js",
|
|
||||||
"eslint.config.js",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
js.configs.recommended,
|
|
||||||
...tseslint.configs.recommended,
|
|
||||||
eslintConfigPrettier,
|
|
||||||
{
|
|
||||||
languageOptions: {
|
|
||||||
parserOptions: {
|
|
||||||
projectService: true,
|
|
||||||
tsconfigRootDir: __dirname,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
rules: {
|
|
||||||
"@typescript-eslint/no-floating-promises": [
|
|
||||||
"error",
|
|
||||||
{ ignoreIIFE: true, ignoreVoid: true },
|
|
||||||
],
|
|
||||||
"@typescript-eslint/no-inferrable-types": "off",
|
|
||||||
"@typescript-eslint/no-unused-vars": [
|
|
||||||
"error",
|
|
||||||
{ argsIgnorePattern: "_", varsIgnorePattern: "_" },
|
|
||||||
],
|
|
||||||
"@typescript-eslint/no-unused-expressions": "off",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
);
|
|
||||||
@@ -1,82 +1,79 @@
|
|||||||
import "@nomicfoundation/hardhat-chai-matchers";
|
import "@nomicfoundation/hardhat-chai-matchers";
|
||||||
import "@nomicfoundation/hardhat-toolbox";
|
import "@nomicfoundation/hardhat-toolbox";
|
||||||
import { config as dotenvConfig } from "dotenv";
|
import { config as dotenvConfig } from "dotenv";
|
||||||
|
import "hardhat-tracer";
|
||||||
import { HardhatUserConfig } from "hardhat/config";
|
import { HardhatUserConfig } from "hardhat/config";
|
||||||
import { NetworkUserConfig } from "hardhat/types";
|
import { NetworkUserConfig } from "hardhat/types";
|
||||||
import "hardhat-contract-sizer";
|
import "hardhat-contract-sizer";
|
||||||
import { resolve } from "path";
|
import { resolve } from "path";
|
||||||
import "solidity-docgen";
|
|
||||||
|
|
||||||
dotenvConfig({ path: resolve(__dirname, "./.env") });
|
dotenvConfig({ path: resolve(__dirname, "./.env") });
|
||||||
|
|
||||||
// Default mnemonic used by Hardhat / Anvil for deterministic accounts.
|
const mnemonic: string | undefined = process.env.MNEMONIC;
|
||||||
// Lets `--network localhost` (and the default in-process `hardhat` net)
|
if (!mnemonic) {
|
||||||
// run without a .env. Public networks still require a real MNEMONIC.
|
throw new Error("Please set your MNEMONIC in a .env file");
|
||||||
const DEFAULT_MNEMONIC =
|
}
|
||||||
"test test test test test test test test test test test junk";
|
|
||||||
|
const infuraApiKey: string | undefined =
|
||||||
|
process.env.INFURA_API_KEY;
|
||||||
|
if (!infuraApiKey) {
|
||||||
|
throw new Error(
|
||||||
|
"Please set your INFURA_API_KEY in a .env file",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const mnemonic: string =
|
|
||||||
process.env.MNEMONIC ?? DEFAULT_MNEMONIC;
|
|
||||||
const alchemyApiKey: string | undefined =
|
const alchemyApiKey: string | undefined =
|
||||||
process.env.ALCHEMY_API_KEY;
|
process.env.ALCHEMY_API_KEY;
|
||||||
const privateKey: string | undefined =
|
if (!alchemyApiKey) {
|
||||||
process.env.PRIVATE_KEY;
|
throw new Error(
|
||||||
|
"Please set your ALCHEMY_API_KEY in a .env file",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const chainIds = {
|
const chainIds = {
|
||||||
// "{INSERT_NAME}": {INSERT_ID},
|
// "{INSERT_NAME}": {INSERT_ID},
|
||||||
hardhat: 31337,
|
hardhat: 31337,
|
||||||
localhost: 31337,
|
|
||||||
mainnet: 1,
|
mainnet: 1,
|
||||||
"eth-sepolia": 11155111,
|
sepolia: 11155111,
|
||||||
"polygon-mainnet": 137,
|
goerli: 5,
|
||||||
"arb-mainnet": 42161,
|
"polygon-mumbai": 80001,
|
||||||
rootstock: 30,
|
|
||||||
"rootstock-testnet": 31,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function getChainConfig(
|
function getChainConfig(
|
||||||
chain: keyof typeof chainIds,
|
chain: keyof typeof chainIds,
|
||||||
): NetworkUserConfig {
|
): NetworkUserConfig {
|
||||||
if (!alchemyApiKey) {
|
let jsonRpcUrl: string;
|
||||||
throw new Error(
|
switch (chain) {
|
||||||
`Please set ALCHEMY_API_KEY in a .env file before targeting ${chain}`,
|
case "polygon-mumbai":
|
||||||
);
|
jsonRpcUrl =
|
||||||
|
"https://polygon-mumbai.g.alchemy.com/v2/" +
|
||||||
|
alchemyApiKey;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
jsonRpcUrl =
|
||||||
|
"https://" + chain + ".infura.io/v3/" + infuraApiKey;
|
||||||
}
|
}
|
||||||
const jsonRpcUrl =
|
|
||||||
"https://" + chain + ".g.alchemy.com/v2/" + alchemyApiKey;
|
|
||||||
return {
|
return {
|
||||||
accounts: privateKey
|
// Comment out for default hardhat account settings
|
||||||
? [privateKey]
|
accounts: {
|
||||||
: {
|
count: 10,
|
||||||
count: 10,
|
mnemonic,
|
||||||
mnemonic,
|
path: "m/44'/60'/0'/0",
|
||||||
path: "m/44'/60'/0'/0",
|
},
|
||||||
},
|
// gasPrice: 8000000000,
|
||||||
chainId: chainIds[chain],
|
chainId: chainIds[chain],
|
||||||
url: jsonRpcUrl,
|
url: jsonRpcUrl,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const liveNetworks: Record<string, NetworkUserConfig> =
|
|
||||||
alchemyApiKey
|
|
||||||
? {
|
|
||||||
mainnet: getChainConfig("mainnet"),
|
|
||||||
sepolia: getChainConfig("eth-sepolia"),
|
|
||||||
polygon: getChainConfig("polygon-mainnet"),
|
|
||||||
arbitrum: getChainConfig("arb-mainnet"),
|
|
||||||
rootstock: getChainConfig("rootstock"),
|
|
||||||
rsktestnet: getChainConfig("rootstock-testnet"),
|
|
||||||
}
|
|
||||||
: {};
|
|
||||||
|
|
||||||
const config: HardhatUserConfig = {
|
const config: HardhatUserConfig = {
|
||||||
defaultNetwork: "hardhat",
|
defaultNetwork: "hardhat",
|
||||||
etherscan: {
|
etherscan: {
|
||||||
apiKey: {
|
apiKey: {
|
||||||
mainnet: process.env.ETHERSCAN_API_KEY || "",
|
mainnet: process.env.ETHERSCAN_API_KEY || "",
|
||||||
sepolia: process.env.ETHERSCAN_API_KEY || "",
|
rinkeby: process.env.ETHERSCAN_API_KEY || "",
|
||||||
polygon: process.env.POLYGONSCAN_API_KEY || "",
|
goerli: process.env.ETHERSCAN_API_KEY || "",
|
||||||
arbitrumOne: process.env.ARBISCAN_API_KEY || "",
|
polygonMumbai: process.env.POLYGONSCAN_API_KEY || "",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
gasReporter: {
|
gasReporter: {
|
||||||
@@ -84,7 +81,6 @@ const config: HardhatUserConfig = {
|
|||||||
process.env.REPORT_GAS &&
|
process.env.REPORT_GAS &&
|
||||||
process.env.REPORT_GAS != "false"
|
process.env.REPORT_GAS != "false"
|
||||||
),
|
),
|
||||||
offline: true,
|
|
||||||
showTimeSpent: true,
|
showTimeSpent: true,
|
||||||
showMethodSig: true,
|
showMethodSig: true,
|
||||||
token: "ETH",
|
token: "ETH",
|
||||||
@@ -102,16 +98,11 @@ const config: HardhatUserConfig = {
|
|||||||
},
|
},
|
||||||
chainId: chainIds.hardhat,
|
chainId: chainIds.hardhat,
|
||||||
},
|
},
|
||||||
// External Anvil / Hardhat node (e.g. `anvil --port 8545`). Used by
|
// network: getChainConfig("{INSERT_NAME}"),
|
||||||
// the frontend e2e suite to deploy a fresh chain per CI run.
|
mainnet: getChainConfig("mainnet"),
|
||||||
localhost: {
|
goerli: getChainConfig("goerli"),
|
||||||
url: "http://127.0.0.1:8545",
|
sepolia: getChainConfig("sepolia"),
|
||||||
chainId: chainIds.localhost,
|
"polygon-mumbai": getChainConfig("polygon-mumbai"),
|
||||||
accounts: {
|
|
||||||
mnemonic,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
...liveNetworks,
|
|
||||||
},
|
},
|
||||||
paths: {
|
paths: {
|
||||||
artifacts: "./artifacts",
|
artifacts: "./artifacts",
|
||||||
@@ -120,10 +111,10 @@ const config: HardhatUserConfig = {
|
|||||||
tests: "./test",
|
tests: "./test",
|
||||||
},
|
},
|
||||||
solidity: {
|
solidity: {
|
||||||
version: "0.8.28",
|
version: "0.8.19",
|
||||||
settings: {
|
settings: {
|
||||||
viaIR: true,
|
viaIR: true,
|
||||||
evmVersion: "cancun",
|
evmVersion: "paris",
|
||||||
optimizer: {
|
optimizer: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
runs: 20_000,
|
runs: 20_000,
|
||||||
@@ -143,10 +134,7 @@ const config: HardhatUserConfig = {
|
|||||||
},
|
},
|
||||||
typechain: {
|
typechain: {
|
||||||
outDir: "src/types",
|
outDir: "src/types",
|
||||||
target: "ethers-v6",
|
target: "ethers-v5",
|
||||||
},
|
|
||||||
docgen: {
|
|
||||||
pages: "files",
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";
|
|
||||||
import { ethers } from "ethers";
|
|
||||||
|
|
||||||
const DEFAULT_SUPPLY = ethers
|
|
||||||
.parseEther("20000000")
|
|
||||||
.toString();
|
|
||||||
|
|
||||||
export default buildModule("MockToken", m => {
|
|
||||||
const supply = m.getParameter("supply", DEFAULT_SUPPLY);
|
|
||||||
|
|
||||||
const token = m.contract("MockToken", [supply]);
|
|
||||||
|
|
||||||
return { token };
|
|
||||||
});
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user