@0x/contracts-asset-proxy
: Fix typos and remove BridgeTransferFromCallFailed
event from DexForwarderBridge
.
This commit is contained in:
parent
f3c6f26f85
commit
0ccbc7d3d2
@ -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);
|
||||||
|
@ -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([
|
||||||
|
@ -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);
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user