@0x/contracts-asset-proxy: Fix typos and remove BridgeTransferFromCallFailed event from DexForwarderBridge.

This commit is contained in:
Lawrence Forman 2020-03-26 18:25:37 -04:00 committed by Lawrence Forman
parent f3c6f26f85
commit 0ccbc7d3d2
3 changed files with 13 additions and 91 deletions

View File

@ -54,14 +54,6 @@ contract DexForwarderBridge is
BridgeCall[] calls; BridgeCall[] calls;
} }
event DexForwarderBridgeCallFailed(
address indexed target,
address inputToken,
address outputToken,
uint256 inputTokenAmount,
uint256 outputTokenAmount
);
/// @dev Spends this contract's entire balance of input tokens by forwarding /// @dev Spends this contract's entire balance of input tokens by forwarding
/// them to other bridges. Reverts if the entire balance is not spent. /// them to other bridges. Reverts if the entire balance is not spent.
/// @param outputToken The token being bought. /// @param outputToken The token being bought.
@ -118,16 +110,7 @@ contract DexForwarderBridge is
call.bridgeData call.bridgeData
)); ));
if (!didSucceed) { if (didSucceed) {
// Log errors.
emit DexForwarderBridgeCallFailed(
call.target,
state.inputToken,
outputToken,
state.callInputTokenAmount,
state.callOutputTokenAmount
);
} else {
// Increase the amount of tokens sold. // Increase the amount of tokens sold.
state.totalInputTokenSold = state.totalInputTokenSold.safeAdd( state.totalInputTokenSold = state.totalInputTokenSold.safeAdd(
state.callInputTokenAmount state.callInputTokenAmount
@ -168,7 +151,7 @@ contract DexForwarderBridge is
// Must be called through `bridgeTransferFrom()`. // Must be called through `bridgeTransferFrom()`.
require(msg.sender == address(this), "DexForwarderBridge/ONLY_SELF"); require(msg.sender == address(this), "DexForwarderBridge/ONLY_SELF");
// `bridge` must not be this contract. // `bridge` must not be this contract.
require(bridge != address(this), "DexForwarderBridge/ILLEGAL_BRIDGE"); require(bridge != address(this));
// Get the starting balance of output tokens for `to`. // Get the starting balance of output tokens for `to`.
uint256 initialRecipientBalance = IERC20Token(outputToken).balanceOf(to); uint256 initialRecipientBalance = IERC20Token(outputToken).balanceOf(to);

View File

@ -1,6 +1,6 @@
import { AbiEncoder, BigNumber } from '@0x/utils'; import { AbiEncoder, BigNumber } from '@0x/utils';
export interface DexForwaderBridgeCall { export interface DexForwarderBridgeCall {
target: string; target: string;
inputTokenAmount: BigNumber; inputTokenAmount: BigNumber;
outputTokenAmount: BigNumber; outputTokenAmount: BigNumber;
@ -9,7 +9,7 @@ export interface DexForwaderBridgeCall {
export interface DexForwaderBridgeData { export interface DexForwaderBridgeData {
inputToken: string; inputToken: string;
calls: DexForwaderBridgeCall[]; calls: DexForwarderBridgeCall[];
} }
export const dexForwarderBridgeDataEncoder = AbiEncoder.create([ export const dexForwarderBridgeDataEncoder = AbiEncoder.create([

View File

@ -7,17 +7,15 @@ import {
getRandomInteger, getRandomInteger,
randomAddress, randomAddress,
shortZip, shortZip,
verifyEventsFromLogs,
} from '@0x/contracts-test-utils'; } from '@0x/contracts-test-utils';
import { BigNumber, hexUtils } from '@0x/utils'; import { BigNumber, hexUtils } from '@0x/utils';
import { DecodedLogs } from 'ethereum-types'; import { DecodedLogs } from 'ethereum-types';
import * as _ from 'lodash'; import * as _ from 'lodash';
import { DexForwaderBridgeCall, dexForwarderBridgeDataEncoder } from '../src/dex_forwarder_bridge'; import { DexForwarderBridgeCall, dexForwarderBridgeDataEncoder } from '../src/dex_forwarder_bridge';
import { artifacts } from './artifacts'; import { artifacts } from './artifacts';
import { import {
DexForwarderBridgeEvents,
TestDexForwarderBridgeBridgeTransferFromCalledEventArgs as BtfCalledEventArgs, TestDexForwarderBridgeBridgeTransferFromCalledEventArgs as BtfCalledEventArgs,
TestDexForwarderBridgeContract, TestDexForwarderBridgeContract,
TestDexForwarderBridgeEvents as TestEvents, TestDexForwarderBridgeEvents as TestEvents,
@ -59,8 +57,8 @@ blockchainTests.resets('DexForwarderBridge unit tests', env => {
function getRandomBridgeCall( function getRandomBridgeCall(
bridgeAddress: string, bridgeAddress: string,
fields: Partial<DexForwaderBridgeCall> = {}, fields: Partial<DexForwarderBridgeCall> = {},
): DexForwaderBridgeCall { ): DexForwarderBridgeCall {
return { return {
target: bridgeAddress, target: bridgeAddress,
inputTokenAmount: getRandomInteger(1, '100e18'), inputTokenAmount: getRandomInteger(1, '100e18'),
@ -71,10 +69,10 @@ blockchainTests.resets('DexForwarderBridge unit tests', env => {
} }
describe('bridgeTransferFrom()', () => { describe('bridgeTransferFrom()', () => {
let goodBridgeCalls: DexForwaderBridgeCall[]; let goodBridgeCalls: DexForwarderBridgeCall[];
let revertingBridgeCall: DexForwaderBridgeCall; let revertingBridgeCall: DexForwarderBridgeCall;
let failingBridgeCall: DexForwaderBridgeCall; let failingBridgeCall: DexForwarderBridgeCall;
let allBridgeCalls: DexForwaderBridgeCall[]; let allBridgeCalls: DexForwarderBridgeCall[];
let totalFillableOutputAmount: BigNumber; let totalFillableOutputAmount: BigNumber;
let totalFillableInputAmount: BigNumber; let totalFillableInputAmount: BigNumber;
let recipientOutputBalance: BigNumber; let recipientOutputBalance: BigNumber;
@ -109,10 +107,10 @@ blockchainTests.resets('DexForwarderBridge unit tests', env => {
opts: Partial<{ opts: Partial<{
returnCode: string; returnCode: string;
revertError: string; revertError: string;
callFields: Partial<DexForwaderBridgeCall>; callFields: Partial<DexForwarderBridgeCall>;
outputFillAmount: BigNumber; outputFillAmount: BigNumber;
}>, }>,
): Promise<DexForwaderBridgeCall> { ): Promise<DexForwarderBridgeCall> {
const { returnCode, revertError, callFields, outputFillAmount } = { const { returnCode, revertError, callFields, outputFillAmount } = {
returnCode: BRIDGE_SUCCESS, returnCode: BRIDGE_SUCCESS,
revertError: '', revertError: '',
@ -232,26 +230,6 @@ blockchainTests.resets('DexForwarderBridge unit tests', env => {
expect(currentRecipientOutputBalance).to.bignumber.eq(totalFillableOutputAmount); expect(currentRecipientOutputBalance).to.bignumber.eq(totalFillableOutputAmount);
}); });
it('emits failure events for failing bridge calls', async () => {
const calls = [revertingBridgeCall, failingBridgeCall, ...goodBridgeCalls];
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
const logs = await callBridgeTransferFromAsync({ bridgeData });
verifyEventsFromLogs(
logs,
[revertingBridgeCall, failingBridgeCall].map(c => ({
inputToken,
outputToken,
target: c.target,
inputTokenAmount: c.inputTokenAmount,
outputTokenAmount: c.outputTokenAmount,
})),
DexForwarderBridgeEvents.DexForwarderBridgeCallFailed,
);
});
it("transfers only up to each call's input amount to each bridge", async () => { it("transfers only up to each call's input amount to each bridge", async () => {
const calls = goodBridgeCalls; const calls = goodBridgeCalls;
const bridgeData = dexForwarderBridgeDataEncoder.encode({ const bridgeData = dexForwarderBridgeDataEncoder.encode({
@ -302,19 +280,6 @@ blockchainTests.resets('DexForwarderBridge unit tests', env => {
calls, calls,
}); });
const logs = await callBridgeTransferFromAsync({ bridgeData }); const logs = await callBridgeTransferFromAsync({ bridgeData });
verifyEventsFromLogs(
logs,
[
{
inputToken,
outputToken,
target: badCall.target,
inputTokenAmount: badCall.inputTokenAmount,
outputTokenAmount: badCall.outputTokenAmount,
},
],
TestEvents.DexForwarderBridgeCallFailed,
);
const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled); const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled);
expect(btfs).to.be.length(goodBridgeCalls.length); expect(btfs).to.be.length(goodBridgeCalls.length);
}); });
@ -332,19 +297,6 @@ blockchainTests.resets('DexForwarderBridge unit tests', env => {
calls, calls,
}); });
const logs = await callBridgeTransferFromAsync({ bridgeData }); const logs = await callBridgeTransferFromAsync({ bridgeData });
verifyEventsFromLogs(
logs,
[
{
inputToken,
outputToken,
target: badCall.target,
inputTokenAmount: badCall.inputTokenAmount,
outputTokenAmount: badCall.outputTokenAmount,
},
],
TestEvents.DexForwarderBridgeCallFailed,
);
const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled); const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled);
expect(btfs).to.be.length(goodBridgeCalls.length); expect(btfs).to.be.length(goodBridgeCalls.length);
}); });
@ -365,19 +317,6 @@ blockchainTests.resets('DexForwarderBridge unit tests', env => {
calls, calls,
}); });
const logs = await callBridgeTransferFromAsync({ bridgeData }); const logs = await callBridgeTransferFromAsync({ bridgeData });
verifyEventsFromLogs(
logs,
[
{
inputToken,
outputToken,
target: badCall.target,
inputTokenAmount: badCall.inputTokenAmount,
outputTokenAmount: badCall.outputTokenAmount,
},
],
TestEvents.DexForwarderBridgeCallFailed,
);
const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled); const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled);
expect(btfs).to.be.length(goodBridgeCalls.length); expect(btfs).to.be.length(goodBridgeCalls.length);
}); });