Initial OrderValidator wrapper
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
"watch_without_deps": "yarn pre_build && tsc -w",
|
||||
"build": "yarn pre_build && tsc",
|
||||
"pre_build": "run-s update_artifacts_v2_beta update_artifacts_v2 generate_contract_wrappers copy_artifacts",
|
||||
"generate_contract_wrappers": "abi-gen --abis 'src/artifacts/@(Exchange|DummyERC20Token|DummyERC721Token|ZRXToken|ERC20Token|ERC721Token|WETH9|ERC20Proxy|ERC721Proxy|Forwarder).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers",
|
||||
"generate_contract_wrappers": "abi-gen --abis 'src/artifacts/@(Exchange|DummyERC20Token|DummyERC721Token|ZRXToken|ERC20Token|ERC721Token|WETH9|ERC20Proxy|ERC721Proxy|Forwarder|OrderValidator).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers",
|
||||
"lint": "tslint --project . --exclude **/src/contract_wrappers/**/* --exclude **/lib/**/*",
|
||||
"test:circleci": "run-s test:coverage",
|
||||
"test": "yarn run_mocha",
|
||||
|
||||
@@ -8,6 +8,7 @@ import * as ERC721Proxy from './artifacts/ERC721Proxy.json';
|
||||
import * as ERC721Token from './artifacts/ERC721Token.json';
|
||||
import * as Exchange from './artifacts/Exchange.json';
|
||||
import * as Forwarder from './artifacts/Forwarder.json';
|
||||
import * as OrderValidator from './artifacts/OrderValidator.json';
|
||||
import * as EtherToken from './artifacts/WETH9.json';
|
||||
import * as ZRXToken from './artifacts/ZRXToken.json';
|
||||
|
||||
@@ -22,4 +23,5 @@ export const artifacts = {
|
||||
ERC20Proxy: (ERC20Proxy as any) as ContractArtifact,
|
||||
ERC721Proxy: (ERC721Proxy as any) as ContractArtifact,
|
||||
Forwarder: (Forwarder as any) as ContractArtifact,
|
||||
OrderValidator: (OrderValidator as any) as ContractArtifact,
|
||||
};
|
||||
|
||||
@@ -12,6 +12,7 @@ import { ERC721TokenWrapper } from './contract_wrappers/erc721_token_wrapper';
|
||||
import { EtherTokenWrapper } from './contract_wrappers/ether_token_wrapper';
|
||||
import { ExchangeWrapper } from './contract_wrappers/exchange_wrapper';
|
||||
import { ForwarderWrapper } from './contract_wrappers/forwarder_wrapper';
|
||||
import { OrderValidatorWrapper } from './contract_wrappers/order_validator_wrapper';
|
||||
import { ContractWrappersConfigSchema } from './schemas/contract_wrappers_config_schema';
|
||||
import { contractWrappersPrivateNetworkConfigSchema } from './schemas/contract_wrappers_private_network_config_schema';
|
||||
import { contractWrappersPublicNetworkConfigSchema } from './schemas/contract_wrappers_public_network_config_schema';
|
||||
@@ -52,6 +53,10 @@ export class ContractWrappers {
|
||||
* An instance of the ForwarderWrapper class containing methods for interacting with any Forwarder smart contract.
|
||||
*/
|
||||
public forwarder: ForwarderWrapper;
|
||||
/**
|
||||
* An instance of the OrderValidatorWrapper class containing methods for interacting with any OrderValidator smart contract.
|
||||
*/
|
||||
public orderValidator: OrderValidatorWrapper;
|
||||
|
||||
private _web3Wrapper: Web3Wrapper;
|
||||
/**
|
||||
@@ -116,6 +121,7 @@ export class ContractWrappers {
|
||||
config.forwarderContractAddress,
|
||||
config.zrxContractAddress,
|
||||
);
|
||||
this.orderValidator = new OrderValidatorWrapper(this._web3Wrapper, config.networkId);
|
||||
}
|
||||
/**
|
||||
* Sets a new web3 provider for 0x.js. Updating the provider will stop all
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
import { schemas } from '@0xproject/json-schemas';
|
||||
import { SignedOrder } from '@0xproject/types';
|
||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||
import { ContractAbi } from 'ethereum-types';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { artifacts } from '../artifacts';
|
||||
import { OrdersAndTradersInfo } from '../types';
|
||||
import { assert } from '../utils/assert';
|
||||
|
||||
import { ContractWrapper } from './contract_wrapper';
|
||||
import { OrderValidatorContract } from './generated/order_validator';
|
||||
|
||||
/**
|
||||
* This class includes the functionality related to interacting with the OrderValidator contract.
|
||||
*/
|
||||
export class OrderValidatorWrapper extends ContractWrapper {
|
||||
public abi: ContractAbi = artifacts.OrderValidator.compilerOutput.abi;
|
||||
private _orderValidatorContractIfExists?: OrderValidatorContract;
|
||||
/**
|
||||
* Instantiate OrderValidatorWrapper
|
||||
* @param web3Wrapper Web3Wrapper instance to use
|
||||
* @param networkId Desired networkId
|
||||
*/
|
||||
constructor(web3Wrapper: Web3Wrapper, networkId: number) {
|
||||
super(web3Wrapper, networkId);
|
||||
}
|
||||
/**
|
||||
* Get and object conforming to OrdersAndTradersInfo containing on-chain information of the provided orders and addresses
|
||||
* @return OrdersAndTradersInfo
|
||||
*/
|
||||
public async getOrdersAndTradersInfoAsync(
|
||||
orders: SignedOrder[],
|
||||
takerAddresses: string[],
|
||||
): Promise<OrdersAndTradersInfo> {
|
||||
assert.doesConformToSchema('orders', orders, schemas.signedOrdersSchema);
|
||||
_.forEach(takerAddresses, (takerAddress, index) =>
|
||||
assert.isETHAddressHex(`takerAddresses[${index}]`, takerAddress),
|
||||
);
|
||||
assert.assert(orders.length === takerAddresses.length, 'Expected orders.length to equal takerAddresses.length');
|
||||
const OrderValidatorContractInstance = await this._getOrderValidatorContractAsync();
|
||||
const ordersAndTradersInfo = await OrderValidatorContractInstance.getOrdersAndTradersInfo.callAsync(
|
||||
orders,
|
||||
takerAddresses,
|
||||
);
|
||||
const result = {
|
||||
ordersInfo: ordersAndTradersInfo[0],
|
||||
tradersInfo: ordersAndTradersInfo[1],
|
||||
};
|
||||
return result;
|
||||
}
|
||||
// HACK: We don't want this method to be visible to the other units within that package but not to the end user.
|
||||
// TS doesn't give that possibility and therefore we make it private and access it over an any cast. Because of that tslint sees it as unused.
|
||||
// tslint:disable-next-line:no-unused-variable
|
||||
private _invalidateContractInstance(): void {
|
||||
delete this._orderValidatorContractIfExists;
|
||||
}
|
||||
private async _getOrderValidatorContractAsync(): Promise<OrderValidatorContract> {
|
||||
if (!_.isUndefined(this._orderValidatorContractIfExists)) {
|
||||
return this._orderValidatorContractIfExists;
|
||||
}
|
||||
const [abi, address] = await this._getContractAbiAndAddressFromArtifactsAsync(artifacts.OrderValidator);
|
||||
const contractInstance = new OrderValidatorContract(
|
||||
abi,
|
||||
address,
|
||||
this._web3Wrapper.getProvider(),
|
||||
this._web3Wrapper.getContractDefaults(),
|
||||
);
|
||||
this._orderValidatorContractIfExists = contractInstance;
|
||||
return this._orderValidatorContractIfExists;
|
||||
}
|
||||
}
|
||||
@@ -188,3 +188,19 @@ export enum OrderStatus {
|
||||
FULLY_FILLED,
|
||||
CANCELLED,
|
||||
}
|
||||
|
||||
export interface TraderInfo {
|
||||
makerBalance: BigNumber;
|
||||
makerAllowance: BigNumber;
|
||||
takerBalance: BigNumber;
|
||||
takerAllowance: BigNumber;
|
||||
makerZrxBalance: BigNumber;
|
||||
makerZrxAllowance: BigNumber;
|
||||
takerZrxBalance: BigNumber;
|
||||
takerZrxAllowance: BigNumber;
|
||||
}
|
||||
|
||||
export interface OrdersAndTradersInfo {
|
||||
ordersInfo: OrderInfo[];
|
||||
tradersInfo: TraderInfo[];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user