Remove Bancor v1 support from EthereumBridgeAdapter (#724)
This commit is contained in:
parent
c2aed76f2f
commit
34febd728a
@ -1,4 +1,12 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"version": "0.45.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Remove Bancor V1 support"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "0.44.0",
|
"version": "0.44.0",
|
||||||
"changes": [
|
"changes": [
|
||||||
|
@ -125,7 +125,6 @@
|
|||||||
"./contracts/src/transformers/bridges/mixins/MixinAaveV2.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinAaveV2.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinBalancer.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinBalancer.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinBalancerV2Batch.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinBalancerV2Batch.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinBancor.sol",
|
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinBancorV3.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinBancorV3.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinCompound.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinCompound.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinCryptoCom.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinCryptoCom.sol",
|
||||||
|
@ -20,7 +20,6 @@ import "./BridgeProtocols.sol";
|
|||||||
import "./mixins/MixinAaveV2.sol";
|
import "./mixins/MixinAaveV2.sol";
|
||||||
import "./mixins/MixinBalancer.sol";
|
import "./mixins/MixinBalancer.sol";
|
||||||
import "./mixins/MixinBalancerV2Batch.sol";
|
import "./mixins/MixinBalancerV2Batch.sol";
|
||||||
import "./mixins/MixinBancor.sol";
|
|
||||||
import "./mixins/MixinBancorV3.sol";
|
import "./mixins/MixinBancorV3.sol";
|
||||||
import "./mixins/MixinBarter.sol";
|
import "./mixins/MixinBarter.sol";
|
||||||
import "./mixins/MixinCompound.sol";
|
import "./mixins/MixinCompound.sol";
|
||||||
@ -47,7 +46,6 @@ contract EthereumBridgeAdapter is
|
|||||||
MixinAaveV2,
|
MixinAaveV2,
|
||||||
MixinBalancer,
|
MixinBalancer,
|
||||||
MixinBalancerV2Batch,
|
MixinBalancerV2Batch,
|
||||||
MixinBancor,
|
|
||||||
MixinBancorV3,
|
MixinBancorV3,
|
||||||
MixinBarter,
|
MixinBarter,
|
||||||
MixinCompound,
|
MixinCompound,
|
||||||
@ -71,15 +69,7 @@ contract EthereumBridgeAdapter is
|
|||||||
{
|
{
|
||||||
constructor(
|
constructor(
|
||||||
IEtherToken weth
|
IEtherToken weth
|
||||||
)
|
) public MixinBancorV3(weth) MixinCompound(weth) MixinCurve(weth) MixinLido(weth) MixinUniswap(weth) {}
|
||||||
public
|
|
||||||
MixinBancor(weth)
|
|
||||||
MixinBancorV3(weth)
|
|
||||||
MixinCompound(weth)
|
|
||||||
MixinCurve(weth)
|
|
||||||
MixinLido(weth)
|
|
||||||
MixinUniswap(weth)
|
|
||||||
{}
|
|
||||||
|
|
||||||
function _trade(
|
function _trade(
|
||||||
BridgeOrder memory order,
|
BridgeOrder memory order,
|
||||||
@ -154,11 +144,6 @@ contract EthereumBridgeAdapter is
|
|||||||
return (0, true);
|
return (0, true);
|
||||||
}
|
}
|
||||||
boughtAmount = _tradeCryptoCom(buyToken, sellAmount, order.bridgeData);
|
boughtAmount = _tradeCryptoCom(buyToken, sellAmount, order.bridgeData);
|
||||||
} else if (protocolId == BridgeProtocols.BANCOR) {
|
|
||||||
if (dryRun) {
|
|
||||||
return (0, true);
|
|
||||||
}
|
|
||||||
boughtAmount = _tradeBancor(buyToken, sellAmount, order.bridgeData);
|
|
||||||
} else if (protocolId == BridgeProtocols.NERVE) {
|
} else if (protocolId == BridgeProtocols.NERVE) {
|
||||||
if (dryRun) {
|
if (dryRun) {
|
||||||
return (0, true);
|
return (0, true);
|
||||||
|
@ -1,93 +0,0 @@
|
|||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
/*
|
|
||||||
Copyright 2023 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.6.5;
|
|
||||||
pragma experimental ABIEncoderV2;
|
|
||||||
|
|
||||||
import "@0x/contracts-erc20/src/v06/LibERC20TokenV06.sol";
|
|
||||||
import "@0x/contracts-erc20/src/IERC20Token.sol";
|
|
||||||
import "@0x/contracts-erc20/src/IEtherToken.sol";
|
|
||||||
import "../IBridgeAdapter.sol";
|
|
||||||
|
|
||||||
interface IBancorNetwork {
|
|
||||||
function convertByPath(
|
|
||||||
IERC20Token[] calldata _path,
|
|
||||||
uint256 _amount,
|
|
||||||
uint256 _minReturn,
|
|
||||||
address _beneficiary,
|
|
||||||
address _affiliateAccount,
|
|
||||||
uint256 _affiliateFee
|
|
||||||
) external payable returns (uint256);
|
|
||||||
}
|
|
||||||
|
|
||||||
contract MixinBancor {
|
|
||||||
/// @dev Bancor ETH pseudo-address.
|
|
||||||
IERC20Token public constant BANCOR_ETH_ADDRESS = IERC20Token(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
|
|
||||||
IEtherToken private immutable WETH;
|
|
||||||
|
|
||||||
constructor(IEtherToken weth) public {
|
|
||||||
WETH = weth;
|
|
||||||
}
|
|
||||||
|
|
||||||
function _tradeBancor(
|
|
||||||
IERC20Token buyToken,
|
|
||||||
uint256 sellAmount,
|
|
||||||
bytes memory bridgeData
|
|
||||||
) internal returns (uint256 boughtAmount) {
|
|
||||||
// Decode the bridge data.
|
|
||||||
IBancorNetwork bancorNetworkAddress;
|
|
||||||
IERC20Token[] memory path;
|
|
||||||
{
|
|
||||||
address[] memory _path;
|
|
||||||
(bancorNetworkAddress, _path) = abi.decode(bridgeData, (IBancorNetwork, address[]));
|
|
||||||
// To get around `abi.decode()` not supporting interface array types.
|
|
||||||
assembly {
|
|
||||||
path := _path
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
require(path.length >= 2, "MixinBancor/PATH_LENGTH_MUST_BE_AT_LEAST_TWO");
|
|
||||||
require(
|
|
||||||
path[path.length - 1] == buyToken || (path[path.length - 1] == BANCOR_ETH_ADDRESS && buyToken == WETH),
|
|
||||||
"MixinBancor/LAST_ELEMENT_OF_PATH_MUST_MATCH_OUTPUT_TOKEN"
|
|
||||||
);
|
|
||||||
|
|
||||||
uint256 payableAmount = 0;
|
|
||||||
// If it's ETH in the path then withdraw from WETH
|
|
||||||
// The Bancor path will have ETH as the 0xeee address
|
|
||||||
// Bancor expects to be paid in ETH not WETH
|
|
||||||
if (path[0] == BANCOR_ETH_ADDRESS) {
|
|
||||||
WETH.withdraw(sellAmount);
|
|
||||||
payableAmount = sellAmount;
|
|
||||||
} else {
|
|
||||||
// Grant an allowance to the Bancor Network.
|
|
||||||
LibERC20TokenV06.approveIfBelow(path[0], address(bancorNetworkAddress), sellAmount);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert the tokens
|
|
||||||
boughtAmount = bancorNetworkAddress.convertByPath{value: payableAmount}(
|
|
||||||
path, // path originating with source token and terminating in destination token
|
|
||||||
sellAmount, // amount of source token to trade
|
|
||||||
1, // minimum amount of destination token expected to receive
|
|
||||||
address(this), // beneficiary
|
|
||||||
address(0), // affiliateAccount; no fee paid
|
|
||||||
0 // affiliateFee; no fee paid
|
|
||||||
);
|
|
||||||
if (path[path.length - 1] == BANCOR_ETH_ADDRESS) {
|
|
||||||
WETH.deposit{value: boughtAmount}();
|
|
||||||
}
|
|
||||||
|
|
||||||
return boughtAmount;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user