@0x/contracts/integrations: Update wallets and add comments with last run gas costs to benchmarks.

This commit is contained in:
Lawrence Forman 2020-02-26 12:17:28 -05:00
parent d4751788d1
commit 0baec61f06
12 changed files with 21 additions and 272 deletions

View File

@ -229,7 +229,7 @@ contract DydxBridge is
withdrawAction = IDydx.ActionArgs({
actionType: IDydx.ActionType.Withdraw, // withdraw tokens.
amount: amountToWithdraw, // amount to withdraw.
accountIdx: bridgeAction.accountIdx, // index in the `accounts` when calling `operate`.
accountIdx: bridgeAction.accountIdx, // index in the `accounts` when calling `operate`.
primaryMarketId: bridgeAction.marketId, // indicates which token to withdraw.
otherAddress: withdrawTo, // withdraw tokens to this address.
// unused parameters

View File

@ -189,13 +189,4 @@ interface IDydx {
external
view
returns (Value memory supplyValue, Value memory borrowValue);
// @dev Approves/disapproves any number of operators. An operator is an external address that has the
// same permissions to manipulate an account as the owner of the account. Operators are simply
// addresses and therefore may either be externally-owned Ethereum accounts OR smart contracts.
// Operators are also able to act as AutoTrader contracts on behalf of the account owner if the
// operator is a smart contract and implements the IAutoTrader interface.
// @param args A list of OperatorArgs which have an address and a boolean. The boolean value
// denotes whether to approve (true) or revoke approval (false) for that address.
function setOperators(OperatorArg[] calldata args) external;
}

View File

@ -226,9 +226,6 @@ contract TestDydxBridge is
returns (Value memory supplyValue, Value memory borrowValue)
{}
/// @dev Unused.
function setOperators(OperatorArg[] calldata args) external {}
/// @dev overrides `_getDydxAddress()` from `DeploymentConstants` to return this address.
function _getDydxAddress()
internal

View File

@ -46,14 +46,6 @@
{
"note": "Remove `LibTransactionDecoder` export",
"pr": 2464
},
{
"note": "Add `DydxBridge` order validation",
"pr": 2466
},
{
"note": "Add `D18` library for working with base-10, 18-precision decimals",
"pr": 2466
}
],
"timestamp": 1581204851

View File

@ -1,239 +0,0 @@
/*
Copyright 2019 ZeroEx Intl.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
pragma solidity ^0.5.16;
/// @dev A library for working with 18 digit, base 10 decimals.
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);
/// @dev Minimum signed integer value.
int256 private constant MIN_INT256_VALUE = int256(0x8000000000000000000000000000000000000000000000000000000000000000);
/// @dev Return `1.0`
function one()
internal
pure
returns (int256 r)
{
r = DECIMAL_ONE;
}
/// @dev Add two decimals.
function add(int256 a, int256 b)
internal
pure
returns (int256 r)
{
r = _add(a, b);
}
/// @dev Add two decimals.
function add(uint256 a, int256 b)
internal
pure
returns (int256 r)
{
require(int256(a) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = _add(int256(a), b);
}
/// @dev Add two decimals.
function add(uint256 a, uint256 b)
internal
pure
returns (int256 r)
{
require(int256(a) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
require(int256(b) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = _add(int256(a), int256(b));
}
/// @dev Subract two decimals.
function sub(int256 a, int256 b)
internal
pure
returns (int256 r)
{
r = _add(a, -b);
}
/// @dev Subract two decimals.
function sub(uint256 a, int256 b)
internal
pure
returns (int256 r)
{
require(int256(a) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = _add(int256(a), -b);
}
/// @dev Subract two decimals.
function sub(uint256 a, uint256 b)
internal
pure
returns (int256 r)
{
require(int256(a) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
require(int256(b) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = _add(int256(a), -int256(b));
}
/// @dev Multiply two decimals.
function mul(int256 a, int256 b)
internal
pure
returns (int256 r)
{
r = _div(_mul(a, b), DECIMAL_ONE);
}
/// @dev Multiply two decimals.
function mul(uint256 a, int256 b)
internal
pure
returns (int256 r)
{
require(int256(a) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = _div(_mul(int256(a), b), DECIMAL_ONE);
}
/// @dev Multiply two decimals.
function mul(int256 a, uint256 b)
internal
pure
returns (int256 r)
{
require(int256(b) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = _div(_mul(a, int256(b)), DECIMAL_ONE);
}
/// @dev Multiply two decimals.
function mul(uint256 a, uint256 b)
internal
pure
returns (int256 r)
{
require(int256(a) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
require(int256(b) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = _div(_mul(int256(a), int256(b)), DECIMAL_ONE);
}
/// @dev Divide two decimals.
function div(int256 a, int256 b)
internal
pure
returns (int256 r)
{
require(a != MIN_INT256_VALUE || b != -1, "D18/DECIMAL_MUL_OVERFLOW");
r = _div(_mul(a, DECIMAL_ONE), b);
}
/// @dev Divide two decimals.
function div(uint256 a, int256 b)
internal
pure
returns (int256 r)
{
require(int256(a) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = _div(_mul(int256(a), DECIMAL_ONE), b);
}
/// @dev Divide two decimals.
function div(int256 a, uint256 b)
internal
pure
returns (int256 r)
{
require(int256(b) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = _div(_mul(a, DECIMAL_ONE), int256(b));
}
/// @dev Divide two decimals.
function div(uint256 a, uint256 b)
internal
pure
returns (int256 r)
{
require(uint256(a) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
require(uint256(b) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = _div(_mul(int256(a), DECIMAL_ONE), int256(b));
}
/// @dev Safely convert an unsigned integer into a signed integer.
function toSigned(uint256 a)
internal
pure
returns (int256 r)
{
require(uint256(a) >= 0, "D18/DECIMAL_VALUE_TOO_BIG");
r = int256(a);
}
/// @dev Clip a signed value to be positive.
function clip(int256 a)
internal
pure
returns (int256 r)
{
r = a < 0 ? 0 : a;
}
/// @dev Safely multiply two signed integers.
function _mul(int256 a, int256 b)
private
pure
returns (int256 r)
{
if (a == 0 || b == 0) {
return 0;
}
r = a * b;
require(r / a == b && r / b == a, "D18/DECIMAL_MUL_OVERFLOW");
return r;
}
/// @dev Safely divide two signed integers.
function _div(int256 a, int256 b)
private
pure
returns (int256 r)
{
require(b != 0, "D18/DECIMAL_DIVISION_BY_ZERO");
require(a != MIN_INT256_VALUE || b != -1, "D18/DECIMAL_MUL_OVERFLOW");
r = a / b;
}
/// @dev Safely add two signed integers.
function _add(int256 a, int256 b)
private
pure
returns (int256 r)
{
r = a + b;
require(
!((a < 0 && b < 0 && r > a) || (a > 0 && b > 0 && r < a)),
"D18/DECIMAL_MUL_OVERFLOW"
);
}
}

View File

@ -28,7 +28,7 @@
},
"config": {
"publicInterfaceContracts": "DevUtils,LibAssetData,LibDydxBalance,LibOrderTransferSimulation,LibTransactionDecoder",
"abis": "./test/generated-artifacts/@(Addresses|AssetBalance|D18|DevUtils|EthBalanceChecker|ExternalFunctions|LibAssetData|LibDydxBalance|LibOrderTransferSimulation|LibTransactionDecoder|OrderTransferSimulationUtils|OrderValidationUtils|TestDydx|TestLibDydxBalance).json",
"abis": "./test/generated-artifacts/@(Addresses|AssetBalance|DevUtils|EthBalanceChecker|ExternalFunctions|LibAssetData|LibDydxBalance|LibOrderTransferSimulation|LibTransactionDecoder|OrderTransferSimulationUtils|OrderValidationUtils|TestDydx|TestLibDydxBalance).json",
"abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually."
},
"repository": {

View File

@ -7,7 +7,6 @@ import { ContractArtifact } from 'ethereum-types';
import * as Addresses from '../test/generated-artifacts/Addresses.json';
import * as AssetBalance from '../test/generated-artifacts/AssetBalance.json';
import * as D18 from '../test/generated-artifacts/D18.json';
import * as DevUtils from '../test/generated-artifacts/DevUtils.json';
import * as EthBalanceChecker from '../test/generated-artifacts/EthBalanceChecker.json';
import * as ExternalFunctions from '../test/generated-artifacts/ExternalFunctions.json';
@ -22,7 +21,6 @@ import * as TestLibDydxBalance from '../test/generated-artifacts/TestLibDydxBala
export const artifacts = {
Addresses: Addresses as ContractArtifact,
AssetBalance: AssetBalance as ContractArtifact,
D18: D18 as ContractArtifact,
DevUtils: DevUtils as ContractArtifact,
EthBalanceChecker: EthBalanceChecker as ContractArtifact,
ExternalFunctions: ExternalFunctions as ContractArtifact,

View File

@ -5,7 +5,6 @@
*/
export * from '../test/generated-wrappers/addresses';
export * from '../test/generated-wrappers/asset_balance';
export * from '../test/generated-wrappers/d18';
export * from '../test/generated-wrappers/dev_utils';
export * from '../test/generated-wrappers/eth_balance_checker';
export * from '../test/generated-wrappers/external_functions';

View File

@ -10,7 +10,6 @@
"generated-artifacts/LibTransactionDecoder.json",
"test/generated-artifacts/Addresses.json",
"test/generated-artifacts/AssetBalance.json",
"test/generated-artifacts/D18.json",
"test/generated-artifacts/DevUtils.json",
"test/generated-artifacts/EthBalanceChecker.json",
"test/generated-artifacts/ExternalFunctions.json",

View File

@ -1,4 +1,13 @@
[
{
"version": "2.5.0",
"changes": [
{
"note": "Add `ChaiBridge` and `DydxBridge` gas benchmark tests.",
"pr": 2478
}
]
},
{
"timestamp": 1582677073,
"version": "2.4.2",
@ -57,10 +66,6 @@
{
"note": "Add DevUtils DydxBridge validation mainnet tests",
"pr": 2466
},
{
"note": "Add `ChaiBridge` and `DydxBridge` gas benchmark tests.",
"pr": 2478
}
],
"timestamp": 1581204851

View File

@ -9,9 +9,9 @@ import { DecodedLogEntry } from 'ethereum-types';
import { contractAddresses } from '../mainnet_fork_utils';
const CHONKY_DAI_WALLET = '0x3a9F7C8cA36C42d7035E87C3304eE5cBd353a532';
const CHONKY_DAI_WALLET = '0xe235AAa27428E32cA14089b03F532c571C7ab3c8';
const CHONKY_CHAI_WALLET = '0xfc64382c9ce89ba1c21692a68000366a35ff0336';
const CHONKY_WETH_WALLET = '0x07320deb2713370a3d7b49189fc2f99906e1ae8e';
const CHONKY_WETH_WALLET = '0x4abB24590606f5bf4645185e20C4E7B97596cA3B';
blockchainTests.configure({
fork: {
unlockedAccounts: [CHONKY_CHAI_WALLET, CHONKY_WETH_WALLET, CHONKY_DAI_WALLET],
@ -91,6 +91,7 @@ blockchainTests.fork.skip('ChaiBridge fill benchmarks', env => {
return order;
}
// Last run: 282194
it('filling one chai maker asset', async () => {
const order = await prepareOrderAsync();
const receipt = await exchange
@ -108,6 +109,7 @@ blockchainTests.fork.skip('ChaiBridge fill benchmarks', env => {
logUtils.log(`gas used: ${receipt.gasUsed}`);
});
// Last run: 292707
it('filling one chai taker asset', async () => {
const order = await prepareOrderAsync({
makerAddress: CHONKY_WETH_WALLET,
@ -151,6 +153,7 @@ blockchainTests.fork.skip('ChaiBridge fill benchmarks', env => {
return order;
}
// Last run: 124665
it('filling one dai maker asset', async () => {
const order = await prepareOrderAsync({
makerAddress: CHONKY_DAI_WALLET,
@ -171,6 +174,7 @@ blockchainTests.fork.skip('ChaiBridge fill benchmarks', env => {
logUtils.log(`gas used: ${receipt.gasUsed}`);
});
// Last run: 124665
it('filling one dai taker asset', async () => {
const order = await prepareOrderAsync({
makerAddress: CHONKY_WETH_WALLET,

View File

@ -24,7 +24,7 @@ import { DecodedLogEntry } from 'ethereum-types';
import { contractAddresses } from '../mainnet_fork_utils';
// A chonky dai wallet.
const MAKER_ADDRESS = '0x3a9F7C8cA36C42d7035E87C3304eE5cBd353a532';
const MAKER_ADDRESS = '0xe235AAa27428E32cA14089b03F532c571C7ab3c8';
// Also a chonky dai wallet.
const TAKER_ADDRESS = '0x66c57bf505a85a74609d2c83e94aabb26d691e1f';
blockchainTests.configure({
@ -42,6 +42,7 @@ blockchainTests.fork.skip('DydxBridge fill benchmarks', env => {
dydx = new IDydxContract(DYDX_ADDRESS, env.provider, env.txDefaults);
// Initialize a dydx account with some Dai collateral and USDC borrowed.
await approveSpenderAsync(MAKER_ADDRESS, BRIDGE_ADDRESS, DAI_ADDRESS);
await approveSpenderAsync(MAKER_ADDRESS, DYDX_ADDRESS, DAI_ADDRESS);
await dydx
.setOperators([{ operator: BRIDGE_ADDRESS, trusted: true }])
.awaitTransactionSuccessAsync({ from: MAKER_ADDRESS }, { shouldValidate: false });
@ -225,6 +226,7 @@ blockchainTests.fork.skip('DydxBridge fill benchmarks', env => {
return order;
}
// Last run: 375066
it('filling a DAI->USDC dydx order with a deposit action', async () => {
const order = await prepareOrderAsync();
const receipt = await exchange
@ -242,6 +244,7 @@ blockchainTests.fork.skip('DydxBridge fill benchmarks', env => {
logUtils.log(`gas used: ${receipt.gasUsed}`);
});
// Last run: 315896
it('filling a DAI->USDC dydx order with no deposit action', async () => {
const order = await prepareOrderAsync({
makerAssetData: encodeDydxBridgeAssetData(DAI_ADDRESS, USDC_ADDRESS, 0),