fix: Update to use KNP getExpectedRateAfterFee (#2629)

* Update to use KNP getExpectedRateAfterFee

* hack: use overrides instead of forking in ganache

* fix: added some tests using overrides

* override sampler

* Overrides in bridge_sampler_mainnet_test

* use getContracts to fake out tests

* chore: supply devUtils address

* feat: specify the call override by default

* CHANGELOGs

* export SamplerOverrides

* fix package.json

* fix: after rebase
This commit is contained in:
Jacob Evans
2020-07-15 14:05:57 +10:00
committed by GitHub
parent ff9c9241d8
commit 762e0aec2d
56 changed files with 610 additions and 234 deletions

View File

@@ -49,7 +49,6 @@ export class ERC20BridgeSamplerContract extends BaseContract {
supportedProvider: SupportedProvider,
txDefaults: Partial<TxData>,
logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact },
devUtilsAddress: string,
): Promise<ERC20BridgeSamplerContract> {
assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [
schemas.addressSchema,
@@ -74,7 +73,6 @@ export class ERC20BridgeSamplerContract extends BaseContract {
provider,
txDefaults,
logDecodeDependenciesAbiOnly,
devUtilsAddress,
);
}
@@ -84,7 +82,6 @@ export class ERC20BridgeSamplerContract extends BaseContract {
supportedProvider: SupportedProvider,
txDefaults: Partial<TxData>,
logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact },
devUtilsAddress: string,
): Promise<ERC20BridgeSamplerContract> {
assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [
schemas.addressSchema,
@@ -115,7 +112,6 @@ export class ERC20BridgeSamplerContract extends BaseContract {
provider,
txDefaults,
logDecodeDependenciesAbiOnly,
devUtilsAddress,
);
}
@@ -125,7 +121,6 @@ export class ERC20BridgeSamplerContract extends BaseContract {
supportedProvider: SupportedProvider,
txDefaults: Partial<TxData>,
logDecodeDependencies: { [contractName: string]: ContractAbi },
devUtilsAddress: string,
): Promise<ERC20BridgeSamplerContract> {
assert.isHexString('bytecode', bytecode);
assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [
@@ -135,14 +130,10 @@ export class ERC20BridgeSamplerContract extends BaseContract {
]);
const provider = providerUtils.standardizeOrThrow(supportedProvider);
const constructorAbi = BaseContract._lookupConstructorAbi(abi);
[devUtilsAddress] = BaseContract._formatABIDataItemList(
constructorAbi.inputs,
[devUtilsAddress],
BaseContract._bigNumberToString,
);
[] = BaseContract._formatABIDataItemList(constructorAbi.inputs, [], BaseContract._bigNumberToString);
const iface = new ethers.utils.Interface(abi);
const deployInfo = iface.deployFunction;
const txData = deployInfo.encode(bytecode, [devUtilsAddress]);
const txData = deployInfo.encode(bytecode, []);
const web3Wrapper = new Web3Wrapper(provider);
const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(
{
@@ -161,7 +152,7 @@ export class ERC20BridgeSamplerContract extends BaseContract {
txDefaults,
logDecodeDependencies,
);
contractInstance.constructorArgs = [devUtilsAddress];
contractInstance.constructorArgs = [];
return contractInstance;
}
@@ -170,18 +161,6 @@ export class ERC20BridgeSamplerContract extends BaseContract {
*/
public static ABI(): ContractAbi {
const abi = [
{
inputs: [
{
name: 'devUtilsAddress',
type: 'address',
},
],
outputs: [],
payable: false,
stateMutability: 'nonpayable',
type: 'constructor',
},
{
constant: true,
inputs: [
@@ -297,6 +276,10 @@ export class ERC20BridgeSamplerContract extends BaseContract {
name: 'orderSignatures',
type: 'bytes[]',
},
{
name: 'devUtilsAddress',
type: 'address',
},
],
name: 'getOrderFillableMakerAssetAmounts',
outputs: [
@@ -378,6 +361,10 @@ export class ERC20BridgeSamplerContract extends BaseContract {
name: 'orderSignatures',
type: 'bytes[]',
},
{
name: 'devUtilsAddress',
type: 'address',
},
],
name: 'getOrderFillableTakerAssetAmounts',
outputs: [
@@ -965,6 +952,7 @@ export class ERC20BridgeSamplerContract extends BaseContract {
* Effectively ignores orders that have empty signatures or
* @param orders Native orders to query.
* @param orderSignatures Signatures for each respective order in `orders`.
* @param devUtilsAddress Address to the DevUtils contract.
* @returns orderFillableMakerAssetAmounts How much maker asset can be filled by each order in &#x60;orders&#x60;.
*/
public getOrderFillableMakerAssetAmounts(
@@ -985,12 +973,14 @@ export class ERC20BridgeSamplerContract extends BaseContract {
takerFeeAssetData: string;
}>,
orderSignatures: string[],
devUtilsAddress: string,
): ContractFunctionObj<BigNumber[]> {
const self = (this as any) as ERC20BridgeSamplerContract;
assert.isArray('orders', orders);
assert.isArray('orderSignatures', orderSignatures);
assert.isString('devUtilsAddress', devUtilsAddress);
const functionSignature =
'getOrderFillableMakerAssetAmounts((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[])';
'getOrderFillableMakerAssetAmounts((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[],address)';
return {
async callAsync(callData: Partial<CallData> = {}, defaultBlock?: BlockParam): Promise<BigNumber[]> {
@@ -1004,7 +994,11 @@ export class ERC20BridgeSamplerContract extends BaseContract {
return abiEncoder.strictDecodeReturnValue<BigNumber[]>(rawCallResult);
},
getABIEncodedTransactionData(): string {
return self._strictEncodeArguments(functionSignature, [orders, orderSignatures]);
return self._strictEncodeArguments(functionSignature, [
orders,
orderSignatures,
devUtilsAddress.toLowerCase(),
]);
},
};
}
@@ -1014,6 +1008,7 @@ export class ERC20BridgeSamplerContract extends BaseContract {
* maker/taker asset amounts (returning 0).
* @param orders Native orders to query.
* @param orderSignatures Signatures for each respective order in `orders`.
* @param devUtilsAddress Address to the DevUtils contract.
* @returns orderFillableTakerAssetAmounts How much taker asset can be filled by each order in &#x60;orders&#x60;.
*/
public getOrderFillableTakerAssetAmounts(
@@ -1034,12 +1029,14 @@ export class ERC20BridgeSamplerContract extends BaseContract {
takerFeeAssetData: string;
}>,
orderSignatures: string[],
devUtilsAddress: string,
): ContractFunctionObj<BigNumber[]> {
const self = (this as any) as ERC20BridgeSamplerContract;
assert.isArray('orders', orders);
assert.isArray('orderSignatures', orderSignatures);
assert.isString('devUtilsAddress', devUtilsAddress);
const functionSignature =
'getOrderFillableTakerAssetAmounts((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[])';
'getOrderFillableTakerAssetAmounts((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[],address)';
return {
async callAsync(callData: Partial<CallData> = {}, defaultBlock?: BlockParam): Promise<BigNumber[]> {
@@ -1053,7 +1050,11 @@ export class ERC20BridgeSamplerContract extends BaseContract {
return abiEncoder.strictDecodeReturnValue<BigNumber[]>(rawCallResult);
},
getABIEncodedTransactionData(): string {
return self._strictEncodeArguments(functionSignature, [orders, orderSignatures]);
return self._strictEncodeArguments(functionSignature, [
orders,
orderSignatures,
devUtilsAddress.toLowerCase(),
]);
},
};
}

View File

@@ -276,6 +276,10 @@ export class IERC20BridgeSamplerContract extends BaseContract {
name: 'orderSignatures',
type: 'bytes[]',
},
{
name: 'devUtilsAddress',
type: 'address',
},
],
name: 'getOrderFillableMakerAssetAmounts',
outputs: [
@@ -357,6 +361,10 @@ export class IERC20BridgeSamplerContract extends BaseContract {
name: 'orderSignatures',
type: 'bytes[]',
},
{
name: 'devUtilsAddress',
type: 'address',
},
],
name: 'getOrderFillableTakerAssetAmounts',
outputs: [
@@ -912,6 +920,7 @@ export class IERC20BridgeSamplerContract extends BaseContract {
* Queries the fillable maker asset amounts of native orders.
* @param orders Native orders to query.
* @param orderSignatures Signatures for each respective order in `orders`.
* @param devUtilsAddress Address to the DevUtils contract.
* @returns orderFillableMakerAssetAmounts How much maker asset can be filled by each order in &#x60;orders&#x60;.
*/
public getOrderFillableMakerAssetAmounts(
@@ -932,12 +941,14 @@ export class IERC20BridgeSamplerContract extends BaseContract {
takerFeeAssetData: string;
}>,
orderSignatures: string[],
devUtilsAddress: string,
): ContractFunctionObj<BigNumber[]> {
const self = (this as any) as IERC20BridgeSamplerContract;
assert.isArray('orders', orders);
assert.isArray('orderSignatures', orderSignatures);
assert.isString('devUtilsAddress', devUtilsAddress);
const functionSignature =
'getOrderFillableMakerAssetAmounts((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[])';
'getOrderFillableMakerAssetAmounts((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[],address)';
return {
async callAsync(callData: Partial<CallData> = {}, defaultBlock?: BlockParam): Promise<BigNumber[]> {
@@ -951,7 +962,11 @@ export class IERC20BridgeSamplerContract extends BaseContract {
return abiEncoder.strictDecodeReturnValue<BigNumber[]>(rawCallResult);
},
getABIEncodedTransactionData(): string {
return self._strictEncodeArguments(functionSignature, [orders, orderSignatures]);
return self._strictEncodeArguments(functionSignature, [
orders,
orderSignatures,
devUtilsAddress.toLowerCase(),
]);
},
};
}
@@ -959,6 +974,7 @@ export class IERC20BridgeSamplerContract extends BaseContract {
* Queries the fillable taker asset amounts of native orders.
* @param orders Native orders to query.
* @param orderSignatures Signatures for each respective order in `orders`.
* @param devUtilsAddress Address to the DevUtils contract.
* @returns orderFillableTakerAssetAmounts How much taker asset can be filled by each order in &#x60;orders&#x60;.
*/
public getOrderFillableTakerAssetAmounts(
@@ -979,12 +995,14 @@ export class IERC20BridgeSamplerContract extends BaseContract {
takerFeeAssetData: string;
}>,
orderSignatures: string[],
devUtilsAddress: string,
): ContractFunctionObj<BigNumber[]> {
const self = (this as any) as IERC20BridgeSamplerContract;
assert.isArray('orders', orders);
assert.isArray('orderSignatures', orderSignatures);
assert.isString('devUtilsAddress', devUtilsAddress);
const functionSignature =
'getOrderFillableTakerAssetAmounts((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[])';
'getOrderFillableTakerAssetAmounts((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[],address)';
return {
async callAsync(callData: Partial<CallData> = {}, defaultBlock?: BlockParam): Promise<BigNumber[]> {
@@ -998,7 +1016,11 @@ export class IERC20BridgeSamplerContract extends BaseContract {
return abiEncoder.strictDecodeReturnValue<BigNumber[]>(rawCallResult);
},
getABIEncodedTransactionData(): string {
return self._strictEncodeArguments(functionSignature, [orders, orderSignatures]);
return self._strictEncodeArguments(functionSignature, [
orders,
orderSignatures,
devUtilsAddress.toLowerCase(),
]);
},
};
}