Compare commits
15 Commits
@0x/protoc
...
protocol@f
Author | SHA1 | Date | |
---|---|---|---|
|
fd1f7a8a42 | ||
|
3a03174a92 | ||
|
f5e34bce3b | ||
|
3f8dbf3fe9 | ||
|
b040e55202 | ||
|
fe0676cec3 | ||
|
b697202e19 | ||
|
09bc48671c | ||
|
d31cc43ed6 | ||
|
372f23156b | ||
|
010a926d79 | ||
|
0000143b4e | ||
|
22684ff5ba | ||
|
4d9b68d527 | ||
|
957853788d |
@@ -268,6 +268,8 @@ jobs:
|
||||
command: yarn deps_versions:ci
|
||||
- run:
|
||||
command: yarn diff_md_docs:ci
|
||||
- run:
|
||||
command: yarn test:links
|
||||
submit-coverage:
|
||||
docker:
|
||||
- image: node:16
|
||||
|
@@ -6,8 +6,6 @@
|
||||
|
||||
# https://git-scm.com/docs/gitignore#_pattern_format
|
||||
|
||||
packages/asset-swapper/ @dekz @dextracker @kyu-c
|
||||
|
||||
# Dev tools & setup
|
||||
|
||||
.circleci/ @dekz
|
||||
|
@@ -8,13 +8,13 @@ We welcome contributions from anyone on the internet and are grateful for even t
|
||||
2. Clone your fork
|
||||
3. Follow the [installation & build steps](https://github.com/0xProject/0x-tools#install-dependencies) in the repo's top-level README.
|
||||
4. Setup the recommended [Development Tooling](#development-tooling).
|
||||
5. Open a PR with the `[WIP]` flag against the `development` branch and describe the change you are intending to undertake in the PR description. (see [our branch naming conventions](#branch-structure))
|
||||
5. Open a [draft PR](https://github.blog/2019-02-14-introducing-draft-pull-requests/) against the `development` branch and describe the change you are intending to undertake in the PR description. (see [our branch naming conventions](#branch-structure))
|
||||
|
||||
Before removing the `[WIP]` tag and submitting the PR for review, make sure:
|
||||
Before making the PR "Ready for review", make sure:
|
||||
|
||||
- It passes our linter checks (`yarn lint`)
|
||||
- It is properly formatted with Prettier (`yarn prettier`)
|
||||
- It passes our continuous integration tests (See: [Enabling code coverage checks on your fork](#enabling-code-coverage-checks-on-your-fork) for instructions on getting the `submit-coverage` test to pass on forks)
|
||||
- It passes our continuous integration tests (See: [Enabling code coverage checks on your fork](#fix-submit-coverage-ci-failure) for instructions on getting the `submit-coverage` test to pass on forks)
|
||||
- You've created/updated the corresponding [CHANGELOG](#CHANGELOGs) entries.
|
||||
- Your changes have sufficient test coverage (e.g regression tests have been added for bug fixes)
|
||||
|
||||
@@ -59,16 +59,14 @@ We strongly recommend you use the [VSCode](https://code.visualstudio.com/) text
|
||||
|
||||
#### Linter
|
||||
|
||||
We use [TSLint](https://palantir.github.io/tslint/) with [custom configs](https://github.com/0xProject/0x-tools/tree/development/packages/tslint-config) to keep our code-style consistent.
|
||||
We use [ESLint](https://eslint.org/docs/latest/) to keep our code-style consistent.
|
||||
|
||||
Use `yarn:lint` to lint the entire monorepo, and `PKG={PACKAGE_NAME} yarn lint` to lint a specific package.
|
||||
|
||||
If you want to change a rule, or add a custom rule, please make these changes to our [tslint-config](https://github.com/0xProject/0x-tools/tree/development/packages/tslint-config) package. All other packages have it as a dependency.
|
||||
Use `yarn lint` to lint the entire monorepo, and `PKG={PACKAGE_NAME} yarn lint` to lint a specific package.
|
||||
|
||||
Integrate it into your text editor:
|
||||
|
||||
- VSCode: [vscode-tslint](https://marketplace.visualstudio.com/items?itemName=eg2.tslint)
|
||||
- Atom: [linter-tslint](https://atom.io/packages/linter-tslint)
|
||||
- VSCode: [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
|
||||
- Atom: [ESLint](https://atom.io/packages/eslint)
|
||||
|
||||
#### Auto-formatter
|
||||
|
||||
|
@@ -20,7 +20,6 @@
|
||||
|
||||
<!--- The following points should be used to indicate the progress of your PR. Put an `x` in all the boxes that apply right now, and come back over time and check them off as you make progress. If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
|
||||
|
||||
- [ ] Prefix PR title with `[WIP]` if necessary.
|
||||
- [ ] Add tests to cover changes as needed.
|
||||
- [ ] Update documentation as needed.
|
||||
- [ ] Add new entries to the relevant CHANGELOG.jsons.
|
||||
|
@@ -1,4 +1,22 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1670879498,
|
||||
"version": "3.3.54",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1669235113,
|
||||
"version": "3.3.53",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1668477029,
|
||||
"version": "3.3.52",
|
||||
|
@@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.3.54 - _December 12, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.3.53 - _November 23, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.3.52 - _November 15, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -67,7 +67,3 @@ yarn lint
|
||||
```bash
|
||||
yarn test
|
||||
```
|
||||
|
||||
#### Testing options
|
||||
|
||||
Contracts testing options like coverage, profiling, revert traces or backing node choosing - are described [here](../TESTING.md).
|
||||
|
@@ -47,11 +47,7 @@ contract ERC20Token is IERC20Token {
|
||||
/// @param _to The address of the recipient
|
||||
/// @param _value The amount of token to be transferred
|
||||
/// @return True if transfer was successful
|
||||
function transferFrom(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _value
|
||||
) external returns (bool) {
|
||||
function transferFrom(address _from, address _to, uint256 _value) external returns (bool) {
|
||||
require(balances[_from] >= _value, "ERC20_INSUFFICIENT_BALANCE");
|
||||
require(allowed[_from][msg.sender] >= _value, "ERC20_INSUFFICIENT_ALLOWANCE");
|
||||
require(balances[_to] + _value >= balances[_to], "UINT256_OVERFLOW");
|
||||
|
@@ -31,11 +31,7 @@ library LibERC20Token {
|
||||
/// @param token The address of the token contract.
|
||||
/// @param spender The address that receives an allowance.
|
||||
/// @param allowance The allowance to set.
|
||||
function approve(
|
||||
address token,
|
||||
address spender,
|
||||
uint256 allowance
|
||||
) internal {
|
||||
function approve(address token, address spender, uint256 allowance) internal {
|
||||
bytes memory callData = abi.encodeWithSelector(IERC20Token(0).approve.selector, spender, allowance);
|
||||
_callWithOptionalBooleanResult(token, callData);
|
||||
}
|
||||
@@ -47,11 +43,7 @@ library LibERC20Token {
|
||||
/// @param token The address of the token contract.
|
||||
/// @param spender The address that receives an allowance.
|
||||
/// @param amount The minimum allowance needed.
|
||||
function approveIfBelow(
|
||||
address token,
|
||||
address spender,
|
||||
uint256 amount
|
||||
) internal {
|
||||
function approveIfBelow(address token, address spender, uint256 amount) internal {
|
||||
if (IERC20Token(token).allowance(address(this), spender) < amount) {
|
||||
approve(token, spender, uint256(-1));
|
||||
}
|
||||
@@ -63,11 +55,7 @@ library LibERC20Token {
|
||||
/// @param token The address of the token contract.
|
||||
/// @param to The address that receives the tokens
|
||||
/// @param amount Number of tokens to transfer.
|
||||
function transfer(
|
||||
address token,
|
||||
address to,
|
||||
uint256 amount
|
||||
) internal {
|
||||
function transfer(address token, address to, uint256 amount) internal {
|
||||
bytes memory callData = abi.encodeWithSelector(IERC20Token(0).transfer.selector, to, amount);
|
||||
_callWithOptionalBooleanResult(token, callData);
|
||||
}
|
||||
@@ -79,12 +67,7 @@ library LibERC20Token {
|
||||
/// @param from The owner of the tokens.
|
||||
/// @param to The address that receives the tokens
|
||||
/// @param amount Number of tokens to transfer.
|
||||
function transferFrom(
|
||||
address token,
|
||||
address from,
|
||||
address to,
|
||||
uint256 amount
|
||||
) internal {
|
||||
function transferFrom(address token, address from, address to, uint256 amount) internal {
|
||||
bytes memory callData = abi.encodeWithSelector(IERC20Token(0).transferFrom.selector, from, to, amount);
|
||||
_callWithOptionalBooleanResult(token, callData);
|
||||
}
|
||||
@@ -107,11 +90,7 @@ library LibERC20Token {
|
||||
/// @param owner The owner of the tokens.
|
||||
/// @param spender The address the spender.
|
||||
/// @return allowance The allowance for a token, owner, and spender.
|
||||
function allowance(
|
||||
address token,
|
||||
address owner,
|
||||
address spender
|
||||
) internal view returns (uint256 allowance_) {
|
||||
function allowance(address token, address owner, address spender) internal view returns (uint256 allowance_) {
|
||||
(bool didSucceed, bytes memory resultData) = token.staticcall(
|
||||
abi.encodeWithSelector(IERC20Token(0).allowance.selector, owner, spender)
|
||||
);
|
||||
|
@@ -21,7 +21,7 @@ pragma solidity ^0.5.9;
|
||||
import "./ERC20Token.sol";
|
||||
|
||||
contract UnlimitedAllowanceERC20Token is ERC20Token {
|
||||
uint256 internal constant MAX_UINT = 2**256 - 1;
|
||||
uint256 internal constant MAX_UINT = 2 ** 256 - 1;
|
||||
|
||||
/// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.
|
||||
// See https://github.com/ethereum/EIPs/issues/717
|
||||
@@ -29,11 +29,7 @@ contract UnlimitedAllowanceERC20Token is ERC20Token {
|
||||
/// @param _to Address to transfer to.
|
||||
/// @param _value Amount to transfer.
|
||||
/// @return Success of transfer.
|
||||
function transferFrom(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _value
|
||||
) external returns (bool) {
|
||||
function transferFrom(address _from, address _to, uint256 _value) external returns (bool) {
|
||||
uint256 allowance = allowed[_from][msg.sender];
|
||||
require(balances[_from] >= _value, "ERC20_INSUFFICIENT_BALANCE");
|
||||
require(allowance >= _value, "ERC20_INSUFFICIENT_ALLOWANCE");
|
||||
|
@@ -58,11 +58,7 @@ contract WETH9 {
|
||||
return transferFrom(msg.sender, dst, wad);
|
||||
}
|
||||
|
||||
function transferFrom(
|
||||
address src,
|
||||
address dst,
|
||||
uint256 wad
|
||||
) public returns (bool) {
|
||||
function transferFrom(address src, address dst, uint256 wad) public returns (bool) {
|
||||
require(balanceOf[src] >= wad);
|
||||
|
||||
if (src != msg.sender && allowance[src][msg.sender] != uint256(-1)) {
|
||||
|
@@ -37,11 +37,7 @@ contract Token {
|
||||
/// @param _to The address of the recipient
|
||||
/// @param _value The amount of token to be transferred
|
||||
/// @return Whether the transfer was successful or not
|
||||
function transferFrom(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _value
|
||||
) returns (bool success) {}
|
||||
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}
|
||||
|
||||
/// @notice `msg.sender` approves `_addr` to spend `_value` tokens
|
||||
/// @param _spender The address of the account able to transfer the tokens
|
||||
@@ -71,11 +67,7 @@ contract ERC20Token is Token {
|
||||
}
|
||||
}
|
||||
|
||||
function transferFrom(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _value
|
||||
) returns (bool) {
|
||||
function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
|
||||
if (
|
||||
balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value >= balances[_to]
|
||||
) {
|
||||
@@ -109,18 +101,14 @@ contract ERC20Token is Token {
|
||||
}
|
||||
|
||||
contract UnlimitedAllowanceToken is ERC20Token {
|
||||
uint256 constant MAX_UINT = 2**256 - 1;
|
||||
uint256 constant MAX_UINT = 2 ** 256 - 1;
|
||||
|
||||
/// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.
|
||||
/// @param _from Address to transfer from.
|
||||
/// @param _to Address to transfer to.
|
||||
/// @param _value Amount to transfer.
|
||||
/// @return Success of transfer.
|
||||
function transferFrom(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _value
|
||||
) public returns (bool) {
|
||||
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
|
||||
uint256 allowance = allowed[_from][msg.sender];
|
||||
if (balances[_from] >= _value && allowance >= _value && balances[_to] + _value >= balances[_to]) {
|
||||
balances[_to] += _value;
|
||||
@@ -138,7 +126,7 @@ contract UnlimitedAllowanceToken is ERC20Token {
|
||||
|
||||
contract ZRXToken is UnlimitedAllowanceToken {
|
||||
uint8 public constant decimals = 18;
|
||||
uint256 public totalSupply = 10**27; // 1 billion tokens, 18 decimal places
|
||||
uint256 public totalSupply = 10 ** 27; // 1 billion tokens, 18 decimal places
|
||||
string public constant name = "0x Protocol Token";
|
||||
string public constant symbol = "ZRX";
|
||||
|
||||
|
@@ -34,11 +34,7 @@ contract IERC20Token {
|
||||
/// @param _to The address of the recipient
|
||||
/// @param _value The amount of token to be transferred
|
||||
/// @return True if transfer was successful
|
||||
function transferFrom(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _value
|
||||
) external returns (bool);
|
||||
function transferFrom(address _from, address _to, uint256 _value) external returns (bool);
|
||||
|
||||
/// @dev `msg.sender` approves `_spender` to spend `_value` tokens
|
||||
/// @param _spender The address of the account able to transfer the tokens
|
||||
|
@@ -35,11 +35,7 @@ interface IERC20TokenV06 {
|
||||
/// @param to The address of the recipient
|
||||
/// @param value The amount of token to be transferred
|
||||
/// @return True if transfer was successful
|
||||
function transferFrom(
|
||||
address from,
|
||||
address to,
|
||||
uint256 value
|
||||
) external returns (bool);
|
||||
function transferFrom(address from, address to, uint256 value) external returns (bool);
|
||||
|
||||
/// @dev `msg.sender` approves `spender` to spend `value` tokens
|
||||
/// @param spender The address of the account able to transfer the tokens
|
||||
|
@@ -31,11 +31,7 @@ library LibERC20TokenV06 {
|
||||
/// @param token The address of the token contract.
|
||||
/// @param spender The address that receives an allowance.
|
||||
/// @param allowance The allowance to set.
|
||||
function compatApprove(
|
||||
IERC20TokenV06 token,
|
||||
address spender,
|
||||
uint256 allowance
|
||||
) internal {
|
||||
function compatApprove(IERC20TokenV06 token, address spender, uint256 allowance) internal {
|
||||
bytes memory callData = abi.encodeWithSelector(token.approve.selector, spender, allowance);
|
||||
_callWithOptionalBooleanResult(address(token), callData);
|
||||
}
|
||||
@@ -46,11 +42,7 @@ library LibERC20TokenV06 {
|
||||
/// @param token The address of the token contract.
|
||||
/// @param spender The address that receives an allowance.
|
||||
/// @param amount The minimum allowance needed.
|
||||
function approveIfBelow(
|
||||
IERC20TokenV06 token,
|
||||
address spender,
|
||||
uint256 amount
|
||||
) internal {
|
||||
function approveIfBelow(IERC20TokenV06 token, address spender, uint256 amount) internal {
|
||||
if (token.allowance(address(this), spender) < amount) {
|
||||
compatApprove(token, spender, uint256(-1));
|
||||
}
|
||||
@@ -61,11 +53,7 @@ library LibERC20TokenV06 {
|
||||
/// @param token The address of the token contract.
|
||||
/// @param to The address that receives the tokens
|
||||
/// @param amount Number of tokens to transfer.
|
||||
function compatTransfer(
|
||||
IERC20TokenV06 token,
|
||||
address to,
|
||||
uint256 amount
|
||||
) internal {
|
||||
function compatTransfer(IERC20TokenV06 token, address to, uint256 amount) internal {
|
||||
bytes memory callData = abi.encodeWithSelector(token.transfer.selector, to, amount);
|
||||
_callWithOptionalBooleanResult(address(token), callData);
|
||||
}
|
||||
@@ -76,12 +64,7 @@ library LibERC20TokenV06 {
|
||||
/// @param from The owner of the tokens.
|
||||
/// @param to The address that receives the tokens
|
||||
/// @param amount Number of tokens to transfer.
|
||||
function compatTransferFrom(
|
||||
IERC20TokenV06 token,
|
||||
address from,
|
||||
address to,
|
||||
uint256 amount
|
||||
) internal {
|
||||
function compatTransferFrom(IERC20TokenV06 token, address from, address to, uint256 amount) internal {
|
||||
bytes memory callData = abi.encodeWithSelector(token.transferFrom.selector, from, to, amount);
|
||||
_callWithOptionalBooleanResult(address(token), callData);
|
||||
}
|
||||
|
@@ -30,12 +30,7 @@ contract DummyERC20Token is Ownable, MintableERC20Token {
|
||||
uint256 public decimals;
|
||||
uint256 public constant MAX_MINT_AMOUNT = 10000000000000000000000;
|
||||
|
||||
constructor(
|
||||
string memory _name,
|
||||
string memory _symbol,
|
||||
uint256 _decimals,
|
||||
uint256 _totalSupply
|
||||
) public {
|
||||
constructor(string memory _name, string memory _symbol, uint256 _decimals, uint256 _totalSupply) public {
|
||||
name = _name;
|
||||
symbol = _symbol;
|
||||
decimals = _decimals;
|
||||
|
@@ -32,11 +32,7 @@ contract DummyMultipleReturnERC20Token is DummyERC20Token {
|
||||
/// @param _from The address of the sender
|
||||
/// @param _to The address of the recipient
|
||||
/// @param _value The amount of token to be transferred
|
||||
function transferFrom(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _value
|
||||
) external returns (bool) {
|
||||
function transferFrom(address _from, address _to, uint256 _value) external returns (bool) {
|
||||
emit Transfer(_from, _to, _value);
|
||||
|
||||
// HACK: This contract will not compile if we remove `returns (bool)`, so we manually return 64 bytes
|
||||
|
@@ -50,11 +50,7 @@ contract DummyNoReturnERC20Token is DummyERC20Token {
|
||||
/// @param _from The address of the sender
|
||||
/// @param _to The address of the recipient
|
||||
/// @param _value The amount of token to be transferred
|
||||
function transferFrom(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _value
|
||||
) external returns (bool) {
|
||||
function transferFrom(address _from, address _to, uint256 _value) external returns (bool) {
|
||||
require(balances[_from] >= _value, "ERC20_INSUFFICIENT_BALANCE");
|
||||
require(allowed[_from][msg.sender] >= _value, "ERC20_INSUFFICIENT_ALLOWANCE");
|
||||
require(balances[_to] + _value >= balances[_to], "UINT256_OVERFLOW");
|
||||
|
@@ -29,11 +29,7 @@ contract TestLibERC20TokenTarget {
|
||||
bytes private _revertData;
|
||||
bytes private _returnData;
|
||||
|
||||
function setBehavior(
|
||||
bool shouldRevert,
|
||||
bytes calldata revertData,
|
||||
bytes calldata returnData
|
||||
) external {
|
||||
function setBehavior(bool shouldRevert, bytes calldata revertData, bytes calldata returnData) external {
|
||||
_shouldRevert = shouldRevert;
|
||||
_revertData = revertData;
|
||||
_returnData = returnData;
|
||||
@@ -49,11 +45,7 @@ contract TestLibERC20TokenTarget {
|
||||
_execute();
|
||||
}
|
||||
|
||||
function transferFrom(
|
||||
address from,
|
||||
address to,
|
||||
uint256 amount
|
||||
) external returns (bool) {
|
||||
function transferFrom(address from, address to, uint256 amount) external returns (bool) {
|
||||
emit TransferFromCalled(from, to, amount);
|
||||
_execute();
|
||||
}
|
||||
|
@@ -32,11 +32,7 @@ contract UntransferrableDummyERC20Token is DummyERC20Token {
|
||||
/// @param _from The address of the sender
|
||||
/// @param _to The address of the recipient
|
||||
/// @param _value The amount of token to be transferred
|
||||
function transferFrom(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _value
|
||||
) external returns (bool) {
|
||||
function transferFrom(address _from, address _to, uint256 _value) external returns (bool) {
|
||||
require(false, "TRANSFER_DISABLED");
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-erc20",
|
||||
"version": "3.3.52",
|
||||
"version": "3.3.54",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,8 +52,8 @@
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.8.1",
|
||||
"@0x/contracts-gen": "^2.0.48",
|
||||
"@0x/contracts-test-utils": "^5.4.42",
|
||||
"@0x/contracts-utils": "^4.8.33",
|
||||
"@0x/contracts-test-utils": "^5.4.44",
|
||||
"@0x/contracts-utils": "^4.8.35",
|
||||
"@0x/dev-utils": "^5.0.0",
|
||||
"@0x/sol-compiler": "^4.8.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
|
@@ -1,4 +1,22 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1670879498,
|
||||
"version": "5.4.44",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1669235113,
|
||||
"version": "5.4.43",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1668477029,
|
||||
"version": "5.4.42",
|
||||
|
@@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v5.4.44 - _December 12, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v5.4.43 - _November 23, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v5.4.42 - _November 15, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-test-utils",
|
||||
"version": "5.4.42",
|
||||
"version": "5.4.44",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -46,7 +46,7 @@
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.35",
|
||||
"@0x/base-contract": "^7.0.0",
|
||||
"@0x/contract-addresses": "^7.4.0",
|
||||
"@0x/contract-addresses": "^8.0.0",
|
||||
"@0x/dev-utils": "^5.0.0",
|
||||
"@0x/json-schemas": "^6.4.4",
|
||||
"@0x/order-utils": "^10.4.28",
|
||||
|
@@ -35,7 +35,6 @@ export class LogDecoder {
|
||||
}
|
||||
public decodeLogOrThrow<ArgsType extends DecodedLogArgs>(log: LogEntry): LogWithDecodedArgs<ArgsType> | RawLog {
|
||||
const logWithDecodedArgsOrLog = this._abiDecoder.tryToDecodeLogOrNoop(log);
|
||||
// tslint:disable-next-line:no-unnecessary-type-assertion
|
||||
if ((logWithDecodedArgsOrLog as LogWithDecodedArgs<ArgsType>).args === undefined) {
|
||||
throw new Error(`Unable to decode log: ${JSON.stringify(log)}`);
|
||||
}
|
||||
|
@@ -2,8 +2,6 @@ import { LogEntry, LogWithDecodedArgs, TransactionReceiptWithDecodedLogs } from
|
||||
|
||||
import { expect } from './chai_setup';
|
||||
|
||||
// tslint:disable no-unnecessary-type-assertion
|
||||
|
||||
/**
|
||||
* Filter logs by event name/type.
|
||||
*/
|
||||
|
@@ -8,8 +8,6 @@ import * as process from 'process';
|
||||
|
||||
import { provider, providerConfigs, txDefaults, web3Wrapper } from './web3_wrapper';
|
||||
|
||||
// tslint:disable: no-namespace only-arrow-functions no-unbound-method max-classes-per-file
|
||||
|
||||
export type ISuite = mocha.ISuite;
|
||||
export type ISuiteCallbackContext = mocha.ISuiteCallbackContext;
|
||||
export type SuiteCallback = (this: ISuiteCallbackContext) => void;
|
||||
|
@@ -29,7 +29,7 @@ export class OrderFactory {
|
||||
salt: generatePseudoRandomSalt(),
|
||||
...this._defaultOrderParams,
|
||||
...customOrderParams,
|
||||
} as Order; // tslint:disable-line:no-object-literal-type-assertion
|
||||
} as Order;
|
||||
const orderHashBuff = orderHashUtils.getOrderHashBuffer(order);
|
||||
const signature = signingUtils.signMessage(orderHashBuff, this._privateKey, signatureType);
|
||||
const signedOrder = {
|
||||
|
@@ -9,7 +9,6 @@ export const typeEncodingUtils = {
|
||||
const base = 10;
|
||||
const formattedValue = new BN(value.toString(base));
|
||||
const encodedValue = ethUtil.toBuffer(formattedValue);
|
||||
// tslint:disable-next-line:custom-no-magic-numbers
|
||||
const paddedValue = ethUtil.setLengthLeft(encodedValue, constants.WORD_LENGTH);
|
||||
return paddedValue;
|
||||
},
|
||||
|
@@ -13,11 +13,8 @@ blockchainTests('mocha blockchain extensions', env => {
|
||||
expect(env.provider).to.exist('');
|
||||
expect(env.txDefaults).to.exist('');
|
||||
expect(env.web3Wrapper).to.exist('');
|
||||
// HACK(dorothy-zbornak): tslint seems to get confused by these assertions.
|
||||
// tslint:disable: no-unbound-method
|
||||
expect(typeof env.getChainIdAsync).to.eq('function');
|
||||
expect(typeof env.getAccountAddressesAsync).to.eq('function');
|
||||
// tslint:enable: no-unbound-method
|
||||
});
|
||||
|
||||
it('initializes the test environment', async () => {
|
||||
@@ -96,7 +93,6 @@ blockchainTests('mocha blockchain extensions', env => {
|
||||
|
||||
function createHookedObject(obj: any, handler: (name: string) => void, methods: string[]): any {
|
||||
const hookedMethods = _.map(methods, methodName => {
|
||||
// tslint:disable: only-arrow-functions
|
||||
return function (this: any, ...args: any[]): any {
|
||||
handler(methodName);
|
||||
return obj[methodName].call(this, ...args);
|
||||
|
@@ -42,7 +42,6 @@ describe('Order hashing', () => {
|
||||
// It's common for developers using javascript to provide the amounts
|
||||
// as strings. Since we eventually toString() the BigNumber
|
||||
// before encoding we should result in the same orderHash in this scenario
|
||||
// tslint:disable-next-line:no-unnecessary-type-assertion
|
||||
const orderHash = orderHashUtils.getOrderHashHex({
|
||||
...order,
|
||||
makerAssetAmount: '0',
|
||||
|
@@ -1,7 +1,6 @@
|
||||
import { expect } from '../../src/chai_setup';
|
||||
import { blockchainTests, BlockchainTestsEnvironment } from '../../src/mocha_blockchain';
|
||||
|
||||
// tslint:disable: no-default-export completed-docs
|
||||
export function append(env: BlockchainTestsEnvironment): void {
|
||||
blockchainTests('imported subtests', subtestsEnv => {
|
||||
it('shares the same environment object', () => {
|
||||
|
@@ -35,7 +35,6 @@ describe('0x transaction hashing', () => {
|
||||
// It's common for developers using javascript to provide the amounts
|
||||
// as strings. Since we eventually toString() the BigNumber
|
||||
// before encoding we should result in the same orderHash in this scenario
|
||||
// tslint:disable-next-line:no-unnecessary-type-assertion
|
||||
const transactionHash = transactionHashUtils.getTransactionHashHex({
|
||||
...transaction,
|
||||
salt: '0',
|
||||
|
@@ -1,7 +0,0 @@
|
||||
{
|
||||
// This file is a workaround that issue: https://github.com/palantir/tslint/issues/4148#issuecomment-419872702
|
||||
"extends": "./tsconfig",
|
||||
"compilerOptions": {
|
||||
"composite": false
|
||||
}
|
||||
}
|
@@ -1,4 +1,22 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1670879498,
|
||||
"version": "1.4.37",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1669235113,
|
||||
"version": "1.4.36",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1668477029,
|
||||
"version": "1.4.35",
|
||||
|
@@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.4.37 - _December 12, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.4.36 - _November 23, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.4.35 - _November 15, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -36,7 +36,9 @@ interface ISablier {
|
||||
|
||||
function balanceOf(uint256 streamId, address who) external view returns (uint256 balance);
|
||||
|
||||
function getStream(uint256 streamId)
|
||||
function getStream(
|
||||
uint256 streamId
|
||||
)
|
||||
external
|
||||
view
|
||||
returns (
|
||||
|
@@ -36,7 +36,7 @@ contract DefaultPoolOperator {
|
||||
stakingProxy = stakingProxy_;
|
||||
weth = weth_;
|
||||
// operator share = 100%
|
||||
poolId = stakingProxy_.createStakingPool(10**6, false);
|
||||
poolId = stakingProxy_.createStakingPool(10 ** 6, false);
|
||||
}
|
||||
|
||||
/// @dev Sends this contract's entire WETH balance to the
|
||||
|
@@ -81,10 +81,10 @@ interface IStaking {
|
||||
/// @param staker Owner of stake.
|
||||
/// @param stakeStatus UNDELEGATED or DELEGATED
|
||||
/// @return balance Owner's stake balances for given status.
|
||||
function getOwnerStakeByStatus(address staker, StakeStatus stakeStatus)
|
||||
external
|
||||
view
|
||||
returns (StoredBalance memory balance);
|
||||
function getOwnerStakeByStatus(
|
||||
address staker,
|
||||
StakeStatus stakeStatus
|
||||
) external view returns (StoredBalance memory balance);
|
||||
|
||||
/// @dev Returns the total stake delegated to a specific staking pool,
|
||||
/// across all members.
|
||||
@@ -96,8 +96,8 @@ interface IStaking {
|
||||
/// @param staker of stake.
|
||||
/// @param poolId Unique Id of pool.
|
||||
/// @return balance Stake delegated to pool by staker.
|
||||
function getStakeDelegatedToPoolByOwner(address staker, bytes32 poolId)
|
||||
external
|
||||
view
|
||||
returns (StoredBalance memory balance);
|
||||
function getStakeDelegatedToPoolByOwner(
|
||||
address staker,
|
||||
bytes32 poolId
|
||||
) external view returns (StoredBalance memory balance);
|
||||
}
|
||||
|
@@ -112,11 +112,7 @@ interface IZrxTreasury {
|
||||
/// @param operatedPoolIds The pools operated by `msg.sender`. The
|
||||
/// ZRX currently delegated to those pools will be accounted
|
||||
/// for in the voting power.
|
||||
function castVote(
|
||||
uint256 proposalId,
|
||||
bool support,
|
||||
bytes32[] calldata operatedPoolIds
|
||||
) external;
|
||||
function castVote(uint256 proposalId, bool support, bytes32[] calldata operatedPoolIds) external;
|
||||
|
||||
/// @dev Casts a vote for the given proposal, by signature.
|
||||
/// Only callable during the voting period for that proposal.
|
||||
@@ -159,8 +155,8 @@ interface IZrxTreasury {
|
||||
/// ZRX currently delegated to those pools will be accounted
|
||||
/// for in the voting power.
|
||||
/// @return votingPower The current voting power of the given account.
|
||||
function getVotingPower(address account, bytes32[] calldata operatedPoolIds)
|
||||
external
|
||||
view
|
||||
returns (uint256 votingPower);
|
||||
function getVotingPower(
|
||||
address account,
|
||||
bytes32[] calldata operatedPoolIds
|
||||
) external view returns (uint256 votingPower);
|
||||
}
|
||||
|
@@ -144,11 +144,7 @@ contract ZrxTreasury is IZrxTreasury {
|
||||
/// @param operatedPoolIds The pools operated by `msg.sender`. The
|
||||
/// ZRX currently delegated to those pools will be accounted
|
||||
/// for in the voting power.
|
||||
function castVote(
|
||||
uint256 proposalId,
|
||||
bool support,
|
||||
bytes32[] memory operatedPoolIds
|
||||
) public override {
|
||||
function castVote(uint256 proposalId, bool support, bytes32[] memory operatedPoolIds) public override {
|
||||
return _castVote(msg.sender, proposalId, support, operatedPoolIds);
|
||||
}
|
||||
|
||||
@@ -219,12 +215,10 @@ contract ZrxTreasury is IZrxTreasury {
|
||||
/// ZRX currently delegated to those pools will be accounted
|
||||
/// for in the voting power.
|
||||
/// @return votingPower The current voting power of the given account.
|
||||
function getVotingPower(address account, bytes32[] memory operatedPoolIds)
|
||||
public
|
||||
view
|
||||
override
|
||||
returns (uint256 votingPower)
|
||||
{
|
||||
function getVotingPower(
|
||||
address account,
|
||||
bytes32[] memory operatedPoolIds
|
||||
) public view override returns (uint256 votingPower) {
|
||||
uint256 delegatedBalance = stakingProxy
|
||||
.getOwnerStakeByStatus(account, IStaking.StakeStatus.DELEGATED)
|
||||
.currentEpochBalance;
|
||||
@@ -307,12 +301,7 @@ contract ZrxTreasury is IZrxTreasury {
|
||||
/// @dev Casts a vote for the given proposal. Only callable
|
||||
/// during the voting period for that proposal. See
|
||||
/// `getVotingPower` for how voting power is computed.
|
||||
function _castVote(
|
||||
address voter,
|
||||
uint256 proposalId,
|
||||
bool support,
|
||||
bytes32[] memory operatedPoolIds
|
||||
) private {
|
||||
function _castVote(address voter, uint256 proposalId, bool support, bytes32[] memory operatedPoolIds) private {
|
||||
if (proposalId >= proposalCount()) {
|
||||
revert("_castVote/INVALID_PROPOSAL_ID");
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-treasury",
|
||||
"version": "1.4.35",
|
||||
"version": "1.4.37",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -46,12 +46,12 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/treasury",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.8.1",
|
||||
"@0x/contract-addresses": "^7.4.0",
|
||||
"@0x/contract-addresses": "^8.0.0",
|
||||
"@0x/contracts-asset-proxy": "^3.7.19",
|
||||
"@0x/contracts-erc20": "^3.3.52",
|
||||
"@0x/contracts-erc20": "^3.3.54",
|
||||
"@0x/contracts-gen": "^2.0.48",
|
||||
"@0x/contracts-staking": "^2.0.45",
|
||||
"@0x/contracts-test-utils": "^5.4.42",
|
||||
"@0x/contracts-test-utils": "^5.4.44",
|
||||
"@0x/sol-compiler": "^4.8.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@types/isomorphic-fetch": "^0.0.35",
|
||||
@@ -73,7 +73,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^7.0.0",
|
||||
"@0x/protocol-utils": "^11.17.1",
|
||||
"@0x/protocol-utils": "^11.17.3",
|
||||
"@0x/subproviders": "^7.0.0",
|
||||
"@0x/types": "^3.3.6",
|
||||
"@0x/typescript-typings": "^5.3.1",
|
||||
|
@@ -1,4 +1,22 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1670879498,
|
||||
"version": "4.8.35",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1669235113,
|
||||
"version": "4.8.34",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1668477029,
|
||||
"version": "4.8.33",
|
||||
|
@@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v4.8.35 - _December 12, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v4.8.34 - _November 23, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v4.8.33 - _November 15, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -63,7 +63,3 @@ yarn lint
|
||||
```bash
|
||||
yarn test
|
||||
```
|
||||
|
||||
#### Testing options
|
||||
|
||||
Contracts testing options like coverage, profiling, revert traces or backing node choosing - are described [here](../TESTING.md).
|
||||
|
@@ -23,7 +23,7 @@ library D18 {
|
||||
/// @dev Decimal places for dydx value quantities.
|
||||
uint256 private constant PRECISION = 18;
|
||||
/// @dev 1.0 in base-18 decimal.
|
||||
int256 private constant DECIMAL_ONE = int256(10**PRECISION);
|
||||
int256 private constant DECIMAL_ONE = int256(10 ** PRECISION);
|
||||
/// @dev Minimum signed integer value.
|
||||
int256 private constant MIN_INT256_VALUE =
|
||||
int256(0x8000000000000000000000000000000000000000000000000000000000000000);
|
||||
|
@@ -117,11 +117,10 @@ library LibAddressArray {
|
||||
/// @param addressArray Array of addresses.
|
||||
/// @param target Address to search for in array.
|
||||
/// @return Existence and index of the target in the array.
|
||||
function indexOf(address[] memory addressArray, address target)
|
||||
internal
|
||||
pure
|
||||
returns (bool success, uint256 index)
|
||||
{
|
||||
function indexOf(
|
||||
address[] memory addressArray,
|
||||
address target
|
||||
) internal pure returns (bool success, uint256 index) {
|
||||
assembly {
|
||||
// Calculate byte length of array
|
||||
let arrayByteLen := mul(mload(addressArray), 32)
|
||||
|
@@ -22,11 +22,10 @@ library LibAddressArrayRichErrors {
|
||||
// bytes4(keccak256("MismanagedMemoryError(uint256,uint256)"))
|
||||
bytes4 internal constant MISMANAGED_MEMORY_ERROR_SELECTOR = 0x5fc83722;
|
||||
|
||||
function MismanagedMemoryError(uint256 freeMemPtr, uint256 addressArrayEndPtr)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function MismanagedMemoryError(
|
||||
uint256 freeMemPtr,
|
||||
uint256 addressArrayEndPtr
|
||||
) internal pure returns (bytes memory) {
|
||||
return abi.encodeWithSelector(MISMANAGED_MEMORY_ERROR_SELECTOR, freeMemPtr, addressArrayEndPtr);
|
||||
}
|
||||
}
|
||||
|
@@ -50,11 +50,7 @@ library LibBytes {
|
||||
/// @param dest memory address to copy bytes to.
|
||||
/// @param source memory address to copy bytes from.
|
||||
/// @param length number of bytes to copy.
|
||||
function memCopy(
|
||||
uint256 dest,
|
||||
uint256 source,
|
||||
uint256 length
|
||||
) internal pure {
|
||||
function memCopy(uint256 dest, uint256 source, uint256 length) internal pure {
|
||||
if (length < 32) {
|
||||
// Handle a partial word by reading destination and masking
|
||||
// off the bits we are interested in.
|
||||
@@ -161,11 +157,7 @@ library LibBytes {
|
||||
/// @param from The starting index for the slice (inclusive).
|
||||
/// @param to The final index for the slice (exclusive).
|
||||
/// @return result The slice containing bytes at indices [from, to)
|
||||
function slice(
|
||||
bytes memory b,
|
||||
uint256 from,
|
||||
uint256 to
|
||||
) internal pure returns (bytes memory result) {
|
||||
function slice(bytes memory b, uint256 from, uint256 to) internal pure returns (bytes memory result) {
|
||||
// Ensure that the from and to positions are valid positions for a slice within
|
||||
// the byte array that is being used.
|
||||
if (from > to) {
|
||||
@@ -199,11 +191,7 @@ library LibBytes {
|
||||
/// @param to The final index for the slice (exclusive).
|
||||
/// @return result The slice containing bytes at indices [from, to)
|
||||
/// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.
|
||||
function sliceDestructive(
|
||||
bytes memory b,
|
||||
uint256 from,
|
||||
uint256 to
|
||||
) internal pure returns (bytes memory result) {
|
||||
function sliceDestructive(bytes memory b, uint256 from, uint256 to) internal pure returns (bytes memory result) {
|
||||
// Ensure that the from and to positions are valid positions for a slice within
|
||||
// the byte array that is being used.
|
||||
if (from > to) {
|
||||
@@ -303,11 +291,7 @@ library LibBytes {
|
||||
/// @param b Byte array to insert address into.
|
||||
/// @param index Index in byte array of address.
|
||||
/// @param input Address to put into byte array.
|
||||
function writeAddress(
|
||||
bytes memory b,
|
||||
uint256 index,
|
||||
address input
|
||||
) internal pure {
|
||||
function writeAddress(bytes memory b, uint256 index, address input) internal pure {
|
||||
if (b.length < index + 20) {
|
||||
LibRichErrors.rrevert(
|
||||
LibBytesRichErrors.InvalidByteOperationError(
|
||||
@@ -376,11 +360,7 @@ library LibBytes {
|
||||
/// @param b Byte array to insert <input> into.
|
||||
/// @param index Index in byte array of <input>.
|
||||
/// @param input bytes32 to put into byte array.
|
||||
function writeBytes32(
|
||||
bytes memory b,
|
||||
uint256 index,
|
||||
bytes32 input
|
||||
) internal pure {
|
||||
function writeBytes32(bytes memory b, uint256 index, bytes32 input) internal pure {
|
||||
if (b.length < index + 32) {
|
||||
LibRichErrors.rrevert(
|
||||
LibBytesRichErrors.InvalidByteOperationError(
|
||||
@@ -413,11 +393,7 @@ library LibBytes {
|
||||
/// @param b Byte array to insert <input> into.
|
||||
/// @param index Index in byte array of <input>.
|
||||
/// @param input uint256 to put into byte array.
|
||||
function writeUint256(
|
||||
bytes memory b,
|
||||
uint256 index,
|
||||
uint256 input
|
||||
) internal pure {
|
||||
function writeUint256(bytes memory b, uint256 index, uint256 input) internal pure {
|
||||
writeBytes32(b, index, bytes32(input));
|
||||
}
|
||||
|
||||
|
@@ -62,12 +62,11 @@ library LibFractions {
|
||||
/// @param denominator The denominator.
|
||||
/// @return scaledNumerator The rescaled numerator.
|
||||
/// @return scaledDenominator The rescaled denominator.
|
||||
function normalize(uint256 numerator, uint256 denominator)
|
||||
internal
|
||||
pure
|
||||
returns (uint256 scaledNumerator, uint256 scaledDenominator)
|
||||
{
|
||||
return normalize(numerator, denominator, 2**127);
|
||||
function normalize(
|
||||
uint256 numerator,
|
||||
uint256 denominator
|
||||
) internal pure returns (uint256 scaledNumerator, uint256 scaledDenominator) {
|
||||
return normalize(numerator, denominator, 2 ** 127);
|
||||
}
|
||||
|
||||
/// @dev Safely scales the difference between two fractions.
|
||||
|
@@ -20,11 +20,7 @@ library LibSafeMathRichErrors {
|
||||
VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT96
|
||||
}
|
||||
|
||||
function Uint256BinOpError(
|
||||
BinOpErrorCodes errorCode,
|
||||
uint256 a,
|
||||
uint256 b
|
||||
) internal pure returns (bytes memory) {
|
||||
function Uint256BinOpError(BinOpErrorCodes errorCode, uint256 a, uint256 b) internal pure returns (bytes memory) {
|
||||
return abi.encodeWithSelector(UINT256_BINOP_ERROR_SELECTOR, errorCode, a, b);
|
||||
}
|
||||
|
||||
|
@@ -51,11 +51,7 @@ library LibBytesV06 {
|
||||
/// @param dest memory address to copy bytes to.
|
||||
/// @param source memory address to copy bytes from.
|
||||
/// @param length number of bytes to copy.
|
||||
function memCopy(
|
||||
uint256 dest,
|
||||
uint256 source,
|
||||
uint256 length
|
||||
) internal pure {
|
||||
function memCopy(uint256 dest, uint256 source, uint256 length) internal pure {
|
||||
if (length < 32) {
|
||||
// Handle a partial word by reading destination and masking
|
||||
// off the bits we are interested in.
|
||||
@@ -162,11 +158,7 @@ library LibBytesV06 {
|
||||
/// @param from The starting index for the slice (inclusive).
|
||||
/// @param to The final index for the slice (exclusive).
|
||||
/// @return result The slice containing bytes at indices [from, to)
|
||||
function slice(
|
||||
bytes memory b,
|
||||
uint256 from,
|
||||
uint256 to
|
||||
) internal pure returns (bytes memory result) {
|
||||
function slice(bytes memory b, uint256 from, uint256 to) internal pure returns (bytes memory result) {
|
||||
// Ensure that the from and to positions are valid positions for a slice within
|
||||
// the byte array that is being used.
|
||||
if (from > to) {
|
||||
@@ -201,11 +193,7 @@ library LibBytesV06 {
|
||||
/// @param from The starting index for the slice (inclusive).
|
||||
/// @param to The final index for the slice (exclusive).
|
||||
/// @return result The slice containing bytes at indices [from, to)
|
||||
function sliceDestructive(
|
||||
bytes memory b,
|
||||
uint256 from,
|
||||
uint256 to
|
||||
) internal pure returns (bytes memory result) {
|
||||
function sliceDestructive(bytes memory b, uint256 from, uint256 to) internal pure returns (bytes memory result) {
|
||||
// Ensure that the from and to positions are valid positions for a slice within
|
||||
// the byte array that is being used.
|
||||
if (from > to) {
|
||||
@@ -305,11 +293,7 @@ library LibBytesV06 {
|
||||
/// @param b Byte array to insert address into.
|
||||
/// @param index Index in byte array of address.
|
||||
/// @param input Address to put into byte array.
|
||||
function writeAddress(
|
||||
bytes memory b,
|
||||
uint256 index,
|
||||
address input
|
||||
) internal pure {
|
||||
function writeAddress(bytes memory b, uint256 index, address input) internal pure {
|
||||
if (b.length < index + 20) {
|
||||
LibRichErrorsV06.rrevert(
|
||||
LibBytesRichErrorsV06.InvalidByteOperationError(
|
||||
@@ -378,11 +362,7 @@ library LibBytesV06 {
|
||||
/// @param b Byte array to insert <input> into.
|
||||
/// @param index Index in byte array of <input>.
|
||||
/// @param input bytes32 to put into byte array.
|
||||
function writeBytes32(
|
||||
bytes memory b,
|
||||
uint256 index,
|
||||
bytes32 input
|
||||
) internal pure {
|
||||
function writeBytes32(bytes memory b, uint256 index, bytes32 input) internal pure {
|
||||
if (b.length < index + 32) {
|
||||
LibRichErrorsV06.rrevert(
|
||||
LibBytesRichErrorsV06.InvalidByteOperationError(
|
||||
@@ -415,11 +395,7 @@ library LibBytesV06 {
|
||||
/// @param b Byte array to insert <input> into.
|
||||
/// @param index Index in byte array of <input>.
|
||||
/// @param input uint256 to put into byte array.
|
||||
function writeUint256(
|
||||
bytes memory b,
|
||||
uint256 index,
|
||||
uint256 input
|
||||
) internal pure {
|
||||
function writeUint256(bytes memory b, uint256 index, uint256 input) internal pure {
|
||||
writeBytes32(b, index, bytes32(input));
|
||||
}
|
||||
|
||||
|
@@ -40,11 +40,7 @@ library LibSafeMathRichErrorsV06 {
|
||||
VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT128
|
||||
}
|
||||
|
||||
function Uint256BinOpError(
|
||||
BinOpErrorCodes errorCode,
|
||||
uint256 a,
|
||||
uint256 b
|
||||
) internal pure returns (bytes memory) {
|
||||
function Uint256BinOpError(BinOpErrorCodes errorCode, uint256 a, uint256 b) internal pure returns (bytes memory) {
|
||||
return abi.encodeWithSelector(UINT256_BINOP_ERROR_SELECTOR, errorCode, a, b);
|
||||
}
|
||||
|
||||
|
@@ -30,11 +30,10 @@ contract TestLibAddressArray {
|
||||
/// @param addressArray Array of addresses.
|
||||
/// @param addressToAppend Address to append.
|
||||
/// @return Array of addresses: [... addressArray, addressToAppend]
|
||||
function publicAppend(address[] memory addressArray, address addressToAppend)
|
||||
public
|
||||
pure
|
||||
returns (address[] memory)
|
||||
{
|
||||
function publicAppend(
|
||||
address[] memory addressArray,
|
||||
address addressToAppend
|
||||
) public pure returns (address[] memory) {
|
||||
return addressArray.append(addressToAppend);
|
||||
}
|
||||
|
||||
@@ -52,15 +51,7 @@ contract TestLibAddressArray {
|
||||
address[] memory addressArray,
|
||||
int256 freeMemOffset,
|
||||
address addressToAppend
|
||||
)
|
||||
public
|
||||
pure
|
||||
returns (
|
||||
address[] memory result,
|
||||
uint256 oldArrayMemStart,
|
||||
uint256 newArrayMemStart
|
||||
)
|
||||
{
|
||||
) public pure returns (address[] memory result, uint256 oldArrayMemStart, uint256 newArrayMemStart) {
|
||||
assembly {
|
||||
// Remember the original memory address of the array.
|
||||
oldArrayMemStart := addressArray
|
||||
@@ -89,11 +80,10 @@ contract TestLibAddressArray {
|
||||
/// @param addressArray Array of addresses.
|
||||
/// @param target Address to search for in array.
|
||||
/// @return Existence and index of the target in the array.
|
||||
function publicIndexOf(address[] memory addressArray, address target)
|
||||
public
|
||||
pure
|
||||
returns (bool success, uint256 index)
|
||||
{
|
||||
function publicIndexOf(
|
||||
address[] memory addressArray,
|
||||
address target
|
||||
) public pure returns (bool success, uint256 index) {
|
||||
(success, index) = addressArray.indexOf(target);
|
||||
}
|
||||
}
|
||||
|
@@ -60,11 +60,7 @@ contract TestLibBytes {
|
||||
/// @param b Byte array to insert address into.
|
||||
/// @param index Index in byte array of address.
|
||||
/// @param input Address to put into byte array.
|
||||
function publicWriteAddress(
|
||||
bytes memory b,
|
||||
uint256 index,
|
||||
address input
|
||||
) public pure returns (bytes memory) {
|
||||
function publicWriteAddress(bytes memory b, uint256 index, address input) public pure returns (bytes memory) {
|
||||
b.writeAddress(index, input);
|
||||
return b;
|
||||
}
|
||||
@@ -82,11 +78,7 @@ contract TestLibBytes {
|
||||
/// @param b Byte array to insert <input> into.
|
||||
/// @param index Index in byte array of <input>.
|
||||
/// @param input bytes32 to put into byte array.
|
||||
function publicWriteBytes32(
|
||||
bytes memory b,
|
||||
uint256 index,
|
||||
bytes32 input
|
||||
) public pure returns (bytes memory) {
|
||||
function publicWriteBytes32(bytes memory b, uint256 index, bytes32 input) public pure returns (bytes memory) {
|
||||
b.writeBytes32(index, input);
|
||||
return b;
|
||||
}
|
||||
@@ -104,11 +96,7 @@ contract TestLibBytes {
|
||||
/// @param b Byte array to insert <input> into.
|
||||
/// @param index Index in byte array of <input>.
|
||||
/// @param input uint256 to put into byte array.
|
||||
function publicWriteUint256(
|
||||
bytes memory b,
|
||||
uint256 index,
|
||||
uint256 input
|
||||
) public pure returns (bytes memory) {
|
||||
function publicWriteUint256(bytes memory b, uint256 index, uint256 input) public pure returns (bytes memory) {
|
||||
b.writeUint256(index, input);
|
||||
return b;
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-utils",
|
||||
"version": "4.8.33",
|
||||
"version": "4.8.35",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -51,7 +51,7 @@
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.8.1",
|
||||
"@0x/contracts-gen": "^2.0.48",
|
||||
"@0x/contracts-test-utils": "^5.4.42",
|
||||
"@0x/contracts-test-utils": "^5.4.44",
|
||||
"@0x/dev-utils": "^5.0.0",
|
||||
"@0x/order-utils": "^10.4.28",
|
||||
"@0x/sol-compiler": "^4.8.2",
|
||||
|
@@ -142,4 +142,3 @@ describe('LibAddressArray', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
// tslint:disable:max-file-line-count
|
||||
|
@@ -446,7 +446,6 @@ blockchainTests('LibBytes', env => {
|
||||
describe('memCopy', () => {
|
||||
// Create memory 0x000102...FF
|
||||
const memSize = 256;
|
||||
// tslint:disable:no-shadowed-variable
|
||||
const memory = new Uint8Array(memSize).map((_, i) => i);
|
||||
const memHex = toHex(memory);
|
||||
|
||||
@@ -782,4 +781,3 @@ blockchainTests('LibBytes', env => {
|
||||
});
|
||||
});
|
||||
});
|
||||
// tslint:disable:max-file-line-count
|
||||
|
@@ -310,7 +310,6 @@ blockchainTests('LibMath', env => {
|
||||
const numerator = new BigNumber(100);
|
||||
const denominator = new BigNumber(102);
|
||||
const target = new BigNumber(52);
|
||||
// tslint:disable-next-line: boolean-naming
|
||||
const actual = await libsContract.isRoundingErrorFloor(numerator, denominator, target).callAsync();
|
||||
expect(actual).to.eq(true);
|
||||
});
|
||||
@@ -319,7 +318,6 @@ blockchainTests('LibMath', env => {
|
||||
const numerator = new BigNumber(100);
|
||||
const denominator = new BigNumber(101);
|
||||
const target = new BigNumber(92);
|
||||
// tslint:disable-next-line: boolean-naming
|
||||
const actual = await libsContract.isRoundingErrorFloor(numerator, denominator, target).callAsync();
|
||||
expect(actual).to.eq(false);
|
||||
});
|
||||
@@ -328,9 +326,7 @@ blockchainTests('LibMath', env => {
|
||||
const numerator = ONE_ETHER;
|
||||
const denominator = ONE_ETHER.dividedToIntegerBy(2);
|
||||
const target = ONE_ETHER.times(0.01);
|
||||
// tslint:disable-next-line: boolean-naming
|
||||
const expected = isRoundingErrorFloor(numerator, denominator, target);
|
||||
// tslint:disable-next-line: boolean-naming
|
||||
const actual = await libsContract.isRoundingErrorFloor(numerator, denominator, target).callAsync();
|
||||
expect(actual).to.eq(expected);
|
||||
});
|
||||
@@ -376,7 +372,6 @@ blockchainTests('LibMath', env => {
|
||||
const numerator = new BigNumber(100);
|
||||
const denominator = new BigNumber(101);
|
||||
const target = new BigNumber(92);
|
||||
// tslint:disable-next-line: boolean-naming
|
||||
const actual = await libsContract.isRoundingErrorCeil(numerator, denominator, target).callAsync();
|
||||
expect(actual).to.eq(true);
|
||||
});
|
||||
@@ -385,7 +380,6 @@ blockchainTests('LibMath', env => {
|
||||
const numerator = new BigNumber(100);
|
||||
const denominator = new BigNumber(102);
|
||||
const target = new BigNumber(52);
|
||||
// tslint:disable-next-line: boolean-naming
|
||||
const actual = await libsContract.isRoundingErrorCeil(numerator, denominator, target).callAsync();
|
||||
expect(actual).to.eq(false);
|
||||
});
|
||||
@@ -394,9 +388,7 @@ blockchainTests('LibMath', env => {
|
||||
const numerator = ONE_ETHER;
|
||||
const denominator = ONE_ETHER.dividedToIntegerBy(2);
|
||||
const target = ONE_ETHER.times(0.01);
|
||||
// tslint:disable-next-line: boolean-naming
|
||||
const expected = isRoundingErrorCeil(numerator, denominator, target);
|
||||
// tslint:disable-next-line: boolean-naming
|
||||
const actual = await libsContract.isRoundingErrorCeil(numerator, denominator, target).callAsync();
|
||||
expect(actual).to.eq(expected);
|
||||
});
|
||||
|
@@ -53,7 +53,6 @@ describe('TestLogDecoding', () => {
|
||||
.emitEvent()
|
||||
.awaitTransactionSuccessAsync();
|
||||
expect(txReceipt.logs.length).to.be.equal(1);
|
||||
// tslint:disable no-unnecessary-type-assertion
|
||||
expect((txReceipt.logs[0] as LogWithDecodedArgs<DecodedLogArgs>).args).to.be.deep.equal(expectedEvent);
|
||||
});
|
||||
it('should not decode event args when no dependencies are passed into wrapper', async () => {
|
||||
@@ -61,7 +60,6 @@ describe('TestLogDecoding', () => {
|
||||
.emitEventDownstream()
|
||||
.awaitTransactionSuccessAsync();
|
||||
expect(txReceipt.logs.length).to.be.equal(1);
|
||||
// tslint:disable no-unnecessary-type-assertion
|
||||
expect((txReceipt.logs[0] as LogWithDecodedArgs<DecodedLogArgs>).args).to.be.undefined();
|
||||
});
|
||||
it('should decode args for local but not downstream event when no dependencies are passed into wrapper', async () => {
|
||||
@@ -69,15 +67,12 @@ describe('TestLogDecoding', () => {
|
||||
.emitEventsLocalAndDownstream()
|
||||
.awaitTransactionSuccessAsync();
|
||||
expect(txReceipt.logs.length).to.be.equal(2);
|
||||
// tslint:disable no-unnecessary-type-assertion
|
||||
expect((txReceipt.logs[0] as LogWithDecodedArgs<DecodedLogArgs>).args).to.be.deep.equal(expectedEvent);
|
||||
// tslint:disable no-unnecessary-type-assertion
|
||||
expect((txReceipt.logs[1] as LogWithDecodedArgs<DecodedLogArgs>).args).to.be.undefined();
|
||||
});
|
||||
it('should decode locally emitted event args when dependencies are passed into wrapper', async () => {
|
||||
const txReceipt = await testLogDecodingWithDependencies.emitEvent().awaitTransactionSuccessAsync();
|
||||
expect(txReceipt.logs.length).to.be.equal(1);
|
||||
// tslint:disable no-unnecessary-type-assertion
|
||||
expect((txReceipt.logs[0] as LogWithDecodedArgs<DecodedLogArgs>).args).to.be.deep.equal(expectedEvent);
|
||||
});
|
||||
it('should decode downstream event args when dependencies are passed into wrapper', async () => {
|
||||
@@ -85,7 +80,6 @@ describe('TestLogDecoding', () => {
|
||||
.emitEventDownstream()
|
||||
.awaitTransactionSuccessAsync();
|
||||
expect(txReceipt.logs.length).to.be.equal(1);
|
||||
// tslint:disable no-unnecessary-type-assertion
|
||||
expect((txReceipt.logs[0] as LogWithDecodedArgs<DecodedLogArgs>).args).to.be.deep.equal(
|
||||
expectedDownstreamEvent,
|
||||
);
|
||||
@@ -95,9 +89,7 @@ describe('TestLogDecoding', () => {
|
||||
.emitEventsLocalAndDownstream()
|
||||
.awaitTransactionSuccessAsync();
|
||||
expect(txReceipt.logs.length).to.be.equal(2);
|
||||
// tslint:disable no-unnecessary-type-assertion
|
||||
expect((txReceipt.logs[0] as LogWithDecodedArgs<DecodedLogArgs>).args).to.be.deep.equal(expectedEvent);
|
||||
// tslint:disable no-unnecessary-type-assertion
|
||||
expect((txReceipt.logs[1] as LogWithDecodedArgs<DecodedLogArgs>).args).to.be.deep.equal(
|
||||
expectedDownstreamEvent,
|
||||
);
|
||||
|
@@ -1,4 +1,22 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1670879498,
|
||||
"version": "0.38.3",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1669235113,
|
||||
"version": "0.38.2",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1668477029,
|
||||
"version": "0.38.1",
|
||||
|
@@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v0.38.3 - _December 12, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v0.38.2 - _November 23, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v0.38.1 - _November 15, 2022_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -121,7 +121,6 @@
|
||||
"./contracts/src/transformers/bridges/PolygonBridgeAdapter.sol",
|
||||
"./contracts/src/transformers/bridges/mixins/MixinAaveV2.sol",
|
||||
"./contracts/src/transformers/bridges/mixins/MixinBalancer.sol",
|
||||
"./contracts/src/transformers/bridges/mixins/MixinBalancerV2.sol",
|
||||
"./contracts/src/transformers/bridges/mixins/MixinBalancerV2Batch.sol",
|
||||
"./contracts/src/transformers/bridges/mixins/MixinBancor.sol",
|
||||
"./contracts/src/transformers/bridges/mixins/MixinBancorV3.sol",
|
||||
|
@@ -20,11 +20,10 @@
|
||||
pragma solidity ^0.6.5;
|
||||
|
||||
library LibMetaTransactionsRichErrors {
|
||||
function InvalidMetaTransactionsArrayLengthsError(uint256 mtxCount, uint256 signatureCount)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function InvalidMetaTransactionsArrayLengthsError(
|
||||
uint256 mtxCount,
|
||||
uint256 signatureCount
|
||||
) internal pure returns (bytes memory) {
|
||||
return
|
||||
abi.encodeWithSelector(
|
||||
bytes4(keccak256("InvalidMetaTransactionsArrayLengthsError(uint256,uint256)")),
|
||||
@@ -33,11 +32,10 @@ library LibMetaTransactionsRichErrors {
|
||||
);
|
||||
}
|
||||
|
||||
function MetaTransactionUnsupportedFunctionError(bytes32 mtxHash, bytes4 selector)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function MetaTransactionUnsupportedFunctionError(
|
||||
bytes32 mtxHash,
|
||||
bytes4 selector
|
||||
) internal pure returns (bytes memory) {
|
||||
return
|
||||
abi.encodeWithSelector(
|
||||
bytes4(keccak256("MetaTransactionUnsupportedFunctionError(bytes32,bytes4)")),
|
||||
@@ -118,11 +116,10 @@ library LibMetaTransactionsRichErrors {
|
||||
);
|
||||
}
|
||||
|
||||
function MetaTransactionAlreadyExecutedError(bytes32 mtxHash, uint256 executedBlockNumber)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function MetaTransactionAlreadyExecutedError(
|
||||
bytes32 mtxHash,
|
||||
uint256 executedBlockNumber
|
||||
) internal pure returns (bytes memory) {
|
||||
return
|
||||
abi.encodeWithSelector(
|
||||
bytes4(keccak256("MetaTransactionAlreadyExecutedError(bytes32,uint256)")),
|
||||
|
@@ -54,11 +54,10 @@ library LibNFTOrdersRichErrors {
|
||||
);
|
||||
}
|
||||
|
||||
function SellOrderFeesExceedSpreadError(uint256 sellOrderFees, uint256 spread)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function SellOrderFeesExceedSpreadError(
|
||||
uint256 sellOrderFees,
|
||||
uint256 spread
|
||||
) internal pure returns (bytes memory) {
|
||||
return
|
||||
abi.encodeWithSelector(
|
||||
bytes4(keccak256("SellOrderFeesExceedSpreadError(uint256,uint256)")),
|
||||
@@ -112,11 +111,10 @@ library LibNFTOrdersRichErrors {
|
||||
);
|
||||
}
|
||||
|
||||
function ExceedsRemainingOrderAmount(uint128 remainingOrderAmount, uint128 fillAmount)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function ExceedsRemainingOrderAmount(
|
||||
uint128 remainingOrderAmount,
|
||||
uint128 fillAmount
|
||||
) internal pure returns (bytes memory) {
|
||||
return
|
||||
abi.encodeWithSelector(
|
||||
bytes4(keccak256("ExceedsRemainingOrderAmount(uint128,uint128)")),
|
||||
|
@@ -45,11 +45,10 @@ library LibSignatureRichErrors {
|
||||
);
|
||||
}
|
||||
|
||||
function SignatureValidationError(SignatureValidationErrorCodes code, bytes32 hash)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function SignatureValidationError(
|
||||
SignatureValidationErrorCodes code,
|
||||
bytes32 hash
|
||||
) internal pure returns (bytes memory) {
|
||||
return abi.encodeWithSelector(bytes4(keccak256("SignatureValidationError(uint8,bytes32)")), code, hash);
|
||||
}
|
||||
}
|
||||
|
@@ -43,11 +43,10 @@ library LibTransformERC20RichErrors {
|
||||
);
|
||||
}
|
||||
|
||||
function NegativeTransformERC20OutputError(address outputToken, uint256 outputTokenLostAmount)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function NegativeTransformERC20OutputError(
|
||||
address outputToken,
|
||||
uint256 outputTokenLostAmount
|
||||
) internal pure returns (bytes memory) {
|
||||
return
|
||||
abi.encodeWithSelector(
|
||||
bytes4(keccak256("NegativeTransformERC20OutputError(address,uint256)")),
|
||||
@@ -77,11 +76,10 @@ library LibTransformERC20RichErrors {
|
||||
abi.encodeWithSelector(bytes4(keccak256("OnlyCallableByDeployerError(address,address)")), caller, deployer);
|
||||
}
|
||||
|
||||
function InvalidExecutionContextError(address actualContext, address expectedContext)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function InvalidExecutionContextError(
|
||||
address actualContext,
|
||||
address expectedContext
|
||||
) internal pure returns (bytes memory) {
|
||||
return
|
||||
abi.encodeWithSelector(
|
||||
bytes4(keccak256("InvalidExecutionContextError(address,address)")),
|
||||
@@ -95,11 +93,10 @@ library LibTransformERC20RichErrors {
|
||||
INVALID_ARRAY_LENGTH
|
||||
}
|
||||
|
||||
function InvalidTransformDataError(InvalidTransformDataErrorCode errorCode, bytes memory transformData)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function InvalidTransformDataError(
|
||||
InvalidTransformDataErrorCode errorCode,
|
||||
bytes memory transformData
|
||||
) internal pure returns (bytes memory) {
|
||||
return
|
||||
abi.encodeWithSelector(
|
||||
bytes4(keccak256("InvalidTransformDataError(uint8,bytes)")),
|
||||
@@ -138,11 +135,10 @@ library LibTransformERC20RichErrors {
|
||||
);
|
||||
}
|
||||
|
||||
function InsufficientTakerTokenError(uint256 tokenBalance, uint256 tokensNeeded)
|
||||
internal
|
||||
pure
|
||||
returns (bytes memory)
|
||||
{
|
||||
function InsufficientTakerTokenError(
|
||||
uint256 tokenBalance,
|
||||
uint256 tokensNeeded
|
||||
) internal pure returns (bytes memory) {
|
||||
return
|
||||
abi.encodeWithSelector(
|
||||
bytes4(keccak256("InsufficientTakerTokenError(uint256,uint256)")),
|
||||
|
@@ -38,11 +38,7 @@ contract FeeCollector is AuthorizableV06 {
|
||||
/// @param weth The WETH contract.
|
||||
/// @param staking The staking contract.
|
||||
/// @param poolId The pool ID this contract is collecting fees for.
|
||||
function initialize(
|
||||
IEtherTokenV06 weth,
|
||||
IStaking staking,
|
||||
bytes32 poolId
|
||||
) external onlyAuthorized {
|
||||
function initialize(IEtherTokenV06 weth, IStaking staking, bytes32 poolId) external onlyAuthorized {
|
||||
weth.approve(address(staking), type(uint256).max);
|
||||
staking.joinStakingPoolAsMaker(poolId);
|
||||
}
|
||||
|
@@ -69,13 +69,10 @@ contract FlashWallet is IFlashWallet {
|
||||
/// @param target The call target.
|
||||
/// @param callData The call data.
|
||||
/// @return resultData The data returned by the call.
|
||||
function executeDelegateCall(address payable target, bytes calldata callData)
|
||||
external
|
||||
payable
|
||||
override
|
||||
onlyOwner
|
||||
returns (bytes memory resultData)
|
||||
{
|
||||
function executeDelegateCall(
|
||||
address payable target,
|
||||
bytes calldata callData
|
||||
) external payable override onlyOwner returns (bytes memory resultData) {
|
||||
bool success;
|
||||
(success, resultData) = target.delegatecall(callData);
|
||||
if (!success) {
|
||||
|
@@ -40,10 +40,10 @@ interface IFlashWallet {
|
||||
/// @param target The call target.
|
||||
/// @param callData The call data.
|
||||
/// @return resultData The data returned by the call.
|
||||
function executeDelegateCall(address payable target, bytes calldata callData)
|
||||
external
|
||||
payable
|
||||
returns (bytes memory resultData);
|
||||
function executeDelegateCall(
|
||||
address payable target,
|
||||
bytes calldata callData
|
||||
) external payable returns (bytes memory resultData);
|
||||
|
||||
/// @dev Allows the puppet to receive ETH.
|
||||
receive() external payable;
|
||||
|
@@ -131,7 +131,10 @@ contract MetaTransactionsFeature is
|
||||
/// @param mtx The meta-transaction.
|
||||
/// @param signature The signature by `mtx.signer`.
|
||||
/// @return returnResult The ABI-encoded result of the underlying call.
|
||||
function executeMetaTransaction(MetaTransactionData memory mtx, LibSignature.Signature memory signature)
|
||||
function executeMetaTransaction(
|
||||
MetaTransactionData memory mtx,
|
||||
LibSignature.Signature memory signature
|
||||
)
|
||||
public
|
||||
payable
|
||||
override
|
||||
@@ -153,7 +156,10 @@ contract MetaTransactionsFeature is
|
||||
/// @param mtxs The meta-transactions.
|
||||
/// @param signatures The signature by each respective `mtx.signer`.
|
||||
/// @return returnResults The ABI-encoded results of the underlying calls.
|
||||
function batchExecuteMetaTransactions(MetaTransactionData[] memory mtxs, LibSignature.Signature[] memory signatures)
|
||||
function batchExecuteMetaTransactions(
|
||||
MetaTransactionData[] memory mtxs,
|
||||
LibSignature.Signature[] memory signatures
|
||||
)
|
||||
public
|
||||
payable
|
||||
override
|
||||
@@ -182,12 +188,9 @@ contract MetaTransactionsFeature is
|
||||
/// @dev Get the block at which a meta-transaction has been executed.
|
||||
/// @param mtx The meta-transaction.
|
||||
/// @return blockNumber The block height when the meta-transactioin was executed.
|
||||
function getMetaTransactionExecutedBlock(MetaTransactionData memory mtx)
|
||||
public
|
||||
view
|
||||
override
|
||||
returns (uint256 blockNumber)
|
||||
{
|
||||
function getMetaTransactionExecutedBlock(
|
||||
MetaTransactionData memory mtx
|
||||
) public view override returns (uint256 blockNumber) {
|
||||
return getMetaTransactionHashExecutedBlock(getMetaTransactionHash(mtx));
|
||||
}
|
||||
|
||||
@@ -459,11 +462,7 @@ contract MetaTransactionsFeature is
|
||||
|
||||
/// @dev Make an arbitrary internal, meta-transaction call.
|
||||
/// Warning: Do not let unadulterated `callData` into this function.
|
||||
function _callSelf(
|
||||
bytes32 hash,
|
||||
bytes memory callData,
|
||||
uint256 value
|
||||
) private returns (bytes memory returnResult) {
|
||||
function _callSelf(bytes32 hash, bytes memory callData, uint256 value) private returns (bytes memory returnResult) {
|
||||
bool success;
|
||||
(success, returnResult) = address(this).call{value: value}(callData);
|
||||
if (!success) {
|
||||
|
@@ -147,12 +147,10 @@ contract OtcOrdersFeature is IFeature, IOtcOrdersFeature, FixinCommon, FixinEIP7
|
||||
/// @param makerSignature The order signature from the maker.
|
||||
/// @return takerTokenFilledAmount How much taker token was filled.
|
||||
/// @return makerTokenFilledAmount How much maker token was filled.
|
||||
function fillOtcOrderWithEth(LibNativeOrder.OtcOrder memory order, LibSignature.Signature memory makerSignature)
|
||||
public
|
||||
payable
|
||||
override
|
||||
returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount)
|
||||
{
|
||||
function fillOtcOrderWithEth(
|
||||
LibNativeOrder.OtcOrder memory order,
|
||||
LibSignature.Signature memory makerSignature
|
||||
) public payable override returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount) {
|
||||
if (order.takerToken == WETH) {
|
||||
// Wrap ETH
|
||||
WETH.deposit{value: msg.value}();
|
||||
@@ -425,12 +423,9 @@ contract OtcOrdersFeature is IFeature, IOtcOrdersFeature, FixinCommon, FixinEIP7
|
||||
/// @dev Get the order info for an OTC order.
|
||||
/// @param order The OTC order.
|
||||
/// @return orderInfo Info about the order.
|
||||
function getOtcOrderInfo(LibNativeOrder.OtcOrder memory order)
|
||||
public
|
||||
view
|
||||
override
|
||||
returns (LibNativeOrder.OtcOrderInfo memory orderInfo)
|
||||
{
|
||||
function getOtcOrderInfo(
|
||||
LibNativeOrder.OtcOrder memory order
|
||||
) public view override returns (LibNativeOrder.OtcOrderInfo memory orderInfo) {
|
||||
// compute order hash.
|
||||
orderInfo.orderHash = getOtcOrderHash(order);
|
||||
|
||||
@@ -470,12 +465,10 @@ contract OtcOrdersFeature is IFeature, IOtcOrdersFeature, FixinCommon, FixinEIP7
|
||||
/// @param txOrigin The address.
|
||||
/// @param nonceBucket The nonce bucket index.
|
||||
/// @return lastNonce The last nonce value used.
|
||||
function lastOtcTxOriginNonce(address txOrigin, uint64 nonceBucket)
|
||||
public
|
||||
view
|
||||
override
|
||||
returns (uint128 lastNonce)
|
||||
{
|
||||
function lastOtcTxOriginNonce(
|
||||
address txOrigin,
|
||||
uint64 nonceBucket
|
||||
) public view override returns (uint128 lastNonce) {
|
||||
LibOtcOrdersStorage.Storage storage stor = LibOtcOrdersStorage.getStorage();
|
||||
return stor.txOriginNonces[txOrigin][nonceBucket];
|
||||
}
|
||||
|
@@ -77,11 +77,7 @@ contract OwnableFeature is IFeature, IOwnableFeature, FixinCommon {
|
||||
/// @param target The migrator contract address.
|
||||
/// @param data The call data.
|
||||
/// @param newOwner The address of the new owner.
|
||||
function migrate(
|
||||
address target,
|
||||
bytes calldata data,
|
||||
address newOwner
|
||||
) external override onlyOwner {
|
||||
function migrate(address target, bytes calldata data, address newOwner) external override onlyOwner {
|
||||
if (newOwner == address(0)) {
|
||||
LibOwnableRichErrors.TransferOwnerToZeroError().rrevert();
|
||||
}
|
||||
|
@@ -85,7 +85,7 @@ contract PancakeSwapFeature is IFeature, IPancakeSwapFeature, FixinCommon {
|
||||
// BNB pseudo-token address.
|
||||
uint256 private constant ETH_TOKEN_ADDRESS_32 = 0x000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
|
||||
// Maximum token quantity that can be swapped against the PancakeSwapPair contract.
|
||||
uint256 private constant MAX_SWAP_AMOUNT = 2**112;
|
||||
uint256 private constant MAX_SWAP_AMOUNT = 2 ** 112;
|
||||
|
||||
// bytes4(keccak256("executeCall(address,bytes)"))
|
||||
uint256 private constant ALLOWANCE_TARGET_EXECUTE_CALL_SELECTOR_32 =
|
||||
|
@@ -153,14 +153,9 @@ contract TransformERC20Feature is IFeature, ITransformERC20Feature, FixinCommon,
|
||||
/// @dev Internal version of `transformERC20()`. Only callable from within.
|
||||
/// @param args A `TransformERC20Args` struct.
|
||||
/// @return outputTokenAmount The amount of `outputToken` received by the taker.
|
||||
function _transformERC20(TransformERC20Args memory args)
|
||||
public
|
||||
payable
|
||||
virtual
|
||||
override
|
||||
onlySelf
|
||||
returns (uint256 outputTokenAmount)
|
||||
{
|
||||
function _transformERC20(
|
||||
TransformERC20Args memory args
|
||||
) public payable virtual override onlySelf returns (uint256 outputTokenAmount) {
|
||||
return _transformERC20Private(args);
|
||||
}
|
||||
|
||||
|
@@ -51,7 +51,7 @@ contract UniswapFeature is IFeature, IUniswapFeature, FixinCommon {
|
||||
// ETH pseudo-token address.
|
||||
uint256 private constant ETH_TOKEN_ADDRESS_32 = 0x000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
|
||||
// Maximum token quantity that can be swapped against the UniswapV2Pair contract.
|
||||
uint256 private constant MAX_SWAP_AMOUNT = 2**112;
|
||||
uint256 private constant MAX_SWAP_AMOUNT = 2 ** 112;
|
||||
|
||||
// bytes4(keccak256("executeCall(address,bytes)"))
|
||||
uint256 private constant ALLOWANCE_TARGET_EXECUTE_CALL_SELECTOR_32 =
|
||||
|
@@ -62,11 +62,7 @@ contract UniswapV3Feature is IFeature, IUniswapV3Feature, FixinCommon, FixinToke
|
||||
/// @param weth The WETH contract.
|
||||
/// @param uniFactory The UniswapV3 factory contract.
|
||||
/// @param poolInitCodeHash The UniswapV3 pool init code hash.
|
||||
constructor(
|
||||
IEtherTokenV06 weth,
|
||||
address uniFactory,
|
||||
bytes32 poolInitCodeHash
|
||||
) public {
|
||||
constructor(IEtherTokenV06 weth, address uniFactory, bytes32 poolInitCodeHash) public {
|
||||
WETH = weth;
|
||||
UNI_FF_FACTORY_ADDRESS = bytes32((uint256(0xff) << 248) | (uint256(uniFactory) << 88));
|
||||
UNI_POOL_INIT_CODE_HASH = poolInitCodeHash;
|
||||
@@ -171,11 +167,7 @@ contract UniswapV3Feature is IFeature, IUniswapV3Feature, FixinCommon, FixinToke
|
||||
/// @param amount1Delta Token1 amount owed.
|
||||
/// @param data Arbitrary data forwarded from swap() caller. An ABI-encoded
|
||||
/// struct of: inputToken, outputToken, fee, payer
|
||||
function uniswapV3SwapCallback(
|
||||
int256 amount0Delta,
|
||||
int256 amount1Delta,
|
||||
bytes calldata data
|
||||
) external override {
|
||||
function uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes calldata data) external override {
|
||||
IERC20TokenV06 token0;
|
||||
IERC20TokenV06 token1;
|
||||
address payer;
|
||||
@@ -261,12 +253,7 @@ contract UniswapV3Feature is IFeature, IUniswapV3Feature, FixinCommon, FixinToke
|
||||
|
||||
// Pay tokens from `payer` to `to`, using `transferFrom()` if
|
||||
// `payer` != this contract.
|
||||
function _pay(
|
||||
IERC20TokenV06 token,
|
||||
address payer,
|
||||
address to,
|
||||
uint256 amount
|
||||
) private {
|
||||
function _pay(IERC20TokenV06 token, address payer, address to, uint256 amount) private {
|
||||
if (payer != address(this)) {
|
||||
_transferERC20TokensFrom(token, payer, to, amount);
|
||||
} else {
|
||||
@@ -330,15 +317,9 @@ contract UniswapV3Feature is IFeature, IUniswapV3Feature, FixinCommon, FixinToke
|
||||
}
|
||||
|
||||
// Return the first input token, output token, and fee of an encoded uniswap path.
|
||||
function _decodeFirstPoolInfoFromPath(bytes memory encodedPath)
|
||||
private
|
||||
pure
|
||||
returns (
|
||||
IERC20TokenV06 inputToken,
|
||||
uint24 fee,
|
||||
IERC20TokenV06 outputToken
|
||||
)
|
||||
{
|
||||
function _decodeFirstPoolInfoFromPath(
|
||||
bytes memory encodedPath
|
||||
) private pure returns (IERC20TokenV06 inputToken, uint24 fee, IERC20TokenV06 outputToken) {
|
||||
require(encodedPath.length >= SINGLE_HOP_PATH_SIZE, "UniswapV3Feature/BAD_PATH_ENCODING");
|
||||
assembly {
|
||||
let p := add(encodedPath, 32)
|
||||
|
@@ -199,17 +199,17 @@ interface IERC1155OrdersFeature {
|
||||
/// an ERC1155 asset.
|
||||
/// @param order The ERC1155 order.
|
||||
/// @param erc1155TokenId The ID of the ERC1155 asset.
|
||||
function validateERC1155OrderProperties(LibNFTOrder.ERC1155Order calldata order, uint256 erc1155TokenId)
|
||||
external
|
||||
view;
|
||||
function validateERC1155OrderProperties(
|
||||
LibNFTOrder.ERC1155Order calldata order,
|
||||
uint256 erc1155TokenId
|
||||
) external view;
|
||||
|
||||
/// @dev Get the order info for an ERC1155 order.
|
||||
/// @param order The ERC1155 order.
|
||||
/// @return orderInfo Infor about the order.
|
||||
function getERC1155OrderInfo(LibNFTOrder.ERC1155Order calldata order)
|
||||
external
|
||||
view
|
||||
returns (LibNFTOrder.OrderInfo memory orderInfo);
|
||||
function getERC1155OrderInfo(
|
||||
LibNFTOrder.ERC1155Order calldata order
|
||||
) external view returns (LibNFTOrder.OrderInfo memory orderInfo);
|
||||
|
||||
/// @dev Get the EIP-712 hash of an ERC1155 order.
|
||||
/// @param order The ERC1155 order.
|
||||
|
@@ -230,10 +230,9 @@ interface IERC721OrdersFeature {
|
||||
/// @dev Get the current status of an ERC721 order.
|
||||
/// @param order The ERC721 order.
|
||||
/// @return status The status of the order.
|
||||
function getERC721OrderStatus(LibNFTOrder.ERC721Order calldata order)
|
||||
external
|
||||
view
|
||||
returns (LibNFTOrder.OrderStatus status);
|
||||
function getERC721OrderStatus(
|
||||
LibNFTOrder.ERC721Order calldata order
|
||||
) external view returns (LibNFTOrder.OrderStatus status);
|
||||
|
||||
/// @dev Get the EIP-712 hash of an ERC721 order.
|
||||
/// @param order The ERC721 order.
|
||||
|
@@ -24,9 +24,5 @@ interface IFundRecoveryFeature {
|
||||
/// @param erc20 ERC20 Token Address.
|
||||
/// @param amountOut Amount of tokens to withdraw.
|
||||
/// @param recipientWallet Recipient wallet address.
|
||||
function transferTrappedTokensTo(
|
||||
IERC20TokenV06 erc20,
|
||||
uint256 amountOut,
|
||||
address payable recipientWallet
|
||||
) external;
|
||||
function transferTrappedTokensTo(IERC20TokenV06 erc20, uint256 amountOut, address payable recipientWallet) external;
|
||||
}
|
||||
|
@@ -61,10 +61,10 @@ interface IMetaTransactionsFeature {
|
||||
/// @param mtx The meta-transaction.
|
||||
/// @param signature The signature by `mtx.signer`.
|
||||
/// @return returnResult The ABI-encoded result of the underlying call.
|
||||
function executeMetaTransaction(MetaTransactionData calldata mtx, LibSignature.Signature calldata signature)
|
||||
external
|
||||
payable
|
||||
returns (bytes memory returnResult);
|
||||
function executeMetaTransaction(
|
||||
MetaTransactionData calldata mtx,
|
||||
LibSignature.Signature calldata signature
|
||||
) external payable returns (bytes memory returnResult);
|
||||
|
||||
/// @dev Execute multiple meta-transactions.
|
||||
/// @param mtxs The meta-transactions.
|
||||
@@ -78,10 +78,9 @@ interface IMetaTransactionsFeature {
|
||||
/// @dev Get the block at which a meta-transaction has been executed.
|
||||
/// @param mtx The meta-transaction.
|
||||
/// @return blockNumber The block height when the meta-transactioin was executed.
|
||||
function getMetaTransactionExecutedBlock(MetaTransactionData calldata mtx)
|
||||
external
|
||||
view
|
||||
returns (uint256 blockNumber);
|
||||
function getMetaTransactionExecutedBlock(
|
||||
MetaTransactionData calldata mtx
|
||||
) external view returns (uint256 blockNumber);
|
||||
|
||||
/// @dev Get the block at which a meta-transaction hash has been executed.
|
||||
/// @param mtxHash The meta-transaction hash.
|
||||
|
@@ -155,11 +155,7 @@ interface INativeOrdersFeature is INativeOrdersEvents {
|
||||
/// @param makerToken The maker token.
|
||||
/// @param takerToken The taker token.
|
||||
/// @param minValidSalt The new minimum valid salt.
|
||||
function cancelPairLimitOrders(
|
||||
IERC20TokenV06 makerToken,
|
||||
IERC20TokenV06 takerToken,
|
||||
uint256 minValidSalt
|
||||
) external;
|
||||
function cancelPairLimitOrders(IERC20TokenV06 makerToken, IERC20TokenV06 takerToken, uint256 minValidSalt) external;
|
||||
|
||||
/// @dev Cancel all limit orders for a given maker and pair with a salt less
|
||||
/// than the value provided. The caller must be a signer registered to the maker.
|
||||
@@ -211,11 +207,7 @@ interface INativeOrdersFeature is INativeOrdersEvents {
|
||||
/// @param makerToken The maker token.
|
||||
/// @param takerToken The taker token.
|
||||
/// @param minValidSalt The new minimum valid salt.
|
||||
function cancelPairRfqOrders(
|
||||
IERC20TokenV06 makerToken,
|
||||
IERC20TokenV06 takerToken,
|
||||
uint256 minValidSalt
|
||||
) external;
|
||||
function cancelPairRfqOrders(IERC20TokenV06 makerToken, IERC20TokenV06 takerToken, uint256 minValidSalt) external;
|
||||
|
||||
/// @dev Cancel all RFQ orders for a given maker and pair with a salt less
|
||||
/// than the value provided. The caller must be a signer registered to the maker.
|
||||
@@ -263,18 +255,16 @@ interface INativeOrdersFeature is INativeOrdersEvents {
|
||||
/// @dev Get the order info for a limit order.
|
||||
/// @param order The limit order.
|
||||
/// @return orderInfo Info about the order.
|
||||
function getLimitOrderInfo(LibNativeOrder.LimitOrder calldata order)
|
||||
external
|
||||
view
|
||||
returns (LibNativeOrder.OrderInfo memory orderInfo);
|
||||
function getLimitOrderInfo(
|
||||
LibNativeOrder.LimitOrder calldata order
|
||||
) external view returns (LibNativeOrder.OrderInfo memory orderInfo);
|
||||
|
||||
/// @dev Get the order info for an RFQ order.
|
||||
/// @param order The RFQ order.
|
||||
/// @return orderInfo Info about the order.
|
||||
function getRfqOrderInfo(LibNativeOrder.RfqOrder calldata order)
|
||||
external
|
||||
view
|
||||
returns (LibNativeOrder.OrderInfo memory orderInfo);
|
||||
function getRfqOrderInfo(
|
||||
LibNativeOrder.RfqOrder calldata order
|
||||
) external view returns (LibNativeOrder.OrderInfo memory orderInfo);
|
||||
|
||||
/// @dev Get the canonical hash of a limit order.
|
||||
/// @param order The limit order.
|
||||
@@ -319,7 +309,10 @@ interface INativeOrdersFeature is INativeOrdersEvents {
|
||||
/// @return actualFillableTakerTokenAmount How much of the order is fillable
|
||||
/// based on maker funds, in taker tokens.
|
||||
/// @return isSignatureValid Whether the signature is valid.
|
||||
function getRfqOrderRelevantState(LibNativeOrder.RfqOrder calldata order, LibSignature.Signature calldata signature)
|
||||
function getRfqOrderRelevantState(
|
||||
LibNativeOrder.RfqOrder calldata order,
|
||||
LibSignature.Signature calldata signature
|
||||
)
|
||||
external
|
||||
view
|
||||
returns (
|
||||
|
@@ -75,10 +75,10 @@ interface IOtcOrdersFeature {
|
||||
/// @param makerSignature The order signature from the maker.
|
||||
/// @return takerTokenFilledAmount How much taker token was filled.
|
||||
/// @return makerTokenFilledAmount How much maker token was filled.
|
||||
function fillOtcOrderWithEth(LibNativeOrder.OtcOrder calldata order, LibSignature.Signature calldata makerSignature)
|
||||
external
|
||||
payable
|
||||
returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount);
|
||||
function fillOtcOrderWithEth(
|
||||
LibNativeOrder.OtcOrder calldata order,
|
||||
LibSignature.Signature calldata makerSignature
|
||||
) external payable returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount);
|
||||
|
||||
/// @dev Fully fill an OTC order. "Meta-transaction" variant,
|
||||
/// requires order to be signed by both maker and taker.
|
||||
@@ -144,10 +144,9 @@ interface IOtcOrdersFeature {
|
||||
/// @dev Get the order info for an OTC order.
|
||||
/// @param order The OTC order.
|
||||
/// @return orderInfo Info about the order.
|
||||
function getOtcOrderInfo(LibNativeOrder.OtcOrder calldata order)
|
||||
external
|
||||
view
|
||||
returns (LibNativeOrder.OtcOrderInfo memory orderInfo);
|
||||
function getOtcOrderInfo(
|
||||
LibNativeOrder.OtcOrder calldata order
|
||||
) external view returns (LibNativeOrder.OtcOrderInfo memory orderInfo);
|
||||
|
||||
/// @dev Get the canonical hash of an OTC order.
|
||||
/// @param order The OTC order.
|
||||
|
@@ -38,9 +38,5 @@ interface IOwnableFeature is IOwnableV06 {
|
||||
/// @param target The migrator contract address.
|
||||
/// @param newOwner The address of the new owner.
|
||||
/// @param data The call data.
|
||||
function migrate(
|
||||
address target,
|
||||
bytes calldata data,
|
||||
address newOwner
|
||||
) external;
|
||||
function migrate(address target, bytes calldata data, address newOwner) external;
|
||||
}
|
||||
|
@@ -30,12 +30,7 @@ interface ITokenSpenderFeature {
|
||||
/// @param owner The owner of the tokens.
|
||||
/// @param to The recipient of the tokens.
|
||||
/// @param amount The amount of `token` to transfer.
|
||||
function _spendERC20Tokens(
|
||||
IERC20TokenV06 token,
|
||||
address owner,
|
||||
address to,
|
||||
uint256 amount
|
||||
) external;
|
||||
function _spendERC20Tokens(IERC20TokenV06 token, address owner, address to, uint256 amount) external;
|
||||
|
||||
/// @dev Gets the maximum amount of an ERC20 token `token` that can be
|
||||
/// pulled from `owner`.
|
||||
|
@@ -82,9 +82,5 @@ interface IUniswapV3Feature {
|
||||
/// @param amount1Delta Token1 amount owed.
|
||||
/// @param data Arbitrary data forwarded from swap() caller. An ABI-encoded
|
||||
/// struct of: inputToken, outputToken, fee, payer
|
||||
function uniswapV3SwapCallback(
|
||||
int256 amount0Delta,
|
||||
int256 amount1Delta,
|
||||
bytes calldata data
|
||||
) external;
|
||||
function uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes calldata data) external;
|
||||
}
|
||||
|
@@ -271,10 +271,7 @@ library LibNFTOrder {
|
||||
mstore(typeHashPos, _ERC_721_ORDER_TYPEHASH)
|
||||
mstore(feesHashPos, feesHash)
|
||||
mstore(propertiesHashPos, propertiesHash)
|
||||
structHash := keccak256(
|
||||
typeHashPos,
|
||||
384 /* 32 * 12 */
|
||||
)
|
||||
structHash := keccak256(typeHashPos, 384 /* 32 * 12 */)
|
||||
|
||||
mstore(typeHashPos, typeHashMemBefore)
|
||||
mstore(feesHashPos, feeHashMemBefore)
|
||||
@@ -322,10 +319,7 @@ library LibNFTOrder {
|
||||
mstore(typeHashPos, _ERC_1155_ORDER_TYPEHASH)
|
||||
mstore(feesHashPos, feesHash)
|
||||
mstore(propertiesHashPos, propertiesHash)
|
||||
structHash := keccak256(
|
||||
typeHashPos,
|
||||
416 /* 32 * 12 */
|
||||
)
|
||||
structHash := keccak256(typeHashPos, 416 /* 32 * 12 */)
|
||||
|
||||
mstore(typeHashPos, typeHashMemBefore)
|
||||
mstore(feesHashPos, feesHashMemBefore)
|
||||
|
@@ -54,7 +54,7 @@ contract MultiplexFeature is
|
||||
/// @dev Version of this feature.
|
||||
uint256 public immutable override FEATURE_VERSION = _encodeVersion(2, 0, 0);
|
||||
/// @dev The highest bit of a uint256 value.
|
||||
uint256 private constant HIGH_BIT = 2**255;
|
||||
uint256 private constant HIGH_BIT = 2 ** 255;
|
||||
/// @dev Mask of the lower 255 bits of a uint256 value.
|
||||
uint256 private constant LOWER_255_BITS = HIGH_BIT - 1;
|
||||
|
||||
@@ -191,10 +191,10 @@ contract MultiplexFeature is
|
||||
/// @param minBuyAmount The minimum amount of `outputToken` that
|
||||
/// must be bought for this function to not revert.
|
||||
/// @return boughtAmount The amount of `outputToken` bought.
|
||||
function _multiplexBatchSell(BatchSellParams memory params, uint256 minBuyAmount)
|
||||
private
|
||||
returns (uint256 boughtAmount)
|
||||
{
|
||||
function _multiplexBatchSell(
|
||||
BatchSellParams memory params,
|
||||
uint256 minBuyAmount
|
||||
) private returns (uint256 boughtAmount) {
|
||||
// Cache the recipient's initial balance of the output token.
|
||||
uint256 balanceBefore = params.outputToken.balanceOf(params.recipient);
|
||||
// Execute the batch sell.
|
||||
@@ -320,10 +320,10 @@ contract MultiplexFeature is
|
||||
/// @param minBuyAmount The minimum amount of output tokens that
|
||||
/// must be bought for this function to not revert.
|
||||
/// @return boughtAmount The amount of output tokens bought.
|
||||
function _multiplexMultiHopSell(MultiHopSellParams memory params, uint256 minBuyAmount)
|
||||
private
|
||||
returns (uint256 boughtAmount)
|
||||
{
|
||||
function _multiplexMultiHopSell(
|
||||
MultiHopSellParams memory params,
|
||||
uint256 minBuyAmount
|
||||
) private returns (uint256 boughtAmount) {
|
||||
// There should be one call/hop between every two tokens
|
||||
// in the path.
|
||||
// tokens[0]––calls[0]––>tokens[1]––...––calls[n-1]––>tokens[n]
|
||||
|
@@ -73,9 +73,10 @@ abstract contract MultiplexUniswapV3 is FixinTokenSpender {
|
||||
}
|
||||
}
|
||||
|
||||
function _multiHopSellUniswapV3(IMultiplexFeature.MultiHopSellState memory state, bytes memory wrappedCallData)
|
||||
internal
|
||||
{
|
||||
function _multiHopSellUniswapV3(
|
||||
IMultiplexFeature.MultiHopSellState memory state,
|
||||
bytes memory wrappedCallData
|
||||
) internal {
|
||||
bool success;
|
||||
bytes memory resultData;
|
||||
if (state.from == address(this)) {
|
||||
|
@@ -85,11 +85,7 @@ abstract contract NativeOrdersCancellation is INativeOrdersEvents, NativeOrdersI
|
||||
/// @param makerToken The maker token.
|
||||
/// @param takerToken The taker token.
|
||||
/// @param minValidSalt The new minimum valid salt.
|
||||
function cancelPairLimitOrders(
|
||||
IERC20TokenV06 makerToken,
|
||||
IERC20TokenV06 takerToken,
|
||||
uint256 minValidSalt
|
||||
) public {
|
||||
function cancelPairLimitOrders(IERC20TokenV06 makerToken, IERC20TokenV06 takerToken, uint256 minValidSalt) public {
|
||||
_cancelPairLimitOrders(msg.sender, makerToken, takerToken, minValidSalt);
|
||||
}
|
||||
|
||||
@@ -172,11 +168,7 @@ abstract contract NativeOrdersCancellation is INativeOrdersEvents, NativeOrdersI
|
||||
/// @param makerToken The maker token.
|
||||
/// @param takerToken The taker token.
|
||||
/// @param minValidSalt The new minimum valid salt.
|
||||
function cancelPairRfqOrders(
|
||||
IERC20TokenV06 makerToken,
|
||||
IERC20TokenV06 takerToken,
|
||||
uint256 minValidSalt
|
||||
) public {
|
||||
function cancelPairRfqOrders(IERC20TokenV06 makerToken, IERC20TokenV06 takerToken, uint256 minValidSalt) public {
|
||||
_cancelPairRfqOrders(msg.sender, makerToken, takerToken, minValidSalt);
|
||||
}
|
||||
|
||||
|
@@ -51,11 +51,9 @@ abstract contract NativeOrdersInfo is FixinEIP712, FixinTokenSpender {
|
||||
/// @dev Get the order info for a limit order.
|
||||
/// @param order The limit order.
|
||||
/// @return orderInfo Info about the order.
|
||||
function getLimitOrderInfo(LibNativeOrder.LimitOrder memory order)
|
||||
public
|
||||
view
|
||||
returns (LibNativeOrder.OrderInfo memory orderInfo)
|
||||
{
|
||||
function getLimitOrderInfo(
|
||||
LibNativeOrder.LimitOrder memory order
|
||||
) public view returns (LibNativeOrder.OrderInfo memory orderInfo) {
|
||||
// Recover maker and compute order hash.
|
||||
orderInfo.orderHash = getLimitOrderHash(order);
|
||||
uint256 minValidSalt = LibNativeOrdersStorage
|
||||
@@ -69,11 +67,9 @@ abstract contract NativeOrdersInfo is FixinEIP712, FixinTokenSpender {
|
||||
/// @dev Get the order info for an RFQ order.
|
||||
/// @param order The RFQ order.
|
||||
/// @return orderInfo Info about the order.
|
||||
function getRfqOrderInfo(LibNativeOrder.RfqOrder memory order)
|
||||
public
|
||||
view
|
||||
returns (LibNativeOrder.OrderInfo memory orderInfo)
|
||||
{
|
||||
function getRfqOrderInfo(
|
||||
LibNativeOrder.RfqOrder memory order
|
||||
) public view returns (LibNativeOrder.OrderInfo memory orderInfo) {
|
||||
// Recover maker and compute order hash.
|
||||
orderInfo.orderHash = getRfqOrderHash(order);
|
||||
uint256 minValidSalt = LibNativeOrdersStorage
|
||||
@@ -145,7 +141,10 @@ abstract contract NativeOrdersInfo is FixinEIP712, FixinTokenSpender {
|
||||
/// @return actualFillableTakerTokenAmount How much of the order is fillable
|
||||
/// based on maker funds, in taker tokens.
|
||||
/// @return isSignatureValid Whether the signature is valid.
|
||||
function getRfqOrderRelevantState(LibNativeOrder.RfqOrder memory order, LibSignature.Signature memory signature)
|
||||
function getRfqOrderRelevantState(
|
||||
LibNativeOrder.RfqOrder memory order,
|
||||
LibSignature.Signature memory signature
|
||||
)
|
||||
public
|
||||
view
|
||||
returns (
|
||||
@@ -293,11 +292,9 @@ abstract contract NativeOrdersInfo is FixinEIP712, FixinTokenSpender {
|
||||
|
||||
/// @dev Calculate the actual fillable taker token amount of an order
|
||||
/// based on maker allowance and balances.
|
||||
function _getActualFillableTakerTokenAmount(GetActualFillableTakerTokenAmountParams memory params)
|
||||
private
|
||||
view
|
||||
returns (uint128 actualFillableTakerTokenAmount)
|
||||
{
|
||||
function _getActualFillableTakerTokenAmount(
|
||||
GetActualFillableTakerTokenAmountParams memory params
|
||||
) private view returns (uint128 actualFillableTakerTokenAmount) {
|
||||
if (params.orderMakerAmount == 0 || params.orderTakerAmount == 0) {
|
||||
// Empty order.
|
||||
return 0;
|
||||
|
@@ -313,10 +313,9 @@ abstract contract NativeOrdersSettlement is
|
||||
/// @dev Fill a limit order. Private variant. Does not refund protocol fees.
|
||||
/// @param params Function params.
|
||||
/// @return results Results of the fill.
|
||||
function _fillLimitOrderPrivate(FillLimitOrderPrivateParams memory params)
|
||||
private
|
||||
returns (FillNativeOrderResults memory results)
|
||||
{
|
||||
function _fillLimitOrderPrivate(
|
||||
FillLimitOrderPrivateParams memory params
|
||||
) private returns (FillNativeOrderResults memory results) {
|
||||
LibNativeOrder.OrderInfo memory orderInfo = getLimitOrderInfo(params.order);
|
||||
|
||||
// Must be fillable.
|
||||
@@ -402,10 +401,9 @@ abstract contract NativeOrdersSettlement is
|
||||
/// @dev Fill an RFQ order. Private variant.
|
||||
/// @param params Function params.
|
||||
/// @return results Results of the fill.
|
||||
function _fillRfqOrderPrivate(FillRfqOrderPrivateParams memory params)
|
||||
private
|
||||
returns (FillNativeOrderResults memory results)
|
||||
{
|
||||
function _fillRfqOrderPrivate(
|
||||
FillRfqOrderPrivateParams memory params
|
||||
) private returns (FillNativeOrderResults memory results) {
|
||||
LibNativeOrder.OrderInfo memory orderInfo = getRfqOrderInfo(params.order);
|
||||
|
||||
// Must be fillable.
|
||||
@@ -473,10 +471,9 @@ abstract contract NativeOrdersSettlement is
|
||||
/// @param settleInfo Information needed to execute the settlement.
|
||||
/// @return takerTokenFilledAmount How much taker token was filled.
|
||||
/// @return makerTokenFilledAmount How much maker token was filled.
|
||||
function _settleOrder(SettleOrderInfo memory settleInfo)
|
||||
private
|
||||
returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount)
|
||||
{
|
||||
function _settleOrder(
|
||||
SettleOrderInfo memory settleInfo
|
||||
) private returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount) {
|
||||
// Clamp the taker token fill amount to the fillable amount.
|
||||
takerTokenFilledAmount = LibSafeMathV06.min128(
|
||||
settleInfo.takerTokenFillAmount,
|
||||
|
@@ -251,7 +251,7 @@ contract ERC1155OrdersFeature is IFeature, IERC1155OrdersFeature, FixinERC1155Sp
|
||||
/// indicating that the callback succeeded.
|
||||
function onERC1155Received(
|
||||
address operator,
|
||||
address, /* from */
|
||||
address /* from */,
|
||||
uint256 tokenId,
|
||||
uint256 value,
|
||||
bytes calldata data
|
||||
@@ -422,7 +422,7 @@ contract ERC1155OrdersFeature is IFeature, IERC1155OrdersFeature, FixinERC1155Sp
|
||||
/// @param fillAmount The amount (denominated in the NFT asset)
|
||||
/// that the order has been filled by.
|
||||
function _updateOrderState(
|
||||
LibNFTOrder.NFTOrder memory, /* order */
|
||||
LibNFTOrder.NFTOrder memory /* order */,
|
||||
bytes32 orderHash,
|
||||
uint128 fillAmount
|
||||
) internal override {
|
||||
@@ -442,23 +442,19 @@ contract ERC1155OrdersFeature is IFeature, IERC1155OrdersFeature, FixinERC1155Sp
|
||||
/// an ERC1155 asset.
|
||||
/// @param order The ERC1155 order.
|
||||
/// @param erc1155TokenId The ID of the ERC1155 asset.
|
||||
function validateERC1155OrderProperties(LibNFTOrder.ERC1155Order memory order, uint256 erc1155TokenId)
|
||||
public
|
||||
view
|
||||
override
|
||||
{
|
||||
function validateERC1155OrderProperties(
|
||||
LibNFTOrder.ERC1155Order memory order,
|
||||
uint256 erc1155TokenId
|
||||
) public view override {
|
||||
_validateOrderProperties(order.asNFTOrder(), erc1155TokenId);
|
||||
}
|
||||
|
||||
/// @dev Get the order info for an ERC1155 order.
|
||||
/// @param order The ERC1155 order.
|
||||
/// @return orderInfo Info about the order.
|
||||
function getERC1155OrderInfo(LibNFTOrder.ERC1155Order memory order)
|
||||
public
|
||||
view
|
||||
override
|
||||
returns (LibNFTOrder.OrderInfo memory orderInfo)
|
||||
{
|
||||
function getERC1155OrderInfo(
|
||||
LibNFTOrder.ERC1155Order memory order
|
||||
) public view override returns (LibNFTOrder.OrderInfo memory orderInfo) {
|
||||
orderInfo.orderAmount = order.erc1155TokenAmount;
|
||||
orderInfo.orderHash = getERC1155OrderHash(order);
|
||||
|
||||
@@ -511,24 +507,18 @@ contract ERC1155OrdersFeature is IFeature, IERC1155OrdersFeature, FixinERC1155Sp
|
||||
/// @dev Get the order info for an NFT order.
|
||||
/// @param order The NFT order.
|
||||
/// @return orderInfo Info about the order.
|
||||
function _getOrderInfo(LibNFTOrder.NFTOrder memory order)
|
||||
internal
|
||||
view
|
||||
override
|
||||
returns (LibNFTOrder.OrderInfo memory orderInfo)
|
||||
{
|
||||
function _getOrderInfo(
|
||||
LibNFTOrder.NFTOrder memory order
|
||||
) internal view override returns (LibNFTOrder.OrderInfo memory orderInfo) {
|
||||
return getERC1155OrderInfo(order.asERC1155Order());
|
||||
}
|
||||
|
||||
/// @dev Get the EIP-712 hash of an ERC1155 order.
|
||||
/// @param order The ERC1155 order.
|
||||
/// @return orderHash The order hash.
|
||||
function getERC1155OrderHash(LibNFTOrder.ERC1155Order memory order)
|
||||
public
|
||||
view
|
||||
override
|
||||
returns (bytes32 orderHash)
|
||||
{
|
||||
function getERC1155OrderHash(
|
||||
LibNFTOrder.ERC1155Order memory order
|
||||
) public view override returns (bytes32 orderHash) {
|
||||
return _getEIP712Hash(LibNFTOrder.getERC1155OrderStructHash(order));
|
||||
}
|
||||
}
|
||||
|
@@ -474,7 +474,7 @@ contract ERC721OrdersFeature is IFeature, IERC721OrdersFeature, FixinERC721Spend
|
||||
/// indicating that the callback succeeded.
|
||||
function onERC721Received(
|
||||
address operator,
|
||||
address, /* from */
|
||||
address /* from */,
|
||||
uint256 tokenId,
|
||||
bytes calldata data
|
||||
) external override returns (bytes4 success) {
|
||||
@@ -599,11 +599,10 @@ contract ERC721OrdersFeature is IFeature, IERC721OrdersFeature, FixinERC721Spend
|
||||
/// the given ERC721 order. Reverts if not.
|
||||
/// @param order The ERC721 order.
|
||||
/// @param signature The signature to validate.
|
||||
function validateERC721OrderSignature(LibNFTOrder.ERC721Order memory order, LibSignature.Signature memory signature)
|
||||
public
|
||||
view
|
||||
override
|
||||
{
|
||||
function validateERC721OrderSignature(
|
||||
LibNFTOrder.ERC721Order memory order,
|
||||
LibSignature.Signature memory signature
|
||||
) public view override {
|
||||
bytes32 orderHash = getERC721OrderHash(order);
|
||||
_validateOrderSignature(orderHash, signature, order.maker);
|
||||
}
|
||||
@@ -658,7 +657,7 @@ contract ERC721OrdersFeature is IFeature, IERC721OrdersFeature, FixinERC721Spend
|
||||
/// that the order has been filled by.
|
||||
function _updateOrderState(
|
||||
LibNFTOrder.NFTOrder memory order,
|
||||
bytes32, /* orderHash */
|
||||
bytes32 /* orderHash */,
|
||||
uint128 fillAmount
|
||||
) internal override {
|
||||
assert(fillAmount == 1);
|
||||
@@ -682,23 +681,19 @@ contract ERC721OrdersFeature is IFeature, IERC721OrdersFeature, FixinERC721Spend
|
||||
/// an ERC721 asset.
|
||||
/// @param order The ERC721 order.
|
||||
/// @param erc721TokenId The ID of the ERC721 asset.
|
||||
function validateERC721OrderProperties(LibNFTOrder.ERC721Order memory order, uint256 erc721TokenId)
|
||||
public
|
||||
view
|
||||
override
|
||||
{
|
||||
function validateERC721OrderProperties(
|
||||
LibNFTOrder.ERC721Order memory order,
|
||||
uint256 erc721TokenId
|
||||
) public view override {
|
||||
_validateOrderProperties(order.asNFTOrder(), erc721TokenId);
|
||||
}
|
||||
|
||||
/// @dev Get the current status of an ERC721 order.
|
||||
/// @param order The ERC721 order.
|
||||
/// @return status The status of the order.
|
||||
function getERC721OrderStatus(LibNFTOrder.ERC721Order memory order)
|
||||
public
|
||||
view
|
||||
override
|
||||
returns (LibNFTOrder.OrderStatus status)
|
||||
{
|
||||
function getERC721OrderStatus(
|
||||
LibNFTOrder.ERC721Order memory order
|
||||
) public view override returns (LibNFTOrder.OrderStatus status) {
|
||||
// Only buy orders with `erc721TokenId` == 0 can be property
|
||||
// orders.
|
||||
if (
|
||||
@@ -741,12 +736,9 @@ contract ERC721OrdersFeature is IFeature, IERC721OrdersFeature, FixinERC721Spend
|
||||
/// @dev Get the order info for an NFT order.
|
||||
/// @param order The NFT order.
|
||||
/// @return orderInfo Info about the order.
|
||||
function _getOrderInfo(LibNFTOrder.NFTOrder memory order)
|
||||
internal
|
||||
view
|
||||
override
|
||||
returns (LibNFTOrder.OrderInfo memory orderInfo)
|
||||
{
|
||||
function _getOrderInfo(
|
||||
LibNFTOrder.NFTOrder memory order
|
||||
) internal view override returns (LibNFTOrder.OrderInfo memory orderInfo) {
|
||||
LibNFTOrder.ERC721Order memory erc721Order = order.asERC721Order();
|
||||
orderInfo.orderHash = getERC721OrderHash(erc721Order);
|
||||
orderInfo.status = getERC721OrderStatus(erc721Order);
|
||||
@@ -770,12 +762,10 @@ contract ERC721OrdersFeature is IFeature, IERC721OrdersFeature, FixinERC721Spend
|
||||
/// 248 bits.
|
||||
/// @return bitVector The order status bit vector for the
|
||||
/// given maker and nonce range.
|
||||
function getERC721OrderStatusBitVector(address maker, uint248 nonceRange)
|
||||
external
|
||||
view
|
||||
override
|
||||
returns (uint256 bitVector)
|
||||
{
|
||||
function getERC721OrderStatusBitVector(
|
||||
address maker,
|
||||
uint248 nonceRange
|
||||
) external view override returns (uint256 bitVector) {
|
||||
LibERC721OrdersStorage.Storage storage stor = LibERC721OrdersStorage.getStorage();
|
||||
return stor.orderStatusByMaker[maker][nonceRange];
|
||||
}
|
||||
|
@@ -439,9 +439,7 @@ abstract contract NFTOrders is FixinCommon, FixinEIP712, FixinTokenSpender {
|
||||
/// @dev Get the order info for an NFT order.
|
||||
/// @param order The NFT order.
|
||||
/// @return orderInfo Info about the order.
|
||||
function _getOrderInfo(LibNFTOrder.NFTOrder memory order)
|
||||
internal
|
||||
view
|
||||
virtual
|
||||
returns (LibNFTOrder.OrderInfo memory orderInfo);
|
||||
function _getOrderInfo(
|
||||
LibNFTOrder.NFTOrder memory order
|
||||
) internal view virtual returns (LibNFTOrder.OrderInfo memory orderInfo);
|
||||
}
|
||||
|
@@ -33,12 +33,7 @@ abstract contract FixinERC721Spender {
|
||||
/// @param owner The owner of the asset.
|
||||
/// @param to The recipient of the asset.
|
||||
/// @param tokenId The token ID of the asset to transfer.
|
||||
function _transferERC721AssetFrom(
|
||||
IERC721Token token,
|
||||
address owner,
|
||||
address to,
|
||||
uint256 tokenId
|
||||
) internal {
|
||||
function _transferERC721AssetFrom(IERC721Token token, address owner, address to, uint256 tokenId) internal {
|
||||
require(address(token) != address(this), "FixinERC721Spender/CANNOT_INVOKE_SELF");
|
||||
|
||||
assembly {
|
||||
|
@@ -33,12 +33,7 @@ abstract contract FixinTokenSpender {
|
||||
/// @param owner The owner of the tokens.
|
||||
/// @param to The recipient of the tokens.
|
||||
/// @param amount The amount of `token` to transfer.
|
||||
function _transferERC20TokensFrom(
|
||||
IERC20TokenV06 token,
|
||||
address owner,
|
||||
address to,
|
||||
uint256 amount
|
||||
) internal {
|
||||
function _transferERC20TokensFrom(IERC20TokenV06 token, address owner, address to, uint256 amount) internal {
|
||||
require(address(token) != address(this), "FixinTokenSpender/CANNOT_INVOKE_SELF");
|
||||
|
||||
assembly {
|
||||
@@ -79,11 +74,7 @@ abstract contract FixinTokenSpender {
|
||||
/// @param token The token to spend.
|
||||
/// @param to The recipient of the tokens.
|
||||
/// @param amount The amount of `token` to transfer.
|
||||
function _transferERC20Tokens(
|
||||
IERC20TokenV06 token,
|
||||
address to,
|
||||
uint256 amount
|
||||
) internal {
|
||||
function _transferERC20Tokens(IERC20TokenV06 token, address to, uint256 amount) internal {
|
||||
require(address(token) != address(this), "FixinTokenSpender/CANNOT_INVOKE_SELF");
|
||||
|
||||
assembly {
|
||||
|
@@ -131,8 +131,8 @@ contract CurveLiquidityProvider is ILiquidityProvider {
|
||||
/// @dev Quotes the amount of `outputToken` that would be obtained by
|
||||
/// selling `sellAmount` of `inputToken`.
|
||||
function getSellQuote(
|
||||
IERC20TokenV06, /* inputToken */
|
||||
IERC20TokenV06, /* outputToken */
|
||||
IERC20TokenV06 /* inputToken */,
|
||||
IERC20TokenV06 /* outputToken */,
|
||||
uint256 /* sellAmount */
|
||||
) external view override returns (uint256) {
|
||||
revert("CurveLiquidityProvider/NOT_IMPLEMENTED");
|
||||
|
@@ -128,8 +128,8 @@ contract MooniswapLiquidityProvider is ILiquidityProvider {
|
||||
/// @dev Quotes the amount of `outputToken` that would be obtained by
|
||||
/// selling `sellAmount` of `inputToken`.
|
||||
function getSellQuote(
|
||||
IERC20TokenV06, /* inputToken */
|
||||
IERC20TokenV06, /* outputToken */
|
||||
IERC20TokenV06 /* inputToken */,
|
||||
IERC20TokenV06 /* outputToken */,
|
||||
uint256 /* sellAmount */
|
||||
) external view override returns (uint256) {
|
||||
revert("MooniswapLiquidityProvider/NOT_IMPLEMENTED");
|
||||
|
@@ -114,11 +114,7 @@ contract FullMigration {
|
||||
/// @param zeroEx The bootstrapped ZeroEx contract.
|
||||
/// @param features Features to add to the proxy.
|
||||
/// @param migrateOpts Parameters needed to initialize features.
|
||||
function _addFeatures(
|
||||
ZeroEx zeroEx,
|
||||
Features memory features,
|
||||
MigrateOpts memory migrateOpts
|
||||
) private {
|
||||
function _addFeatures(ZeroEx zeroEx, Features memory features, MigrateOpts memory migrateOpts) private {
|
||||
IOwnableFeature ownable = IOwnableFeature(address(zeroEx));
|
||||
// TransformERC20Feature
|
||||
{
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user